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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ec4ae7a3a58995d3526662584d0bfce9b1e8e12a
4
- data.tar.gz: aeb8943ab1e0d845be0d9413dae2390073757d2d
3
+ metadata.gz: 82f6a4205d237428121e76ccf0673b91fa2593eb
4
+ data.tar.gz: c171a4f9d250597bb80c751fbe4d34a3b876d06e
5
5
  SHA512:
6
- metadata.gz: 6be02b972cc72b5b2d8cdb5e958bc1378156cda08f9bec5ac751bda59bee71aa762692e6da98c03e612e0841489045df6c16cbc34239128fbdb20079bff28f95
7
- data.tar.gz: 701d2a80fc8a992bd139f8669922109899fcb075ae7cec80b57cb2de5339fc357dde2cc0fa5ff6425fc57c11cdaabd62b43ca97d5231fddb18554f5ed2854f2f
6
+ metadata.gz: f893677527f57c266f24dac86b181eb25dbde97706e1dc9af5adc3f3a39184dbbd1ba9c6466878a6e643c5d43638d27ad2068a6ab676851306ed4781a65bae86
7
+ data.tar.gz: cfac1b47be19e92e10072fab6386e8edcd5494e61d201d3889aa9c3d27feb39de05e7158e0dbd2d33aa40d4331bb07df4b50e40de70866b0d6af880e9891506d
data/.gitignore CHANGED
@@ -17,3 +17,4 @@ lib/oracle-sql-parser/grammar/reserved_word.treetop
17
17
  lib/oracle-sql-parser/grammar/select.rb
18
18
  lib/oracle-sql-parser/grammar/update.rb
19
19
  *.sw?
20
+ *.gem
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # SqlParser
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 'sql_parser'
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 sql_parser
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 = SqlParser::Oracle::OracleParser.new
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
- => #&lt;SqlParser::Ast::SelectStatement
36
- :subquery =&gt; #&lt;SqlParser::Ast::Subquery
37
- :query_block =&gt; #&lt;SqlParser::Ast::QueryBlock
35
+ => #&lt;OracleSqlParser::Ast::SelectStatement
36
+ :subquery =&gt; #&lt;OracleSqlParser::Ast::Subquery
37
+ :query_block =&gt; #&lt;OracleSqlParser::Ast::QueryBlock
38
38
  :hint =&gt; nil,
39
39
  :modifier =&gt; nil,
40
- :select_list =&gt; #&lt;SqlParser::Ast::Array [
41
- #&lt;SqlParser::Ast::NumberLiteral {:value=&gt;"1"}>
40
+ :select_list =&gt; #&lt;OracleSqlParser::Ast::Array [
41
+ #&lt;OracleSqlParser::Ast::NumberLiteral {:value=&gt;"1"}>
42
42
  ]>
43
43
  ,
44
- :select_sources =&gt; #&lt;SqlParser::Ast::Identifier {:name=&gt;"dual"}>,
44
+ :select_sources =&gt; #&lt;OracleSqlParser::Ast::Identifier {:name=&gt;"dual"}>,
45
45
  :where_clause =&gt; nil,
46
46
  :group_by_clause =&gt; nil,
47
47
  :model_clause =&gt; 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
- sh "ruby lib/oracle-sql-parser/grammar/reserved_word_generator.rb"
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
- def tt(f, force = false)
18
- output_file_name = "#{f.gsub(/\.treetop$/,'')}.rb"
11
+ task :gen_force do
12
+ generate_parser_files(true)
13
+ end
19
14
 
20
- force = true unless File.exists?(output_file_name)
21
- if force || File::Stat.new(f).mtime >= File::Stat.new(output_file_name).mtime
22
- sh "tt #{f} -f -o #{output_file_name}"
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
- #task :test => [:generate]
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
+
@@ -3,5 +3,17 @@ module OracleSqlParser::Ast
3
3
  def inspect
4
4
  "#<#{self.class.name} #{@ast.inspect}>"
5
5
  end
6
+
7
+ def quoted?
8
+ @ast[:quoted] == true
9
+ end
10
+
11
+ def to_sql
12
+ if quoted?
13
+ "\"#{@ast[:name]}\""
14
+ else
15
+ @ast[:name]
16
+ end
17
+ end
6
18
  end
7
19
  end
@@ -21,9 +21,29 @@ module OracleSqlParser::Grammar
21
21
  end
22
22
 
23
23
  rule ident
24
- !keyword [a-zA-Z] [a-zA-Z0-9_]* {
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.new(:name => text_value)
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
- OracleSqlParser::Ast::Identifier.new(:name => text_value)
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
@@ -1,3 +1,3 @@
1
1
  module OracleSqlParser
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -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.0
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-03 00:00:00.000000000 Z
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: '0'
164
+ version: 1.9.0
165
165
  required_rubygems_version: !ruby/object:Gem::Requirement
166
166
  requirements:
167
167
  - - ">="