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,41 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Arel
|
4
|
-
describe Skip do
|
5
|
-
before do
|
6
|
-
@relation = Table.new(:users)
|
7
|
-
@skipped = 4
|
8
|
-
end
|
9
|
-
|
10
|
-
describe '#to_sql' do
|
11
|
-
it "manufactures sql with limit and offset" do
|
12
|
-
sql = Skip.new(@relation, @skipped).to_sql
|
13
|
-
|
14
|
-
adapter_is :mysql do
|
15
|
-
sql.should be_like(%Q{
|
16
|
-
SELECT `users`.`id`, `users`.`name`
|
17
|
-
FROM `users`
|
18
|
-
OFFSET 4
|
19
|
-
})
|
20
|
-
end
|
21
|
-
|
22
|
-
adapter_is :oracle do
|
23
|
-
sql.should be_like(%Q{
|
24
|
-
select * from (select raw_sql_.*, rownum raw_rnum_ from
|
25
|
-
(SELECT "USERS"."ID", "USERS"."NAME"
|
26
|
-
FROM "USERS") raw_sql_)
|
27
|
-
where raw_rnum_ > 4
|
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
|
-
OFFSET 4
|
36
|
-
})
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,122 +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.to_sql
|
12
|
-
|
13
|
-
adapter_is :mysql do
|
14
|
-
sql.should be_like(%Q{
|
15
|
-
SELECT `users`.`id`, `users`.`name`
|
16
|
-
FROM `users`
|
17
|
-
})
|
18
|
-
end
|
19
|
-
|
20
|
-
adapter_is :oracle do
|
21
|
-
sql.should be_like(%Q{
|
22
|
-
SELECT "USERS"."ID", "USERS"."NAME"
|
23
|
-
FROM "USERS"
|
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 "users"
|
31
|
-
})
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe '#as' do
|
37
|
-
it "manufactures a simple select query using aliases" do
|
38
|
-
sql = @relation.as(:super_users).to_sql
|
39
|
-
|
40
|
-
adapter_is :mysql do
|
41
|
-
sql.should be_like(%Q{
|
42
|
-
SELECT `super_users`.`id`, `super_users`.`name`
|
43
|
-
FROM `users` `super_users`
|
44
|
-
})
|
45
|
-
end
|
46
|
-
|
47
|
-
adapter_is :oracle do
|
48
|
-
sql.should be_like(%Q{
|
49
|
-
SELECT "SUPER_USERS"."ID", "SUPER_USERS"."NAME"
|
50
|
-
FROM "USERS" "SUPER_USERS"
|
51
|
-
})
|
52
|
-
end
|
53
|
-
|
54
|
-
adapter_is_not :mysql, :oracle do
|
55
|
-
sql.should be_like(%Q{
|
56
|
-
SELECT "super_users"."id", "super_users"."name"
|
57
|
-
FROM "users" "super_users"
|
58
|
-
})
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
it "does not apply alias if it's same as the table name" do
|
63
|
-
sql = @relation.as(:users).to_sql
|
64
|
-
|
65
|
-
adapter_is :mysql do
|
66
|
-
sql.should be_like(%Q{
|
67
|
-
SELECT `users`.`id`, `users`.`name`
|
68
|
-
FROM `users`
|
69
|
-
})
|
70
|
-
end
|
71
|
-
|
72
|
-
adapter_is :oracle do
|
73
|
-
sql.should be_like(%Q{
|
74
|
-
SELECT "USERS"."ID", "USERS"."NAME"
|
75
|
-
FROM "USERS"
|
76
|
-
})
|
77
|
-
end
|
78
|
-
|
79
|
-
adapter_is_not :mysql, :oracle do
|
80
|
-
sql.should be_like(%Q{
|
81
|
-
SELECT "users"."id", "users"."name"
|
82
|
-
FROM "users"
|
83
|
-
})
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
end
|
88
|
-
|
89
|
-
describe '#column_for' do
|
90
|
-
it "returns the column corresponding to the attribute" do
|
91
|
-
@relation.column_for(@relation[:id]).should == @relation.columns.detect { |c| c.name == 'id' }
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
describe '#attributes' do
|
96
|
-
it 'manufactures attributes corresponding to columns in the table' do
|
97
|
-
@relation.attributes.should == [
|
98
|
-
Attribute.new(@relation, :id),
|
99
|
-
Attribute.new(@relation, :name)
|
100
|
-
]
|
101
|
-
end
|
102
|
-
|
103
|
-
describe '#reset' do
|
104
|
-
it "reloads columns from the database" do
|
105
|
-
lambda { @relation.engine.stub!(:columns => []) }.should_not change { @relation.attributes }
|
106
|
-
lambda { @relation.reset }.should change { @relation.attributes }
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
describe '#engine' do
|
112
|
-
it "defaults to global engine" do
|
113
|
-
Table.engine = engine = Sql::Engine.new
|
114
|
-
Table.new(:users).engine.should == engine
|
115
|
-
end
|
116
|
-
|
117
|
-
it "can be specified" do
|
118
|
-
Table.new(:users, engine = Sql::Engine.new).engine.should == engine
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Arel
|
4
|
-
describe Take do
|
5
|
-
before do
|
6
|
-
@relation = Table.new(:users)
|
7
|
-
@taken = 4
|
8
|
-
end
|
9
|
-
|
10
|
-
describe '#to_sql' do
|
11
|
-
it "manufactures sql with limit and offset" do
|
12
|
-
sql = Take.new(@relation, @taken).to_sql
|
13
|
-
|
14
|
-
adapter_is :mysql do
|
15
|
-
sql.should be_like(%Q{
|
16
|
-
SELECT `users`.`id`, `users`.`name`
|
17
|
-
FROM `users`
|
18
|
-
LIMIT 4
|
19
|
-
})
|
20
|
-
end
|
21
|
-
|
22
|
-
adapter_is :oracle do
|
23
|
-
sql.should be_like(%Q{
|
24
|
-
SELECT "USERS"."ID", "USERS"."NAME"
|
25
|
-
FROM "USERS"
|
26
|
-
WHERE ROWNUM <= 4
|
27
|
-
})
|
28
|
-
|
29
|
-
sql_with_order_by = Take.new(@relation.order(@relation[:id]), @taken).to_sql
|
30
|
-
sql_with_order_by.should be_like(%Q{
|
31
|
-
select * from
|
32
|
-
(SELECT "USERS"."ID", "USERS"."NAME"
|
33
|
-
FROM "USERS"
|
34
|
-
ORDER BY "USERS"."ID" ASC)
|
35
|
-
where rownum <= 4
|
36
|
-
})
|
37
|
-
|
38
|
-
sql_with_distinct = Take.new(@relation.project('DISTINCT "USERS"."ID"'), @taken).to_sql
|
39
|
-
sql_with_distinct.should be_like(%Q{
|
40
|
-
select * from
|
41
|
-
(SELECT DISTINCT "USERS"."ID"
|
42
|
-
FROM "USERS")
|
43
|
-
where rownum <= 4
|
44
|
-
})
|
45
|
-
end
|
46
|
-
|
47
|
-
adapter_is_not :mysql, :oracle do
|
48
|
-
sql.should be_like(%Q{
|
49
|
-
SELECT "users"."id", "users"."name"
|
50
|
-
FROM "users"
|
51
|
-
LIMIT 4
|
52
|
-
})
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
it "manufactures count sql with limit" do
|
57
|
-
sql = Take.new(@relation.project(@relation[:id].count), @taken).to_sql
|
58
|
-
|
59
|
-
adapter_is :mysql do
|
60
|
-
sql.should be_like(%Q{
|
61
|
-
SELECT COUNT(*) AS count_id
|
62
|
-
FROM (SELECT 1 FROM `users` LIMIT 4) AS subquery
|
63
|
-
})
|
64
|
-
end
|
65
|
-
|
66
|
-
adapter_is_not :mysql, :oracle do
|
67
|
-
sql.should be_like(%Q{
|
68
|
-
SELECT COUNT(*) AS count_id
|
69
|
-
FROM (SELECT 1 FROM "users" LIMIT 4) AS subquery
|
70
|
-
})
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
@@ -1,203 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class User
|
4
|
-
def self.primary_key
|
5
|
-
"id"
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
module Arel
|
10
|
-
describe Update do
|
11
|
-
before do
|
12
|
-
@relation = Table.new(:users)
|
13
|
-
end
|
14
|
-
|
15
|
-
describe '#to_sql' do
|
16
|
-
it "manufactures sql updating attributes when given multiple attributes" do
|
17
|
-
sql = Update.new(@relation, @relation[:id] => 1, @relation[:name] => "nick").to_sql
|
18
|
-
|
19
|
-
adapter_is :mysql do
|
20
|
-
sql.should be_like(%Q{
|
21
|
-
UPDATE `users`
|
22
|
-
SET `id` = 1, `name` = 'nick'
|
23
|
-
})
|
24
|
-
end
|
25
|
-
|
26
|
-
adapter_is :sqlite3 do
|
27
|
-
sql.should be_like(%Q{
|
28
|
-
UPDATE "users"
|
29
|
-
SET "id" = 1, "name" = 'nick'
|
30
|
-
})
|
31
|
-
end
|
32
|
-
|
33
|
-
adapter_is :postgresql do
|
34
|
-
sql.should be_like(%Q{
|
35
|
-
UPDATE "users"
|
36
|
-
SET "id" = 1, "name" = E'nick'
|
37
|
-
})
|
38
|
-
end
|
39
|
-
|
40
|
-
adapter_is :oracle do
|
41
|
-
sql.should be_like(%Q{
|
42
|
-
UPDATE "USERS"
|
43
|
-
SET "ID" = 1, "NAME" = 'nick'
|
44
|
-
})
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
it "manufactures sql updating attributes when given a ranged relation" do
|
49
|
-
sql = Update.new(@relation.take(1), @relation[:name] => "nick").to_sql
|
50
|
-
|
51
|
-
adapter_is :mysql do
|
52
|
-
sql.should be_like(%Q{
|
53
|
-
UPDATE `users`
|
54
|
-
SET `name` = 'nick'
|
55
|
-
LIMIT 1
|
56
|
-
})
|
57
|
-
end
|
58
|
-
|
59
|
-
adapter_is :sqlite3 do
|
60
|
-
sql.should be_like(%Q{
|
61
|
-
UPDATE "users" SET
|
62
|
-
"name" = 'nick'
|
63
|
-
WHERE "id" IN (SELECT "id" FROM "users" LIMIT 1)
|
64
|
-
})
|
65
|
-
end
|
66
|
-
|
67
|
-
adapter_is :postgresql do
|
68
|
-
sql.should be_like(%Q{
|
69
|
-
UPDATE "users" SET
|
70
|
-
"name" = E'nick'
|
71
|
-
WHERE "id" IN (SELECT "id" FROM "users" LIMIT 1)
|
72
|
-
})
|
73
|
-
end
|
74
|
-
|
75
|
-
adapter_is :oracle do
|
76
|
-
sql.should be_like(%Q{
|
77
|
-
UPDATE "USERS" SET
|
78
|
-
"NAME" = 'nick'
|
79
|
-
WHERE "ID" IN (SELECT "ID" FROM "USERS" WHERE ROWNUM <= 1)
|
80
|
-
})
|
81
|
-
|
82
|
-
sql_with_order_by = Update.new(@relation.order(@relation[:id]).take(1), @relation[:name] => "nick").to_sql
|
83
|
-
sql_with_order_by.should be_like(%Q{
|
84
|
-
UPDATE "USERS" SET
|
85
|
-
"NAME" = 'nick'
|
86
|
-
WHERE "ID" IN (select * from
|
87
|
-
(SELECT "ID" FROM "USERS" ORDER BY "USERS"."ID" ASC)
|
88
|
-
where rownum <= 1)
|
89
|
-
})
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
describe 'when given values whose types correspond to the types of the attributes' do
|
94
|
-
before do
|
95
|
-
@update = Update.new(@relation, @relation[:name] => "nick")
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'manufactures sql updating attributes' do
|
99
|
-
adapter_is :mysql do
|
100
|
-
@update.to_sql.should be_like(%Q{
|
101
|
-
UPDATE `users`
|
102
|
-
SET `name` = 'nick'
|
103
|
-
})
|
104
|
-
end
|
105
|
-
|
106
|
-
adapter_is :sqlite3 do
|
107
|
-
@update.to_sql.should be_like(%Q{
|
108
|
-
UPDATE "users"
|
109
|
-
SET "name" = 'nick'
|
110
|
-
})
|
111
|
-
end
|
112
|
-
|
113
|
-
adapter_is :postgresql do
|
114
|
-
@update.to_sql.should be_like(%Q{
|
115
|
-
UPDATE "users"
|
116
|
-
SET "name" = E'nick'
|
117
|
-
})
|
118
|
-
end
|
119
|
-
|
120
|
-
adapter_is :oracle do
|
121
|
-
@update.to_sql.should be_like(%Q{
|
122
|
-
UPDATE "USERS"
|
123
|
-
SET "NAME" = 'nick'
|
124
|
-
})
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
describe 'when given values whose types differ from from the types of the attributes' do
|
130
|
-
before do
|
131
|
-
@update = Update.new(@relation, @relation[:id] => '1-asdf')
|
132
|
-
end
|
133
|
-
|
134
|
-
it 'manufactures sql updating attributes' do
|
135
|
-
adapter_is :mysql do
|
136
|
-
@update.to_sql.should be_like(%Q{
|
137
|
-
UPDATE `users`
|
138
|
-
SET `id` = 1
|
139
|
-
})
|
140
|
-
end
|
141
|
-
|
142
|
-
adapter_is :oracle do
|
143
|
-
@update.to_sql.should be_like(%Q{
|
144
|
-
UPDATE "USERS"
|
145
|
-
SET "ID" = 1
|
146
|
-
})
|
147
|
-
end
|
148
|
-
|
149
|
-
adapter_is_not :mysql, :oracle do
|
150
|
-
@update.to_sql.should be_like(%Q{
|
151
|
-
UPDATE "users"
|
152
|
-
SET "id" = 1
|
153
|
-
})
|
154
|
-
end
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
describe 'when the relation is a where' do
|
159
|
-
before do
|
160
|
-
@update = Update.new(
|
161
|
-
@relation.where(@relation[:id].eq(1)),
|
162
|
-
@relation[:name] => "nick"
|
163
|
-
)
|
164
|
-
end
|
165
|
-
|
166
|
-
it 'manufactures sql updating a where relation' do
|
167
|
-
adapter_is :mysql do
|
168
|
-
@update.to_sql.should be_like(%Q{
|
169
|
-
UPDATE `users`
|
170
|
-
SET `name` = 'nick'
|
171
|
-
WHERE `users`.`id` = 1
|
172
|
-
})
|
173
|
-
end
|
174
|
-
|
175
|
-
adapter_is :sqlite3 do
|
176
|
-
@update.to_sql.should be_like(%Q{
|
177
|
-
UPDATE "users"
|
178
|
-
SET "name" = 'nick'
|
179
|
-
WHERE "users"."id" = 1
|
180
|
-
})
|
181
|
-
end
|
182
|
-
|
183
|
-
adapter_is :postgresql do
|
184
|
-
@update.to_sql.should be_like(%Q{
|
185
|
-
UPDATE "users"
|
186
|
-
SET "name" = E'nick'
|
187
|
-
WHERE "users"."id" = 1
|
188
|
-
})
|
189
|
-
end
|
190
|
-
|
191
|
-
adapter_is :oracle do
|
192
|
-
@update.to_sql.should be_like(%Q{
|
193
|
-
UPDATE "USERS"
|
194
|
-
SET "NAME" = 'nick'
|
195
|
-
WHERE "USERS"."ID" = 1
|
196
|
-
})
|
197
|
-
end
|
198
|
-
end
|
199
|
-
end
|
200
|
-
end
|
201
|
-
|
202
|
-
end
|
203
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Arel
|
4
|
-
describe Where do
|
5
|
-
before do
|
6
|
-
@relation = Table.new(:users)
|
7
|
-
@predicate = @relation[:id].eq(1)
|
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 = Where.new(@relation, [@predicate]).to_sql
|
14
|
-
|
15
|
-
adapter_is :mysql do
|
16
|
-
sql.should be_like(%Q{
|
17
|
-
SELECT `users`.`id`, `users`.`name`
|
18
|
-
FROM `users`
|
19
|
-
WHERE `users`.`id` = 1
|
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
|
-
WHERE "USERS"."ID" = 1
|
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
|
-
WHERE "users"."id" = 1
|
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 = Where.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
|
-
WHERE 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
|
-
WHERE 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
|
-
WHERE asdf
|
66
|
-
})
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|