snowflake_rb 0.0.0 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/snowflake-darwin-arm64.so +0 -0
- data/ext/snowflake-linux-amd64.so +0 -0
- data/ext/snowflake-linux-arm64.so +0 -0
- data/ext/snowflake.so +0 -0
- data/lib/snowflake_rb/configuration.rb +16 -13
- data/lib/snowflake_rb.rb +20 -23
- metadata +3 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a94c064ba5cf498085fca7c2138d08b352f83b3a94a2a1f7465fb3f9de13c50
|
4
|
+
data.tar.gz: b5772f5dfa28f418a50dbdd60d579fdab0e0eb43d34c8e88e9e20d88fc9be923
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51abadd71833419043c7d569c22e9a6be05191db4dcfa3a014bf2b8ccf480bb43ec6c8637e518d8def995bd9a334afb6263219cc6c5c7e0e24134d4677a32052
|
7
|
+
data.tar.gz: b1cf22485fc54d7d47f26e6a5e0980f089024325a84a8e54cad86c829e7f7978b047482112b818d6dd253c0007e3e80a888f6b73c916db3874eb09b7e36a8ef3
|
Binary file
|
Binary file
|
Binary file
|
data/ext/snowflake.so
CHANGED
Binary file
|
@@ -1,18 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'dry-configurable'
|
4
|
-
|
5
3
|
module SnowflakeRB
|
6
|
-
|
7
|
-
|
4
|
+
# Configuration class for snowflake_rb
|
5
|
+
# config = Configuration.new
|
6
|
+
# config.account = <ACCOUNT>
|
7
|
+
# config.warehouse = <WAREHOUSE>
|
8
|
+
# config.database = <DATABASE>
|
9
|
+
# config.schema = <SCHEMA>
|
10
|
+
# config.user = <USER>
|
11
|
+
# config.password = <PASSWORD>
|
12
|
+
# config.role = <ROLE>
|
13
|
+
class Configuration
|
14
|
+
attr_accessor :account, :warehouse, :database, :schema, :user, :password, :role
|
15
|
+
attr_writer :port
|
8
16
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
setting :schema
|
13
|
-
setting :user
|
14
|
-
setting :password
|
15
|
-
setting :role
|
16
|
-
setting :port, default: 443
|
17
|
+
def port
|
18
|
+
@port || 443
|
19
|
+
end
|
17
20
|
end
|
18
|
-
end
|
21
|
+
end
|
data/lib/snowflake_rb.rb
CHANGED
@@ -2,9 +2,6 @@ require 'ffi'
|
|
2
2
|
require 'snowflake_rb/extension'
|
3
3
|
require 'snowflake_rb/configuration'
|
4
4
|
|
5
|
-
# Note: this library is not thread safe as it caches the last error
|
6
|
-
# The call pattern expectation is to call last_error after any call which may have gotten an error. If last_error is
|
7
|
-
# `nil`, there was no error.
|
8
5
|
module Snowflake
|
9
6
|
module LibC
|
10
7
|
extend FFI::Library
|
@@ -19,7 +16,6 @@ module Snowflake
|
|
19
16
|
POINTER_SIZE = FFI.type_size(:pointer)
|
20
17
|
|
21
18
|
ffi_lib(File.expand_path(SnowflakeRB::Extension.env_specific_extension_path, __dir__))
|
22
|
-
attach_function(:last_error, 'LastError', [], :strptr)
|
23
19
|
# ugh, `port` in gosnowflake is just :int; however, ruby - ffi -> go is passing 32bit int if I just decl :int.
|
24
20
|
attach_function(:connect, 'Connect', %i[string string string string string string string int64], :pointer)
|
25
21
|
attach_function(:close, 'Close', [:pointer], :void)
|
@@ -31,16 +27,8 @@ module Snowflake
|
|
31
27
|
end
|
32
28
|
|
33
29
|
module Client
|
34
|
-
extend SnowflakeRB::Configuration
|
35
30
|
module_function
|
36
31
|
|
37
|
-
# @return String last error or nil. May be end of file which is not really an error
|
38
|
-
def last_error
|
39
|
-
error, cptr = ::Snowflake::Binding.last_error
|
40
|
-
LibC.free(cptr) if error
|
41
|
-
error
|
42
|
-
end
|
43
|
-
|
44
32
|
# @param account[String] should include everything in the db url ahead of 'snowflakecomputing.com'
|
45
33
|
# @param port[Integer]
|
46
34
|
# @return query_object[Pointer] a pointer to use for subsequent calls not inspectable nor viewable by Ruby
|
@@ -55,14 +43,14 @@ module Snowflake
|
|
55
43
|
port = nil
|
56
44
|
)
|
57
45
|
::Snowflake::Binding.connect(
|
58
|
-
account ||
|
59
|
-
warehouse ||
|
60
|
-
database ||
|
61
|
-
schema ||
|
62
|
-
user ||
|
63
|
-
password ||
|
64
|
-
role ||
|
65
|
-
port ||
|
46
|
+
account || Snowflake::configuration.account,
|
47
|
+
warehouse || Snowflake::configuration.warehouse,
|
48
|
+
database || Snowflake::configuration.database,
|
49
|
+
schema || Snowflake::configuration.schema,
|
50
|
+
user || Snowflake::configuration.user,
|
51
|
+
password || Snowflake::configuration.password,
|
52
|
+
role || Snowflake::configuration.role,
|
53
|
+
port || Snowflake::configuration.port
|
66
54
|
)
|
67
55
|
end
|
68
56
|
|
@@ -89,12 +77,12 @@ module Snowflake
|
|
89
77
|
return to_enum(__method__, db_pointer, sql) unless block_given?
|
90
78
|
|
91
79
|
query_pointer = fetch(db_pointer, sql)
|
92
|
-
return
|
80
|
+
return 'query_pointer is missing' if query_pointer.nil? || query_pointer == FFI::Pointer::NULL
|
93
81
|
|
94
82
|
field_count ||= column_count(query_pointer)
|
95
83
|
loop do
|
96
84
|
row = get_next_row(query_pointer, field_count)
|
97
|
-
return
|
85
|
+
return 'row not present' unless row
|
98
86
|
|
99
87
|
yield row
|
100
88
|
end
|
@@ -104,7 +92,6 @@ module Snowflake
|
|
104
92
|
# @param db_pointer[Pointer] the pointer which `connect` returned.
|
105
93
|
# @param query[String] a select query to run.
|
106
94
|
# @return query_object[Pointer] a pointer to use for subsequent calls not inspectable nor viewable by Ruby; however,
|
107
|
-
# if it's `nil`, check `last_error`
|
108
95
|
def fetch(db_pointer, query)
|
109
96
|
::Snowflake::Binding.fetch(db_pointer, query)
|
110
97
|
end
|
@@ -161,4 +148,14 @@ module Snowflake
|
|
161
148
|
SnowflakeRB::Configuration.config
|
162
149
|
end
|
163
150
|
end
|
151
|
+
|
152
|
+
class << self
|
153
|
+
def configuration
|
154
|
+
@configuration ||= SnowflakeRB::Configuration.new
|
155
|
+
end
|
156
|
+
|
157
|
+
def configure
|
158
|
+
yield(configuration)
|
159
|
+
end
|
160
|
+
end
|
164
161
|
end
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: snowflake_rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Darren Cheng
|
8
8
|
- Arjun Krishnan
|
9
|
-
- Mohammad-Reza
|
9
|
+
- Mohammad-Reza Daliri
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2023-
|
13
|
+
date: 2023-05-11 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: ffi
|
@@ -26,20 +26,6 @@ dependencies:
|
|
26
26
|
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: 1.15.5
|
29
|
-
- !ruby/object:Gem::Dependency
|
30
|
-
name: dry-configurable
|
31
|
-
requirement: !ruby/object:Gem::Requirement
|
32
|
-
requirements:
|
33
|
-
- - "~>"
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version: 1.0.1
|
36
|
-
type: :runtime
|
37
|
-
prerelease: false
|
38
|
-
version_requirements: !ruby/object:Gem::Requirement
|
39
|
-
requirements:
|
40
|
-
- - "~>"
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 1.0.1
|
43
29
|
description: This gem adds a ruby wrapper around the go native snowflake client
|
44
30
|
email:
|
45
31
|
- darren@thanx.com
|