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
data/spec/relations/join_spec.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "Arel" do
|
4
|
-
before :all do
|
5
|
-
@owner = Arel::Model.build do |r|
|
6
|
-
r.engine Arel::Testing::Engine.new
|
7
|
-
|
8
|
-
r.attribute :id, Arel::Attributes::Integer
|
9
|
-
end
|
10
|
-
|
11
|
-
@thing = Arel::Model.build do |r|
|
12
|
-
r.engine Arel::Testing::Engine.new
|
13
|
-
|
14
|
-
r.attribute :id, Arel::Attributes::Integer
|
15
|
-
r.attribute :owner_id, Arel::Attributes::Integer
|
16
|
-
r.attribute :name, Arel::Attributes::String
|
17
|
-
r.attribute :age, Arel::Attributes::Integer
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe "Join" do
|
22
|
-
before :all do
|
23
|
-
@relation = @thing.join(@owner).on(@thing[:owner_id].eq(@owner[:id]))
|
24
|
-
@expected = []
|
25
|
-
|
26
|
-
3.times do |owner_id|
|
27
|
-
@owner.insert([owner_id])
|
28
|
-
|
29
|
-
8.times do |i|
|
30
|
-
thing_id = owner_id * 8 + i
|
31
|
-
age = 2 * thing_id
|
32
|
-
name = "Name #{thing_id % 6}"
|
33
|
-
|
34
|
-
@thing.insert([thing_id, owner_id, name, age])
|
35
|
-
@expected << Arel::Row.new(@relation, [thing_id, owner_id, name, age, owner_id])
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
it_should_behave_like 'A Relation'
|
41
|
-
end
|
42
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "Arel" do
|
4
|
-
before :all do
|
5
|
-
@engine = Arel::Testing::Engine.new
|
6
|
-
@relation = Arel::Model.build do |r|
|
7
|
-
r.engine @engine
|
8
|
-
|
9
|
-
r.attribute :id, Arel::Attributes::Integer
|
10
|
-
r.attribute :name, Arel::Attributes::String
|
11
|
-
r.attribute :age, Arel::Attributes::Integer
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "Relation" do
|
16
|
-
before :all do
|
17
|
-
@expected = (1..20).map { |i| @relation.insert([i, "Name #{i % 6}", 2 * i]) }
|
18
|
-
end
|
19
|
-
|
20
|
-
it_should_behave_like 'A Relation'
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "Relation" do
|
24
|
-
describe "#insert" do
|
25
|
-
it "inserts the row into the engine" do
|
26
|
-
@relation.insert([1, 'Foo', 10])
|
27
|
-
@engine.rows.should == [[1, 'Foo', 10]]
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,255 +0,0 @@
|
|
1
|
-
share_examples_for 'A Relation' do
|
2
|
-
|
3
|
-
before :all do
|
4
|
-
# The two needed instance variables need to be set in a
|
5
|
-
# before :all callback.
|
6
|
-
# @relation is the relation being tested here.
|
7
|
-
# @expected is an array of the elements that are expected to be in
|
8
|
-
# the relation.
|
9
|
-
%w[ @relation @expected ].each do |ivar|
|
10
|
-
raise "#{ivar} needs to be defined" unless instance_variable_get(ivar)
|
11
|
-
end
|
12
|
-
|
13
|
-
# There needs to be enough items to be able to run all the tests
|
14
|
-
raise "@expected needs to have at least 6 items" unless @expected.length >= 6
|
15
|
-
end
|
16
|
-
|
17
|
-
before :each do
|
18
|
-
@expected = @expected.dup
|
19
|
-
end
|
20
|
-
|
21
|
-
describe "#each" do
|
22
|
-
it "iterates over the rows in any order" do
|
23
|
-
@relation.should have_rows(@expected)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe "#where" do
|
28
|
-
before :all do
|
29
|
-
@expected = @expected.sort_by { |r| r[@relation[:age]] }
|
30
|
-
@pivot = @expected[@expected.length / 2]
|
31
|
-
end
|
32
|
-
|
33
|
-
it "finds rows with an equal to predicate" do
|
34
|
-
expected = @expected.select { |r| r[@relation[:age]] == @pivot[@relation[:age]] }
|
35
|
-
@relation.where(@relation[:age].eq(@pivot[@relation[:age]])).should have_rows(expected)
|
36
|
-
end
|
37
|
-
|
38
|
-
it "finds rows with an equal to complement predicate" do
|
39
|
-
expected = @expected.select { |r| r[@relation[:age]] != @pivot[@relation[:age]] }
|
40
|
-
@relation.where(@relation[:age].eq(@pivot[@relation[:age]]).complement).should have_rows(expected)
|
41
|
-
end
|
42
|
-
|
43
|
-
it "finds rows with a not eq predicate" do
|
44
|
-
expected = @expected.select { |r| r[@relation[:age]] != @pivot[@relation[:age]] }
|
45
|
-
@relation.where(@relation[:age].not_eq(@pivot[@relation[:age]])).should have_rows(expected)
|
46
|
-
end
|
47
|
-
|
48
|
-
it "finds rows with an not eq complement predicate" do
|
49
|
-
expected = @expected.select { |r| r[@relation[:age]] == @pivot[@relation[:age]] }
|
50
|
-
@relation.where(@relation[:age].not_eq(@pivot[@relation[:age]]).complement).should have_rows(expected)
|
51
|
-
end
|
52
|
-
|
53
|
-
it "finds rows with a less than predicate" do
|
54
|
-
expected = @expected.select { |r| r[@relation[:age]] < @pivot[@relation[:age]] }
|
55
|
-
@relation.where(@relation[:age].lt(@pivot[@relation[:age]])).should have_rows(expected)
|
56
|
-
end
|
57
|
-
|
58
|
-
it "finds rows with a less than complement predicate" do
|
59
|
-
expected = @expected.select { |r| r[@relation[:age]] >= @pivot[@relation[:age]] }
|
60
|
-
@relation.where(@relation[:age].lt(@pivot[@relation[:age]]).complement).should have_rows(expected)
|
61
|
-
end
|
62
|
-
|
63
|
-
it "finds rows with a less than or equal to predicate" do
|
64
|
-
expected = @expected.select { |r| r[@relation[:age]] <= @pivot[@relation[:age]] }
|
65
|
-
@relation.where(@relation[:age].lteq(@pivot[@relation[:age]])).should have_rows(expected)
|
66
|
-
end
|
67
|
-
|
68
|
-
it "finds rows with a less than or equal to complement predicate" do
|
69
|
-
expected = @expected.select { |r| r[@relation[:age]] > @pivot[@relation[:age]] }
|
70
|
-
@relation.where(@relation[:age].lteq(@pivot[@relation[:age]]).complement).should have_rows(expected)
|
71
|
-
end
|
72
|
-
|
73
|
-
it "finds rows with a greater than predicate" do
|
74
|
-
expected = @expected.select { |r| r[@relation[:age]] > @pivot[@relation[:age]] }
|
75
|
-
@relation.where(@relation[:age].gt(@pivot[@relation[:age]])).should have_rows(expected)
|
76
|
-
end
|
77
|
-
|
78
|
-
it "finds rows with a greater than complement predicate" do
|
79
|
-
expected = @expected.select { |r| r[@relation[:age]] <= @pivot[@relation[:age]] }
|
80
|
-
@relation.where(@relation[:age].gt(@pivot[@relation[:age]]).complement).should have_rows(expected)
|
81
|
-
end
|
82
|
-
|
83
|
-
it "finds rows with a greater than or equal to predicate" do
|
84
|
-
expected = @expected.select { |r| r[@relation[:age]] >= @pivot[@relation[:age]] }
|
85
|
-
@relation.where(@relation[:age].gteq(@pivot[@relation[:age]])).should have_rows(expected)
|
86
|
-
end
|
87
|
-
|
88
|
-
it "finds rows with a greater than or equal to complement predicate" do
|
89
|
-
expected = @expected.select { |r| r[@relation[:age]] < @pivot[@relation[:age]] }
|
90
|
-
@relation.where(@relation[:age].gteq(@pivot[@relation[:age]]).complement).should have_rows(expected)
|
91
|
-
end
|
92
|
-
|
93
|
-
it "finds rows with a matches predicate" do
|
94
|
-
expected = @expected.select { |r| r[@relation[:name]] =~ /#{@pivot[@relation[:name]]}/ }
|
95
|
-
@relation.where(@relation[:name].matches(/#{@pivot[@relation[:name]]}/)).should have_rows(expected)
|
96
|
-
end
|
97
|
-
|
98
|
-
it "finds rows with a matches complement predicate" do
|
99
|
-
expected = @expected.select { |r| r[@relation[:name]] !~ /#{@pivot[@relation[:name]]}/ }
|
100
|
-
@relation.where(@relation[:name].matches(/#{@pivot[@relation[:name]]}/).complement).should have_rows(expected)
|
101
|
-
end
|
102
|
-
|
103
|
-
it "finds rows with a not matches predicate" do
|
104
|
-
expected = @expected.select { |r| r[@relation[:name]] !~ /#{@pivot[@relation[:name]]}/ }
|
105
|
-
@relation.where(@relation[:name].not_matches(/#{@pivot[@relation[:name]]}/)).should have_rows(expected)
|
106
|
-
end
|
107
|
-
|
108
|
-
it "finds rows with a not matches complement predicate" do
|
109
|
-
expected = @expected.select { |r| r[@relation[:name]] =~ /#{@pivot[@relation[:name]]}/ }
|
110
|
-
@relation.where(@relation[:name].not_matches(/#{@pivot[@relation[:name]]}/).complement).should have_rows(expected)
|
111
|
-
end
|
112
|
-
|
113
|
-
it "finds rows with an in predicate" do
|
114
|
-
expected = @expected.select {|r| r[@relation[:age]] >=3 && r[@relation[:age]] <= 20}
|
115
|
-
@relation.where(@relation[:age].in(3..20)).should have_rows(expected)
|
116
|
-
end
|
117
|
-
|
118
|
-
it "finds rows with an in complement predicate" do
|
119
|
-
expected = @expected.select {|r| !(r[@relation[:age]] >=3 && r[@relation[:age]] <= 20)}
|
120
|
-
@relation.where(@relation[:age].in(3..20).complement).should have_rows(expected)
|
121
|
-
end
|
122
|
-
|
123
|
-
it "finds rows with a not in predicate" do
|
124
|
-
expected = @expected.select {|r| !(r[@relation[:age]] >=3 && r[@relation[:age]] <= 20)}
|
125
|
-
@relation.where(@relation[:age].not_in(3..20)).should have_rows(expected)
|
126
|
-
end
|
127
|
-
|
128
|
-
it "finds rows with a not in complement predicate" do
|
129
|
-
expected = @expected.select {|r| r[@relation[:age]] >=3 && r[@relation[:age]] <= 20}
|
130
|
-
@relation.where(@relation[:age].not_in(3..20).complement).should have_rows(expected)
|
131
|
-
end
|
132
|
-
|
133
|
-
it "finds rows with a polyadic predicate of class Any" do
|
134
|
-
expected = @expected.select {|r| [2,4,8,16].include?(r[@relation[:age]])}
|
135
|
-
@relation.where(@relation[:age].in_any([2,4], [8, 16])).should have_rows(expected)
|
136
|
-
end
|
137
|
-
|
138
|
-
it "finds rows with a polyadic predicate of class Any complement" do
|
139
|
-
expected = @expected.select {|r| ![2,4,8,16].include?(r[@relation[:age]])}
|
140
|
-
@relation.where(@relation[:age].in_any([2,4], [8, 16]).complement).should have_rows(expected)
|
141
|
-
end
|
142
|
-
|
143
|
-
it "finds rows with a polyadic predicate of class All" do
|
144
|
-
expected = @expected.select {|r| r[@relation[:name]] =~ /Name/ && r[@relation[:name]] =~ /1/}
|
145
|
-
@relation.where(@relation[:name].matches_all(/Name/, /1/)).should have_rows(expected)
|
146
|
-
end
|
147
|
-
|
148
|
-
it "finds rows with a polyadic predicate of class All complement" do
|
149
|
-
expected = @expected.select {|r| !(r[@relation[:name]] =~ /Name/ && r[@relation[:name]] =~ /1/)}
|
150
|
-
@relation.where(@relation[:name].matches_all(/Name/, /1/).complement).should have_rows(expected)
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
describe "#order" do
|
155
|
-
describe "by one attribute" do
|
156
|
-
before :all do
|
157
|
-
@expected.sort! { |a, b| a[@relation[:age]] <=> b[@relation[:age]]}.map! {|e| e[@relation[:id]]}
|
158
|
-
end
|
159
|
-
|
160
|
-
it "can be specified as ascending order" do
|
161
|
-
actual = []
|
162
|
-
@relation.order(@relation[:age].asc).each { |r| actual << r[@relation[:id]] }
|
163
|
-
actual.should == @expected
|
164
|
-
end
|
165
|
-
|
166
|
-
it "can be specified as descending order" do
|
167
|
-
actual = []
|
168
|
-
@relation.order(@relation[:age].desc).each { |r| actual << r[@relation[:id]] }
|
169
|
-
actual.should == @expected.reverse
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
describe "by two attributes in two separate calls to #order" do
|
174
|
-
before :all do
|
175
|
-
@expected = @expected.sort_by { |e| [e[@relation[:name]], e[@relation[:age]]]}.map {|e| e[@relation[:id]]}
|
176
|
-
end
|
177
|
-
|
178
|
-
it "can be specified as ascending order" do
|
179
|
-
actual = []
|
180
|
-
@relation.order(@relation[:age].asc).order(@relation[:name].asc).each { |r| actual << r[@relation[:id]] }
|
181
|
-
actual.should == @expected
|
182
|
-
end
|
183
|
-
|
184
|
-
it "can be specified as descending order" do
|
185
|
-
actual = []
|
186
|
-
@relation.order(@relation[:age].desc).order(@relation[:name].desc).each { |r| actual << r[@relation[:id]] }
|
187
|
-
actual.should == @expected.reverse
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
describe "by two attributes in one call to #order" do
|
192
|
-
before :all do
|
193
|
-
@expected = @expected.sort_by { |e| [e[@relation[:name]], e[@relation[:age]]]}.map {|e| e[@relation[:id]]}
|
194
|
-
end
|
195
|
-
|
196
|
-
it "can be specified as ascending order in one call to #order" do
|
197
|
-
actual = []
|
198
|
-
@relation.order(@relation[:name].asc, @relation[:age].asc).each { |r| actual << r[@relation[:id]] }
|
199
|
-
actual.should == @expected
|
200
|
-
end
|
201
|
-
|
202
|
-
it "can be specified as descending order in one call to #order" do
|
203
|
-
actual = []
|
204
|
-
@relation.order(@relation[:name].desc, @relation[:age].desc).each { |r| actual << r[@relation[:id]] }
|
205
|
-
actual.should == @expected.reverse
|
206
|
-
end
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
describe "#take" do
|
211
|
-
it "returns a relation" do
|
212
|
-
@relation.take(3).should be_a(Arel::Relation)
|
213
|
-
end
|
214
|
-
|
215
|
-
it "returns X items from the collection" do
|
216
|
-
length = @expected.length
|
217
|
-
|
218
|
-
@relation.take(3).each do |resource|
|
219
|
-
@expected.delete_if { |r| r.tuple == resource.tuple }
|
220
|
-
end
|
221
|
-
|
222
|
-
@expected.length.should == length - 3
|
223
|
-
end
|
224
|
-
|
225
|
-
it "works with ordering" do
|
226
|
-
expected = @expected.sort_by { |r| [r[@relation[:age]], r[@relation[:id]]] }.map { |r| r[@relation[:id]] }
|
227
|
-
actual = @relation.order(@relation[:age].asc, @relation[:id].asc).take(3).map { |r| r[@relation[:id]] }
|
228
|
-
|
229
|
-
actual.should == expected[0,3]
|
230
|
-
end
|
231
|
-
end
|
232
|
-
|
233
|
-
describe "#skip" do
|
234
|
-
it "returns a relation" do
|
235
|
-
@relation.skip(3).should be_a(Arel::Relation)
|
236
|
-
end
|
237
|
-
|
238
|
-
it "skips X items from the collection" do
|
239
|
-
length = @expected.length
|
240
|
-
|
241
|
-
@relation.skip(3).each do |resource|
|
242
|
-
@expected.delete_if { |r| r.tuple == resource.tuple }
|
243
|
-
end
|
244
|
-
|
245
|
-
@expected.length.should == 3
|
246
|
-
end
|
247
|
-
|
248
|
-
it "works with ordering" do
|
249
|
-
expected = @expected.sort_by { |r| [r[@relation[:age]], r[@relation[:id]]] }.map { |r| r[@relation[:id]] }
|
250
|
-
actual = @relation.order(@relation[:age].asc, @relation[:id].asc).skip(3).map { |r| r[@relation[:id]] }
|
251
|
-
|
252
|
-
actual.should == expected[3..-1]
|
253
|
-
end
|
254
|
-
end
|
255
|
-
end
|
data/spec/sql/christener_spec.rb
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Arel
|
4
|
-
module Sql
|
5
|
-
describe "Christener" do
|
6
|
-
it "returns the first name" do
|
7
|
-
christener = Christener.new
|
8
|
-
table = Table.new 'users'
|
9
|
-
table2 = Table.new 'pictures'
|
10
|
-
christener.name_for(table).should == 'users'
|
11
|
-
christener.name_for(table2).should == 'pictures'
|
12
|
-
christener.name_for(table).should == 'users'
|
13
|
-
end
|
14
|
-
|
15
|
-
it "returns a unique name for an alias" do
|
16
|
-
christener = Christener.new
|
17
|
-
table = Table.new 'users'
|
18
|
-
table2 = Table.new 'users', :as => 'friends'
|
19
|
-
christener.name_for(table).should == 'users'
|
20
|
-
christener.name_for(table2).should == 'friends'
|
21
|
-
end
|
22
|
-
|
23
|
-
it "returns a unique name for an alias with same name" do
|
24
|
-
christener = Christener.new
|
25
|
-
table = Table.new 'users'
|
26
|
-
table2 = Table.new 'friends', :as => 'users'
|
27
|
-
christener.name_for(table).should == 'users'
|
28
|
-
christener.name_for(table2).should == 'users_2'
|
29
|
-
end
|
30
|
-
|
31
|
-
it "returns alias name" do
|
32
|
-
christener = Christener.new
|
33
|
-
table = Table.new 'users'
|
34
|
-
aliaz = Alias.new table
|
35
|
-
|
36
|
-
christener.name_for(table).should == 'users'
|
37
|
-
christener.name_for(aliaz).should == 'users_2'
|
38
|
-
end
|
39
|
-
|
40
|
-
it "returns alias first" do
|
41
|
-
christener = Christener.new
|
42
|
-
table = Table.new 'users'
|
43
|
-
aliaz = Alias.new table
|
44
|
-
|
45
|
-
christener.name_for(aliaz).should == 'users'
|
46
|
-
christener.name_for(table).should == 'users_2'
|
47
|
-
end
|
48
|
-
|
49
|
-
it "returns externalization name" do
|
50
|
-
christener = Christener.new
|
51
|
-
table = Table.new 'users'
|
52
|
-
ext = Externalization.new table
|
53
|
-
|
54
|
-
christener.name_for(table).should == 'users'
|
55
|
-
christener.name_for(ext).should == 'users_external'
|
56
|
-
end
|
57
|
-
|
58
|
-
it "returns aliases externalizations and tables" do
|
59
|
-
christener = Christener.new
|
60
|
-
table = Table.new 'users'
|
61
|
-
aliaz = Alias.new table
|
62
|
-
ext = Externalization.new table
|
63
|
-
|
64
|
-
christener.name_for(table).should == 'users'
|
65
|
-
christener.name_for(aliaz).should == 'users_2'
|
66
|
-
christener.name_for(ext).should == 'users_external'
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
puts "Using native MySQL"
|
2
|
-
require "active_record"
|
3
|
-
require 'logger'
|
4
|
-
|
5
|
-
ENV['ADAPTER'] = 'mysql'
|
6
|
-
|
7
|
-
ActiveRecord::Base.configurations = {
|
8
|
-
'unit' => {
|
9
|
-
:adapter => 'mysql',
|
10
|
-
:username => 'root',
|
11
|
-
:encoding => 'utf8',
|
12
|
-
:database => 'arel_unit',
|
13
|
-
}
|
14
|
-
}
|
@@ -1,17 +0,0 @@
|
|
1
|
-
puts "Using native Oracle"
|
2
|
-
require "active_record"
|
3
|
-
require 'logger'
|
4
|
-
|
5
|
-
ENV['ADAPTER'] = 'oracle'
|
6
|
-
|
7
|
-
# Prepend oracle_enhanced local development directory in front of load path
|
8
|
-
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../../oracle-enhanced/lib"
|
9
|
-
|
10
|
-
ActiveRecord::Base.configurations = {
|
11
|
-
'unit' => {
|
12
|
-
:adapter => 'oracle_enhanced',
|
13
|
-
:username => 'arel_unit',
|
14
|
-
:password => 'arel_unit',
|
15
|
-
:database => 'orcl',
|
16
|
-
}
|
17
|
-
}
|
@@ -1,13 +0,0 @@
|
|
1
|
-
puts "Using native PostgreSQL"
|
2
|
-
require "active_record"
|
3
|
-
require 'logger'
|
4
|
-
|
5
|
-
ENV['ADAPTER'] = 'postgresql'
|
6
|
-
|
7
|
-
ActiveRecord::Base.configurations = {
|
8
|
-
'unit' => {
|
9
|
-
:adapter => 'postgresql',
|
10
|
-
:encoding => 'utf8',
|
11
|
-
:database => 'arel_unit',
|
12
|
-
}
|
13
|
-
}
|