aboutsummaryrefslogtreecommitdiffstats
path: root/lib/arel
diff options
context:
space:
mode:
Diffstat (limited to 'lib/arel')
-rw-r--r--lib/arel/nodes/lock.rb4
-rw-r--r--lib/arel/select_manager.rb2
-rw-r--r--lib/arel/visitors/mysql.rb6
-rw-r--r--lib/arel/visitors/postgresql.rb6
4 files changed, 15 insertions, 3 deletions
diff --git a/lib/arel/nodes/lock.rb b/lib/arel/nodes/lock.rb
index e5fb258e26..f4eaf125e0 100644
--- a/lib/arel/nodes/lock.rb
+++ b/lib/arel/nodes/lock.rb
@@ -1,6 +1,10 @@
module Arel
module Nodes
class Lock < Arel::Nodes::Node
+ attr_reader :locking
+ def initialize locking = true
+ @locking = locking
+ end
end
end
end
diff --git a/lib/arel/select_manager.rb b/lib/arel/select_manager.rb
index b4103144fe..fce6ca17d8 100644
--- a/lib/arel/select_manager.rb
+++ b/lib/arel/select_manager.rb
@@ -40,7 +40,7 @@ module Arel
def lock locking = true
# FIXME: do we even need to store this? If locking is +false+ shouldn't
# we just remove the node from the AST?
- @ast.lock = Nodes::Lock.new
+ @ast.lock = Nodes::Lock.new(locking)
self
end
diff --git a/lib/arel/visitors/mysql.rb b/lib/arel/visitors/mysql.rb
index e90161eee4..8f9c3cc809 100644
--- a/lib/arel/visitors/mysql.rb
+++ b/lib/arel/visitors/mysql.rb
@@ -3,7 +3,11 @@ module Arel
class MySQL < Arel::Visitors::ToSql
private
def visit_Arel_Nodes_Lock o
- "FOR UPDATE"
+ if o.locking.is_a?(String)
+ o.locking
+ else
+ "FOR UPDATE"
+ end
end
###
diff --git a/lib/arel/visitors/postgresql.rb b/lib/arel/visitors/postgresql.rb
index 0e82a703ca..45e7349fd3 100644
--- a/lib/arel/visitors/postgresql.rb
+++ b/lib/arel/visitors/postgresql.rb
@@ -3,7 +3,11 @@ module Arel
class PostgreSQL < Arel::Visitors::ToSql
private
def visit_Arel_Nodes_Lock o
- "FOR UPDATE"
+ if o.locking.is_a?(String)
+ o.locking
+ else
+ "FOR UPDATE"
+ end
end
def visit_Arel_Nodes_SelectStatement o