sqliterate 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +21 -0
- data/README.md +0 -0
- data/lib/sqliterate.rb +18 -0
- data/lib/sqliterate/grammar/command.treetop +13 -0
- data/lib/sqliterate/grammar/comment.treetop +15 -0
- data/lib/sqliterate/grammar/expression.treetop +239 -0
- data/lib/sqliterate/grammar/identifier.treetop +45 -0
- data/lib/sqliterate/grammar/keywords.treetop +255 -0
- data/lib/sqliterate/grammar/literals.treetop +40 -0
- data/lib/sqliterate/grammar/operator.treetop +65 -0
- data/lib/sqliterate/grammar/query.treetop +25 -0
- data/lib/sqliterate/grammar/space.treetop +17 -0
- data/lib/sqliterate/grammar/string.treetop +47 -0
- data/lib/sqliterate/node/control.rb +3 -0
- data/lib/sqliterate/node/control/expression.rb +192 -0
- data/lib/sqliterate/node/control/query.rb +39 -0
- data/lib/sqliterate/node/evaluate.rb +5 -0
- data/lib/sqliterate/node/evaluate/expression.rb +124 -0
- data/lib/sqliterate/node/evaluate/literals.rb +46 -0
- data/lib/sqliterate/node/evaluate/operator.rb +51 -0
- data/lib/sqliterate/node/evaluate/string.rb +42 -0
- data/lib/sqliterate/node/identify.rb +3 -0
- data/lib/sqliterate/node/identify/identifier.rb +40 -0
- data/lib/sqliterate/node/identify/keywords.rb +9 -0
- data/lib/sqliterate/version.rb +3 -0
- metadata +140 -0
@@ -0,0 +1,124 @@
|
|
1
|
+
module SQLiterate
|
2
|
+
module Node
|
3
|
+
module GenExpression
|
4
|
+
def value
|
5
|
+
h.elements.map { |e| e.gen_operator.operator } +
|
6
|
+
[gen_value.value] +
|
7
|
+
r.elements.flat_map do |e|
|
8
|
+
e.o.elements.map { |p| p.gen_operator.operator } + [e.gen_value.value]
|
9
|
+
end +
|
10
|
+
t.elements.map { |e| e.gen_operator.operator }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module GenValue
|
15
|
+
module Literal
|
16
|
+
end
|
17
|
+
module Function
|
18
|
+
end
|
19
|
+
module Subscript
|
20
|
+
def value
|
21
|
+
[:s, field_selection.value] + r.elements.map do |e|
|
22
|
+
e.range_expression.value
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
module Field
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
module FunctionCall
|
31
|
+
def value
|
32
|
+
[function_name.name] + function_params.value
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
module TypeCast
|
37
|
+
def value
|
38
|
+
[type_name.name, scalar_expression.value]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
module VoidExpression
|
43
|
+
def value
|
44
|
+
[]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
module AggregateExpression
|
49
|
+
def value
|
50
|
+
[:a, expressions_list.value, order_by_clause.value]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
module OrderByClause
|
55
|
+
def value
|
56
|
+
respond_to?(:expressions_list) ? expressions_list.value : nil
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
module ExpressionsList
|
61
|
+
def value
|
62
|
+
[gen_expression.value] + r.elements.map do |e|
|
63
|
+
e.gen_expression.value
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
module NamedExpressionsList
|
69
|
+
def value
|
70
|
+
[named_expression.value] + r.elements.map do |e|
|
71
|
+
e.named_expression.value
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
module NamedExpression
|
77
|
+
def value
|
78
|
+
if respond_to?(:column_name)
|
79
|
+
[column_name.name, gen_expression.value]
|
80
|
+
else
|
81
|
+
gen_expression.value
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
module AllColumns
|
87
|
+
def value
|
88
|
+
[:all]
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
module RangeExpression
|
93
|
+
def value
|
94
|
+
[:r, b.value, e.value]
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
module FieldSelection
|
99
|
+
def value
|
100
|
+
[:f, row_value.value, field_identifier.name]
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
module RowValue
|
105
|
+
module Query
|
106
|
+
def value
|
107
|
+
query_expression.text_value
|
108
|
+
end
|
109
|
+
end
|
110
|
+
module Expression
|
111
|
+
def value
|
112
|
+
gen_expression.value
|
113
|
+
end
|
114
|
+
end
|
115
|
+
module Positional
|
116
|
+
end
|
117
|
+
module Identifier
|
118
|
+
def value
|
119
|
+
name
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module SQLiterate
|
2
|
+
module Node
|
3
|
+
module PositionalParam
|
4
|
+
def value
|
5
|
+
[:p, digits.value]
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
module NumericLiteral
|
10
|
+
def value
|
11
|
+
decimal_literal.value * (10 ** exponent_literal.value)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module DecimalLiteral
|
16
|
+
def value
|
17
|
+
text_value.to_f
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module ExponentLiteral
|
22
|
+
def value
|
23
|
+
digits.value * ( s.text_value == '-' ? -1 : 1 )
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module Digits
|
28
|
+
def value
|
29
|
+
text_value.to_i
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
module Boolean
|
34
|
+
module True
|
35
|
+
def value
|
36
|
+
true
|
37
|
+
end
|
38
|
+
end
|
39
|
+
module False
|
40
|
+
def value
|
41
|
+
false
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module SQLiterate
|
2
|
+
module Node
|
3
|
+
module KeywordOperator
|
4
|
+
def operator
|
5
|
+
text_value.to_sym
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
module OperatorChar
|
10
|
+
def char
|
11
|
+
c.text_value
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module SingleCharOperator
|
16
|
+
def operator
|
17
|
+
c.char.to_sym
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module SignEndingOperator
|
22
|
+
def operator
|
23
|
+
( unless b.empty?
|
24
|
+
b.r.elements.map { |e| e.basic_op_char.char } + [b.basic_op_char.char]
|
25
|
+
else
|
26
|
+
[]
|
27
|
+
end + [special_op_char.char] + \
|
28
|
+
unless o.empty?
|
29
|
+
o.r.elements.map { |e| e.op_char.char } + [o.op_char.char]
|
30
|
+
else
|
31
|
+
[]
|
32
|
+
end + [sign_op_char.char]
|
33
|
+
).join.to_sym
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
module NonsignEndingOperator
|
38
|
+
def operator
|
39
|
+
( r.elements.map { |e| e.op_char.char } +
|
40
|
+
[op_char.char] + [nonsign_op_char.char]
|
41
|
+
).join.to_sym
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
module AmbiguousOperator
|
46
|
+
def operator
|
47
|
+
( r.elements.map { |e| e.op_char.char } + [op_char.char] ).join.to_sym
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module SQLiterate
|
2
|
+
module Node
|
3
|
+
module MultiString
|
4
|
+
def value
|
5
|
+
([single_string.value] + \
|
6
|
+
t.elements.map do |e|
|
7
|
+
e.single_string.value
|
8
|
+
end
|
9
|
+
).join
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module Character
|
14
|
+
module Quote
|
15
|
+
def value
|
16
|
+
"'"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
module Text
|
20
|
+
def value
|
21
|
+
text_value
|
22
|
+
end
|
23
|
+
end
|
24
|
+
module ExtEscape
|
25
|
+
def value
|
26
|
+
c.value
|
27
|
+
end
|
28
|
+
end
|
29
|
+
module NotImplemented
|
30
|
+
def value
|
31
|
+
""
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
module StringConstant
|
37
|
+
def value
|
38
|
+
c.elements.map(&:value).join
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module SQLiterate
|
2
|
+
module Node
|
3
|
+
module LiteralIdentifier
|
4
|
+
def name
|
5
|
+
text_value
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
module QuotedIdentifier
|
10
|
+
def name
|
11
|
+
c.elements.map(&:char).join
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module IdentifierChar
|
16
|
+
module Quote
|
17
|
+
def char
|
18
|
+
'"'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
module Text
|
22
|
+
def char
|
23
|
+
text_value
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
module QualifiedName
|
29
|
+
def name
|
30
|
+
[ schema_name.name, identifier.name ].join '.'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
module AllFields
|
35
|
+
def name
|
36
|
+
:all
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
metadata
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sqliterate
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Emmanuel Bastien
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2015-01-02 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rspec
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: polyglot
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0.3'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.3'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: treetop
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.5'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '1.5'
|
78
|
+
description: SQLiterate is a SQL parser.
|
79
|
+
email: os@ebastien.name
|
80
|
+
executables: []
|
81
|
+
extensions: []
|
82
|
+
extra_rdoc_files: []
|
83
|
+
files:
|
84
|
+
- lib/sqliterate/grammar/command.treetop
|
85
|
+
- lib/sqliterate/grammar/comment.treetop
|
86
|
+
- lib/sqliterate/grammar/expression.treetop
|
87
|
+
- lib/sqliterate/grammar/identifier.treetop
|
88
|
+
- lib/sqliterate/grammar/keywords.treetop
|
89
|
+
- lib/sqliterate/grammar/literals.treetop
|
90
|
+
- lib/sqliterate/grammar/operator.treetop
|
91
|
+
- lib/sqliterate/grammar/query.treetop
|
92
|
+
- lib/sqliterate/grammar/space.treetop
|
93
|
+
- lib/sqliterate/grammar/string.treetop
|
94
|
+
- lib/sqliterate/node/control/expression.rb
|
95
|
+
- lib/sqliterate/node/control/query.rb
|
96
|
+
- lib/sqliterate/node/control.rb
|
97
|
+
- lib/sqliterate/node/evaluate/expression.rb
|
98
|
+
- lib/sqliterate/node/evaluate/literals.rb
|
99
|
+
- lib/sqliterate/node/evaluate/operator.rb
|
100
|
+
- lib/sqliterate/node/evaluate/string.rb
|
101
|
+
- lib/sqliterate/node/evaluate.rb
|
102
|
+
- lib/sqliterate/node/identify/identifier.rb
|
103
|
+
- lib/sqliterate/node/identify/keywords.rb
|
104
|
+
- lib/sqliterate/node/identify.rb
|
105
|
+
- lib/sqliterate/version.rb
|
106
|
+
- lib/sqliterate.rb
|
107
|
+
- LICENSE
|
108
|
+
- README.md
|
109
|
+
homepage: http://rubygems.org/gems/sqliterate
|
110
|
+
licenses:
|
111
|
+
- MIT
|
112
|
+
post_install_message:
|
113
|
+
rdoc_options: []
|
114
|
+
require_paths:
|
115
|
+
- lib
|
116
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
118
|
+
requirements:
|
119
|
+
- - ! '>='
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
122
|
+
segments:
|
123
|
+
- 0
|
124
|
+
hash: 3801678425422637441
|
125
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
|
+
none: false
|
127
|
+
requirements:
|
128
|
+
- - ! '>='
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
segments:
|
132
|
+
- 0
|
133
|
+
hash: 3801678425422637441
|
134
|
+
requirements: []
|
135
|
+
rubyforge_project:
|
136
|
+
rubygems_version: 1.8.23
|
137
|
+
signing_key:
|
138
|
+
specification_version: 3
|
139
|
+
summary: A SQL parser.
|
140
|
+
test_files: []
|