diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2010-08-23 10:14:02 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2010-08-23 10:14:02 -0700 |
commit | 2579fec805f23903dd6c4f1726198e010f5a9a54 (patch) | |
tree | 6dfbfbe4829a1a3f0c6e92e773d1f470bf111cf1 /lib/arel | |
parent | a3b8ef8375056cd3b6a8cea49dec671f2a8f6c41 (diff) | |
download | rails-2579fec805f23903dd6c4f1726198e010f5a9a54.tar.gz rails-2579fec805f23903dd6c4f1726198e010f5a9a54.tar.bz2 rails-2579fec805f23903dd6c4f1726198e010f5a9a54.zip |
adding count nodes
Diffstat (limited to 'lib/arel')
-rw-r--r-- | lib/arel/nodes.rb | 1 | ||||
-rw-r--r-- | lib/arel/nodes/count.rb | 12 | ||||
-rw-r--r-- | lib/arel/nodes/sql_literal.rb | 3 | ||||
-rw-r--r-- | lib/arel/visitors/to_sql.rb | 4 |
4 files changed, 20 insertions, 0 deletions
diff --git a/lib/arel/nodes.rb b/lib/arel/nodes.rb index 67568b5fd4..98fc045690 100644 --- a/lib/arel/nodes.rb +++ b/lib/arel/nodes.rb @@ -3,6 +3,7 @@ require 'arel/nodes/equality' require 'arel/nodes/or' require 'arel/nodes/in' +require 'arel/nodes/count' require 'arel/nodes/sql_literal' require 'arel/nodes/select_core' require 'arel/nodes/select_statement' diff --git a/lib/arel/nodes/count.rb b/lib/arel/nodes/count.rb new file mode 100644 index 0000000000..b7c4b60948 --- /dev/null +++ b/lib/arel/nodes/count.rb @@ -0,0 +1,12 @@ +module Arel + module Nodes + class Count + attr_accessor :expressions, :distinct + + def initialize expr, distinct = false + @expressions = expr + @distinct = distinct + end + end + end +end diff --git a/lib/arel/nodes/sql_literal.rb b/lib/arel/nodes/sql_literal.rb index 53ff376071..526d088449 100644 --- a/lib/arel/nodes/sql_literal.rb +++ b/lib/arel/nodes/sql_literal.rb @@ -1,6 +1,9 @@ module Arel module Nodes class SqlLiteral < String + def count distinct = false + Count.new [self], distinct + end end end end diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb index 55ed53177e..05c33ddb8b 100644 --- a/lib/arel/visitors/to_sql.rb +++ b/lib/arel/visitors/to_sql.rb @@ -58,6 +58,10 @@ module Arel ].compact.join ' ' end + def visit_Arel_Nodes_Count o + "COUNT(#{o.distinct ? 'DISTINCT ' : ''}#{o.expressions.map { |x| visit x }.join(', ')})" + end + def visit_Arel_Nodes_TableAlias o "#{visit o.relation} #{quote_table_name o.name}" end |