sequel-snowflake 2.0.0 → 2.1.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: b0b9a03ce3aedfe6db5faa8659e7eb8b13e2507df006ded3fd2e1a3acef9c85f
4
- data.tar.gz: c03b76900ba58dc7cc0cf93d3412be9c0bead514c1dab540d289dfab34aa40cb
3
+ metadata.gz: eba6e3849823d647dca41ee39a327c8c2e832bfc4f45ceb33d184ae06ed834c4
4
+ data.tar.gz: b04b7c352deb704dc3b08dda547fd6b52e0cecdb6fe52cc1f2abce3f4c4b8c3a
5
5
  SHA512:
6
- metadata.gz: 1bc7b615f16bb2ec666c303aa4688f16f0b41be32406f273b85ddf1c93ac11e2fb759123659d35b4b842781d0d7d9e81b5a1db8541698d8bcdf20f4516c5dcd5
7
- data.tar.gz: a53c7946e6775280163066b1dc97026d6444ab3ee79e12e70c951093155d7559347292a040299c76fda2b6a7856f38c0df0465ea059bbb9df3fe88e98df5efa5
6
+ metadata.gz: f682678759afd025e0ca7a7fc87c1dcdf5aaeb4c39b31519453d4064e2a168e43488a8dad341020b189a5dd65b191e22a9df51654f7b3d0b5a869a8b08abf94f
7
+ data.tar.gz: 2b83a1c9bbea68cb0ae13497f1bb8b15d7ad767ab8b0a83f26c12b3ec753b70081a1d7c56bc89b78e9da8cbc5812bbb51df5ee09321071ff6698aa2f4b9adeb0
@@ -14,10 +14,10 @@ jobs:
14
14
 
15
15
  steps:
16
16
  - uses: actions/checkout@v2
17
- - name: Set up Ruby 2.6
18
- uses: actions/setup-ruby@v1
17
+ - name: Set up Ruby 3.1
18
+ uses: ruby/setup-ruby@v1
19
19
  with:
20
- ruby-version: 2.6.x
20
+ ruby-version: 3.1
21
21
 
22
22
  - name: Publish to RubyGems
23
23
  run: |
@@ -19,7 +19,7 @@ jobs:
19
19
  runs-on: ubuntu-latest
20
20
  strategy:
21
21
  matrix:
22
- ruby-version: ['2.6', '2.7', '3.0']
22
+ ruby-version: ['2.7', '3.0', '3.1']
23
23
 
24
24
  steps:
25
25
  - uses: actions/checkout@v2
@@ -28,7 +28,7 @@ jobs:
28
28
  - name: Install Snowflake ODBC driver
29
29
  run: curl ${SNOWFLAKE_DRIVER_URL} -o snowflake_driver.deb && sudo dpkg -i snowflake_driver.deb
30
30
  env:
31
- SNOWFLAKE_DRIVER_URL: https://sfc-repo.snowflakecomputing.com/odbc/linux/latest/snowflake-odbc-2.23.2.x86_64.deb
31
+ SNOWFLAKE_DRIVER_URL: https://sfc-repo.snowflakecomputing.com/odbc/linux/2.25.2/snowflake-odbc-2.25.2.x86_64.deb
32
32
  - name: Set up Ruby
33
33
  uses: ruby/setup-ruby@v1
34
34
  with:
data/CHANGELOG.md CHANGED
@@ -1,11 +1,17 @@
1
- ### 2.0.0 / 2021-06-16
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
2
3
 
3
- * Change LICENSE to MIT (open source).
4
- * This gem is now tested against Rubies 2.6, 2.7, and 3.0.
4
+ The format is based on [Keep a Changelog](http://keepachangelog.com/)
5
+ and this project adheres to [Semantic Versioning](http://semver.org/).
5
6
 
7
+ ## 2.1.0 / 2022-06-17
8
+ * Add support for `EXPLAIN`.
6
9
 
7
- ### 1.0.0 / 2021-04-22 [Initial Release]
10
+ ## 2.0.0 / 2021-06-16
11
+ * Change LICENSE to MIT (open source).
12
+ * This gem is now tested against Rubies 2.6, 2.7, and 3.0.
8
13
 
14
+ ## 1.0.0 / 2021-04-22 [Initial Release]
9
15
  * Handle parsing Snowflake values for the following types:
10
16
  * Numeric data types
11
17
  * String data types
@@ -0,0 +1,32 @@
1
+ module Sequel
2
+ module Snowflake
3
+ Sequel::Database.set_shared_adapter_scheme(:snowflake, self)
4
+
5
+ module DatasetMethods
6
+ # Return an array of strings specifying a query explanation for a SELECT of the
7
+ # current dataset.
8
+ # The options (symbolized, in lowercase) are:
9
+ # JSON: JSON output is easier to store in a table and query.
10
+ # TABULAR (default): tabular output is generally more human-readable than JSON output.
11
+ # TEXT: formatted text output is generally more human-readable than JSON output.
12
+ def explain(opts=OPTS)
13
+ # Load the PrettyTable class, needed for explain output
14
+ Sequel.extension(:_pretty_table) unless defined?(Sequel::PrettyTable)
15
+
16
+ explain_with_format = if opts[:tabular]
17
+ "EXPLAIN USING TABULAR"
18
+ elsif opts[:json]
19
+ "EXPLAIN USING JSON"
20
+ elsif opts[:text]
21
+ "EXPLAIN USING TEXT"
22
+ else
23
+ "EXPLAIN"
24
+ end
25
+
26
+ ds = db.send(:metadata_dataset).clone(:sql=>"#{explain_with_format} #{select_sql}")
27
+ rows = ds.all
28
+ Sequel::PrettyTable.string(rows, ds.columns)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,5 +1,6 @@
1
1
  require 'sequel'
2
2
  require 'sequel/adapters/odbc'
3
+ require_relative 'shared/snowflake'
3
4
 
4
5
  # A lightweight adapter providing Snowflake support for the `sequel` gem.
5
6
  # The only difference between this and the Sequel-provided ODBC adapter is
@@ -20,6 +21,8 @@ module Sequel
20
21
 
21
22
  # A custom Sequel Dataset class crafted specifically to handle Snowflake results.
22
23
  class Dataset < Sequel::ODBC::Dataset
24
+ include Sequel::Snowflake::DatasetMethods
25
+
23
26
  def fetch_rows(sql)
24
27
  execute(sql) do |s|
25
28
  i = -1
@@ -1,6 +1,6 @@
1
1
  module Sequel
2
2
  module Snowflake
3
3
  # sequel-snowflake version
4
- VERSION = "2.0.0"
4
+ VERSION = "2.1.0"
5
5
  end
6
6
  end
@@ -8,6 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Sequel::Snowflake::VERSION
9
9
  spec.authors = ["Yesware, Inc"]
10
10
  spec.email = ["engineering@yesware.com"]
11
+ spec.license = "MIT"
11
12
  spec.summary = %q{Sequel adapter for Snowflake}
12
13
  spec.description = spec.summary
13
14
  spec.homepage = "https://github.com/Yesware/sequel-snowflake"
@@ -68,4 +68,36 @@ describe Sequel::Snowflake::Dataset do
68
68
  expect(db[test_table].select(:n).all).to eq([{ n: 17 }, { n: 18 }])
69
69
  end
70
70
  end
71
+
72
+ describe '#explain' do
73
+ # Create a test table with a reasonably-random suffix
74
+ let!(:test_table) { "SEQUEL_SNOWFLAKE_SPECS_#{SecureRandom.hex(10)}".to_sym }
75
+ let!(:db) { Sequel.connect(adapter: :snowflake, drvconnect: ENV['SNOWFLAKE_CONN_STR']) }
76
+
77
+ before(:each) do
78
+ db.create_table(test_table, :temp => true) do
79
+ Numeric :id
80
+ String :name
81
+ String :email
82
+ String :title
83
+ end
84
+
85
+ db[test_table].insert(
86
+ { id: 1, name: 'John Null', email: 'j.null@example.com', title: 'Software Tester' }
87
+ )
88
+ end
89
+
90
+ after(:each) do
91
+ db.drop_table(test_table)
92
+ end
93
+
94
+ it "should have explain output" do
95
+ query = db.fetch("SELECT * FROM #{test_table} WHERE ID=1;")
96
+
97
+ expect(query.explain).to be_a_kind_of(String)
98
+ expect(query.explain(:tabular=>true)).to be_a_kind_of(String)
99
+ expect(query.explain(:json=>true)).to be_a_kind_of(String)
100
+ expect(query.explain(:text=>true)).to be_a_kind_of(String)
101
+ end
102
+ end
71
103
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel-snowflake
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yesware, Inc
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-17 00:00:00.000000000 Z
11
+ date: 2022-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sequel
@@ -98,13 +98,15 @@ files:
98
98
  - Rakefile
99
99
  - lib/sequel-snowflake.rb
100
100
  - lib/sequel-snowflake/version.rb
101
+ - lib/sequel/adapters/shared/snowflake.rb
101
102
  - lib/sequel/adapters/snowflake.rb
102
103
  - sequel-snowflake.gemspec
103
104
  - spec/sequel/adapters/snowflake_spec.rb
104
105
  - spec/snowflake_spec.rb
105
106
  - spec/spec_helper.rb
106
107
  homepage: https://github.com/Yesware/sequel-snowflake
107
- licenses: []
108
+ licenses:
109
+ - MIT
108
110
  metadata: {}
109
111
  post_install_message:
110
112
  rdoc_options: []
@@ -121,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
123
  - !ruby/object:Gem::Version
122
124
  version: '0'
123
125
  requirements: []
124
- rubygems_version: 3.0.3.1
126
+ rubygems_version: 3.3.7
125
127
  signing_key:
126
128
  specification_version: 4
127
129
  summary: Sequel adapter for Snowflake