aboutsummaryrefslogtreecommitdiffstats
path: root/lib/active_relation/relations/alias.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/active_relation/relations/alias.rb')
-rw-r--r--lib/active_relation/relations/alias.rb23
1 files changed, 22 insertions, 1 deletions
diff --git a/lib/active_relation/relations/alias.rb b/lib/active_relation/relations/alias.rb
index 5f4a10a672..2d1b9c1476 100644
--- a/lib/active_relation/relations/alias.rb
+++ b/lib/active_relation/relations/alias.rb
@@ -2,14 +2,35 @@ module ActiveRelation
module Relations
class Alias < Compound
attr_reader :alias
+ alias_method :name, :alias
def initialize(relation, aliaz)
@relation, @alias = relation, aliaz
end
-
+
+ def attributes
+ relation.attributes.collect(&method(:substitute))
+ end
+
def ==(other)
relation == other.relation and self.alias == other.alias
end
+
+ protected
+ def table_sql
+ "#{quote_table_name(relation.name)} AS #{quote_table_name(@alias)}"
+ end
+
+ def attribute(name)
+ if unaliased_attribute = relation[name]
+ substitute(unaliased_attribute)
+ end
+ end
+
+ private
+ def substitute(attribute)
+ Primitives::Attribute.new(self, attribute.name, attribute.alias)
+ end
end
end
end \ No newline at end of file