diff options
author | Bryan Helmkamp <bryan@brynary.com> | 2009-05-17 14:31:04 -0400 |
---|---|---|
committer | Bryan Helmkamp <bryan@brynary.com> | 2009-05-17 14:31:04 -0400 |
commit | 7032a50297fce4d7724d1735e81e5df5fd919e71 (patch) | |
tree | c52333abcc7a1454ea6ada7fe5e31e054f4e9540 /lib/arel/engines | |
parent | bdca9ed42ffea10aa6989ea3ecebedb424fa01ed (diff) | |
download | rails-7032a50297fce4d7724d1735e81e5df5fd919e71.tar.gz rails-7032a50297fce4d7724d1735e81e5df5fd919e71.tar.bz2 rails-7032a50297fce4d7724d1735e81e5df5fd919e71.zip |
reorganized file structures
Conflicts:
lib/arel.rb
lib/arel/arel.rb
lib/arel/engines/memory/predicates.rb
lib/arel/engines/memory/relations/array.rb
lib/arel/engines/sql/relations/table.rb
Diffstat (limited to 'lib/arel/engines')
-rw-r--r-- | lib/arel/engines/array/array.rb | 1 | ||||
-rw-r--r-- | lib/arel/engines/memory.rb | 4 | ||||
-rw-r--r-- | lib/arel/engines/memory/engine.rb | 12 | ||||
-rw-r--r-- | lib/arel/engines/memory/predicates.rb | 58 | ||||
-rw-r--r-- | lib/arel/engines/memory/primitives.rb | 2 | ||||
-rw-r--r-- | lib/arel/engines/memory/primitives/attribute.rb | 7 | ||||
-rw-r--r-- | lib/arel/engines/memory/primitives/value.rb | 7 | ||||
-rw-r--r-- | lib/arel/engines/memory/relations.rb | 2 | ||||
-rw-r--r-- | lib/arel/engines/memory/relations/array.rb (renamed from lib/arel/engines/array/relations/array.rb) | 10 | ||||
-rw-r--r-- | lib/arel/engines/memory/relations/operations/where.rb | 7 | ||||
-rw-r--r-- | lib/arel/engines/sql.rb (renamed from lib/arel/engines/sql/sql.rb) | 0 | ||||
-rw-r--r-- | lib/arel/engines/sql/primitives/attribute.rb | 2 | ||||
-rw-r--r-- | lib/arel/engines/sql/relations.rb | 13 | ||||
-rw-r--r-- | lib/arel/engines/sql/relations/operations.rb | 2 | ||||
-rw-r--r-- | lib/arel/engines/sql/relations/table.rb | 5 | ||||
-rw-r--r-- | lib/arel/engines/sql/relations/utilities.rb | 3 | ||||
-rw-r--r-- | lib/arel/engines/sql/relations/writes.rb | 3 |
17 files changed, 119 insertions, 19 deletions
diff --git a/lib/arel/engines/array/array.rb b/lib/arel/engines/array/array.rb deleted file mode 100644 index 3a3a47308a..0000000000 --- a/lib/arel/engines/array/array.rb +++ /dev/null @@ -1 +0,0 @@ -require 'arel/engines/array/relations/array'
\ No newline at end of file diff --git a/lib/arel/engines/memory.rb b/lib/arel/engines/memory.rb new file mode 100644 index 0000000000..df6f6f3d48 --- /dev/null +++ b/lib/arel/engines/memory.rb @@ -0,0 +1,4 @@ +require 'arel/engines/memory/relations' +require 'arel/engines/memory/primitives' +require 'arel/engines/memory/engine' +require 'arel/engines/memory/predicates'
\ No newline at end of file diff --git a/lib/arel/engines/memory/engine.rb b/lib/arel/engines/memory/engine.rb new file mode 100644 index 0000000000..67a084f2cd --- /dev/null +++ b/lib/arel/engines/memory/engine.rb @@ -0,0 +1,12 @@ +module Arel + module Memory + class Engine + module CRUD + def read(relation) + relation.eval + end + end + include CRUD + end + end +end
\ No newline at end of file diff --git a/lib/arel/engines/memory/predicates.rb b/lib/arel/engines/memory/predicates.rb new file mode 100644 index 0000000000..3522ea3ffa --- /dev/null +++ b/lib/arel/engines/memory/predicates.rb @@ -0,0 +1,58 @@ +module Arel + class Predicate + def or(other_predicate) + Or.new(self, other_predicate) + end + + def and(other_predicate) + And.new(self, other_predicate) + end + end + + class Binary < Predicate + def eval(row) + operand1.eval(row).send(operator, operand2.eval(row)) + end + end + + class CompoundPredicate < Binary + def to_sql(formatter = nil) + "(#{operand1.to_sql(formatter)} #{predicate_sql} #{operand2.to_sql(formatter)})" + end + end + + class Or < CompoundPredicate + def predicate_sql; "OR" end + end + + class And < CompoundPredicate + def predicate_sql; "AND" end + end + + class Equality < Binary + def ==(other) + Equality === other and + ((operand1 == other.operand1 and operand2 == other.operand2) or + (operand1 == other.operand2 and operand2 == other.operand1)) + end + end + + class GreaterThanOrEqualTo < Binary + end + + class GreaterThan < Binary + end + + class LessThanOrEqualTo < Binary + end + + class LessThan < Binary + def operator; :< end + end + + class Match < Binary + end + + class In < Binary + end +end diff --git a/lib/arel/engines/memory/primitives.rb b/lib/arel/engines/memory/primitives.rb new file mode 100644 index 0000000000..4d5c76e956 --- /dev/null +++ b/lib/arel/engines/memory/primitives.rb @@ -0,0 +1,2 @@ +require 'arel/engines/memory/primitives/attribute' +require 'arel/engines/memory/primitives/value' diff --git a/lib/arel/engines/memory/primitives/attribute.rb b/lib/arel/engines/memory/primitives/attribute.rb new file mode 100644 index 0000000000..9864feadc2 --- /dev/null +++ b/lib/arel/engines/memory/primitives/attribute.rb @@ -0,0 +1,7 @@ +module Arel + class Attribute + def eval(row) + row[self] + end + end +end
\ No newline at end of file diff --git a/lib/arel/engines/memory/primitives/value.rb b/lib/arel/engines/memory/primitives/value.rb new file mode 100644 index 0000000000..b83cd02e57 --- /dev/null +++ b/lib/arel/engines/memory/primitives/value.rb @@ -0,0 +1,7 @@ +module Arel + class Value + def eval(row) + value + end + end +end
\ No newline at end of file diff --git a/lib/arel/engines/memory/relations.rb b/lib/arel/engines/memory/relations.rb new file mode 100644 index 0000000000..6361d7c9d7 --- /dev/null +++ b/lib/arel/engines/memory/relations.rb @@ -0,0 +1,2 @@ +require 'arel/engines/memory/relations/array' +require 'arel/engines/memory/relations/operations/where' diff --git a/lib/arel/engines/array/relations/array.rb b/lib/arel/engines/memory/relations/array.rb index dac65abbc2..c02c62891b 100644 --- a/lib/arel/engines/array/relations/array.rb +++ b/lib/arel/engines/memory/relations/array.rb @@ -1,9 +1,11 @@ module Arel class Array < Relation + attributes :array, :attribute_names + deriving :initialize include Recursion::BaseCase - - def initialize(array, attribute_names) - @array, @attribute_names = array, attribute_names + + def engine + @engine ||= Memory::Engine.new end def attributes @@ -12,7 +14,7 @@ module Arel end end - def call(connection = nil) + def eval @array.collect { |row| attributes.zip(row).to_hash } end end diff --git a/lib/arel/engines/memory/relations/operations/where.rb b/lib/arel/engines/memory/relations/operations/where.rb new file mode 100644 index 0000000000..eb11fb55fd --- /dev/null +++ b/lib/arel/engines/memory/relations/operations/where.rb @@ -0,0 +1,7 @@ +module Arel + class Where < Compound + def eval + relation.eval.select { |row| predicate.eval(row) } + end + end +end
\ No newline at end of file diff --git a/lib/arel/engines/sql/sql.rb b/lib/arel/engines/sql.rb index aed1fd861e..aed1fd861e 100644 --- a/lib/arel/engines/sql/sql.rb +++ b/lib/arel/engines/sql.rb diff --git a/lib/arel/engines/sql/primitives/attribute.rb b/lib/arel/engines/sql/primitives/attribute.rb index 48de690b6f..ad78a9ec5b 100644 --- a/lib/arel/engines/sql/primitives/attribute.rb +++ b/lib/arel/engines/sql/primitives/attribute.rb @@ -1,5 +1,3 @@ -require 'set' - module Arel class Attribute def column diff --git a/lib/arel/engines/sql/relations.rb b/lib/arel/engines/sql/relations.rb index 4de01b2691..39ef8852a1 100644 --- a/lib/arel/engines/sql/relations.rb +++ b/lib/arel/engines/sql/relations.rb @@ -1,5 +1,10 @@ -require 'arel/engines/sql/relations/utilities' +require 'arel/engines/sql/relations/utilities/recursion' +require 'arel/engines/sql/relations/utilities/externalization' +require 'arel/engines/sql/relations/utilities/nil' require 'arel/engines/sql/relations/relation' -require 'arel/engines/sql/relations/operations' -require 'arel/engines/sql/relations/writes' -require 'arel/engines/sql/relations/table'
\ No newline at end of file +require 'arel/engines/sql/relations/table' +require 'arel/engines/sql/relations/operations/join' +require 'arel/engines/sql/relations/operations/alias' +require 'arel/engines/sql/relations/writes/delete' +require 'arel/engines/sql/relations/writes/insert' +require 'arel/engines/sql/relations/writes/update'
\ No newline at end of file diff --git a/lib/arel/engines/sql/relations/operations.rb b/lib/arel/engines/sql/relations/operations.rb deleted file mode 100644 index ff33fc6bc3..0000000000 --- a/lib/arel/engines/sql/relations/operations.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'arel/engines/sql/relations/operations/alias' -require 'arel/engines/sql/relations/operations/join' diff --git a/lib/arel/engines/sql/relations/table.rb b/lib/arel/engines/sql/relations/table.rb index 0433abbbb2..2653744149 100644 --- a/lib/arel/engines/sql/relations/table.rb +++ b/lib/arel/engines/sql/relations/table.rb @@ -34,3 +34,8 @@ module Arel end end end + +def Table(name, engine = Arel::Table.engine) + Arel::Table.new(name, engine) +end + diff --git a/lib/arel/engines/sql/relations/utilities.rb b/lib/arel/engines/sql/relations/utilities.rb deleted file mode 100644 index a1451ed448..0000000000 --- a/lib/arel/engines/sql/relations/utilities.rb +++ /dev/null @@ -1,3 +0,0 @@ -require 'arel/engines/sql/relations/utilities/recursion' -require 'arel/engines/sql/relations/utilities/externalization' -require 'arel/engines/sql/relations/utilities/nil' diff --git a/lib/arel/engines/sql/relations/writes.rb b/lib/arel/engines/sql/relations/writes.rb deleted file mode 100644 index dcadc326d9..0000000000 --- a/lib/arel/engines/sql/relations/writes.rb +++ /dev/null @@ -1,3 +0,0 @@ -require 'arel/engines/sql/relations/writes/delete' -require 'arel/engines/sql/relations/writes/insert' -require 'arel/engines/sql/relations/writes/update' |