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
@@ -0,0 +1,20 @@
|
|
1
|
+
module OracleSqlParser::Grammar::Condition
|
2
|
+
grammar Between
|
3
|
+
rule between_condition
|
4
|
+
target:expr space n:(not_keyword space)? between_keyword space from:expr space and_keyword space to:expr {
|
5
|
+
def ast
|
6
|
+
OracleSqlParser::Ast::BetweenCondition[
|
7
|
+
:target => target.ast,
|
8
|
+
:not => not_keyword.ast,
|
9
|
+
:from => from.ast,
|
10
|
+
:to => to.ast
|
11
|
+
]
|
12
|
+
end
|
13
|
+
|
14
|
+
def not_keyword
|
15
|
+
n.elements && n.elements.first
|
16
|
+
end
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module OracleSqlParser::Grammar::Condition
|
2
|
+
grammar Comparison
|
3
|
+
rule comparison_condition
|
4
|
+
(
|
5
|
+
simple_comparison_condition /
|
6
|
+
group_comparison_condition
|
7
|
+
) {
|
8
|
+
def ast
|
9
|
+
super
|
10
|
+
end
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
rule group_comparison_condition
|
15
|
+
'group_comparison_condition'
|
16
|
+
end
|
17
|
+
|
18
|
+
rule simple_comparison_condition
|
19
|
+
(
|
20
|
+
left:expr space? op:('!=' / '^=' / '<>' / '>=' / '<=' / '=' / '>' / '<') space? right:expr /
|
21
|
+
'(' space? left:exprs space? ')' op:space? ('!=' / '^=' / '<>' / '=') space? '(' space? right:subquery space? ')'
|
22
|
+
) {
|
23
|
+
def ast
|
24
|
+
OracleSqlParser::Ast::SimpleComparisonCondition[
|
25
|
+
:left => left.ast,
|
26
|
+
:op => op.text_value,
|
27
|
+
:right => right.ast]
|
28
|
+
end
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module OracleSqlParser::Grammar::Condition
|
2
|
+
grammar FloatingPoint
|
3
|
+
rule floating_point_condition
|
4
|
+
expr space? is_keyword space? not_keyword:not_keyword? space?
|
5
|
+
value:(
|
6
|
+
nan_keyword /
|
7
|
+
infinite_keyword
|
8
|
+
) {
|
9
|
+
def ast
|
10
|
+
OracleSqlParser::Ast::FloatingPointCondition[
|
11
|
+
:target => expr.ast,
|
12
|
+
:is => is_keyword.ast,
|
13
|
+
:not => not_keyword.ast,
|
14
|
+
:value => value.ast
|
15
|
+
]
|
16
|
+
end
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module OracleSqlParser::Grammar::Condition
|
2
|
+
grammar In
|
3
|
+
rule in_condition
|
4
|
+
target:expr space n:(not_keyword space)? in_keyword space? '(' space? values:( exprs / subquery ) space? ')' {
|
5
|
+
def ast
|
6
|
+
OracleSqlParser::Ast::InCondition[
|
7
|
+
:target => target.ast,
|
8
|
+
:not => not_keyword.ast,
|
9
|
+
:values => values.ast
|
10
|
+
]
|
11
|
+
end
|
12
|
+
|
13
|
+
def not_keyword
|
14
|
+
n.elements && n.elements.first
|
15
|
+
end
|
16
|
+
}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module OracleSqlParser::Grammar::Condition
|
2
|
+
grammar IsOfType
|
3
|
+
rule is_of_type_condition
|
4
|
+
expr space?
|
5
|
+
is_keyword space?
|
6
|
+
not_keyword:not_keyword? space?
|
7
|
+
of_keyword space?
|
8
|
+
type_keyword:type_keyword? space?
|
9
|
+
'(' space? types space? ')' {
|
10
|
+
def ast
|
11
|
+
OracleSqlParser::Ast::IsOfTypeCondition[
|
12
|
+
:target => expr.ast,
|
13
|
+
:is => is_keyword.ast,
|
14
|
+
:not => not_keyword.ast,
|
15
|
+
:of => of_keyword.ast,
|
16
|
+
:type => type_keyword.ast,
|
17
|
+
:types => types.ast
|
18
|
+
]
|
19
|
+
end
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
rule types
|
24
|
+
only_and_type space? more:(',' space? only_and_type space?)* {
|
25
|
+
def ast
|
26
|
+
OracleSqlParser::Ast::Array[only_and_type.ast, *more_only_and_types.map(&:ast)]
|
27
|
+
end
|
28
|
+
|
29
|
+
def more_only_and_types
|
30
|
+
more.elements.map(&:only_and_type)
|
31
|
+
end
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
rule only_and_type
|
36
|
+
only_keyword:only_keyword? space? type {
|
37
|
+
def ast
|
38
|
+
OracleSqlParser::Ast::OnlyAndType[
|
39
|
+
:only => only_keyword.ast,
|
40
|
+
:type => type.ast
|
41
|
+
]
|
42
|
+
end
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
rule type
|
47
|
+
schema_name '.' ident /
|
48
|
+
ident {
|
49
|
+
def ast
|
50
|
+
OracleSqlParser::Ast::Identifier[:name => text_value]
|
51
|
+
end
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module OracleSqlParser::Grammar::Condition
|
2
|
+
grammar Multiset
|
3
|
+
rule mutiset_condition
|
4
|
+
is_a_set_condition /
|
5
|
+
is_empty_condition /
|
6
|
+
member_condition /
|
7
|
+
submultiset_condition {
|
8
|
+
def ast
|
9
|
+
super
|
10
|
+
end
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
rule is_a_set_condition
|
15
|
+
nested_table space? is_keyword space? not_keyword:not_keyword? space? a:[Aa] space? set_keyword {
|
16
|
+
def ast
|
17
|
+
OracleSqlParser::Ast::IsASetCondition[
|
18
|
+
:target => nested_table.ast,
|
19
|
+
:is => is_keyword.ast,
|
20
|
+
:not => not_keyword.ast,
|
21
|
+
:a => OracleSqlParser::Ast::Keyword[:name => a.text_value],
|
22
|
+
:set => set_keyword.ast
|
23
|
+
]
|
24
|
+
end
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
rule is_empty_condition
|
29
|
+
nested_table space? is_keyword space? not_keyword:not_keyword? space? empty_keyword {
|
30
|
+
def ast
|
31
|
+
OracleSqlParser::Ast::IsEmptyCondition[
|
32
|
+
:target => nested_table.ast,
|
33
|
+
:is => is_keyword.ast,
|
34
|
+
:not => not_keyword.ast,
|
35
|
+
:empty => empty_keyword.ast
|
36
|
+
]
|
37
|
+
end
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
rule member_condition
|
42
|
+
expr space? not_keyword:not_keyword? space? member_keyword space? of_keyword space? nested_table {
|
43
|
+
def ast
|
44
|
+
OracleSqlParser::Ast::MemberCondition[
|
45
|
+
:target => expr.ast,
|
46
|
+
:not => not_keyword.ast,
|
47
|
+
:member => member_keyword.ast,
|
48
|
+
:of => of_keyword.ast,
|
49
|
+
:table => nested_table.ast
|
50
|
+
]
|
51
|
+
end
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
55
|
+
rule submultiset_condition
|
56
|
+
table1:nested_table space?
|
57
|
+
not_keyword:not_keyword? space?
|
58
|
+
submultiset_keyword space?
|
59
|
+
of_keyword:of_keyword? space?
|
60
|
+
table2:nested_table {
|
61
|
+
def ast
|
62
|
+
OracleSqlParser::Ast::SubmultisetCondition[
|
63
|
+
:target => table1.ast,
|
64
|
+
:not => not_keyword.ast,
|
65
|
+
:submultiset => submultiset_keyword.ast,
|
66
|
+
:of => of_keyword.ast,
|
67
|
+
:table => table2.ast
|
68
|
+
]
|
69
|
+
end
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
73
|
+
rule nested_table
|
74
|
+
ident {
|
75
|
+
def ast
|
76
|
+
super
|
77
|
+
end
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module OracleSqlParser::Grammar::Condition
|
2
|
+
grammar Null
|
3
|
+
rule null_condition
|
4
|
+
expr space is_keyword space n:(not_keyword space)? null_keyword {
|
5
|
+
def ast
|
6
|
+
OracleSqlParser::Ast::NullCondition[
|
7
|
+
:target => expr.ast,
|
8
|
+
:not => not_keyword.ast]
|
9
|
+
end
|
10
|
+
|
11
|
+
def not_keyword
|
12
|
+
n.elements && n.elements.first
|
13
|
+
end
|
14
|
+
}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module OracleSqlParser::Grammar::Condition
|
2
|
+
grammar PatternMatching
|
3
|
+
rule pattern_maching_condition
|
4
|
+
(
|
5
|
+
like_condition /
|
6
|
+
regexp_like_condition
|
7
|
+
) {
|
8
|
+
def ast
|
9
|
+
super
|
10
|
+
end
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
rule like_condition
|
15
|
+
target:ident space
|
16
|
+
n:(not_keyword:not_keyword space)?
|
17
|
+
like:(like_keyword / like2_keyword / like4_keyword / likec_keyword) space
|
18
|
+
text:text_literal
|
19
|
+
e:(space escape_keyword space escape_text:text_literal)? {
|
20
|
+
def ast
|
21
|
+
OracleSqlParser::Ast::LikeCondition[
|
22
|
+
:target => target.ast,
|
23
|
+
:not => not_keyword.ast,
|
24
|
+
:like => like.ast,
|
25
|
+
:text => text.ast,
|
26
|
+
:escape => e.try(:escape_text).ast
|
27
|
+
]
|
28
|
+
end
|
29
|
+
|
30
|
+
def not_keyword
|
31
|
+
n.elements && n.elements.first
|
32
|
+
end
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
rule regexp_like_condition
|
37
|
+
regexp_like_keyword '(' space? target:ident space? ',' space? regexp:text_literal space? ')' {
|
38
|
+
def ast
|
39
|
+
OracleSqlParser::Ast::RegexpCondition[
|
40
|
+
:target => target.ast,
|
41
|
+
:regexp => regexp.ast
|
42
|
+
]
|
43
|
+
end
|
44
|
+
}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -7,13 +7,9 @@ module OracleSqlParser::Grammar
|
|
7
7
|
def ast
|
8
8
|
OracleSqlParser::Ast::DeleteStatement[
|
9
9
|
:target => delete_from_clause.ast,
|
10
|
-
:where_clause => delete_condition.ast
|
10
|
+
:where_clause => condition.try(:delete_condition).ast
|
11
11
|
]
|
12
12
|
end
|
13
|
-
|
14
|
-
def delete_condition
|
15
|
-
condition.delete_condition if condition.respond_to? :delete_condition
|
16
|
-
end
|
17
13
|
}
|
18
14
|
end
|
19
15
|
|
@@ -38,14 +34,10 @@ module OracleSqlParser::Grammar
|
|
38
34
|
else
|
39
35
|
OracleSqlParser::Ast::DeleteTarget[
|
40
36
|
:name => t.ast,
|
41
|
-
:alias => t_alias.ast
|
37
|
+
:alias => a.try(:t_alias).ast,
|
42
38
|
]
|
43
39
|
end
|
44
40
|
end
|
45
|
-
|
46
|
-
def t_alias
|
47
|
-
a.t_alias if a.respond_to? :t_alias
|
48
|
-
end
|
49
41
|
}
|
50
42
|
end
|
51
43
|
|
@@ -1,64 +1,42 @@
|
|
1
1
|
module OracleSqlParser::Grammar
|
2
2
|
grammar Expression
|
3
|
+
include OracleSqlParser::Grammar::Expression::Compound
|
4
|
+
include OracleSqlParser::Grammar::Expression::Function
|
5
|
+
include OracleSqlParser::Grammar::Expression::Case
|
6
|
+
include OracleSqlParser::Grammar::Expression::Simple
|
7
|
+
include OracleSqlParser::Grammar::Expression::Cursor
|
8
|
+
include OracleSqlParser::Grammar::Expression::Datetime
|
9
|
+
include OracleSqlParser::Grammar::Expression::Interval
|
10
|
+
|
3
11
|
rule sql_expression
|
4
12
|
ex:(
|
13
|
+
interval_expression /
|
5
14
|
compound_expression /
|
6
15
|
function_expression /
|
7
16
|
case_expression /
|
8
17
|
cursor_expression /
|
9
18
|
datetime_expression /
|
10
|
-
interval_expression /
|
11
19
|
object_access_expression /
|
12
20
|
scalar_subquery_expression /
|
13
21
|
model_expression /
|
14
22
|
type_constructor_expression /
|
15
23
|
simple_expression /
|
16
|
-
variable_expression
|
24
|
+
variable_expression /
|
25
|
+
column_expression /
|
26
|
+
json_object_access_expression /
|
27
|
+
object_access_expression
|
17
28
|
) {
|
18
29
|
def ast
|
19
30
|
ex.ast
|
20
|
-
# super
|
21
|
-
# tree = ex.ast
|
22
|
-
## tree[:as] = alias_name.try(:as_keyword).try(:ast)
|
23
|
-
# tree[:alias] = alias_name.try(:ident).try(:ast)
|
24
|
-
# tree
|
25
|
-
end
|
26
|
-
}
|
27
|
-
end
|
28
|
-
|
29
|
-
rule simple_expression
|
30
|
-
rownum_keyword /
|
31
|
-
sysdate_keyword /
|
32
|
-
systimestamp_keyword /
|
33
|
-
null_keyword /
|
34
|
-
text_literal /
|
35
|
-
number_literal /
|
36
|
-
sequence /
|
37
|
-
simple_expression_column {
|
38
|
-
def ast
|
39
|
-
super
|
40
|
-
end
|
41
|
-
}
|
42
|
-
end
|
43
|
-
|
44
|
-
rule simple_expression_column
|
45
|
-
name:(
|
46
|
-
( schema_name space? '.' space? table_name '.' / table_name space? '.' space? )?
|
47
|
-
( rowid_keyword / column_name )
|
48
|
-
) {
|
49
|
-
def ast
|
50
|
-
OracleSqlParser::Ast::Identifier.new(:name => text_value)
|
51
31
|
end
|
52
32
|
}
|
53
33
|
end
|
54
34
|
|
55
|
-
rule
|
35
|
+
rule not_loop_sql_expression
|
56
36
|
ex:(
|
57
37
|
function_expression /
|
58
38
|
case_expression /
|
59
39
|
cursor_expression /
|
60
|
-
datetime_expression /
|
61
|
-
interval_expression /
|
62
40
|
object_access_expression /
|
63
41
|
scalar_subquery_expression /
|
64
42
|
model_expression /
|
@@ -72,197 +50,45 @@ module OracleSqlParser::Grammar
|
|
72
50
|
}
|
73
51
|
end
|
74
52
|
|
75
|
-
rule
|
76
|
-
|
77
|
-
left_parenthesis:'(' space? left:expr space? right_parenthesis:')' /
|
78
|
-
left:not_compound_expressions space? op:('*' / '/' / '+' / '-' / '||') space? right:expr /
|
79
|
-
!number_literal op:(prior_keyword / '-' / '+') space? right:expr
|
80
|
-
)
|
81
|
-
|
82
|
-
{
|
83
|
-
def ast
|
84
|
-
OracleSqlParser::Ast::CompoundExpression[
|
85
|
-
:has_parenthesis => ex.respond_to?(:left_parenthesis) ? true : nil,
|
86
|
-
:left => left.ast,
|
87
|
-
:op => op.ast,
|
88
|
-
:right => right.ast,
|
89
|
-
]
|
90
|
-
end
|
91
|
-
|
92
|
-
def left
|
93
|
-
ex.left if ex.respond_to? :left
|
94
|
-
end
|
95
|
-
|
96
|
-
def not_compound_expressions
|
97
|
-
ex.not_compound_expressions if ex.respond_to? :not_compound_expressions
|
98
|
-
end
|
99
|
-
|
100
|
-
def op
|
101
|
-
ex.op if ex.respond_to? :op
|
102
|
-
end
|
103
|
-
|
104
|
-
def right
|
105
|
-
ex.right if ex.respond_to? :right
|
106
|
-
end
|
107
|
-
|
108
|
-
def right_parenthesis
|
109
|
-
ex.right_parenthesis if ex.respond_to? :right_parenthesis
|
110
|
-
end
|
111
|
-
}
|
112
|
-
end
|
113
|
-
|
114
|
-
rule case_expression
|
115
|
-
case_keyword space? case_expression:(simple_case_expression / searched_case_expression) space?
|
116
|
-
else_clause:else_clause? space? end_keyword {
|
117
|
-
def ast
|
118
|
-
ast = case_expression.ast
|
119
|
-
ast.else_clause = else_clause.ast
|
120
|
-
ast
|
121
|
-
end
|
122
|
-
}
|
123
|
-
end
|
124
|
-
|
125
|
-
rule simple_case_expression
|
126
|
-
expr space w:(when_keyword space comparison_expr space then_keyword space? return_expr space?)+ {
|
127
|
-
def ast
|
128
|
-
OracleSqlParser::Ast::SimpleCaseExpression[
|
129
|
-
:condition => expr.ast,
|
130
|
-
:when_clauses => OracleSqlParser::Ast::Array[*when_clauses]
|
131
|
-
]
|
132
|
-
end
|
133
|
-
|
134
|
-
def when_clauses
|
135
|
-
w.elements.map do |elem|
|
136
|
-
OracleSqlParser::Ast::Hash[
|
137
|
-
:when_expr => elem.comparison_expr.ast,
|
138
|
-
:return_expr => elem.return_expr.ast
|
139
|
-
]
|
140
|
-
end
|
141
|
-
end
|
142
|
-
}
|
143
|
-
end
|
144
|
-
|
145
|
-
rule comparison_expr
|
146
|
-
expr {
|
147
|
-
def ast
|
148
|
-
super
|
149
|
-
end
|
150
|
-
}
|
53
|
+
rule object_access_expression
|
54
|
+
'object_access_expression' # not implemented
|
151
55
|
end
|
152
56
|
|
153
|
-
rule
|
154
|
-
|
155
|
-
def ast
|
156
|
-
super
|
157
|
-
end
|
158
|
-
}
|
57
|
+
rule scalar_subquery_expression
|
58
|
+
'scalar_subquery_expression' # not implemented
|
159
59
|
end
|
160
60
|
|
161
|
-
rule
|
162
|
-
|
163
|
-
def ast
|
164
|
-
super
|
165
|
-
end
|
166
|
-
}
|
61
|
+
rule model_expression
|
62
|
+
'model_expression' # not implemented
|
167
63
|
end
|
168
64
|
|
169
|
-
rule
|
170
|
-
|
171
|
-
def ast
|
172
|
-
OracleSqlParser::Ast::SearchedCaseExpression[
|
173
|
-
:when_condition => condition.ast,
|
174
|
-
:return_expr => return_expr.ast
|
175
|
-
]
|
176
|
-
end
|
177
|
-
}
|
65
|
+
rule type_constructor_expression
|
66
|
+
'type_constructor_expression' # not implemented
|
178
67
|
end
|
179
68
|
|
180
|
-
rule
|
181
|
-
|
182
|
-
def ast
|
183
|
-
else_expr.ast
|
184
|
-
end
|
185
|
-
}
|
69
|
+
rule variable_expression
|
70
|
+
'variable_expression' # not implemented
|
186
71
|
end
|
187
72
|
|
188
|
-
rule
|
189
|
-
'
|
73
|
+
rule column_expression
|
74
|
+
'column_expression' # not implemented
|
190
75
|
end
|
191
76
|
|
192
|
-
rule
|
193
|
-
'
|
77
|
+
rule json_object_access_expression
|
78
|
+
'json_object_access_expression' # not implemented
|
194
79
|
end
|
195
80
|
|
196
|
-
rule
|
197
|
-
|
198
|
-
def ast
|
199
|
-
OracleSqlParser::Ast::FunctionExpression[
|
200
|
-
:name => function_name.ast,
|
201
|
-
:args => function_args.ast
|
202
|
-
]
|
203
|
-
end
|
204
|
-
}
|
81
|
+
rule object_access_expression
|
82
|
+
'object_access_expression' # not implemented
|
205
83
|
end
|
206
84
|
|
207
|
-
rule
|
85
|
+
rule expression_list # from grouping_expression_list
|
208
86
|
(
|
209
|
-
|
210
|
-
|
87
|
+
'(' e:exprs ')' /
|
88
|
+
e:exprs
|
211
89
|
) {
|
212
90
|
def ast
|
213
|
-
|
214
|
-
end
|
215
|
-
}
|
216
|
-
end
|
217
|
-
|
218
|
-
rule function_args
|
219
|
-
function_arg more:(space? ',' space? function_arg)* {
|
220
|
-
def ast
|
221
|
-
OracleSqlParser::Ast::Array[function_arg.ast, *more_function_args.map(&:ast)]
|
222
|
-
end
|
223
|
-
|
224
|
-
def more_function_args
|
225
|
-
more.elements.map(&:function_arg)
|
226
|
-
end
|
227
|
-
}
|
228
|
-
end
|
229
|
-
|
230
|
-
rule function_arg
|
231
|
-
expr {
|
232
|
-
def ast
|
233
|
-
super
|
234
|
-
end
|
235
|
-
}
|
236
|
-
end
|
237
|
-
|
238
|
-
rule interval_expression
|
239
|
-
'interval_expression' # not implemented
|
240
|
-
end
|
241
|
-
|
242
|
-
rule object_access_expression
|
243
|
-
'object_access_expression'
|
244
|
-
end
|
245
|
-
|
246
|
-
rule scalar_subquery_expression
|
247
|
-
'scalar_subquery_expression'
|
248
|
-
end
|
249
|
-
|
250
|
-
rule model_expression
|
251
|
-
'model_expression' #
|
252
|
-
end
|
253
|
-
|
254
|
-
rule type_constructor_expression
|
255
|
-
'type_constructor_expression'
|
256
|
-
end
|
257
|
-
|
258
|
-
rule variable_expression
|
259
|
-
'variable_expression'
|
260
|
-
end
|
261
|
-
|
262
|
-
rule expr
|
263
|
-
sql_expression {
|
264
|
-
def ast
|
265
|
-
super
|
91
|
+
e.ast
|
266
92
|
end
|
267
93
|
}
|
268
94
|
end
|
@@ -279,15 +105,14 @@ module OracleSqlParser::Grammar
|
|
279
105
|
}
|
280
106
|
end
|
281
107
|
|
282
|
-
rule
|
283
|
-
|
284
|
-
'(' e:exprs ')' /
|
285
|
-
e:exprs
|
286
|
-
) {
|
108
|
+
rule expr
|
109
|
+
sql_expression {
|
287
110
|
def ast
|
288
|
-
|
111
|
+
super
|
289
112
|
end
|
290
113
|
}
|
291
114
|
end
|
115
|
+
|
116
|
+
|
292
117
|
end
|
293
118
|
end
|