pggraphql 0.0.10 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pggraphql/version.rb +1 -1
- data/lib/pggraphql.rb +37 -11
- data/test/test_pggraphql.rb +175 -108
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 740c71df80baf59979c79d246a8956a8381bada1
|
4
|
+
data.tar.gz: 86c5e60636bc5f3d28c210f096ed7684f2a62905
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40b4f96fc5588dacf2ee4d5810f654f54bfc16c36139bba646dfad743488429712b07c48cdcc7cd3d60e31be29d6a64222734b9cf8078c928b20c1aad8b4fb15
|
7
|
+
data.tar.gz: 8e073df1c7d2f6d7050520b843e1999256a13e58eed043d17b97398d132959e7ba7047673c727380bb115715d06484f6519049d4fabc7ad1800c5ec2b18dd8ec
|
data/lib/pggraphql/version.rb
CHANGED
data/lib/pggraphql.rb
CHANGED
@@ -45,17 +45,32 @@ module PgGraphQl
|
|
45
45
|
nested_link_name = f[0]
|
46
46
|
field_name = f[0]
|
47
47
|
|
48
|
-
raise "unknown field #{field_name.inspect} on type #{type.name.inspect}" if !f[1].is_a?(Hash) && !type.fields.
|
48
|
+
raise "unknown field #{field_name.inspect} on type #{type.name.inspect}" if !f[1].is_a?(Hash) && !type.fields.detect{|f| f[:name] == field_name}
|
49
49
|
raise "unknown link #{field_name.inspect} on type #{type.name.inspect}" if f[1].is_a?(Hash) && !type.links.include?(field_name)
|
50
50
|
|
51
|
-
|
51
|
+
if f[1].is_a?(Hash)
|
52
|
+
"(" + to_sql([f].to_h, level + 1, type, nested_link_name) + ") as #{field_name}"
|
53
|
+
else
|
54
|
+
field_def = type.fields.detect{|f| f[:name] == field_name}
|
52
55
|
|
53
|
-
|
56
|
+
column_name = field_def[:name].to_s.index("__") ? field_def[:name].to_s.gsub(/__/, ".").to_sym : field_def[:name]
|
57
|
+
# column_expr = type.mappings[field_name] || column_name
|
58
|
+
|
59
|
+
column_expr = if field_def[:expr]
|
60
|
+
field_def[:expr].call(column_name)
|
61
|
+
else
|
62
|
+
column_name
|
63
|
+
end
|
64
|
+
|
65
|
+
if (column_name == field_name && column_name == column_expr)
|
66
|
+
column_name.to_s
|
67
|
+
else
|
68
|
+
"#{column_expr}" + (field_def[:as] ? " as #{field_def[:as]}" : "")
|
69
|
+
end
|
70
|
+
end
|
54
71
|
|
55
|
-
(f[1].is_a?(Hash) ? "(" + to_sql([f].to_h, level + 1, type, nested_link_name) + ") as #{field_name}" : ((column_name == field_name && column_name == column_expr) ? column_name.to_s : "#{column_expr} as #{field_name}"))
|
56
72
|
end.join(",")
|
57
73
|
|
58
|
-
# is_many = (link && link.many?) || ids.is_a?(Array) || (level == 1 && !ids && type.null_pk == :array)
|
59
74
|
is_many = (link && link.many?) || (level == 1 && ids.is_a?(Array)) || (level == 1 && !ids && type.null_pk == :array)
|
60
75
|
order_by = link.try(:order_by) || type.try(:order_by)
|
61
76
|
|
@@ -117,10 +132,9 @@ module PgGraphQl
|
|
117
132
|
@order_by = nil
|
118
133
|
@links = {}
|
119
134
|
@subtypes = {}
|
120
|
-
@mappings = {}
|
121
135
|
@null_pk = false
|
122
136
|
@pk = ->(ids, level) do
|
123
|
-
id_column = @
|
137
|
+
id_column = "#{@table}.id"
|
124
138
|
if ids.is_a?(Array)
|
125
139
|
"#{id_column} in (" + ids.map{|id| id.is_a?(String) ? "'#{id}'" : id.to_s}.join(',') + ")"
|
126
140
|
else
|
@@ -129,14 +143,26 @@ module PgGraphQl
|
|
129
143
|
end
|
130
144
|
end
|
131
145
|
def fields=(fields)
|
132
|
-
|
146
|
+
fields.each do |f|
|
147
|
+
raise "do not add :id in fields; it will be added automatically" if f == :id || (f.is_a?(Hash) && f[:name] == :id)
|
148
|
+
end
|
149
|
+
@fields = fields.map{|f| create_field(f)}
|
133
150
|
end
|
134
151
|
def fields
|
135
|
-
@fields + [:id] + (@subtypes.empty? ? [] : [:type])
|
152
|
+
@fields + [create_field({name: :id, as: nil, expr: ->(c){ "#{@table}.#{c}" }})] + (@subtypes.empty? ? [] : [create_field(:type)])
|
136
153
|
end
|
137
|
-
def
|
138
|
-
|
154
|
+
def create_field(field)
|
155
|
+
if field.is_a?(Symbol)
|
156
|
+
{name: field, as: field}
|
157
|
+
elsif field.is_a?(Hash)
|
158
|
+
raise "missing field :name #{field.inspect}" unless field[:name]
|
159
|
+
field[:as] = field[:name] unless field.key?(:as)
|
160
|
+
field
|
161
|
+
else
|
162
|
+
raise "unsupported field #{field.inspect}"
|
163
|
+
end
|
139
164
|
end
|
165
|
+
|
140
166
|
def one(name, opts={})
|
141
167
|
create_link(name, false, opts)
|
142
168
|
end
|
data/test/test_pggraphql.rb
CHANGED
@@ -23,16 +23,16 @@ module PgGraphQl
|
|
23
23
|
def test_simple
|
24
24
|
res = to_sql({user: {id: 1, email: "email"}}) do |s|
|
25
25
|
s.root :user
|
26
|
-
s.type :user, fields: [:
|
26
|
+
s.type :user, fields: [:email]
|
27
27
|
end
|
28
28
|
|
29
29
|
assert_equal token(<<-SQL
|
30
30
|
select 'user'::text as key,
|
31
31
|
(select to_json(x.*)
|
32
|
-
from (select id,
|
32
|
+
from (select users.id,
|
33
33
|
email
|
34
34
|
from users
|
35
|
-
where id = 1 limit 1) x) as value
|
35
|
+
where users.id = 1 limit 1) x) as value
|
36
36
|
SQL
|
37
37
|
), token(res)
|
38
38
|
|
@@ -46,10 +46,10 @@ module PgGraphQl
|
|
46
46
|
assert_equal token(<<-SQL
|
47
47
|
select 'user'::text as key,
|
48
48
|
(select to_json(x.*)
|
49
|
-
from (select id,
|
49
|
+
from (select users.id,
|
50
50
|
email
|
51
51
|
from users
|
52
|
-
where id = 1 limit 1) x) as value
|
52
|
+
where users.id = 1 limit 1) x) as value
|
53
53
|
SQL
|
54
54
|
), token(res)
|
55
55
|
|
@@ -63,7 +63,7 @@ module PgGraphQl
|
|
63
63
|
assert_equal token(<<-SQL
|
64
64
|
select 'user'::text as key,
|
65
65
|
(select to_json(coalesce(json_agg(x.*), '[]'::json))
|
66
|
-
from (select id,
|
66
|
+
from (select users.id,
|
67
67
|
email
|
68
68
|
from users) x) as value
|
69
69
|
SQL
|
@@ -73,6 +73,15 @@ module PgGraphQl
|
|
73
73
|
def test_simple_fail_when_accessing_non_root
|
74
74
|
assert_raise_message ":user is not a root type" do
|
75
75
|
res = to_sql({user: {id: 1, email: "email"}}) do |s|
|
76
|
+
s.type :user, fields: [:email]
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_simple_fail_when_pass_id_field
|
82
|
+
assert_raise_message "do not add :id in fields; it will be added automatically" do
|
83
|
+
res = to_sql({user: {id: 1, email: "email"}}) do |s|
|
84
|
+
s.root :user
|
76
85
|
s.type :user, fields: [:id, :email]
|
77
86
|
end
|
78
87
|
end
|
@@ -82,14 +91,14 @@ module PgGraphQl
|
|
82
91
|
assert_raise_message "missing :id for root type :user" do
|
83
92
|
res = to_sql({user: {email: "email"}}) do |s|
|
84
93
|
s.root :user
|
85
|
-
s.type :user, fields: [:
|
94
|
+
s.type :user, fields: [:email]
|
86
95
|
end
|
87
96
|
end
|
88
97
|
|
89
98
|
assert_raise_message "found empty :id array on type :user" do
|
90
99
|
res = to_sql({user: {id: [], email: "email"}}) do |s|
|
91
100
|
s.root :user
|
92
|
-
s.type :user, fields: [:
|
101
|
+
s.type :user, fields: [:email]
|
93
102
|
end
|
94
103
|
end
|
95
104
|
end
|
@@ -103,7 +112,7 @@ module PgGraphQl
|
|
103
112
|
assert_equal token(<<-SQL
|
104
113
|
select 'user'::text as key,
|
105
114
|
(select to_json(x.*)
|
106
|
-
from (select id,
|
115
|
+
from (select users.id,
|
107
116
|
email
|
108
117
|
from users where access_token = '1' limit 1) x) as value
|
109
118
|
SQL
|
@@ -119,7 +128,7 @@ module PgGraphQl
|
|
119
128
|
assert_equal token(<<-SQL
|
120
129
|
select 'user'::text as key,
|
121
130
|
(select to_json(x.*)
|
122
|
-
from (select id,
|
131
|
+
from (select users.id,
|
123
132
|
email
|
124
133
|
from users where level1 = '99' limit 1) x) as value
|
125
134
|
SQL
|
@@ -135,12 +144,13 @@ module PgGraphQl
|
|
135
144
|
assert_equal token(<<-SQL
|
136
145
|
select 'user'::text as key,
|
137
146
|
(select to_json(coalesce(json_agg(x.*), '[]'::json))
|
138
|
-
from (select id,
|
147
|
+
from (select users.id,
|
139
148
|
email
|
140
|
-
from users where id in ('1')) x) as value
|
149
|
+
from users where users.id in ('1')) x) as value
|
141
150
|
SQL
|
142
151
|
), token(res)
|
143
152
|
|
153
|
+
# ---
|
144
154
|
|
145
155
|
res = to_sql({user: {id: "1", email: "email"}}) do |s|
|
146
156
|
s.root :user
|
@@ -150,9 +160,9 @@ module PgGraphQl
|
|
150
160
|
assert_equal token(<<-SQL
|
151
161
|
select 'user'::text as key,
|
152
162
|
(select to_json(x.*)
|
153
|
-
from (select id,
|
163
|
+
from (select users.id,
|
154
164
|
email
|
155
|
-
from users where id = '1' limit 1) x) as value
|
165
|
+
from users where users.id = '1' limit 1) x) as value
|
156
166
|
SQL
|
157
167
|
), token(res)
|
158
168
|
end
|
@@ -160,15 +170,15 @@ module PgGraphQl
|
|
160
170
|
def test_simple_pk_array_one
|
161
171
|
res = to_sql({user: {id: [1], email: "email"}}) do |s|
|
162
172
|
s.root :user
|
163
|
-
s.type :user, fields: [:
|
173
|
+
s.type :user, fields: [:email]
|
164
174
|
end
|
165
175
|
|
166
176
|
assert_equal token(<<-SQL
|
167
177
|
select 'user'::text as key,
|
168
178
|
(select to_json(coalesce(json_agg(x.*), '[]'::json))
|
169
|
-
from (select id,
|
179
|
+
from (select users.id,
|
170
180
|
email
|
171
|
-
from users where id in (1)) x) as value
|
181
|
+
from users where users.id in (1)) x) as value
|
172
182
|
SQL
|
173
183
|
), token(res)
|
174
184
|
end
|
@@ -176,15 +186,15 @@ module PgGraphQl
|
|
176
186
|
def test_simple_pk_array_multiple
|
177
187
|
res = to_sql({user: {id: [1,2], email: "email"}}) do |s|
|
178
188
|
s.root :user
|
179
|
-
s.type :user, fields: [:
|
189
|
+
s.type :user, fields: [:email]
|
180
190
|
end
|
181
191
|
|
182
192
|
assert_equal token(<<-SQL
|
183
193
|
select 'user'::text as key,
|
184
194
|
(select to_json(coalesce(json_agg(x.*), '[]'::json))
|
185
|
-
from (select id,
|
195
|
+
from (select users.id,
|
186
196
|
email
|
187
|
-
from users where id in (1,2)) x) as value
|
197
|
+
from users where users.id in (1,2)) x) as value
|
188
198
|
SQL
|
189
199
|
), token(res)
|
190
200
|
|
@@ -192,15 +202,15 @@ module PgGraphQl
|
|
192
202
|
|
193
203
|
res = to_sql({user: {id: ['1','2'], email: "email"}}) do |s|
|
194
204
|
s.root :user
|
195
|
-
s.type :user, fields: [:
|
205
|
+
s.type :user, fields: [:email]
|
196
206
|
end
|
197
207
|
|
198
208
|
assert_equal token(<<-SQL
|
199
209
|
select 'user'::text as key,
|
200
210
|
(select to_json(coalesce(json_agg(x.*), '[]'::json))
|
201
|
-
from (select id,
|
211
|
+
from (select users.id,
|
202
212
|
email
|
203
|
-
from users where id in ('1','2')) x) as value
|
213
|
+
from users where users.id in ('1','2')) x) as value
|
204
214
|
SQL
|
205
215
|
), token(res)
|
206
216
|
end
|
@@ -208,16 +218,16 @@ module PgGraphQl
|
|
208
218
|
def test_simple_filter
|
209
219
|
res = to_sql({user: {id: 1, email: "email"}}) do |s|
|
210
220
|
s.root :user
|
211
|
-
s.type :user, fields: [:
|
221
|
+
s.type :user, fields: [:email], filter: "id > 100"
|
212
222
|
end
|
213
223
|
|
214
224
|
assert_equal token(<<-SQL
|
215
225
|
select 'user'::text as key,
|
216
226
|
(select to_json(x.*)
|
217
|
-
from (select id,
|
227
|
+
from (select users.id,
|
218
228
|
email
|
219
229
|
from users
|
220
|
-
where id = 1 and (id > 100) limit 1) x) as value
|
230
|
+
where users.id = 1 and (id > 100) limit 1) x) as value
|
221
231
|
SQL
|
222
232
|
), token(res)
|
223
233
|
end
|
@@ -226,26 +236,86 @@ module PgGraphQl
|
|
226
236
|
res = to_sql({user: {id: 1, email: "email"}, educator: {id: 99}}) do |s|
|
227
237
|
s.root :user
|
228
238
|
s.root :educator
|
229
|
-
s.type :user, fields: [:
|
239
|
+
s.type :user, fields: [:email]
|
230
240
|
s.type :educator, null_pk: true
|
231
241
|
end
|
232
242
|
|
233
243
|
assert_equal token(<<-SQL
|
234
244
|
select 'user'::text as key,
|
235
245
|
(select to_json(x.*)
|
236
|
-
from (select id,
|
246
|
+
from (select users.id,
|
237
247
|
email
|
238
248
|
from users
|
239
|
-
where id = 1 limit 1) x) as value
|
249
|
+
where users.id = 1 limit 1) x) as value
|
240
250
|
union all
|
241
251
|
select 'educator'::text as key,
|
242
252
|
(select to_json(x.*)
|
243
|
-
from (select id
|
244
|
-
from educators where id = 99 limit 1) x) as value
|
253
|
+
from (select educators.id
|
254
|
+
from educators where educators.id = 99 limit 1) x) as value
|
245
255
|
SQL
|
246
256
|
), token(res)
|
247
257
|
end
|
248
258
|
|
259
|
+
def test_simple_strange_nested_to_json_for_json_datatype_with_column_alias
|
260
|
+
# fails: select 'flow'::text as key, (select to_json(x.*) from (select id, data from flows where id = '1' limit 1) x) as value;
|
261
|
+
# fine: select 'flow'::text as key, (select to_json(x.*) from (select id, to_json(data) from flows where id = '1' limit 1) x) as value;
|
262
|
+
|
263
|
+
res = to_sql({flow: {id: 1, data: nil}}) do |s|
|
264
|
+
s.root :flow
|
265
|
+
s.type :flow do |t|
|
266
|
+
t.fields = [{name: :data}]
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
assert_equal token(<<-SQL
|
271
|
+
select 'flow'::text as key, (select to_json(x.*) from (select flows.id, data from flows where flows.id = 1 limit 1) x) as value
|
272
|
+
SQL
|
273
|
+
), token(res)
|
274
|
+
|
275
|
+
# ------
|
276
|
+
|
277
|
+
res = to_sql({flow: {id: 1, data: nil}}) do |s|
|
278
|
+
s.root :flow
|
279
|
+
s.type :flow do |t|
|
280
|
+
t.fields = [{name: :data, as: nil}]
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
284
|
+
assert_equal token(<<-SQL
|
285
|
+
select 'flow'::text as key, (select to_json(x.*) from (select flows.id, data from flows where flows.id = 1 limit 1) x) as value
|
286
|
+
SQL
|
287
|
+
), token(res)
|
288
|
+
|
289
|
+
# ------
|
290
|
+
|
291
|
+
res = to_sql({flow: {id: 1, data: nil}}) do |s|
|
292
|
+
s.root :flow
|
293
|
+
s.type :flow do |t|
|
294
|
+
t.fields = [{name: :data, expr: ->(c){ "to_json(#{c})" } }]
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
assert_equal token(<<-SQL
|
299
|
+
select 'flow'::text as key, (select to_json(x.*) from (select flows.id, to_json(data) as data from flows where flows.id = 1 limit 1) x) as value
|
300
|
+
SQL
|
301
|
+
), token(res)
|
302
|
+
|
303
|
+
# ------ positive check
|
304
|
+
|
305
|
+
res = to_sql({flow: {id: 1, data: nil}}) do |s|
|
306
|
+
s.root :flow
|
307
|
+
s.type :flow do |t|
|
308
|
+
t.fields = [{name: :data, as: nil, expr: ->(c){ "to_json(#{c})" } }]
|
309
|
+
end
|
310
|
+
end
|
311
|
+
|
312
|
+
assert_equal token(<<-SQL
|
313
|
+
select 'flow'::text as key, (select to_json(x.*) from (select flows.id, to_json(data) from flows where flows.id = 1 limit 1) x) as value
|
314
|
+
SQL
|
315
|
+
), token(res)
|
316
|
+
|
317
|
+
end
|
318
|
+
|
249
319
|
#####################
|
250
320
|
# inherit
|
251
321
|
#####################
|
@@ -263,7 +333,7 @@ module PgGraphQl
|
|
263
333
|
}) do |s|
|
264
334
|
s.root :product
|
265
335
|
|
266
|
-
s.type :user, fields: [:
|
336
|
+
s.type :user, fields: [:email] do |t|
|
267
337
|
t.many :orders, fk: "user_id = users.id"
|
268
338
|
end
|
269
339
|
|
@@ -271,8 +341,6 @@ module PgGraphQl
|
|
271
341
|
|
272
342
|
s.type :product, null_pk: :array, fields: [:type, :clickout__destination_url, :download__download_url] do |t|
|
273
343
|
|
274
|
-
t.map :id, "products.id"
|
275
|
-
|
276
344
|
t.subtype :download, table: :product_downloads, fk: "download.id = products.id and products.type = 'download'"
|
277
345
|
t.subtype :clickout, table: :product_clickouts, fk: "clickout.id = products.id and products.type = 'clickout'"
|
278
346
|
|
@@ -284,14 +352,14 @@ module PgGraphQl
|
|
284
352
|
assert_equal token(<<-SQL
|
285
353
|
select 'products'::text as key,
|
286
354
|
(select to_json(coalesce(json_agg(x.*), '[]'::json))
|
287
|
-
from (select products.id
|
355
|
+
from (select products.id,
|
288
356
|
type,
|
289
357
|
clickout.destination_url as clickout__destination_url,
|
290
358
|
download.download_url as download__download_url,
|
291
359
|
(select to_json(coalesce(json_agg(x.*), '[]'::json))
|
292
|
-
from (select id,
|
360
|
+
from (select users.id,
|
293
361
|
(select to_json(coalesce(json_agg(x.*), '[]'::json))
|
294
|
-
from (select id
|
362
|
+
from (select orders.id
|
295
363
|
from orders
|
296
364
|
where (user_id = users.id)) x) as orders
|
297
365
|
from users
|
@@ -302,8 +370,7 @@ module PgGraphQl
|
|
302
370
|
left join product_clickouts as clickout on (clickout.id = products.id
|
303
371
|
and products.type = 'clickout')) x) as value
|
304
372
|
SQL
|
305
|
-
), token(res)
|
306
|
-
|
373
|
+
), token(res)
|
307
374
|
end
|
308
375
|
|
309
376
|
def test_inherit_with_pk
|
@@ -315,7 +382,6 @@ module PgGraphQl
|
|
315
382
|
}) do |s|
|
316
383
|
s.root :product
|
317
384
|
s.type :product, null_pk: :array, fields: [:clickout__destination_url, :download__download_url] do |t|
|
318
|
-
t.map :id, "products.id"
|
319
385
|
t.subtype :clickout, table: :product_clickouts, fk: "clickout.id = products.id and products.type = 'clickout'"
|
320
386
|
end
|
321
387
|
end
|
@@ -323,7 +389,7 @@ module PgGraphQl
|
|
323
389
|
assert_equal token(<<-SQL
|
324
390
|
select 'products'::text as key,
|
325
391
|
(select to_json(x.*)
|
326
|
-
from (select products.id
|
392
|
+
from (select products.id, type,
|
327
393
|
clickout.destination_url as clickout__destination_url
|
328
394
|
from products
|
329
395
|
left join product_clickouts as clickout on (clickout.id = products.id
|
@@ -341,7 +407,7 @@ module PgGraphQl
|
|
341
407
|
def test_link_one
|
342
408
|
res = to_sql({user: {id: 1, email: "email", address: {id: "99"}}}) do |s|
|
343
409
|
s.root :user
|
344
|
-
s.type :user, fields: [:
|
410
|
+
s.type :user, fields: [:email] do |t|
|
345
411
|
t.one :address, fk: "id = users.address_id"
|
346
412
|
end
|
347
413
|
s.type :address
|
@@ -350,14 +416,14 @@ module PgGraphQl
|
|
350
416
|
assert_equal token(<<-SQL
|
351
417
|
select 'user'::text as key,
|
352
418
|
(select to_json(x.*)
|
353
|
-
from (select id,
|
419
|
+
from (select users.id,
|
354
420
|
email,
|
355
421
|
(select to_json(x.*)
|
356
|
-
from (select id
|
422
|
+
from (select addresses.id
|
357
423
|
from addresses
|
358
|
-
where id = '99' and (id = users.address_id) limit 1) x) as address
|
424
|
+
where addresses.id = '99' and (id = users.address_id) limit 1) x) as address
|
359
425
|
from users
|
360
|
-
where id = 1 limit 1) x) as value
|
426
|
+
where users.id = 1 limit 1) x) as value
|
361
427
|
SQL
|
362
428
|
), token(res)
|
363
429
|
end
|
@@ -365,7 +431,7 @@ module PgGraphQl
|
|
365
431
|
def test_link_one_nested_pk
|
366
432
|
res = to_sql({user: {id: 1, email: "email", address: {id: 99}}}) do |s|
|
367
433
|
s.root :user
|
368
|
-
s.type :user, fields: [:
|
434
|
+
s.type :user, fields: [:email] do |t|
|
369
435
|
t.one :address, fk: "id = users.address_id"
|
370
436
|
end
|
371
437
|
s.type :address
|
@@ -374,20 +440,20 @@ module PgGraphQl
|
|
374
440
|
assert_equal token(<<-SQL
|
375
441
|
select 'user'::text as key,
|
376
442
|
(select to_json(x.*)
|
377
|
-
from (select id,
|
443
|
+
from (select users.id,
|
378
444
|
email,
|
379
445
|
(select to_json(x.*)
|
380
|
-
from (select id
|
446
|
+
from (select addresses.id
|
381
447
|
from addresses
|
382
|
-
where id = 99 and (id = users.address_id) limit 1) x) as address
|
448
|
+
where addresses.id = 99 and (id = users.address_id) limit 1) x) as address
|
383
449
|
from users
|
384
|
-
where id = 1 limit 1) x) as value
|
450
|
+
where users.id = 1 limit 1) x) as value
|
385
451
|
SQL
|
386
452
|
), token(res)
|
387
453
|
|
388
454
|
res = to_sql({user: {id: 1, email: "email", address: {id: [99,999]}}}) do |s|
|
389
455
|
s.root :user
|
390
|
-
s.type :user, fields: [:
|
456
|
+
s.type :user, fields: [:email] do |t|
|
391
457
|
t.one :address, fk: "id = users.address_id"
|
392
458
|
end
|
393
459
|
s.type :address
|
@@ -396,16 +462,17 @@ module PgGraphQl
|
|
396
462
|
assert_equal token(<<-SQL
|
397
463
|
select 'user'::text as key,
|
398
464
|
(select to_json(x.*)
|
399
|
-
from (select id,
|
465
|
+
from (select users.id,
|
400
466
|
email,
|
401
467
|
(select to_json(x.*)
|
402
|
-
from (select id
|
468
|
+
from (select addresses.id
|
403
469
|
from addresses
|
404
|
-
where id in (99,999) and (id = users.address_id) limit 1) x) as address
|
470
|
+
where addresses.id in (99,999) and (id = users.address_id) limit 1) x) as address
|
405
471
|
from users
|
406
|
-
where id = 1 limit 1) x) as value
|
472
|
+
where users.id = 1 limit 1) x) as value
|
407
473
|
SQL
|
408
|
-
), token(res)
|
474
|
+
), token(res)
|
475
|
+
end
|
409
476
|
|
410
477
|
def test_link_one_empty_fields
|
411
478
|
res = to_sql({user: {id: 1, email: "email", address: {}}}) do |s|
|
@@ -419,14 +486,14 @@ module PgGraphQl
|
|
419
486
|
assert_equal token(<<-SQL
|
420
487
|
select 'user'::text as key,
|
421
488
|
(select to_json(x.*)
|
422
|
-
from (select id,
|
489
|
+
from (select users.id,
|
423
490
|
email,
|
424
491
|
(select to_json(x.*)
|
425
|
-
from (select id
|
492
|
+
from (select addresses.id
|
426
493
|
from addresses
|
427
494
|
where (id = users.address_id) limit 1) x) as address
|
428
495
|
from users
|
429
|
-
where id = 1 limit 1) x) as value
|
496
|
+
where users.id = 1 limit 1) x) as value
|
430
497
|
SQL
|
431
498
|
), token(res)
|
432
499
|
end
|
@@ -435,7 +502,7 @@ module PgGraphQl
|
|
435
502
|
assert_raise_message "missing :fk on link :address" do
|
436
503
|
to_sql({user: {id: 1, email: "email", address: {id: "id"}}}) do |s|
|
437
504
|
s.root :user
|
438
|
-
s.type :user, fields: [:
|
505
|
+
s.type :user, fields: [:email] do |t|
|
439
506
|
t.one :address
|
440
507
|
end
|
441
508
|
s.type :address
|
@@ -447,7 +514,7 @@ module PgGraphQl
|
|
447
514
|
def test_link_one_fk_sql
|
448
515
|
res = to_sql({user: {id: 1, email: "email", address: {id: "99"}}}) do |s|
|
449
516
|
s.root :user
|
450
|
-
s.type :user, fields: [:
|
517
|
+
s.type :user, fields: [:email] do |t|
|
451
518
|
t.one :address, fk: "id = (select 100)"
|
452
519
|
end
|
453
520
|
s.type :address
|
@@ -456,14 +523,14 @@ module PgGraphQl
|
|
456
523
|
assert_equal token(<<-SQL
|
457
524
|
select 'user'::text as key,
|
458
525
|
(select to_json(x.*)
|
459
|
-
from (select id,
|
526
|
+
from (select users.id,
|
460
527
|
email,
|
461
528
|
(select to_json(x.*)
|
462
|
-
from (select id
|
529
|
+
from (select addresses.id
|
463
530
|
from addresses
|
464
|
-
where id = '99' and (id = (select 100)) limit 1) x) as address
|
531
|
+
where addresses.id = '99' and (id = (select 100)) limit 1) x) as address
|
465
532
|
from users
|
466
|
-
where id = 1 limit 1) x) as value
|
533
|
+
where users.id = 1 limit 1) x) as value
|
467
534
|
SQL
|
468
535
|
), token(res)
|
469
536
|
end
|
@@ -471,7 +538,7 @@ module PgGraphQl
|
|
471
538
|
def test_link_one_filter
|
472
539
|
res = to_sql({user: {id: 1, email: "email", address: {id: "99"}}}) do |s|
|
473
540
|
s.root :user
|
474
|
-
s.type :user, fields: [:
|
541
|
+
s.type :user, fields: [:email] do |t|
|
475
542
|
t.one :address, fk: "user_id = users.id", filter: "id > 100"
|
476
543
|
end
|
477
544
|
s.type :address
|
@@ -480,14 +547,14 @@ module PgGraphQl
|
|
480
547
|
assert_equal token(<<-SQL
|
481
548
|
select 'user'::text as key,
|
482
549
|
(select to_json(x.*)
|
483
|
-
from (select id,
|
550
|
+
from (select users.id,
|
484
551
|
email,
|
485
552
|
(select to_json(x.*)
|
486
|
-
from (select id
|
553
|
+
from (select addresses.id
|
487
554
|
from addresses
|
488
|
-
where id = '99' and (user_id = users.id) and (id > 100) limit 1) x) as address
|
555
|
+
where addresses.id = '99' and (user_id = users.id) and (id > 100) limit 1) x) as address
|
489
556
|
from users
|
490
|
-
where id = 1 limit 1) x) as value
|
557
|
+
where users.id = 1 limit 1) x) as value
|
491
558
|
SQL
|
492
559
|
), token(res)
|
493
560
|
end
|
@@ -495,7 +562,7 @@ module PgGraphQl
|
|
495
562
|
def test_link_one_order_by
|
496
563
|
res = to_sql({user: {id: 1, email: "email", address: {id: "99"}}}) do |s|
|
497
564
|
s.root :user
|
498
|
-
s.type :user, fields: [:
|
565
|
+
s.type :user, fields: [:email] do |t|
|
499
566
|
t.one :address, fk: "user_id = users.id", order_by: "id desc"
|
500
567
|
end
|
501
568
|
s.type :address
|
@@ -504,14 +571,14 @@ module PgGraphQl
|
|
504
571
|
assert_equal token(<<-SQL
|
505
572
|
select 'user'::text as key,
|
506
573
|
(select to_json(x.*)
|
507
|
-
from (select id,
|
574
|
+
from (select users.id,
|
508
575
|
email,
|
509
576
|
(select to_json(x.*)
|
510
|
-
from (select id
|
577
|
+
from (select addresses.id
|
511
578
|
from addresses
|
512
|
-
where id = '99' and (user_id = users.id) order by id desc limit 1) x) as address
|
579
|
+
where addresses.id = '99' and (user_id = users.id) order by id desc limit 1) x) as address
|
513
580
|
from users
|
514
|
-
where id = 1 limit 1) x) as value
|
581
|
+
where users.id = 1 limit 1) x) as value
|
515
582
|
SQL
|
516
583
|
), token(res)
|
517
584
|
end
|
@@ -523,7 +590,7 @@ module PgGraphQl
|
|
523
590
|
def test_link_one_in_one
|
524
591
|
res = to_sql({user: {id: 1, email: "email", address: {country: {}}}}) do |s|
|
525
592
|
s.root :user
|
526
|
-
s.type :user, fields: [:
|
593
|
+
s.type :user, fields: [:email] do |t|
|
527
594
|
t.one :address, fk: "user_id = users.id"
|
528
595
|
end
|
529
596
|
s.type :address do |t|
|
@@ -535,31 +602,31 @@ module PgGraphQl
|
|
535
602
|
assert_equal token(<<-SQL
|
536
603
|
select 'user'::text as key,
|
537
604
|
(select to_json(x.*)
|
538
|
-
from (select id,
|
605
|
+
from (select users.id,
|
539
606
|
email,
|
540
607
|
(select to_json(x.*)
|
541
|
-
from (select id,
|
608
|
+
from (select addresses.id,
|
542
609
|
(select to_json(x.*)
|
543
|
-
from (select id
|
610
|
+
from (select countries.id
|
544
611
|
from countries
|
545
612
|
where (id = addresses.country_id) limit 1) x) as country
|
546
613
|
from addresses
|
547
614
|
where (user_id = users.id) limit 1) x) as address
|
548
615
|
from users
|
549
|
-
where id = 1 limit 1) x) as value
|
616
|
+
where users.id = 1 limit 1) x) as value
|
550
617
|
SQL
|
551
618
|
), token(res)
|
552
619
|
end
|
553
620
|
|
554
|
-
#####################
|
555
|
-
# many
|
556
|
-
#####################
|
621
|
+
# #####################
|
622
|
+
# # many
|
623
|
+
# #####################
|
557
624
|
|
558
625
|
|
559
626
|
def test_link_many
|
560
627
|
res = to_sql({user: {id: 1, email: "email", address: {id: "99"}}}) do |s|
|
561
628
|
s.root :user
|
562
|
-
s.type :user, fields: [:
|
629
|
+
s.type :user, fields: [:email] do |t|
|
563
630
|
t.many :address, fk: "user_id = users.id"
|
564
631
|
end
|
565
632
|
s.type :address
|
@@ -568,14 +635,14 @@ module PgGraphQl
|
|
568
635
|
assert_equal token(<<-SQL
|
569
636
|
select 'user'::text as key,
|
570
637
|
(select to_json(x.*)
|
571
|
-
from (select id,
|
638
|
+
from (select users.id,
|
572
639
|
email,
|
573
640
|
(select to_json(coalesce(json_agg(x.*), '[]'::json))
|
574
|
-
from (select id
|
641
|
+
from (select addresses.id
|
575
642
|
from addresses
|
576
|
-
where id = '99' and (user_id = users.id)) x) as address
|
643
|
+
where addresses.id = '99' and (user_id = users.id)) x) as address
|
577
644
|
from users
|
578
|
-
where id = 1 limit 1) x) as value
|
645
|
+
where users.id = 1 limit 1) x) as value
|
579
646
|
SQL
|
580
647
|
), token(res)
|
581
648
|
end
|
@@ -583,7 +650,7 @@ module PgGraphQl
|
|
583
650
|
def test_link_many_nested_pk
|
584
651
|
res = to_sql({user: {id: 1, email: "email", address: {id: ["99","999"]}}}) do |s|
|
585
652
|
s.root :user
|
586
|
-
s.type :user, fields: [:
|
653
|
+
s.type :user, fields: [:email] do |t|
|
587
654
|
t.many :address, fk: "user_id = users.id"
|
588
655
|
end
|
589
656
|
s.type :address
|
@@ -592,14 +659,14 @@ module PgGraphQl
|
|
592
659
|
assert_equal token(<<-SQL
|
593
660
|
select 'user'::text as key,
|
594
661
|
(select to_json(x.*)
|
595
|
-
from (select id,
|
662
|
+
from (select users.id,
|
596
663
|
email,
|
597
664
|
(select to_json(coalesce(json_agg(x.*), '[]'::json))
|
598
|
-
from (select id
|
665
|
+
from (select addresses.id
|
599
666
|
from addresses
|
600
|
-
where id in ('99','999') and (user_id = users.id)) x) as address
|
667
|
+
where addresses.id in ('99','999') and (user_id = users.id)) x) as address
|
601
668
|
from users
|
602
|
-
where id = 1 limit 1) x) as value
|
669
|
+
where users.id = 1 limit 1) x) as value
|
603
670
|
SQL
|
604
671
|
), token(res)
|
605
672
|
end
|
@@ -607,7 +674,7 @@ module PgGraphQl
|
|
607
674
|
def test_link_many_empty_fields
|
608
675
|
res = to_sql({user: {id: 1, email: "email", address: {}}}) do |s|
|
609
676
|
s.root :user
|
610
|
-
s.type :user, fields: [:
|
677
|
+
s.type :user, fields: [:email] do |t|
|
611
678
|
t.many :address, fk: "user_id = users.id"
|
612
679
|
end
|
613
680
|
s.type :address
|
@@ -616,14 +683,14 @@ module PgGraphQl
|
|
616
683
|
assert_equal token(<<-SQL
|
617
684
|
select 'user'::text as key,
|
618
685
|
(select to_json(x.*)
|
619
|
-
from (select id,
|
686
|
+
from (select users.id,
|
620
687
|
email,
|
621
688
|
(select to_json(coalesce(json_agg(x.*), '[]'::json))
|
622
|
-
from (select id
|
689
|
+
from (select addresses.id
|
623
690
|
from addresses
|
624
691
|
where (user_id = users.id)) x) as address
|
625
692
|
from users
|
626
|
-
where id = 1 limit 1) x) as value
|
693
|
+
where users.id = 1 limit 1) x) as value
|
627
694
|
SQL
|
628
695
|
), token(res)
|
629
696
|
end
|
@@ -631,7 +698,7 @@ module PgGraphQl
|
|
631
698
|
def test_link_many_filter
|
632
699
|
res = to_sql({user: {id: 1, email: "email", address: {id: "99"}}}) do |s|
|
633
700
|
s.root :user
|
634
|
-
s.type :user, fields: [:
|
701
|
+
s.type :user, fields: [:email] do |t|
|
635
702
|
t.many :address, fk: "user_id = users.id", filter: "id % 2 = 0"
|
636
703
|
end
|
637
704
|
s.type :address
|
@@ -640,14 +707,14 @@ module PgGraphQl
|
|
640
707
|
assert_equal token(<<-SQL
|
641
708
|
select 'user'::text as key,
|
642
709
|
(select to_json(x.*)
|
643
|
-
from (select id,
|
710
|
+
from (select users.id,
|
644
711
|
email,
|
645
712
|
(select to_json(coalesce(json_agg(x.*), '[]'::json))
|
646
|
-
from (select id
|
713
|
+
from (select addresses.id
|
647
714
|
from addresses
|
648
|
-
where id = '99' and (user_id = users.id) and (id % 2 = 0)) x) as address
|
715
|
+
where addresses.id = '99' and (user_id = users.id) and (id % 2 = 0)) x) as address
|
649
716
|
from users
|
650
|
-
where id = 1 limit 1) x) as value
|
717
|
+
where users.id = 1 limit 1) x) as value
|
651
718
|
SQL
|
652
719
|
), token(res)
|
653
720
|
end
|
@@ -655,7 +722,7 @@ module PgGraphQl
|
|
655
722
|
def test_link_many_order_by
|
656
723
|
res = to_sql({user: {id: 1, email: "email", address: {id: "99"}}}) do |s|
|
657
724
|
s.root :user
|
658
|
-
s.type :user, fields: [:
|
725
|
+
s.type :user, fields: [:email] do |t|
|
659
726
|
t.many :address, fk: "user_id = users.id", order_by: "id desc"
|
660
727
|
end
|
661
728
|
s.type :address
|
@@ -664,14 +731,14 @@ module PgGraphQl
|
|
664
731
|
assert_equal token(<<-SQL
|
665
732
|
select 'user'::text as key,
|
666
733
|
(select to_json(x.*)
|
667
|
-
from (select id,
|
734
|
+
from (select users.id,
|
668
735
|
email,
|
669
736
|
(select to_json(coalesce(json_agg(x.*), '[]'::json))
|
670
|
-
from (select id
|
737
|
+
from (select addresses.id
|
671
738
|
from addresses
|
672
|
-
where id = '99' and (user_id = users.id) order by id desc) x) as address
|
739
|
+
where addresses.id = '99' and (user_id = users.id) order by id desc) x) as address
|
673
740
|
from users
|
674
|
-
where id = 1 limit 1) x) as value
|
741
|
+
where users.id = 1 limit 1) x) as value
|
675
742
|
SQL
|
676
743
|
), token(res)
|
677
744
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pggraphql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Zimmek
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|