From 7b8944cb7662509d7ba6869ff571518ac7f848ea Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Wed, 8 Sep 2010 14:36:10 -0700 Subject: adding a sum node --- lib/arel/attributes/attribute.rb | 4 ++++ lib/arel/nodes.rb | 1 + lib/arel/nodes/sum.rb | 12 ++++++++++++ lib/arel/visitors/to_sql.rb | 5 +++++ 4 files changed, 22 insertions(+) create mode 100644 lib/arel/nodes/sum.rb (limited to 'lib/arel') diff --git a/lib/arel/attributes/attribute.rb b/lib/arel/attributes/attribute.rb index 464d78188a..af9bbdd478 100644 --- a/lib/arel/attributes/attribute.rb +++ b/lib/arel/attributes/attribute.rb @@ -12,6 +12,10 @@ module Arel def count distinct = false Nodes::Count.new [self], distinct end + + def sum + Nodes::Sum.new [self], Nodes::SqlLiteral.new('sum_id') + end end class String < Attribute; end diff --git a/lib/arel/nodes.rb b/lib/arel/nodes.rb index bf7ae830d0..24a71c54a2 100644 --- a/lib/arel/nodes.rb +++ b/lib/arel/nodes.rb @@ -5,6 +5,7 @@ require 'arel/nodes/and' require 'arel/nodes/in' require 'arel/nodes/count' +require 'arel/nodes/sum' require 'arel/nodes/sql_literal' require 'arel/nodes/select_core' require 'arel/nodes/select_statement' diff --git a/lib/arel/nodes/sum.rb b/lib/arel/nodes/sum.rb new file mode 100644 index 0000000000..ecd66aba7a --- /dev/null +++ b/lib/arel/nodes/sum.rb @@ -0,0 +1,12 @@ +module Arel + module Nodes + class Sum + attr_accessor :expressions, :alias + + def initialize expr, aliaz = nil + @expressions = expr + @alias = aliaz + end + end + end +end diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb index f45bbab793..ada8aa6a16 100644 --- a/lib/arel/visitors/to_sql.rb +++ b/lib/arel/visitors/to_sql.rb @@ -69,6 +69,11 @@ module Arel }.join(', ')})#{o.alias ? " AS #{visit o.alias}" : ''}" end + def visit_Arel_Nodes_Sum o + "SUM(#{o.expressions.map { |x| + visit x }.join(', ')})#{o.alias ? " AS #{visit o.alias}" : ''}" + end + def visit_Arel_Nodes_TableAlias o "#{visit o.relation} #{quote_table_name o.name}" end -- cgit v1.2.3