presto-client 0.4.16 → 0.4.17

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
  SHA1:
3
- metadata.gz: c24fbba9d7c847c89172174c795ee15f0a904390
4
- data.tar.gz: 79c640e5a3c73c96d2b302954bca4246f2831106
3
+ metadata.gz: 33c1344d5c5fdbd9243609bee287ead639459b42
4
+ data.tar.gz: 3930795b17c3c7568f0f907fe7719aeda4552af9
5
5
  SHA512:
6
- metadata.gz: b53c68da6dac166ffeffa33f4b4b02b0fea9b8febdecd4dfa7233a88ef1ff48434ad18db3255b111bc27c4b3402bf62fca41a9ddfa570e2f33cbaeea706b8b25
7
- data.tar.gz: 83e0759cbf3cee85e8c8899307f2c813ecfacd225e7a83c587260bd4d21ff5dbd54af4b641206b2c11d2441763bb98224dff1aa98f8b593894ab86b878a54bb1
6
+ metadata.gz: 6dacfb03dc4ec93ff88db6dba2cd1d015ddd67fad92fdf25732434763e7ef52c7ab58e58186068bf6cc133e7301fea9f38d03cc0616ffdd7f498ed5c215cddb6
7
+ data.tar.gz: 06986f8b3bc2f52b518e3e34d0d05a9edade2aae43b3abdd65f80c5f32695eb1fd03042b99f6b0d9bc34b9aab69adea882f6ed458b13966caa27b8f6ce1eda94
data/ChangeLog CHANGED
@@ -1,11 +1,18 @@
1
+ 2016-08-09 version 0.4.17:
2
+
3
+ * Added support for :ssl option.
4
+
5
+
1
6
  2016-08-03 version 0.4.16:
2
7
 
3
8
  * Upgraded Presto model version to 0.151
4
9
 
10
+
5
11
  2016-08-03 version 0.4.15:
6
12
 
7
13
  * decode method of model classes validate Hash type
8
14
 
15
+
9
16
  2016-08-02 version 0.4.14:
10
17
 
11
18
  * Added support for resuming fetching query results by using new `Query.resume(next_uri, options)` method (@tetrakai++)
data/README.md CHANGED
@@ -14,24 +14,28 @@ require 'presto-client'
14
14
 
15
15
  # create a client object:
16
16
  client = Presto::Client.new(
17
- server: "localhost:8880",
17
+ server: "localhost:8880", # required option
18
+ ssl: {verify: false},
18
19
  catalog: "native",
19
20
  schema: "default",
20
21
  user: "frsyuki",
21
- time_zone: "US/Pacific", # optional
22
- language: "English", # optional
23
- properties: {"hello" => "world", "mycatalog.hello" => "world"}, # optional
24
- http_proxy: "proxy.example.com:8080", # optional
22
+ time_zone: "US/Pacific",
23
+ language: "English",
24
+ properties: {
25
+ "hive.force_local_scheduling": true,
26
+ "raptor.reader_stream_buffer_size": "32MB"
27
+ },
28
+ http_proxy: "proxy.example.com:8080",
25
29
  http_debug: true,
26
30
  )
27
31
 
28
- # run a query and get results:
32
+ # run a query and get results as an array of arrays:
29
33
  columns, rows = client.run("select * from sys.node")
30
34
  rows.each {|row|
31
- p row
35
+ p row # row is an array
32
36
  }
33
37
 
34
- # run a query and get results as a hash:
38
+ # run a query and get results as an array of hashes:
35
39
  results = client.run_with_names("select alpha, 1 AS beta from tablename")
36
40
  results.each {|row|
37
41
  p row['alpha'] # access by name
@@ -40,32 +44,44 @@ results.each {|row|
40
44
  p row.values[1]
41
45
  }
42
46
 
43
- # another way to run a query and fetch results streamingly:
44
- # start running a query on presto
47
+ # run a query and fetch results streamingly:
45
48
  client.query("select * from sys.node") do |q|
46
- # wait for completion and get columns
49
+ # get columns:
47
50
  q.columns.each {|column|
48
51
  puts "column: #{column.name}.#{column.type}"
49
52
  }
50
53
 
51
- # get query results
54
+ # get query results. it feeds more rows until
55
+ # query execution finishes:
52
56
  q.each_row {|row|
53
- p row
57
+ p row # row is an array
54
58
  }
55
59
  end
56
60
  ```
57
61
 
58
62
  ## Options
59
63
 
60
- * **server** sets address[:port] to a Presto coordinator
64
+ * **server** sets address (and port) of a Presto coordinator server.
65
+ * **ssl** enables https.
66
+ * Setting `true` enables SSL and verifies server certificate using system's built-in certificates.
67
+ * Setting `{verify: false}` enables SSL but doesn't verify server certificate.
68
+ * Setting a Hash object enables SSL and verify server certificate with options:
69
+ * **ca_file**: path of a CA certification file in PEM format
70
+ * **ca_path**: path of a CA certification directory containing certifications in PEM format
71
+ * **cert_store**: a `OpenSSL::X509::Store` object used for verification
72
+ * **client_cert**: a `OpenSSL::X509::Certificate` object as client certificate
73
+ * **client_key**: a `OpenSSL::PKey::RSA` or `OpenSSL::PKey::DSA` object used for client certificate
61
74
  * **catalog** sets catalog (connector) name of Presto such as `hive-cdh4`, `hive-hadoop1`, etc.
62
- * **schema** sets default schema name of Presto. You can read other schemas by qualified name like `FROM myschema.table1`.
75
+ * **schema** sets default schema name of Presto. You need to use qualified name like `FROM myschema.table1` to use non-default schemas.
63
76
  * **source** sets source name to connect to a Presto. This name is shown on Presto web interface.
64
77
  * **user** sets user name to connect to a Presto.
65
- * **time_zone** sets time zone of the query. Time zone affects some functions such as `format_datetime`.
66
- * **language** sets language of the query. Language affects some functions such as `format_datetime`.
78
+ * **time_zone** sets time zone of queries. Time zone affects some functions such as `format_datetime`.
79
+ * **language** sets language of queries. Language affects some functions such as `format_datetime`.
80
+ * **properties** set session properties. Session properties affect internal behavior such as `hive.force_local_scheduling: true`, `raptor.reader_stream_buffer_size: "32MB"`, etc.
67
81
  * **http_proxy** sets host:port of a HTTP proxy server.
68
- * **http_debug** enables debug message to STDOUT for each HTTP requests
69
- * **http_open_timeout** sets timeout in seconds to open new HTTP connection
70
- * **http_timeout** sets timeout in seconds to read data from a server
82
+ * **http_debug** enables debug message to STDOUT for each HTTP requests.
83
+ * **http_open_timeout** sets timeout in seconds to open new HTTP connection.
84
+ * **http_timeout** sets timeout in seconds to read data from a server.
85
+
86
+ See [RDoc](http://www.rubydoc.info/gems/presto-client/) for the full documentation.
71
87
 
@@ -35,8 +35,12 @@ module Presto::Client
35
35
  raise ArgumentError, ":server option is required"
36
36
  end
37
37
 
38
+ ssl = faraday_ssl_options(options)
39
+
40
+ url = "#{ssl ? "https" : "http"}://#{server}"
38
41
  proxy = options[:http_proxy] || options[:proxy] # :proxy is obsoleted
39
- faraday = Faraday.new(url: "http://#{server}", proxy: "#{proxy}") do |faraday|
42
+
43
+ faraday = Faraday.new(url: url, proxy: "#{proxy}", ssl: ssl) do |faraday|
40
44
  #faraday.request :url_encoded
41
45
  faraday.response :logger if options[:http_debug]
42
46
  faraday.adapter Faraday.default_adapter
@@ -45,7 +49,35 @@ module Presto::Client
45
49
  return faraday
46
50
  end
47
51
 
48
- private_class_method :faraday_client
52
+ def self.faraday_ssl_options(options)
53
+ ssl = options[:ssl]
54
+
55
+ case ssl
56
+ when true
57
+ ssl = {verify: true}
58
+
59
+ when Hash
60
+ verify = ssl.fetch(:verify, true)
61
+ case verify
62
+ when true
63
+ # detailed SSL options. pass through to faraday
64
+ when nil, false
65
+ ssl = {verify: false}
66
+ else
67
+ raise ArgumentError, "Can't convert #{verify.class} of :verify option of :ssl option to true or false"
68
+ end
69
+
70
+ when nil, false
71
+ ssl = false
72
+
73
+ else
74
+ raise ArgumentError, "Can't convert #{ssl.class} of :ssl option to true, false, or Hash"
75
+ end
76
+
77
+ return ssl
78
+ end
79
+
80
+ private_class_method :faraday_client, :faraday_ssl_options
49
81
 
50
82
  def initialize(api)
51
83
  @api = api
@@ -15,6 +15,6 @@
15
15
  #
16
16
  module Presto
17
17
  module Client
18
- VERSION = "0.4.16"
18
+ VERSION = "0.4.17"
19
19
  end
20
20
  end
@@ -101,5 +101,84 @@ describe Presto::Client::StatementClient do
101
101
  })
102
102
  end.should raise_error(TypeError, /String to Hash/)
103
103
  end
104
+
105
+ describe "ssl" do
106
+ it "is disabled by default" do
107
+ f = Query.__send__(:faraday_client, {
108
+ server: "localhost",
109
+ })
110
+ f.url_prefix.to_s.should == "http://localhost/"
111
+ end
112
+
113
+ it "is enabled with ssl: true" do
114
+ f = Query.__send__(:faraday_client, {
115
+ server: "localhost",
116
+ ssl: true,
117
+ })
118
+ f.url_prefix.to_s.should == "https://localhost/"
119
+ f.ssl.verify?.should == true
120
+ end
121
+
122
+ it "is enabled with ssl: {verify: false}" do
123
+ f = Query.__send__(:faraday_client, {
124
+ server: "localhost",
125
+ ssl: {verify: false}
126
+ })
127
+ f.url_prefix.to_s.should == "https://localhost/"
128
+ f.ssl.verify?.should == false
129
+ end
130
+
131
+ it "rejects invalid ssl: verify: object" do
132
+ lambda do
133
+ f = Query.__send__(:faraday_client, {
134
+ server: "localhost",
135
+ ssl: {verify: "??"}
136
+ })
137
+ end.should raise_error(ArgumentError, /String/)
138
+ end
139
+
140
+ it "is enabled with ssl: Hash" do
141
+ require 'openssl'
142
+
143
+ ssl = {
144
+ ca_file: "/path/to/dummy.pem",
145
+ ca_path: "/path/to/pemdir",
146
+ cert_store: OpenSSL::X509::Store.new,
147
+ client_cert: OpenSSL::X509::Certificate.new,
148
+ client_key: OpenSSL::PKey::DSA.new,
149
+ }
150
+
151
+ f = Query.__send__(:faraday_client, {
152
+ server: "localhost",
153
+ ssl: ssl,
154
+ })
155
+
156
+ f.url_prefix.to_s.should == "https://localhost/"
157
+ f.ssl.verify?.should == true
158
+ f.ssl.ca_file.should == ssl[:ca_file]
159
+ f.ssl.ca_path.should == ssl[:ca_path]
160
+ f.ssl.cert_store.should == ssl[:cert_store]
161
+ f.ssl.client_cert.should == ssl[:client_cert]
162
+ f.ssl.client_key.should == ssl[:client_key]
163
+ end
164
+
165
+ it "rejects an invalid string" do
166
+ lambda do
167
+ Query.__send__(:faraday_client, {
168
+ server: "localhost",
169
+ ssl: '??',
170
+ })
171
+ end.should raise_error(ArgumentError, /String/)
172
+ end
173
+
174
+ it "rejects an integer" do
175
+ lambda do
176
+ Query.__send__(:faraday_client, {
177
+ server: "localhost",
178
+ ssl: 3,
179
+ })
180
+ end.should raise_error(ArgumentError, /:ssl/)
181
+ end
182
+ end
104
183
  end
105
184
 
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.16
4
+ version: 0.4.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-03 00:00:00.000000000 Z
11
+ date: 2016-08-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday