Add IS NOT, NOT IN, NOT LIKE

This commit is contained in:
Loic Nageleisen 2017-11-21 13:59:01 +01:00
parent 000e7f2ae2
commit 422defeecd
2 changed files with 23 additions and 0 deletions

View file

@ -132,6 +132,7 @@ module Rebel::SQL
end end
end end
alias != ne alias != ne
alias is_not ne
def lt(n) def lt(n)
Raw.new("#{self} < #{Rebel::SQL.name_or_value(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)})") Raw.new("#{self} IN (#{Rebel::SQL.values(*v)})")
end end
def not_in(*v)
Raw.new("#{self} NOT IN (#{Rebel::SQL.values(*v)})")
end
def like(n) def like(n)
Raw.new("#{self} LIKE #{Rebel::SQL.value(n)}") Raw.new("#{self} LIKE #{Rebel::SQL.value(n)}")
end end
def not_like(n)
Raw.new("#{self} NOT LIKE #{Rebel::SQL.value(n)}")
end
end end
@identifier_quote = '"' @identifier_quote = '"'

View file

@ -40,6 +40,12 @@ class TestRaw < Minitest::Test
assert_sql('"foo" = "bar"') { name(:foo).is(name(:bar)) } assert_sql('"foo" = "bar"') { name(:foo).is(name(:bar)) }
end 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 def test_eq
assert_sql('"foo" IS NULL') { name(:foo).eq(nil) } assert_sql('"foo" IS NULL') { name(:foo).eq(nil) }
assert_sql('"foo" IS NULL') { name(:foo) == 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) } assert_sql('"foo" IN (1, 2, 3)') { name(:foo).in(1, 2, 3) }
end end
def test_not_in
assert_sql('"foo" NOT IN (1, 2, 3)') { name(:foo).not_in(1, 2, 3) }
end
def test_like def test_like
assert_sql(%("foo" LIKE '%bar%')) { name(:foo).like('%bar%') } assert_sql(%("foo" LIKE '%bar%')) { name(:foo).like('%bar%') }
end end
def test_not_like
assert_sql(%("foo" NOT LIKE '%bar%')) { name(:foo).not_like('%bar%') }
end
def test_where 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 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)) } 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)) }