aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/arel/crud.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/lib/arel/crud.rb')
-rw-r--r--activerecord/lib/arel/crud.rb42
1 files changed, 42 insertions, 0 deletions
diff --git a/activerecord/lib/arel/crud.rb b/activerecord/lib/arel/crud.rb
new file mode 100644
index 0000000000..2d10432205
--- /dev/null
+++ b/activerecord/lib/arel/crud.rb
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+module Arel
+ ###
+ # FIXME hopefully we can remove this
+ module Crud
+ def compile_update values, pk
+ um = UpdateManager.new
+
+ if Nodes::SqlLiteral === values
+ relation = @ctx.from
+ else
+ relation = values.first.first.relation
+ end
+ um.key = pk
+ um.table relation
+ um.set values
+ um.take @ast.limit.expr if @ast.limit
+ um.order(*@ast.orders)
+ um.wheres = @ctx.wheres
+ um
+ end
+
+ def compile_insert values
+ im = create_insert
+ im.insert values
+ im
+ end
+
+ def create_insert
+ InsertManager.new
+ end
+
+ def compile_delete
+ dm = DeleteManager.new
+ dm.take @ast.limit.expr if @ast.limit
+ dm.wheres = @ctx.wheres
+ dm.from @ctx.froms
+ dm
+ end
+
+ end
+end