1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

build expression not(nil) as IS NOT NULL

This commit is contained in:
Santiago Pastorino 2010-04-21 20:21:07 -03:00
parent 233ee77f45
commit a7a5027f4f
5 changed files with 90 additions and 1 deletions

View file

@ -5,6 +5,10 @@ module Arel
'IS'
end
def not_predicate_sql
'IS NOT'
end
NilClass.send(:include, self)
end
end

View file

@ -9,6 +9,10 @@ module Arel
'='
end
def not_predicate_sql
'!='
end
Object.send(:include, self)
end
end

View file

@ -27,7 +27,9 @@ module Arel
end
class Not < Binary
def predicate_sql; '!=' end
def predicate_sql
operand2.not_predicate_sql
end
end
class GreaterThanOrEqualTo < Binary

View file

@ -34,6 +34,10 @@ module Arel
value.equality_predicate_sql
end
def not_predicate_sql
value.not_predicate_sql
end
def to_sql(formatter = Sql::WhereCondition.new(relation))
formatter.value value
end

View file

@ -0,0 +1,75 @@
require 'spec_helper'
module Arel
module Predicates
describe Equality do
before do
@relation1 = Arel::Table.new(:users)
@relation2 = Arel::Table.new(:photos)
@attribute1 = @relation1[:id]
@attribute2 = @relation2[:user_id]
end
describe '#to_sql' do
describe 'when relating to a non-nil value' do
it "manufactures a not predicate" do
sql = Not.new(@attribute1, @attribute2).to_sql
adapter_is :mysql do
sql.should be_like(%Q{`users`.`id` != `photos`.`user_id`})
end
adapter_is :oracle do
sql.should be_like(%Q{"USERS"."ID" != "PHOTOS"."USER_ID"})
end
adapter_is_not :mysql, :oracle do
sql.should be_like(%Q{"users"."id" != "photos"."user_id"})
end
end
end
describe 'when relation to a nil value' do
before do
@nil = nil
end
it "manufactures an is null predicate" do
sql = Not.new(@attribute1, @nil).to_sql
adapter_is :mysql do
sql.should be_like(%Q{`users`.`id` IS NOT NULL})
end
adapter_is :oracle do
sql.should be_like(%Q{"USERS"."ID" IS NOT NULL})
end
adapter_is_not :mysql, :oracle do
sql.should be_like(%Q{"users"."id" IS NOT NULL})
end
end
end
describe "when relating to a nil Value" do
it "manufactures an IS NULL predicate" do
value = nil.bind(@relation1)
sql = Not.new(@attribute1, value).to_sql
adapter_is :mysql do
sql.should be_like(%Q{`users`.`id` IS NOT NULL})
end
adapter_is :oracle do
sql.should be_like(%Q{"USERS"."ID" IS NOT NULL})
end
adapter_is_not :mysql, :oracle do
sql.should be_like(%Q{"users"."id" IS NOT NULL})
end
end
end
end
end
end
end