sql-parser2 0.0.3

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