oracle-sql-parser 0.1.0 → 0.1.1
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 +1 -0
- data/README.md +13 -10
- data/Rakefile +30 -16
- data/lib/oracle-sql-parser/ast/identifier.rb +12 -0
- data/lib/oracle-sql-parser/grammar/grammar.treetop +27 -3
- data/lib/oracle-sql-parser/version.rb +1 -1
- data/oracle-sql-parser.gemspec +1 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82f6a4205d237428121e76ccf0673b91fa2593eb
|
4
|
+
data.tar.gz: c171a4f9d250597bb80c751fbe4d34a3b876d06e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f893677527f57c266f24dac86b181eb25dbde97706e1dc9af5adc3f3a39184dbbd1ba9c6466878a6e643c5d43638d27ad2068a6ab676851306ed4781a65bae86
|
7
|
+
data.tar.gz: cfac1b47be19e92e10072fab6386e8edcd5494e61d201d3889aa9c3d27feb39de05e7158e0dbd2d33aa40d4331bb07df4b50e40de70866b0d6af880e9891506d
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# OracleSqlParser
|
2
2
|
|
3
3
|
SQL Parser for Oracle
|
4
4
|
|
@@ -7,7 +7,7 @@ SQL Parser for Oracle
|
|
7
7
|
Add this line to your application's Gemfile:
|
8
8
|
|
9
9
|
```ruby
|
10
|
-
gem '
|
10
|
+
gem 'oracle-sql-parser'
|
11
11
|
```
|
12
12
|
|
13
13
|
And then execute:
|
@@ -16,13 +16,13 @@ And then execute:
|
|
16
16
|
|
17
17
|
Or install it yourself as:
|
18
18
|
|
19
|
-
$ gem install
|
19
|
+
$ gem install oracle-sql-parser
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
23
|
```ruby
|
24
24
|
query = "select 1 from dual"
|
25
|
-
parser =
|
25
|
+
parser = OracleSqlParser::Grammar::GrammarParser.new
|
26
26
|
syntax_tree = parser.parse query
|
27
27
|
if syntax_tree
|
28
28
|
message = "\n#{query}\n" + " " * (parser.failure_column.to_i-1) + "*\n"
|
@@ -32,16 +32,16 @@ ast = syntax_tree.ast
|
|
32
32
|
```
|
33
33
|
<pre>
|
34
34
|
irb(main):008:0> ast
|
35
|
-
=> #<
|
36
|
-
:subquery => #<
|
37
|
-
:query_block => #<
|
35
|
+
=> #<OracleSqlParser::Ast::SelectStatement
|
36
|
+
:subquery => #<OracleSqlParser::Ast::Subquery
|
37
|
+
:query_block => #<OracleSqlParser::Ast::QueryBlock
|
38
38
|
:hint => nil,
|
39
39
|
:modifier => nil,
|
40
|
-
:select_list => #<
|
41
|
-
#<
|
40
|
+
:select_list => #<OracleSqlParser::Ast::Array [
|
41
|
+
#<OracleSqlParser::Ast::NumberLiteral {:value=>"1"}>
|
42
42
|
]>
|
43
43
|
,
|
44
|
-
:select_sources => #<
|
44
|
+
:select_sources => #<OracleSqlParser::Ast::Identifier {:name=>"dual"}>,
|
45
45
|
:where_clause => nil,
|
46
46
|
:group_by_clause => nil,
|
47
47
|
:model_clause => nil}>
|
@@ -56,3 +56,6 @@ irb(main):008:0> ast
|
|
56
56
|
|
57
57
|
Bug reports and pull requests are welcome on GitHub at https://github.com/jksy/sql_parser.
|
58
58
|
|
59
|
+
## Test Page
|
60
|
+
|
61
|
+
http://dev.jksy.org/
|
data/Rakefile
CHANGED
@@ -2,29 +2,26 @@ require "bundler/gem_tasks"
|
|
2
2
|
require 'rake'
|
3
3
|
require 'rake/testtask'
|
4
4
|
|
5
|
+
GRAMMAR_FILES = FileList['lib/oracle-sql-parser/grammar/*.treetop']
|
6
|
+
|
5
7
|
task :gen do
|
6
|
-
|
7
|
-
tt "lib/oracle-sql-parser/grammar/reserved_word.treetop"
|
8
|
-
tt "lib/oracle-sql-parser/grammar/expression.treetop"
|
9
|
-
tt "lib/oracle-sql-parser/grammar/condition.treetop"
|
10
|
-
tt "lib/oracle-sql-parser/grammar/select.treetop"
|
11
|
-
tt "lib/oracle-sql-parser/grammar/update.treetop"
|
12
|
-
tt "lib/oracle-sql-parser/grammar/delete.treetop"
|
13
|
-
tt "lib/oracle-sql-parser/grammar/insert.treetop"
|
14
|
-
tt "lib/oracle-sql-parser/grammar/grammar.treetop"
|
8
|
+
generate_parser_files(false)
|
15
9
|
end
|
16
10
|
|
17
|
-
|
18
|
-
|
11
|
+
task :gen_force do
|
12
|
+
generate_parser_files(true)
|
13
|
+
end
|
19
14
|
|
20
|
-
|
21
|
-
|
22
|
-
|
15
|
+
task :clean do
|
16
|
+
GRAMMAR_FILES.each do |f|
|
17
|
+
file = "#{f.gsub(/\.treetop$/,'')}.rb"
|
18
|
+
File.unlink file if File.exists? file
|
23
19
|
end
|
24
20
|
end
|
25
21
|
|
26
|
-
|
27
|
-
|
22
|
+
task :build_gem => [:gen_force] do
|
23
|
+
sh 'gem build oracle-sql-parser.gemspec'
|
24
|
+
end
|
28
25
|
|
29
26
|
Rake::TestTask.new do |t|
|
30
27
|
t.libs << "test"
|
@@ -39,3 +36,20 @@ Rake::TestTask.new do |t|
|
|
39
36
|
t.verbose = true
|
40
37
|
end
|
41
38
|
|
39
|
+
|
40
|
+
def generate_parser_files(force = false)
|
41
|
+
sh "ruby lib/oracle-sql-parser/grammar/reserved_word_generator.rb"
|
42
|
+
GRAMMAR_FILES.each do |f|
|
43
|
+
tt(f, force)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def tt(f, force = false)
|
48
|
+
output_file_name = "#{f.gsub(/\.treetop$/,'')}.rb"
|
49
|
+
|
50
|
+
force = true unless File.exists?(output_file_name)
|
51
|
+
if force || File::Stat.new(f).mtime >= File::Stat.new(output_file_name).mtime
|
52
|
+
sh "tt #{f} -f -o #{output_file_name}"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
@@ -21,9 +21,29 @@ module OracleSqlParser::Grammar
|
|
21
21
|
end
|
22
22
|
|
23
23
|
rule ident
|
24
|
-
!keyword
|
24
|
+
!keyword
|
25
|
+
i:(
|
26
|
+
c:ident_content_with_double_quote /
|
27
|
+
c:ident_content
|
28
|
+
) {
|
29
|
+
def ast
|
30
|
+
i.c.ast
|
31
|
+
end
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
rule ident_content
|
36
|
+
[a-zA-Z] [a-zA-Z0-9_]* {
|
37
|
+
def ast
|
38
|
+
OracleSqlParser::Ast::Identifier[:name => text_value]
|
39
|
+
end
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
rule ident_content_with_double_quote
|
44
|
+
'"' name:[^"]* '"' {
|
25
45
|
def ast
|
26
|
-
OracleSqlParser::Ast::Identifier
|
46
|
+
OracleSqlParser::Ast::Identifier[:name => name.text_value, :quoted => true]
|
27
47
|
end
|
28
48
|
}
|
29
49
|
end
|
@@ -118,7 +138,11 @@ module OracleSqlParser::Grammar
|
|
118
138
|
table_name
|
119
139
|
) ('@' dblink)? {
|
120
140
|
def ast
|
121
|
-
|
141
|
+
if(!respond_to?(:schema_name) || !respond_to?(:dblink))
|
142
|
+
OracleSqlParser::Ast::Identifier.new(:name => text_value)
|
143
|
+
else
|
144
|
+
table_name.ast
|
145
|
+
end
|
122
146
|
end
|
123
147
|
}
|
124
148
|
end
|
data/oracle-sql-parser.gemspec
CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
|
23
|
+
spec.required_ruby_version = '>= 1.9.0'
|
23
24
|
spec.add_dependency "bundler", "~> 1.10"
|
24
25
|
spec.add_dependency "rake", "~> 10.0"
|
25
26
|
spec.add_dependency "test-unit", "~> 3.1.2"
|
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.1.
|
4
|
+
version: 0.1.1
|
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-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -161,7 +161,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
161
161
|
requirements:
|
162
162
|
- - ">="
|
163
163
|
- !ruby/object:Gem::Version
|
164
|
-
version:
|
164
|
+
version: 1.9.0
|
165
165
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
166
|
requirements:
|
167
167
|
- - ">="
|