aboutsummaryrefslogtreecommitdiffstats
path: root/lib/active_relation/relations/insertion_relation.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/active_relation/relations/insertion_relation.rb')
-rw-r--r--lib/active_relation/relations/insertion_relation.rb29
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/active_relation/relations/insertion_relation.rb b/lib/active_relation/relations/insertion_relation.rb
new file mode 100644
index 0000000000..84752d13f9
--- /dev/null
+++ b/lib/active_relation/relations/insertion_relation.rb
@@ -0,0 +1,29 @@
+class InsertionRelation < CompoundRelation
+ attr_reader :relation, :tuple
+
+ def initialize(relation, tuple)
+ @relation, @tuple = relation, tuple
+ end
+
+ def to_sql(builder = InsertBuilder.new)
+ builder.call do
+ insert
+ into table
+ columns do
+ tuple.keys.each { |attribute| attribute.to_sql(self) }
+ end
+ values do
+ inserts.each { |insert| insert.to_sql(self) }
+ end
+ end
+ end
+
+ def ==(other)
+ relation == other.relation and tuple == other.tuple
+ end
+
+ protected
+ def inserts
+ relation.inserts + [tuple]
+ end
+end \ No newline at end of file