gitlab-zoql 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []