diff --git a/lib/rebel/sql.rb b/lib/rebel/sql.rb index 2a09898..eb9854a 100644 --- a/lib/rebel/sql.rb +++ b/lib/rebel/sql.rb @@ -278,6 +278,7 @@ module Rebel::SQL when String then raw "'#{escape_str(v)}'" when Integer then raw v.to_s when TrueClass, FalseClass then raw(v ? 'TRUE' : 'FALSE') + when Date, Time, DateTime then value(v.iso8601) when nil then raw 'NULL' else raise NotImplementedError, v.inspect end diff --git a/test/test_raw.rb b/test/test_raw.rb index 3d2b930..8956874 100644 --- a/test/test_raw.rb +++ b/test/test_raw.rb @@ -80,4 +80,16 @@ class TestRaw < Minitest::Test def test_function assert_str_equal(Rebel::SQL.function('COALESCE', :foo, 0), 'COALESCE("foo", 0)') end + + def test_value + assert_str_equal(Rebel::SQL.value(Rebel::SQL.raw("'FOO'")), "'FOO'") + assert_str_equal(Rebel::SQL.value('FOO'), "'FOO'") + assert_str_equal(Rebel::SQL.value(1), '1') + assert_str_equal(Rebel::SQL.value(true), 'TRUE') + assert_str_equal(Rebel::SQL.value(false), 'FALSE') + assert_str_equal(Rebel::SQL.value(Date.new(2016, 12, 31)), "'2016-12-31'") + assert_str_equal(Rebel::SQL.value(Time.utc(2016, 12, 31, 23, 59, 59)), "'2016-12-31T23:59:59Z'") + assert_str_equal(Rebel::SQL.value(DateTime.new(2016, 12, 31, 23, 59, 59)), "'2016-12-31T23:59:59+00:00'") + assert_str_equal(Rebel::SQL.value(nil), 'NULL') + end end