diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2011-01-04 20:27:34 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2011-01-04 20:27:34 -0800 |
commit | f0c4e3713d72a18a4100f85e263014f6e56bfad3 (patch) | |
tree | ccdcde4adb5ebfc4920daff19aa8ad38477b5caf /lib/arel/visitors | |
parent | dd1a65456fbfdc1f2a337aca535576d84145dcb6 (diff) | |
download | rails-f0c4e3713d72a18a4100f85e263014f6e56bfad3.tar.gz rails-f0c4e3713d72a18a4100f85e263014f6e56bfad3.tar.bz2 rails-f0c4e3713d72a18a4100f85e263014f6e56bfad3.zip |
Added Arel::Nodes::NamedFunction for representing generic SQL functions
Diffstat (limited to 'lib/arel/visitors')
-rw-r--r-- | lib/arel/visitors/depth_first.rb | 8 | ||||
-rw-r--r-- | lib/arel/visitors/dot.rb | 25 | ||||
-rw-r--r-- | lib/arel/visitors/to_sql.rb | 6 |
3 files changed, 32 insertions, 7 deletions
diff --git a/lib/arel/visitors/depth_first.rb b/lib/arel/visitors/depth_first.rb index ed95cad472..914b2d1999 100644 --- a/lib/arel/visitors/depth_first.rb +++ b/lib/arel/visitors/depth_first.rb @@ -28,6 +28,7 @@ module Arel def function o visit o.expressions visit o.alias + visit o.distinct end alias :visit_Arel_Nodes_Avg :function alias :visit_Arel_Nodes_Exists :function @@ -35,6 +36,13 @@ module Arel alias :visit_Arel_Nodes_Min :function alias :visit_Arel_Nodes_Sum :function + def visit_Arel_Nodes_NamedFunction o + visit o.name + visit o.expressions + visit o.distinct + visit o.alias + end + def visit_Arel_Nodes_Count o visit o.expressions visit o.alias diff --git a/lib/arel/visitors/dot.rb b/lib/arel/visitors/dot.rb index 3c4fe12d1f..92d05c7b67 100644 --- a/lib/arel/visitors/dot.rb +++ b/lib/arel/visitors/dot.rb @@ -38,13 +38,6 @@ module Arel visit_edge o, "relation" end - def visit_Arel_Nodes_Sum o - visit_edge o, "expressions" - visit_edge o, "alias" - end - alias :visit_Arel_Nodes_Max :visit_Arel_Nodes_Sum - alias :visit_Arel_Nodes_Avg :visit_Arel_Nodes_Sum - def visit_Arel_Nodes_Count o visit_edge o, "expressions" visit_edge o, "distinct" @@ -82,6 +75,24 @@ module Arel alias :visit_Arel_Nodes_Top :unary alias :visit_Arel_Nodes_UnqualifiedColumn :unary + def function o + visit_edge o, "expressions" + visit_edge o, "distinct" + visit_edge o, "alias" + end + alias :visit_Arel_Nodes_Exists :function + alias :visit_Arel_Nodes_Min :function + alias :visit_Arel_Nodes_Max :function + alias :visit_Arel_Nodes_Avg :function + alias :visit_Arel_Nodes_Sum :function + + def visit_Arel_Nodes_NamedFunction o + visit_edge o, "name" + visit_edge o, "expressions" + visit_edge o, "distinct" + visit_edge o, "alias" + end + def visit_Arel_Nodes_InsertStatement o visit_edge o, "relation" visit_edge o, "columns" diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb index 4eae5a9ae5..d5534384f8 100644 --- a/lib/arel/visitors/to_sql.rb +++ b/lib/arel/visitors/to_sql.rb @@ -183,6 +183,12 @@ eowarn visit o.expr end + 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 + def visit_Arel_Nodes_Count o "COUNT(#{o.distinct ? 'DISTINCT ' : ''}#{o.expressions.map { |x| visit x |