presto-client 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OGRjOWI0ZDk4MmVhYmMwYTY0NjQwMWM4NWViNzMyYmI4OTMwYzEzMw==
4
+ OGU1Zjc0ZTVmNmY0ZGM3YzcyMjgyY2RkNDJhOWFmODhkMWY4ZTI5Ng==
5
5
  data.tar.gz: !binary |-
6
- NDVhZjQyMzU3YTdjNGQxYjk5ZDUwMzVkYjU1NmQ3M2I4YmNmZGMyYw==
6
+ NTY1NDcwYTM5ODMxY2M5OWE2ZDRkZjEzOWIxMGIxOGVjZTY0YzQ3NQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZTAyMDg4ZDE0OTkzMmQzODMwMGUxYWE2MDNhOWRmODc0NTkyOGE3ODIzNzg1
10
- YzZlODlmYjFjZWYzODUwM2QyOTdiMWUxMWExMGVhMTUwMzQ2NTViYTI0YTA3
11
- ZWRmYWViNWVlNTA4MzQ2ZTI4NTI0OTQzMDgzZmY5YjI0OTY2NWQ=
9
+ MTBjYmQ4OWJjOTk1MTcyZDY2OWRlMzJmNWU1ZTM1NDlhM2QyYTczNThlNDdi
10
+ OWQxMjYzMDVmYjlkNjE5ZDEwNzU2NDhiN2I2ZDJjNTE2MTgzYjcxYTljMTY2
11
+ NDE3YjI1Zjk5YmRjYjdjNDI1NDlmMzFiYzlkZWY1NDE5YTdkMzQ=
12
12
  data.tar.gz: !binary |-
13
- MDliZTcxOTEyOWY5YjhiZDM3ZTM3MzRkYTVjNDM5OTZjNDk4Y2MzYzVhOWFk
14
- NWM1NWQ5ZjlkZmZmZDc5YWFkNzY2ZTVkY2VjOGUyMjBhNjkxNjhjOGVjODA2
15
- YjdiNGM5OThhNDljMzI4NzYwMzJiNGE4ZTMyYzNkMDRhMDI2ZmI=
13
+ OWVlY2QwMmNiNWZhNWM1NmFhZDU5NzcwMGM0ODZlYzA4YTA2Y2I2ODg1YTUz
14
+ NjE0NjIyNjg1NzVkYmQ2ZGZkNTY4ODE4MGUxYjk1ZGEyNThiZWRkZTM2ZmQz
15
+ YWUwZjY5OWVmZDM2ZjUwYzMyYjQyYTkwZjk1OWZhN2U5Nzk4N2M=
data/ChangeLog CHANGED
@@ -1,4 +1,10 @@
1
1
 
2
+ 2014-10-15 version 0.4.2:
3
+
4
+ * Added support for :properties option to set session properties introduced
5
+ since Presto 0.78
6
+
7
+
2
8
  2014-06-12 version 0.4.1:
3
9
 
4
10
  * Added EquiJoinClause model class
data/README.md CHANGED
@@ -16,6 +16,9 @@ client = Presto::Client.new(
16
16
  catalog: "native",
17
17
  schema: "default",
18
18
  user: "frsyuki",
19
+ time_zone: "US/Pacific", # optional
20
+ language: "en_us", # optional
21
+ properties: {"hello" => "world", "mycatalog.hello" => "world"}, # optional
19
22
  http_debug: true,
20
23
  )
21
24
 
@@ -26,6 +26,7 @@ module Presto::Client
26
26
  PRESTO_SCHEMA = "X-Presto-Schema"
27
27
  PRESTO_TIME_ZONE = "X-Presto-Time-Zone"
28
28
  PRESTO_LANGUAGE = "X-Presto-Language"
29
+ PRESTO_SESSION = "X-Presto-Session"
29
30
 
30
31
  PRESTO_CURRENT_STATE = "X-Presto-Current-State"
31
32
  PRESTO_MAX_WAIT = "X-Presto-Max-Wait"
@@ -78,6 +79,9 @@ module Presto::Client
78
79
  if v = @options[:language]
79
80
  req.headers[PrestoHeaders::PRESTO_LANGUAGE] = v
80
81
  end
82
+ if v = @options[:properties]
83
+ req.headers[PrestoHeaders::PRESTO_SESSION] = encode_properties(v)
84
+ end
81
85
 
82
86
  req.body = @query
83
87
  end
@@ -183,6 +187,27 @@ module Presto::Client
183
187
  return false
184
188
  end
185
189
 
190
+ HTTP11_SEPARATOR = ["(", ")", "<", ">", "@", ",", ";", ":", "\\", "<", ">", "/", "[", "]", "?", "=", "{", "}", " ", "\v"]
191
+ HTTP11_TOKEN_CHARSET = (32..126).map {|x| x.chr } - HTTP11_SEPARATOR
192
+ HTTP11_TOKEN_REGEXP = /^[#{Regexp.escape(HTTP11_TOKEN_CHARSET.join)}]+\z/
193
+ HTTP11_CTL_CHARSET = (0..31).map {|x| x.chr } + [127.chr]
194
+ HTTP11_CTL_CHARSET_REGEXP = /[#{Regexp.escape(HTTP11_CTL_CHARSET.join)}]/
195
+
196
+ def encode_properties(properties)
197
+ # this is a hack to set same header multiple times.
198
+ properties.map do |k, v|
199
+ token = k.to_s
200
+ field_value = v.to_s # TODO LWS encoding is not implemented
201
+ unless k =~ HTTP11_TOKEN_REGEXP
202
+ raise Faraday::ClientError, "Key of properties can't include HTTP/1.1 control characters or separators (#{HTTP11_SEPARATOR.map {|c| c =~ /\s/ ? c.dump : c }.join(' ')})"
203
+ end
204
+ if field_value =~ HTTP11_CTL_CHARSET_REGEXP
205
+ raise Faraday::ClientError, "Value of properties can't include HTTP/1.1 control characters"
206
+ end
207
+ "#{token}=#{field_value}"
208
+ end.join("\r\n#{PrestoHeaders::PRESTO_SESSION}: ")
209
+ end
210
+
186
211
  def close
187
212
  return if @closed
188
213
 
@@ -15,6 +15,6 @@
15
15
  #
16
16
  module Presto
17
17
  module Client
18
- VERSION = "0.4.1"
18
+ VERSION = "0.4.2"
19
19
  end
20
20
  end
@@ -9,6 +9,7 @@ describe Presto::Client::StatementClient do
9
9
  schema: "default",
10
10
  time_zone: "US/Pacific",
11
11
  language: "ja_JP",
12
+ properties: {"hello" => "world", "name"=>"value"},
12
13
  debug: true,
13
14
  }
14
15
  end
@@ -34,6 +35,7 @@ describe Presto::Client::StatementClient do
34
35
  "X-Presto-User" => options[:user],
35
36
  "X-Presto-Language" => options[:language],
36
37
  "X-Presto-Time-Zone" => options[:time_zone],
38
+ "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: ")
37
39
  }).to_return(body: response_json.to_json)
38
40
 
39
41
  faraday = Faraday.new(url: "http://localhost")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: presto-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-12 00:00:00.000000000 Z
11
+ date: 2014-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday