diff options
Diffstat (limited to 'lib/arel/visitors')
-rw-r--r-- | lib/arel/visitors/to_sql.rb | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb new file mode 100644 index 0000000000..ba92ca7ef1 --- /dev/null +++ b/lib/arel/visitors/to_sql.rb @@ -0,0 +1,38 @@ +module Arel + module Visitors + class ToSql + def initialize engine + @engine = engine + @connection = nil + end + + def accept object + @connection = @engine.connection + visit object + end + + private + def visit_Arel_Nodes_Equality o + "#{visit o.left} = #{visit o.right}" + end + + def visit_Arel_Attributes_Integer o + "#{quote_table_name o.relation.name}.#{quote_column_name o.name}" + end + + def visit_Fixnum o; o end + + def visit object + send :"visit_#{object.class.name.gsub('::', '_')}", object + end + + def quote_table_name name + @connection.quote_table_name name + end + + def quote_column_name name + @connection.quote_column_name name + end + end + end +end |