diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/arel/attributes/attribute.rb | 4 | ||||
-rw-r--r-- | lib/arel/nodes.rb | 1 | ||||
-rw-r--r-- | lib/arel/nodes/min.rb | 6 | ||||
-rw-r--r-- | lib/arel/visitors/to_sql.rb | 5 |
4 files changed, 16 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}" : ''}" |