presto_sql_parser 0.1.0 → 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
2
  SHA256:
3
- metadata.gz: 3b904b2e685196e62a2c8cea2d83393faf90ea43463f1e05d0b1fb0639f5c4e8
4
- data.tar.gz: 9a77ce1ee675aefbb0d6ac2b0f3e1e02345af3cb530baf0a9ab8766d9ff19530
3
+ metadata.gz: 3ab8a614effaa4824c265fa37ee3954c358a82498d7d032662d759866d33245f
4
+ data.tar.gz: 538d5ac4d1bd8b048a203ed1c79823eb07a94a962ab500d66931705e779c596b
5
5
  SHA512:
6
- metadata.gz: 35e54bb4874f9f8bddceb1973849da51070bb7a7d384eed70c57f6af86e344ed8c796be8f322e98173389f57543a065b6f81c95e16487e98a085957ef43594bc
7
- data.tar.gz: 8351a85fe1edb3a7f714f0bff32ae29d13ce25470c387c2d94169d2bf729cdc073b4c02b09c9102541d41b3d2136930d016a134eafc5bc7956926d3870920114
6
+ metadata.gz: 1f8dbce4a936a7bf38fa7f4f91af3238a3e3261c566f9c233dbb2bbf942ebee1d06398a33db6d66396143f87eeed2e09f8cf8e30afb561a5d76af26f0a39dccc
7
+ data.tar.gz: '0791debb0f6b091db3c951a47e19a57d5bf413ae22320b3ef6e705cb7e8c6442487e96b80df8a9b34d1979f5e04d346f0761fcc45d88c6c27caa45bb75fa5060'
@@ -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
- #puts e.message
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 ecec rake build # builds a gem file
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
 
@@ -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:316'
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"
@@ -10,9 +10,15 @@ class PrestoSqlParser
10
10
 
11
11
  extend ClassMethods
12
12
 
13
- self.java_cmd = "java"
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
- "-jar",
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
- pipe = @mutex.synchronize do
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
 
@@ -1,3 +1,3 @@
1
1
  class PrestoSqlParser
2
- VERSION = "0.1.0"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -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", "~> 1.17"
20
- gem.add_development_dependency "rake", "~> 10"
21
- gem.add_development_dependency "rspec", "~> 3.4"
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: 0.1.0
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: 2019-08-02 00:00:00.000000000 Z
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: '1.17'
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: '1.17'
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: '10'
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: '10'
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.4'
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.4'
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: