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,43 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Arel
|
4
|
-
describe SqlLiteral do
|
5
|
-
before do
|
6
|
-
@relation = Table.new(:users)
|
7
|
-
end
|
8
|
-
|
9
|
-
describe '#to_sql' do
|
10
|
-
it "manufactures sql with a literal SQL fragment" do
|
11
|
-
sql = @relation.project(Count.new(SqlLiteral.new("*"))).to_sql
|
12
|
-
|
13
|
-
adapter_is :mysql do
|
14
|
-
sql.should be_like(%Q{SELECT COUNT(*) AS count_id FROM `users`})
|
15
|
-
end
|
16
|
-
|
17
|
-
adapter_is :oracle do
|
18
|
-
sql.should be_like(%Q{SELECT COUNT(*) AS count_id FROM "USERS"})
|
19
|
-
end
|
20
|
-
|
21
|
-
adapter_is_not :mysql, :oracle do
|
22
|
-
sql.should be_like(%Q{SELECT COUNT(*) AS count_id FROM "users"})
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
it "manufactures expressions on literal SQL fragment" do
|
27
|
-
sql = @relation.project(SqlLiteral.new("2 * credit_limit").sum).to_sql
|
28
|
-
|
29
|
-
adapter_is :mysql do
|
30
|
-
sql.should be_like(%Q{SELECT SUM(2 * credit_limit) AS sum_id FROM `users`})
|
31
|
-
end
|
32
|
-
|
33
|
-
adapter_is :oracle do
|
34
|
-
sql.should be_like(%Q{SELECT SUM(2 * credit_limit) AS sum_id FROM "USERS"})
|
35
|
-
end
|
36
|
-
|
37
|
-
adapter_is_not :mysql, :oracle do
|
38
|
-
sql.should be_like(%Q{SELECT SUM(2 * credit_limit) AS sum_id FROM "users"})
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,29 +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 '#to_sql' do
|
10
|
-
it "appropriately quotes the value" do
|
11
|
-
Value.new(1, @relation).to_sql.should be_like('1')
|
12
|
-
|
13
|
-
adapter_is_not :postgresql do
|
14
|
-
Value.new('asdf', @relation).to_sql.should be_like("'asdf'")
|
15
|
-
end
|
16
|
-
|
17
|
-
adapter_is :postgresql do
|
18
|
-
Value.new('asdf', @relation).to_sql.should be_like("E'asdf'")
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe '#format' do
|
24
|
-
it "returns the sql of the provided object" do
|
25
|
-
Value.new(1, @relation).format(@relation[:id]).should == @relation[:id].to_sql
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,53 +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 '#to_sql' do
|
10
|
-
describe 'when there is no ambiguity' do
|
11
|
-
it 'does not alias table names anywhere a table name can appear' do
|
12
|
-
sql = @relation \
|
13
|
-
.where(@relation[:id].eq(1)) \
|
14
|
-
.order(@relation[:id]) \
|
15
|
-
.project(@relation[:id]) \
|
16
|
-
.group(@relation[:id]) \
|
17
|
-
.alias \
|
18
|
-
.to_sql
|
19
|
-
|
20
|
-
adapter_is :mysql do
|
21
|
-
sql.should be_like(%Q{
|
22
|
-
SELECT `users`.`id`
|
23
|
-
FROM `users`
|
24
|
-
WHERE `users`.`id` = 1
|
25
|
-
GROUP BY `users`.`id`
|
26
|
-
ORDER BY `users`.`id` ASC
|
27
|
-
})
|
28
|
-
end
|
29
|
-
|
30
|
-
adapter_is :oracle do
|
31
|
-
sql.should be_like(%Q{
|
32
|
-
SELECT "USERS"."ID"
|
33
|
-
FROM "USERS"
|
34
|
-
WHERE "USERS"."ID" = 1
|
35
|
-
GROUP BY "USERS"."ID"
|
36
|
-
ORDER BY "USERS"."ID" ASC
|
37
|
-
})
|
38
|
-
end
|
39
|
-
|
40
|
-
adapter_is_not :mysql, :oracle do
|
41
|
-
sql.should be_like(%Q{
|
42
|
-
SELECT "users"."id"
|
43
|
-
FROM "users"
|
44
|
-
WHERE "users"."id" = 1
|
45
|
-
GROUP BY "users"."id"
|
46
|
-
ORDER BY "users"."id" ASC
|
47
|
-
})
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,83 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Arel
|
4
|
-
describe Deletion do
|
5
|
-
before do
|
6
|
-
@relation = Table.new(:users)
|
7
|
-
end
|
8
|
-
|
9
|
-
describe '#to_sql' do
|
10
|
-
it 'manufactures sql deleting a table relation' do
|
11
|
-
sql = Deletion.new(@relation).to_sql
|
12
|
-
|
13
|
-
adapter_is :mysql do
|
14
|
-
sql.should be_like(%Q{DELETE FROM `users`})
|
15
|
-
end
|
16
|
-
|
17
|
-
adapter_is :oracle do
|
18
|
-
sql.should be_like(%Q{DELETE FROM "USERS"})
|
19
|
-
end
|
20
|
-
|
21
|
-
adapter_is_not :mysql, :oracle do
|
22
|
-
sql.should be_like(%Q{DELETE FROM "users"})
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'manufactures sql deleting a where relation' do
|
27
|
-
sql = Deletion.new(@relation.where(@relation[:id].eq(1))).to_sql
|
28
|
-
|
29
|
-
adapter_is :mysql do
|
30
|
-
sql.should be_like(%Q{
|
31
|
-
DELETE
|
32
|
-
FROM `users`
|
33
|
-
WHERE `users`.`id` = 1
|
34
|
-
})
|
35
|
-
end
|
36
|
-
|
37
|
-
adapter_is :oracle do
|
38
|
-
sql.should be_like(%Q{
|
39
|
-
DELETE
|
40
|
-
FROM "USERS"
|
41
|
-
WHERE "USERS"."ID" = 1
|
42
|
-
})
|
43
|
-
end
|
44
|
-
|
45
|
-
adapter_is_not :mysql, :oracle do
|
46
|
-
sql.should be_like(%Q{
|
47
|
-
DELETE
|
48
|
-
FROM "users"
|
49
|
-
WHERE "users"."id" = 1
|
50
|
-
})
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
it "manufactures sql deleting a ranged relation" do
|
55
|
-
sql = Deletion.new(@relation.take(1)).to_sql
|
56
|
-
|
57
|
-
adapter_is :mysql do
|
58
|
-
sql.should be_like(%Q{
|
59
|
-
DELETE
|
60
|
-
FROM `users`
|
61
|
-
LIMIT 1
|
62
|
-
})
|
63
|
-
end
|
64
|
-
|
65
|
-
adapter_is :oracle do
|
66
|
-
sql.should be_like(%Q{
|
67
|
-
DELETE
|
68
|
-
FROM "USERS"
|
69
|
-
WHERE ROWNUM <= 1
|
70
|
-
})
|
71
|
-
end
|
72
|
-
|
73
|
-
adapter_is_not :mysql, :oracle do
|
74
|
-
sql.should be_like(%Q{
|
75
|
-
DELETE
|
76
|
-
FROM "users"
|
77
|
-
LIMIT 1
|
78
|
-
})
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
@@ -1,64 +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 '#to_sql' do
|
10
|
-
it "manufactures a simple select query" do
|
11
|
-
sql = @relation.from("workers").to_sql
|
12
|
-
|
13
|
-
adapter_is :mysql do
|
14
|
-
sql.should be_like(%Q{
|
15
|
-
SELECT `users`.`id`, `users`.`name`
|
16
|
-
FROM workers
|
17
|
-
})
|
18
|
-
end
|
19
|
-
|
20
|
-
adapter_is :oracle do
|
21
|
-
sql.should be_like(%Q{
|
22
|
-
SELECT "USERS"."ID", "USERS"."NAME"
|
23
|
-
FROM workers
|
24
|
-
})
|
25
|
-
end
|
26
|
-
|
27
|
-
adapter_is_not :mysql, :oracle do
|
28
|
-
sql.should be_like(%Q{
|
29
|
-
SELECT "users"."id", "users"."name"
|
30
|
-
FROM workers
|
31
|
-
})
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe '#to_sql' do
|
37
|
-
it "overrides and use last from clause given " do
|
38
|
-
sql = @relation.from("workers").from("users").to_sql
|
39
|
-
|
40
|
-
adapter_is :mysql do
|
41
|
-
sql.should be_like(%Q{
|
42
|
-
SELECT `users`.`id`, `users`.`name`
|
43
|
-
FROM users
|
44
|
-
})
|
45
|
-
end
|
46
|
-
|
47
|
-
adapter_is :oracle do
|
48
|
-
sql.should be_like(%Q{
|
49
|
-
SELECT "USERS"."ID", "USERS"."NAME"
|
50
|
-
FROM users
|
51
|
-
})
|
52
|
-
end
|
53
|
-
|
54
|
-
adapter_is_not :mysql, :oracle do
|
55
|
-
sql.should be_like(%Q{
|
56
|
-
SELECT "users"."id", "users"."name"
|
57
|
-
FROM users
|
58
|
-
})
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
end
|
64
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Arel
|
4
|
-
describe Group do
|
5
|
-
before do
|
6
|
-
@relation = Table.new(:users)
|
7
|
-
@attribute = @relation[:id]
|
8
|
-
end
|
9
|
-
|
10
|
-
describe '#to_sql' do
|
11
|
-
describe 'when given a predicate' do
|
12
|
-
it "manufactures sql with where clause conditions" do
|
13
|
-
sql = Group.new(@relation, [@attribute]).to_sql
|
14
|
-
|
15
|
-
adapter_is :mysql do
|
16
|
-
sql.should be_like(%Q{
|
17
|
-
SELECT `users`.`id`, `users`.`name`
|
18
|
-
FROM `users`
|
19
|
-
GROUP BY `users`.`id`
|
20
|
-
})
|
21
|
-
end
|
22
|
-
|
23
|
-
adapter_is :oracle do
|
24
|
-
sql.should be_like(%Q{
|
25
|
-
SELECT "USERS"."ID", "USERS"."NAME"
|
26
|
-
FROM "USERS"
|
27
|
-
GROUP BY "USERS"."ID"
|
28
|
-
})
|
29
|
-
end
|
30
|
-
|
31
|
-
adapter_is_not :mysql, :oracle do
|
32
|
-
sql.should be_like(%Q{
|
33
|
-
SELECT "users"."id", "users"."name"
|
34
|
-
FROM "users"
|
35
|
-
GROUP BY "users"."id"
|
36
|
-
})
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe 'when given a string' do
|
42
|
-
it "passes the string through to the where clause" do
|
43
|
-
sql = Group.new(@relation, ['asdf']).to_sql
|
44
|
-
|
45
|
-
adapter_is :mysql do
|
46
|
-
sql.should be_like(%Q{
|
47
|
-
SELECT `users`.`id`, `users`.`name`
|
48
|
-
FROM `users`
|
49
|
-
GROUP BY asdf
|
50
|
-
})
|
51
|
-
end
|
52
|
-
|
53
|
-
adapter_is :oracle do
|
54
|
-
sql.should be_like(%Q{
|
55
|
-
SELECT "USERS"."ID", "USERS"."NAME"
|
56
|
-
FROM "USERS"
|
57
|
-
GROUP BY asdf
|
58
|
-
})
|
59
|
-
end
|
60
|
-
|
61
|
-
adapter_is_not :mysql, :oracle do
|
62
|
-
sql.should be_like(%Q{
|
63
|
-
SELECT "users"."id", "users"."name"
|
64
|
-
FROM "users"
|
65
|
-
GROUP BY asdf
|
66
|
-
})
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
@@ -1,78 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Arel
|
4
|
-
describe Having do
|
5
|
-
before do
|
6
|
-
@relation = Table.new(:developers)
|
7
|
-
end
|
8
|
-
|
9
|
-
describe '#to_sql' do
|
10
|
-
describe 'when given a predicate' do
|
11
|
-
it "manufactures sql with where clause conditions" do
|
12
|
-
sql = @relation.group(@relation[:department]).having("MIN(salary) > 1000").to_sql
|
13
|
-
|
14
|
-
adapter_is :mysql do
|
15
|
-
sql.should be_like(%Q{
|
16
|
-
SELECT `developers`.`id`, `developers`.`name`, `developers`.`salary`, `developers`.`department`, `developers`.`created_at`
|
17
|
-
FROM `developers`
|
18
|
-
GROUP BY `developers`.`department`
|
19
|
-
HAVING MIN(salary) > 1000
|
20
|
-
})
|
21
|
-
end
|
22
|
-
|
23
|
-
adapter_is :oracle do
|
24
|
-
sql.should be_like(%Q{
|
25
|
-
SELECT "DEVELOPERS"."ID", "DEVELOPERS"."NAME", "DEVELOPERS"."SALARY", "DEVELOPERS"."DEPARTMENT", "DEVELOPERS"."CREATED_AT"
|
26
|
-
FROM "DEVELOPERS"
|
27
|
-
GROUP BY "DEVELOPERS"."DEPARTMENT"
|
28
|
-
HAVING MIN(salary) > 1000
|
29
|
-
})
|
30
|
-
end
|
31
|
-
|
32
|
-
adapter_is_not :mysql, :oracle do
|
33
|
-
sql.should be_like(%Q{
|
34
|
-
SELECT "developers"."id", "developers"."name", "developers"."salary", "developers"."department", "developers"."created_at"
|
35
|
-
FROM "developers"
|
36
|
-
GROUP BY "developers"."department"
|
37
|
-
HAVING MIN(salary) > 1000
|
38
|
-
})
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe 'when given two predicates' do
|
44
|
-
it "manufactures sql with where clause conditions joined by AND" do
|
45
|
-
sql = @relation.group(@relation[:department]).having("MIN(salary) > 1000", "MAX(salary) < 10000").to_sql
|
46
|
-
|
47
|
-
adapter_is :mysql do
|
48
|
-
sql.should be_like(%Q{
|
49
|
-
SELECT `developers`.`id`, `developers`.`name`, `developers`.`salary`, `developers`.`department`, `developers`.`created_at`
|
50
|
-
FROM `developers`
|
51
|
-
GROUP BY `developers`.`department`
|
52
|
-
HAVING MIN(salary) > 1000 AND MAX(salary) < 10000
|
53
|
-
})
|
54
|
-
end
|
55
|
-
|
56
|
-
adapter_is :oracle do
|
57
|
-
sql.should be_like(%Q{
|
58
|
-
SELECT "DEVELOPERS"."ID", "DEVELOPERS"."NAME", "DEVELOPERS"."SALARY", "DEVELOPERS"."DEPARTMENT", "DEVELOPERS"."CREATED_AT"
|
59
|
-
FROM "DEVELOPERS"
|
60
|
-
GROUP BY "DEVELOPERS"."DEPARTMENT"
|
61
|
-
HAVING MIN(salary) > 1000 AND MAX(salary) < 10000
|
62
|
-
})
|
63
|
-
end
|
64
|
-
|
65
|
-
adapter_is_not :mysql, :oracle do
|
66
|
-
sql.should be_like(%Q{
|
67
|
-
SELECT "developers"."id", "developers"."name", "developers"."salary", "developers"."department", "developers"."created_at"
|
68
|
-
FROM "developers"
|
69
|
-
GROUP BY "developers"."department"
|
70
|
-
HAVING MIN(salary) > 1000 AND MAX(salary) < 10000
|
71
|
-
})
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
@@ -1,143 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Arel
|
4
|
-
describe Insert do
|
5
|
-
before do
|
6
|
-
@relation = Table.new(:users)
|
7
|
-
end
|
8
|
-
|
9
|
-
describe '#to_sql' do
|
10
|
-
it 'manufactures sql inserting data when given multiple rows' do
|
11
|
-
pending 'it should insert multiple rows' do
|
12
|
-
@insertion = Insert.new(@relation, [@relation[:name] => "nick", @relation[:name] => "bryan"])
|
13
|
-
|
14
|
-
@insertion.to_sql.should be_like("
|
15
|
-
INSERT
|
16
|
-
INTO `users`
|
17
|
-
(`name`) VALUES ('nick'), ('bryan')
|
18
|
-
")
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'manufactures sql inserting data when given multiple values' do
|
23
|
-
@insertion = Insert.new(@relation, @relation[:id] => "1", @relation[:name] => "nick")
|
24
|
-
|
25
|
-
adapter_is :mysql do
|
26
|
-
@insertion.to_sql.should be_like(%Q{
|
27
|
-
INSERT
|
28
|
-
INTO `users`
|
29
|
-
(`id`, `name`) VALUES (1, 'nick')
|
30
|
-
})
|
31
|
-
end
|
32
|
-
|
33
|
-
adapter_is :sqlite3 do
|
34
|
-
@insertion.to_sql.should be_like(%Q{
|
35
|
-
INSERT
|
36
|
-
INTO "users"
|
37
|
-
("id", "name") VALUES (1, 'nick')
|
38
|
-
})
|
39
|
-
end
|
40
|
-
|
41
|
-
adapter_is :postgresql do
|
42
|
-
@insertion.to_sql.should be_like(%Q{
|
43
|
-
INSERT
|
44
|
-
INTO "users"
|
45
|
-
("id", "name") VALUES (1, E'nick')
|
46
|
-
RETURNING "id"
|
47
|
-
})
|
48
|
-
end
|
49
|
-
|
50
|
-
adapter_is :oracle do
|
51
|
-
@insertion.to_sql.should be_like(%Q{
|
52
|
-
INSERT
|
53
|
-
INTO "USERS"
|
54
|
-
("ID", "NAME") VALUES (1, 'nick')
|
55
|
-
})
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
describe 'when given values whose types correspond to the types of the attributes' do
|
60
|
-
before do
|
61
|
-
@insertion = Insert.new(@relation, @relation[:name] => "nick")
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'manufactures sql inserting data' do
|
65
|
-
adapter_is :mysql do
|
66
|
-
@insertion.to_sql.should be_like(%Q{
|
67
|
-
INSERT
|
68
|
-
INTO `users`
|
69
|
-
(`name`) VALUES ('nick')
|
70
|
-
})
|
71
|
-
end
|
72
|
-
|
73
|
-
adapter_is :sqlite3 do
|
74
|
-
@insertion.to_sql.should be_like(%Q{
|
75
|
-
INSERT
|
76
|
-
INTO "users"
|
77
|
-
("name") VALUES ('nick')
|
78
|
-
})
|
79
|
-
end
|
80
|
-
|
81
|
-
adapter_is :postgresql do
|
82
|
-
@insertion.to_sql.should be_like(%Q{
|
83
|
-
INSERT
|
84
|
-
INTO "users"
|
85
|
-
("name") VALUES (E'nick')
|
86
|
-
RETURNING "id"
|
87
|
-
})
|
88
|
-
end
|
89
|
-
|
90
|
-
adapter_is :oracle do
|
91
|
-
@insertion.to_sql.should be_like(%Q{
|
92
|
-
INSERT
|
93
|
-
INTO "USERS"
|
94
|
-
("NAME") VALUES ('nick')
|
95
|
-
})
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
describe 'when given values whose types differ from from the types of the attributes' do
|
101
|
-
before do
|
102
|
-
@insertion = Insert.new(@relation, @relation[:id] => '1-asdf')
|
103
|
-
end
|
104
|
-
|
105
|
-
it 'manufactures sql inserting data' do
|
106
|
-
adapter_is :mysql do
|
107
|
-
@insertion.to_sql.should be_like(%Q{
|
108
|
-
INSERT
|
109
|
-
INTO `users`
|
110
|
-
(`id`) VALUES (1)
|
111
|
-
})
|
112
|
-
end
|
113
|
-
|
114
|
-
adapter_is :sqlite3 do
|
115
|
-
@insertion.to_sql.should be_like(%Q{
|
116
|
-
INSERT
|
117
|
-
INTO "users"
|
118
|
-
("id") VALUES (1)
|
119
|
-
})
|
120
|
-
end
|
121
|
-
|
122
|
-
adapter_is :postgresql do
|
123
|
-
@insertion.to_sql.should be_like(%Q{
|
124
|
-
INSERT
|
125
|
-
INTO "users"
|
126
|
-
("id") VALUES (1)
|
127
|
-
RETURNING "id"
|
128
|
-
})
|
129
|
-
end
|
130
|
-
|
131
|
-
adapter_is :oracle do
|
132
|
-
@insertion.to_sql.should be_like(%Q{
|
133
|
-
INSERT
|
134
|
-
INTO "USERS"
|
135
|
-
("ID") VALUES (1)
|
136
|
-
})
|
137
|
-
end
|
138
|
-
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|