sql-parser2 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,564 @@
1
+ module SQLParser
2
+
3
+ module Statement
4
+
5
+ class Node
6
+
7
+ def accept(visitor)
8
+ klass = self.class.ancestors.find do |ancestor|
9
+ visitor.respond_to?("visit_#{demodulize(ancestor.name)}")
10
+ end
11
+
12
+ if klass
13
+ visitor.__send__("visit_#{demodulize(klass.name)}", self)
14
+ else
15
+ raise "No visitor for #{self.class.name}"
16
+ end
17
+ end
18
+
19
+ def to_sql
20
+ SQLVisitor.new.visit(self)
21
+ end
22
+
23
+ private
24
+
25
+ def demodulize(str)
26
+ str.split('::')[-1]
27
+ end
28
+
29
+ end
30
+
31
+ class Delete < Node
32
+
33
+ def initialize(from_clause, where_clause = nil)
34
+ @from_clause = from_clause
35
+ @where_clause = where_clause
36
+ end
37
+
38
+ attr_reader :from_clause
39
+ attr_reader :where_clause
40
+
41
+ end
42
+
43
+ class Update < Node
44
+
45
+ def initialize(table_reference, update_column_list, where_clause = nil)
46
+ @table_reference = table_reference
47
+ @update_column_list = update_column_list
48
+ @where_clause = where_clause
49
+ end
50
+
51
+ attr_reader :table_reference
52
+ attr_reader :update_column_list
53
+ attr_reader :where_clause
54
+
55
+ end
56
+
57
+ class UpdateColumnList < Node
58
+
59
+ def initialize(update_columns)
60
+ @update_columns = Array(update_columns)
61
+ end
62
+
63
+ attr_reader :update_columns
64
+
65
+ end
66
+
67
+ class Insert < Node
68
+
69
+ def initialize(table_reference, column_list, in_value_list)
70
+ @table_reference = table_reference
71
+ @column_list = column_list
72
+ @in_value_list = in_value_list
73
+ end
74
+
75
+ attr_reader :table_reference
76
+ attr_reader :column_list
77
+ attr_reader :in_value_list
78
+
79
+ end
80
+
81
+ class DirectSelect < Node
82
+
83
+ def initialize(query_expression, order_by)
84
+ @query_expression = query_expression
85
+ @order_by = order_by
86
+ end
87
+
88
+ attr_reader :query_expression
89
+ attr_reader :order_by
90
+
91
+ end
92
+
93
+ class OrderBy < Node
94
+
95
+ def initialize(sort_specification)
96
+ @sort_specification = Array(sort_specification)
97
+ end
98
+
99
+ attr_reader :sort_specification
100
+
101
+ end
102
+
103
+ class Subquery < Node
104
+
105
+ def initialize(query_specification)
106
+ @query_specification = query_specification
107
+ end
108
+
109
+ attr_reader :query_specification
110
+
111
+ end
112
+
113
+ class Select < Node
114
+ def initialize(list, table_expression = nil)
115
+ @list = list
116
+ @table_expression = table_expression
117
+ end
118
+
119
+ attr_reader :list
120
+ attr_reader :table_expression
121
+
122
+ end
123
+
124
+ class SelectList < Node
125
+
126
+ def initialize(columns)
127
+ @columns = Array(columns)
128
+ end
129
+
130
+ attr_reader :columns
131
+
132
+ end
133
+
134
+ class Distinct < Node
135
+
136
+ def initialize(column)
137
+ @column = column
138
+ end
139
+
140
+ attr_reader :column
141
+
142
+ end
143
+
144
+ class All < Node
145
+ end
146
+
147
+ class TableExpression < Node
148
+
149
+ def initialize(from_clause, where_clause = nil, group_by_clause = nil, having_clause = nil)
150
+ @from_clause = from_clause
151
+ @where_clause = where_clause
152
+ @group_by_clause = group_by_clause
153
+ @having_clause = having_clause
154
+ end
155
+
156
+ attr_reader :from_clause
157
+ attr_reader :where_clause
158
+ attr_reader :group_by_clause
159
+ attr_reader :having_clause
160
+
161
+ end
162
+
163
+ class FromClause < Node
164
+
165
+ def initialize(tables)
166
+ @tables = Array(tables)
167
+ end
168
+
169
+ attr_reader :tables
170
+
171
+ end
172
+
173
+ class OrderClause < Node
174
+
175
+ def initialize(columns)
176
+ @columns = Array(columns)
177
+ end
178
+
179
+ attr_reader :columns
180
+
181
+ end
182
+
183
+ class OrderSpecification < Node
184
+
185
+ def initialize(column)
186
+ @column = column
187
+ end
188
+
189
+ attr_reader :column
190
+
191
+ end
192
+
193
+ class Ascending < OrderSpecification
194
+ end
195
+
196
+ class Descending < OrderSpecification
197
+ end
198
+
199
+ class HavingClause < Node
200
+
201
+ def initialize(search_condition)
202
+ @search_condition = search_condition
203
+ end
204
+
205
+ attr_reader :search_condition
206
+
207
+ end
208
+
209
+ class GroupByClause < Node
210
+
211
+ def initialize(columns)
212
+ @columns = Array(columns)
213
+ end
214
+
215
+ attr_reader :columns
216
+
217
+ end
218
+
219
+ class WhereClause < Node
220
+
221
+ def initialize(search_condition)
222
+ @search_condition = search_condition
223
+ end
224
+
225
+ attr_reader :search_condition
226
+
227
+ end
228
+
229
+ class On < Node
230
+
231
+ def initialize(search_condition)
232
+ @search_condition = search_condition
233
+ end
234
+
235
+ attr_reader :search_condition
236
+
237
+ end
238
+
239
+ class SearchCondition < Node
240
+
241
+ def initialize(left, right)
242
+ @left = left
243
+ @right = right
244
+ end
245
+
246
+ attr_reader :left
247
+ attr_reader :right
248
+
249
+ end
250
+
251
+ class Using < Node
252
+
253
+ def initialize(columns)
254
+ @columns = Array(columns)
255
+ end
256
+
257
+ attr_reader :columns
258
+
259
+ end
260
+
261
+ class Or < SearchCondition
262
+ end
263
+
264
+ class And < SearchCondition
265
+ end
266
+
267
+ class Exists < Node
268
+
269
+ def initialize(table_subquery)
270
+ @table_subquery = table_subquery
271
+ end
272
+
273
+ attr_reader :table_subquery
274
+
275
+ end
276
+
277
+ class ComparisonPredicate < Node
278
+
279
+ def initialize(left, right)
280
+ @left = left
281
+ @right = right
282
+ end
283
+
284
+ attr_reader :left
285
+ attr_reader :right
286
+
287
+ end
288
+
289
+ class Is < ComparisonPredicate
290
+ end
291
+
292
+ class Like < ComparisonPredicate
293
+ end
294
+
295
+ class In < ComparisonPredicate
296
+ end
297
+
298
+ class InValueList < Node
299
+
300
+ def initialize(values)
301
+ @values = Array(values)
302
+ end
303
+
304
+ attr_reader :values
305
+
306
+ end
307
+
308
+ class InColumnList < Node
309
+
310
+ def initialize(columns)
311
+ @columns = Array(columns)
312
+ end
313
+
314
+ attr_reader :columns
315
+
316
+ end
317
+
318
+ class Between < Node
319
+
320
+ def initialize(left, min, max)
321
+ @left = left
322
+ @min = min
323
+ @max = max
324
+ end
325
+
326
+ attr_reader :left
327
+ attr_reader :min
328
+ attr_reader :max
329
+
330
+ end
331
+
332
+ class GreaterOrEquals < ComparisonPredicate
333
+ end
334
+
335
+ class LessOrEquals < ComparisonPredicate
336
+ end
337
+
338
+ class Greater < ComparisonPredicate
339
+ end
340
+
341
+ class Less < ComparisonPredicate
342
+ end
343
+
344
+ class Equals < ComparisonPredicate
345
+ end
346
+
347
+ class Aggregate < Node
348
+
349
+ def initialize(column)
350
+ @column = column
351
+ end
352
+
353
+ attr_reader :column
354
+
355
+ end
356
+
357
+ class Sum < Aggregate
358
+ end
359
+
360
+ class Minimum < Aggregate
361
+ end
362
+
363
+ class Maximum < Aggregate
364
+ end
365
+
366
+ class Average < Aggregate
367
+ end
368
+
369
+ class Count < Aggregate
370
+ end
371
+
372
+ class JoinedTable < Node
373
+
374
+ def initialize(left, right)
375
+ @left = left
376
+ @right = right
377
+ end
378
+
379
+ attr_reader :left
380
+ attr_reader :right
381
+
382
+ end
383
+
384
+ class CrossJoin < JoinedTable
385
+ end
386
+
387
+ class QualifiedJoin < JoinedTable
388
+
389
+ def initialize(left, right, search_condition)
390
+ super(left, right)
391
+ @search_condition = search_condition
392
+ end
393
+
394
+ attr_reader :search_condition
395
+
396
+ end
397
+
398
+ class InnerJoin < QualifiedJoin
399
+ end
400
+
401
+ class LeftJoin < QualifiedJoin
402
+ end
403
+
404
+ class LeftOuterJoin < QualifiedJoin
405
+ end
406
+
407
+ class RightJoin < QualifiedJoin
408
+ end
409
+
410
+ class RightOuterJoin < QualifiedJoin
411
+ end
412
+
413
+ class FullJoin < QualifiedJoin
414
+ end
415
+
416
+ class FullOuterJoin < QualifiedJoin
417
+ end
418
+
419
+ class QualifiedColumn < Node
420
+
421
+ def initialize(table, column)
422
+ @table = table
423
+ @column = column
424
+ end
425
+
426
+ attr_reader :table
427
+ attr_reader :column
428
+
429
+ end
430
+
431
+ class Identifier < Node
432
+
433
+ def initialize(name)
434
+ @name = name
435
+ end
436
+
437
+ attr_reader :name
438
+
439
+ end
440
+
441
+ class Table < Identifier
442
+ end
443
+
444
+ class Column < Identifier
445
+ end
446
+
447
+ class UpdateColumn < Node
448
+
449
+ def initialize(column, value)
450
+ @column = column
451
+ @value = value
452
+ end
453
+
454
+ attr_reader :column
455
+ attr_reader :value
456
+
457
+ end
458
+
459
+ class As < Node
460
+
461
+ def initialize(value, column)
462
+ @value = value
463
+ @column = column
464
+ end
465
+
466
+ attr_reader :value
467
+ attr_reader :column
468
+
469
+ end
470
+
471
+ class Arithmetic < Node
472
+
473
+ def initialize(left, right)
474
+ @left = left
475
+ @right = right
476
+ end
477
+
478
+ attr_reader :left
479
+ attr_reader :right
480
+
481
+ end
482
+
483
+ class Multiply < Arithmetic
484
+ end
485
+
486
+ class Divide < Arithmetic
487
+ end
488
+
489
+ class Add < Arithmetic
490
+ end
491
+
492
+ class Subtract < Arithmetic
493
+ end
494
+
495
+ class Unary < Node
496
+
497
+ def initialize(value)
498
+ @value = value
499
+ end
500
+
501
+ attr_reader :value
502
+
503
+ end
504
+
505
+ class Not < Unary
506
+ end
507
+
508
+ class UnaryPlus < Unary
509
+ end
510
+
511
+ class UnaryMinus < Unary
512
+ end
513
+
514
+ class CurrentUser < Node
515
+ end
516
+
517
+ class True < Node
518
+ end
519
+
520
+ class False < Node
521
+ end
522
+
523
+ class Null < Node
524
+ end
525
+
526
+ class Literal < Node
527
+
528
+ def initialize(value)
529
+ @value = value
530
+ end
531
+
532
+ attr_reader :value
533
+
534
+ end
535
+
536
+ class DateTime < Literal
537
+ end
538
+
539
+ class Date < Literal
540
+ end
541
+
542
+ class String < Literal
543
+ end
544
+
545
+ class ApproximateFloat < Node
546
+
547
+ def initialize(mantissa, exponent)
548
+ @mantissa = mantissa
549
+ @exponent = exponent
550
+ end
551
+
552
+ attr_reader :mantissa
553
+ attr_reader :exponent
554
+
555
+ end
556
+
557
+ class Float < Literal
558
+ end
559
+
560
+ class Integer < Literal
561
+ end
562
+
563
+ end
564
+ end