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