aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmilio Tagua <miloops@gmail.com>2010-09-11 11:34:18 +0800
committerAaron Patterson <aaron.patterson@gmail.com>2010-09-11 13:18:20 +0800
commit5daafa8e959acc64fc19e9522470282ac0f25f33 (patch)
tree7ca526824f312ac79ca71e491d9df7ea86b5aca7
parent8ce904933db3ec9884194f07881581ec0cc8281e (diff)
downloadrails-5daafa8e959acc64fc19e9522470282ac0f25f33.tar.gz
rails-5daafa8e959acc64fc19e9522470282ac0f25f33.tar.bz2
rails-5daafa8e959acc64fc19e9522470282ac0f25f33.zip
Add Min node.
-rw-r--r--lib/arel/attributes/attribute.rb4
-rw-r--r--lib/arel/nodes.rb1
-rw-r--r--lib/arel/nodes/min.rb6
-rw-r--r--lib/arel/visitors/to_sql.rb5
-rw-r--r--spec/arel/attributes/attribute_spec.rb7
5 files changed, 23 insertions, 0 deletions
diff --git a/lib/arel/attributes/attribute.rb b/lib/arel/attributes/attribute.rb
index 617112f681..34c1f45ba6 100644
--- a/lib/arel/attributes/attribute.rb
+++ b/lib/arel/attributes/attribute.rb
@@ -25,6 +25,10 @@ module Arel
Nodes::Max.new [self], Nodes::SqlLiteral.new('max_id')
end
+ def minimum
+ Nodes::Min.new [self], Nodes::SqlLiteral.new('min_id')
+ end
+
def average
Nodes::Avg.new [self], Nodes::SqlLiteral.new('avg_id')
end
diff --git a/lib/arel/nodes.rb b/lib/arel/nodes.rb
index 7510214cdf..3ffc81d7df 100644
--- a/lib/arel/nodes.rb
+++ b/lib/arel/nodes.rb
@@ -15,6 +15,7 @@ require 'arel/nodes/values'
require 'arel/nodes/offset'
require 'arel/nodes/sum'
require 'arel/nodes/max'
+require 'arel/nodes/min'
require 'arel/nodes/avg'
require 'arel/nodes/having'
require 'arel/nodes/sql_literal'
diff --git a/lib/arel/nodes/min.rb b/lib/arel/nodes/min.rb
new file mode 100644
index 0000000000..bdc1371858
--- /dev/null
+++ b/lib/arel/nodes/min.rb
@@ -0,0 +1,6 @@
+module Arel
+ module Nodes
+ class Min < Arel::Nodes::Function
+ end
+ end
+end
diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb
index 599a25836a..65dc5fdb83 100644
--- a/lib/arel/visitors/to_sql.rb
+++ b/lib/arel/visitors/to_sql.rb
@@ -100,6 +100,11 @@ module Arel
visit x }.join(', ')})#{o.alias ? " AS #{visit o.alias}" : ''}"
end
+ def visit_Arel_Nodes_Min o
+ "MIN(#{o.expressions.map { |x|
+ visit x }.join(', ')})#{o.alias ? " AS #{visit o.alias}" : ''}"
+ end
+
def visit_Arel_Nodes_Avg o
"AVG(#{o.expressions.map { |x|
visit x }.join(', ')})#{o.alias ? " AS #{visit o.alias}" : ''}"
diff --git a/spec/arel/attributes/attribute_spec.rb b/spec/arel/attributes/attribute_spec.rb
index 6679ca8b7a..faef096792 100644
--- a/spec/arel/attributes/attribute_spec.rb
+++ b/spec/arel/attributes/attribute_spec.rb
@@ -94,6 +94,13 @@ module Arel
end
end
+ describe '#minimum' do
+ it 'should create a Min node' do
+ relation = Table.new(:users)
+ relation[:id].minimum.should be_kind_of Nodes::Min
+ end
+ end
+
describe '#sum' do
it 'should create a SUM node' do
relation = Table.new(:users)