diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2010-07-26 14:23:13 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2010-07-26 14:23:13 -0700 |
commit | d2092e7e0bb5260bd02d9eeea4decf7efa34e29c (patch) | |
tree | 58db6a0e38bbcaab67f1733aa200333d60bef0ac /lib/arel/algebra | |
parent | 700cc8418800911aaab75e2ec1478ee958ef4df8 (diff) | |
download | rails-d2092e7e0bb5260bd02d9eeea4decf7efa34e29c.tar.gz rails-d2092e7e0bb5260bd02d9eeea4decf7efa34e29c.tar.bz2 rails-d2092e7e0bb5260bd02d9eeea4decf7efa34e29c.zip |
reorganizing classes
Diffstat (limited to 'lib/arel/algebra')
-rw-r--r-- | lib/arel/algebra/relations/relation.rb | 70 | ||||
-rw-r--r-- | lib/arel/algebra/relations/utilities/externalization.rb | 10 |
2 files changed, 70 insertions, 10 deletions
diff --git a/lib/arel/algebra/relations/relation.rb b/lib/arel/algebra/relations/relation.rb index 17a2cf3190..3f6151e27b 100644 --- a/lib/arel/algebra/relations/relation.rb +++ b/lib/arel/algebra/relations/relation.rb @@ -1,5 +1,7 @@ module Arel module Relation + @@connection_tables_primary_keys = {} + attr_reader :count def session @@ -18,6 +20,74 @@ module Arel self end + def externalize + @externalized ||= externalizable?? Externalization.new(self) : self + end + + def externalizable? + false + end + + def compiler + @compiler ||= begin + "Arel::SqlCompiler::#{engine.adapter_name}Compiler".constantize.new(self) + rescue + Arel::SqlCompiler::GenericCompiler.new(self) + end + end + + def to_sql(formatter = Sql::SelectStatement.new(self)) + formatter.select compiler.select_sql, self + end + + def christener + @christener ||= Sql::Christener.new + end + + def inclusion_predicate_sql + "IN" + end + + def exclusion_predicate_sql + "NOT IN" + end + + def primary_key + connection_id = engine.connection.object_id + if @@connection_tables_primary_keys[connection_id] && @@connection_tables_primary_keys[connection_id].has_key?(table.name) + @@connection_tables_primary_keys[connection_id][table.name] + else + @@connection_tables_primary_keys[connection_id] ||= {} + @@connection_tables_primary_keys[connection_id][table.name] = engine.connection.primary_key(table.name) + end + end + + protected + + def from_clauses + sources.blank? ? table_sql(Sql::TableReference.new(self)) : sources + end + + def select_clauses + attributes.collect { |a| a.to_sql(Sql::SelectClause.new(self)) } + end + + def where_clauses + wheres.collect { |w| w.to_sql(Sql::WhereClause.new(self)) } + end + + def group_clauses + groupings.collect { |g| g.to_sql(Sql::GroupClause.new(self)) } + end + + def having_clauses + havings.collect { |g| g.to_sql(Sql::HavingClause.new(self)) } + end + + def order_clauses + orders.collect { |o| o.to_sql(Sql::OrderClause.new(self)) } + end + module Enumerable include ::Enumerable diff --git a/lib/arel/algebra/relations/utilities/externalization.rb b/lib/arel/algebra/relations/utilities/externalization.rb index c7a7d9ca78..815e1e0aa7 100644 --- a/lib/arel/algebra/relations/utilities/externalization.rb +++ b/lib/arel/algebra/relations/utilities/externalization.rb @@ -12,14 +12,4 @@ module Arel @attributes ||= Header.new(relation.attributes.map { |a| a.to_attribute(self) }) end end - - module Relation - def externalize - @externalized ||= externalizable?? Externalization.new(self) : self - end - - def externalizable? - false - end - end end |