mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
93d72131bc
If we add the casting node to the ast at build time, then we can avoid doing the lookup at visit time.
69 lines
1.9 KiB
Ruby
69 lines
1.9 KiB
Ruby
require 'helper'
|
|
require 'yaml'
|
|
|
|
module Arel
|
|
module Nodes
|
|
describe 'sql literal' do
|
|
before do
|
|
@visitor = Visitors::ToSql.new Table.engine.connection
|
|
end
|
|
|
|
describe 'sql' do
|
|
it 'makes a sql literal node' do
|
|
sql = Arel.sql 'foo'
|
|
sql.must_be_kind_of Arel::Nodes::SqlLiteral
|
|
end
|
|
end
|
|
|
|
describe 'count' do
|
|
it 'makes a count node' do
|
|
node = SqlLiteral.new('*').count
|
|
@visitor.accept(node).must_be_like %{ COUNT(*) }
|
|
end
|
|
|
|
it 'makes a distinct node' do
|
|
node = SqlLiteral.new('*').count true
|
|
@visitor.accept(node).must_be_like %{ COUNT(DISTINCT *) }
|
|
end
|
|
end
|
|
|
|
describe 'equality' do
|
|
it 'makes an equality node' do
|
|
node = SqlLiteral.new('foo').eq(1)
|
|
@visitor.accept(node).must_be_like %{ foo = 1 }
|
|
end
|
|
|
|
it 'is equal with equal contents' do
|
|
array = [SqlLiteral.new('foo'), SqlLiteral.new('foo')]
|
|
assert_equal 1, array.uniq.size
|
|
end
|
|
|
|
it 'is not equal with different contents' do
|
|
array = [SqlLiteral.new('foo'), SqlLiteral.new('bar')]
|
|
assert_equal 2, array.uniq.size
|
|
end
|
|
end
|
|
|
|
describe 'grouped "or" equality' do
|
|
it 'makes a grouping node with an or node' do
|
|
node = SqlLiteral.new('foo').eq_any([1,2])
|
|
@visitor.accept(node).must_be_like %{ (foo = 1 OR foo = 2) }
|
|
end
|
|
end
|
|
|
|
describe 'grouped "and" equality' do
|
|
it 'makes a grouping node with an or node' do
|
|
node = SqlLiteral.new('foo').eq_all([1,2])
|
|
@visitor.accept(node).must_be_like %{ (foo = 1 AND foo = 2) }
|
|
end
|
|
end
|
|
|
|
describe 'serialization' do
|
|
it 'serializes into YAML' do
|
|
yaml_literal = SqlLiteral.new('foo').to_yaml
|
|
assert_equal('foo', YAML.load(yaml_literal))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|