Class: Arel::Visitors::ToSql

Inherits:
Object
  • Object
show all
Defined in:
lib/squeel/adapters/active_record/3.0/compat.rb

Instance Method Summary collapse

Instance Method Details

#column_cacheObject

This isn’t really very cachey at all. Good enough for now.



97
98
99
100
101
102
103
104
105
# File 'lib/squeel/adapters/active_record/3.0/compat.rb', line 97

def column_cache
  @column_cache ||= Hash.new do |hash, key|
    Hash[
      @engine.connection.columns(key, "#{key} Columns").map do |c|
        [c.name, c]
      end
    ]
  end
end

#column_for(attr) ⇒ Object



89
90
91
92
93
94
# File 'lib/squeel/adapters/active_record/3.0/compat.rb', line 89

def column_for attr
  name    = attr.name.to_s
  table   = attr.relation.table_name

  column_cache[table][name]
end

#visit_Arel_Nodes_And(o) ⇒ Object



117
118
119
# File 'lib/squeel/adapters/active_record/3.0/compat.rb', line 117

def visit_Arel_Nodes_And o
  o.children.map { |x| visit x }.join ' AND '
end

#visit_Arel_Nodes_InfixOperation(o) ⇒ Object



107
108
109
# File 'lib/squeel/adapters/active_record/3.0/compat.rb', line 107

def visit_Arel_Nodes_InfixOperation o
  "#{visit o.left} #{o.operator} #{visit o.right}"
end

#visit_Arel_Nodes_NamedFunction(o) ⇒ Object



111
112
113
114
115
# File 'lib/squeel/adapters/active_record/3.0/compat.rb', line 111

def visit_Arel_Nodes_NamedFunction o
  "#{o.name}(#{o.distinct ? 'DISTINCT ' : ''}#{o.expressions.map { |x|
    visit x
  }.join(', ')})#{o.alias ? " AS #{visit o.alias}" : ''}"
end

#visit_Arel_Nodes_Not(o) ⇒ Object



121
122
123
# File 'lib/squeel/adapters/active_record/3.0/compat.rb', line 121

def visit_Arel_Nodes_Not o
  "NOT (#{visit o.expr})"
end

#visit_Arel_Nodes_Values(o) ⇒ Object



125
126
127
128
129
130
131
132
133
# File 'lib/squeel/adapters/active_record/3.0/compat.rb', line 125

def visit_Arel_Nodes_Values o
  "VALUES (#{o.expressions.zip(o.columns).map { |value, attr|
    if Nodes::SqlLiteral === value
      visit_Arel_Nodes_SqlLiteral value
    else
      quote(value, attr && column_for(attr))
    end
  }.join ', '})"
end