Class: Arel::Visitors::ToSql
Direct Known Subclasses
MySQL
Instance Method Summary
collapse
Methods inherited from Visitor
#visit_with_delta_attribute
Instance Method Details
#visit_Arel_Nodes_Assignment_with_deltas(o) ⇒ Object
Also known as:
visit_Arel_Nodes_Assignment
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# File 'lib/delta_attributes3_2/to_sql.rb', line 5
def visit_Arel_Nodes_Assignment_with_deltas o
return visit_Arel_Nodes_Assignment_without_deltas o unless o.is_a?(Arel::Nodes::DeltaAttribute)
return visit_Arel_Nodes_Assignment_without_deltas o.arel_node unless o.valid?
old_value = o.old_value
new_value = o.new_value
delta_string = "#{visit o.arel_node.left} "
delta_string << (old_value > new_value ? "-" : "+")
delta_string << " #{(old_value - new_value).abs}"
"#{visit o.arel_node.left} = #{delta_string}"
end
|
#visit_Arel_Nodes_UpdateStatement(o) ⇒ Object
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/delta_attributes3_2/to_sql.rb', line 22
def visit_Arel_Nodes_UpdateStatement o
if o.orders.empty? && o.limit.nil?
wheres = o.wheres
else
key = o.key
unless key
warn("(\#{caller.first}) Using UpdateManager without setting UpdateManager#key is\ndeprecated and support will be removed in ARel 4.0.0. Please set the primary\nkey on UpdateManager using UpdateManager#key=\n eowarn\n key = o.relation.primary_key\n end\n\n wheres = [Nodes::In.new(key, [build_subselect(key, o)])]\n end\n\n [\n \"UPDATE \#{visit o.relation}\",\n (\"SET \#{o.values_changed.map { |value| visit value }.join ', '}\" unless o.values_changed.empty?),\n (\"WHERE \#{wheres.map { |x| visit x }.join ' AND '}\" unless wheres.empty?),\n ].compact.join ' '\nend\n") if $VERBOSE
|