sqliterate 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Emmanuel Bastien
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
File without changes
data/lib/sqliterate.rb ADDED
@@ -0,0 +1,18 @@
1
+ # coding: utf-8
2
+ require 'polyglot'
3
+ require 'treetop'
4
+
5
+ require 'sqliterate/node/identify'
6
+ require 'sqliterate/node/evaluate'
7
+ require 'sqliterate/node/control'
8
+
9
+ require 'sqliterate/grammar/comment'
10
+ require 'sqliterate/grammar/space'
11
+ require 'sqliterate/grammar/keywords'
12
+ require 'sqliterate/grammar/identifier'
13
+ require 'sqliterate/grammar/string'
14
+ require 'sqliterate/grammar/literals'
15
+ require 'sqliterate/grammar/operator'
16
+ require 'sqliterate/grammar/expression'
17
+ require 'sqliterate/grammar/query'
18
+ require 'sqliterate/grammar/command'
@@ -0,0 +1,13 @@
1
+ module SQLiterate
2
+ grammar Command
3
+ include Query
4
+
5
+ rule commands
6
+ command r:( space ';' space command )*
7
+ end
8
+
9
+ rule command
10
+ query / space
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ module SQLiterate
2
+ grammar Comment
3
+ rule comment
4
+ c_comment / line_comment
5
+ end
6
+
7
+ rule line_comment
8
+ '--' [^\n]* "\n"?
9
+ end
10
+
11
+ rule c_comment
12
+ '/*' ( !'*/' (c_comment / . / "\n") )* '*/'
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,239 @@
1
+ module SQLiterate
2
+ grammar Expression
3
+ include Space
4
+ include Identifier
5
+ include Keywords
6
+ include Literals
7
+ include Operator
8
+
9
+ rule scalar_expression
10
+ gen_expression
11
+ end
12
+
13
+ rule gen_expression
14
+ h:( gen_operator space )*
15
+ gen_value
16
+ r:( o:( space gen_operator )+ space gen_value )*
17
+ t:( space gen_operator )*
18
+ <Node::GenExpression>
19
+ end
20
+
21
+ rule gen_value
22
+ literal_value <Node::GenValue::Literal>
23
+ /
24
+ function_call <Node::GenValue::Function>
25
+ /
26
+ field_selection r:( space '['
27
+ space range_expression space
28
+ ']' )+ <Node::GenValue::Subscript>
29
+ /
30
+ field_selection <Node::GenValue::Field>
31
+ end
32
+
33
+ rule function_call
34
+ type_cast
35
+ /
36
+ function_name space '('
37
+ space function_params space
38
+ ')' <Node::FunctionCall>
39
+ end
40
+
41
+ rule type_cast
42
+ cast_kw space '('
43
+ space scalar_expression space as_kw space type_name space
44
+ ')' <Node::TypeCast>
45
+ end
46
+
47
+ rule function_name
48
+ qualified_name / identifier
49
+ end
50
+
51
+ rule function_params
52
+ aggregate_expression
53
+ /
54
+ expressions_list
55
+ /
56
+ void_expression
57
+ end
58
+
59
+ rule void_expression
60
+ space <Node::VoidExpression>
61
+ end
62
+
63
+ rule aggregate_expression
64
+ all_columns <Node::AllColumns>
65
+ /
66
+ (aggregate_specifier space)? expressions_list space order_by_clause
67
+ <Node::AggregateExpression>
68
+ end
69
+
70
+ rule aggregate_specifier
71
+ all_kw / distinct_kw
72
+ end
73
+
74
+ rule ordering_specifier
75
+ ( asc_kw / desc_kw )?
76
+ ( required_space nulls_kw required_space ( first_kw / last_kw ) )?
77
+ end
78
+
79
+ rule order_by_clause
80
+ ( order_by_kw space expressions_list space ordering_specifier / space )
81
+ <Node::OrderByClause>
82
+ end
83
+
84
+ rule expressions_list
85
+ gen_expression r:( space ',' space gen_expression)* <Node::ExpressionsList>
86
+ end
87
+
88
+ rule range_expression
89
+ b:scalar_expression space ':' space e:scalar_expression <Node::RangeExpression>
90
+ /
91
+ scalar_expression
92
+ end
93
+
94
+ rule field_selection
95
+ row_value space '.' space field_identifier <Node::FieldSelection>
96
+ /
97
+ row_value
98
+ end
99
+
100
+ rule field_identifier
101
+ all_fields / identifier
102
+ end
103
+
104
+ rule row_value
105
+ '(' query_expression ')' <Node::RowValue::Query>
106
+ /
107
+ '(' space gen_expression space ')' <Node::RowValue::Expression>
108
+ /
109
+ positional_param <Node::RowValue::Positional>
110
+ /
111
+ identifier <Node::RowValue::Identifier>
112
+ end
113
+
114
+ rule query_expression
115
+ query_value r:( space set_operation space query_value )*
116
+ <Node::QueryExpression>
117
+ end
118
+
119
+ rule set_operation
120
+ ( union_kw / intersect_kw / except_kw ) ( required_space all_kw )?
121
+ end
122
+
123
+ rule query_value
124
+ '(' space query_expression space ')' <Node::QueryValue::Expression>
125
+ /
126
+ select_query <Node::QueryValue::Select>
127
+ end
128
+
129
+ rule select_query
130
+ select_kw required_space
131
+ distinct_clause space
132
+ select_list space
133
+ table_expression space
134
+ order_by_clause
135
+ <Node::SelectQuery>
136
+ end
137
+
138
+ rule distinct_clause
139
+ aggregate_specifier (
140
+ required_space on_kw required_space '(' space expressions_list space ')'
141
+ )?
142
+ /
143
+ space
144
+ end
145
+
146
+ rule select_list
147
+ all_columns / named_expressions_list
148
+ end
149
+
150
+ rule named_expressions_list
151
+ named_expression r:( space ',' space named_expression)*
152
+ <Node::NamedExpressionsList>
153
+ end
154
+
155
+ rule named_expression
156
+ gen_expression ( space (as_kw space)? column_name )? <Node::NamedExpression>
157
+ end
158
+
159
+ rule table_reference
160
+ (table_spec space (as_kw space)? table_name space column_list?
161
+ /
162
+ qualified_name) <Node::TableReference>
163
+ end
164
+
165
+ rule all_columns
166
+ '*' <Node::AllColumns>
167
+ end
168
+
169
+ rule table_expression
170
+ from_clause space where_clause space group_by_clause <Node::TableExpression>
171
+ end
172
+
173
+ rule from_clause
174
+ (from_kw required_space table_references / space) <Node::FromClause>
175
+ end
176
+
177
+ rule where_clause
178
+ where_kw required_space scalar_expression / space
179
+ end
180
+
181
+ rule group_by_clause
182
+ group_by_kw required_space expressions_list space having_clause / space
183
+ end
184
+
185
+ rule having_clause
186
+ having_kw required_space scalar_expression / space
187
+ end
188
+
189
+ rule table_references
190
+ table_joins r:( space ',' space table_joins )* <Node::TableReferences>
191
+ end
192
+
193
+ rule table_joins
194
+ table_reference r:( space joined_table )* <Node::TableJoins>
195
+ end
196
+
197
+ rule table_reference
198
+ (table_spec space (as_kw space)? table_name space column_list?
199
+ /
200
+ qualified_name) <Node::TableReference>
201
+ end
202
+
203
+ rule table_spec
204
+ '(' space query_expression space ')' <Node::TableSpec::Query>
205
+ /
206
+ '(' space table_joins space ')' <Node::TableSpec::Joins>
207
+ /
208
+ qualified_name <Node::TableSpec::Table>
209
+ end
210
+
211
+ rule joined_table
212
+ natural_join / predicate_join / columns_join
213
+ end
214
+
215
+ rule natural_join
216
+ natural_kw space join_type space join_kw space table_reference <Node::Join>
217
+ end
218
+
219
+ rule predicate_join
220
+ join_type space join_kw space table_reference space on_kw space scalar_expression <Node::Join>
221
+ end
222
+
223
+ rule columns_join
224
+ join_type space join_kw space table_reference space using_kw space column_list <Node::Join>
225
+ end
226
+
227
+ rule join_type
228
+ (left_kw / right_kw / full_kw) (space outer_kw)?
229
+ /
230
+ inner_kw
231
+ /
232
+ space
233
+ end
234
+
235
+ rule column_list
236
+ '(' column_name r:( space ',' space column_name)* ')'
237
+ end
238
+ end
239
+ end
@@ -0,0 +1,45 @@
1
+ module SQLiterate
2
+ grammar Identifier
3
+ include Keywords
4
+
5
+ rule identifier
6
+ literal_identifier / quoted_identifier
7
+ end
8
+
9
+ rule literal_identifier
10
+ !keyword [\p{Alpha}_] [\p{Alnum}_$]* <Node::LiteralIdentifier>
11
+ end
12
+
13
+ rule quoted_identifier
14
+ '"' c:( identifier_char )* '"' <Node::QuotedIdentifier>
15
+ end
16
+
17
+ rule identifier_char
18
+ '""' <Node::IdentifierChar::Quote>
19
+ /
20
+ [^"] <Node::IdentifierChar::Text>
21
+ end
22
+
23
+ rule qualified_name
24
+ schema_name '.' identifier <Node::QualifiedName>
25
+ /
26
+ table_name
27
+ end
28
+
29
+ rule schema_name
30
+ identifier
31
+ end
32
+
33
+ rule table_name
34
+ identifier
35
+ end
36
+
37
+ rule column_name
38
+ identifier
39
+ end
40
+
41
+ rule all_fields
42
+ '*' <Node::AllFields>
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,255 @@
1
+ module SQLiterate
2
+ grammar Keywords
3
+ rule keyword
4
+ with_kw / as_kw / select_kw / from_kw / join_kw / inner_kw / outer_kw /
5
+ left_kw / right_kw / full_kw / natural_kw / on_kw / using_kw /
6
+ where_kw / not_kw / and_kw / or_kw / true_kw / false_kw /
7
+ is_kw / isnull_kw / notnull_kw / in_kw / between_kw / overlaps_kw /
8
+ like_kw / ilike_kw / similar_kw / null_kw / order_kw / by_kw /
9
+ desc_kw / asc_kw / all_kw / distinct_kw / cast_kw /
10
+ bigint_kw / boolean_kw / double_kw / float_kw / int_kw / real_kw /
11
+ smallint_kw / string_kw / timestamp_kw / tinyint_kw / integer_kw /
12
+ group_kw / having_kw / nulls_kw / first_kw / last_kw / union_kw /
13
+ intersect_kw / except_kw
14
+ end
15
+
16
+ rule type_name
17
+ bigint_kw / boolean_kw / double_kw / float_kw /
18
+ int_kw / real_kw / smallint_kw / string_kw /
19
+ timestamp_kw / tinyint_kw / integer_kw
20
+ <Node::TypeName>
21
+ end
22
+
23
+ rule kw_sep
24
+ ![\p{Alpha}_]
25
+ end
26
+
27
+ rule with_kw
28
+ [wW] [iI] [tT] [hH] kw_sep
29
+ end
30
+
31
+ rule as_kw
32
+ [aA] [sS] kw_sep
33
+ end
34
+
35
+ rule select_kw
36
+ [sS] [eE] [lL] [eE] [cC] [tT] kw_sep
37
+ end
38
+
39
+ rule from_kw
40
+ [fF] [rR] [oO] [mM] kw_sep
41
+ end
42
+
43
+ rule join_kw
44
+ [jJ] [oO] [iI] [nN] kw_sep
45
+ end
46
+
47
+ rule inner_kw
48
+ [iI] [nN] [nN] [eE] [rR] kw_sep
49
+ end
50
+
51
+ rule outer_kw
52
+ [oO] [uU] [tT] [eE] [rR] kw_sep
53
+ end
54
+
55
+ rule left_kw
56
+ [lL] [eE] [fF] [tT] kw_sep
57
+ end
58
+
59
+ rule right_kw
60
+ [rR] [iI] [gG] [hH] [tT] kw_sep
61
+ end
62
+
63
+ rule full_kw
64
+ [fF] [uU] [lL] [lL] kw_sep
65
+ end
66
+
67
+ rule natural_kw
68
+ [nN] [aA] [tT] [uU] [rR] [aA] [lL] kw_sep
69
+ end
70
+
71
+ rule on_kw
72
+ [oO] [nN] kw_sep
73
+ end
74
+
75
+ rule using_kw
76
+ [uU] [sS] [iI] [nN] [gG] kw_sep
77
+ end
78
+
79
+ rule where_kw
80
+ [wW] [hH] [eE] [rR] [eE] kw_sep
81
+ end
82
+
83
+ rule not_kw
84
+ [nN] [oO] [tT] kw_sep
85
+ end
86
+
87
+ rule and_kw
88
+ [aA] [nN] [dD] kw_sep
89
+ end
90
+
91
+ rule or_kw
92
+ [oO] [rR] kw_sep
93
+ end
94
+
95
+ rule true_kw
96
+ [tT] [rR] [uU] [eE] kw_sep
97
+ end
98
+
99
+ rule false_kw
100
+ [fF] [aA] [lL] [sS] [eE] kw_sep
101
+ end
102
+
103
+ rule is_kw
104
+ [iI] [sS] kw_sep
105
+ end
106
+
107
+ rule isnull_kw
108
+ [iI] [sS] [nN] [uU] [lL] [lL] kw_sep
109
+ end
110
+
111
+ rule notnull_kw
112
+ [nN] [oO] [tT] [nN] [uU] [lL] [lL] kw_sep
113
+ end
114
+
115
+ rule in_kw
116
+ [iI] [nN] kw_sep
117
+ end
118
+
119
+ rule between_kw
120
+ [bB] [eE] [tT] [wW] [eE] [eE] [nN] kw_sep
121
+ end
122
+
123
+ rule overlaps_kw
124
+ [oO] [vV] [eE] [rR] [lL] [aA] [pP] [sS] kw_sep
125
+ end
126
+
127
+ rule like_kw
128
+ [lL] [iI] [kK] [eE] kw_sep
129
+ end
130
+
131
+ rule ilike_kw
132
+ [iI] [lL] [iI] [kK] [eE] kw_sep
133
+ end
134
+
135
+ rule similar_kw
136
+ [sS] [iI] [mM] [iI] [lL] [aA] [rR] kw_sep
137
+ end
138
+
139
+ rule null_kw
140
+ [nN] [uU] [lL] [lL] kw_sep
141
+ end
142
+
143
+ rule order_kw
144
+ [oO] [rR] [dD] [eE] [rR] kw_sep
145
+ end
146
+
147
+ rule by_kw
148
+ [bB] [yY] kw_sep
149
+ end
150
+
151
+ rule order_by_kw
152
+ order_kw required_space by_kw
153
+ end
154
+
155
+ rule desc_kw
156
+ [dD] [eE] [sS] [cC] kw_sep
157
+ end
158
+
159
+ rule asc_kw
160
+ [aA] [sS] [cC] kw_sep
161
+ end
162
+
163
+ rule all_kw
164
+ [aA] [lL] [lL] kw_sep
165
+ end
166
+
167
+ rule distinct_kw
168
+ [dD] [iI] [sS] [tT] [iI] [nN] [cC] [tT] kw_sep
169
+ end
170
+
171
+ rule cast_kw
172
+ [cC] [aA] [sS] [tT] kw_sep
173
+ end
174
+
175
+ rule bigint_kw
176
+ [bB] [iI] [gG] [iI] [nN] [tT] kw_sep
177
+ end
178
+
179
+ rule boolean_kw
180
+ [bB] [oO] [oO] [lL] [eE] [aA] [nN] kw_sep
181
+ end
182
+
183
+ rule double_kw
184
+ [dD] [oO] [uU] [bB] [lL] [eE] kw_sep
185
+ end
186
+
187
+ rule real_kw
188
+ [rR] [eE] [aA] [lL] kw_sep
189
+ end
190
+
191
+ rule float_kw
192
+ [fF] [lL] [oO] [aA] [tT] kw_sep
193
+ end
194
+
195
+ rule int_kw
196
+ [iI] [nN] [tT] kw_sep
197
+ end
198
+
199
+ rule integer_kw
200
+ [iI] [nN] [tT] [eE] [gG] [eE] [rR] kw_sep
201
+ end
202
+
203
+ rule smallint_kw
204
+ [sS] [mM] [aA] [lL] [lL] [iI] [nN] [tT] kw_sep
205
+ end
206
+
207
+ rule string_kw
208
+ [sS] [tT] [rR] [iI] [nN] [gG] kw_sep
209
+ end
210
+
211
+ rule timestamp_kw
212
+ [tT] [iI] [mM] [eE] [sS] [tT] [aA] [mM] [pP] kw_sep
213
+ end
214
+
215
+ rule tinyint_kw
216
+ [tT] [iI] [nN] [yY] [iI] [nN] [tT] kw_sep
217
+ end
218
+
219
+ rule group_kw
220
+ [gG] [rR] [oO] [uU] [pP] kw_sep
221
+ end
222
+
223
+ rule group_by_kw
224
+ group_kw required_space by_kw
225
+ end
226
+
227
+ rule having_kw
228
+ [hH] [aA] [vV] [iI] [nN] [gG] kw_sep
229
+ end
230
+
231
+ rule nulls_kw
232
+ [nN] [uU] [lL] [lL] [sS] kw_sep
233
+ end
234
+
235
+ rule first_kw
236
+ [fF] [iI] [rR] [sS] [tT] kw_sep
237
+ end
238
+
239
+ rule last_kw
240
+ [lL] [aA] [sS] [tT] kw_sep
241
+ end
242
+
243
+ rule union_kw
244
+ [uU] [nN] [iI] [oO] [nN] kw_sep
245
+ end
246
+
247
+ rule intersect_kw
248
+ [iI] [nN] [tT] [eE] [rR] [sS] [eE] [cC] [tT] kw_sep
249
+ end
250
+
251
+ rule except_kw
252
+ [eE] [xX] [cC] [eE] [pP] [tT] kw_sep
253
+ end
254
+ end
255
+ end