diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2010-09-24 09:41:48 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2010-09-24 09:41:48 -0700 |
commit | 487df1771ded1fb065a53ebe9d1a5a9c119478e3 (patch) | |
tree | dacefa00fca782bcbd86bd5cf2476226253fc674 /lib/arel | |
parent | 7615bd7f928390d0ba9501e5206fd89ce6ce44fc (diff) | |
download | rails-487df1771ded1fb065a53ebe9d1a5a9c119478e3.tar.gz rails-487df1771ded1fb065a53ebe9d1a5a9c119478e3.tar.bz2 rails-487df1771ded1fb065a53ebe9d1a5a9c119478e3.zip |
adding an oracle visitor
Diffstat (limited to 'lib/arel')
-rw-r--r-- | lib/arel/nodes.rb | 1 | ||||
-rw-r--r-- | lib/arel/nodes/less_than_or_equal.rb | 6 | ||||
-rw-r--r-- | lib/arel/visitors.rb | 8 | ||||
-rw-r--r-- | lib/arel/visitors/oracle.rb | 15 | ||||
-rw-r--r-- | lib/arel/visitors/to_sql.rb | 4 |
5 files changed, 31 insertions, 3 deletions
diff --git a/lib/arel/nodes.rb b/lib/arel/nodes.rb index fade666ff7..6ed05fb31b 100644 --- a/lib/arel/nodes.rb +++ b/lib/arel/nodes.rb @@ -9,6 +9,7 @@ require 'arel/nodes/and' require 'arel/nodes/greater_than' require 'arel/nodes/greater_than_or_equal' require 'arel/nodes/less_than' +require 'arel/nodes/less_than_or_equal' require 'arel/nodes/in' require 'arel/nodes/lock' diff --git a/lib/arel/nodes/less_than_or_equal.rb b/lib/arel/nodes/less_than_or_equal.rb new file mode 100644 index 0000000000..55449d12f1 --- /dev/null +++ b/lib/arel/nodes/less_than_or_equal.rb @@ -0,0 +1,6 @@ +module Arel + module Nodes + class LessThanOrEqual < Arel::Nodes::Binary + end + end +end diff --git a/lib/arel/visitors.rb b/lib/arel/visitors.rb index 879635575b..deb4a4f991 100644 --- a/lib/arel/visitors.rb +++ b/lib/arel/visitors.rb @@ -1,6 +1,7 @@ require 'arel/visitors/to_sql' require 'arel/visitors/postgresql' require 'arel/visitors/mysql' +require 'arel/visitors/oracle' require 'arel/visitors/join_sql' require 'arel/visitors/order_clauses' require 'arel/visitors/dot' @@ -8,9 +9,10 @@ require 'arel/visitors/dot' module Arel module Visitors VISITORS = { - 'postgresql' => Arel::Visitors::PostgreSQL, - 'mysql' => Arel::Visitors::MySQL, - 'mysql2' => Arel::Visitors::MySQL, + 'postgresql' => Arel::Visitors::PostgreSQL, + 'mysql' => Arel::Visitors::MySQL, + 'mysql2' => Arel::Visitors::MySQL, + 'oracle_enhanced' => Arel::Visitors::Oracle, } ENGINE_VISITORS = Hash.new do |hash, engine| diff --git a/lib/arel/visitors/oracle.rb b/lib/arel/visitors/oracle.rb new file mode 100644 index 0000000000..840a7a9ace --- /dev/null +++ b/lib/arel/visitors/oracle.rb @@ -0,0 +1,15 @@ +module Arel + module Visitors + class Oracle < Arel::Visitors::ToSql + def visit_Arel_Nodes_SelectStatement o + if o.limit + o.cores.last.wheres.push Nodes::LessThanOrEqual.new( + Nodes::SqlLiteral.new('ROWNUM'), o.limit + ) + o.limit = nil + end + super + end + end + end +end diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb index 69c7736a4b..5ec811a53a 100644 --- a/lib/arel/visitors/to_sql.rb +++ b/lib/arel/visitors/to_sql.rb @@ -148,6 +148,10 @@ module Arel "#{visit o.left} > #{visit o.right}" end + def visit_Arel_Nodes_LessThanOrEqual o + "#{visit o.left} <= #{visit o.right}" + end + def visit_Arel_Nodes_LessThan o "#{visit o.left} < #{visit o.right}" end |