1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/lib/arel/update_manager.rb
Aaron Patterson 93d72131bc add the casting node to the AST at build time
If we add the casting node to the ast at build time, then we can avoid
doing the lookup at visit time.
2014-03-24 16:26:09 -07:00

57 lines
957 B
Ruby

module Arel
class UpdateManager < Arel::TreeManager
def initialize engine
super
@ast = Nodes::UpdateStatement.new
@ctx = @ast
end
def take limit
@ast.limit = Nodes::Limit.new(Nodes.build_quoted(limit)) if limit
self
end
def key= key
@ast.key = Nodes.build_quoted(key)
end
def key
@ast.key
end
def order *expr
@ast.orders = expr
self
end
###
# UPDATE +table+
def table table
@ast.relation = table
self
end
def wheres= exprs
@ast.wheres = exprs
end
def where expr
@ast.wheres << expr
self
end
def set values
if String === values
@ast.values = [values]
else
@ast.values = values.map { |column,value|
Nodes::Assignment.new(
Nodes::UnqualifiedColumn.new(column),
value
)
}
end
self
end
end
end