oracle-sql-parser 0.9.2 → 1.0.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.
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