aboutsummaryrefslogtreecommitdiffstats
path: root/lib/arel/algebra/relations/relation.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/arel/algebra/relations/relation.rb')
-rw-r--r--lib/arel/algebra/relations/relation.rb205
1 files changed, 0 insertions, 205 deletions
diff --git a/lib/arel/algebra/relations/relation.rb b/lib/arel/algebra/relations/relation.rb
deleted file mode 100644
index 765d6fe930..0000000000
--- a/lib/arel/algebra/relations/relation.rb
+++ /dev/null
@@ -1,205 +0,0 @@
-module Arel
- module Relation
- include Enumerable
-
- @@connection_tables_primary_keys = {}
-
- attr_reader :count
-
- def session
- Session.instance
- end
-
- def join?
- false
- end
-
- def call
- engine.read(self)
- end
-
- def bind(relation)
- self
- end
-
- def externalize
- @externalized ||= externalizable?? Externalization.new(self) : self
- end
-
- def externalizable?
- false
- end
-
- def compiler
- @compiler ||= begin
- Arel::SqlCompiler.const_get("#{engine.adapter_name}Compiler").new(self)
- rescue
- Arel::SqlCompiler::GenericCompiler.new(self)
- end
- end
-
- def to_sql(formatter = nil)
- sql = compiler.select_sql
-
- return sql unless formatter
- formatter.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
-
- def select_clauses
- attributes.map { |a|
- case a
- when Value
- a.value
- else
- a.to_sql(Sql::SelectClause.new(self))
- end
- }
- end
-
- def from_clauses
- sources.empty? ? table_sql : sources
- end
-
- def where_clauses
- wheres.map { |w| w.value }
- 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
-
- def each
- session.read(self).each { |e| yield e }
- end
-
- def join(other_relation = nil, join_class = InnerJoin)
- case other_relation
- when String
- StringJoin.new(self, other_relation)
- when Relation
- JoinOperation.new(join_class, self, other_relation)
- else
- self
- end
- end
-
- def outer_join(other_relation = nil)
- join(other_relation, OuterJoin)
- end
-
- %w{
- having group order
- }.each do |op|
- class_eval <<-OPERATION, __FILE__, __LINE__
- def #{op}(*args)
- args.all? { |x| x.blank? } ? self : #{op.capitalize}.new(self, args)
- end
- OPERATION
- end
-
- def project *args
- args.empty? ? self : Project.new(self, args)
- end
-
- def where clause = nil
- clause ? Where.new(self, Array(clause)) : self
- end
-
- def skip thing = nil
- thing ? Skip.new(self, thing) : self
- end
-
- def take count
- Take.new self, count
- end
-
- def from thing
- From.new self, thing
- end
-
- def lock(locking = true)
- Lock.new(self, locking)
- end
-
- def alias
- Alias.new(self)
- end
-
- def insert(record)
- session.create Insert.new(self, record)
- end
-
- def update(assignments)
- session.update Update.new(self, assignments)
- end
-
- def delete
- session.delete Deletion.new(self)
- end
-
- JoinOperation = Struct.new(:join_class, :relation1, :relation2) do
- def on(*predicates)
- join_class.new(relation1, relation2, *predicates)
- end
- end
-
- def [](index)
- attributes[index]
- end
-
- def find_attribute_matching_name(name)
- attributes.detect { |a| a.named?(name) } || Attribute.new(self, name)
- end
-
- def position_of(attribute)
- @position_of ||= {}
-
- return @position_of[attribute] if @position_of.key? attribute
-
- @position_of[attribute] = attributes.index(attributes[attribute])
- end
-
- def attributes; Header.new end
- def projections; [] end
- def wheres; [] end
- def orders; [] end
- def inserts; [] end
- def groupings; [] end
- def havings; [] end
- def joins(formatter = nil); nil end # FIXME
- def taken; nil end
- def skipped; nil end
- def sources; [] end
- def locked; [] end
- end
-end