1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/test/visitors/test_mysql.rb
2011-11-19 18:57:36 -08:00

55 lines
1.7 KiB
Ruby

require 'helper'
module Arel
module Visitors
describe 'the mysql visitor' do
before do
@visitor = MySQL.new Table.engine.connection
end
it 'squashes parenthesis on multiple unions' do
subnode = Nodes::Union.new 'left', 'right'
node = Nodes::Union.new subnode, 'topright'
assert_equal 1, @visitor.accept(node).scan('(').length
subnode = Nodes::Union.new 'left', 'right'
node = Nodes::Union.new 'topleft', subnode
assert_equal 1, @visitor.accept(node).scan('(').length
end
###
# :'(
# http://dev.mysql.com/doc/refman/5.0/en/select.html#id3482214
it 'defaults limit to 18446744073709551615' do
stmt = Nodes::SelectStatement.new
stmt.offset = Nodes::Offset.new(1)
sql = @visitor.accept(stmt)
sql.must_be_like "SELECT FROM DUAL LIMIT 18446744073709551615 OFFSET 1"
end
it "should escape LIMIT" do
sc = Arel::Nodes::UpdateStatement.new
sc.limit = Nodes::Limit.new("omg")
assert_equal("UPDATE NULL LIMIT 'omg'", @visitor.accept(sc))
end
it 'uses DUAL for empty from' do
stmt = Nodes::SelectStatement.new
sql = @visitor.accept(stmt)
sql.must_be_like "SELECT FROM DUAL"
end
describe 'locking' do
it 'defaults to FOR UPDATE when locking' do
node = Nodes::Lock.new(Arel.sql('FOR UPDATE'))
@visitor.accept(node).must_be_like "FOR UPDATE"
end
it 'allows a custom string to be used as a lock' do
node = Nodes::Lock.new(Arel.sql('LOCK IN SHARE MODE'))
@visitor.accept(node).must_be_like "LOCK IN SHARE MODE"
end
end
end
end
end