From 30fb25d3abfc002b85f290587b979d54c35a2e98 Mon Sep 17 00:00:00 2001 From: Carl Lerche Date: Mon, 22 Mar 2010 16:26:00 -0700 Subject: Switch Arel::Relation to a module. This will allow for classes with Relation extended on them to represent relations themselves (as opposed to their instances being relations). --- lib/arel/algebra/relations/operations/join.rb | 6 ++++-- lib/arel/algebra/relations/relation.rb | 2 +- lib/arel/algebra/relations/utilities/compound.rb | 4 +++- lib/arel/algebra/relations/utilities/externalization.rb | 2 +- lib/arel/algebra/relations/utilities/nil.rb | 4 ++-- lib/arel/engines/memory/relations/array.rb | 4 +++- lib/arel/engines/memory/relations/compound.rb | 2 +- lib/arel/engines/memory/relations/operations.rb | 2 +- lib/arel/engines/sql/relations/operations/join.rb | 2 +- lib/arel/engines/sql/relations/relation.rb | 2 +- lib/arel/engines/sql/relations/table.rb | 4 ++-- lib/arel/engines/sql/relations/utilities/compound.rb | 2 +- lib/arel/engines/sql/relations/utilities/nil.rb | 2 +- 13 files changed, 22 insertions(+), 16 deletions(-) (limited to 'lib') diff --git a/lib/arel/algebra/relations/operations/join.rb b/lib/arel/algebra/relations/operations/join.rb index df457686cc..300cd31bcd 100644 --- a/lib/arel/algebra/relations/operations/join.rb +++ b/lib/arel/algebra/relations/operations/join.rb @@ -1,5 +1,7 @@ module Arel - class Join < Relation + class Join + include Relation + attributes :relation1, :relation2, :predicates deriving :== delegate :name, :to => :relation1 @@ -60,7 +62,7 @@ module Arel end end - class Relation + module Relation def join? false end diff --git a/lib/arel/algebra/relations/relation.rb b/lib/arel/algebra/relations/relation.rb index 51c622cbe8..1c1ded15c9 100644 --- a/lib/arel/algebra/relations/relation.rb +++ b/lib/arel/algebra/relations/relation.rb @@ -1,5 +1,5 @@ module Arel - class Relation + module Relation attr_reader :count def session diff --git a/lib/arel/algebra/relations/utilities/compound.rb b/lib/arel/algebra/relations/utilities/compound.rb index 0734842b27..7039b82575 100644 --- a/lib/arel/algebra/relations/utilities/compound.rb +++ b/lib/arel/algebra/relations/utilities/compound.rb @@ -1,5 +1,7 @@ module Arel - class Compound < Relation + class Compound + include Relation + attr_reader :relation delegate :joins, :join?, :inserts, :taken, :skipped, :name, :externalizable?, :column_for, :engine, :sources, :locked, :table_alias, diff --git a/lib/arel/algebra/relations/utilities/externalization.rb b/lib/arel/algebra/relations/utilities/externalization.rb index 13758ccec9..795a3919f2 100644 --- a/lib/arel/algebra/relations/utilities/externalization.rb +++ b/lib/arel/algebra/relations/utilities/externalization.rb @@ -12,7 +12,7 @@ module Arel end end - class Relation + module Relation def externalize @externalized ||= externalizable?? Externalization.new(self) : self end diff --git a/lib/arel/algebra/relations/utilities/nil.rb b/lib/arel/algebra/relations/utilities/nil.rb index 6a9d678c45..04055d0ddb 100644 --- a/lib/arel/algebra/relations/utilities/nil.rb +++ b/lib/arel/algebra/relations/utilities/nil.rb @@ -1,7 +1,7 @@ require 'singleton' module Arel - class Nil < Relation - include Singleton + class Nil + include Relation, Singleton end end diff --git a/lib/arel/engines/memory/relations/array.rb b/lib/arel/engines/memory/relations/array.rb index 577e327b19..6486dcbcc1 100644 --- a/lib/arel/engines/memory/relations/array.rb +++ b/lib/arel/engines/memory/relations/array.rb @@ -1,5 +1,7 @@ module Arel - class Array < Relation + class Array + include Relation + attributes :array, :attribute_names_and_types include Recursion::BaseCase deriving :==, :initialize diff --git a/lib/arel/engines/memory/relations/compound.rb b/lib/arel/engines/memory/relations/compound.rb index 6dda92a6a1..0f3c24f9ec 100644 --- a/lib/arel/engines/memory/relations/compound.rb +++ b/lib/arel/engines/memory/relations/compound.rb @@ -1,5 +1,5 @@ module Arel - class Compound < Relation + class Compound delegate :array, :to => :relation def unoperated_rows diff --git a/lib/arel/engines/memory/relations/operations.rb b/lib/arel/engines/memory/relations/operations.rb index a5082715a1..5d7b7670b6 100644 --- a/lib/arel/engines/memory/relations/operations.rb +++ b/lib/arel/engines/memory/relations/operations.rb @@ -50,7 +50,7 @@ module Arel end end - class Join < Relation + class Join def eval result = [] relation1.call.each do |row1| diff --git a/lib/arel/engines/sql/relations/operations/join.rb b/lib/arel/engines/sql/relations/operations/join.rb index a3aaaa163b..7fad6400ad 100644 --- a/lib/arel/engines/sql/relations/operations/join.rb +++ b/lib/arel/engines/sql/relations/operations/join.rb @@ -1,5 +1,5 @@ module Arel - class Join < Relation + class Join def table_sql(formatter = Sql::TableReference.new(self)) relation1.externalize.table_sql(formatter) end diff --git a/lib/arel/engines/sql/relations/relation.rb b/lib/arel/engines/sql/relations/relation.rb index 5e8fc2e83e..f372589af1 100644 --- a/lib/arel/engines/sql/relations/relation.rb +++ b/lib/arel/engines/sql/relations/relation.rb @@ -1,5 +1,5 @@ module Arel - class Relation + module Relation @@connection_tables_primary_keys = {} def compiler diff --git a/lib/arel/engines/sql/relations/table.rb b/lib/arel/engines/sql/relations/table.rb index aa70eaaa28..8ee7a94357 100644 --- a/lib/arel/engines/sql/relations/table.rb +++ b/lib/arel/engines/sql/relations/table.rb @@ -1,6 +1,6 @@ module Arel - class Table < Relation - include Recursion::BaseCase + class Table + include Relation, Recursion::BaseCase cattr_accessor :engine, :tables attr_reader :name, :engine, :table_alias, :options diff --git a/lib/arel/engines/sql/relations/utilities/compound.rb b/lib/arel/engines/sql/relations/utilities/compound.rb index b8b0e7d269..55853be742 100644 --- a/lib/arel/engines/sql/relations/utilities/compound.rb +++ b/lib/arel/engines/sql/relations/utilities/compound.rb @@ -1,5 +1,5 @@ module Arel - class Compound < Relation + class Compound delegate :table, :table_sql, :to => :relation def build_query(*parts) diff --git a/lib/arel/engines/sql/relations/utilities/nil.rb b/lib/arel/engines/sql/relations/utilities/nil.rb index 519ea8acf1..0f7ca5d757 100644 --- a/lib/arel/engines/sql/relations/utilities/nil.rb +++ b/lib/arel/engines/sql/relations/utilities/nil.rb @@ -1,5 +1,5 @@ module Arel - class Nil < Relation + class Nil def table_sql(formatter = nil); '' end def name; '' end end -- cgit v1.2.3