aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/arel/table.rb4
-rw-r--r--lib/arel/visitors/to_sql.rb3
-rw-r--r--spec/arel/table_spec.rb10
3 files changed, 16 insertions, 1 deletions
diff --git a/lib/arel/table.rb b/lib/arel/table.rb
index 1b37a3b66b..a189838c07 100644
--- a/lib/arel/table.rb
+++ b/lib/arel/table.rb
@@ -20,6 +20,10 @@ module Arel
tm.where condition
end
+ def project thing
+ tm.project thing
+ end
+
def columns
@columns ||= @engine.connection.columns(@name, "#{@name} Columns").map do |column|
Attributes.for(column).new self, column.name, column
diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb
index 53ae6e0860..2b3216abd3 100644
--- a/lib/arel/visitors/to_sql.rb
+++ b/lib/arel/visitors/to_sql.rb
@@ -46,7 +46,8 @@ module Arel
DISPATCH = {}
def visit object
- send DISPATCH[object.class], object
+ send "visit_#{object.class.name.gsub('::', '_')}", object
+ #send DISPATCH[object.class], object
end
private_instance_methods(false).each do |method|
diff --git a/spec/arel/table_spec.rb b/spec/arel/table_spec.rb
index 67024f5c52..cf309ca8ca 100644
--- a/spec/arel/table_spec.rb
+++ b/spec/arel/table_spec.rb
@@ -18,6 +18,16 @@ module Arel
end
end
+ describe 'project' do
+ it 'can project' do
+ manager = @relation.project '*'
+ manager.to_sql.should == %{
+ SELECT *
+ FROM "users"
+ }.gsub("\n", '').gsub(/(^\s*|\s*$)/, '').squeeze(' ')
+ end
+ end
+
describe 'where' do
it "returns a tree manager" do
manager = @relation.where @relation[:id].eq 1