diff options
author | Bradford Folkens <bfolkens@gmail.com> | 2012-02-29 09:47:28 -0600 |
---|---|---|
committer | Tamir Duberstein <tamird@squareup.com> | 2015-02-23 09:17:30 -0800 |
commit | 65135d00a854edfd1684f5163db8e68fdb956ae0 (patch) | |
tree | c76a238671cd9761c2250b9f903cdfc2b0b3254d /lib | |
parent | aac9da257f291ad8d2d4f914528881c240848bb2 (diff) | |
download | rails-65135d00a854edfd1684f5163db8e68fdb956ae0.tar.gz rails-65135d00a854edfd1684f5163db8e68fdb956ae0.tar.bz2 rails-65135d00a854edfd1684f5163db8e68fdb956ae0.zip |
Delete should respect 'limit'
Conflicts:
lib/arel/visitors/to_sql.rb
Diffstat (limited to 'lib')
-rw-r--r-- | lib/arel/crud.rb | 1 | ||||
-rw-r--r-- | lib/arel/delete_manager.rb | 5 | ||||
-rw-r--r-- | lib/arel/nodes/delete_statement.rb | 2 | ||||
-rw-r--r-- | lib/arel/visitors/to_sql.rb | 6 |
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 |