class Arel::Visitors::ToSql
Public Class Methods
new(connection)
click to toggle source
Calls superclass method
Arel::Visitors::Visitor.new
# File lib/arel/visitors/to_sql.rb, line 67 def initialize connection super() @connection = connection end
Public Instance Methods
compile(node, &block)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 72 def compile node, &block accept(node, Arel::Collectors::SQLString.new, &block).value end
Private Instance Methods
aggregate(name, o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 811 def aggregate name, o, collector collector << "#{name}(" if o.distinct collector << "DISTINCT " end collector = inject_join(o.expressions, collector, ", ") << ")" if o.alias collector << " AS " visit o.alias, collector else collector end end
build_subselect(key, o)
click to toggle source
FIXME: we should probably have a 2-pass visitor for this
# File lib/arel/visitors/to_sql.rb, line 90 def build_subselect key, o stmt = Nodes::SelectStatement.new core = stmt.cores.first core.froms = o.relation core.wheres = o.wheres core.projections = [key] stmt.limit = o.limit stmt.orders = o.orders stmt end
collect_nodes_for(nodes, collector, spacer, connector = COMMA)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 242 def collect_nodes_for nodes, collector, spacer, connector = COMMA unless nodes.empty? collector << spacer len = nodes.length - 1 nodes.each_with_index do |x, i| collector = visit(x, collector) collector << connector unless len == i end end end
infix_value(o, collector, value)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 805 def infix_value o, collector, value collector = visit o.left, collector collector << value visit o.right, collector end
inject_join(list, collector, join_str)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 794 def inject_join list, collector, join_str len = list.length - 1 list.each_with_index.inject(collector) { |c, (x,i)| if i == len visit x, c else visit(x, c) << join_str end } end
literal(o, collector;)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 714 def literal o, collector; collector << o.to_s; end
maybe_visit(thing, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 788 def maybe_visit thing, collector return collector unless thing collector << " " visit thing, collector end
quote(value)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 773 def quote value return value if Arel::Nodes::SqlLiteral === value @connection.quote value end
quote_column_name(name)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 783 def quote_column_name name return name if Arel::Nodes::SqlLiteral === name @connection.quote_column_name(name) end
quote_table_name(name)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 778 def quote_table_name name return name if Arel::Nodes::SqlLiteral === name @connection.quote_table_name(name) end
quoted(o, a)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 725 def quoted o, a if a && a.able_to_type_cast? quote(a.type_cast_for_database(o)) else quote(o) end end
unsupported(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 733 def unsupported o, collector raise UnsupportedVisitError.new(o) end
visit_Arel_Attributes_Attribute(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 703 def visit_Arel_Attributes_Attribute o, collector join_name = o.relation.table_alias || o.relation.name collector << "#{quote_table_name join_name}.#{quote_column_name o.name}" end
visit_Arel_Nodes_And(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 614 def visit_Arel_Nodes_And o, collector inject_join o.children, collector, " AND " end
visit_Arel_Nodes_As(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 663 def visit_Arel_Nodes_As o, collector collector = visit o.left, collector collector << " AS " visit o.right, collector end
visit_Arel_Nodes_Ascending(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 410 def visit_Arel_Nodes_Ascending o, collector visit(o.expr, collector) << " ASC" end
visit_Arel_Nodes_Assignment(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 624 def visit_Arel_Nodes_Assignment o, collector case o.right when Arel::Nodes::UnqualifiedColumn, Arel::Attributes::Attribute, Arel::Nodes::BindParam collector = visit o.left, collector collector << " = " visit o.right, collector else collector = visit o.left, collector collector << " = " collector << quote(o.right).to_s end end
visit_Arel_Nodes_Avg(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 456 def visit_Arel_Nodes_Avg o, collector aggregate "AVG", o, collector end
visit_Arel_Nodes_Between(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 466 def visit_Arel_Nodes_Between o, collector collector = visit o.left, collector collector << " BETWEEN " visit o.right, collector end
visit_Arel_Nodes_Bin(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 253 def visit_Arel_Nodes_Bin o, collector visit o.expr, collector end
visit_Arel_Nodes_BindParam(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 716 def visit_Arel_Nodes_BindParam o, collector collector.add_bind(o) { "?" } end
visit_Arel_Nodes_Case(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 669 def visit_Arel_Nodes_Case o, collector collector << "CASE " if o.case visit o.case, collector collector << " " end o.conditions.each do |condition| visit condition, collector collector << " " end if o.default visit o.default, collector collector << " " end collector << "END" end
visit_Arel_Nodes_Casted(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 152 def visit_Arel_Nodes_Casted o, collector collector << quoted(o.val, o.attribute).to_s end
visit_Arel_Nodes_Count(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 440 def visit_Arel_Nodes_Count o, collector aggregate "COUNT", o, collector end
visit_Arel_Nodes_CurrentRow(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 361 def visit_Arel_Nodes_CurrentRow o, collector collector << "CURRENT ROW" end
visit_Arel_Nodes_DeleteStatement(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 78 def visit_Arel_Nodes_DeleteStatement o, collector collector << 'DELETE FROM ' collector = visit o.relation, collector if o.wheres.any? collector << WHERE collector = inject_join o.wheres, collector, AND end maybe_visit o.limit, collector end
visit_Arel_Nodes_Descending(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 414 def visit_Arel_Nodes_Descending o, collector visit(o.expr, collector) << " DESC" end
visit_Arel_Nodes_Distinct(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 257 def visit_Arel_Nodes_Distinct o, collector collector << DISTINCT end
visit_Arel_Nodes_DistinctOn(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 261 def visit_Arel_Nodes_DistinctOn o, collector raise NotImplementedError, 'DISTINCT ON not implemented for this db' end
visit_Arel_Nodes_DoesNotMatch(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 508 def visit_Arel_Nodes_DoesNotMatch o, collector collector = visit o.left, collector collector << " NOT LIKE " collector = visit o.right, collector if o.escape collector << ' ESCAPE ' visit o.escape, collector else collector end end
visit_Arel_Nodes_Else(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 693 def visit_Arel_Nodes_Else o, collector collector << "ELSE " visit o.expr, collector end
visit_Arel_Nodes_Equality(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 637 def visit_Arel_Nodes_Equality o, collector right = o.right collector = visit o.left, collector if right.nil? collector << " IS NULL" else collector << " = " visit right, collector end end
visit_Arel_Nodes_Except(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 290 def visit_Arel_Nodes_Except o, collector collector << "( " infix_value(o, collector, " EXCEPT ") << " )" end
visit_Arel_Nodes_Exists(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 141 def visit_Arel_Nodes_Exists o, collector collector << "EXISTS (" collector = visit(o.expressions, collector) << ")" if o.alias collector << " AS " visit o.alias, collector else collector end end
visit_Arel_Nodes_Extract(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 435 def visit_Arel_Nodes_Extract o, collector collector << "EXTRACT(#{o.field.to_s.upcase} FROM " visit(o.expr, collector) << ")" end
visit_Arel_Nodes_False(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 164 def visit_Arel_Nodes_False o, collector collector << "FALSE" end
visit_Arel_Nodes_Following(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 351 def visit_Arel_Nodes_Following o, collector collector = if o.expr visit o.expr, collector else collector << "UNBOUNDED" end collector << " FOLLOWING" end
visit_Arel_Nodes_FullOuterJoin(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 543 def visit_Arel_Nodes_FullOuterJoin o, collector collector << "FULL OUTER JOIN " collector = visit o.left, collector collector << SPACE visit o.right, collector end
visit_Arel_Nodes_GreaterThan(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 478 def visit_Arel_Nodes_GreaterThan o, collector collector = visit o.left, collector collector << " > " visit o.right, collector end
visit_Arel_Nodes_GreaterThanOrEqual(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 472 def visit_Arel_Nodes_GreaterThanOrEqual o, collector collector = visit o.left, collector collector << " >= " visit o.right, collector end
visit_Arel_Nodes_Group(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 418 def visit_Arel_Nodes_Group o, collector visit o.expr, collector end
visit_Arel_Nodes_Grouping(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 397 def visit_Arel_Nodes_Grouping o, collector if o.expr.is_a? Nodes::Grouping visit(o.expr, collector) else collector << "(" visit(o.expr, collector) << ")" end end
visit_Arel_Nodes_In(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 593 def visit_Arel_Nodes_In o, collector if Array === o.right && o.right.empty? collector << '1=0' else collector = visit o.left, collector collector << " IN (" visit(o.right, collector) << ")" end end
visit_Arel_Nodes_InfixOperation(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 752 def visit_Arel_Nodes_InfixOperation o, collector collector = visit o.left, collector collector << " #{o.operator} " visit o.right, collector end
visit_Arel_Nodes_InnerJoin(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 564 def visit_Arel_Nodes_InnerJoin o, collector collector << "INNER JOIN " collector = visit o.left, collector if o.right collector << SPACE visit(o.right, collector) else collector end end
visit_Arel_Nodes_InsertStatement(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 123 def visit_Arel_Nodes_InsertStatement o, collector collector << "INSERT INTO " collector = visit o.relation, collector if o.columns.any? collector << " (#{o.columns.map { |x| quote_column_name x.name }.join ', '})" end if o.values maybe_visit o.values, collector elsif o.select maybe_visit o.select, collector else collector end end
visit_Arel_Nodes_Intersect(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 285 def visit_Arel_Nodes_Intersect o, collector collector << "( " infix_value(o, collector, " INTERSECT ") << " )" end
visit_Arel_Nodes_JoinSource(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 520 def visit_Arel_Nodes_JoinSource o, collector if o.left collector = visit o.left, collector end if o.right.any? collector << SPACE if o.left collector = inject_join o.right, collector, SPACE end collector end
visit_Arel_Nodes_LessThan(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 490 def visit_Arel_Nodes_LessThan o, collector collector = visit o.left, collector collector << " < " visit o.right, collector end
visit_Arel_Nodes_LessThanOrEqual(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 484 def visit_Arel_Nodes_LessThanOrEqual o, collector collector = visit o.left, collector collector << " <= " visit o.right, collector end
visit_Arel_Nodes_Limit(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 383 def visit_Arel_Nodes_Limit o, collector collector << "LIMIT " visit o.expr, collector end
visit_Arel_Nodes_Lock(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 393 def visit_Arel_Nodes_Lock o, collector visit o.expr, collector end
visit_Arel_Nodes_Matches(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 496 def visit_Arel_Nodes_Matches o, collector collector = visit o.left, collector collector << " LIKE " collector = visit o.right, collector if o.escape collector << ' ESCAPE ' visit o.escape, collector else collector end end
visit_Arel_Nodes_Max(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 448 def visit_Arel_Nodes_Max o, collector aggregate "MAX", o, collector end
visit_Arel_Nodes_Min(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 452 def visit_Arel_Nodes_Min o, collector aggregate "MIN", o, collector end
visit_Arel_Nodes_NamedFunction(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 422 def visit_Arel_Nodes_NamedFunction o, collector collector << o.name collector << "(" collector << "DISTINCT " if o.distinct collector = inject_join(o.expressions, collector, ", ") << ")" if o.alias collector << " AS " visit o.alias, collector else collector end end
visit_Arel_Nodes_NamedWindow(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 295 def visit_Arel_Nodes_NamedWindow o, collector collector << quote_column_name(o.name) collector << " AS " visit_Arel_Nodes_Window o, collector end
visit_Arel_Nodes_Not(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 580 def visit_Arel_Nodes_Not o, collector collector << "NOT (" visit(o.expr, collector) << ")" end
visit_Arel_Nodes_NotEqual(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 650 def visit_Arel_Nodes_NotEqual o, collector right = o.right collector = visit o.left, collector if right.nil? collector << " IS NOT NULL" else collector << " != " visit right, collector end end
visit_Arel_Nodes_NotIn(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 603 def visit_Arel_Nodes_NotIn o, collector if Array === o.right && o.right.empty? collector << '1=1' else collector = visit o.left, collector collector << " NOT IN (" collector = visit o.right, collector collector << ")" end end
visit_Arel_Nodes_NotRegexp(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 535 def visit_Arel_Nodes_NotRegexp o, collector raise NotImplementedError, '!~ not implemented for this db' end
visit_Arel_Nodes_Offset(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 378 def visit_Arel_Nodes_Offset o, collector collector << "OFFSET " visit o.expr, collector end
visit_Arel_Nodes_On(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 575 def visit_Arel_Nodes_On o, collector collector << "ON " visit o.expr, collector end
visit_Arel_Nodes_Or(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 618 def visit_Arel_Nodes_Or o, collector collector = visit o.left, collector collector << " OR " visit o.right, collector end
visit_Arel_Nodes_OuterJoin(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 550 def visit_Arel_Nodes_OuterJoin o, collector collector << "LEFT OUTER JOIN " collector = visit o.left, collector collector << " " visit o.right, collector end
visit_Arel_Nodes_Over(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 365 def visit_Arel_Nodes_Over o, collector case o.right when nil visit(o.left, collector) << " OVER ()" when Arel::Nodes::SqlLiteral infix_value o, collector, " OVER " when String, Symbol visit(o.left, collector) << " OVER #{quote_column_name o.right.to_s}" else infix_value o, collector, " OVER " end end
visit_Arel_Nodes_Preceding(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 341 def visit_Arel_Nodes_Preceding o, collector collector = if o.expr visit o.expr, collector else collector << "UNBOUNDED" end collector << " PRECEDING" end
visit_Arel_Nodes_Quoted(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 156 def visit_Arel_Nodes_Quoted o, collector collector << quoted(o.expr, nil).to_s end
visit_Arel_Nodes_Range(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 332 def visit_Arel_Nodes_Range o, collector if o.expr collector << "RANGE " visit o.expr, collector else collector << "RANGE" end end
visit_Arel_Nodes_Regexp(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 531 def visit_Arel_Nodes_Regexp o, collector raise NotImplementedError, '~ not implemented for this db' end
visit_Arel_Nodes_RightOuterJoin(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 557 def visit_Arel_Nodes_RightOuterJoin o, collector collector << "RIGHT OUTER JOIN " collector = visit o.left, collector collector << SPACE visit o.right, collector end
visit_Arel_Nodes_Rows(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 323 def visit_Arel_Nodes_Rows o, collector if o.expr collector << "ROWS " visit o.expr, collector else collector << "ROWS" end end
visit_Arel_Nodes_SelectCore(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 217 def visit_Arel_Nodes_SelectCore o, collector collector << "SELECT" collector = maybe_visit o.top, collector collector = maybe_visit o.set_quantifier, collector collect_nodes_for o.projections, collector, SPACE if o.source && !o.source.empty? collector << " FROM " collector = visit o.source, collector end collect_nodes_for o.wheres, collector, WHERE, AND collect_nodes_for o.groups, collector, GROUP_BY unless o.havings.empty? collector << " HAVING " inject_join o.havings, collector, AND end collect_nodes_for o.windows, collector, WINDOW collector end
visit_Arel_Nodes_SelectOptions(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 211 def visit_Arel_Nodes_SelectOptions o, collector collector = maybe_visit o.limit, collector collector = maybe_visit o.offset, collector collector = maybe_visit o.lock, collector end
visit_Arel_Nodes_SelectStatement(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 187 def visit_Arel_Nodes_SelectStatement o, collector if o.with collector = visit o.with, collector collector << SPACE end collector = o.cores.inject(collector) { |c,x| visit_Arel_Nodes_SelectCore(x, c) } unless o.orders.empty? collector << ORDER_BY len = o.orders.length - 1 o.orders.each_with_index { |x, i| collector = visit(x, collector) collector << COMMA unless len == i } end visit_Arel_Nodes_SelectOptions(o, collector) collector end
visit_Arel_Nodes_StringJoin(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 539 def visit_Arel_Nodes_StringJoin o, collector visit o.left, collector end
visit_Arel_Nodes_Sum(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 444 def visit_Arel_Nodes_Sum o, collector aggregate "SUM", o, collector end
visit_Arel_Nodes_TableAlias(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 460 def visit_Arel_Nodes_TableAlias o, collector collector = visit o.relation, collector collector << " " collector << quote_table_name(o.name) end
visit_Arel_Nodes_Top(o, collector)
click to toggle source
FIXME: this does nothing on most databases, but does on MSSQL
# File lib/arel/visitors/to_sql.rb, line 389 def visit_Arel_Nodes_Top o, collector collector end
visit_Arel_Nodes_True(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 160 def visit_Arel_Nodes_True o, collector collector << "TRUE" end
visit_Arel_Nodes_UnaryOperation(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 763 def visit_Arel_Nodes_UnaryOperation o, collector collector << " #{o.operator} " visit o.expr, collector end
visit_Arel_Nodes_Union(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 275 def visit_Arel_Nodes_Union o, collector collector << "( " infix_value(o, collector, " UNION ") << " )" end
visit_Arel_Nodes_UnionAll(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 280 def visit_Arel_Nodes_UnionAll o, collector collector << "( " infix_value(o, collector, " UNION ALL ") << " )" end
visit_Arel_Nodes_UnqualifiedColumn(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 698 def visit_Arel_Nodes_UnqualifiedColumn o, collector collector << "#{quote_column_name o.name}" collector end
visit_Arel_Nodes_UpdateStatement(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 101 def visit_Arel_Nodes_UpdateStatement o, collector if o.orders.empty? && o.limit.nil? wheres = o.wheres else wheres = [Nodes::In.new(o.key, [build_subselect(o.key, o)])] end collector << "UPDATE " collector = visit o.relation, collector unless o.values.empty? collector << " SET " collector = inject_join o.values, collector, ", " end unless wheres.empty? collector << " WHERE " collector = inject_join wheres, collector, " AND " end collector end
visit_Arel_Nodes_Values(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 168 def visit_Arel_Nodes_Values o, collector collector << "VALUES (" len = o.expressions.length - 1 o.expressions.each_with_index { |value, i| case value when Nodes::SqlLiteral, Nodes::BindParam collector = visit value, collector else collector << quote(value).to_s end unless i == len collector << COMMA end } collector << ")" end
visit_Arel_Nodes_When(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 686 def visit_Arel_Nodes_When o, collector collector << "WHEN " visit o.left, collector collector << " THEN " visit o.right, collector end
visit_Arel_Nodes_Window(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 301 def visit_Arel_Nodes_Window o, collector collector << "(" if o.partitions.any? collector << "PARTITION BY " collector = inject_join o.partitions, collector, ", " end if o.orders.any? collector << SPACE if o.partitions.any? collector << "ORDER BY " collector = inject_join o.orders, collector, ", " end if o.framing collector << SPACE if o.partitions.any? or o.orders.any? collector = visit o.framing, collector end collector << ")" end
visit_Arel_Nodes_With(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 265 def visit_Arel_Nodes_With o, collector collector << "WITH " inject_join o.children, collector, COMMA end
visit_Arel_Nodes_WithRecursive(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 270 def visit_Arel_Nodes_WithRecursive o, collector collector << "WITH RECURSIVE " inject_join o.children, collector, COMMA end
visit_Arel_SelectManager(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 406 def visit_Arel_SelectManager o, collector collector << "(#{o.to_sql.rstrip})" end
visit_Arel_Table(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 585 def visit_Arel_Table o, collector if o.table_alias collector << "#{quote_table_name o.name} #{quote_table_name o.table_alias}" else collector << quote_table_name(o.name) end end
visit_Array(o, collector)
click to toggle source
# File lib/arel/visitors/to_sql.rb, line 768 def visit_Array o, collector inject_join o, collector, ", " end
Also aliased as: visit_Set