arel 1.0.1 → 2.0.0
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/MIT-LICENSE.txt +20 -0
- data/Manifest.txt +105 -0
- data/README.markdown +12 -32
- data/Rakefile +17 -0
- data/arel.gemspec +39 -0
- data/lib/arel.rb +30 -9
- data/lib/arel/attributes.rb +20 -0
- data/lib/arel/attributes/attribute.rb +190 -0
- data/lib/arel/compatibility/wheres.rb +33 -0
- data/lib/arel/crud.rb +37 -0
- data/lib/arel/delete_manager.rb +22 -0
- data/lib/arel/deprecated.rb +4 -0
- data/lib/arel/expression.rb +4 -0
- data/lib/arel/expressions.rb +23 -0
- data/lib/arel/insert_manager.rb +34 -0
- data/lib/arel/nodes.rb +44 -0
- data/lib/arel/nodes/and.rb +6 -0
- data/lib/arel/nodes/assignment.rb +6 -0
- data/lib/arel/nodes/avg.rb +6 -0
- data/lib/arel/nodes/between.rb +6 -0
- data/lib/arel/nodes/binary.rb +12 -0
- data/lib/arel/nodes/count.rb +13 -0
- data/lib/arel/nodes/delete_statement.rb +17 -0
- data/lib/arel/nodes/does_not_match.rb +6 -0
- data/lib/arel/nodes/equality.rb +9 -0
- data/lib/arel/nodes/exists.rb +11 -0
- data/lib/arel/nodes/function.rb +18 -0
- data/lib/arel/nodes/greater_than.rb +6 -0
- data/lib/arel/nodes/greater_than_or_equal.rb +6 -0
- data/lib/arel/nodes/group.rb +11 -0
- data/lib/arel/nodes/grouping.rb +11 -0
- data/lib/arel/nodes/having.rb +11 -0
- data/lib/arel/nodes/in.rb +6 -0
- data/lib/arel/nodes/inner_join.rb +6 -0
- data/lib/arel/nodes/insert_statement.rb +19 -0
- data/lib/arel/nodes/join.rb +13 -0
- data/lib/arel/nodes/less_than.rb +6 -0
- data/lib/arel/nodes/less_than_or_equal.rb +6 -0
- data/lib/arel/nodes/lock.rb +6 -0
- data/lib/arel/nodes/matches.rb +6 -0
- data/lib/arel/nodes/max.rb +6 -0
- data/lib/arel/nodes/min.rb +6 -0
- data/lib/arel/nodes/node.rb +30 -0
- data/lib/arel/nodes/not_equal.rb +6 -0
- data/lib/arel/nodes/not_in.rb +6 -0
- data/lib/arel/nodes/offset.rb +11 -0
- data/lib/arel/nodes/on.rb +11 -0
- data/lib/arel/nodes/or.rb +6 -0
- data/lib/arel/nodes/ordering.rb +19 -0
- data/lib/arel/nodes/outer_join.rb +6 -0
- data/lib/arel/nodes/select_core.rb +25 -0
- data/lib/arel/nodes/select_statement.rb +22 -0
- data/lib/arel/nodes/sql_literal.rb +7 -0
- data/lib/arel/nodes/string_join.rb +11 -0
- data/lib/arel/nodes/sum.rb +6 -0
- data/lib/arel/nodes/table_alias.rb +21 -0
- data/lib/arel/nodes/unqualified_column.rb +19 -0
- data/lib/arel/nodes/update_statement.rb +21 -0
- data/lib/arel/nodes/values.rb +12 -0
- data/lib/arel/relation.rb +6 -0
- data/lib/arel/select_manager.rb +203 -0
- data/lib/arel/sql/engine.rb +10 -0
- data/lib/arel/sql_literal.rb +1 -10
- data/lib/arel/table.rb +126 -0
- data/lib/arel/tree_manager.rb +26 -0
- data/lib/arel/update_manager.rb +48 -0
- data/lib/arel/visitors.rb +30 -0
- data/lib/arel/visitors/dot.rb +233 -0
- data/lib/arel/visitors/join_sql.rb +38 -0
- data/lib/arel/visitors/mysql.rb +16 -0
- data/lib/arel/visitors/oracle.rb +69 -0
- data/lib/arel/visitors/order_clauses.rb +9 -0
- data/lib/arel/visitors/postgresql.rb +54 -0
- data/lib/arel/visitors/to_sql.rb +301 -0
- data/lib/arel/visitors/where_sql.rb +9 -0
- data/spec/activerecord_compat_spec.rb +18 -0
- data/spec/attributes/attribute_spec.rb +648 -0
- data/spec/attributes_spec.rb +33 -6
- data/spec/crud_spec.rb +69 -0
- data/spec/delete_manager_spec.rb +53 -0
- data/spec/insert_manager_spec.rb +141 -0
- data/spec/nodes/count_spec.rb +18 -0
- data/spec/nodes/delete_statement_spec.rb +15 -0
- data/spec/nodes/equality_spec.rb +72 -0
- data/spec/nodes/insert_statement_spec.rb +18 -0
- data/spec/nodes/or_spec.rb +20 -0
- data/spec/nodes/select_core_spec.rb +21 -0
- data/spec/nodes/select_statement_spec.rb +14 -0
- data/spec/nodes/sql_literal_spec.rb +26 -0
- data/spec/nodes/sum_spec.rb +12 -0
- data/spec/nodes/update_statement_spec.rb +18 -0
- data/spec/select_manager_spec.rb +581 -0
- data/spec/spec.opts +3 -0
- data/spec/spec_helper.rb +6 -21
- data/spec/support/fake_record.rb +89 -0
- data/spec/support/shared/tree_manager_shared.rb +9 -0
- data/spec/table_spec.rb +176 -0
- data/spec/update_manager_spec.rb +89 -0
- data/spec/visitors/join_sql_spec.rb +35 -0
- data/spec/visitors/oracle_spec.rb +111 -0
- data/spec/visitors/to_sql_spec.rb +134 -0
- metadata +160 -260
- data/lib/arel/algebra.rb +0 -10
- data/lib/arel/algebra/attributes.rb +0 -7
- data/lib/arel/algebra/attributes/attribute.rb +0 -304
- data/lib/arel/algebra/attributes/boolean.rb +0 -21
- data/lib/arel/algebra/attributes/decimal.rb +0 -9
- data/lib/arel/algebra/attributes/float.rb +0 -9
- data/lib/arel/algebra/attributes/integer.rb +0 -10
- data/lib/arel/algebra/attributes/string.rb +0 -10
- data/lib/arel/algebra/attributes/time.rb +0 -6
- data/lib/arel/algebra/core_extensions.rb +0 -3
- data/lib/arel/algebra/core_extensions/hash.rb +0 -7
- data/lib/arel/algebra/core_extensions/object.rb +0 -13
- data/lib/arel/algebra/core_extensions/symbol.rb +0 -9
- data/lib/arel/algebra/expression.rb +0 -56
- data/lib/arel/algebra/header.rb +0 -66
- data/lib/arel/algebra/ordering.rb +0 -31
- data/lib/arel/algebra/predicates.rb +0 -306
- data/lib/arel/algebra/relations.rb +0 -16
- data/lib/arel/algebra/relations/operations/from.rb +0 -14
- data/lib/arel/algebra/relations/operations/group.rb +0 -14
- data/lib/arel/algebra/relations/operations/having.rb +0 -14
- data/lib/arel/algebra/relations/operations/join.rb +0 -103
- data/lib/arel/algebra/relations/operations/lock.rb +0 -10
- data/lib/arel/algebra/relations/operations/order.rb +0 -23
- data/lib/arel/algebra/relations/operations/project.rb +0 -20
- data/lib/arel/algebra/relations/operations/skip.rb +0 -14
- data/lib/arel/algebra/relations/operations/take.rb +0 -18
- data/lib/arel/algebra/relations/operations/where.rb +0 -24
- data/lib/arel/algebra/relations/relation.rb +0 -205
- data/lib/arel/algebra/relations/row.rb +0 -29
- data/lib/arel/algebra/relations/utilities/compound.rb +0 -55
- data/lib/arel/algebra/relations/utilities/externalization.rb +0 -26
- data/lib/arel/algebra/relations/utilities/nil.rb +0 -7
- data/lib/arel/algebra/relations/writes.rb +0 -47
- data/lib/arel/algebra/value.rb +0 -53
- data/lib/arel/engines.rb +0 -2
- data/lib/arel/engines/memory.rb +0 -2
- data/lib/arel/engines/memory/engine.rb +0 -10
- data/lib/arel/engines/memory/relations.rb +0 -2
- data/lib/arel/engines/memory/relations/array.rb +0 -37
- data/lib/arel/engines/memory/relations/operations.rb +0 -9
- data/lib/arel/engines/sql.rb +0 -6
- data/lib/arel/engines/sql/attributes.rb +0 -45
- data/lib/arel/engines/sql/christener.rb +0 -20
- data/lib/arel/engines/sql/compilers/ibm_db_compiler.rb +0 -48
- data/lib/arel/engines/sql/compilers/mysql_compiler.rb +0 -11
- data/lib/arel/engines/sql/compilers/oracle_compiler.rb +0 -106
- data/lib/arel/engines/sql/compilers/postgresql_compiler.rb +0 -50
- data/lib/arel/engines/sql/compilers/sqlite_compiler.rb +0 -9
- data/lib/arel/engines/sql/core_extensions.rb +0 -4
- data/lib/arel/engines/sql/core_extensions/array.rb +0 -24
- data/lib/arel/engines/sql/core_extensions/nil_class.rb +0 -15
- data/lib/arel/engines/sql/core_extensions/object.rb +0 -19
- data/lib/arel/engines/sql/core_extensions/range.rb +0 -19
- data/lib/arel/engines/sql/engine.rb +0 -47
- data/lib/arel/engines/sql/formatters.rb +0 -138
- data/lib/arel/engines/sql/relations.rb +0 -3
- data/lib/arel/engines/sql/relations/compiler.rb +0 -153
- data/lib/arel/engines/sql/relations/table.rb +0 -100
- data/lib/arel/engines/sql/relations/utilities/nil.rb +0 -6
- data/lib/arel/recursion/base_case.rb +0 -13
- data/lib/arel/session.rb +0 -35
- data/lib/arel/version.rb +0 -3
- data/spec/algebra/unit/predicates/binary_spec.rb +0 -35
- data/spec/algebra/unit/predicates/equality_spec.rb +0 -29
- data/spec/algebra/unit/predicates/in_spec.rb +0 -12
- data/spec/algebra/unit/predicates/inequality_spec.rb +0 -32
- data/spec/algebra/unit/predicates/predicate_spec.rb +0 -22
- data/spec/algebra/unit/primitives/attribute_spec.rb +0 -175
- data/spec/algebra/unit/primitives/expression_spec.rb +0 -39
- data/spec/algebra/unit/primitives/value_spec.rb +0 -15
- data/spec/algebra/unit/relations/alias_spec.rb +0 -16
- data/spec/algebra/unit/relations/delete_spec.rb +0 -9
- data/spec/algebra/unit/relations/group_spec.rb +0 -10
- data/spec/algebra/unit/relations/insert_spec.rb +0 -9
- data/spec/algebra/unit/relations/join_spec.rb +0 -18
- data/spec/algebra/unit/relations/order_spec.rb +0 -21
- data/spec/algebra/unit/relations/project_spec.rb +0 -34
- data/spec/algebra/unit/relations/relation_spec.rb +0 -241
- data/spec/algebra/unit/relations/skip_spec.rb +0 -10
- data/spec/algebra/unit/relations/table_spec.rb +0 -38
- data/spec/algebra/unit/relations/take_spec.rb +0 -10
- data/spec/algebra/unit/relations/update_spec.rb +0 -9
- data/spec/algebra/unit/relations/where_spec.rb +0 -19
- data/spec/algebra/unit/session/session_spec.rb +0 -84
- data/spec/attributes/boolean_spec.rb +0 -57
- data/spec/attributes/float_spec.rb +0 -119
- data/spec/attributes/header_spec.rb +0 -42
- data/spec/attributes/integer_spec.rb +0 -119
- data/spec/attributes/string_spec.rb +0 -43
- data/spec/attributes/time_spec.rb +0 -24
- data/spec/engines/memory/integration/joins/cross_engine_spec.rb +0 -61
- data/spec/engines/memory/unit/relations/array_spec.rb +0 -33
- data/spec/engines/memory/unit/relations/insert_spec.rb +0 -28
- data/spec/engines/memory/unit/relations/join_spec.rb +0 -32
- data/spec/engines/memory/unit/relations/order_spec.rb +0 -28
- data/spec/engines/memory/unit/relations/project_spec.rb +0 -27
- data/spec/engines/memory/unit/relations/skip_spec.rb +0 -31
- data/spec/engines/memory/unit/relations/take_spec.rb +0 -28
- data/spec/engines/memory/unit/relations/where_spec.rb +0 -43
- data/spec/engines/sql/integration/joins/with_adjacency_spec.rb +0 -258
- data/spec/engines/sql/integration/joins/with_aggregations_spec.rb +0 -221
- data/spec/engines/sql/integration/joins/with_compounds_spec.rb +0 -137
- data/spec/engines/sql/unit/engine_spec.rb +0 -65
- data/spec/engines/sql/unit/predicates/binary_spec.rb +0 -140
- data/spec/engines/sql/unit/predicates/equality_spec.rb +0 -75
- data/spec/engines/sql/unit/predicates/in_spec.rb +0 -179
- data/spec/engines/sql/unit/predicates/noteq_spec.rb +0 -75
- data/spec/engines/sql/unit/predicates/predicates_spec.rb +0 -79
- data/spec/engines/sql/unit/primitives/attribute_spec.rb +0 -36
- data/spec/engines/sql/unit/primitives/expression_spec.rb +0 -28
- data/spec/engines/sql/unit/primitives/literal_spec.rb +0 -43
- data/spec/engines/sql/unit/primitives/value_spec.rb +0 -29
- data/spec/engines/sql/unit/relations/alias_spec.rb +0 -53
- data/spec/engines/sql/unit/relations/delete_spec.rb +0 -83
- data/spec/engines/sql/unit/relations/from_spec.rb +0 -64
- data/spec/engines/sql/unit/relations/group_spec.rb +0 -72
- data/spec/engines/sql/unit/relations/having_spec.rb +0 -78
- data/spec/engines/sql/unit/relations/insert_spec.rb +0 -143
- data/spec/engines/sql/unit/relations/join_spec.rb +0 -180
- data/spec/engines/sql/unit/relations/lock_spec.rb +0 -86
- data/spec/engines/sql/unit/relations/order_spec.rb +0 -161
- data/spec/engines/sql/unit/relations/project_spec.rb +0 -143
- data/spec/engines/sql/unit/relations/skip_spec.rb +0 -41
- data/spec/engines/sql/unit/relations/table_spec.rb +0 -122
- data/spec/engines/sql/unit/relations/take_spec.rb +0 -75
- data/spec/engines/sql/unit/relations/update_spec.rb +0 -203
- data/spec/engines/sql/unit/relations/where_spec.rb +0 -72
- data/spec/relations/join_spec.rb +0 -42
- data/spec/relations/relation_spec.rb +0 -31
- data/spec/shared/relation_spec.rb +0 -255
- data/spec/sql/christener_spec.rb +0 -70
- data/spec/support/connections/mysql_connection.rb +0 -14
- data/spec/support/connections/oracle_connection.rb +0 -17
- data/spec/support/connections/postgresql_connection.rb +0 -13
- data/spec/support/connections/sqlite3_connection.rb +0 -24
- data/spec/support/guards.rb +0 -28
- data/spec/support/matchers/disambiguate_attributes.rb +0 -28
- data/spec/support/matchers/hash_the_same_as.rb +0 -26
- data/spec/support/matchers/have_rows.rb +0 -18
- data/spec/support/model.rb +0 -67
- data/spec/support/schemas/mysql_schema.rb +0 -26
- data/spec/support/schemas/oracle_schema.rb +0 -20
- data/spec/support/schemas/postgresql_schema.rb +0 -26
- data/spec/support/schemas/sqlite3_schema.rb +0 -26
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Arel
|
4
|
-
describe Expression do
|
5
|
-
before do
|
6
|
-
@relation = Table.new(:users)
|
7
|
-
@attribute = @relation[:id]
|
8
|
-
end
|
9
|
-
|
10
|
-
describe 'Expression::Transformations' do
|
11
|
-
before do
|
12
|
-
@expression = Count.new(@attribute)
|
13
|
-
end
|
14
|
-
|
15
|
-
describe '#bind' do
|
16
|
-
it "manufactures an attribute with a rebound relation and self as the ancestor" do
|
17
|
-
derived_relation = @relation.where(@relation[:id].eq(1))
|
18
|
-
@expression.bind(derived_relation).should == Count.new(@attribute.bind(derived_relation), nil, @expression)
|
19
|
-
end
|
20
|
-
|
21
|
-
it "returns self if the substituting to the same relation" do
|
22
|
-
@expression.bind(@relation).should == @expression
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe '#as' do
|
27
|
-
it "manufactures an aliased expression" do
|
28
|
-
@expression.as(:alias).should == Expression.new(@attribute, :alias, @expression)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe '#to_attribute' do
|
33
|
-
it "manufactures an attribute with the expression as an ancestor" do
|
34
|
-
@expression.to_attribute(@relation).should == Attribute.new(@relation, @expression.alias, :ancestor => @expression)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Arel
|
4
|
-
describe Value do
|
5
|
-
before do
|
6
|
-
@relation = Table.new(:users)
|
7
|
-
end
|
8
|
-
|
9
|
-
describe '#bind' do
|
10
|
-
it "manufactures a new value whose relation is the provided relation" do
|
11
|
-
Value.new(1, @relation).bind(another_relation = Table.new(:photos)).should == Value.new(1, another_relation)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Arel
|
4
|
-
describe Alias do
|
5
|
-
before do
|
6
|
-
@relation = Table.new(:users)
|
7
|
-
end
|
8
|
-
|
9
|
-
describe '==' do
|
10
|
-
it "obtains if the objects are the same" do
|
11
|
-
check Alias.new(@relation).should_not == Alias.new(@relation)
|
12
|
-
(aliaz = Alias.new(@relation)).should == aliaz
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Arel
|
4
|
-
describe Join do
|
5
|
-
before do
|
6
|
-
@relation1 = Table.new(:users)
|
7
|
-
@relation2 = Table.new(:photos)
|
8
|
-
@predicate = @relation1[:id].eq(@relation2[:user_id])
|
9
|
-
end
|
10
|
-
|
11
|
-
describe '#attributes' do
|
12
|
-
it 'combines the attributes of the two relations' do
|
13
|
-
join = InnerJoin.new(@relation1, @relation2, @predicate)
|
14
|
-
join.attributes.should == (@relation1.attributes | @relation2.attributes).bind(join)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Arel
|
4
|
-
describe Order do
|
5
|
-
before do
|
6
|
-
@relation = Table.new(:users)
|
7
|
-
@attribute = @relation[:id]
|
8
|
-
end
|
9
|
-
|
10
|
-
describe "#==" do
|
11
|
-
it "returns true when the Orders are for the same attribute and direction" do
|
12
|
-
Ascending.new(@attribute).should == Ascending.new(@attribute)
|
13
|
-
end
|
14
|
-
|
15
|
-
it "returns false when the Orders are for a diferent direction" do
|
16
|
-
Ascending.new(@attribute).should_not == Descending.new(@attribute)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Arel
|
4
|
-
describe Project do
|
5
|
-
before do
|
6
|
-
@relation = Table.new(:users)
|
7
|
-
@attribute = @relation[:id]
|
8
|
-
end
|
9
|
-
|
10
|
-
describe '#attributes' do
|
11
|
-
before do
|
12
|
-
@projection = Project.new(@relation, [@attribute])
|
13
|
-
end
|
14
|
-
|
15
|
-
it "manufactures attributes associated with the projection relation" do
|
16
|
-
@projection.attributes.should == [@attribute].collect { |a| a.bind(@projection) }
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe '#externalizable?' do
|
21
|
-
describe 'when the projections are attributes' do
|
22
|
-
it 'returns false' do
|
23
|
-
Project.new(@relation, [@attribute]).should_not be_externalizable
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe 'when the projections include an aggregation' do
|
28
|
-
it "obtains" do
|
29
|
-
Project.new(@relation, [@attribute.sum]).should be_externalizable
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,241 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Arel
|
4
|
-
describe Relation do
|
5
|
-
before do
|
6
|
-
@relation = Table.new(:users)
|
7
|
-
@attribute1 = @relation[:id]
|
8
|
-
@attribute2 = @relation[:name]
|
9
|
-
end
|
10
|
-
|
11
|
-
describe '[]' do
|
12
|
-
describe 'when given an', Attribute do
|
13
|
-
it "return the attribute congruent to the provided attribute" do
|
14
|
-
@relation[@attribute1].should == @attribute1
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe 'when given a', Symbol, String do
|
19
|
-
it "returns the attribute with the same name" do
|
20
|
-
check @relation[:id].should == @attribute1
|
21
|
-
check @relation['id'].should == @attribute1
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe 'Relation::Operable' do
|
27
|
-
describe 'joins' do
|
28
|
-
before do
|
29
|
-
@predicate = @relation[:id].eq(@relation[:id])
|
30
|
-
end
|
31
|
-
|
32
|
-
describe '#join' do
|
33
|
-
describe 'when given a relation' do
|
34
|
-
it "manufactures an inner join operation between those two relations" do
|
35
|
-
join = @relation.join(@relation).on(@predicate)
|
36
|
-
join.relation1.should == @relation
|
37
|
-
join.relation2.should == @relation
|
38
|
-
join.predicates.should == [@predicate]
|
39
|
-
join.should be_kind_of(InnerJoin)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe "when given a string" do
|
44
|
-
it "manufactures a join operation with the string passed through" do
|
45
|
-
arbitrary_string = "ASDF"
|
46
|
-
|
47
|
-
join = @relation.join(arbitrary_string)
|
48
|
-
join.relation1.should == @relation
|
49
|
-
join.relation2.should == arbitrary_string
|
50
|
-
join.predicates.should == []
|
51
|
-
join.should be_kind_of StringJoin
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe "when given something blank" do
|
56
|
-
it "returns self" do
|
57
|
-
@relation.join.should == @relation
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe '#outer_join' do
|
63
|
-
it "manufactures a left outer join operation between those two relations" do
|
64
|
-
join = @relation.outer_join(@relation).on(@predicate)
|
65
|
-
join.relation1.should == @relation
|
66
|
-
join.relation2.should == @relation
|
67
|
-
join.predicates.should == [@predicate]
|
68
|
-
join.should be_kind_of OuterJoin
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe '#project' do
|
74
|
-
it "manufactures a projection relation" do
|
75
|
-
project = @relation.project(@attribute1, @attribute2)
|
76
|
-
project.relation.should == @relation
|
77
|
-
project.projections.should == [@attribute1, @attribute2]
|
78
|
-
project.should be_kind_of Project
|
79
|
-
end
|
80
|
-
|
81
|
-
describe "when given blank attributes" do
|
82
|
-
it "returns self" do
|
83
|
-
@relation.project.should == @relation
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
describe '#alias' do
|
89
|
-
it "manufactures an alias relation" do
|
90
|
-
@relation.alias.relation.should == Alias.new(@relation).relation
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe '#where' do
|
95
|
-
before do
|
96
|
-
@predicate = Predicates::Equality.new(@attribute1, @attribute2)
|
97
|
-
end
|
98
|
-
|
99
|
-
it "manufactures a where relation" do
|
100
|
-
where = @relation.where("intern\nnet")
|
101
|
-
where.to_sql.should =~ /intern\nnet/
|
102
|
-
end
|
103
|
-
|
104
|
-
it "manufactures a where relation" do
|
105
|
-
where = @relation.where(@predicate)
|
106
|
-
where.relation.should == @relation
|
107
|
-
where.predicates.should == [@predicate]
|
108
|
-
where.should be_kind_of Where
|
109
|
-
end
|
110
|
-
|
111
|
-
it "accepts arbitrary strings" do
|
112
|
-
where = @relation.where("arbitrary")
|
113
|
-
where.relation.should == @relation
|
114
|
-
|
115
|
-
where.predicates.length.should == 1
|
116
|
-
where.predicates.first.value.should == "arbitrary"
|
117
|
-
|
118
|
-
where.should be_kind_of Where
|
119
|
-
end
|
120
|
-
|
121
|
-
describe 'when given a blank predicate' do
|
122
|
-
it 'returns self' do
|
123
|
-
@relation.where.should == @relation
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
describe '#order' do
|
129
|
-
it "manufactures an order relation" do
|
130
|
-
order = @relation.order(@attribute1, @attribute2)
|
131
|
-
order.relation.should == @relation
|
132
|
-
order.orderings.should == [@attribute1, @attribute2]
|
133
|
-
order.should be_kind_of Order
|
134
|
-
end
|
135
|
-
|
136
|
-
describe 'when given a blank ordering' do
|
137
|
-
it 'returns self' do
|
138
|
-
@relation.order.should == @relation
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
describe '#take' do
|
144
|
-
it "manufactures a take relation" do
|
145
|
-
take = @relation.take(5)
|
146
|
-
take.relation.should == @relation
|
147
|
-
take.taken.should == 5
|
148
|
-
end
|
149
|
-
|
150
|
-
describe 'when given a blank number of items' do
|
151
|
-
it 'raises error' do
|
152
|
-
lambda { @relation.take }.should raise_exception
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
describe '#skip' do
|
158
|
-
it "manufactures a skip relation" do
|
159
|
-
skip = @relation.skip(4)
|
160
|
-
skip.relation.should == @relation
|
161
|
-
skip.skipped.should == 4
|
162
|
-
skip.should be_kind_of Skip
|
163
|
-
end
|
164
|
-
|
165
|
-
describe 'when given a blank number of items' do
|
166
|
-
it 'returns self' do
|
167
|
-
@relation.skip.should == @relation
|
168
|
-
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
describe '#group' do
|
173
|
-
it 'manufactures a group relation' do
|
174
|
-
group = @relation.group(@attribute1, @attribute2)
|
175
|
-
group.relation.should == @relation
|
176
|
-
group.groupings.should == [@attribute1, @attribute2]
|
177
|
-
group.should be_kind_of Group
|
178
|
-
sql = group.to_sql
|
179
|
-
sql.should =~ /GROUP BY/
|
180
|
-
end
|
181
|
-
|
182
|
-
describe 'when given blank groupings' do
|
183
|
-
it 'returns self' do
|
184
|
-
@relation.group.should == @relation
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
describe 'relation is writable' do
|
190
|
-
describe '#delete' do
|
191
|
-
it 'manufactures a deletion relation' do
|
192
|
-
Session.start do |s|
|
193
|
-
s.should_receive(:delete) do |delete|
|
194
|
-
delete.relation.should == @relation
|
195
|
-
delete.should be_kind_of Deletion
|
196
|
-
end
|
197
|
-
@relation.delete
|
198
|
-
end
|
199
|
-
end
|
200
|
-
end
|
201
|
-
|
202
|
-
describe '#insert' do
|
203
|
-
it 'manufactures an insertion relation' do
|
204
|
-
Session.start do |s|
|
205
|
-
record = { @relation[:name] => Value.new('carl', @relation) }
|
206
|
-
s.should_receive(:create) do |insert|
|
207
|
-
insert.relation.should == @relation
|
208
|
-
insert.record.should == record
|
209
|
-
insert.should be_kind_of Insert
|
210
|
-
insert
|
211
|
-
end
|
212
|
-
@relation.insert(record)
|
213
|
-
end
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
describe '#update' do
|
218
|
-
it 'manufactures an update relation' do
|
219
|
-
Session.start do |s|
|
220
|
-
assignments = { @relation[:name] => Value.new('bob', @relation) }
|
221
|
-
s.should_receive(:update) do |update|
|
222
|
-
update.relation.should == @relation
|
223
|
-
update.assignments.should == assignments
|
224
|
-
update.should be_kind_of Update
|
225
|
-
update
|
226
|
-
end
|
227
|
-
@relation.update(assignments)
|
228
|
-
end
|
229
|
-
end
|
230
|
-
end
|
231
|
-
end
|
232
|
-
end
|
233
|
-
|
234
|
-
describe 'is enumerable' do
|
235
|
-
it "implements enumerable" do
|
236
|
-
@relation.map { |value| value }.should ==
|
237
|
-
@relation.session.read(@relation).map { |value| value }
|
238
|
-
end
|
239
|
-
end
|
240
|
-
end
|
241
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Arel
|
4
|
-
describe Table do
|
5
|
-
before do
|
6
|
-
@relation = Table.new(:users)
|
7
|
-
end
|
8
|
-
|
9
|
-
describe '[]' do
|
10
|
-
describe 'when given a', Symbol do
|
11
|
-
it "manufactures an attribute if the symbol names an attribute within the relation" do
|
12
|
-
check @relation[:id].should == Attributes::Integer.new(@relation, :id)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
describe 'when given an', Attribute do
|
17
|
-
it "returns the attribute if the attribute is within the relation" do
|
18
|
-
@relation[@relation[:id]].should == @relation[:id]
|
19
|
-
end
|
20
|
-
|
21
|
-
it "returns nil if the attribtue is not within the relation" do
|
22
|
-
another_relation = Table.new(:photos)
|
23
|
-
@relation[another_relation[:id]].should be_nil
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe 'when given an', Expression do
|
28
|
-
before do
|
29
|
-
@expression = @relation[:id].count
|
30
|
-
end
|
31
|
-
|
32
|
-
it "returns the Expression if the Expression is within the relation" do
|
33
|
-
@relation[@expression].should be_nil
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|