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 +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
|