gitlab-zoql 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: ca281035447bc28813574e9680f05af39465972ab945f5ef1e5e4ac1eb20c31c
4
+ data.tar.gz: 864e281a1289c3862b368c9258219f1ef8c73a15cd36d2de1e03cd9b273b8818
5
+ SHA512:
6
+ metadata.gz: ae376415208f17886d3d9fb37468a91a524b6235a6d1ca62feeacd5395e72f98099e99c6510c65fc1a2583d6e70fecbd4d5a5ed9e597624dd5c0f1cda7af895e
7
+ data.tar.gz: 4488d937464b5cadcbd8db633b9204b407a0fd935662f1eb948ae0aafd944a665e010ea527c0811719f3e3f38e379824bacc596d8c5cf5a8f7fd94f6e6c9cdec
@@ -0,0 +1,671 @@
1
+ #
2
+ # DO NOT MODIFY!!!!
3
+ # This file is automatically generated by Racc 1.7.3
4
+ # from Racc grammar file "parser.racc".
5
+ #
6
+
7
+ require 'racc/parser.rb'
8
+
9
+ require 'date'
10
+
11
+ require File.dirname(__FILE__) + '/parser.rex.rb'
12
+
13
+ module GitlabZOQL
14
+ class Parser < Racc::Parser
15
+
16
+ module_eval(<<'...end parser.racc/module_eval...', 'parser.racc', 155)
17
+
18
+ def self.parse(zoql)
19
+ new.scan_str(zoql)
20
+ end
21
+ ...end parser.racc/module_eval...
22
+ ##### State transition tables begin ###
23
+
24
+ racc_action_table = [
25
+ -55, 6, 67, -55, 42, 77, 7, 71, 99, 36,
26
+ 37, 67, 31, 42, 34, 75, 71, 38, 39, -57,
27
+ 17, 22, 35, 25, 75, 27, -55, 29, 30, 17,
28
+ 22, 46, 25, 67, 27, 42, 29, 30, 71, 45,
29
+ 44, 47, 67, 48, 42, 50, 75, 71, 90, 91,
30
+ 53, 17, 22, 54, 25, 75, 27, 60, 29, 30,
31
+ 17, 22, 61, 25, 62, 27, 24, 29, 30, 20,
32
+ -54, -54, -54, -54, 42, 77, 85, 20, 60, 85,
33
+ 100, nil, 17, 22, nil, 25, nil, 27, nil, 29,
34
+ 30, 22, nil, 25, nil, 27, 42, 29, 30, 20,
35
+ nil, nil, nil, nil, nil, 42, nil, nil, 20, nil,
36
+ nil, nil, 17, 22, nil, 25, nil, 27, nil, 29,
37
+ 30, 17, 22, nil, 25, nil, 27, 42, 29, 30,
38
+ 20, nil, nil, nil, nil, nil, 42, nil, nil, 20,
39
+ nil, nil, nil, 17, 22, nil, 25, nil, 27, nil,
40
+ 29, 30, 17, 22, nil, 25, nil, 27, 42, 29,
41
+ 30, 20, nil, nil, nil, nil, nil, 42, nil, nil,
42
+ 71, nil, nil, nil, 17, 22, nil, 25, 75, 27,
43
+ nil, 29, 30, 17, 22, nil, 25, nil, 27, 42,
44
+ 29, 30, 20, nil, nil, nil, nil, nil, 42, nil,
45
+ 75, 20, nil, nil, nil, 17, 22, nil, 25, 75,
46
+ 27, nil, 29, 30, 17, 22, nil, 25, nil, 27,
47
+ 42, 29, 30, 20, nil, nil, nil, nil, nil, 42,
48
+ nil, 75, 20, nil, nil, nil, 17, 22, nil, 25,
49
+ 75, 27, nil, 29, 30, 17, 22, nil, 25, nil,
50
+ 27, 42, 29, 30, 20, nil, nil, nil, nil, nil,
51
+ 42, nil, 75, 20, nil, nil, nil, 17, 22, nil,
52
+ 25, 75, 27, nil, 29, 30, 17, 22, 78, 25,
53
+ nil, 27, nil, 29, 30, nil, 79, 80, 81, 82,
54
+ 83, 84 ]
55
+
56
+ racc_action_check = [
57
+ 24, 0, 50, 24, 50, 87, 1, 50, 87, 15,
58
+ 15, 71, 7, 71, 8, 50, 71, 16, 16, 10,
59
+ 50, 50, 11, 50, 71, 50, 24, 50, 50, 71,
60
+ 71, 27, 71, 77, 71, 77, 71, 71, 77, 25,
61
+ 25, 29, 85, 30, 85, 33, 77, 85, 78, 78,
62
+ 34, 77, 77, 35, 77, 85, 77, 43, 77, 77,
63
+ 85, 85, 44, 85, 47, 85, 6, 85, 85, 6,
64
+ 14, 14, 14, 14, 17, 63, 65, 17, 88, 89,
65
+ 90, nil, 6, 6, nil, 6, nil, 6, nil, 6,
66
+ 6, 17, nil, 17, nil, 17, 20, 17, 17, 20,
67
+ nil, nil, nil, nil, nil, 36, nil, nil, 36, nil,
68
+ nil, nil, 20, 20, nil, 20, nil, 20, nil, 20,
69
+ 20, 36, 36, nil, 36, nil, 36, 37, 36, 36,
70
+ 37, nil, nil, nil, nil, nil, 38, nil, nil, 38,
71
+ nil, nil, nil, 37, 37, nil, 37, nil, 37, nil,
72
+ 37, 37, 38, 38, nil, 38, nil, 38, 39, 38,
73
+ 38, 39, nil, nil, nil, nil, nil, 67, nil, nil,
74
+ 67, nil, nil, nil, 39, 39, nil, 39, 67, 39,
75
+ nil, 39, 39, 67, 67, nil, 67, nil, 67, 79,
76
+ 67, 67, 79, nil, nil, nil, nil, nil, 80, nil,
77
+ 79, 80, nil, nil, nil, 79, 79, nil, 79, 80,
78
+ 79, nil, 79, 79, 80, 80, nil, 80, nil, 80,
79
+ 81, 80, 80, 81, nil, nil, nil, nil, nil, 82,
80
+ nil, 81, 82, nil, nil, nil, 81, 81, nil, 81,
81
+ 82, 81, nil, 81, 81, 82, 82, nil, 82, nil,
82
+ 82, 83, 82, 82, 83, nil, nil, nil, nil, nil,
83
+ 84, nil, 83, 84, nil, nil, nil, 83, 83, nil,
84
+ 83, 84, 83, nil, 83, 83, 84, 84, 64, 84,
85
+ nil, 84, nil, 84, 84, nil, 64, 64, 64, 64,
86
+ 64, 64 ]
87
+
88
+ racc_action_pointer = [
89
+ -1, 6, nil, nil, nil, nil, 58, 12, 11, nil,
90
+ -7, -4, nil, nil, 50, -11, -5, 66, nil, nil,
91
+ 88, nil, nil, nil, 0, 12, nil, 1, nil, 9,
92
+ 12, nil, nil, 41, 42, 45, 97, 119, 128, 150,
93
+ nil, nil, nil, 45, 35, nil, nil, 33, nil, nil,
94
+ -4, nil, nil, nil, nil, nil, nil, nil, nil, nil,
95
+ nil, nil, nil, 66, 273, 66, nil, 159, nil, nil,
96
+ nil, 5, nil, nil, nil, nil, nil, 27, 42, 181,
97
+ 190, 212, 221, 243, 252, 36, nil, -4, 66, 69,
98
+ 73, nil, nil, nil, nil, nil, nil, nil, nil, nil,
99
+ nil ]
100
+
101
+ racc_action_default = [
102
+ -68, -68, -1, -2, -3, -4, -68, -68, -6, -7,
103
+ -8, -9, -10, -39, -40, -43, -46, -68, -48, -49,
104
+ -68, -51, -52, -53, -58, -68, -61, -68, -63, -67,
105
+ -68, 101, -5, -14, -68, -68, -68, -68, -68, -68,
106
+ -47, -54, -58, -68, -68, -60, -62, -65, -66, -11,
107
+ -68, -12, -13, -18, -55, -56, -41, -42, -44, -45,
108
+ -50, -59, -64, -15, -68, -19, -21, -68, -24, -25,
109
+ -26, -68, -28, -29, -36, -37, -38, -68, -68, -68,
110
+ -68, -68, -68, -68, -68, -68, -23, -68, -38, -20,
111
+ -68, -17, -30, -31, -32, -33, -34, -35, -22, -27,
112
+ -16 ]
113
+
114
+ racc_goto_table = [
115
+ 12, 10, 41, 1, 63, 92, 93, 94, 95, 96,
116
+ 97, 56, 57, 2, 43, 58, 59, 3, 4, 5,
117
+ 8, 41, 41, 41, 41, 87, 32, 9, 11, 33,
118
+ 55, 49, 51, 52, 89, 98, 86, 40, nil, nil,
119
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
120
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
121
+ nil, nil, nil, nil, nil, 88 ]
122
+
123
+ racc_goto_check = [
124
+ 11, 9, 27, 1, 16, 18, 18, 18, 18, 18,
125
+ 18, 26, 26, 2, 11, 28, 28, 3, 4, 5,
126
+ 6, 27, 27, 27, 27, 16, 7, 8, 10, 12,
127
+ 9, 13, 14, 15, 19, 20, 21, 30, nil, nil,
128
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
129
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
130
+ nil, nil, nil, nil, nil, 11 ]
131
+
132
+ racc_goto_pointer = [
133
+ nil, 3, 13, 17, 18, 19, 14, 18, 21, -5,
134
+ 22, -6, 21, -2, -2, -1, -46, nil, -74, -43,
135
+ -50, -31, nil, nil, nil, nil, -25, -15, -23, nil,
136
+ 20, nil, nil, nil, nil, nil ]
137
+
138
+ racc_goto_default = [
139
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
140
+ nil, 76, nil, nil, nil, nil, nil, 73, 64, 65,
141
+ 66, 68, 69, 70, 72, 74, 13, 14, 15, 16,
142
+ 18, 19, 21, 23, 26, 28 ]
143
+
144
+ racc_reduce_table = [
145
+ 0, 0, :racc_error,
146
+ 1, 34, :_reduce_none,
147
+ 1, 35, :_reduce_none,
148
+ 1, 36, :_reduce_3,
149
+ 1, 37, :_reduce_none,
150
+ 3, 38, :_reduce_5,
151
+ 2, 38, :_reduce_6,
152
+ 1, 39, :_reduce_7,
153
+ 1, 41, :_reduce_none,
154
+ 1, 41, :_reduce_none,
155
+ 1, 41, :_reduce_none,
156
+ 2, 40, :_reduce_11,
157
+ 2, 45, :_reduce_12,
158
+ 1, 47, :_reduce_none,
159
+ 0, 46, :_reduce_none,
160
+ 2, 46, :_reduce_15,
161
+ 4, 50, :_reduce_16,
162
+ 3, 50, :_reduce_17,
163
+ 1, 48, :_reduce_18,
164
+ 1, 49, :_reduce_none,
165
+ 3, 49, :_reduce_20,
166
+ 1, 52, :_reduce_none,
167
+ 3, 52, :_reduce_22,
168
+ 2, 53, :_reduce_23,
169
+ 1, 53, :_reduce_none,
170
+ 1, 54, :_reduce_none,
171
+ 1, 55, :_reduce_none,
172
+ 3, 55, :_reduce_27,
173
+ 1, 56, :_reduce_none,
174
+ 1, 56, :_reduce_none,
175
+ 3, 57, :_reduce_30,
176
+ 3, 57, :_reduce_31,
177
+ 3, 57, :_reduce_32,
178
+ 3, 57, :_reduce_33,
179
+ 3, 57, :_reduce_34,
180
+ 3, 57, :_reduce_35,
181
+ 1, 51, :_reduce_none,
182
+ 1, 51, :_reduce_none,
183
+ 1, 58, :_reduce_none,
184
+ 1, 44, :_reduce_none,
185
+ 1, 44, :_reduce_none,
186
+ 3, 59, :_reduce_41,
187
+ 3, 59, :_reduce_42,
188
+ 1, 59, :_reduce_none,
189
+ 3, 61, :_reduce_44,
190
+ 3, 61, :_reduce_45,
191
+ 1, 61, :_reduce_none,
192
+ 2, 62, :_reduce_47,
193
+ 1, 62, :_reduce_none,
194
+ 1, 63, :_reduce_none,
195
+ 3, 63, :_reduce_50,
196
+ 1, 64, :_reduce_none,
197
+ 1, 64, :_reduce_none,
198
+ 1, 65, :_reduce_none,
199
+ 1, 65, :_reduce_none,
200
+ 1, 42, :_reduce_55,
201
+ 3, 43, :_reduce_56,
202
+ 1, 43, :_reduce_none,
203
+ 1, 60, :_reduce_58,
204
+ 3, 60, :_reduce_59,
205
+ 2, 60, :_reduce_60,
206
+ 1, 60, :_reduce_none,
207
+ 2, 67, :_reduce_62,
208
+ 1, 66, :_reduce_none,
209
+ 3, 68, :_reduce_64,
210
+ 2, 68, :_reduce_65,
211
+ 2, 68, :_reduce_66,
212
+ 1, 68, :_reduce_67 ]
213
+
214
+ racc_reduce_n = 68
215
+
216
+ racc_shift_n = 101
217
+
218
+ racc_token_table = {
219
+ false => 0,
220
+ :error => 1,
221
+ :SELECT => 2,
222
+ :FROM => 3,
223
+ :WHERE => 4,
224
+ :IS => 5,
225
+ :NOT => 6,
226
+ :NULL => 7,
227
+ :identifier => 8,
228
+ :OR => 9,
229
+ :AND => 10,
230
+ :left_paren => 11,
231
+ :right_paren => 12,
232
+ :equals_operator => 13,
233
+ :not_equals_operator => 14,
234
+ :less_than_operator => 15,
235
+ :greater_than_operator => 16,
236
+ :less_than_or_equals_operator => 17,
237
+ :greater_than_or_equals_operator => 18,
238
+ :row_subquery => 19,
239
+ :plus_sign => 20,
240
+ :minus_sign => 21,
241
+ :asterisk => 22,
242
+ :solidus => 23,
243
+ :sign => 24,
244
+ :general_value_specification => 25,
245
+ :comma => 26,
246
+ :quote => 27,
247
+ :character_string_literal => 28,
248
+ :DATETIME => 29,
249
+ :datetime_string => 30,
250
+ :unsigned_integer => 31,
251
+ :period => 32 }
252
+
253
+ racc_nt_base = 33
254
+
255
+ racc_use_result_var = true
256
+
257
+ Racc_arg = [
258
+ racc_action_table,
259
+ racc_action_check,
260
+ racc_action_default,
261
+ racc_action_pointer,
262
+ racc_goto_table,
263
+ racc_goto_check,
264
+ racc_goto_default,
265
+ racc_goto_pointer,
266
+ racc_nt_base,
267
+ racc_reduce_table,
268
+ racc_token_table,
269
+ racc_shift_n,
270
+ racc_reduce_n,
271
+ racc_use_result_var ]
272
+ Ractor.make_shareable(Racc_arg) if defined?(Ractor)
273
+
274
+ Racc_token_to_s_table = [
275
+ "$end",
276
+ "error",
277
+ "SELECT",
278
+ "FROM",
279
+ "WHERE",
280
+ "IS",
281
+ "NOT",
282
+ "NULL",
283
+ "identifier",
284
+ "OR",
285
+ "AND",
286
+ "left_paren",
287
+ "right_paren",
288
+ "equals_operator",
289
+ "not_equals_operator",
290
+ "less_than_operator",
291
+ "greater_than_operator",
292
+ "less_than_or_equals_operator",
293
+ "greater_than_or_equals_operator",
294
+ "row_subquery",
295
+ "plus_sign",
296
+ "minus_sign",
297
+ "asterisk",
298
+ "solidus",
299
+ "sign",
300
+ "general_value_specification",
301
+ "comma",
302
+ "quote",
303
+ "character_string_literal",
304
+ "DATETIME",
305
+ "datetime_string",
306
+ "unsigned_integer",
307
+ "period",
308
+ "$start",
309
+ "direct_sql_statement",
310
+ "direct_sql_data_statement",
311
+ "direct_select_statement_multiple_rows",
312
+ "query_expression",
313
+ "query_specification",
314
+ "select_list",
315
+ "table_expression",
316
+ "select_sublist",
317
+ "column_name",
318
+ "column_name_list",
319
+ "value_expression",
320
+ "from_clause",
321
+ "where_clause",
322
+ "table_reference",
323
+ "table_name",
324
+ "search_condition",
325
+ "null_predicate",
326
+ "row_value_constructor",
327
+ "boolean_term",
328
+ "boolean_factor",
329
+ "boolean_test",
330
+ "boolean_primary",
331
+ "predicate",
332
+ "comparison_predicate",
333
+ "row_value_constructor_element",
334
+ "numeric_value_expression",
335
+ "general_literal",
336
+ "term",
337
+ "factor",
338
+ "value_expression_primary",
339
+ "unsigned_value_specification",
340
+ "unsigned_literal",
341
+ "unsigned_numeric_literal",
342
+ "datetime_literal",
343
+ "exact_numeric_literal" ]
344
+ Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)
345
+
346
+ Racc_debug_parser = false
347
+
348
+ ##### State transition tables end #####
349
+
350
+ # reduce 0 omitted
351
+
352
+ # reduce 1 omitted
353
+
354
+ # reduce 2 omitted
355
+
356
+ module_eval(<<'.,.,', 'parser.racc', 12)
357
+ def _reduce_3(val, _values, result)
358
+ result = GitlabZOQL::Parser::Statement::DirectSelect.new(val[0])
359
+ result
360
+ end
361
+ .,.,
362
+
363
+ # reduce 4 omitted
364
+
365
+ module_eval(<<'.,.,', 'parser.racc', 19)
366
+ def _reduce_5(val, _values, result)
367
+ result = GitlabZOQL::Parser::Statement::Select.new(val[1], val[2])
368
+ result
369
+ end
370
+ .,.,
371
+
372
+ module_eval(<<'.,.,', 'parser.racc', 20)
373
+ def _reduce_6(val, _values, result)
374
+ result = GitlabZOQL::Parser::Statement::Select.new(val[1])
375
+ result
376
+ end
377
+ .,.,
378
+
379
+ module_eval(<<'.,.,', 'parser.racc', 23)
380
+ def _reduce_7(val, _values, result)
381
+ result = GitlabZOQL::Parser::Statement::SelectList.new(val[0])
382
+ result
383
+ end
384
+ .,.,
385
+
386
+ # reduce 8 omitted
387
+
388
+ # reduce 9 omitted
389
+
390
+ # reduce 10 omitted
391
+
392
+ module_eval(<<'.,.,', 'parser.racc', 31)
393
+ def _reduce_11(val, _values, result)
394
+ result = GitlabZOQL::Parser::Statement::TableExpression.new(val[0], val[1])
395
+ result
396
+ end
397
+ .,.,
398
+
399
+ module_eval(<<'.,.,', 'parser.racc', 34)
400
+ def _reduce_12(val, _values, result)
401
+ result = GitlabZOQL::Parser::Statement::FromClause.new(val[1])
402
+ result
403
+ end
404
+ .,.,
405
+
406
+ # reduce 13 omitted
407
+
408
+ # reduce 14 omitted
409
+
410
+ module_eval(<<'.,.,', 'parser.racc', 41)
411
+ def _reduce_15(val, _values, result)
412
+ result = GitlabZOQL::Parser::Statement::WhereClause.new(val[1])
413
+ result
414
+ end
415
+ .,.,
416
+
417
+ module_eval(<<'.,.,', 'parser.racc', 45)
418
+ def _reduce_16(val, _values, result)
419
+ result = GitlabZOQL::Parser::Statement::Not.new(GitlabZOQL::Parser::Statement::Is.new(val[0], GitlabZOQL::Parser::Statement::Null.new))
420
+ result
421
+ end
422
+ .,.,
423
+
424
+ module_eval(<<'.,.,', 'parser.racc', 46)
425
+ def _reduce_17(val, _values, result)
426
+ result = GitlabZOQL::Parser::Statement::Is.new(val[0], GitlabZOQL::Parser::Statement::Null.new)
427
+ result
428
+ end
429
+ .,.,
430
+
431
+ module_eval(<<'.,.,', 'parser.racc', 50)
432
+ def _reduce_18(val, _values, result)
433
+ result = GitlabZOQL::Parser::Statement::Table.new(val[0])
434
+ result
435
+ end
436
+ .,.,
437
+
438
+ # reduce 19 omitted
439
+
440
+ module_eval(<<'.,.,', 'parser.racc', 55)
441
+ def _reduce_20(val, _values, result)
442
+ result = GitlabZOQL::Parser::Statement::Or.new(val[0], val[2])
443
+ result
444
+ end
445
+ .,.,
446
+
447
+ # reduce 21 omitted
448
+
449
+ module_eval(<<'.,.,', 'parser.racc', 59)
450
+ def _reduce_22(val, _values, result)
451
+ result = GitlabZOQL::Parser::Statement::And.new(val[0], val[2])
452
+ result
453
+ end
454
+ .,.,
455
+
456
+ module_eval(<<'.,.,', 'parser.racc', 62)
457
+ def _reduce_23(val, _values, result)
458
+ result = GitlabZOQL::Parser::Statement::Not.new(val[1])
459
+ result
460
+ end
461
+ .,.,
462
+
463
+ # reduce 24 omitted
464
+
465
+ # reduce 25 omitted
466
+
467
+ # reduce 26 omitted
468
+
469
+ module_eval(<<'.,.,', 'parser.racc', 70)
470
+ def _reduce_27(val, _values, result)
471
+ result = val[1]
472
+ result
473
+ end
474
+ .,.,
475
+
476
+ # reduce 28 omitted
477
+
478
+ # reduce 29 omitted
479
+
480
+ module_eval(<<'.,.,', 'parser.racc', 77)
481
+ def _reduce_30(val, _values, result)
482
+ result = GitlabZOQL::Parser::Statement::Equals.new(val[0], val[2])
483
+ result
484
+ end
485
+ .,.,
486
+
487
+ module_eval(<<'.,.,', 'parser.racc', 78)
488
+ def _reduce_31(val, _values, result)
489
+ result = GitlabZOQL::Parser::Statement::Not.new(GitlabZOQL::Parser::Statement::Equals.new(val[0], val[2]))
490
+ result
491
+ end
492
+ .,.,
493
+
494
+ module_eval(<<'.,.,', 'parser.racc', 79)
495
+ def _reduce_32(val, _values, result)
496
+ result = GitlabZOQL::Parser::Statement::Less.new(val[0], val[2])
497
+ result
498
+ end
499
+ .,.,
500
+
501
+ module_eval(<<'.,.,', 'parser.racc', 80)
502
+ def _reduce_33(val, _values, result)
503
+ result = GitlabZOQL::Parser::Statement::Greater.new(val[0], val[2])
504
+ result
505
+ end
506
+ .,.,
507
+
508
+ module_eval(<<'.,.,', 'parser.racc', 81)
509
+ def _reduce_34(val, _values, result)
510
+ result = GitlabZOQL::Parser::Statement::LessOrEquals.new(val[0], val[2])
511
+ result
512
+ end
513
+ .,.,
514
+
515
+ module_eval(<<'.,.,', 'parser.racc', 82)
516
+ def _reduce_35(val, _values, result)
517
+ result = GitlabZOQL::Parser::Statement::GreaterOrEquals.new(val[0], val[2])
518
+ result
519
+ end
520
+ .,.,
521
+
522
+ # reduce 36 omitted
523
+
524
+ # reduce 37 omitted
525
+
526
+ # reduce 38 omitted
527
+
528
+ # reduce 39 omitted
529
+
530
+ # reduce 40 omitted
531
+
532
+ module_eval(<<'.,.,', 'parser.racc', 96)
533
+ def _reduce_41(val, _values, result)
534
+ result = GitlabZOQL::Parser::Statement::Add.new(val[0], val[2])
535
+ result
536
+ end
537
+ .,.,
538
+
539
+ module_eval(<<'.,.,', 'parser.racc', 97)
540
+ def _reduce_42(val, _values, result)
541
+ result = GitlabZOQL::Parser::Statement::Subtract.new(val[0], val[2])
542
+ result
543
+ end
544
+ .,.,
545
+
546
+ # reduce 43 omitted
547
+
548
+ module_eval(<<'.,.,', 'parser.racc', 101)
549
+ def _reduce_44(val, _values, result)
550
+ result = GitlabZOQL::Parser::Statement::Multiply.new(val[0], val[2])
551
+ result
552
+ end
553
+ .,.,
554
+
555
+ module_eval(<<'.,.,', 'parser.racc', 102)
556
+ def _reduce_45(val, _values, result)
557
+ result = GitlabZOQL::Parser::Statement::Divide.new(val[0], val[2])
558
+ result
559
+ end
560
+ .,.,
561
+
562
+ # reduce 46 omitted
563
+
564
+ module_eval(<<'.,.,', 'parser.racc', 106)
565
+ def _reduce_47(val, _values, result)
566
+ result = val[0].new(val[1])
567
+ result
568
+ end
569
+ .,.,
570
+
571
+ # reduce 48 omitted
572
+
573
+ # reduce 49 omitted
574
+
575
+ module_eval(<<'.,.,', 'parser.racc', 111)
576
+ def _reduce_50(val, _values, result)
577
+ result = val[1]
578
+ result
579
+ end
580
+ .,.,
581
+
582
+ # reduce 51 omitted
583
+
584
+ # reduce 52 omitted
585
+
586
+ # reduce 53 omitted
587
+
588
+ # reduce 54 omitted
589
+
590
+ module_eval(<<'.,.,', 'parser.racc', 123)
591
+ def _reduce_55(val, _values, result)
592
+ result = GitlabZOQL::Parser::Statement::Column.new(val[0])
593
+ result
594
+ end
595
+ .,.,
596
+
597
+ module_eval(<<'.,.,', 'parser.racc', 126)
598
+ def _reduce_56(val, _values, result)
599
+ result = Array(val[0]) + Array(val[2])
600
+ result
601
+ end
602
+ .,.,
603
+
604
+ # reduce 57 omitted
605
+
606
+ module_eval(<<'.,.,', 'parser.racc', 131)
607
+ def _reduce_58(val, _values, result)
608
+ result = GitlabZOQL::Parser::Statement::Identifier.new(val[0])
609
+ result
610
+ end
611
+ .,.,
612
+
613
+ module_eval(<<'.,.,', 'parser.racc', 132)
614
+ def _reduce_59(val, _values, result)
615
+ result = GitlabZOQL::Parser::Statement::Literal.new(val[1])
616
+ result
617
+ end
618
+ .,.,
619
+
620
+ module_eval(<<'.,.,', 'parser.racc', 133)
621
+ def _reduce_60(val, _values, result)
622
+ result = GitlabZOQL::Parser::Statement::String.new('')
623
+ result
624
+ end
625
+ .,.,
626
+
627
+ # reduce 61 omitted
628
+
629
+ module_eval(<<'.,.,', 'parser.racc', 137)
630
+ def _reduce_62(val, _values, result)
631
+ result = GitlabZOQL::Parser::Statement::DateTime.new(val[1])
632
+ result
633
+ end
634
+ .,.,
635
+
636
+ # reduce 63 omitted
637
+
638
+ module_eval(<<'.,.,', 'parser.racc', 143)
639
+ def _reduce_64(val, _values, result)
640
+ result = GitlabZOQL::Parser::Statement::Float.new("#{val[0]}.#{val[2]}".to_f)
641
+ result
642
+ end
643
+ .,.,
644
+
645
+ module_eval(<<'.,.,', 'parser.racc', 144)
646
+ def _reduce_65(val, _values, result)
647
+ result = GitlabZOQL::Parser::Statement::Float.new(val[0])
648
+ result
649
+ end
650
+ .,.,
651
+
652
+ module_eval(<<'.,.,', 'parser.racc', 145)
653
+ def _reduce_66(val, _values, result)
654
+ result = GitlabZOQL::Parser::Statement::Float.new("0.#{val[1]}".to_f)
655
+ result
656
+ end
657
+ .,.,
658
+
659
+ module_eval(<<'.,.,', 'parser.racc', 146)
660
+ def _reduce_67(val, _values, result)
661
+ result = GitlabZOQL::Parser::Statement::Integer.new(val[0])
662
+ result
663
+ end
664
+ .,.,
665
+
666
+ def _reduce_none(val, _values, result)
667
+ val[0]
668
+ end
669
+
670
+ end # class Parser
671
+ end # module GitlabZOQL
@@ -0,0 +1,166 @@
1
+ #--
2
+ # DO NOT MODIFY!!!!
3
+ # This file is automatically generated by rex 1.0.7
4
+ # from lexical definition file "lib/gitlab-zoql/parser/parser.rex".
5
+ #++
6
+
7
+ require 'racc/parser'
8
+ # -*- fill-column: 30; -*-
9
+
10
+ class GitlabZOQL::Parser < Racc::Parser
11
+ require 'strscan'
12
+
13
+ class ScanError < StandardError ; end
14
+
15
+ attr_reader :lineno
16
+ attr_reader :filename
17
+ attr_accessor :state
18
+
19
+ def scan_setup(str)
20
+ @ss = StringScanner.new(str)
21
+ @lineno = 1
22
+ @state = nil
23
+ end
24
+
25
+ def action
26
+ yield
27
+ end
28
+
29
+ def scan_str(str)
30
+ scan_setup(str)
31
+ do_parse
32
+ end
33
+ alias :scan :scan_str
34
+
35
+ def load_file( filename )
36
+ @filename = filename
37
+ File.open(filename, "r") do |f|
38
+ scan_setup(f.read)
39
+ end
40
+ end
41
+
42
+ def scan_file( filename )
43
+ load_file(filename)
44
+ do_parse
45
+ end
46
+
47
+
48
+ def next_token
49
+ return if @ss.eos?
50
+
51
+ # skips empty actions
52
+ until token = _next_token or @ss.eos?; end
53
+ token
54
+ end
55
+
56
+ def _next_token
57
+ text = @ss.peek(1)
58
+ @lineno += 1 if text == "\n"
59
+ token = case @state
60
+ when nil
61
+ case
62
+ when (text = @ss.scan(/\'/i))
63
+ action { @state = :STRS; [:quote, text] }
64
+
65
+ when (text = @ss.scan(/[0-9]+/i))
66
+ action { [:unsigned_integer, text.to_i] }
67
+
68
+ when (text = @ss.scan(/\s+/i))
69
+ ;
70
+
71
+ when (text = @ss.scan(/AND/i))
72
+ action { [:AND, text] }
73
+
74
+ when (text = @ss.scan(/BY/i))
75
+ action { [:BY, text] }
76
+
77
+ when (text = @ss.scan(/COUNT/i))
78
+ action { [:COUNT, text] }
79
+
80
+ when (text = @ss.scan(/ELSE/i))
81
+ action { [:ELSE, text] }
82
+
83
+ when (text = @ss.scan(/END/i))
84
+ action { [:END, text] }
85
+
86
+ when (text = @ss.scan(/FROM/i))
87
+ action { [:FROM, text] }
88
+
89
+ when (text = @ss.scan(/NULL/i))
90
+ action { [:NULL, text] }
91
+
92
+ when (text = @ss.scan(/OR/i))
93
+ action { [:OR, text] }
94
+
95
+ when (text = @ss.scan(/SELECT/i))
96
+ action { [:SELECT, text] }
97
+
98
+ when (text = @ss.scan(/WHERE/i))
99
+ action { [:WHERE, text] }
100
+
101
+ when (text = @ss.scan(/!=/i))
102
+ action { [:not_equals_operator, text] }
103
+
104
+ when (text = @ss.scan(/=/i))
105
+ action { [:equals_operator, text] }
106
+
107
+ when (text = @ss.scan(/<=/i))
108
+ action { [:less_than_or_equals_operator, text] }
109
+
110
+ when (text = @ss.scan(/</i))
111
+ action { [:less_than_operator, text] }
112
+
113
+ when (text = @ss.scan(/>=/i))
114
+ action { [:greater_than_or_equals_operator, text] }
115
+
116
+ when (text = @ss.scan(/>/i))
117
+ action { [:greater_than_operator, text] }
118
+
119
+ when (text = @ss.scan(/\(/i))
120
+ action { [:left_paren, text] }
121
+
122
+ when (text = @ss.scan(/\)/i))
123
+ action { [:right_paren, text] }
124
+
125
+ when (text = @ss.scan(/,/i))
126
+ action { [:comma, text] }
127
+
128
+ when (text = @ss.scan(/\w+/i))
129
+ action { [:identifier, text] }
130
+
131
+ when (text = @ss.scan(/----/i))
132
+ ;
133
+
134
+ when (text = @ss.scan(/require/i))
135
+ ;
136
+
137
+
138
+ else
139
+ text = @ss.string[@ss.pos .. -1]
140
+ raise ScanError, "can not match: '" + text + "'"
141
+ end # if
142
+
143
+ when :STRS
144
+ case
145
+ when (text = @ss.scan(/\'/i))
146
+ action { @state = nil; [:quote, text] }
147
+
148
+ when (text = @ss.scan(/[0-9]+-[0-9]+-[0-9]+T[0-9]+:[0-9]+:[0-9]+\+[0-9]+:[0-9]+/i))
149
+ action { [:datetime_string, DateTime.parse(text)] }
150
+
151
+ when (text = @ss.scan(/.*(?=\')/i))
152
+ action { [:character_string_literal, text.gsub("''", "'")] }
153
+
154
+
155
+ else
156
+ text = @ss.string[@ss.pos .. -1]
157
+ raise ScanError, "can not match: '" + text + "'"
158
+ end # if
159
+
160
+ else
161
+ raise ScanError, "undefined state: '" + state.to_s + "'"
162
+ end # case state
163
+ token
164
+ end # def _next_token
165
+
166
+ end # class
@@ -0,0 +1,168 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GitlabZOQL::Parser::Statement
4
+ class Node
5
+ def accept(visitor)
6
+ klass = self.class.ancestors.find do |ancestor|
7
+ visitor.respond_to?("visit_#{demodulize(ancestor.name)}")
8
+ end
9
+
10
+ raise "No visitor for #{self.class.name}" unless klass
11
+
12
+ visitor.__send__("visit_#{demodulize(klass.name)}", self)
13
+ end
14
+
15
+ def to_sql
16
+ GitlabZOQL::Visitor.new.visit(self)
17
+ end
18
+
19
+ private
20
+
21
+ def demodulize(str)
22
+ str.split('::')[-1]
23
+ end
24
+ end
25
+
26
+ class Identifier < Node
27
+ def initialize(name)
28
+ @name = name
29
+ end
30
+
31
+ attr_reader :name
32
+ end
33
+
34
+ class Select < Node
35
+ def initialize(list, table_expression = nil)
36
+ @list = list
37
+ @table_expression = table_expression
38
+ end
39
+
40
+ attr_reader :list, :table_expression
41
+ end
42
+
43
+ class SelectList < Node
44
+ def initialize(columns)
45
+ @columns = Array(columns)
46
+ end
47
+
48
+ attr_reader :columns
49
+ end
50
+
51
+ class DirectSelect < Node
52
+ def initialize(query_expression)
53
+ @query_expression = query_expression
54
+ end
55
+
56
+ attr_reader :query_expression
57
+ end
58
+
59
+ class WhereClause < Node
60
+ def initialize(search_condition)
61
+ @search_condition = search_condition
62
+ end
63
+
64
+ attr_reader :search_condition
65
+ end
66
+
67
+ class TableExpression < Node
68
+ def initialize(from_clause, where_clause = nil)
69
+ @from_clause = from_clause
70
+ @where_clause = where_clause
71
+ end
72
+
73
+ attr_reader :from_clause, :where_clause
74
+ end
75
+
76
+ class FromClause < Node
77
+ def initialize(tables)
78
+ @tables = Array(tables)
79
+ end
80
+
81
+ attr_reader :tables
82
+ end
83
+
84
+ class Table < Identifier
85
+ end
86
+
87
+ class Column < Identifier
88
+ end
89
+
90
+ class ComparisonPredicate < Node
91
+ def initialize(left, right)
92
+ @left = left
93
+ @right = right
94
+ end
95
+
96
+ attr_reader :left, :right
97
+ end
98
+
99
+ class GreaterOrEquals < ComparisonPredicate
100
+ end
101
+
102
+ class LessOrEquals < ComparisonPredicate
103
+ end
104
+
105
+ class Greater < ComparisonPredicate
106
+ end
107
+
108
+ class Less < ComparisonPredicate
109
+ end
110
+
111
+ class Equals < ComparisonPredicate
112
+ end
113
+
114
+ class SearchCondition < Node
115
+ def initialize(left, right)
116
+ @left = left
117
+ @right = right
118
+ end
119
+
120
+ attr_reader :left, :right
121
+ end
122
+
123
+ class Or < SearchCondition
124
+ end
125
+
126
+ class And < SearchCondition
127
+ end
128
+
129
+ class Unary < Node
130
+ def initialize(value)
131
+ @value = value
132
+ end
133
+
134
+ attr_reader :value
135
+ end
136
+
137
+ class Not < Unary
138
+ end
139
+
140
+ class True < Node
141
+ end
142
+
143
+ class False < Node
144
+ end
145
+
146
+ class Null < Node
147
+ end
148
+
149
+ class Literal < Node
150
+ def initialize(value)
151
+ @value = value
152
+ end
153
+
154
+ attr_reader :value
155
+ end
156
+
157
+ class DateTime < Literal
158
+ end
159
+
160
+ class String < Literal
161
+ end
162
+
163
+ class Float < Literal
164
+ end
165
+
166
+ class Integer < Literal
167
+ end
168
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GitlabZOQL
4
+ VERSION = '0.1.0'
5
+ end
@@ -0,0 +1,163 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GitlabZOQL
4
+ class Visitor
5
+ def initialize
6
+ @negated = false
7
+ end
8
+
9
+ def visit(node)
10
+ node.accept(self)
11
+ end
12
+
13
+ def visit_DirectSelect(o)
14
+ [
15
+ o.query_expression
16
+ ].compact.collect { |e| visit(e) }.join(' ')
17
+ end
18
+
19
+ def visit_Select(o)
20
+ "SELECT #{visit_all([o.list, o.table_expression].compact).join(' ')}"
21
+ end
22
+
23
+ def visit_SelectList(o)
24
+ arrayize(o.columns)
25
+ end
26
+
27
+ def visit_TableExpression(o)
28
+ [
29
+ o.from_clause,
30
+ o.where_clause
31
+ ].compact.collect { |e| visit(e) }.join(' ')
32
+ end
33
+
34
+ def visit_FromClause(o)
35
+ "FROM #{arrayize(o.tables)}"
36
+ end
37
+
38
+ def visit_WhereClause(o)
39
+ "WHERE #{visit(o.search_condition)}"
40
+ end
41
+
42
+ def visit_Or(o)
43
+ search_condition('OR', o)
44
+ end
45
+
46
+ def visit_And(o)
47
+ search_condition('AND', o)
48
+ end
49
+
50
+ def visit_Is(o)
51
+ if @negated
52
+ comparison('IS NOT', o)
53
+ else
54
+ comparison('IS', o)
55
+ end
56
+ end
57
+
58
+ def visit_GreaterOrEquals(o)
59
+ comparison('>=', o)
60
+ end
61
+
62
+ def visit_LessOrEquals(o)
63
+ comparison('<=', o)
64
+ end
65
+
66
+ def visit_Greater(o)
67
+ comparison('>', o)
68
+ end
69
+
70
+ def visit_Less(o)
71
+ comparison('<', o)
72
+ end
73
+
74
+ def visit_Equals(o)
75
+ if @negated
76
+ comparison('!=', o)
77
+ else
78
+ comparison('=', o)
79
+ end
80
+ end
81
+
82
+ def visit_Table(o)
83
+ o.name
84
+ end
85
+
86
+ def visit_Column(o)
87
+ o.name
88
+ end
89
+
90
+ def visit_DateTime(o)
91
+ "'%s'" % escape(o.value.strftime('%Y-%m-%d %H:%M:%S'))
92
+ end
93
+
94
+ def visit_String(o)
95
+ '%s' % escape(o.value)
96
+ end
97
+
98
+ def visit_Float(o)
99
+ o.value.to_s
100
+ end
101
+
102
+ def visit_Integer(o)
103
+ o.value.to_s
104
+ end
105
+
106
+ def visit_Literal(o)
107
+ quote(o.value)
108
+ end
109
+
110
+ def visit_Identifier(o)
111
+ o.name
112
+ end
113
+
114
+ def visit_Not(o)
115
+ negate { visit(o.value) }
116
+ end
117
+
118
+ def visit_True(_o)
119
+ 'TRUE'
120
+ end
121
+
122
+ def visit_False(_o)
123
+ 'FALSE'
124
+ end
125
+
126
+ def visit_Null(_o)
127
+ 'NULL'
128
+ end
129
+
130
+ private
131
+
132
+ def negate
133
+ @negated = true
134
+ yield
135
+ ensure
136
+ @negated = false
137
+ end
138
+
139
+ def quote(str)
140
+ "'#{str}'"
141
+ end
142
+
143
+ def escape(str)
144
+ str.gsub(/'/, "''")
145
+ end
146
+
147
+ def comparison(operator, o)
148
+ [visit(o.left), operator, visit(o.right)].join(' ')
149
+ end
150
+
151
+ def search_condition(operator, o)
152
+ "#{visit(o.left)} #{operator} #{visit(o.right)}"
153
+ end
154
+
155
+ def visit_all(nodes)
156
+ nodes.collect { |e| visit(e) }
157
+ end
158
+
159
+ def arrayize(arr)
160
+ visit_all(arr).join(', ')
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'gitlab-zoql/version'
4
+
5
+ module GitlabZOQL
6
+ require_relative 'gitlab-zoql/parser/parser.racc'
7
+ require_relative 'gitlab-zoql/parser/parser.rex'
8
+ require_relative 'gitlab-zoql/parser/statement'
9
+ require_relative 'gitlab-zoql/visitor'
10
+ end
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gitlab-zoql
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Vitaly Slobodin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-02-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '5.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest-focus
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.4'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest-reporters
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.6'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.6'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '13.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '13.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rexical
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ description: ZOQL language parser and AST explorer.
84
+ email:
85
+ - vslobodin@gitlab.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - lib/gitlab-zoql.rb
91
+ - lib/gitlab-zoql/parser/parser.racc.rb
92
+ - lib/gitlab-zoql/parser/parser.rex.rb
93
+ - lib/gitlab-zoql/parser/statement.rb
94
+ - lib/gitlab-zoql/version.rb
95
+ - lib/gitlab-zoql/visitor.rb
96
+ homepage: https://gitlab.com/gitlab-org/ruby/gems/gitlab-zoql
97
+ licenses:
98
+ - MIT
99
+ metadata:
100
+ rubygems_mfa_required: 'true'
101
+ post_install_message:
102
+ rdoc_options: []
103
+ require_paths:
104
+ - lib
105
+ required_ruby_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: 3.0.0
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ requirements: []
116
+ rubygems_version: 3.5.6
117
+ signing_key:
118
+ specification_version: 4
119
+ summary: A toolkit for working with ZOQL language
120
+ test_files: []