diff options
Diffstat (limited to 'lib/arel/engines/sql/relations/writes.rb')
-rw-r--r-- | lib/arel/engines/sql/relations/writes.rb | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/arel/engines/sql/relations/writes.rb b/lib/arel/engines/sql/relations/writes.rb new file mode 100644 index 0000000000..f1a9bfd2ac --- /dev/null +++ b/lib/arel/engines/sql/relations/writes.rb @@ -0,0 +1,39 @@ +module Arel + class Deletion < Compound + def to_sql(formatter = nil) + build_query \ + "DELETE", + "FROM #{table_sql}", + ("WHERE #{wheres.collect(&:to_sql).join('\n\tAND ')}" unless wheres.blank? ), + ("LIMIT #{taken}" unless taken.blank? ) + end + end + + class Insert < Compound + def to_sql(formatter = nil) + build_query \ + "INSERT", + "INTO #{table_sql}", + "(#{record.keys.collect { |key| engine.quote_column_name(key.name) }.join(', ')})", + "VALUES (#{record.collect { |key, value| key.format(value) }.join(', ')})" + end + end + + class Update < Compound + def to_sql(formatter = nil) + build_query \ + "UPDATE #{table_sql} SET", + assignment_sql, + ("WHERE #{wheres.collect(&:to_sql).join('\n\tAND ')}" unless wheres.blank? ), + ("LIMIT #{taken}" unless taken.blank? ) + end + + protected + + def assignment_sql + assignments.collect do |attribute, value| + "#{engine.quote_column_name(attribute.name)} = #{attribute.format(value)}" + end.join(",\n") + end + end +end |