oracle-sql-parser 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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
  - - ">="