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.
@@ -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
- assert_sql <<-EOL, query.render
10
- SELECT _00.first_name
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 _01.id, _01.first_name, _01.last_name
17
+ SELECT
18
+ _01.id,
19
+ _01.first_name,
20
+ _01.last_name
13
21
  FROM clients AS _01
14
22
  ) AS _00
15
- EOL
23
+ SQL
24
+ assert_equal({}, result.parameters)
16
25
  end
17
26
 
18
- def test_subquery_inner_join
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
- assert_sql <<-EOL, query.render
25
- SELECT _00.first_name, _01.last_name
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 _02.id, _02.first_name, _02.last_name
28
- FROM clients AS _02
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 _03.id, _03.first_name, _03.last_name
49
+ SELECT
50
+ _03.id,
51
+ _03.first_name,
52
+ _03.last_name
32
53
  FROM clients AS _03
33
- ) AS _01
34
- ON _00.id = _01.id
35
- EOL
54
+ ) AS _02
55
+ ON _00.id = _02.id
56
+ SQL
57
+ assert_equal({}, result.parameters)
36
58
  end
37
59
 
38
- def test_subquery_inner_join_where
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
- context = Context.new
46
- assert_sql <<-EOL, query.render(context)
47
- SELECT _00.first_name, _01.last_name
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 _02.id, _02.first_name, _02.last_name
50
- FROM clients AS _02
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 _03.id, _03.first_name, _03.last_name
83
+ SELECT
84
+ _03.id,
85
+ _03.first_name,
86
+ _03.last_name
54
87
  FROM clients AS _03
55
- ) AS _01
56
- ON _00.id = _01.id
57
- WHERE (_00.first_name = :_param00) AND (_01.last_name = :_param01)
58
- EOL
59
-
60
- assert_equal 2, context.parameters.size
61
- assert_equal 'str0', context.parameters['_param00']
62
- assert_equal 'str1', context.parameters['_param01']
63
- end
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
- context = Context.new
11
- result = query.render(context)
10
+ result = query.render
12
11
 
13
- assert_sql 'SELECT _00.first_name ' +
14
- 'FROM clients AS _00 ' +
15
- 'WHERE _00.id = :_param00', result
16
- assert_equal 1, context.parameters.size
17
- assert_equal 'Cook', context.parameters['_param00']
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.2
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-10 00:00:00.000000000 Z
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/funky_proxy.rb
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
-