diff options
author | Pratik Naik <pratiknaik@gmail.com> | 2010-01-01 22:54:23 +0530 |
---|---|---|
committer | Pratik Naik <pratiknaik@gmail.com> | 2010-01-01 22:54:26 +0530 |
commit | 752813016ed227ecfbe0bf69c92de2e2c3e7a988 (patch) | |
tree | 8253ea85ddd044bfdd3107257308bfd486aa89f8 /lib/arel/engines/sql | |
parent | c836c3ed10110d0446c4fce87d36c3f6c39b3cda (diff) | |
download | rails-752813016ed227ecfbe0bf69c92de2e2c3e7a988.tar.gz rails-752813016ed227ecfbe0bf69c92de2e2c3e7a988.tar.bz2 rails-752813016ed227ecfbe0bf69c92de2e2c3e7a988.zip |
Add support for table aliasing
Example :
users = Table(:users, :as => :accounts)
users.to_sql
=> SELECT `accounts`.`id`, `accounts`.`name` FROM `users` AS `accounts`
Diffstat (limited to 'lib/arel/engines/sql')
-rw-r--r-- | lib/arel/engines/sql/christener.rb | 3 | ||||
-rw-r--r-- | lib/arel/engines/sql/relations/table.rb | 18 |
2 files changed, 17 insertions, 4 deletions
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 |