oracle-sql-parser 0.1.1 → 0.2.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/README.md +9 -3
- data/lib/oracle-sql-parser/ast.rb +4 -0
- data/lib/oracle-sql-parser/ast/array.rb +12 -4
- data/lib/oracle-sql-parser/ast/base.rb +24 -4
- data/lib/oracle-sql-parser/ast/between_condition.rb +10 -0
- data/lib/oracle-sql-parser/ast/compound_condition.rb +7 -0
- data/lib/oracle-sql-parser/ast/current_of.rb +3 -0
- data/lib/oracle-sql-parser/ast/delete_statement.rb +8 -1
- data/lib/oracle-sql-parser/ast/delete_target.rb +11 -1
- data/lib/oracle-sql-parser/ast/exists_condition.rb +3 -0
- data/lib/oracle-sql-parser/ast/for_update_clause.rb +7 -0
- data/lib/oracle-sql-parser/ast/function_expression.rb +10 -0
- data/lib/oracle-sql-parser/ast/group_by_clause.rb +7 -0
- data/lib/oracle-sql-parser/ast/hash.rb +2 -2
- data/lib/oracle-sql-parser/ast/identifier.rb +1 -1
- data/lib/oracle-sql-parser/ast/in_condition.rb +8 -0
- data/lib/oracle-sql-parser/ast/insert_statement.rb +9 -1
- data/lib/oracle-sql-parser/ast/insert_values_clause.rb +7 -0
- data/lib/oracle-sql-parser/ast/like_condition.rb +13 -0
- data/lib/oracle-sql-parser/ast/null_condition.rb +8 -0
- data/lib/oracle-sql-parser/ast/order_by_clause.rb +8 -0
- data/lib/oracle-sql-parser/ast/order_by_clause_item.rb +5 -0
- data/lib/oracle-sql-parser/ast/query_block.rb +1 -1
- data/lib/oracle-sql-parser/ast/regexp_condition.rb +3 -0
- data/lib/oracle-sql-parser/ast/rollup_cube_clause.rb +3 -0
- data/lib/oracle-sql-parser/ast/searched_case_expression.rb +13 -1
- data/lib/oracle-sql-parser/ast/select_statement.rb +5 -1
- data/lib/oracle-sql-parser/ast/simple_case_expression.rb +13 -0
- data/lib/oracle-sql-parser/ast/simple_comparision_condition.rb +3 -0
- data/lib/oracle-sql-parser/ast/table_reference.rb +16 -0
- data/lib/oracle-sql-parser/ast/text_literal.rb +4 -0
- data/lib/oracle-sql-parser/ast/update_set_clause.rb +7 -0
- data/lib/oracle-sql-parser/ast/update_set_column.rb +3 -0
- data/lib/oracle-sql-parser/ast/update_statement.rb +8 -0
- data/lib/oracle-sql-parser/ast/where_clause.rb +3 -0
- data/lib/oracle-sql-parser/grammar/condition.treetop +1 -1
- data/lib/oracle-sql-parser/grammar/delete.treetop +20 -12
- data/lib/oracle-sql-parser/grammar/grammar.treetop +20 -10
- data/lib/oracle-sql-parser/grammar/insert.treetop +10 -8
- data/lib/oracle-sql-parser/grammar/select.treetop +8 -20
- data/lib/oracle-sql-parser/grammar/update.treetop +18 -14
- data/lib/oracle-sql-parser/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c837374a732fc2668270aeda336b61a01370e4bb
|
4
|
+
data.tar.gz: 7b3a68ffe18ef9433fdaed74261474e555d944a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 06d395ede2b2bd56ab772adb3fd648371a8725de851475afd7de5547c229feb8532bd732a9320d041b39ea3a20d104494829ac9142c4f8664c913d56525eec99
|
7
|
+
data.tar.gz: e2e5bf837cbf9a41066becb3ba9f3bb4b098005114d342a2b314b50021defea7a9999aeeae60ea05d9f31b90f4dd9a824eeb517f7e50bb0625d188eaa781d521
|
data/README.md
CHANGED
@@ -24,15 +24,14 @@ Or install it yourself as:
|
|
24
24
|
query = "select 1 from dual"
|
25
25
|
parser = OracleSqlParser::Grammar::GrammarParser.new
|
26
26
|
syntax_tree = parser.parse query
|
27
|
-
if syntax_tree
|
27
|
+
if syntax_tree.nil?
|
28
28
|
message = "\n#{query}\n" + " " * (parser.failure_column.to_i-1) + "*\n"
|
29
29
|
raise parser.failure_reason + message
|
30
30
|
end
|
31
31
|
ast = syntax_tree.ast
|
32
32
|
```
|
33
33
|
<pre>
|
34
|
-
|
35
|
-
=> #<OracleSqlParser::Ast::SelectStatement
|
34
|
+
=> #<OracleSqlParser::Ast::SelectStatement
|
36
35
|
:subquery => #<OracleSqlParser::Ast::Subquery
|
37
36
|
:query_block => #<OracleSqlParser::Ast::QueryBlock
|
38
37
|
:hint => nil,
|
@@ -51,6 +50,13 @@ irb(main):008:0> ast
|
|
51
50
|
:for_update_clause => nil}>
|
52
51
|
</pre>
|
53
52
|
|
53
|
+
```ruby
|
54
|
+
ast.to_sql
|
55
|
+
```
|
56
|
+
|
57
|
+
<pre>
|
58
|
+
=> "select 1 from dual"
|
59
|
+
</pre>
|
54
60
|
|
55
61
|
## Contributing
|
56
62
|
|
@@ -25,6 +25,7 @@ require 'oracle-sql-parser/ast/order_by_clause.rb'
|
|
25
25
|
require 'oracle-sql-parser/ast/order_by_clause_item.rb'
|
26
26
|
require 'oracle-sql-parser/ast/update_statement.rb'
|
27
27
|
require 'oracle-sql-parser/ast/update_set_column.rb'
|
28
|
+
require 'oracle-sql-parser/ast/update_set_clause.rb'
|
28
29
|
require 'oracle-sql-parser/ast/simple_case_expression.rb'
|
29
30
|
require 'oracle-sql-parser/ast/searched_case_expression.rb'
|
30
31
|
require 'oracle-sql-parser/ast/function_expression.rb'
|
@@ -32,7 +33,10 @@ require 'oracle-sql-parser/ast/current_of.rb'
|
|
32
33
|
require 'oracle-sql-parser/ast/delete_statement.rb'
|
33
34
|
require 'oracle-sql-parser/ast/delete_target.rb'
|
34
35
|
require 'oracle-sql-parser/ast/insert_statement.rb'
|
36
|
+
require 'oracle-sql-parser/ast/insert_values_clause.rb'
|
35
37
|
require 'oracle-sql-parser/ast/identifier.rb'
|
36
38
|
require 'oracle-sql-parser/ast/text_literal.rb'
|
37
39
|
require 'oracle-sql-parser/ast/number_literal.rb'
|
40
|
+
require 'oracle-sql-parser/ast/table_reference.rb'
|
41
|
+
require 'oracle-sql-parser/ast/compound_condition.rb'
|
38
42
|
require 'oracle-sql-parser/ast/keyword.rb'
|
@@ -2,8 +2,16 @@ require 'forwardable'
|
|
2
2
|
|
3
3
|
module OracleSqlParser::Ast
|
4
4
|
class Array < Base
|
5
|
-
|
6
|
-
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
def each(&block)
|
8
|
+
@ast.each(&block)
|
9
|
+
end
|
10
|
+
|
11
|
+
def [](index)
|
12
|
+
@ast[index]
|
13
|
+
end
|
14
|
+
|
7
15
|
def self.[](*values)
|
8
16
|
self.new(*values)
|
9
17
|
end
|
@@ -12,14 +20,14 @@ module OracleSqlParser::Ast
|
|
12
20
|
@ast = args
|
13
21
|
end
|
14
22
|
|
15
|
-
def to_sql
|
23
|
+
def to_sql(options = {:separator => ' '})
|
16
24
|
@ast.map do |v|
|
17
25
|
if v.respond_to? :to_sql
|
18
26
|
v.to_sql
|
19
27
|
else
|
20
28
|
v.to_s
|
21
29
|
end
|
22
|
-
end.compact.join(
|
30
|
+
end.compact.join(options[:separator])
|
23
31
|
end
|
24
32
|
|
25
33
|
def remove_nil_values!
|
@@ -2,12 +2,32 @@ def nil.ast
|
|
2
2
|
nil
|
3
3
|
end
|
4
4
|
|
5
|
-
def nil.to_sql
|
5
|
+
def nil.to_sql(options = {})
|
6
6
|
nil
|
7
7
|
end
|
8
8
|
|
9
|
+
def nil.until_nil(&block)
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
unless Object.respond_to? :try
|
14
|
+
class Object
|
15
|
+
def try(name, *args)
|
16
|
+
if respond_to? name
|
17
|
+
send(name, *args)
|
18
|
+
else
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def until_nil(&block)
|
24
|
+
block.call(self)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
9
29
|
class String
|
10
|
-
def to_sql
|
30
|
+
def to_sql(options ={})
|
11
31
|
self
|
12
32
|
end
|
13
33
|
end
|
@@ -35,9 +55,9 @@ module OracleSqlParser::Ast
|
|
35
55
|
raise "do not call ast method"
|
36
56
|
end
|
37
57
|
|
38
|
-
def to_sql
|
58
|
+
def to_sql(options ={})
|
39
59
|
if @ast.respond_to? :to_sql
|
40
|
-
@ast.to_sql
|
60
|
+
@ast.to_sql(options)
|
41
61
|
else
|
42
62
|
@ast.to_s
|
43
63
|
end
|
@@ -1,6 +1,16 @@
|
|
1
1
|
module OracleSqlParser::Ast
|
2
2
|
class DeleteTarget < Hash
|
3
|
-
|
3
|
+
def to_sql
|
4
|
+
result = []
|
5
|
+
result << @ast[:table] if @ast[:table]
|
6
|
+
if @ast[:name].instance_of? Subquery
|
7
|
+
result << "(#{@ast[:name].to_sql})"
|
8
|
+
else
|
9
|
+
result << @ast[:name]
|
10
|
+
end
|
11
|
+
result << @ast[:alias] if @ast[:alias]
|
12
|
+
result.map(&:to_sql).join(" ")
|
13
|
+
end
|
4
14
|
end
|
5
15
|
end
|
6
16
|
|
@@ -1,4 +1,11 @@
|
|
1
1
|
module OracleSqlParser::Ast
|
2
2
|
class ForUpdateClause < Hash
|
3
|
+
def to_sql(options = {})
|
4
|
+
sql = []
|
5
|
+
sql << "for update"
|
6
|
+
sql << "of #{@ast[:columns].to_sql(:separator => ',')}" if @ast[:columns]
|
7
|
+
sql << @ast.values_at(:wait, :time).map(&:to_sql).compact.join(" ") if @ast[:wait]
|
8
|
+
sql.join(" ")
|
9
|
+
end
|
3
10
|
end
|
4
11
|
end
|
@@ -1,4 +1,14 @@
|
|
1
1
|
module OracleSqlParser::Ast
|
2
2
|
class FunctionExpressoin < Hash
|
3
|
+
def to_sql(options = {})
|
4
|
+
sql = []
|
5
|
+
sql << @ast[:name].to_sql
|
6
|
+
sql << '('
|
7
|
+
if @ast[:args]
|
8
|
+
sql << @ast[:args].map(&:to_sql).join(',')
|
9
|
+
end
|
10
|
+
sql << ')'
|
11
|
+
sql.join()
|
12
|
+
end
|
3
13
|
end
|
4
14
|
end
|
@@ -22,14 +22,14 @@ module OracleSqlParser::Ast
|
|
22
22
|
"}>\n"
|
23
23
|
end
|
24
24
|
|
25
|
-
def to_sql
|
25
|
+
def to_sql(options = {:separator => ' '})
|
26
26
|
@ast.map do |k,v|
|
27
27
|
if v.respond_to? :to_sql
|
28
28
|
v.to_sql
|
29
29
|
else
|
30
30
|
v.to_s
|
31
31
|
end
|
32
|
-
end.compact.join(
|
32
|
+
end.compact.join(options[:separator])
|
33
33
|
end
|
34
34
|
|
35
35
|
def self.[](value)
|
@@ -1,5 +1,13 @@
|
|
1
1
|
module OracleSqlParser::Ast
|
2
2
|
class InsertStatement < Hash
|
3
|
-
|
3
|
+
def to_sql
|
4
|
+
result = []
|
5
|
+
result << "insert into"
|
6
|
+
result << @ast[:insert]
|
7
|
+
result << @ast[:alias]
|
8
|
+
result << "(#{@ast[:columns].map(&:to_sql).join(',')})" if @ast[:columns]
|
9
|
+
result << @ast[:values]
|
10
|
+
result.compact.map(&:to_sql).join(' ')
|
11
|
+
end
|
4
12
|
end
|
5
13
|
end
|
@@ -1,4 +1,17 @@
|
|
1
1
|
module OracleSqlParser::Ast
|
2
2
|
class LikeCondition < Hash
|
3
|
+
def to_sql(options = {})
|
4
|
+
sql = [
|
5
|
+
@ast[:target],
|
6
|
+
@ast[:not],
|
7
|
+
@ast[:like],
|
8
|
+
@ast[:text],
|
9
|
+
]
|
10
|
+
if @ast[:escape]
|
11
|
+
sql << "escape"
|
12
|
+
sql << @ast[:escape]
|
13
|
+
end
|
14
|
+
sql.map(&:to_sql).compact.join(' ')
|
15
|
+
end
|
3
16
|
end
|
4
17
|
end
|
@@ -1,8 +1,20 @@
|
|
1
1
|
module OracleSqlParser::Ast
|
2
2
|
class SearchedCaseExpression < Base
|
3
|
-
|
4
3
|
def else_clause=(ast)
|
5
4
|
@ast[:else_clause] = ast
|
6
5
|
end
|
6
|
+
|
7
|
+
def to_sql(options = {})
|
8
|
+
sql = []
|
9
|
+
sql << 'case'
|
10
|
+
sql << 'when'
|
11
|
+
sql << @ast[:when_condition]
|
12
|
+
sql << 'then'
|
13
|
+
sql << @ast[:return_expr]
|
14
|
+
sql << 'else'
|
15
|
+
sql << @ast[:else_clause]
|
16
|
+
sql << 'end'
|
17
|
+
sql.compact.map(&:to_sql).join(' ')
|
18
|
+
end
|
7
19
|
end
|
8
20
|
end
|
@@ -3,5 +3,18 @@ module OracleSqlParser::Ast
|
|
3
3
|
def else_clause=(ast)
|
4
4
|
@ast[:else_clause] = ast
|
5
5
|
end
|
6
|
+
|
7
|
+
def to_sql(options = {})
|
8
|
+
sql = []
|
9
|
+
sql << 'case'
|
10
|
+
sql << @ast[:condition]
|
11
|
+
sql << @ast[:when_clauses].map{|v| "when #{v.when_expr.to_sql} then #{v.return_expr.to_sql}"}.join(' ')
|
12
|
+
if @ast[:else_clause]
|
13
|
+
sql << 'else'
|
14
|
+
sql << @ast[:else_clause]
|
15
|
+
end
|
16
|
+
sql << 'end'
|
17
|
+
sql.compact.map(&:to_sql).join(' ')
|
18
|
+
end
|
6
19
|
end
|
7
20
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module OracleSqlParser::Ast
|
2
|
+
class TableReference < Hash
|
3
|
+
|
4
|
+
def inspect
|
5
|
+
"#<#{self.class.name} #{@ast.inspect}>"
|
6
|
+
end
|
7
|
+
|
8
|
+
def to_sql(options = {})
|
9
|
+
result = ''
|
10
|
+
result += "#{@ast[:schema_name].to_sql}." if @ast[:schema_name]
|
11
|
+
result += @ast[:table_name].to_sql
|
12
|
+
result += "@#{@ast[:dblink].to_sql}" if @ast[:dblink]
|
13
|
+
result
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -8,7 +8,7 @@ module OracleSqlParser::Grammar
|
|
8
8
|
def ast
|
9
9
|
OracleSqlParser::Ast::DeleteStatement[
|
10
10
|
:target => delete_from_clause.ast,
|
11
|
-
:
|
11
|
+
:where_clause => delete_condition.ast
|
12
12
|
]
|
13
13
|
end
|
14
14
|
}
|
@@ -29,18 +29,26 @@ module OracleSqlParser::Grammar
|
|
29
29
|
) space?
|
30
30
|
t_alias:t_alias? {
|
31
31
|
def ast
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
table_or_subquery = t.ast
|
33
|
+
if table_or_subquery.instance_of? OracleSqlParser::Ast::DeleteTarget
|
34
|
+
table_or_subquery
|
35
|
+
else
|
36
|
+
OracleSqlParser::Ast::DeleteTarget[
|
37
|
+
:name => t.ast,
|
38
|
+
:alias => t_alias.ast
|
39
|
+
]
|
40
|
+
end
|
36
41
|
end
|
37
42
|
}
|
38
43
|
end
|
39
44
|
|
40
45
|
rule delete_target_subquery
|
41
|
-
(table_keyword space)? '(' space? subquery space? ')' {
|
46
|
+
t:(table_keyword space)? '(' space? subquery space? ')' {
|
42
47
|
def ast
|
43
|
-
|
48
|
+
OracleSqlParser::Ast::DeleteTarget[
|
49
|
+
:table => t.try(:table_keyword).ast,
|
50
|
+
:name => subquery.ast
|
51
|
+
]
|
44
52
|
end
|
45
53
|
}
|
46
54
|
end
|
@@ -49,18 +57,18 @@ module OracleSqlParser::Grammar
|
|
49
57
|
where_keyword space?
|
50
58
|
where:(
|
51
59
|
search_condition /
|
52
|
-
|
60
|
+
delete_current_of
|
53
61
|
) {
|
54
62
|
def ast
|
55
|
-
where.ast
|
63
|
+
OracleSqlParser::Ast::WhereClause[:condition => where.ast]
|
56
64
|
end
|
57
65
|
}
|
58
66
|
end
|
59
67
|
|
60
|
-
rule
|
61
|
-
|
68
|
+
rule delete_current_of
|
69
|
+
current_of {
|
62
70
|
def ast
|
63
|
-
|
71
|
+
super
|
64
72
|
end
|
65
73
|
}
|
66
74
|
end
|
@@ -133,16 +133,26 @@ module OracleSqlParser::Grammar
|
|
133
133
|
end
|
134
134
|
|
135
135
|
rule table_reference
|
136
|
-
(
|
137
|
-
schema_name '.' table_name /
|
138
|
-
table_name
|
139
|
-
) ('@' dblink)? {
|
136
|
+
t:(
|
137
|
+
schema_name:schema_name '.' table_name:table_name /
|
138
|
+
table_name:table_name
|
139
|
+
) l:('@' dblink)? {
|
140
140
|
def ast
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
141
|
+
OracleSqlParser::Ast::TableReference[
|
142
|
+
:schema_name => t.try(:schema_name).ast,
|
143
|
+
:table_name => t.try(:table_name).ast,
|
144
|
+
:dblink => l.try(:dblink).ast
|
145
|
+
]
|
146
|
+
end
|
147
|
+
}
|
148
|
+
end
|
149
|
+
|
150
|
+
rule current_of
|
151
|
+
current_of_keyword space? cursor_name {
|
152
|
+
def ast
|
153
|
+
OracleSqlParser::Ast::CurrentOf[
|
154
|
+
:cursor => cursor_name.ast
|
155
|
+
]
|
146
156
|
end
|
147
157
|
}
|
148
158
|
end
|
@@ -166,7 +176,7 @@ module OracleSqlParser::Grammar
|
|
166
176
|
rule sequence
|
167
177
|
ident space? '.' space? n:(currval_keyword / nextval_keyword) {
|
168
178
|
def ast
|
169
|
-
OracleSqlParser::Ast::Identifier[:
|
179
|
+
OracleSqlParser::Ast::Identifier[:name => text_value]
|
170
180
|
end
|
171
181
|
}
|
172
182
|
end
|
@@ -24,6 +24,7 @@ module OracleSqlParser::Grammar
|
|
24
24
|
insert_into_ast = insert_into_clause.ast
|
25
25
|
OracleSqlParser::Ast::InsertStatement[
|
26
26
|
:insert => insert_into_ast.table,
|
27
|
+
:alias => insert_into_ast.alias,
|
27
28
|
:columns => insert_into_ast.column,
|
28
29
|
:values => values.ast
|
29
30
|
]
|
@@ -38,11 +39,12 @@ module OracleSqlParser::Grammar
|
|
38
39
|
rule insert_into_clause
|
39
40
|
into_keyword space
|
40
41
|
dml_table_expression_clause space
|
41
|
-
(t_alias space)?
|
42
|
+
table_alias:(t_alias space)?
|
42
43
|
insert_column_names:insert_column_names? {
|
43
44
|
def ast
|
44
45
|
OracleSqlParser::Ast::Hash[
|
45
46
|
:table => dml_table_expression_clause.ast,
|
47
|
+
:alias => try(:table_alias).try(:t_alias).ast,
|
46
48
|
:column => insert_column_names.ast
|
47
49
|
]
|
48
50
|
end
|
@@ -72,7 +74,10 @@ module OracleSqlParser::Grammar
|
|
72
74
|
rule insert_values
|
73
75
|
expr_or_default more:(space? ',' space? e:expr_or_default)* {
|
74
76
|
def ast
|
75
|
-
OracleSqlParser::Ast::
|
77
|
+
OracleSqlParser::Ast::InsertValuesClause[
|
78
|
+
expr_or_default.ast,
|
79
|
+
*more_expr_or_defaults.map(&:ast)
|
80
|
+
]
|
76
81
|
end
|
77
82
|
|
78
83
|
def more_expr_or_defaults
|
@@ -90,13 +95,10 @@ module OracleSqlParser::Grammar
|
|
90
95
|
end
|
91
96
|
|
92
97
|
rule dml_table_expression_clause
|
93
|
-
|
94
|
-
|
95
|
-
schema_name '.' table_name /
|
96
|
-
table_name
|
97
|
-
) {
|
98
|
+
table_reference
|
99
|
+
{
|
98
100
|
def ast
|
99
|
-
|
101
|
+
super
|
100
102
|
end
|
101
103
|
}
|
102
104
|
end
|
@@ -162,30 +162,18 @@ module OracleSqlParser::Grammar
|
|
162
162
|
rule for_update_clause
|
163
163
|
for_keyword space?
|
164
164
|
update_keyword space?
|
165
|
-
|
166
|
-
wait:(
|
165
|
+
of:(of_keyword space for_update_clause_columns space?)?
|
166
|
+
wait:(
|
167
|
+
w:wait_keyword space? time:integer /
|
168
|
+
w:nowait_keyword
|
169
|
+
)? {
|
167
170
|
def ast
|
168
171
|
OracleSqlParser::Ast::ForUpdateClause[
|
169
|
-
:columns => for_update_clause_columns.ast,
|
170
|
-
:wait => wait.ast
|
172
|
+
:columns => of.try(:for_update_clause_columns).ast,
|
173
|
+
:wait => wait.try(:w).ast,
|
174
|
+
:time => wait.try(:time).ast
|
171
175
|
].remove_nil_values!
|
172
176
|
end
|
173
|
-
|
174
|
-
def for_update_clause_columns
|
175
|
-
if f.respond_to? :for_update_clause_columns
|
176
|
-
f.for_update_clause_columns
|
177
|
-
else
|
178
|
-
nil
|
179
|
-
end
|
180
|
-
end
|
181
|
-
}
|
182
|
-
end
|
183
|
-
|
184
|
-
rule wait_with_integer
|
185
|
-
wait_keyword space? integer {
|
186
|
-
def ast
|
187
|
-
integer.ast
|
188
|
-
end
|
189
177
|
}
|
190
178
|
end
|
191
179
|
|
@@ -42,17 +42,11 @@ module OracleSqlParser::Grammar
|
|
42
42
|
end
|
43
43
|
|
44
44
|
rule update_set_clause
|
45
|
-
set_keyword space
|
45
|
+
set_keyword space update_target_column more:(space? ',' space? c:update_target_column)* {
|
46
46
|
def ast
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
end
|
51
|
-
|
52
|
-
rule update_target_columns
|
53
|
-
update_target_column more:(space? ',' space? c:update_target_column)* {
|
54
|
-
def ast
|
55
|
-
OracleSqlParser::Ast::Array[update_target_column.ast, *more_update_target_columns.map(&:ast)]
|
47
|
+
OracleSqlParser::Ast::UpdateSetClause[
|
48
|
+
update_target_column.ast, *more_update_target_columns.map(&:ast)
|
49
|
+
]
|
56
50
|
end
|
57
51
|
|
58
52
|
def more_update_target_columns
|
@@ -61,6 +55,18 @@ module OracleSqlParser::Grammar
|
|
61
55
|
}
|
62
56
|
end
|
63
57
|
|
58
|
+
# rule update_target_columns
|
59
|
+
# update_target_column more:(space? ',' space? c:update_target_column)* {
|
60
|
+
# def ast
|
61
|
+
# OracleSqlParser::Ast::Array[update_target_column.ast, *more_update_target_columns.map(&:ast)]
|
62
|
+
# end
|
63
|
+
#
|
64
|
+
# def more_update_target_columns
|
65
|
+
# more.elements.map(&:c)
|
66
|
+
# end
|
67
|
+
# }
|
68
|
+
# end
|
69
|
+
|
64
70
|
rule update_target_column
|
65
71
|
column_name space? op:'=' space? sql_expression {
|
66
72
|
def ast
|
@@ -93,11 +99,9 @@ module OracleSqlParser::Grammar
|
|
93
99
|
end
|
94
100
|
|
95
101
|
rule update_current_of
|
96
|
-
|
102
|
+
current_of {
|
97
103
|
def ast
|
98
|
-
|
99
|
-
:cursor_name => cursor_name.ast
|
100
|
-
]
|
104
|
+
super
|
101
105
|
end
|
102
106
|
}
|
103
107
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oracle-sql-parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Junichiro Kasuya
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -99,6 +99,7 @@ files:
|
|
99
99
|
- lib/oracle-sql-parser/ast/array.rb
|
100
100
|
- lib/oracle-sql-parser/ast/base.rb
|
101
101
|
- lib/oracle-sql-parser/ast/between_condition.rb
|
102
|
+
- lib/oracle-sql-parser/ast/compound_condition.rb
|
102
103
|
- lib/oracle-sql-parser/ast/current_of.rb
|
103
104
|
- lib/oracle-sql-parser/ast/delete_statement.rb
|
104
105
|
- lib/oracle-sql-parser/ast/delete_target.rb
|
@@ -110,6 +111,7 @@ files:
|
|
110
111
|
- lib/oracle-sql-parser/ast/identifier.rb
|
111
112
|
- lib/oracle-sql-parser/ast/in_condition.rb
|
112
113
|
- lib/oracle-sql-parser/ast/insert_statement.rb
|
114
|
+
- lib/oracle-sql-parser/ast/insert_values_clause.rb
|
113
115
|
- lib/oracle-sql-parser/ast/keyword.rb
|
114
116
|
- lib/oracle-sql-parser/ast/like_condition.rb
|
115
117
|
- lib/oracle-sql-parser/ast/logical_condition.rb
|
@@ -125,7 +127,9 @@ files:
|
|
125
127
|
- lib/oracle-sql-parser/ast/simple_case_expression.rb
|
126
128
|
- lib/oracle-sql-parser/ast/simple_comparision_condition.rb
|
127
129
|
- lib/oracle-sql-parser/ast/subquery.rb
|
130
|
+
- lib/oracle-sql-parser/ast/table_reference.rb
|
128
131
|
- lib/oracle-sql-parser/ast/text_literal.rb
|
132
|
+
- lib/oracle-sql-parser/ast/update_set_clause.rb
|
129
133
|
- lib/oracle-sql-parser/ast/update_set_column.rb
|
130
134
|
- lib/oracle-sql-parser/ast/update_statement.rb
|
131
135
|
- lib/oracle-sql-parser/ast/where_clause.rb
|