aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/arel/crud.rb1
-rw-r--r--lib/arel/delete_manager.rb5
-rw-r--r--lib/arel/nodes/delete_statement.rb2
-rw-r--r--lib/arel/visitors/to_sql.rb6
4 files changed, 11 insertions, 3 deletions
diff --git a/lib/arel/crud.rb b/lib/arel/crud.rb
index 2dfe27445c..d310c7381f 100644
--- a/lib/arel/crud.rb
+++ b/lib/arel/crud.rb
@@ -31,6 +31,7 @@ module Arel
def compile_delete
dm = DeleteManager.new
+ dm.take @ast.limit.expr if @ast.limit
dm.wheres = @ctx.wheres
dm.from @ctx.froms
dm
diff --git a/lib/arel/delete_manager.rb b/lib/arel/delete_manager.rb
index af33c60740..20e988e01f 100644
--- a/lib/arel/delete_manager.rb
+++ b/lib/arel/delete_manager.rb
@@ -11,6 +11,11 @@ module Arel
self
end
+ def take limit
+ @ast.limit = Nodes::Limit.new(Nodes.build_quoted(limit)) if limit
+ self
+ end
+
def wheres= list
@ast.wheres = list
end
diff --git a/lib/arel/nodes/delete_statement.rb b/lib/arel/nodes/delete_statement.rb
index 3bac8225ec..8aaf8ca0b6 100644
--- a/lib/arel/nodes/delete_statement.rb
+++ b/lib/arel/nodes/delete_statement.rb
@@ -1,6 +1,8 @@
module Arel
module Nodes
class DeleteStatement < Arel::Nodes::Binary
+ attr_accessor :limit
+
alias :relation :left
alias :relation= :left=
alias :wheres :right
diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb
index 7dfa86a575..6084f5746c 100644
--- a/lib/arel/visitors/to_sql.rb
+++ b/lib/arel/visitors/to_sql.rb
@@ -78,10 +78,10 @@ module Arel
collector = visit o.relation, collector
if o.wheres.any?
collector << " WHERE "
- inject_join o.wheres, collector, AND
- else
- collector
+ collector = inject_join o.wheres, collector, AND
end
+
+ maybe_visit o.limit, collector
end
# FIXME: we should probably have a 2-pass visitor for this