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 +5 -5
- data/HISTORY.md +7 -0
- data/docker-compose.yml +23 -0
- data/docker/oracle/Dockerfile +3 -0
- data/docker/test/Dockerfile +21 -0
- data/lib/oracle-sql-parser/ast.rb +3 -0
- data/lib/oracle-sql-parser/ast/fetch.rb +12 -0
- data/lib/oracle-sql-parser/ast/number_literal.rb +1 -1
- data/lib/oracle-sql-parser/ast/offset.rb +11 -0
- data/lib/oracle-sql-parser/ast/row_limiting_clause.rb +10 -0
- data/lib/oracle-sql-parser/ast/subquery.rb +8 -4
- data/lib/oracle-sql-parser/grammar.rb +1 -0
- data/lib/oracle-sql-parser/grammar/condition/comparison.treetop +1 -0
- data/lib/oracle-sql-parser/grammar/expression.treetop +0 -4
- data/lib/oracle-sql-parser/grammar/grammar.treetop +0 -8
- data/lib/oracle-sql-parser/grammar/reserved_word_generator.rb +6 -0
- data/lib/oracle-sql-parser/grammar/select.treetop +4 -1
- data/lib/oracle-sql-parser/grammar/select/row_limit.treetop +49 -0
- data/lib/oracle-sql-parser/version.rb +1 -1
- data/oracle-sql-parser.gemspec +4 -5
- metadata +18 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 98917b9db5c07a4eaca954c8bc6ee03c0df9c0707e7254f95b4e919689ab1c25
|
4
|
+
data.tar.gz: 48d4ad3e9cba9352d6c9f886528db58cf4002e3c461dcb657c8076e6fb2bcf87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84c0018522bb8521891ab21b3cbee518d8545ea8b5b2606ec28e00b87418ba211b17a117fdecab8b69e51baa79ce76b67f4530e440558fd01c1751c0f8dcfffe
|
7
|
+
data.tar.gz: c8785d66eab254a49486ef3e1abaee8d404b16b76f4d086b5217079a522e60c8f4b0e6bca9f87036a0e89283a262010fe533980a60a98ce8c96e0a990518933f
|
data/HISTORY.md
CHANGED
data/docker-compose.yml
ADDED
@@ -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,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'
|
@@ -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(
|
5
|
-
|
6
|
-
|
7
|
-
|
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"
|
@@ -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 ')' /
|
@@ -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
|
data/oracle-sql-parser.gemspec
CHANGED
@@ -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 = '>=
|
22
|
+
spec.required_ruby_version = '>= 2.3.0'
|
23
23
|
spec.add_runtime_dependency "treetop", "~> 1.6"
|
24
|
-
spec.add_development_dependency "bundler", "~> 1
|
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", "~>
|
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.
|
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.
|
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:
|
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
|
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
|
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.
|
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.
|
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.
|
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.
|
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:
|
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
|
-
|
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
|