presto_sql_parser 0.1.0 → 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 +4 -4
- data/ChangeLog +27 -0
- data/README.md +42 -5
- data/build.gradle +1 -1
- data/lib/presto_sql_parser.rb +10 -1
- data/lib/presto_sql_parser/support_process.rb +12 -10
- data/lib/presto_sql_parser/version.rb +1 -1
- data/presto_sql_parser.gemspec +3 -3
- metadata +14 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ab8a614effaa4824c265fa37ee3954c358a82498d7d032662d759866d33245f
|
4
|
+
data.tar.gz: 538d5ac4d1bd8b048a203ed1c79823eb07a94a962ab500d66931705e779c596b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f8dbce4a936a7bf38fa7f4f91af3238a3e3261c566f9c233dbb2bbf942ebee1d06398a33db6d66396143f87eeed2e09f8cf8e30afb561a5d76af26f0a39dccc
|
7
|
+
data.tar.gz: '0791debb0f6b091db3c951a47e19a57d5bf413ae22320b3ef6e705cb7e8c6442487e96b80df8a9b34d1979f5e04d346f0761fcc45d88c6c27caa45bb75fa5060'
|
data/ChangeLog
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
2020-10-09 version 1.0.0:
|
3
|
+
|
4
|
+
* Update Presto version from 317 to 341
|
5
|
+
* Presto 341 supports (CREATE | REFRESH) MATERIALIZED VIEW statements
|
6
|
+
|
7
|
+
2020-05-27 version 0.4.1:
|
8
|
+
|
9
|
+
* Update Presto version from 316 to 317
|
10
|
+
* Updated dependency gem versions
|
11
|
+
|
12
|
+
2019-08-02 version 0.4.0:
|
13
|
+
|
14
|
+
* Support process running more than idle_wait was killed unexpectedly
|
15
|
+
|
16
|
+
2019-08-02 version 0.3.0:
|
17
|
+
|
18
|
+
* Added support for PRESTO_SQL_PARSER_JAVA env var
|
19
|
+
|
20
|
+
2019-08-02 version 0.2.0:
|
21
|
+
|
22
|
+
* Fixed PrestoSqlParser.java_args to work
|
23
|
+
|
24
|
+
2019-08-01 version 0.1.0:
|
25
|
+
|
26
|
+
* The first release
|
27
|
+
|
data/README.md
CHANGED
@@ -24,6 +24,38 @@ Or install it yourself as:
|
|
24
24
|
|
25
25
|
`java` command must be available because this PrestoSqlParser needs to use Presto's jar file.
|
26
26
|
|
27
|
+
If `java` is not available, such as in a pre-built Docker container, you would install java using following script:
|
28
|
+
|
29
|
+
```bash
|
30
|
+
if [[ ! -d ~/java/jre_11.0.4_11 ]]; then
|
31
|
+
mkdir -p ~/java
|
32
|
+
curl -L "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.4%2B11/OpenJDK11U-jre_x64_linux_hotspot_11.0.4_11.tar.gz" | tar zx -C ~/java
|
33
|
+
mv ~/java/jdk-11.0.4+11-jre ~/java/jre_11.0.4_11
|
34
|
+
fi
|
35
|
+
echo 'export PATH=$HOME/java/jre_11.0.4_11/bin:$PATH' >> ~/.bashrc
|
36
|
+
```
|
37
|
+
|
38
|
+
On Circle CI 2.0, you can add following configuration to `steps` section:
|
39
|
+
|
40
|
+
```yaml
|
41
|
+
- type: cache-restore
|
42
|
+
key: jre_11.0.4_11
|
43
|
+
- run:
|
44
|
+
name: Install java
|
45
|
+
command: |
|
46
|
+
set -xe
|
47
|
+
if [[ ! -d ~/java/jre_11.0.4_11 ]]; then
|
48
|
+
mkdir -p ~/java
|
49
|
+
curl -L "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.4%2B11/OpenJDK11U-jre_x64_linux_hotspot_11.0.4_11.tar.gz" | tar zx -C ~/java
|
50
|
+
mv ~/java/jdk-11.0.4+11-jre ~/java/jre_11.0.4_11
|
51
|
+
fi
|
52
|
+
echo 'export PATH=$HOME/java/jre_11.0.4_11/bin:$PATH' >> $BASH_ENV
|
53
|
+
- type: cache-save
|
54
|
+
key: jre_11.04_11
|
55
|
+
paths:
|
56
|
+
- ~/java
|
57
|
+
```
|
58
|
+
|
27
59
|
## Usage
|
28
60
|
|
29
61
|
Most typical use case is checking syntax error as following:
|
@@ -35,7 +67,7 @@ parser = PrestoSqlParser.new
|
|
35
67
|
begin
|
36
68
|
parser.parse("syntax error!")
|
37
69
|
rescue PrestoSqlParser::ParseError => e
|
38
|
-
|
70
|
+
puts e.message
|
39
71
|
|
40
72
|
# Detailed error information is available in ParseError#errors
|
41
73
|
e.errors.each do |error|
|
@@ -63,18 +95,23 @@ SQL
|
|
63
95
|
|
64
96
|
parser = PrestoSqlParser.new(with_tokens: true)
|
65
97
|
statements = parser.parse(sql)
|
98
|
+
|
99
|
+
# First statement's tokens
|
66
100
|
p statements[0]['tokens']
|
67
101
|
#=> [
|
68
102
|
# ["select", "'SELECT'", 1, 0],
|
69
103
|
# [" ", "WS", 1, 6],
|
70
104
|
# ["1", "INTEGER_VALUE", 1, 7], [";", "DELIMITER", 1, 8]
|
71
105
|
# ]
|
106
|
+
|
107
|
+
# Second statement's tokens
|
108
|
+
p statements[1]['tokens']
|
72
109
|
```
|
73
110
|
|
74
111
|
## Options
|
75
112
|
|
76
113
|
```ruby
|
77
|
-
PrestoSqlParser.java_cmd = "java" # java command
|
114
|
+
PrestoSqlParser.java_cmd = "java" # java command (default: PRESTO_SQL_PARSER_JAVA env var or "java")
|
78
115
|
PrestoSqlParser.java_args = [] # command-line arguments of java_cmd
|
79
116
|
PrestoSqlParser.java_env = {} # environment variables given to java_cmd
|
80
117
|
```
|
@@ -87,7 +124,7 @@ PrestoSqlParser.java_env = {} # environment variables given to java_cmd
|
|
87
124
|
bundle
|
88
125
|
bundle exec rake jar # builds jar to lib/presto_sql_parser/presto-sql-parser.jar
|
89
126
|
bundle exec rake spec # runs tests
|
90
|
-
bundle
|
127
|
+
bundle exec rake build # builds a gem file
|
91
128
|
```
|
92
129
|
|
93
130
|
### Release
|
@@ -98,6 +135,6 @@ gem push pkg/presto_sql_parser-<version>.gem
|
|
98
135
|
|
99
136
|
### Update version and dependencies
|
100
137
|
|
101
|
-
Gem version: `VERSION` at `lib/presto_sql_parser/version.rb`
|
102
|
-
Presto version: dependency version at `build.gradle`
|
138
|
+
* Gem version: `VERSION` at `lib/presto_sql_parser/version.rb`
|
139
|
+
* Presto version: dependency version at `build.gradle`
|
103
140
|
|
data/build.gradle
CHANGED
@@ -9,7 +9,7 @@ group = 'presto-sql-parser-support-process'
|
|
9
9
|
version = '1.0.0'
|
10
10
|
|
11
11
|
dependencies {
|
12
|
-
compile 'io.prestosql:presto-parser:
|
12
|
+
compile 'io.prestosql:presto-parser:341'
|
13
13
|
compile "com.fasterxml.jackson.core:jackson-databind:2.9.9"
|
14
14
|
compile "com.fasterxml.jackson.datatype:jackson-datatype-guava:2.9.9"
|
15
15
|
compile "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9"
|
data/lib/presto_sql_parser.rb
CHANGED
@@ -10,9 +10,15 @@ class PrestoSqlParser
|
|
10
10
|
|
11
11
|
extend ClassMethods
|
12
12
|
|
13
|
-
self.java_cmd =
|
13
|
+
self.java_cmd = ENV['PRESTO_SQL_PARSER_JAVA']
|
14
|
+
if self.java_cmd == nil || self.java_cmd.strip.empty?
|
15
|
+
self.java_cmd = "java"
|
16
|
+
end
|
17
|
+
|
14
18
|
self.java_args = []
|
19
|
+
|
15
20
|
self.java_env = {}
|
21
|
+
|
16
22
|
self.jar_path = File.join(File.dirname(__FILE__), "presto_sql_parser/presto-sql-parser.jar")
|
17
23
|
|
18
24
|
class ParseError < StandardError
|
@@ -34,6 +40,9 @@ class PrestoSqlParser
|
|
34
40
|
end
|
35
41
|
|
36
42
|
def parse(sql)
|
43
|
+
unless sql.is_a?(String)
|
44
|
+
raise ArgumentError, "SQL must be a String but got #{sql.class}"
|
45
|
+
end
|
37
46
|
request_line = JSON.dump({"sql" => sql})
|
38
47
|
|
39
48
|
success = false
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'shellwords'
|
2
|
+
|
1
3
|
class PrestoSqlParser
|
2
4
|
class SupportProcess
|
3
5
|
def initialize(idle_wait: 2, with_tokens:)
|
@@ -12,13 +14,14 @@ class PrestoSqlParser
|
|
12
14
|
def start!
|
13
15
|
return if @pipe
|
14
16
|
|
15
|
-
cmd =
|
16
|
-
PrestoSqlParser.java_cmd
|
17
|
-
|
18
|
-
PrestoSqlParser.jar_path
|
19
|
-
|
17
|
+
cmd = (
|
18
|
+
[PrestoSqlParser.java_cmd] +
|
19
|
+
PrestoSqlParser.java_args.map {|arg| Shellwords.escape(arg) } +
|
20
|
+
["-jar", Shellwords.escape(PrestoSqlParser.jar_path)]
|
21
|
+
).join(' ')
|
22
|
+
|
20
23
|
if @with_tokens
|
21
|
-
cmd << "--with-tokens"
|
24
|
+
cmd << " --with-tokens"
|
22
25
|
end
|
23
26
|
|
24
27
|
@pipe = IO.popen(PrestoSqlParser.java_env, cmd, "r+", external_encoding: 'UTF-8')
|
@@ -38,12 +41,11 @@ class PrestoSqlParser
|
|
38
41
|
end
|
39
42
|
|
40
43
|
def send_line(line)
|
41
|
-
|
44
|
+
@mutex.synchronize do # block kill! during execution
|
42
45
|
start! unless @pipe
|
43
|
-
@pipe
|
46
|
+
@pipe.puts line
|
47
|
+
@last_used_pid = @pipe.pid
|
44
48
|
end
|
45
|
-
pipe.puts line
|
46
|
-
@last_used_pid = pipe.pid
|
47
49
|
nil
|
48
50
|
end
|
49
51
|
|
data/presto_sql_parser.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
17
|
gem.require_paths = ["lib"]
|
18
18
|
|
19
|
-
gem.add_development_dependency "bundler"
|
20
|
-
gem.add_development_dependency "rake", "~>
|
21
|
-
gem.add_development_dependency "rspec", "~> 3
|
19
|
+
gem.add_development_dependency "bundler"
|
20
|
+
gem.add_development_dependency "rake", "~> 13"
|
21
|
+
gem.add_development_dependency "rspec", "~> 3"
|
22
22
|
end
|
metadata
CHANGED
@@ -1,57 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: presto_sql_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sadayuki Furuhashi
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '13'
|
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: '
|
40
|
+
version: '13'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '3
|
47
|
+
version: '3'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '3
|
54
|
+
version: '3'
|
55
55
|
description: Presto SQL Parser for Ruby parses a SQL using Presto's native SQL parser
|
56
56
|
precisely and reports error if given SQL has syntax errors. Optionally, it returns
|
57
57
|
a ANTLR tokens sequence.
|
@@ -62,6 +62,7 @@ extensions: []
|
|
62
62
|
extra_rdoc_files: []
|
63
63
|
files:
|
64
64
|
- ".gitignore"
|
65
|
+
- ChangeLog
|
65
66
|
- Gemfile
|
66
67
|
- LICENSE
|
67
68
|
- README.md
|
@@ -87,7 +88,7 @@ homepage: https://github.com/frsyuki/presto_sql_parser
|
|
87
88
|
licenses:
|
88
89
|
- MIT
|
89
90
|
metadata: {}
|
90
|
-
post_install_message:
|
91
|
+
post_install_message:
|
91
92
|
rdoc_options: []
|
92
93
|
require_paths:
|
93
94
|
- lib
|
@@ -103,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
104
|
version: '0'
|
104
105
|
requirements: []
|
105
106
|
rubygems_version: 3.0.3
|
106
|
-
signing_key:
|
107
|
+
signing_key:
|
107
108
|
specification_version: 4
|
108
109
|
summary: Presto SQL Parser for Ruby
|
109
110
|
test_files:
|