diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2015-02-23 22:16:50 -0300 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2015-02-23 22:16:50 -0300 |
commit | b91dcb23af5917d8a62afc8a5a72780aaf11f64b (patch) | |
tree | b0fd958a2a7cdb947ffb8ce1e933c531941fea3a /lib/arel/visitors | |
parent | aac9da257f291ad8d2d4f914528881c240848bb2 (diff) | |
parent | d86e20ccbea226bb6e42da508bc040fd03ab473f (diff) | |
download | rails-b91dcb23af5917d8a62afc8a5a72780aaf11f64b.tar.gz rails-b91dcb23af5917d8a62afc8a5a72780aaf11f64b.tar.bz2 rails-b91dcb23af5917d8a62afc8a5a72780aaf11f64b.zip |
Merge pull request #356 from tamird/limited-delete
Limited delete
Diffstat (limited to 'lib/arel/visitors')
-rw-r--r-- | lib/arel/visitors/mssql.rb | 17 | ||||
-rw-r--r-- | lib/arel/visitors/to_sql.rb | 10 |
2 files changed, 22 insertions, 5 deletions
diff --git a/lib/arel/visitors/mssql.rb b/lib/arel/visitors/mssql.rb index 7c65ad33f2..92362a0c5f 100644 --- a/lib/arel/visitors/mssql.rb +++ b/lib/arel/visitors/mssql.rb @@ -66,6 +66,23 @@ module Arel end end + def visit_Arel_Nodes_DeleteStatement o, collector + collector << 'DELETE ' + if o.limit + collector << 'TOP (' + visit o.limit.expr, collector + collector << ') ' + end + collector << 'FROM ' + collector = visit o.relation, collector + if o.wheres.any? + collector << ' WHERE ' + inject_join o.wheres, collector, AND + else + collector + end + end + def determine_order_by orders, x if orders.any? orders diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb index 7dfa86a575..ba176a552c 100644 --- a/lib/arel/visitors/to_sql.rb +++ b/lib/arel/visitors/to_sql.rb @@ -74,14 +74,14 @@ module Arel end def visit_Arel_Nodes_DeleteStatement o, collector - collector << "DELETE FROM " + collector << 'DELETE FROM ' collector = visit o.relation, collector if o.wheres.any? - collector << " WHERE " - inject_join o.wheres, collector, AND - else - collector + collector << ' WHERE ' + 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 |