sql-parser-tl 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,556 @@
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 Insert < Node
32
+
33
+ def initialize(table_reference, column_list, in_value_list)
34
+ @table_reference = table_reference
35
+ @column_list = column_list
36
+ @in_value_list = in_value_list
37
+ end
38
+
39
+ attr_reader :table_reference
40
+ attr_reader :column_list
41
+ attr_reader :in_value_list
42
+
43
+ end
44
+
45
+ class DirectSelect < Node
46
+
47
+ def initialize(query_expression, order_by = nil, limit_clause = nil)
48
+ @query_expression = query_expression
49
+ @order_by = order_by
50
+ @limit_clause = limit_clause
51
+ end
52
+
53
+ attr_reader :query_expression
54
+ attr_reader :order_by
55
+ attr_reader :limit_clause
56
+
57
+ end
58
+
59
+ class OrderBy < Node
60
+
61
+ def initialize(sort_specification)
62
+ @sort_specification = Array(sort_specification)
63
+ end
64
+
65
+ attr_reader :sort_specification
66
+
67
+ end
68
+
69
+ class Subquery < Node
70
+
71
+ def initialize(query_specification)
72
+ @query_specification = query_specification
73
+ end
74
+
75
+ attr_reader :query_specification
76
+
77
+ end
78
+
79
+ class Select < Node
80
+ def initialize(list, table_expression = nil)
81
+ @list = list
82
+ @table_expression = table_expression
83
+ end
84
+
85
+ attr_reader :list
86
+ attr_reader :table_expression
87
+
88
+ end
89
+
90
+ class SelectList < Node
91
+
92
+ def initialize(columns)
93
+ @columns = Array(columns)
94
+ end
95
+
96
+ attr_reader :columns
97
+
98
+ end
99
+
100
+ class Distinct < Node
101
+
102
+ def initialize(column)
103
+ @column = column
104
+ end
105
+
106
+ attr_reader :column
107
+
108
+ end
109
+
110
+ class All < Node
111
+ end
112
+
113
+ class TableExpression < Node
114
+
115
+ def initialize(from_clause, where_clause = nil, group_by_clause = nil, having_clause = nil)
116
+ @from_clause = from_clause
117
+ @where_clause = where_clause
118
+ @group_by_clause = group_by_clause
119
+ @having_clause = having_clause
120
+ end
121
+
122
+ attr_reader :from_clause
123
+ attr_reader :where_clause
124
+ attr_reader :group_by_clause
125
+ attr_reader :having_clause
126
+
127
+ end
128
+
129
+ class FromClause < Node
130
+
131
+ def initialize(tables)
132
+ @tables = Array(tables)
133
+ end
134
+
135
+ attr_reader :tables
136
+
137
+ end
138
+
139
+ class OrderClause < Node
140
+
141
+ def initialize(columns)
142
+ @columns = Array(columns)
143
+ end
144
+
145
+ attr_reader :columns
146
+
147
+ end
148
+
149
+ class OrderSpecification < Node
150
+
151
+ def initialize(column)
152
+ @column = column
153
+ end
154
+
155
+ attr_reader :column
156
+
157
+ end
158
+
159
+ class Ascending < OrderSpecification
160
+ end
161
+
162
+ class Descending < OrderSpecification
163
+ end
164
+
165
+ class HavingClause < Node
166
+
167
+ def initialize(search_condition)
168
+ @search_condition = search_condition
169
+ end
170
+
171
+ attr_reader :search_condition
172
+
173
+ end
174
+
175
+ class GroupByClause < Node
176
+
177
+ def initialize(columns)
178
+ @columns = Array(columns)
179
+ end
180
+
181
+ attr_reader :columns
182
+
183
+ end
184
+
185
+ class WhereClause < Node
186
+
187
+ def initialize(search_condition)
188
+ @search_condition = search_condition
189
+ end
190
+
191
+ attr_reader :search_condition
192
+
193
+ end
194
+
195
+ class LimitClause < Node
196
+
197
+ def initialize(limit, offset)
198
+ @limit = limit
199
+ @offset = offset
200
+ end
201
+
202
+ attr_reader :limit
203
+ attr_reader :offset
204
+ end
205
+
206
+ class On < Node
207
+
208
+ def initialize(search_condition)
209
+ @search_condition = search_condition
210
+ end
211
+
212
+ attr_reader :search_condition
213
+
214
+ end
215
+
216
+ class SearchCondition < Node
217
+
218
+ def initialize(left, right)
219
+ @left = left
220
+ @right = right
221
+ end
222
+
223
+ attr_reader :left
224
+ attr_reader :right
225
+
226
+ end
227
+
228
+ class Using < Node
229
+
230
+ def initialize(columns)
231
+ @columns = Array(columns)
232
+ end
233
+
234
+ attr_reader :columns
235
+
236
+ end
237
+
238
+ class Or < SearchCondition
239
+ end
240
+
241
+ class And < SearchCondition
242
+ end
243
+
244
+ class Exists < Node
245
+
246
+ def initialize(table_subquery)
247
+ @table_subquery = table_subquery
248
+ end
249
+
250
+ attr_reader :table_subquery
251
+
252
+ end
253
+
254
+ class ComparisonPredicate < Node
255
+
256
+ def initialize(left, right)
257
+ @left = left
258
+ @right = right
259
+ end
260
+
261
+ attr_reader :left
262
+ attr_reader :right
263
+
264
+ end
265
+
266
+ class Is < ComparisonPredicate
267
+ end
268
+
269
+ class Like < ComparisonPredicate
270
+ end
271
+
272
+ class In < ComparisonPredicate
273
+ end
274
+
275
+ class InValueList < Node
276
+
277
+ def initialize(values)
278
+ @values = values
279
+ end
280
+
281
+ attr_reader :values
282
+
283
+ end
284
+
285
+ class InColumnList < Node
286
+
287
+ def initialize(columns)
288
+ @columns = columns
289
+ end
290
+
291
+ attr_reader :columns
292
+
293
+ end
294
+
295
+ class Between < ComparisonPredicate
296
+ end
297
+
298
+ class BetweenRange < Node
299
+
300
+ def initialize(min, max)
301
+ @min = min
302
+ @max = max
303
+ end
304
+
305
+ attr_reader :min
306
+ attr_reader :max
307
+
308
+ end
309
+
310
+ class GreaterOrEquals < ComparisonPredicate
311
+ end
312
+
313
+ class LessOrEquals < ComparisonPredicate
314
+ end
315
+
316
+ class Greater < ComparisonPredicate
317
+ end
318
+
319
+ class Less < ComparisonPredicate
320
+ end
321
+
322
+ class Equals < ComparisonPredicate
323
+ end
324
+
325
+ class Aggregate < Node
326
+
327
+ def initialize(column)
328
+ @column = column
329
+ end
330
+
331
+ attr_reader :column
332
+
333
+ end
334
+
335
+ class Sum < Aggregate
336
+ end
337
+
338
+ class Minimum < Aggregate
339
+ end
340
+
341
+ class Maximum < Aggregate
342
+ end
343
+
344
+ class Average < Aggregate
345
+ end
346
+
347
+ class Count < Aggregate
348
+ end
349
+
350
+ class JoinedTable < Node
351
+
352
+ def initialize(left, right)
353
+ @left = left
354
+ @right = right
355
+ end
356
+
357
+ attr_reader :left
358
+ attr_reader :right
359
+
360
+ end
361
+
362
+ class CrossJoin < JoinedTable
363
+ end
364
+
365
+ class QualifiedJoin < JoinedTable
366
+
367
+ def initialize(left, right, search_condition)
368
+ super(left, right)
369
+ @search_condition = search_condition
370
+ end
371
+
372
+ attr_reader :search_condition
373
+
374
+ end
375
+
376
+ class InnerJoin < QualifiedJoin
377
+ end
378
+
379
+ class LeftJoin < QualifiedJoin
380
+ end
381
+
382
+ class LeftOuterJoin < QualifiedJoin
383
+ end
384
+
385
+ class RightJoin < QualifiedJoin
386
+ end
387
+
388
+ class RightOuterJoin < QualifiedJoin
389
+ end
390
+
391
+ class FullJoin < QualifiedJoin
392
+ end
393
+
394
+ class FullOuterJoin < QualifiedJoin
395
+ end
396
+
397
+ class QualifiedColumn < Node
398
+
399
+ def initialize(table, column)
400
+ @table = table
401
+ @column = column
402
+ end
403
+
404
+ attr_reader :table
405
+ attr_reader :column
406
+
407
+ end
408
+
409
+ class Identifier < Node
410
+
411
+ def initialize(name)
412
+ @name = name
413
+ end
414
+
415
+ attr_reader :name
416
+
417
+ end
418
+
419
+ class Table < Identifier
420
+ end
421
+
422
+ class Column < Identifier
423
+ end
424
+
425
+ class As < Node
426
+
427
+ def initialize(original, _alias)
428
+ @original = original
429
+ @alias = _alias
430
+ end
431
+
432
+ attr_reader :original
433
+ attr_reader :alias
434
+
435
+ end
436
+
437
+ class IndexHint < Node
438
+
439
+ def initialize(table, index)
440
+ @table = table
441
+ @index = index
442
+ end
443
+
444
+ attr_reader :table
445
+ attr_reader :index
446
+
447
+ end
448
+
449
+ class ForceIndex < IndexHint
450
+ end
451
+
452
+ class UseIndex < IndexHint
453
+ end
454
+
455
+ class IgnoreIndex < IndexHint
456
+ end
457
+
458
+ class Arithmetic < Node
459
+
460
+ def initialize(left, right)
461
+ @left = left
462
+ @right = right
463
+ end
464
+
465
+ attr_reader :left
466
+ attr_reader :right
467
+
468
+ end
469
+
470
+ class Multiply < Arithmetic
471
+ end
472
+
473
+ class Divide < Arithmetic
474
+ end
475
+
476
+ class Add < Arithmetic
477
+ end
478
+
479
+ class Subtract < Arithmetic
480
+ end
481
+
482
+ class Unary < Node
483
+
484
+ def initialize(value)
485
+ @value = value
486
+ end
487
+
488
+ attr_reader :value
489
+
490
+ end
491
+
492
+ class Not < Unary
493
+ end
494
+
495
+ class UnaryPlus < Unary
496
+ end
497
+
498
+ class UnaryMinus < Unary
499
+ end
500
+
501
+ class CurrentUser < Node
502
+ end
503
+
504
+ class True < Node
505
+ end
506
+
507
+ class False < Node
508
+ end
509
+
510
+ class Null < Node
511
+ end
512
+
513
+ class Literal < Node
514
+
515
+ def initialize(value)
516
+ @value = value
517
+ end
518
+
519
+ attr_reader :value
520
+
521
+ end
522
+
523
+ class DateTime < Literal
524
+ end
525
+
526
+ class Date < Literal
527
+ end
528
+
529
+ class String < Literal
530
+
531
+ def +(other)
532
+ self.class.new(@value + other.value)
533
+ end
534
+
535
+ end
536
+
537
+ class ApproximateFloat < Node
538
+
539
+ def initialize(mantissa, exponent)
540
+ @mantissa = mantissa
541
+ @exponent = exponent
542
+ end
543
+
544
+ attr_reader :mantissa
545
+ attr_reader :exponent
546
+
547
+ end
548
+
549
+ class Float < Literal
550
+ end
551
+
552
+ class Integer < Literal
553
+ end
554
+
555
+ end
556
+ end
@@ -0,0 +1,5 @@
1
+ module SQLParser
2
+
3
+ VERSION = '0.0.3'
4
+
5
+ end
data/lib/sql-parser.rb ADDED
@@ -0,0 +1,13 @@
1
+ module SQLParser
2
+
3
+ require 'strscan'
4
+ require 'date'
5
+
6
+ require 'racc/parser'
7
+
8
+ require_relative 'sql-parser/version'
9
+ require_relative 'sql-parser/statement'
10
+ require_relative 'sql-parser/sql_visitor'
11
+ require_relative 'sql-parser/parser.racc.rb'
12
+
13
+ end
metadata ADDED
@@ -0,0 +1,119 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sql-parser-tl
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Tony Liu
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-11-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: racc
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.4.12
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.4.12
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rexical
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.5
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.5
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: " A Racc-based Ruby parser for SQL statements; forked from https://github.com/cryodex/sql-parser "
84
+ email: tony.liu@servicenow.com
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files: []
88
+ files:
89
+ - lib/sql-parser.rb
90
+ - lib/sql-parser/parser.racc
91
+ - lib/sql-parser/parser.racc.rb
92
+ - lib/sql-parser/parser.rex
93
+ - lib/sql-parser/parser.rex.rb
94
+ - lib/sql-parser/sql_visitor.rb
95
+ - lib/sql-parser/statement.rb
96
+ - lib/sql-parser/version.rb
97
+ homepage: https://gitlab.servicenow.net/SWAT/dev/sql-parser
98
+ licenses: []
99
+ metadata: {}
100
+ post_install_message:
101
+ rdoc_options: []
102
+ require_paths:
103
+ - lib
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ requirements: []
115
+ rubygems_version: 3.3.22
116
+ signing_key:
117
+ specification_version: 4
118
+ summary: Ruby library for parsing SQL statements
119
+ test_files: []