oracle-sql-parser 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.travis.yml +4 -0
  4. data/Gemfile +4 -0
  5. data/README.md +58 -0
  6. data/Rakefile +41 -0
  7. data/bin/console +14 -0
  8. data/bin/setup +8 -0
  9. data/lib/oracle-sql-parser.rb +7 -0
  10. data/lib/oracle-sql-parser/ast.rb +38 -0
  11. data/lib/oracle-sql-parser/ast/array.rb +37 -0
  12. data/lib/oracle-sql-parser/ast/base.rb +89 -0
  13. data/lib/oracle-sql-parser/ast/between_condition.rb +4 -0
  14. data/lib/oracle-sql-parser/ast/current_of.rb +4 -0
  15. data/lib/oracle-sql-parser/ast/delete_statement.rb +5 -0
  16. data/lib/oracle-sql-parser/ast/delete_target.rb +6 -0
  17. data/lib/oracle-sql-parser/ast/exists_condition.rb +4 -0
  18. data/lib/oracle-sql-parser/ast/for_update_clause.rb +4 -0
  19. data/lib/oracle-sql-parser/ast/function_expression.rb +4 -0
  20. data/lib/oracle-sql-parser/ast/group_by_clause.rb +4 -0
  21. data/lib/oracle-sql-parser/ast/hash.rb +44 -0
  22. data/lib/oracle-sql-parser/ast/identifier.rb +7 -0
  23. data/lib/oracle-sql-parser/ast/in_condition.rb +4 -0
  24. data/lib/oracle-sql-parser/ast/insert_statement.rb +5 -0
  25. data/lib/oracle-sql-parser/ast/keyword.rb +8 -0
  26. data/lib/oracle-sql-parser/ast/like_condition.rb +4 -0
  27. data/lib/oracle-sql-parser/ast/logical_condition.rb +4 -0
  28. data/lib/oracle-sql-parser/ast/null_condition.rb +4 -0
  29. data/lib/oracle-sql-parser/ast/number_literal.rb +8 -0
  30. data/lib/oracle-sql-parser/ast/order_by_clause.rb +4 -0
  31. data/lib/oracle-sql-parser/ast/order_by_clause_item.rb +4 -0
  32. data/lib/oracle-sql-parser/ast/query_block.rb +17 -0
  33. data/lib/oracle-sql-parser/ast/regexp_condition.rb +4 -0
  34. data/lib/oracle-sql-parser/ast/rollup_cube_clause.rb +4 -0
  35. data/lib/oracle-sql-parser/ast/searched_case_expression.rb +8 -0
  36. data/lib/oracle-sql-parser/ast/select_statement.rb +5 -0
  37. data/lib/oracle-sql-parser/ast/simple_case_expression.rb +7 -0
  38. data/lib/oracle-sql-parser/ast/simple_comparision_condition.rb +4 -0
  39. data/lib/oracle-sql-parser/ast/subquery.rb +5 -0
  40. data/lib/oracle-sql-parser/ast/text_literal.rb +7 -0
  41. data/lib/oracle-sql-parser/ast/update_set_column.rb +4 -0
  42. data/lib/oracle-sql-parser/ast/update_statement.rb +4 -0
  43. data/lib/oracle-sql-parser/ast/where_clause.rb +4 -0
  44. data/lib/oracle-sql-parser/grammar.rb +10 -0
  45. data/lib/oracle-sql-parser/grammar/condition.treetop +224 -0
  46. data/lib/oracle-sql-parser/grammar/delete.treetop +68 -0
  47. data/lib/oracle-sql-parser/grammar/expression.treetop +236 -0
  48. data/lib/oracle-sql-parser/grammar/grammar.treetop +166 -0
  49. data/lib/oracle-sql-parser/grammar/insert.treetop +112 -0
  50. data/lib/oracle-sql-parser/grammar/reserved_word_generator.rb +233 -0
  51. data/lib/oracle-sql-parser/grammar/select.treetop +388 -0
  52. data/lib/oracle-sql-parser/grammar/update.treetop +113 -0
  53. data/lib/oracle-sql-parser/treetop_ext.rb +11 -0
  54. data/lib/oracle-sql-parser/version.rb +3 -0
  55. data/oracle-sql-parser.gemspec +28 -0
  56. metadata +176 -0
@@ -0,0 +1,7 @@
1
+ module OracleSqlParser::Ast
2
+ class Identifier < Hash
3
+ def inspect
4
+ "#<#{self.class.name} #{@ast.inspect}>"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ module OracleSqlParser::Ast
2
+ class InCondition < Hash
3
+ end
4
+ end
@@ -0,0 +1,5 @@
1
+ module OracleSqlParser::Ast
2
+ class InsertStatement < Hash
3
+
4
+ end
5
+ end
@@ -0,0 +1,8 @@
1
+ module OracleSqlParser::Ast
2
+ class Keyword < Hash
3
+ def inspect
4
+ "<##{self.class.name} #{@ast.inspect}>"
5
+ end
6
+ end
7
+ end
8
+
@@ -0,0 +1,4 @@
1
+ module OracleSqlParser::Ast
2
+ class LikeCondition < Hash
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module OracleSqlParser::Ast
2
+ class LogicalCondition < Hash
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module OracleSqlParser::Ast
2
+ class NullCondition < Hash
3
+ end
4
+ end
@@ -0,0 +1,8 @@
1
+ module OracleSqlParser::Ast
2
+ class NumberLiteral < Hash
3
+ def inspect
4
+ "#<#{self.class.name} #{@ast.inspect}>"
5
+ end
6
+ end
7
+ end
8
+
@@ -0,0 +1,4 @@
1
+ module OracleSqlParser::Ast
2
+ class OrderByClause < Hash
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module OracleSqlParser::Ast
2
+ class OrderByClauseItem < Hash
3
+ end
4
+ end
@@ -0,0 +1,17 @@
1
+ module OracleSqlParser::Ast
2
+ class QueryBlock < Hash
3
+ def to_sql
4
+ [
5
+ "select",
6
+ @ast[:hint],
7
+ @ast[:modifier],
8
+ @ast[:select_list],
9
+ "from",
10
+ @ast[:select_sources],
11
+ @ast[:where_clause],
12
+ @ast[:group_by_clause],
13
+ @ast[:model_clause]
14
+ ].compact.map(&:to_sql).join(" ")
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,4 @@
1
+ module OracleSqlParser::Ast
2
+ class RegexpCondition < Hash
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module OracleSqlParser::Ast
2
+ class RollupCubeClause < Hash
3
+ end
4
+ end
@@ -0,0 +1,8 @@
1
+ module OracleSqlParser::Ast
2
+ class SearchedCaseExpression < Base
3
+
4
+ def else_clause=(ast)
5
+ @ast[:else_clause] = ast
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ module OracleSqlParser::Ast
2
+ class SelectStatement < Hash
3
+
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ module OracleSqlParser::Ast
2
+ class SimpleCaseExpression < Hash
3
+ def else_clause=(ast)
4
+ @ast[:else_clause] = ast
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ module OracleSqlParser::Ast
2
+ class SimpleComparisionCondition < Hash
3
+ end
4
+ end
@@ -0,0 +1,5 @@
1
+ module OracleSqlParser::Ast
2
+ class Subquery < Hash
3
+
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ module OracleSqlParser::Ast
2
+ class TextLiteral < Hash
3
+ def inspect
4
+ "#<#{self.class.name} #{@ast.inspect}>"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ module OracleSqlParser::Ast
2
+ class UpdateSetColumn < Hash
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module OracleSqlParser::Ast
2
+ class UpdateStatement < Hash
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module OracleSqlParser::Ast
2
+ class WhereClause < Hash
3
+ end
4
+ end
@@ -0,0 +1,10 @@
1
+ module OracleSqlParser::Grammar
2
+ end
3
+ require "oracle-sql-parser/grammar/reserved_word.rb"
4
+ require "oracle-sql-parser/grammar/expression.rb"
5
+ require "oracle-sql-parser/grammar/condition.rb"
6
+ require "oracle-sql-parser/grammar/select.rb"
7
+ require "oracle-sql-parser/grammar/update.rb"
8
+ require "oracle-sql-parser/grammar/delete.rb"
9
+ require "oracle-sql-parser/grammar/insert.rb"
10
+ require "oracle-sql-parser/grammar/grammar.rb"
@@ -0,0 +1,224 @@
1
+ module OracleSqlParser::Grammar
2
+ grammar Condition
3
+ # where
4
+ rule where_clause
5
+ where_keyword space? logical_condition {
6
+ def ast
7
+ OracleSqlParser::Ast::WhereClause[:condition => logical_condition.ast]
8
+ end
9
+ }
10
+ end
11
+
12
+ rule condition
13
+ comparision_condition /
14
+ floating_point_condition /
15
+ model_condition /
16
+ mutiset_condition /
17
+ pattern_maching_condition /
18
+ range_condition /
19
+ null_condition /
20
+ xml_condition /
21
+ compound_condition /
22
+ between_condition /
23
+ exists_condition /
24
+ in_condition /
25
+ is_of_type_condition {
26
+ def ast
27
+ super
28
+ end
29
+ }
30
+ end
31
+
32
+ rule logical_condition
33
+ (
34
+ op:not_keyword space? right:condition /
35
+ left:condition space? op:and_keyword space? right:condition /
36
+ left:condition space? op:or_keyword space? right:condition /
37
+ cond:condition
38
+ ) {
39
+ def ast
40
+ if respond_to? :op
41
+ if respond_to? :left
42
+ OracleSqlParser::Ast::LogicalCondition[
43
+ :left => left.ast,
44
+ :op => op.ast,
45
+ :right => right.ast]
46
+ else
47
+ OracleSqlParser::Ast::LogicalCondition[
48
+ :op => op.ast,
49
+ :right => right.ast]
50
+ end
51
+ else
52
+ cond.ast
53
+ end
54
+ end
55
+ }
56
+ end
57
+
58
+ rule comparision_condition
59
+ (
60
+ simple_comparision_condition /
61
+ group_comparision_condition
62
+ ) {
63
+ def ast
64
+ super
65
+ end
66
+ }
67
+ end
68
+
69
+ rule group_comparision_condition
70
+ 'group_comparision_condition'
71
+ end
72
+
73
+ rule simple_comparision_condition
74
+ (
75
+ left:expr space? op:('!=' / '^=' / '<>' / '>=' / '<=' / '=' / '>' / '<') space? right:expr /
76
+ '(' space? left:exprs space? ')' op:space? ('!=' / '^=' / '<>' / '=') space? '(' space? right:subquery space? ')'
77
+ ) {
78
+ def ast
79
+ OracleSqlParser::Ast::SimpleComparisionCondition[
80
+ :left => left.ast,
81
+ :op => op.text_value,
82
+ :right => right.ast]
83
+ end
84
+ }
85
+ end
86
+
87
+ rule floating_point_condition
88
+ 'floating_point_condition'
89
+ end
90
+
91
+ rule model_condition
92
+ 'model_condition'
93
+ end
94
+
95
+ rule mutiset_condition
96
+ 'mutiset_condition'
97
+ end
98
+
99
+ rule pattern_maching_condition
100
+ (
101
+ like_condition /
102
+ regexp_like_condition
103
+ ) {
104
+ def ast
105
+ super
106
+ end
107
+ }
108
+ end
109
+
110
+ rule like_condition
111
+ target:ident space
112
+ n:(not_keyword:not_keyword space)?
113
+ like:(like_keyword / like2_keyword / like4_keyword / likec_keyword) space
114
+ text:text_literal
115
+ e:(space escape_keyword space escape_text:text_literal)? {
116
+ def ast
117
+ OracleSqlParser::Ast::LikeCondition[
118
+ :target => target.ast,
119
+ :not => not_keyword.ast,
120
+ :like => like.ast,
121
+ :text => text.ast,
122
+ :escape => escape_text.ast]
123
+ end
124
+
125
+ def not_keyword
126
+ n.elements && n.elements.first
127
+ end
128
+
129
+ def escape_text
130
+ if e.respond_to? :escape_text
131
+ e.escape_text
132
+ end
133
+ end
134
+ }
135
+ end
136
+
137
+ rule regexp_like_condition
138
+ regexp_like_keyword '(' space? target:ident space? ',' space? regexp:text_literal space? ')' {
139
+ def ast
140
+ OracleSqlParser::Ast::RegexpCondition[
141
+ :target => target.ast,
142
+ :regexp => regexp.ast]
143
+ end
144
+ }
145
+ end
146
+
147
+ rule range_condition
148
+ 'range_condition'
149
+ end
150
+
151
+ rule null_condition
152
+ expr space is_keyword space n:(not_keyword space)? null_keyword {
153
+ def ast
154
+ OracleSqlParser::Ast::NullCondition[
155
+ :target => expr.ast,
156
+ :not => not_keyword.ast]
157
+ end
158
+
159
+ def not_keyword
160
+ n.elements && n.elements.first
161
+ end
162
+ }
163
+ end
164
+
165
+ rule xml_condition
166
+ 'xml_condition'
167
+ end
168
+
169
+ rule compound_condition
170
+ '(' logical_condition ')' {
171
+ def ast
172
+ logical_condition.ast
173
+ end
174
+ }
175
+ end
176
+
177
+ rule between_condition
178
+ target:expr space n:(not_keyword space)? between_keyword space from:expr space and_keyword space to:expr {
179
+ def ast
180
+ OracleSqlParser::Ast::BetweenCondition[
181
+ :target => target.ast,
182
+ :not => not_keyword.ast,
183
+ :from => from.ast,
184
+ :to => to.ast
185
+ ]
186
+ end
187
+
188
+ def not_keyword
189
+ n.elements && n.elements.first
190
+ end
191
+ }
192
+ end
193
+
194
+ rule exists_condition
195
+ exists_keyword space? '(' space? subquery space? ')' {
196
+ def ast
197
+ OracleSqlParser::Ast::ExistsCondition[
198
+ :target => subquery.ast
199
+ ]
200
+ end
201
+ }
202
+ end
203
+
204
+ rule in_condition
205
+ target:expr space n:(not_keyword space)? in_keyword space? '(' space? values:( exprs / subquery ) space? ')' {
206
+ def ast
207
+ OracleSqlParser::Ast::InCondition[
208
+ :target => target.ast,
209
+ :not => not_keyword.ast,
210
+ :values => values.ast
211
+ ]
212
+ end
213
+
214
+ def not_keyword
215
+ n.elements && n.elements.first
216
+ end
217
+ }
218
+ end
219
+
220
+ rule is_of_type_condition
221
+ 'is_of_type_condition'
222
+ end
223
+ end
224
+ end
@@ -0,0 +1,68 @@
1
+ module OracleSqlParser::Grammar
2
+ grammar Delete
3
+ rule delete_statement
4
+ delete_keyword space?
5
+ delete_from_clause space?
6
+ delete_condition:delete_condition?
7
+ returning_clause:returning_clause? {
8
+ def ast
9
+ OracleSqlParser::Ast::DeleteStatement[
10
+ :target => delete_from_clause.ast,
11
+ :condition => delete_condition.ast
12
+ ]
13
+ end
14
+ }
15
+ end
16
+
17
+ rule delete_from_clause
18
+ from_keyword space? delete_target {
19
+ def ast
20
+ delete_target.ast
21
+ end
22
+ }
23
+ end
24
+
25
+ rule delete_target
26
+ t:(
27
+ table_reference /
28
+ delete_target_subquery
29
+ ) space?
30
+ t_alias:t_alias? {
31
+ def ast
32
+ OracleSqlParser::Ast::DeleteTarget[
33
+ :name => t.ast,
34
+ :alias => t_alias.ast
35
+ ]
36
+ end
37
+ }
38
+ end
39
+
40
+ rule delete_target_subquery
41
+ (table_keyword space)? '(' space? subquery space? ')' {
42
+ def ast
43
+ subquery.ast
44
+ end
45
+ }
46
+ end
47
+
48
+ rule delete_condition
49
+ where_keyword space?
50
+ where:(
51
+ search_condition /
52
+ current_of
53
+ ) {
54
+ def ast
55
+ where.ast
56
+ end
57
+ }
58
+ end
59
+
60
+ rule current_of
61
+ current_of_keyword space? cursor_name {
62
+ def ast
63
+ cursor_name.ast
64
+ end
65
+ }
66
+ end
67
+ end
68
+ end