oracle-sql-parser 0.9.2 → 1.0.0

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
- SHA1:
3
- metadata.gz: 14516df0bf4d0246870b6c5562a6d15ad728d722
4
- data.tar.gz: d065209079f19de48af5fff9b16084b2218303ea
2
+ SHA256:
3
+ metadata.gz: 98917b9db5c07a4eaca954c8bc6ee03c0df9c0707e7254f95b4e919689ab1c25
4
+ data.tar.gz: 48d4ad3e9cba9352d6c9f886528db58cf4002e3c461dcb657c8076e6fb2bcf87
5
5
  SHA512:
6
- metadata.gz: ac8b4437bc7d8c1128cfe3301a81962006813c17d6f8ec71ea12ebc4499188d8835a82c9e438229b936928f2c531668f8b477fef1b04b0213b686d1a59db3cb1
7
- data.tar.gz: 94e34a58144479026131f0b75ead2f38fb6ce80caadac5bbd4078621d05eabf5c337734a0b4aea2d47146a79ee9ecd28d1dee161e908f7108d6b9ed30dcc5b59
6
+ metadata.gz: 84c0018522bb8521891ab21b3cbee518d8545ea8b5b2606ec28e00b87418ba211b17a117fdecab8b69e51baa79ce76b67f4530e440558fd01c1751c0f8dcfffe
7
+ data.tar.gz: c8785d66eab254a49486ef3e1abaee8d404b16b76f4d086b5217079a522e60c8f4b0e6bca9f87036a0e89283a262010fe533980a60a98ce8c96e0a990518933f
data/HISTORY.md CHANGED
@@ -1,3 +1,10 @@
1
+ ### 0.9.2
2
+ * bug fix method not found "keys" on hash
3
+
4
+ ### 0.9.1
5
+ * Syntax
6
+ * Three or more ANDs in WHERE clause fails parsing https://github.com/jksy/sql_parser/issues/16
7
+
1
8
  ### 0.9.0
2
9
  * Syntax
3
10
  * added cursor expression
@@ -0,0 +1,23 @@
1
+ version: '3'
2
+
3
+ services:
4
+ oracle:
5
+ image: jksy/oracle-database:18.4.0-xe
6
+ build: ./docker/oracle
7
+ shm_size: 1g
8
+ environment:
9
+ ORACLE_SID: XE
10
+ ORACLE_PWD: secret
11
+ ORACLE_CHARACTERSET: AL32UTF8
12
+ ports:
13
+ - 11521:1521
14
+
15
+ test:
16
+ image: jksy/ruby-with-oracle-instant-client:2.6.5
17
+ build: ./docker/test
18
+ volumes:
19
+ - ".:/opt/work"
20
+ # command: /bin/bash --login -c 'sleep 600'
21
+ command: /bin/bash --login -c 'cd /opt/work && rbenv exec bundle update --bundler && rbenv exec bundle install --path ./vendor && bundle exec rake gen; bundle exec rake test ; /bin/bash'
22
+
23
+
@@ -0,0 +1,3 @@
1
+ FROM oracle/database:18.4.0-xe
2
+
3
+ EXPOSE 11521
@@ -0,0 +1,21 @@
1
+ FROM oraclelinux:7-slim as instantclient
2
+
3
+ ENV VERSION="2.6.5"
4
+
5
+ RUN yum install -y oracle-release-el7
6
+ RUN yum update -y
7
+ RUN yum install -y --enablerepo=ol7_oracle_instantclient oracle-instantclient18.3-basic oracle-instantclient18.3-devel oracle-instantclient18.3-sqlplus && \
8
+ yum clean all
9
+
10
+ # install ruby
11
+ RUN yum -y install git openssl-devel readline-devel zlib-devel libcurl-devel bzip2 gcc make
12
+ RUN git clone https://github.com/sstephenson/rbenv.git /usr/local/rbenv
13
+ RUN git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build
14
+ RUN echo 'export RBENV_ROOT="/usr/local/rbenv"' >> /etc/profile.d/rbenv.sh
15
+ RUN echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> /etc/profile.d/rbenv.sh
16
+ RUN echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh
17
+
18
+ RUN source /etc/profile.d/rbenv.sh; rbenv install ${VERSION} && rbenv global ${VERSION}
19
+ RUN source /etc/profile.d/rbenv.sh; gem update --system && gem install bundler
20
+
21
+ RUN echo 'export LD_LIBRARY_PATH=/usr/lib/oracle/18.3/client64/lib/' >> /etc/profile.d/oracle.sh
@@ -13,6 +13,9 @@ require 'oracle-sql-parser/ast/query_block.rb'
13
13
  require 'oracle-sql-parser/ast/inner_cross_join_clause.rb'
14
14
  require 'oracle-sql-parser/ast/inner_join_clause.rb'
15
15
  require 'oracle-sql-parser/ast/outer_join_clause.rb'
16
+ require 'oracle-sql-parser/ast/row_limiting_clause.rb'
17
+ require 'oracle-sql-parser/ast/fetch.rb'
18
+ require 'oracle-sql-parser/ast/offset.rb'
16
19
  require 'oracle-sql-parser/ast/on_clause.rb'
17
20
  require 'oracle-sql-parser/ast/using_clause.rb'
18
21
  require 'oracle-sql-parser/ast/cross_natural_join_clause.rb'
@@ -0,0 +1,12 @@
1
+ module OracleSqlParser::Ast
2
+ class Fetch < Hash
3
+ def to_sql(options = {})
4
+ @ast.values_at(
5
+ :fetch, :first,
6
+ :rowcount, :percentage, :percentage_keyword,
7
+ :rows, :only, :with, :ties,
8
+ ).compact.map(&:to_sql).join(' ')
9
+ end
10
+ end
11
+ end
12
+
@@ -5,7 +5,7 @@ module OracleSqlParser::Ast
5
5
  end
6
6
 
7
7
  def to_decimal
8
- BigDecimal.new(@ast[:value])
8
+ BigDecimal(@ast[:value])
9
9
  end
10
10
  end
11
11
  end
@@ -0,0 +1,11 @@
1
+ module OracleSqlParser::Ast
2
+ class Offset < Hash
3
+ def to_sql(options = {})
4
+ @ast.values_at(
5
+ :offset_keyword, :offset,
6
+ :row_keyword, :rows_keyword,
7
+ ).compact.map(&:to_sql).join(' ')
8
+ end
9
+ end
10
+ end
11
+
@@ -0,0 +1,10 @@
1
+ module OracleSqlParser::Ast
2
+ class RowLimitingClause < Hash
3
+ def to_sql(options = {})
4
+ @ast.values_at(
5
+ :offset,
6
+ :fetch,
7
+ ).compact.map(&:to_sql).join(' ')
8
+ end
9
+ end
10
+ end
@@ -1,10 +1,14 @@
1
1
  module OracleSqlParser::Ast
2
2
  class Subquery < Hash
3
3
  def to_sql(options = {})
4
- result = @ast.values_at(:query_block,
5
- :subqueries,
6
- :subquery,
7
- :order_by_clause).map(&:to_sql)
4
+ result = @ast.values_at(
5
+ :query_block,
6
+ :subqueries,
7
+ :subquery,
8
+ :order_by_clause,
9
+ :row_limiting_clause,
10
+ ).map(&:to_sql)
11
+
8
12
  if @ast[:has_parenthesis]
9
13
  result.unshift('(')
10
14
  result.push(')')
@@ -27,6 +27,7 @@ require "oracle-sql-parser/grammar/select/join.rb"
27
27
  require "oracle-sql-parser/grammar/select/for_update.rb"
28
28
  require "oracle-sql-parser/grammar/select/union.rb"
29
29
  require "oracle-sql-parser/grammar/select/query_block.rb"
30
+ require "oracle-sql-parser/grammar/select/row_limit.rb"
30
31
  require "oracle-sql-parser/grammar/select.rb"
31
32
  require "oracle-sql-parser/grammar/update.rb"
32
33
  require "oracle-sql-parser/grammar/delete.rb"
@@ -12,6 +12,7 @@ module OracleSqlParser::Grammar::Condition
12
12
  end
13
13
 
14
14
  rule group_comparison_condition
15
+ # not implemented
15
16
  'group_comparison_condition'
16
17
  end
17
18
 
@@ -78,10 +78,6 @@ module OracleSqlParser::Grammar
78
78
  'json_object_access_expression' # not implemented
79
79
  end
80
80
 
81
- rule object_access_expression
82
- 'object_access_expression' # not implemented
83
- end
84
-
85
81
  rule expression_list # from grouping_expression_list
86
82
  (
87
83
  '(' e:exprs ')' /
@@ -150,14 +150,6 @@ module OracleSqlParser::Grammar
150
150
  }
151
151
  end
152
152
 
153
- rule t_alias
154
- ident {
155
- def ast
156
- super
157
- end
158
- }
159
- end
160
-
161
153
  rule current_of
162
154
  current_of_keyword space? cursor_name {
163
155
  def ast
@@ -130,6 +130,7 @@ EOS
130
130
  'ESCAPE',
131
131
  'EXCLUSIVE',
132
132
  'EXISTS',
133
+ 'FETCH',
133
134
  'FILE',
134
135
  'FIRST',
135
136
  'FLOAT',
@@ -173,6 +174,7 @@ EOS
173
174
  'NAN',
174
175
  'NATURAL',
175
176
  'NESTED_TABLE_ID',
177
+ 'NEXT',
176
178
  'NEXTVAL',
177
179
  'NOAUDIT',
178
180
  'NOCOMPRESS',
@@ -183,6 +185,7 @@ EOS
183
185
  'NUMBER',
184
186
  'OF',
185
187
  'OFFLINE',
188
+ 'OFFSET',
186
189
  'ON',
187
190
  'ONLINE',
188
191
  'ONLY',
@@ -191,6 +194,7 @@ EOS
191
194
  'ORDER',
192
195
  'OUTER',
193
196
  'PCTFREE',
197
+ 'PERCENT',
194
198
  'PRIOR',
195
199
  'PRIVILEGES',
196
200
  'PUBLIC',
@@ -222,6 +226,7 @@ EOS
222
226
  'SYSTIMESTAMP',
223
227
  'TABLE',
224
228
  'THEN',
229
+ 'TIES',
225
230
  'TIME',
226
231
  'TO',
227
232
  'TRIGGER',
@@ -241,6 +246,7 @@ EOS
241
246
  'WHEN',
242
247
  'WHENEVER',
243
248
  'WHERE',
249
+ 'WITH',
244
250
  'YEAR',
245
251
  'ZONE',
246
252
  ]
@@ -6,6 +6,7 @@ module OracleSqlParser::Grammar
6
6
  include OracleSqlParser::Grammar::Select::ForUpdate
7
7
  include OracleSqlParser::Grammar::Select::Union
8
8
  include OracleSqlParser::Grammar::Select::QueryBlock
9
+ include OracleSqlParser::Grammar::Select::RowLimit
9
10
 
10
11
  rule select_statement
11
12
  space? subquery for_update:(space for_update_clause)? space? {
@@ -24,7 +25,8 @@ module OracleSqlParser::Grammar
24
25
  query_block !(space union_or_intersect_or_minus) /
25
26
  subqueries:subqueries_with_union
26
27
  )
27
- order:(space order_by_clause)? {
28
+ order:(space order_by_clause)?
29
+ row_limit:(space row_limiting_clause:row_limiting_clause)? {
28
30
  def ast
29
31
  OracleSqlParser::Ast::Subquery[
30
32
  :has_parenthesis => query.try(:left_parenthesis) ? true : nil,
@@ -32,6 +34,7 @@ module OracleSqlParser::Grammar
32
34
  :subqueries => query.try(:subqueries).ast,
33
35
  :subquery => query.try(:subquery).ast,
34
36
  :order_by_clause => order.try(:order_by_clause).ast,
37
+ :row_limiting_clause => row_limit.try(:row_limiting_clause).ast,
35
38
  ]
36
39
  end
37
40
  }
@@ -0,0 +1,49 @@
1
+ module OracleSqlParser::Grammar::Select
2
+ grammar RowLimit
3
+ rule row_limiting_clause
4
+ fetch:fetch {
5
+ def ast
6
+ OracleSqlParser::Ast::RowLimitingClause[
7
+ :fetch => fetch.ast
8
+ ]
9
+ end
10
+ }
11
+ end
12
+
13
+ rule offset
14
+ offset_keyword space offset:number_literal space row:(row_keyword / rows_keyword) {
15
+ def ast
16
+ OracleSqlParser::Ast::Offset[
17
+ :offset_keyword => offset_keyword,
18
+ :offset => offset,
19
+ :row_keyword => row.try(:row_keyword),
20
+ :rows_keyword => row.try(:rows_keyword),
21
+ ]
22
+ end
23
+ }
24
+ end
25
+
26
+ rule fetch
27
+ fetch_keyword space
28
+ first:(first_keyword / next_keyword) space
29
+ rowcount:(rowcount:integer / percentage:integer percentage_keyword) space
30
+ rows:(row_keyword / rows_keyword) space
31
+ only:(only_keyword:only_keyword / with_keyword:with_keyword space ties_keyword:ties_keyword)
32
+ {
33
+ def ast
34
+ OracleSqlParser::Ast::Fetch[
35
+ fetch: fetch_keyword.ast,
36
+ first: first.ast,
37
+ rowcount: rowcount.try(:rowcount).ast,
38
+ percentage: rowcount.try(:percentage).ast,
39
+ percentage_keyword: rowcount.try(:percentage_keyword).ast,
40
+ rows: rows.ast,
41
+ only: only.try(:only_keyword).ast,
42
+ with: only.try(:with_keyword).ast,
43
+ ties: only.try(:ties_keyword).ast,
44
+ ]
45
+ end
46
+ }
47
+ end
48
+ end
49
+ end
@@ -1,3 +1,3 @@
1
1
  module OracleSqlParser
2
- VERSION = "0.9.2"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -19,14 +19,13 @@ Gem::Specification.new do |spec|
19
19
  spec.files += `echo lib/oracle-sql-parser/grammar/*.rb`.split(" ")
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.required_ruby_version = '>= 1.9.3'
22
+ spec.required_ruby_version = '>= 2.3.0'
23
23
  spec.add_runtime_dependency "treetop", "~> 1.6"
24
- spec.add_development_dependency "bundler", "~> 1.10"
24
+ spec.add_development_dependency "bundler", "~> 2.1"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
26
  spec.add_development_dependency "test-unit", "~> 3.1"
27
- spec.add_development_dependency "activerecord", "~> 4.2"
28
- spec.add_development_dependency "activerecord-oracle_enhanced-adapter", "~> 1.6.0"
27
+ spec.add_development_dependency "activerecord-oracle_enhanced-adapter", "~> 1.8.2"
29
28
  spec.add_development_dependency "ruby-oci8", "~> 2.0"
30
- spec.add_development_dependency "pry-byebug", "3.4.0" if RUBY_VERSION >= '2.0.0'
29
+ spec.add_development_dependency "pry-byebug", "3.7.0" if RUBY_VERSION >= '2.0.0'
31
30
  spec.add_development_dependency "colorize", "~> 0.8"
32
31
  end
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.9.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Junichiro Kasuya
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-29 00:00:00.000000000 Z
11
+ date: 2020-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: treetop
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.10'
33
+ version: '2.1'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.10'
40
+ version: '2.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -66,34 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.1'
69
- - !ruby/object:Gem::Dependency
70
- name: activerecord
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '4.2'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '4.2'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: activerecord-oracle_enhanced-adapter
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: 1.6.0
75
+ version: 1.8.2
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: 1.6.0
82
+ version: 1.8.2
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: ruby-oci8
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -114,14 +100,14 @@ dependencies:
114
100
  requirements:
115
101
  - - '='
116
102
  - !ruby/object:Gem::Version
117
- version: 3.4.0
103
+ version: 3.7.0
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
108
  - - '='
123
109
  - !ruby/object:Gem::Version
124
- version: 3.4.0
110
+ version: 3.7.0
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: colorize
127
113
  requirement: !ruby/object:Gem::Requirement
@@ -148,6 +134,9 @@ files:
148
134
  - HISTORY.md
149
135
  - README.md
150
136
  - Rakefile
137
+ - docker-compose.yml
138
+ - docker/oracle/Dockerfile
139
+ - docker/test/Dockerfile
151
140
  - lib/oracle-sql-parser.rb
152
141
  - lib/oracle-sql-parser/ast.rb
153
142
  - lib/oracle-sql-parser/ast/array.rb
@@ -162,6 +151,7 @@ files:
162
151
  - lib/oracle-sql-parser/ast/delete_statement.rb
163
152
  - lib/oracle-sql-parser/ast/delete_target.rb
164
153
  - lib/oracle-sql-parser/ast/exists_condition.rb
154
+ - lib/oracle-sql-parser/ast/fetch.rb
165
155
  - lib/oracle-sql-parser/ast/floating_point_condition.rb
166
156
  - lib/oracle-sql-parser/ast/for_update_clause.rb
167
157
  - lib/oracle-sql-parser/ast/function_expression.rb
@@ -183,6 +173,7 @@ files:
183
173
  - lib/oracle-sql-parser/ast/member_condition.rb
184
174
  - lib/oracle-sql-parser/ast/null_condition.rb
185
175
  - lib/oracle-sql-parser/ast/number_literal.rb
176
+ - lib/oracle-sql-parser/ast/offset.rb
186
177
  - lib/oracle-sql-parser/ast/on_clause.rb
187
178
  - lib/oracle-sql-parser/ast/only_and_type.rb
188
179
  - lib/oracle-sql-parser/ast/order_by_clause.rb
@@ -191,6 +182,7 @@ files:
191
182
  - lib/oracle-sql-parser/ast/query_block.rb
192
183
  - lib/oracle-sql-parser/ast/regexp_condition.rb
193
184
  - lib/oracle-sql-parser/ast/rollup_cube_clause.rb
185
+ - lib/oracle-sql-parser/ast/row_limiting_clause.rb
194
186
  - lib/oracle-sql-parser/ast/searched_case_expression.rb
195
187
  - lib/oracle-sql-parser/ast/select_column.rb
196
188
  - lib/oracle-sql-parser/ast/select_statement.rb
@@ -266,6 +258,8 @@ files:
266
258
  - lib/oracle-sql-parser/grammar/select/order.treetop
267
259
  - lib/oracle-sql-parser/grammar/select/query_block.rb
268
260
  - lib/oracle-sql-parser/grammar/select/query_block.treetop
261
+ - lib/oracle-sql-parser/grammar/select/row_limit.rb
262
+ - lib/oracle-sql-parser/grammar/select/row_limit.treetop
269
263
  - lib/oracle-sql-parser/grammar/select/union.rb
270
264
  - lib/oracle-sql-parser/grammar/select/union.treetop
271
265
  - lib/oracle-sql-parser/grammar/update.rb
@@ -288,15 +282,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
288
282
  requirements:
289
283
  - - ">="
290
284
  - !ruby/object:Gem::Version
291
- version: 1.9.3
285
+ version: 2.3.0
292
286
  required_rubygems_version: !ruby/object:Gem::Requirement
293
287
  requirements:
294
288
  - - ">="
295
289
  - !ruby/object:Gem::Version
296
290
  version: '0'
297
291
  requirements: []
298
- rubyforge_project:
299
- rubygems_version: 2.6.12
292
+ rubygems_version: 3.0.3
300
293
  signing_key:
301
294
  specification_version: 4
302
295
  summary: SQL Parser for Oracle