From 752813016ed227ecfbe0bf69c92de2e2c3e7a988 Mon Sep 17 00:00:00 2001
From: Pratik Naik <pratiknaik@gmail.com>
Date: Fri, 1 Jan 2010 22:54:23 +0530
Subject: Add support for table aliasing

Example :
  users = Table(:users, :as => :accounts)
  users.to_sql
  => SELECT `accounts`.`id`, `accounts`.`name` FROM `users` AS `accounts`
---
 lib/arel/engines/sql/christener.rb      |  3 ++-
 lib/arel/engines/sql/relations/table.rb | 18 +++++++++++++++---
 2 files changed, 17 insertions(+), 4 deletions(-)

(limited to 'lib/arel/engines')

diff --git a/lib/arel/engines/sql/christener.rb b/lib/arel/engines/sql/christener.rb
index c1c9325208..a2a2da799a 100644
--- a/lib/arel/engines/sql/christener.rb
+++ b/lib/arel/engines/sql/christener.rb
@@ -4,7 +4,8 @@ module Arel
       def name_for(relation)
         @used_names ||= Hash.new(0)
         (@relation_names ||= Hash.new do |hash, relation|
-          @used_names[name = relation.name] += 1
+          name =  relation.table_alias ? relation.table_alias : relation.name
+          @used_names[name] += 1
           hash[relation] = name + (@used_names[name] > 1 ? "_#{@used_names[name]}" : '')
         end)[relation.table]
       end
diff --git a/lib/arel/engines/sql/relations/table.rb b/lib/arel/engines/sql/relations/table.rb
index dd22f44226..6ad294dc6c 100644
--- a/lib/arel/engines/sql/relations/table.rb
+++ b/lib/arel/engines/sql/relations/table.rb
@@ -3,10 +3,22 @@ module Arel
     include Recursion::BaseCase
 
     cattr_accessor :engine
-    attr_reader :name, :engine
+    attr_reader :name, :engine, :table_alias, :options
 
-    def initialize(name, engine = Table.engine)
-      @name, @engine = name.to_s, engine
+    def initialize(name, options = {})
+      @name = name.to_s
+
+      if options.is_a?(Hash)
+        @options = options
+        @engine = options[:engine] || Table.engine
+        @table_alias = options[:as].to_s if options[:as].present?
+      else
+        @engine = options # Table.new('foo', engine)
+      end
+    end
+
+    def as(table_alias)
+      Table.new(name, options.merge(:as => table_alias))
     end
 
     def attributes
-- 
cgit v1.2.3