From 5daafa8e959acc64fc19e9522470282ac0f25f33 Mon Sep 17 00:00:00 2001 From: Emilio Tagua Date: Sat, 11 Sep 2010 11:34:18 +0800 Subject: Add Min node. --- lib/arel/attributes/attribute.rb | 4 ++++ lib/arel/nodes.rb | 1 + lib/arel/nodes/min.rb | 6 ++++++ lib/arel/visitors/to_sql.rb | 5 +++++ spec/arel/attributes/attribute_spec.rb | 7 +++++++ 5 files changed, 23 insertions(+) create mode 100644 lib/arel/nodes/min.rb 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) -- cgit v1.2.3