aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2011-08-26 10:23:11 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2011-08-26 10:23:11 -0700
commit6c7575f8e8e7b741c2ca30aff86fe566ee4d361f (patch)
tree246d9abe8c1d4a428c450276ef25d67d06161827
parent2aac990e4d68cc3cbf86ecc9565723b07f22c962 (diff)
parent481ccefedd407c1f8941596b03e72cfe35c42d41 (diff)
downloadrails-6c7575f8e8e7b741c2ca30aff86fe566ee4d361f.tar.gz
rails-6c7575f8e8e7b741c2ca30aff86fe566ee4d361f.tar.bz2
rails-6c7575f8e8e7b741c2ca30aff86fe566ee4d361f.zip
Merge pull request #78 from ebeigarts/master
Support locking by default and disable it only for SQLite
-rw-r--r--lib/arel/visitors/mysql.rb4
-rw-r--r--lib/arel/visitors/oracle.rb4
-rw-r--r--lib/arel/visitors/postgresql.rb3
-rw-r--r--lib/arel/visitors/sqlite.rb5
-rw-r--r--lib/arel/visitors/to_sql.rb3
-rw-r--r--test/test_select_manager.rb2
-rw-r--r--test/visitors/test_sqlite.rb5
7 files changed, 12 insertions, 14 deletions
diff --git a/lib/arel/visitors/mysql.rb b/lib/arel/visitors/mysql.rb
index 70166a15c5..ee8483372a 100644
--- a/lib/arel/visitors/mysql.rb
+++ b/lib/arel/visitors/mysql.rb
@@ -28,10 +28,6 @@ module Arel
"BINARY #{visit o.expr}"
end
- def visit_Arel_Nodes_Lock o
- visit o.expr
- end
-
###
# :'(
# http://dev.mysql.com/doc/refman/5.0/en/select.html#id3482214
diff --git a/lib/arel/visitors/oracle.rb b/lib/arel/visitors/oracle.rb
index 43a382886c..375f7dbfe9 100644
--- a/lib/arel/visitors/oracle.rb
+++ b/lib/arel/visitors/oracle.rb
@@ -3,10 +3,6 @@ module Arel
class Oracle < Arel::Visitors::ToSql
private
- def visit_Arel_Nodes_Lock o
- visit o.expr
- end
-
def visit_Arel_Nodes_SelectStatement o
o = order_hacks(o)
diff --git a/lib/arel/visitors/postgresql.rb b/lib/arel/visitors/postgresql.rb
index bbcefe8a8d..812710181c 100644
--- a/lib/arel/visitors/postgresql.rb
+++ b/lib/arel/visitors/postgresql.rb
@@ -2,9 +2,6 @@ module Arel
module Visitors
class PostgreSQL < Arel::Visitors::ToSql
private
- def visit_Arel_Nodes_Lock o
- visit o.expr
- end
def visit_Arel_Nodes_Matches o
"#{visit o.left} ILIKE #{visit o.right}"
diff --git a/lib/arel/visitors/sqlite.rb b/lib/arel/visitors/sqlite.rb
index 237ae913bb..2a509e95b5 100644
--- a/lib/arel/visitors/sqlite.rb
+++ b/lib/arel/visitors/sqlite.rb
@@ -2,6 +2,11 @@ module Arel
module Visitors
class SQLite < Arel::Visitors::ToSql
private
+
+ # Locks are not supported in SQLite
+ def visit_Arel_Nodes_Lock o
+ end
+
def visit_Arel_Nodes_SelectStatement o
o.limit = Arel::Nodes::Limit.new(-1) if o.offset && !o.limit
super
diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb
index d424f8602e..b414234766 100644
--- a/lib/arel/visitors/to_sql.rb
+++ b/lib/arel/visitors/to_sql.rb
@@ -200,9 +200,8 @@ key on UpdateManager using UpdateManager#key=
""
end
- # FIXME: this does nothing on SQLLite3, but should do things on other
- # databases.
def visit_Arel_Nodes_Lock o
+ visit o.expr
end
def visit_Arel_Nodes_Grouping o
diff --git a/test/test_select_manager.rb b/test/test_select_manager.rb
index 6603102a3a..7e9099d0d0 100644
--- a/test/test_select_manager.rb
+++ b/test/test_select_manager.rb
@@ -454,7 +454,7 @@ module Arel
it 'adds a lock node' do
table = Table.new :users
mgr = table.from table
- mgr.lock.to_sql.must_be_like %{ SELECT FROM "users" }
+ mgr.lock.to_sql.must_be_like %{ SELECT FROM "users" FOR UPDATE }
end
end
diff --git a/test/visitors/test_sqlite.rb b/test/visitors/test_sqlite.rb
index 5b81ea90c5..c06f554ea4 100644
--- a/test/visitors/test_sqlite.rb
+++ b/test/visitors/test_sqlite.rb
@@ -13,6 +13,11 @@ module Arel
sql = @visitor.accept(stmt)
sql.must_be_like "SELECT LIMIT -1 OFFSET 1"
end
+
+ it 'does not support locking' do
+ node = Nodes::Lock.new(Arel.sql('FOR UPDATE'))
+ @visitor.accept(node).must_be_nil
+ end
end
end
end