qdsl 0.0.2 → 0.0.3
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.
- checksums.yaml +4 -4
- data/lib/and.rb +6 -2
- data/lib/boolean.rb +5 -2
- data/lib/call.rb +28 -0
- data/lib/column.rb +14 -2
- data/lib/{funky_proxy.rb → column_proxy.rb} +10 -2
- data/lib/column_set.rb +25 -0
- data/lib/context.rb +6 -8
- data/lib/equals.rb +5 -8
- data/lib/expression.rb +14 -6
- data/lib/format_call.rb +37 -0
- data/lib/inner_join.rb +3 -3
- data/lib/inner_join_builder.rb +4 -5
- data/lib/is_true.rb +17 -0
- data/lib/or.rb +8 -2
- data/lib/qdsl/version.rb +1 -1
- data/lib/qdsl.rb +4 -18
- data/lib/render_result.rb +13 -0
- data/lib/select.rb +86 -53
- data/lib/select_query.rb +30 -0
- data/lib/simple_render_result.rb +11 -0
- data/lib/table_query.rb +1 -1
- data/lib/util.rb +8 -0
- data/test/column_test.rb +19 -8
- data/test/end_to_end_test.rb +8 -1
- data/test/expression_test.rb +72 -56
- data/test/inner_join_test.rb +44 -16
- data/test/is_true_test.rb +68 -0
- data/test/minitest_helper.rb +2 -0
- data/test/query_test.rb +1 -0
- data/test/select_test.rb +89 -15
- data/test/subquery_test.rb +177 -29
- data/test/where_test.rb +9 -7
- metadata +13 -5
- data/test/context_test.rb +0 -19
data/test/subquery_test.rb
CHANGED
@@ -6,61 +6,209 @@ module Qdsl
|
|
6
6
|
subquery = Qdsl::select(:id, :first_name, :last_name).from(@clients)
|
7
7
|
query = Qdsl::select(:first_name).from(subquery)
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
result = query.render
|
10
|
+
|
11
|
+
assert_nil result.id
|
12
|
+
assert_equal ['first_name'], result.column_names
|
13
|
+
assert_sql <<-SQL, result.sql
|
14
|
+
SELECT
|
15
|
+
_00.first_name
|
11
16
|
FROM (
|
12
|
-
SELECT
|
17
|
+
SELECT
|
18
|
+
_01.id,
|
19
|
+
_01.first_name,
|
20
|
+
_01.last_name
|
13
21
|
FROM clients AS _01
|
14
22
|
) AS _00
|
15
|
-
|
23
|
+
SQL
|
24
|
+
assert_equal({}, result.parameters)
|
16
25
|
end
|
17
26
|
|
18
|
-
def
|
27
|
+
def test_inner_join
|
19
28
|
subquery = Qdsl::select(:id, :first_name, :last_name).from(@clients)
|
20
29
|
query = Qdsl::select { |t0, t1| [t0.first_name, t1.last_name] }.
|
21
30
|
from(subquery).
|
22
31
|
inner_join(subquery).on { |t0, t1| t0.id.equals(t1.id) }
|
23
32
|
|
24
|
-
|
25
|
-
|
33
|
+
result = query.render
|
34
|
+
|
35
|
+
assert_nil result.id
|
36
|
+
assert_equal ['first_name', 'last_name'], result.column_names
|
37
|
+
assert_sql <<-SQL, result.sql
|
38
|
+
SELECT
|
39
|
+
_00.first_name,
|
40
|
+
_02.last_name
|
26
41
|
FROM (
|
27
|
-
SELECT
|
28
|
-
|
42
|
+
SELECT
|
43
|
+
_01.id,
|
44
|
+
_01.first_name,
|
45
|
+
_01.last_name
|
46
|
+
FROM clients AS _01
|
29
47
|
) AS _00
|
30
48
|
INNER JOIN (
|
31
|
-
SELECT
|
49
|
+
SELECT
|
50
|
+
_03.id,
|
51
|
+
_03.first_name,
|
52
|
+
_03.last_name
|
32
53
|
FROM clients AS _03
|
33
|
-
) AS
|
34
|
-
ON _00.id =
|
35
|
-
|
54
|
+
) AS _02
|
55
|
+
ON _00.id = _02.id
|
56
|
+
SQL
|
57
|
+
assert_equal({}, result.parameters)
|
36
58
|
end
|
37
59
|
|
38
|
-
def
|
60
|
+
def test_inner_join_where
|
39
61
|
subquery = Qdsl::select(:id, :first_name, :last_name).from(@clients)
|
40
62
|
query = Qdsl::select { |t0, t1| [t0.first_name, t1.last_name] }.
|
41
63
|
from(subquery).
|
42
64
|
inner_join(subquery).on { |t0, t1| t0.id.equals(t1.id) }.
|
43
65
|
where { |t0, t1| t0.first_name.equals('str0').and(t1.last_name.equals('str1')) }
|
44
66
|
|
45
|
-
|
46
|
-
|
47
|
-
|
67
|
+
result = query.render
|
68
|
+
|
69
|
+
assert_nil result.id
|
70
|
+
assert_equal ['first_name', 'last_name'], result.column_names
|
71
|
+
assert_sql <<-SQL, result.sql
|
72
|
+
SELECT
|
73
|
+
_00.first_name,
|
74
|
+
_02.last_name
|
48
75
|
FROM (
|
49
|
-
SELECT
|
50
|
-
|
76
|
+
SELECT
|
77
|
+
_01.id,
|
78
|
+
_01.first_name,
|
79
|
+
_01.last_name
|
80
|
+
FROM clients AS _01
|
51
81
|
) AS _00
|
52
82
|
INNER JOIN (
|
53
|
-
SELECT
|
83
|
+
SELECT
|
84
|
+
_03.id,
|
85
|
+
_03.first_name,
|
86
|
+
_03.last_name
|
54
87
|
FROM clients AS _03
|
55
|
-
) AS
|
56
|
-
ON _00.id =
|
57
|
-
WHERE (_00.first_name = :_param00) AND (
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
88
|
+
) AS _02
|
89
|
+
ON _00.id = _02.id
|
90
|
+
WHERE (_00.first_name = :_param00) AND (_02.last_name = :_param01)
|
91
|
+
SQL
|
92
|
+
assert_equal({'_param00' => 'str0', '_param01' => 'str1'}, result.parameters)
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_computed_column
|
96
|
+
subquery = Qdsl::select(:id) do |t| [
|
97
|
+
t.first_name,
|
98
|
+
t.last_name,
|
99
|
+
age_in_years(t, :birthdate, :age)
|
100
|
+
] end.from(@clients)
|
101
|
+
|
102
|
+
query = Qdsl::select(:first_name, :last_name, :age).from(subquery)
|
103
|
+
|
104
|
+
result = query.render
|
105
|
+
|
106
|
+
assert_nil result.id
|
107
|
+
assert_equal ['first_name', 'last_name', 'age'], result.column_names
|
108
|
+
assert_equal <<-SQL, result.sql
|
109
|
+
SELECT
|
110
|
+
_00.first_name,
|
111
|
+
_00.last_name,
|
112
|
+
_00.age
|
113
|
+
FROM (
|
114
|
+
SELECT
|
115
|
+
_01.id,
|
116
|
+
_01.first_name,
|
117
|
+
_01.last_name,
|
118
|
+
EXTRACT(year FROM AGE(_01.birthdate)) AS age
|
119
|
+
FROM clients AS _01
|
120
|
+
) AS _00
|
121
|
+
SQL
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_computed_column_inner_join
|
125
|
+
subquery = Qdsl::select(:id) do |t| [
|
126
|
+
t.first_name,
|
127
|
+
t.last_name,
|
128
|
+
age_in_years(t, :birthdate, :age)
|
129
|
+
] end.from(@clients)
|
130
|
+
|
131
|
+
query = Qdsl::select(:first_name, :last_name, :age).from(subquery).
|
132
|
+
inner_join(subquery).on { |t0, t1| t0.id.equals(t1.id) }
|
133
|
+
|
134
|
+
result = query.render
|
135
|
+
|
136
|
+
assert_nil result.id
|
137
|
+
assert_equal ['first_name', 'last_name', 'age'], result.column_names
|
138
|
+
assert_equal <<-SQL, result.sql
|
139
|
+
SELECT
|
140
|
+
_00.first_name,
|
141
|
+
_00.last_name,
|
142
|
+
_00.age
|
143
|
+
FROM (
|
144
|
+
SELECT
|
145
|
+
_01.id,
|
146
|
+
_01.first_name,
|
147
|
+
_01.last_name,
|
148
|
+
EXTRACT(year FROM AGE(_01.birthdate)) AS age
|
149
|
+
FROM clients AS _01
|
150
|
+
) AS _00
|
151
|
+
INNER JOIN (
|
152
|
+
SELECT
|
153
|
+
_03.id,
|
154
|
+
_03.first_name,
|
155
|
+
_03.last_name,
|
156
|
+
EXTRACT(year FROM AGE(_03.birthdate)) AS age
|
157
|
+
FROM clients AS _03
|
158
|
+
) AS _02
|
159
|
+
ON _00.id = _02.id
|
160
|
+
SQL
|
161
|
+
end
|
162
|
+
|
163
|
+
def test_computed_column_complex_select
|
164
|
+
subquery = Qdsl::select(:id) do |t| [
|
165
|
+
t.first_name,
|
166
|
+
t.last_name,
|
167
|
+
age_in_years(t, :birthdate, :age)
|
168
|
+
] end.from(@clients)
|
169
|
+
|
170
|
+
query = Qdsl::select(:first_name, :last_name) do |t0, t1|
|
171
|
+
[t0.age, t1.first_name]
|
172
|
+
end.from(subquery).
|
173
|
+
inner_join(subquery).on { |t0, t1| t0.id.equals(t1.id) }
|
174
|
+
|
175
|
+
result = query.render
|
176
|
+
|
177
|
+
assert_nil result.id
|
178
|
+
assert_equal ['first_name', 'last_name', 'age', 'first_name'], result.column_names
|
179
|
+
assert_equal <<-SQL, result.sql
|
180
|
+
SELECT
|
181
|
+
_00.first_name,
|
182
|
+
_00.last_name,
|
183
|
+
_00.age,
|
184
|
+
_02.first_name
|
185
|
+
FROM (
|
186
|
+
SELECT
|
187
|
+
_01.id,
|
188
|
+
_01.first_name,
|
189
|
+
_01.last_name,
|
190
|
+
EXTRACT(year FROM AGE(_01.birthdate)) AS age
|
191
|
+
FROM clients AS _01
|
192
|
+
) AS _00
|
193
|
+
INNER JOIN (
|
194
|
+
SELECT
|
195
|
+
_03.id,
|
196
|
+
_03.first_name,
|
197
|
+
_03.last_name,
|
198
|
+
EXTRACT(year FROM AGE(_03.birthdate)) AS age
|
199
|
+
FROM clients AS _03
|
200
|
+
) AS _02
|
201
|
+
ON _00.id = _02.id
|
202
|
+
SQL
|
203
|
+
end
|
204
|
+
|
205
|
+
private
|
206
|
+
|
207
|
+
def age_in_years(t, column_name, name)
|
208
|
+
t._formatcall(
|
209
|
+
'EXTRACT(year FROM %1)',
|
210
|
+
t._call('AGE', t[column_name])).as(name)
|
211
|
+
end
|
64
212
|
end
|
65
213
|
end
|
66
214
|
|
data/test/where_test.rb
CHANGED
@@ -7,14 +7,16 @@ module Qdsl
|
|
7
7
|
from(@clients).
|
8
8
|
where { |t| t.id.equals('Cook') }
|
9
9
|
|
10
|
-
|
11
|
-
result = query.render(context)
|
10
|
+
result = query.render
|
12
11
|
|
13
|
-
assert_sql
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
assert_sql <<-SQL, result.sql
|
13
|
+
SELECT
|
14
|
+
_00.first_name
|
15
|
+
FROM clients AS _00
|
16
|
+
WHERE _00.id = :_param00
|
17
|
+
SQL
|
18
|
+
assert_equal 1, result.parameters.size
|
19
|
+
assert_equal 'Cook', result.parameters['_param00']
|
18
20
|
end
|
19
21
|
end
|
20
22
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qdsl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Cook
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -67,25 +67,33 @@ files:
|
|
67
67
|
- Rakefile
|
68
68
|
- lib/and.rb
|
69
69
|
- lib/boolean.rb
|
70
|
+
- lib/call.rb
|
70
71
|
- lib/column.rb
|
72
|
+
- lib/column_proxy.rb
|
73
|
+
- lib/column_set.rb
|
71
74
|
- lib/context.rb
|
72
75
|
- lib/equals.rb
|
73
76
|
- lib/expression.rb
|
74
|
-
- lib/
|
77
|
+
- lib/format_call.rb
|
75
78
|
- lib/inner_join.rb
|
76
79
|
- lib/inner_join_builder.rb
|
80
|
+
- lib/is_true.rb
|
77
81
|
- lib/or.rb
|
78
82
|
- lib/qdsl.rb
|
79
83
|
- lib/qdsl/version.rb
|
84
|
+
- lib/render_result.rb
|
80
85
|
- lib/select.rb
|
86
|
+
- lib/select_query.rb
|
87
|
+
- lib/simple_render_result.rb
|
81
88
|
- lib/table.rb
|
82
89
|
- lib/table_query.rb
|
90
|
+
- lib/util.rb
|
83
91
|
- qdsl.gemspec
|
84
92
|
- test/column_test.rb
|
85
|
-
- test/context_test.rb
|
86
93
|
- test/end_to_end_test.rb
|
87
94
|
- test/expression_test.rb
|
88
95
|
- test/inner_join_test.rb
|
96
|
+
- test/is_true_test.rb
|
89
97
|
- test/minitest_helper.rb
|
90
98
|
- test/query_test.rb
|
91
99
|
- test/select_test.rb
|
@@ -117,10 +125,10 @@ specification_version: 4
|
|
117
125
|
summary: SQL query builder DSL for Ruby
|
118
126
|
test_files:
|
119
127
|
- test/column_test.rb
|
120
|
-
- test/context_test.rb
|
121
128
|
- test/end_to_end_test.rb
|
122
129
|
- test/expression_test.rb
|
123
130
|
- test/inner_join_test.rb
|
131
|
+
- test/is_true_test.rb
|
124
132
|
- test/minitest_helper.rb
|
125
133
|
- test/query_test.rb
|
126
134
|
- test/select_test.rb
|
data/test/context_test.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require_relative 'minitest_helper'
|
2
|
-
require_relative 'query_test'
|
3
|
-
|
4
|
-
module Qdsl
|
5
|
-
class ContextTest < QueryTest
|
6
|
-
def test_simple
|
7
|
-
query = Qdsl::select(:first_name).from(@clients).where { |t| t.id.equals('Cook') }
|
8
|
-
context = Context.new
|
9
|
-
result = query.render(context)
|
10
|
-
|
11
|
-
assert_sql 'SELECT _00.first_name ' +
|
12
|
-
'FROM clients AS _00 ' +
|
13
|
-
'WHERE _00.id = :_param00', result
|
14
|
-
assert_equal 1, context.parameters.size
|
15
|
-
assert_equal 'Cook', context.parameters['_param00']
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|