rb_snowflake_client 1.1.4 → 1.2.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/Gemfile.lock +4 -4
- data/lib/ruby_snowflake/client.rb +20 -8
- data/lib/ruby_snowflake/version.rb +1 -1
- data/rb_snowflake_client.gemspec +2 -1
- metadata +22 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e9d6598913d1c47b930ed9b3db3b4aae621ea9089055cecaa2ec897140154fbb
|
|
4
|
+
data.tar.gz: a2735059fd007bced307b285bae356222bafbd59bc1aa950dd9edf5556c35e7b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 170075bb5b7af8c816f2e069001f83e3e46968b5af56796da5e41f738b16ae946978058da7b26fed3b9fb9516bebdf0fec8ef96f341dcca58fa813d03c2bddc6
|
|
7
|
+
data.tar.gz: 2829982c8d29a4fb7a154e683028e395631cdfc2131b2b9e6ffc08eabe8d65ac967e7f48f5278441320dae54dae001a4e5d456512619e255f0d52453d6d63ecc
|
data/Gemfile.lock
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
rb_snowflake_client (1.
|
|
4
|
+
rb_snowflake_client (1.2.0)
|
|
5
|
+
bigdecimal (>= 3.0)
|
|
5
6
|
concurrent-ruby (>= 1.2)
|
|
6
7
|
connection_pool (>= 2.4)
|
|
7
8
|
dotenv (>= 2.8)
|
|
9
|
+
json (>= 2.1.0)
|
|
8
10
|
jwt (>= 2.7)
|
|
9
|
-
oj (>= 3.16)
|
|
10
11
|
retryable (>= 3.0)
|
|
11
12
|
|
|
12
13
|
GEM
|
|
@@ -19,11 +20,10 @@ GEM
|
|
|
19
20
|
connection_pool (2.4.1)
|
|
20
21
|
diff-lcs (1.5.1)
|
|
21
22
|
dotenv (3.1.2)
|
|
23
|
+
json (2.9.1)
|
|
22
24
|
jwt (2.8.2)
|
|
23
25
|
base64
|
|
24
26
|
method_source (1.1.0)
|
|
25
|
-
oj (3.16.4)
|
|
26
|
-
bigdecimal (>= 3.0)
|
|
27
27
|
parallel (1.25.1)
|
|
28
28
|
pry (0.14.2)
|
|
29
29
|
coderay (~> 1.1)
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
require "base64"
|
|
4
4
|
require "benchmark"
|
|
5
|
+
require "bigdecimal"
|
|
5
6
|
require "concurrent"
|
|
6
7
|
require "connection_pool"
|
|
7
8
|
require "json"
|
|
8
9
|
require "logger"
|
|
9
10
|
require "net/http"
|
|
10
|
-
require "oj"
|
|
11
11
|
require "retryable"
|
|
12
12
|
require "securerandom"
|
|
13
13
|
require "uri"
|
|
@@ -28,8 +28,19 @@ module RubySnowflake
|
|
|
28
28
|
|
|
29
29
|
def initialize(details)
|
|
30
30
|
@sentry_context = details
|
|
31
|
+
@details = details
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def message
|
|
35
|
+
if @details == {}
|
|
36
|
+
super
|
|
37
|
+
else
|
|
38
|
+
@details.to_s
|
|
39
|
+
end
|
|
40
|
+
|
|
31
41
|
end
|
|
32
42
|
end
|
|
43
|
+
|
|
33
44
|
class BadResponseError < Error ; end
|
|
34
45
|
class ConnectionError < Error ; end
|
|
35
46
|
class ConnectionStarvedError < Error ; end
|
|
@@ -57,7 +68,7 @@ module RubySnowflake
|
|
|
57
68
|
# how long to wait to allow a query to complete, in seconds
|
|
58
69
|
DEFAULT_QUERY_TIMEOUT = 600 # 10 minutes
|
|
59
70
|
|
|
60
|
-
|
|
71
|
+
JSON_PARSE_OPTIONS = { decimal_class: BigDecimal }.freeze
|
|
61
72
|
VALID_RESPONSE_CODES = %w(200 202).freeze
|
|
62
73
|
POLLING_RESPONSE_CODE = "202"
|
|
63
74
|
POLLING_INTERVAL = 2 # seconds
|
|
@@ -155,7 +166,7 @@ module RubySnowflake
|
|
|
155
166
|
connection,
|
|
156
167
|
Net::HTTP::Post,
|
|
157
168
|
"/api/v2/statements?requestId=#{SecureRandom.uuid}&async=#{@_enable_polling_queries}",
|
|
158
|
-
|
|
169
|
+
request_body.to_json
|
|
159
170
|
)
|
|
160
171
|
end
|
|
161
172
|
retrieve_result_set(query_start_time, query, response, streaming)
|
|
@@ -249,9 +260,10 @@ module RubySnowflake
|
|
|
249
260
|
loop do
|
|
250
261
|
sleep POLLING_INTERVAL
|
|
251
262
|
|
|
252
|
-
|
|
263
|
+
elapsed_time = Time.now.to_i - query_start_time
|
|
264
|
+
if elapsed_time > @query_timeout
|
|
253
265
|
cancelled = attempt_to_cancel_and_silence_errors(connection, statement_handle)
|
|
254
|
-
raise QueryTimeoutError.new("Query timed out. Query cancelled? #{cancelled} Query: #{query}")
|
|
266
|
+
raise QueryTimeoutError.new("Query timed out. Query cancelled? #{cancelled}; Duration: #{elapsed_time}; Query: '#{query}'")
|
|
255
267
|
end
|
|
256
268
|
|
|
257
269
|
poll_response = request_with_auth_and_headers(connection, Net::HTTP::Get,
|
|
@@ -278,12 +290,12 @@ module RubySnowflake
|
|
|
278
290
|
end
|
|
279
291
|
|
|
280
292
|
def retrieve_result_set(query_start_time, query, response, streaming)
|
|
281
|
-
json_body =
|
|
293
|
+
json_body = JSON.parse(response.body, JSON_PARSE_OPTIONS)
|
|
282
294
|
statement_handle = json_body["statementHandle"]
|
|
283
295
|
|
|
284
296
|
if response.code == POLLING_RESPONSE_CODE
|
|
285
297
|
result_response = poll_for_completion_or_timeout(query_start_time, query, statement_handle)
|
|
286
|
-
json_body =
|
|
298
|
+
json_body = JSON.parse(result_response.body, JSON_PARSE_OPTIONS)
|
|
287
299
|
end
|
|
288
300
|
|
|
289
301
|
num_threads = number_of_threads_to_use(json_body["resultSetMetaData"]["partitionInfo"].size)
|
|
@@ -309,7 +321,7 @@ module RubySnowflake
|
|
|
309
321
|
end
|
|
310
322
|
|
|
311
323
|
partition_json = {}
|
|
312
|
-
bm = Benchmark.measure { partition_json =
|
|
324
|
+
bm = Benchmark.measure { partition_json = JSON.parse(partition_response.body, JSON_PARSE_OPTIONS) }
|
|
313
325
|
logger.debug { "JSON parsing took: #{bm.real}" }
|
|
314
326
|
partition_data = partition_json["data"]
|
|
315
327
|
|
data/rb_snowflake_client.gemspec
CHANGED
|
@@ -19,10 +19,11 @@ Gem::Specification.new do |s|
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
s.require_paths = ["lib"]
|
|
22
|
+
s.add_dependency "bigdecimal", ">= 3.0"
|
|
22
23
|
s.add_dependency "concurrent-ruby", ">= 1.2"
|
|
23
24
|
s.add_dependency "connection_pool", ">= 2.4"
|
|
24
25
|
s.add_dependency "dotenv", ">= 2.8"
|
|
26
|
+
s.add_dependency "json", ">= 2.1.0"
|
|
25
27
|
s.add_dependency "jwt", ">= 2.7"
|
|
26
|
-
s.add_dependency "oj", ">= 3.16"
|
|
27
28
|
s.add_dependency "retryable", ">= 3.0"
|
|
28
29
|
end
|
metadata
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rb_snowflake_client
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Rinsed
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2025-01-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: bigdecimal
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '3.0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '3.0'
|
|
13
27
|
- !ruby/object:Gem::Dependency
|
|
14
28
|
name: concurrent-ruby
|
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -53,33 +67,33 @@ dependencies:
|
|
|
53
67
|
- !ruby/object:Gem::Version
|
|
54
68
|
version: '2.8'
|
|
55
69
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
70
|
+
name: json
|
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
|
58
72
|
requirements:
|
|
59
73
|
- - ">="
|
|
60
74
|
- !ruby/object:Gem::Version
|
|
61
|
-
version:
|
|
75
|
+
version: 2.1.0
|
|
62
76
|
type: :runtime
|
|
63
77
|
prerelease: false
|
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
79
|
requirements:
|
|
66
80
|
- - ">="
|
|
67
81
|
- !ruby/object:Gem::Version
|
|
68
|
-
version:
|
|
82
|
+
version: 2.1.0
|
|
69
83
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
84
|
+
name: jwt
|
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
|
72
86
|
requirements:
|
|
73
87
|
- - ">="
|
|
74
88
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '
|
|
89
|
+
version: '2.7'
|
|
76
90
|
type: :runtime
|
|
77
91
|
prerelease: false
|
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
93
|
requirements:
|
|
80
94
|
- - ">="
|
|
81
95
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '
|
|
96
|
+
version: '2.7'
|
|
83
97
|
- !ruby/object:Gem::Dependency
|
|
84
98
|
name: retryable
|
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|