diff --git a/lib/rebel/sql.rb b/lib/rebel/sql.rb index a64fc3b..9d39164 100644 --- a/lib/rebel/sql.rb +++ b/lib/rebel/sql.rb @@ -132,6 +132,7 @@ module Rebel::SQL end end alias != ne + alias is_not ne def lt(n) Raw.new("#{self} < #{Rebel::SQL.name_or_value(n)}") @@ -157,9 +158,17 @@ module Rebel::SQL Raw.new("#{self} IN (#{Rebel::SQL.values(*v)})") end + def not_in(*v) + Raw.new("#{self} NOT IN (#{Rebel::SQL.values(*v)})") + end + def like(n) Raw.new("#{self} LIKE #{Rebel::SQL.value(n)}") end + + def not_like(n) + Raw.new("#{self} NOT LIKE #{Rebel::SQL.value(n)}") + end end @identifier_quote = '"' diff --git a/test/test_raw.rb b/test/test_raw.rb index 1909f79..0906735 100644 --- a/test/test_raw.rb +++ b/test/test_raw.rb @@ -40,6 +40,12 @@ class TestRaw < Minitest::Test assert_sql('"foo" = "bar"') { name(:foo).is(name(:bar)) } end + def test_is_not + assert_sql('"foo" IS NOT NULL') { name(:foo).is_not(nil) } + assert_sql('"foo" != 42') { name(:foo).is_not(42) } + assert_sql('"foo" != "bar"') { name(:foo).is_not(name(:bar)) } + end + def test_eq assert_sql('"foo" IS NULL') { name(:foo).eq(nil) } assert_sql('"foo" IS NULL') { name(:foo) == nil } @@ -78,10 +84,18 @@ class TestRaw < Minitest::Test assert_sql('"foo" IN (1, 2, 3)') { name(:foo).in(1, 2, 3) } end + def test_not_in + assert_sql('"foo" NOT IN (1, 2, 3)') { name(:foo).not_in(1, 2, 3) } + end + def test_like assert_sql(%("foo" LIKE '%bar%')) { name(:foo).like('%bar%') } end + def test_not_like + assert_sql(%("foo" NOT LIKE '%bar%')) { name(:foo).not_like('%bar%') } + end + def test_where assert_sql('WHERE "foo" = 1 AND "bar" = 2 AND "baz" = 3') { where?(foo: 1, bar: 2, baz: 3) } assert_sql('WHERE ("foo" = 1 OR "bar" = 2) AND "baz" = 3') { where?(name(:foo).eq(1).or(name(:bar).eq(2)), name(:baz).eq(3)) }