oracle-sql-parser 0.8.1 → 0.9.0
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.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/HISTORY.md +6 -0
- data/Rakefile +3 -11
- data/lib/oracle-sql-parser/ast.rb +5 -1
- data/lib/oracle-sql-parser/ast/cursor_expression.rb +13 -0
- data/lib/oracle-sql-parser/ast/datetime_expression.rb +8 -0
- data/lib/oracle-sql-parser/ast/interval_expression.rb +27 -0
- data/lib/oracle-sql-parser/ast/{simple_comparision_condition.rb → simple_comparison_condition.rb} +1 -1
- data/lib/oracle-sql-parser/ast/timezone_clause.rb +8 -0
- data/lib/oracle-sql-parser/grammar.rb +24 -0
- data/lib/oracle-sql-parser/grammar/condition.treetop +12 -289
- data/lib/oracle-sql-parser/grammar/condition/between.treetop +20 -0
- data/lib/oracle-sql-parser/grammar/condition/comparison.treetop +32 -0
- data/lib/oracle-sql-parser/grammar/condition/compound.treetop +11 -0
- data/lib/oracle-sql-parser/grammar/condition/exists.treetop +13 -0
- data/lib/oracle-sql-parser/grammar/condition/floating_point.treetop +20 -0
- data/lib/oracle-sql-parser/grammar/condition/in.treetop +19 -0
- data/lib/oracle-sql-parser/grammar/condition/is_of_type.treetop +56 -0
- data/lib/oracle-sql-parser/grammar/condition/multiset.treetop +85 -0
- data/lib/oracle-sql-parser/grammar/condition/null.treetop +17 -0
- data/lib/oracle-sql-parser/grammar/condition/pattern_matching.treetop +47 -0
- data/lib/oracle-sql-parser/grammar/delete.treetop +2 -10
- data/lib/oracle-sql-parser/grammar/expression.treetop +39 -214
- data/lib/oracle-sql-parser/grammar/expression/case.treetop +77 -0
- data/lib/oracle-sql-parser/grammar/expression/compound.treetop +22 -0
- data/lib/oracle-sql-parser/grammar/expression/cursor.treetop +15 -0
- data/lib/oracle-sql-parser/grammar/expression/datetime.treetop +36 -0
- data/lib/oracle-sql-parser/grammar/expression/function.treetop +47 -0
- data/lib/oracle-sql-parser/grammar/expression/interval.treetop +47 -0
- data/lib/oracle-sql-parser/grammar/expression/simple.treetop +29 -0
- data/lib/oracle-sql-parser/grammar/grammar.treetop +1 -1
- data/lib/oracle-sql-parser/grammar/reserved_word_generator.rb +14 -2
- data/lib/oracle-sql-parser/grammar/select.treetop +11 -513
- data/lib/oracle-sql-parser/grammar/select/for_update.treetop +48 -0
- data/lib/oracle-sql-parser/grammar/select/group.treetop +62 -0
- data/lib/oracle-sql-parser/grammar/select/join.treetop +165 -0
- data/lib/oracle-sql-parser/grammar/select/order.treetop +43 -0
- data/lib/oracle-sql-parser/grammar/select/query_block.treetop +116 -0
- data/lib/oracle-sql-parser/grammar/select/union.treetop +48 -0
- data/lib/oracle-sql-parser/grammar/update.treetop +1 -1
- data/lib/oracle-sql-parser/version.rb +1 -1
- data/oracle-sql-parser.gemspec +1 -0
- metadata +55 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 06f11ebfa70f31aa92b69ef030d96237fc3260da
|
4
|
+
data.tar.gz: cbed0b80bfeb24be973d852c87746a982a7b5c6a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 686cb870a07ec984d265515e38a65fa8d106ded9e65c92d2e1bf256940bbde33f908d26a533da1de96b97867ca5cfaf6b89f566659a5587fd59622dc3b45f117
|
7
|
+
data.tar.gz: 4c39e070b5d14881aaa806d32f17cab0e3f6adb7393f35bb93126f6a9b5c5dd4e9c456dd726f877cbad251f81f245d6ec78a919db3ae4a0dba8a5f27bb282c6a
|
data/.gitignore
CHANGED
@@ -8,13 +8,16 @@
|
|
8
8
|
/spec/reports/
|
9
9
|
/tmp/
|
10
10
|
lib/oracle-sql-parser/grammar/condition.rb
|
11
|
+
lib/oracle-sql-parser/grammar/condition/*.rb
|
11
12
|
lib/oracle-sql-parser/grammar/delete.rb
|
12
13
|
lib/oracle-sql-parser/grammar/expression.rb
|
14
|
+
lib/oracle-sql-parser/grammar/expression/*.rb
|
13
15
|
lib/oracle-sql-parser/grammar/grammar.rb
|
14
16
|
lib/oracle-sql-parser/grammar/insert.rb
|
15
17
|
lib/oracle-sql-parser/grammar/reserved_word.rb
|
16
18
|
lib/oracle-sql-parser/grammar/reserved_word.treetop
|
17
19
|
lib/oracle-sql-parser/grammar/select.rb
|
20
|
+
lib/oracle-sql-parser/grammar/select/*.rb
|
18
21
|
lib/oracle-sql-parser/grammar/update.rb
|
19
22
|
test/oracle_enhanced-adapter/connection_params.yml
|
20
23
|
*.sw?
|
data/HISTORY.md
CHANGED
data/Rakefile
CHANGED
@@ -2,7 +2,7 @@ require "bundler/gem_tasks"
|
|
2
2
|
require 'rake'
|
3
3
|
require 'rake/testtask'
|
4
4
|
|
5
|
-
GRAMMAR_FILES = FileList['lib/oracle-sql-parser/grammar
|
5
|
+
GRAMMAR_FILES = FileList['lib/oracle-sql-parser/grammar/**/*.treetop']
|
6
6
|
|
7
7
|
desc "generate parser files"
|
8
8
|
task :gen do
|
@@ -30,16 +30,8 @@ end
|
|
30
30
|
Rake::TestTask.new do |t|
|
31
31
|
t.libs << "test"
|
32
32
|
t.test_files = FileList[
|
33
|
-
'test/grammar
|
34
|
-
'test/
|
35
|
-
'test/grammar/expression_test.rb',
|
36
|
-
'test/grammar/condition_test.rb',
|
37
|
-
'test/grammar/delete_test.rb',
|
38
|
-
'test/grammar/insert_test.rb',
|
39
|
-
'test/ast/replace_literal_test.rb',
|
40
|
-
'test/ast/number_literal_test.rb',
|
41
|
-
'test/ast/text_literal_test.rb',
|
42
|
-
'test/ast/text_literal_test.rb',
|
33
|
+
'test/grammar/*_test.rb',
|
34
|
+
'test/ast/*_test.rb',
|
43
35
|
'test/oracle_enhanced-adapter/select_test.rb'
|
44
36
|
]
|
45
37
|
t.verbose = true
|
@@ -17,7 +17,7 @@ require 'oracle-sql-parser/ast/on_clause.rb'
|
|
17
17
|
require 'oracle-sql-parser/ast/using_clause.rb'
|
18
18
|
require 'oracle-sql-parser/ast/cross_natural_join_clause.rb'
|
19
19
|
require 'oracle-sql-parser/ast/where_clause.rb'
|
20
|
-
require 'oracle-sql-parser/ast/
|
20
|
+
require 'oracle-sql-parser/ast/simple_comparison_condition.rb'
|
21
21
|
require 'oracle-sql-parser/ast/logical_condition.rb'
|
22
22
|
require 'oracle-sql-parser/ast/like_condition.rb'
|
23
23
|
require 'oracle-sql-parser/ast/regexp_condition.rb'
|
@@ -45,6 +45,10 @@ require 'oracle-sql-parser/ast/compound_expression.rb'
|
|
45
45
|
require 'oracle-sql-parser/ast/simple_case_expression.rb'
|
46
46
|
require 'oracle-sql-parser/ast/searched_case_expression.rb'
|
47
47
|
require 'oracle-sql-parser/ast/function_expression.rb'
|
48
|
+
require 'oracle-sql-parser/ast/cursor_expression.rb'
|
49
|
+
require 'oracle-sql-parser/ast/datetime_expression.rb'
|
50
|
+
require 'oracle-sql-parser/ast/interval_expression.rb'
|
51
|
+
require 'oracle-sql-parser/ast/timezone_clause.rb'
|
48
52
|
require 'oracle-sql-parser/ast/current_of.rb'
|
49
53
|
require 'oracle-sql-parser/ast/delete_statement.rb'
|
50
54
|
require 'oracle-sql-parser/ast/delete_target.rb'
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module OracleSqlParser::Ast
|
2
|
+
class IntervalExpression < Hash
|
3
|
+
def to_sql(options = {})
|
4
|
+
result = []
|
5
|
+
result << '('
|
6
|
+
result << @ast[:left]
|
7
|
+
result << '-'
|
8
|
+
result << @ast[:right]
|
9
|
+
result << ')'
|
10
|
+
result << (@ast[:day] || @ast[:year])
|
11
|
+
if @ast[:leading_field_precision]
|
12
|
+
result << '('
|
13
|
+
result << @ast[:leading_field_precision]
|
14
|
+
result << ')'
|
15
|
+
end
|
16
|
+
result << @ast[:to]
|
17
|
+
result << (@ast[:second] || @ast[:month])
|
18
|
+
if @ast[:fractional_second_precision]
|
19
|
+
result << '('
|
20
|
+
result << @ast[:fractional_second_precision]
|
21
|
+
result << ')'
|
22
|
+
end
|
23
|
+
result.compact.map(&:to_sql).join(' ')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -1,8 +1,32 @@
|
|
1
1
|
module OracleSqlParser::Grammar
|
2
2
|
end
|
3
3
|
require "oracle-sql-parser/grammar/reserved_word.rb"
|
4
|
+
require "oracle-sql-parser/grammar/expression/simple.rb"
|
5
|
+
require "oracle-sql-parser/grammar/expression/compound.rb"
|
6
|
+
require "oracle-sql-parser/grammar/expression/function.rb"
|
7
|
+
require "oracle-sql-parser/grammar/expression/case.rb"
|
8
|
+
require "oracle-sql-parser/grammar/expression/simple.rb"
|
9
|
+
require "oracle-sql-parser/grammar/expression/cursor.rb"
|
10
|
+
require "oracle-sql-parser/grammar/expression/datetime.rb"
|
11
|
+
require "oracle-sql-parser/grammar/expression/interval.rb"
|
4
12
|
require "oracle-sql-parser/grammar/expression.rb"
|
13
|
+
require "oracle-sql-parser/grammar/condition/comparison.rb"
|
14
|
+
require "oracle-sql-parser/grammar/condition/floating_point.rb"
|
15
|
+
require "oracle-sql-parser/grammar/condition/multiset.rb"
|
16
|
+
require "oracle-sql-parser/grammar/condition/pattern_matching.rb"
|
17
|
+
require "oracle-sql-parser/grammar/condition/null.rb"
|
18
|
+
require "oracle-sql-parser/grammar/condition/compound.rb"
|
19
|
+
require "oracle-sql-parser/grammar/condition/between.rb"
|
20
|
+
require "oracle-sql-parser/grammar/condition/exists.rb"
|
21
|
+
require "oracle-sql-parser/grammar/condition/in.rb"
|
22
|
+
require "oracle-sql-parser/grammar/condition/is_of_type.rb"
|
5
23
|
require "oracle-sql-parser/grammar/condition.rb"
|
24
|
+
require "oracle-sql-parser/grammar/select/group.rb"
|
25
|
+
require "oracle-sql-parser/grammar/select/order.rb"
|
26
|
+
require "oracle-sql-parser/grammar/select/join.rb"
|
27
|
+
require "oracle-sql-parser/grammar/select/for_update.rb"
|
28
|
+
require "oracle-sql-parser/grammar/select/union.rb"
|
29
|
+
require "oracle-sql-parser/grammar/select/query_block.rb"
|
6
30
|
require "oracle-sql-parser/grammar/select.rb"
|
7
31
|
require "oracle-sql-parser/grammar/update.rb"
|
8
32
|
require "oracle-sql-parser/grammar/delete.rb"
|
@@ -1,5 +1,16 @@
|
|
1
1
|
module OracleSqlParser::Grammar
|
2
2
|
grammar Condition
|
3
|
+
include OracleSqlParser::Grammar::Condition::Comparison
|
4
|
+
include OracleSqlParser::Grammar::Condition::FloatingPoint
|
5
|
+
include OracleSqlParser::Grammar::Condition::Multiset
|
6
|
+
include OracleSqlParser::Grammar::Condition::PatternMatching
|
7
|
+
include OracleSqlParser::Grammar::Condition::Null
|
8
|
+
include OracleSqlParser::Grammar::Condition::Compound
|
9
|
+
include OracleSqlParser::Grammar::Condition::Between
|
10
|
+
include OracleSqlParser::Grammar::Condition::Exists
|
11
|
+
include OracleSqlParser::Grammar::Condition::In
|
12
|
+
include OracleSqlParser::Grammar::Condition::IsOfType
|
13
|
+
|
3
14
|
# where
|
4
15
|
rule where_clause
|
5
16
|
where_keyword space? logical_condition {
|
@@ -10,7 +21,7 @@ module OracleSqlParser::Grammar
|
|
10
21
|
end
|
11
22
|
|
12
23
|
rule condition
|
13
|
-
|
24
|
+
comparison_condition /
|
14
25
|
floating_point_condition /
|
15
26
|
model_condition /
|
16
27
|
mutiset_condition /
|
@@ -54,301 +65,13 @@ module OracleSqlParser::Grammar
|
|
54
65
|
}
|
55
66
|
end
|
56
67
|
|
57
|
-
rule comparision_condition
|
58
|
-
(
|
59
|
-
simple_comparision_condition /
|
60
|
-
group_comparision_condition
|
61
|
-
) {
|
62
|
-
def ast
|
63
|
-
super
|
64
|
-
end
|
65
|
-
}
|
66
|
-
end
|
67
|
-
|
68
|
-
rule group_comparision_condition
|
69
|
-
'group_comparision_condition'
|
70
|
-
end
|
71
|
-
|
72
|
-
rule simple_comparision_condition
|
73
|
-
(
|
74
|
-
left:expr space? op:('!=' / '^=' / '<>' / '>=' / '<=' / '=' / '>' / '<') space? right:expr /
|
75
|
-
'(' space? left:exprs space? ')' op:space? ('!=' / '^=' / '<>' / '=') space? '(' space? right:subquery space? ')'
|
76
|
-
) {
|
77
|
-
def ast
|
78
|
-
OracleSqlParser::Ast::SimpleComparisionCondition[
|
79
|
-
:left => left.ast,
|
80
|
-
:op => op.text_value,
|
81
|
-
:right => right.ast]
|
82
|
-
end
|
83
|
-
}
|
84
|
-
end
|
85
|
-
|
86
|
-
rule floating_point_condition
|
87
|
-
expr space? is_keyword space? not_keyword:not_keyword? space?
|
88
|
-
value:(
|
89
|
-
nan_keyword /
|
90
|
-
infinite_keyword
|
91
|
-
) {
|
92
|
-
def ast
|
93
|
-
OracleSqlParser::Ast::FloatingPointCondition[
|
94
|
-
:target => expr.ast,
|
95
|
-
:is => is_keyword.ast,
|
96
|
-
:not => not_keyword.ast,
|
97
|
-
:value => value.ast
|
98
|
-
]
|
99
|
-
end
|
100
|
-
}
|
101
|
-
end
|
102
|
-
|
103
68
|
rule model_condition
|
104
69
|
'model_condition'
|
105
70
|
end
|
106
71
|
|
107
|
-
rule mutiset_condition
|
108
|
-
is_a_set_condition /
|
109
|
-
is_empty_condition /
|
110
|
-
member_condition /
|
111
|
-
submultiset_condition {
|
112
|
-
def ast
|
113
|
-
super
|
114
|
-
end
|
115
|
-
}
|
116
|
-
end
|
117
|
-
|
118
|
-
rule nested_table
|
119
|
-
ident {
|
120
|
-
def ast
|
121
|
-
super
|
122
|
-
end
|
123
|
-
}
|
124
|
-
end
|
125
|
-
|
126
|
-
rule is_a_set_condition
|
127
|
-
nested_table space? is_keyword space? not_keyword:not_keyword? space? a:[Aa] space? set_keyword {
|
128
|
-
def ast
|
129
|
-
OracleSqlParser::Ast::IsASetCondition[
|
130
|
-
:target => nested_table.ast,
|
131
|
-
:is => is_keyword.ast,
|
132
|
-
:not => not_keyword.ast,
|
133
|
-
:a => OracleSqlParser::Ast::Keyword[:name => a.text_value],
|
134
|
-
:set => set_keyword.ast
|
135
|
-
]
|
136
|
-
end
|
137
|
-
}
|
138
|
-
end
|
139
|
-
|
140
|
-
rule is_empty_condition
|
141
|
-
nested_table space? is_keyword space? not_keyword:not_keyword? space? empty_keyword {
|
142
|
-
def ast
|
143
|
-
OracleSqlParser::Ast::IsEmptyCondition[
|
144
|
-
:target => nested_table.ast,
|
145
|
-
:is => is_keyword.ast,
|
146
|
-
:not => not_keyword.ast,
|
147
|
-
:empty => empty_keyword.ast
|
148
|
-
]
|
149
|
-
end
|
150
|
-
}
|
151
|
-
end
|
152
|
-
|
153
|
-
rule member_condition
|
154
|
-
expr space? not_keyword:not_keyword? space? member_keyword space? of_keyword space? nested_table {
|
155
|
-
def ast
|
156
|
-
OracleSqlParser::Ast::MemberCondition[
|
157
|
-
:target => expr.ast,
|
158
|
-
:not => not_keyword.ast,
|
159
|
-
:member => member_keyword.ast,
|
160
|
-
:of => of_keyword.ast,
|
161
|
-
:table => nested_table.ast
|
162
|
-
]
|
163
|
-
end
|
164
|
-
}
|
165
|
-
end
|
166
|
-
|
167
|
-
rule submultiset_condition
|
168
|
-
table1:nested_table space?
|
169
|
-
not_keyword:not_keyword? space?
|
170
|
-
submultiset_keyword space?
|
171
|
-
of_keyword:of_keyword? space?
|
172
|
-
table2:nested_table {
|
173
|
-
def ast
|
174
|
-
OracleSqlParser::Ast::SubmultisetCondition[
|
175
|
-
:target => table1.ast,
|
176
|
-
:not => not_keyword.ast,
|
177
|
-
:submultiset => submultiset_keyword.ast,
|
178
|
-
:of => of_keyword.ast,
|
179
|
-
:table => table2.ast
|
180
|
-
]
|
181
|
-
end
|
182
|
-
}
|
183
|
-
end
|
184
|
-
|
185
|
-
rule pattern_maching_condition
|
186
|
-
(
|
187
|
-
like_condition /
|
188
|
-
regexp_like_condition
|
189
|
-
) {
|
190
|
-
def ast
|
191
|
-
super
|
192
|
-
end
|
193
|
-
}
|
194
|
-
end
|
195
|
-
|
196
|
-
rule like_condition
|
197
|
-
target:ident space
|
198
|
-
n:(not_keyword:not_keyword space)?
|
199
|
-
like:(like_keyword / like2_keyword / like4_keyword / likec_keyword) space
|
200
|
-
text:text_literal
|
201
|
-
e:(space escape_keyword space escape_text:text_literal)? {
|
202
|
-
def ast
|
203
|
-
OracleSqlParser::Ast::LikeCondition[
|
204
|
-
:target => target.ast,
|
205
|
-
:not => not_keyword.ast,
|
206
|
-
:like => like.ast,
|
207
|
-
:text => text.ast,
|
208
|
-
:escape => escape_text.ast]
|
209
|
-
end
|
210
|
-
|
211
|
-
def not_keyword
|
212
|
-
n.elements && n.elements.first
|
213
|
-
end
|
214
|
-
|
215
|
-
def escape_text
|
216
|
-
if e.respond_to? :escape_text
|
217
|
-
e.escape_text
|
218
|
-
end
|
219
|
-
end
|
220
|
-
}
|
221
|
-
end
|
222
|
-
|
223
|
-
rule regexp_like_condition
|
224
|
-
regexp_like_keyword '(' space? target:ident space? ',' space? regexp:text_literal space? ')' {
|
225
|
-
def ast
|
226
|
-
OracleSqlParser::Ast::RegexpCondition[
|
227
|
-
:target => target.ast,
|
228
|
-
:regexp => regexp.ast]
|
229
|
-
end
|
230
|
-
}
|
231
|
-
end
|
232
|
-
|
233
|
-
rule null_condition
|
234
|
-
expr space is_keyword space n:(not_keyword space)? null_keyword {
|
235
|
-
def ast
|
236
|
-
OracleSqlParser::Ast::NullCondition[
|
237
|
-
:target => expr.ast,
|
238
|
-
:not => not_keyword.ast]
|
239
|
-
end
|
240
|
-
|
241
|
-
def not_keyword
|
242
|
-
n.elements && n.elements.first
|
243
|
-
end
|
244
|
-
}
|
245
|
-
end
|
246
|
-
|
247
72
|
rule xml_condition
|
248
73
|
'xml_condition'
|
249
74
|
end
|
250
75
|
|
251
|
-
rule compound_condition
|
252
|
-
'(' logical_condition ')' {
|
253
|
-
def ast
|
254
|
-
OracleSqlParser::Ast::CompoundCondition[:condition => logical_condition.ast]
|
255
|
-
end
|
256
|
-
}
|
257
|
-
end
|
258
|
-
|
259
|
-
rule between_condition
|
260
|
-
target:expr space n:(not_keyword space)? between_keyword space from:expr space and_keyword space to:expr {
|
261
|
-
def ast
|
262
|
-
OracleSqlParser::Ast::BetweenCondition[
|
263
|
-
:target => target.ast,
|
264
|
-
:not => not_keyword.ast,
|
265
|
-
:from => from.ast,
|
266
|
-
:to => to.ast
|
267
|
-
]
|
268
|
-
end
|
269
|
-
|
270
|
-
def not_keyword
|
271
|
-
n.elements && n.elements.first
|
272
|
-
end
|
273
|
-
}
|
274
|
-
end
|
275
|
-
|
276
|
-
rule exists_condition
|
277
|
-
exists_keyword space? '(' space? subquery space? ')' {
|
278
|
-
def ast
|
279
|
-
OracleSqlParser::Ast::ExistsCondition[
|
280
|
-
:target => subquery.ast
|
281
|
-
]
|
282
|
-
end
|
283
|
-
}
|
284
|
-
end
|
285
|
-
|
286
|
-
rule in_condition
|
287
|
-
target:expr space n:(not_keyword space)? in_keyword space? '(' space? values:( exprs / subquery ) space? ')' {
|
288
|
-
def ast
|
289
|
-
OracleSqlParser::Ast::InCondition[
|
290
|
-
:target => target.ast,
|
291
|
-
:not => not_keyword.ast,
|
292
|
-
:values => values.ast
|
293
|
-
]
|
294
|
-
end
|
295
|
-
|
296
|
-
def not_keyword
|
297
|
-
n.elements && n.elements.first
|
298
|
-
end
|
299
|
-
}
|
300
|
-
end
|
301
|
-
|
302
|
-
rule is_of_type_condition
|
303
|
-
expr space?
|
304
|
-
is_keyword space?
|
305
|
-
not_keyword:not_keyword? space?
|
306
|
-
of_keyword space?
|
307
|
-
type_keyword:type_keyword? space?
|
308
|
-
'(' space? types space? ')' {
|
309
|
-
def ast
|
310
|
-
OracleSqlParser::Ast::IsOfTypeCondition[
|
311
|
-
:target => expr.ast,
|
312
|
-
:is => is_keyword.ast,
|
313
|
-
:not => not_keyword.ast,
|
314
|
-
:of => of_keyword.ast,
|
315
|
-
:type => type_keyword.ast,
|
316
|
-
:types => types.ast
|
317
|
-
]
|
318
|
-
end
|
319
|
-
}
|
320
|
-
end
|
321
|
-
|
322
|
-
rule types
|
323
|
-
only_and_type space? more:(',' space? only_and_type space?)* {
|
324
|
-
def ast
|
325
|
-
OracleSqlParser::Ast::Array[only_and_type.ast, *more_only_and_types.map(&:ast)]
|
326
|
-
end
|
327
|
-
|
328
|
-
def more_only_and_types
|
329
|
-
more.elements.map(&:only_and_type)
|
330
|
-
end
|
331
|
-
}
|
332
|
-
end
|
333
|
-
|
334
|
-
rule only_and_type
|
335
|
-
only_keyword:only_keyword? space? type {
|
336
|
-
def ast
|
337
|
-
OracleSqlParser::Ast::OnlyAndType[
|
338
|
-
:only => only_keyword.ast,
|
339
|
-
:type => type.ast
|
340
|
-
]
|
341
|
-
end
|
342
|
-
}
|
343
|
-
end
|
344
|
-
|
345
|
-
rule type
|
346
|
-
schema_name '.' ident /
|
347
|
-
ident {
|
348
|
-
def ast
|
349
|
-
OracleSqlParser::Ast::Identifier[:name => text_value]
|
350
|
-
end
|
351
|
-
}
|
352
|
-
end
|
353
76
|
end
|
354
77
|
end
|