oracle-sql-parser 0.1.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.
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,113 @@
1
+ module OracleSqlParser::Grammar
2
+ grammar Update
3
+ rule update_statement
4
+ update_target_clause space?
5
+ update_set_clause space?
6
+ update_where_clause:update_where_clause?
7
+ returing:returning_clause? {
8
+ def ast
9
+ OracleSqlParser::Ast::UpdateStatement[
10
+ :target => update_target_clause.ast,
11
+ :set => update_set_clause.ast,
12
+ :where_clause => update_where_clause.ast,
13
+ :returning => returing.ast
14
+ ]
15
+ end
16
+ }
17
+ end
18
+
19
+ rule update_target_clause
20
+ update_keyword space update_target_table {
21
+ def ast
22
+ update_target_table.ast
23
+ end
24
+ }
25
+ end
26
+
27
+ rule update_target_table
28
+ query_name:(
29
+ t:table_reference /
30
+ '(' space? t:subquery space? ')' /
31
+ table_keyword space? '(' space? t:subquery space? ')' # need saving table keyword
32
+ ) (space? t_alias:t_alias)? {
33
+ def ast
34
+ if respond_to? :t_alias
35
+ OracleSqlParser::Ast::Hash[:name => query_name.t.ast,
36
+ :alias => t_alias.ast]
37
+ else
38
+ query_name.t.ast
39
+ end
40
+ end
41
+ }
42
+ end
43
+
44
+ rule update_set_clause
45
+ set_keyword space update_target_columns space? {
46
+ def ast
47
+ update_target_columns.ast
48
+ end
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)]
56
+ end
57
+
58
+ def more_update_target_columns
59
+ more.elements.map(&:c)
60
+ end
61
+ }
62
+ end
63
+
64
+ rule update_target_column
65
+ column_name space? op:'=' space? sql_expression {
66
+ def ast
67
+ OracleSqlParser::Ast::UpdateSetColumn[
68
+ :column_name => column_name.ast,
69
+ :op => '=',
70
+ :value => sql_expression.ast
71
+ ]
72
+ end
73
+ }
74
+ end
75
+
76
+ rule update_where_clause
77
+ where_keyword space? update_condition {
78
+ def ast
79
+ OracleSqlParser::Ast::WhereClause[
80
+ :condition => update_condition.ast
81
+ ]
82
+ end
83
+ }
84
+ end
85
+
86
+ rule update_condition
87
+ update_current_of /
88
+ search_condition {
89
+ def ast
90
+ super
91
+ end
92
+ }
93
+ end
94
+
95
+ rule update_current_of
96
+ current_of_keyword space? cursor_name {
97
+ def ast
98
+ OracleSqlParser::Ast::CurrentOf[
99
+ :cursor_name => cursor_name.ast
100
+ ]
101
+ end
102
+ }
103
+ end
104
+
105
+ rule search_condition
106
+ logical_condition
107
+ end
108
+
109
+ rule returning_clause
110
+ 'returning_clause' # not impremented
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,11 @@
1
+ module Treetop::Runtime
2
+ class SyntaxNode
3
+ def ast
4
+ if((elements == nil || elements.empty?) && text_value == "")
5
+ return nil
6
+ end
7
+ OracleSqlParser::Ast::Base.new(text_value)
8
+ end
9
+ end
10
+ end
11
+
@@ -0,0 +1,3 @@
1
+ module OracleSqlParser
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'oracle-sql-parser/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "oracle-sql-parser"
8
+ spec.version = OracleSqlParser::VERSION
9
+ spec.authors = ["Junichiro Kasuya"]
10
+ spec.email = ["junichiro.kasuya@gmail.com"]
11
+
12
+ spec.summary = %q{SQL Parser for Oracle}
13
+ spec.description = %q{SQL Parser for Oracle}
14
+ spec.homepage = "https://github.com/jksy/sql_parser"
15
+ spec.licenses = ["MIT"]
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.files += `echo lib/oracle-sql-parser/grammar/*.rb`.split(" ")
19
+ spec.bindir = "exe"
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_dependency "bundler", "~> 1.10"
24
+ spec.add_dependency "rake", "~> 10.0"
25
+ spec.add_dependency "test-unit", "~> 3.1.2"
26
+ spec.add_dependency "treetop", "~> 1.6.3"
27
+ spec.add_development_dependency "pry-byebug"
28
+ end
metadata ADDED
@@ -0,0 +1,176 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: oracle-sql-parser
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Junichiro Kasuya
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-08-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: test-unit
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.1.2
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.1.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: treetop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.6.3
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.6.3
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: SQL Parser for Oracle
84
+ email:
85
+ - junichiro.kasuya@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - ".travis.yml"
92
+ - Gemfile
93
+ - README.md
94
+ - Rakefile
95
+ - bin/console
96
+ - bin/setup
97
+ - lib/oracle-sql-parser.rb
98
+ - lib/oracle-sql-parser/ast.rb
99
+ - lib/oracle-sql-parser/ast/array.rb
100
+ - lib/oracle-sql-parser/ast/base.rb
101
+ - lib/oracle-sql-parser/ast/between_condition.rb
102
+ - lib/oracle-sql-parser/ast/current_of.rb
103
+ - lib/oracle-sql-parser/ast/delete_statement.rb
104
+ - lib/oracle-sql-parser/ast/delete_target.rb
105
+ - lib/oracle-sql-parser/ast/exists_condition.rb
106
+ - lib/oracle-sql-parser/ast/for_update_clause.rb
107
+ - lib/oracle-sql-parser/ast/function_expression.rb
108
+ - lib/oracle-sql-parser/ast/group_by_clause.rb
109
+ - lib/oracle-sql-parser/ast/hash.rb
110
+ - lib/oracle-sql-parser/ast/identifier.rb
111
+ - lib/oracle-sql-parser/ast/in_condition.rb
112
+ - lib/oracle-sql-parser/ast/insert_statement.rb
113
+ - lib/oracle-sql-parser/ast/keyword.rb
114
+ - lib/oracle-sql-parser/ast/like_condition.rb
115
+ - lib/oracle-sql-parser/ast/logical_condition.rb
116
+ - lib/oracle-sql-parser/ast/null_condition.rb
117
+ - lib/oracle-sql-parser/ast/number_literal.rb
118
+ - lib/oracle-sql-parser/ast/order_by_clause.rb
119
+ - lib/oracle-sql-parser/ast/order_by_clause_item.rb
120
+ - lib/oracle-sql-parser/ast/query_block.rb
121
+ - lib/oracle-sql-parser/ast/regexp_condition.rb
122
+ - lib/oracle-sql-parser/ast/rollup_cube_clause.rb
123
+ - lib/oracle-sql-parser/ast/searched_case_expression.rb
124
+ - lib/oracle-sql-parser/ast/select_statement.rb
125
+ - lib/oracle-sql-parser/ast/simple_case_expression.rb
126
+ - lib/oracle-sql-parser/ast/simple_comparision_condition.rb
127
+ - lib/oracle-sql-parser/ast/subquery.rb
128
+ - lib/oracle-sql-parser/ast/text_literal.rb
129
+ - lib/oracle-sql-parser/ast/update_set_column.rb
130
+ - lib/oracle-sql-parser/ast/update_statement.rb
131
+ - lib/oracle-sql-parser/ast/where_clause.rb
132
+ - lib/oracle-sql-parser/grammar.rb
133
+ - lib/oracle-sql-parser/grammar/condition.rb
134
+ - lib/oracle-sql-parser/grammar/condition.treetop
135
+ - lib/oracle-sql-parser/grammar/delete.rb
136
+ - lib/oracle-sql-parser/grammar/delete.treetop
137
+ - lib/oracle-sql-parser/grammar/expression.rb
138
+ - lib/oracle-sql-parser/grammar/expression.treetop
139
+ - lib/oracle-sql-parser/grammar/grammar.rb
140
+ - lib/oracle-sql-parser/grammar/grammar.treetop
141
+ - lib/oracle-sql-parser/grammar/insert.rb
142
+ - lib/oracle-sql-parser/grammar/insert.treetop
143
+ - lib/oracle-sql-parser/grammar/reserved_word.rb
144
+ - lib/oracle-sql-parser/grammar/reserved_word_generator.rb
145
+ - lib/oracle-sql-parser/grammar/select.rb
146
+ - lib/oracle-sql-parser/grammar/select.treetop
147
+ - lib/oracle-sql-parser/grammar/update.rb
148
+ - lib/oracle-sql-parser/grammar/update.treetop
149
+ - lib/oracle-sql-parser/treetop_ext.rb
150
+ - lib/oracle-sql-parser/version.rb
151
+ - oracle-sql-parser.gemspec
152
+ homepage: https://github.com/jksy/sql_parser
153
+ licenses:
154
+ - MIT
155
+ metadata: {}
156
+ post_install_message:
157
+ rdoc_options: []
158
+ require_paths:
159
+ - lib
160
+ required_ruby_version: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ required_rubygems_version: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ requirements: []
171
+ rubyforge_project:
172
+ rubygems_version: 2.4.5
173
+ signing_key:
174
+ specification_version: 4
175
+ summary: SQL Parser for Oracle
176
+ test_files: []