arel 0.4.0 → 1.0.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +24 -0
- data/lib/arel.rb +3 -1
- data/lib/arel/algebra/attributes/attribute.rb +175 -141
- data/lib/arel/algebra/core_extensions.rb +0 -1
- data/lib/arel/algebra/core_extensions/hash.rb +5 -9
- data/lib/arel/algebra/core_extensions/object.rb +0 -4
- data/lib/arel/algebra/expression.rb +37 -24
- data/lib/arel/algebra/header.rb +5 -6
- data/lib/arel/algebra/ordering.rb +13 -5
- data/lib/arel/algebra/predicates.rb +143 -27
- data/lib/arel/algebra/relations.rb +0 -1
- data/lib/arel/algebra/relations/operations/from.rb +10 -2
- data/lib/arel/algebra/relations/operations/group.rb +8 -6
- data/lib/arel/algebra/relations/operations/having.rb +3 -6
- data/lib/arel/algebra/relations/operations/join.rb +52 -18
- data/lib/arel/algebra/relations/operations/lock.rb +4 -6
- data/lib/arel/algebra/relations/operations/order.rb +11 -7
- data/lib/arel/algebra/relations/operations/project.rb +10 -10
- data/lib/arel/algebra/relations/operations/skip.rb +10 -3
- data/lib/arel/algebra/relations/operations/take.rb +10 -3
- data/lib/arel/algebra/relations/operations/where.rb +12 -6
- data/lib/arel/algebra/relations/relation.rb +161 -92
- data/lib/arel/algebra/relations/row.rb +8 -5
- data/lib/arel/algebra/relations/utilities/compound.rb +34 -33
- data/lib/arel/algebra/relations/utilities/externalization.rb +10 -8
- data/lib/arel/algebra/relations/writes.rb +24 -13
- data/lib/arel/algebra/value.rb +41 -2
- data/lib/arel/engines/memory.rb +0 -2
- data/lib/arel/engines/memory/engine.rb +3 -9
- data/lib/arel/engines/memory/relations.rb +0 -3
- data/lib/arel/engines/memory/relations/array.rb +5 -3
- data/lib/arel/engines/memory/relations/operations.rb +2 -60
- data/lib/arel/engines/sql.rb +0 -2
- data/lib/arel/engines/sql/christener.rb +12 -6
- data/lib/arel/engines/sql/compilers/oracle_compiler.rb +34 -23
- data/lib/arel/engines/sql/compilers/postgresql_compiler.rb +23 -15
- data/lib/arel/engines/sql/engine.rb +19 -27
- data/lib/arel/engines/sql/formatters.rb +26 -10
- data/lib/arel/engines/sql/relations.rb +0 -7
- data/lib/arel/engines/sql/relations/compiler.rb +70 -35
- data/lib/arel/engines/sql/relations/table.rb +44 -32
- data/lib/arel/{engines/sql/relations/utilities/recursion.rb → recursion/base_case.rb} +0 -0
- data/lib/arel/session.rb +24 -40
- data/lib/arel/sql_literal.rb +13 -0
- data/lib/arel/version.rb +1 -1
- data/spec/algebra/unit/predicates/inequality_spec.rb +32 -0
- data/spec/algebra/unit/predicates/predicate_spec.rb +22 -0
- data/spec/algebra/unit/primitives/attribute_spec.rb +3 -9
- data/spec/algebra/unit/primitives/expression_spec.rb +1 -7
- data/spec/algebra/unit/relations/join_spec.rb +0 -7
- data/spec/algebra/unit/relations/project_spec.rb +3 -3
- data/spec/algebra/unit/relations/relation_spec.rb +74 -25
- data/spec/algebra/unit/session/session_spec.rb +7 -7
- data/spec/engines/memory/integration/joins/cross_engine_spec.rb +20 -10
- data/spec/engines/memory/unit/relations/array_spec.rb +6 -5
- data/spec/engines/memory/unit/relations/join_spec.rb +7 -6
- data/spec/engines/memory/unit/relations/order_spec.rb +7 -6
- data/spec/engines/memory/unit/relations/project_spec.rb +6 -6
- data/spec/engines/memory/unit/relations/skip_spec.rb +10 -5
- data/spec/engines/memory/unit/relations/take_spec.rb +7 -5
- data/spec/engines/memory/unit/relations/where_spec.rb +13 -9
- data/spec/engines/sql/unit/engine_spec.rb +20 -0
- data/spec/engines/sql/unit/relations/group_spec.rb +2 -2
- data/spec/engines/sql/unit/relations/order_spec.rb +5 -5
- data/spec/engines/sql/unit/relations/project_spec.rb +4 -4
- data/spec/engines/sql/unit/relations/table_spec.rb +0 -7
- data/spec/engines/sql/unit/relations/take_spec.rb +26 -0
- data/spec/engines/sql/unit/relations/where_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -4
- data/spec/sql/christener_spec.rb +70 -0
- data/spec/support/model.rb +7 -2
- metadata +109 -23
- data/lib/arel/algebra/core_extensions/class.rb +0 -32
- data/lib/arel/algebra/relations/operations/alias.rb +0 -7
- data/lib/arel/engines/memory/predicates.rb +0 -99
- data/lib/arel/engines/memory/primitives.rb +0 -27
- data/lib/arel/engines/memory/relations/compound.rb +0 -9
- data/lib/arel/engines/memory/relations/writes.rb +0 -7
- data/lib/arel/engines/sql/predicates.rb +0 -103
- data/lib/arel/engines/sql/primitives.rb +0 -97
- data/lib/arel/engines/sql/relations/operations/alias.rb +0 -5
- data/lib/arel/engines/sql/relations/operations/join.rb +0 -33
- data/lib/arel/engines/sql/relations/relation.rb +0 -65
- data/lib/arel/engines/sql/relations/utilities/compound.rb +0 -10
- data/lib/arel/engines/sql/relations/utilities/externalization.rb +0 -14
- data/lib/arel/engines/sql/relations/writes.rb +0 -19
@@ -1,97 +0,0 @@
|
|
1
|
-
module Arel
|
2
|
-
class SqlLiteral < String
|
3
|
-
def relation
|
4
|
-
nil
|
5
|
-
end
|
6
|
-
|
7
|
-
def to_sql(formatter = nil)
|
8
|
-
self
|
9
|
-
end
|
10
|
-
|
11
|
-
include Attribute::Expressions
|
12
|
-
end
|
13
|
-
|
14
|
-
class Attribute
|
15
|
-
def column
|
16
|
-
original_relation.column_for(self)
|
17
|
-
end
|
18
|
-
|
19
|
-
def format(object)
|
20
|
-
object.to_sql(Sql::Attribute.new(self))
|
21
|
-
end
|
22
|
-
|
23
|
-
def to_sql(formatter = Sql::WhereCondition.new(relation))
|
24
|
-
formatter.attribute self
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
class Value
|
29
|
-
def inclusion_predicate_sql
|
30
|
-
value.inclusion_predicate_sql
|
31
|
-
end
|
32
|
-
|
33
|
-
def exclusion_predicate_sql
|
34
|
-
value.exclusion_predicate_sql
|
35
|
-
end
|
36
|
-
|
37
|
-
def equality_predicate_sql
|
38
|
-
value.equality_predicate_sql
|
39
|
-
end
|
40
|
-
|
41
|
-
def inequality_predicate_sql
|
42
|
-
value.inequality_predicate_sql
|
43
|
-
end
|
44
|
-
|
45
|
-
def to_sql(formatter = Sql::WhereCondition.new(relation))
|
46
|
-
formatter.value value
|
47
|
-
end
|
48
|
-
|
49
|
-
def format(object)
|
50
|
-
object.to_sql(Sql::Value.new(relation))
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
class Ordering
|
55
|
-
def to_sql(formatter = Sql::OrderClause.new(relation))
|
56
|
-
formatter.ordering self
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
class Ascending < Ordering
|
61
|
-
def direction_sql; 'ASC' end
|
62
|
-
end
|
63
|
-
|
64
|
-
class Descending < Ordering
|
65
|
-
def direction_sql; 'DESC' end
|
66
|
-
end
|
67
|
-
|
68
|
-
class Expression < Attribute
|
69
|
-
def to_sql(formatter = Sql::SelectClause.new(relation))
|
70
|
-
formatter.expression self
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
class Count < Expression
|
75
|
-
def function_sql; 'COUNT' end
|
76
|
-
end
|
77
|
-
|
78
|
-
class Distinct < Expression
|
79
|
-
def function_sql; 'DISTINCT' end
|
80
|
-
end
|
81
|
-
|
82
|
-
class Sum < Expression
|
83
|
-
def function_sql; 'SUM' end
|
84
|
-
end
|
85
|
-
|
86
|
-
class Maximum < Expression
|
87
|
-
def function_sql; 'MAX' end
|
88
|
-
end
|
89
|
-
|
90
|
-
class Minimum < Expression
|
91
|
-
def function_sql; 'MIN' end
|
92
|
-
end
|
93
|
-
|
94
|
-
class Average < Expression
|
95
|
-
def function_sql; 'AVG' end
|
96
|
-
end
|
97
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module Arel
|
2
|
-
class Join
|
3
|
-
def table_sql(formatter = Sql::TableReference.new(self))
|
4
|
-
relation1.externalize.table_sql(formatter)
|
5
|
-
end
|
6
|
-
|
7
|
-
def joins(environment, formatter = Sql::TableReference.new(environment))
|
8
|
-
@joins ||= begin
|
9
|
-
this_join = [
|
10
|
-
join_sql,
|
11
|
-
relation2.externalize.table_sql(formatter),
|
12
|
-
("ON" unless predicates.blank?),
|
13
|
-
(ons + relation2.externalize.wheres).collect { |p| p.bind(environment.relation).to_sql(Sql::WhereClause.new(environment)) }.join(' AND ')
|
14
|
-
].compact.join(" ")
|
15
|
-
[relation1.joins(environment), this_join, relation2.joins(environment)].compact.join(" ")
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
class InnerJoin < Join
|
21
|
-
def join_sql; "INNER JOIN" end
|
22
|
-
end
|
23
|
-
|
24
|
-
class OuterJoin < Join
|
25
|
-
def join_sql; "LEFT OUTER JOIN" end
|
26
|
-
end
|
27
|
-
|
28
|
-
class StringJoin < Join
|
29
|
-
def joins(environment, formatter = Sql::TableReference.new(environment))
|
30
|
-
[relation1.joins(environment), relation2].compact.join(" ")
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
module Arel
|
2
|
-
module Relation
|
3
|
-
@@connection_tables_primary_keys = {}
|
4
|
-
|
5
|
-
def compiler
|
6
|
-
@compiler ||= begin
|
7
|
-
"Arel::SqlCompiler::#{engine.adapter_name}Compiler".constantize.new(self)
|
8
|
-
rescue
|
9
|
-
Arel::SqlCompiler::GenericCompiler.new(self)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def to_sql(formatter = Sql::SelectStatement.new(self))
|
14
|
-
formatter.select compiler.select_sql, self
|
15
|
-
end
|
16
|
-
|
17
|
-
def christener
|
18
|
-
@christener ||= Sql::Christener.new
|
19
|
-
end
|
20
|
-
|
21
|
-
def inclusion_predicate_sql
|
22
|
-
"IN"
|
23
|
-
end
|
24
|
-
|
25
|
-
def exclusion_predicate_sql
|
26
|
-
"NOT IN"
|
27
|
-
end
|
28
|
-
|
29
|
-
def primary_key
|
30
|
-
connection_id = engine.connection.object_id
|
31
|
-
if @@connection_tables_primary_keys[connection_id] && @@connection_tables_primary_keys[connection_id].has_key?(table.name)
|
32
|
-
@@connection_tables_primary_keys[connection_id][table.name]
|
33
|
-
else
|
34
|
-
@@connection_tables_primary_keys[connection_id] ||= {}
|
35
|
-
@@connection_tables_primary_keys[connection_id][table.name] = engine.connection.primary_key(table.name)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
protected
|
40
|
-
|
41
|
-
def from_clauses
|
42
|
-
sources.blank? ? table_sql(Sql::TableReference.new(self)) : sources
|
43
|
-
end
|
44
|
-
|
45
|
-
def select_clauses
|
46
|
-
attributes.collect { |a| a.to_sql(Sql::SelectClause.new(self)) }
|
47
|
-
end
|
48
|
-
|
49
|
-
def where_clauses
|
50
|
-
wheres.collect { |w| w.to_sql(Sql::WhereClause.new(self)) }
|
51
|
-
end
|
52
|
-
|
53
|
-
def group_clauses
|
54
|
-
groupings.collect { |g| g.to_sql(Sql::GroupClause.new(self)) }
|
55
|
-
end
|
56
|
-
|
57
|
-
def having_clauses
|
58
|
-
havings.collect { |g| g.to_sql(Sql::HavingClause.new(self)) }
|
59
|
-
end
|
60
|
-
|
61
|
-
def order_clauses
|
62
|
-
orders.collect { |o| o.to_sql(Sql::OrderClause.new(self)) }
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
module Arel
|
2
|
-
class Externalization < Compound
|
3
|
-
include Recursion::BaseCase
|
4
|
-
|
5
|
-
def table_sql(formatter = Sql::TableReference.new(relation))
|
6
|
-
formatter.select relation.compiler.select_sql, self
|
7
|
-
end
|
8
|
-
|
9
|
-
# REMOVEME
|
10
|
-
def name
|
11
|
-
relation.name + '_external'
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module Arel
|
2
|
-
class Deletion < Compound
|
3
|
-
def to_sql
|
4
|
-
compiler.delete_sql
|
5
|
-
end
|
6
|
-
end
|
7
|
-
|
8
|
-
class Insert < Compound
|
9
|
-
def to_sql(include_returning = true)
|
10
|
-
compiler.insert_sql(include_returning)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
class Update < Compound
|
15
|
-
def to_sql
|
16
|
-
compiler.update_sql
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|