aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2010-10-12 14:17:26 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2010-10-12 14:17:26 -0700
commitaebc83102b23042f0dc83be1afb35f86ea381cc3 (patch)
tree6968a0d9e6ee4d236ef88f2eeca60d9bb225569f
parent9742785d5c0c076056daf346bf4f37a8348fa412 (diff)
downloadrails-aebc83102b23042f0dc83be1afb35f86ea381cc3.tar.gz
rails-aebc83102b23042f0dc83be1afb35f86ea381cc3.tar.bz2
rails-aebc83102b23042f0dc83be1afb35f86ea381cc3.zip
implementing where_sql method
-rw-r--r--lib/arel/select_manager.rb7
-rw-r--r--lib/arel/visitors.rb1
-rw-r--r--spec/select_manager_spec.rb17
3 files changed, 25 insertions, 0 deletions
diff --git a/lib/arel/select_manager.rb b/lib/arel/select_manager.rb
index adbf1316d7..66227bc0db 100644
--- a/lib/arel/select_manager.rb
+++ b/lib/arel/select_manager.rb
@@ -122,6 +122,13 @@ module Arel
Compatibility::Wheres.new @engine, @ctx.wheres
end
+ def where_sql
+ return if @ctx.wheres.empty?
+
+ viz = Visitors::WhereSql.new @engine
+ Nodes::SqlLiteral.new viz.accept @ctx
+ end
+
def take limit
@head.limit = limit
self
diff --git a/lib/arel/visitors.rb b/lib/arel/visitors.rb
index 557c3417a6..fc585c39bb 100644
--- a/lib/arel/visitors.rb
+++ b/lib/arel/visitors.rb
@@ -3,6 +3,7 @@ require 'arel/visitors/postgresql'
require 'arel/visitors/mysql'
require 'arel/visitors/oracle'
require 'arel/visitors/join_sql'
+require 'arel/visitors/where_sql'
require 'arel/visitors/order_clauses'
require 'arel/visitors/dot'
diff --git a/spec/select_manager_spec.rb b/spec/select_manager_spec.rb
index 287657d0c1..b8512eb741 100644
--- a/spec/select_manager_spec.rb
+++ b/spec/select_manager_spec.rb
@@ -379,6 +379,23 @@ module Arel
end
end
+ describe 'where_sql' do
+ it 'gives me back the where sql' do
+ table = Table.new :users
+ manager = Arel::SelectManager.new Table.engine
+ manager.from table
+ manager.where table[:id].eq 10
+ manager.where_sql.should be_like %{ WHERE "users"."id" = 10 }
+ end
+
+ it 'returns nil when there are no wheres' do
+ table = Table.new :users
+ manager = Arel::SelectManager.new Table.engine
+ manager.from table
+ manager.where_sql.should be_nil
+ end
+ end
+
describe 'update' do
it 'copies limits' do
engine = EngineProxy.new Table.engine