duckdb 0.0.8 → 0.0.12
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/.github/workflows/test_on_macos.yml +34 -0
- data/.github/workflows/test_on_ubuntu.yml +66 -0
- data/.travis.yml +5 -5
- data/CHANGELOG.md +29 -0
- data/Gemfile.lock +6 -6
- data/README.md +24 -0
- data/duckdb.gemspec +1 -1
- data/ext/duckdb/blob.c +11 -0
- data/ext/duckdb/blob.h +14 -0
- data/ext/duckdb/connection.c +2 -0
- data/ext/duckdb/connection.h +0 -2
- data/ext/duckdb/database.c +2 -0
- data/ext/duckdb/database.h +0 -2
- data/ext/duckdb/duckdb.c +6 -0
- data/ext/duckdb/error.c +2 -0
- data/ext/duckdb/error.h +0 -2
- data/ext/duckdb/extconf.rb +1 -0
- data/ext/duckdb/prepared_statement.c +26 -9
- data/ext/duckdb/result.c +12 -0
- data/ext/duckdb/ruby-duckdb.h +16 -0
- data/lib/duckdb/prepared_statement.rb +11 -1
- data/lib/duckdb/version.rb +1 -1
- metadata +8 -5
- data/.github/workflows/test_by_github.yml +0 -66
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a0f6c8a46cecbe281cf970b5e8c6fd11c2903a5ddd58bf683341bcb299d7a36
|
4
|
+
data.tar.gz: 6ba452c2aa37f77c68905413e3bb6cb27697f8db23bfeca1e8ca1886ce6fb1ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: beb0db8d6e590ee4014aa4fb1e09a7093d6b13cebe3ad38f90cf6f29707b5e768696732f33c5d53027032ba7eacc8bf8ddecb9b112a042f05b17bbb98e086197
|
7
|
+
data.tar.gz: 228651ac8ed6c13044cbf0e3709444464ff552b0b431b051446def7dce074b38ef8a242f72e75c8c1ba788ae13dfc88a2041f7f2e9e70b64fb3c34c9c2c8ad85
|
@@ -0,0 +1,34 @@
|
|
1
|
+
name: MacOS
|
2
|
+
|
3
|
+
on: [push]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
build:
|
7
|
+
runs-on: macos-latest
|
8
|
+
strategy:
|
9
|
+
matrix:
|
10
|
+
ruby: ['2.5.8', '2.6.6', '2.7.2', '3.0.0', 'head']
|
11
|
+
|
12
|
+
steps:
|
13
|
+
- uses: actions/checkout@v2
|
14
|
+
|
15
|
+
- name: Set up Ruby
|
16
|
+
uses: ruby/setup-ruby@v1
|
17
|
+
with:
|
18
|
+
ruby-version: ${{ matrix.ruby }}
|
19
|
+
|
20
|
+
- name: Install duckdb
|
21
|
+
env:
|
22
|
+
DUCKDB_VERSION: 0.2.4
|
23
|
+
run: |
|
24
|
+
brew install duckdb
|
25
|
+
git clone -b v${DUCKDB_VERSION} https://github.com/cwida/duckdb.git duckdb-v${DUCKDB_VERSION}
|
26
|
+
cp duckdb-v${DUCKDB_VERSION}/src/include/duckdb.h /usr/local/include
|
27
|
+
mkdir -p /usr/local/include/duckdb/common
|
28
|
+
cp duckdb-v${DUCKDB_VERSION}/src/include/duckdb/common/winapi.hpp /usr/local/include/duckdb/common
|
29
|
+
|
30
|
+
- name: Build and test with Rake with Ruby ${{ matrix.ruby }}
|
31
|
+
run: |
|
32
|
+
ruby -v
|
33
|
+
bundle install --jobs 4 --retry 3
|
34
|
+
bundle exec rake
|
@@ -0,0 +1,66 @@
|
|
1
|
+
name: Ubuntu
|
2
|
+
|
3
|
+
on: [push]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
build:
|
7
|
+
|
8
|
+
runs-on: ubuntu-latest
|
9
|
+
strategy:
|
10
|
+
matrix:
|
11
|
+
ruby: ['2.5.8', '2.6.6', '2.7.2', '3.0.0', 'head']
|
12
|
+
duckdb: ['0.2.4', '0.2.5']
|
13
|
+
|
14
|
+
steps:
|
15
|
+
- uses: actions/checkout@v2
|
16
|
+
|
17
|
+
- name: Set up Ruby
|
18
|
+
uses: ruby/setup-ruby@v1
|
19
|
+
with:
|
20
|
+
ruby-version: ${{ matrix.ruby }}
|
21
|
+
|
22
|
+
- name: duckdb 0.2.4 cache
|
23
|
+
id: duckdb-cache-v0_2_4
|
24
|
+
uses: actions/cache@v1.1.0
|
25
|
+
with:
|
26
|
+
path: duckdb-v0.2.4
|
27
|
+
key: ${{ runner.os }}-duckdb-v0_2_4_001
|
28
|
+
restore-keys: |
|
29
|
+
${{ runner.os }}-duckdb-v0_2_4
|
30
|
+
|
31
|
+
- name: duckdb 0.2.5 cache
|
32
|
+
id: duckdb-cache-v0_2_5
|
33
|
+
uses: actions/cache@v1.1.0
|
34
|
+
with:
|
35
|
+
path: duckdb-v0.2.5
|
36
|
+
key: ${{ runner.os }}-duckdb-v0_2_5_001
|
37
|
+
restore-keys: |
|
38
|
+
${{ runner.os }}-duckdb-v0_2_5
|
39
|
+
|
40
|
+
- name: Build duckdb 0.2.4
|
41
|
+
if: steps.duckdb-cache-v0_2_4.outputs.cache-hit != 'true'
|
42
|
+
run: |
|
43
|
+
git clone -b v0.2.4 https://github.com/cwida/duckdb.git duckdb-tmp-v0.2.4
|
44
|
+
cd duckdb-tmp-v0.2.4 && make && cd ..
|
45
|
+
rm -rf duckdb-v0.2.4
|
46
|
+
mkdir -p duckdb-v0.2.4/build/release/src duckdb-v0.2.4/src
|
47
|
+
cp -rip duckdb-tmp-v0.2.4/build/release/src/*.so duckdb-v0.2.4/build/release/src
|
48
|
+
cp -rip duckdb-tmp-v0.2.4/src/include duckdb-v0.2.4/src/
|
49
|
+
|
50
|
+
- name: Build duckdb 0.2.5
|
51
|
+
if: steps.duckdb-cache-v0_2_5.outputs.cache-hit != 'true'
|
52
|
+
run: |
|
53
|
+
git clone -b v0.2.5 https://github.com/cwida/duckdb.git duckdb-tmp-v0.2.5
|
54
|
+
cd duckdb-tmp-v0.2.5 && make && cd ..
|
55
|
+
rm -rf duckdb-v0.2.5
|
56
|
+
mkdir -p duckdb-v0.2.5/build/release/src duckdb-v0.2.5/src
|
57
|
+
cp -rip duckdb-tmp-v0.2.5/build/release/src/*.so duckdb-v0.2.5/build/release/src
|
58
|
+
cp -rip duckdb-tmp-v0.2.5/src/include duckdb-v0.2.5/src/
|
59
|
+
|
60
|
+
- name: Build and test with Rake with Ruby ${{ matrix.ruby }}
|
61
|
+
env:
|
62
|
+
DUCKDB_VERSION: ${{ matrix.duckdb }}
|
63
|
+
run: |
|
64
|
+
gem install bundler
|
65
|
+
bundle install --jobs 4 --retry 3
|
66
|
+
bundle exec rake -- --with-duckdb-include=${GITHUB_WORKSPACE}/duckdb-v${DUCKDB_VERSION}/src/include --with-duckdb-lib=${GITHUB_WORKSPACE}/duckdb-v${DUCKDB_VERSION}/build/release/src/
|
data/.travis.yml
CHANGED
@@ -2,17 +2,17 @@ language: ruby
|
|
2
2
|
cache:
|
3
3
|
bundler: true
|
4
4
|
directories:
|
5
|
-
- ${HOME}/duckdb-v0.
|
5
|
+
- ${HOME}/duckdb-v0.2.5
|
6
6
|
before_install:
|
7
7
|
- yes | gem update --system
|
8
|
-
- if [[ ! -d ${HOME}/duckdb-v0.
|
8
|
+
- if [[ ! -d ${HOME}/duckdb-v0.2.5/build ]]; then cd ${HOME} && git clone -b v0.2.5 https://github.com/cwida/duckdb.git duckdb-v0.2.5 && cd duckdb-v0.2.5 && make && cd ${TRAVIS_BUILD_DIR}; fi
|
9
9
|
|
10
10
|
env:
|
11
|
-
- DUCKDB_VERSION=0.
|
11
|
+
- DUCKDB_VERSION=0.2.5
|
12
12
|
rvm:
|
13
13
|
- 2.5.8
|
14
14
|
- 2.6.6
|
15
|
-
- 2.7.
|
16
|
-
-
|
15
|
+
- 2.7.2
|
16
|
+
- 3.0.0
|
17
17
|
- ruby-head
|
18
18
|
script: bundle exec rake -- --with-duckdb-include=${HOME}/duckdb-v${DUCKDB_VERSION}/src/include --with-duckdb-lib=${HOME}/duckdb-v${DUCKDB_VERSION}/build/release/src/
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,34 @@
|
|
1
1
|
# ChangeLog
|
2
2
|
|
3
|
+
## 0.0.12
|
4
|
+
|
5
|
+
- bump DuckDB to v0.2.5
|
6
|
+
- support BLOB type (with DuckDB version 0.2.5 or later)
|
7
|
+
|
8
|
+
## 0.0.11
|
9
|
+
|
10
|
+
- fix failure in test_close in test/duckdb_test/database_test.rb because DuckDB error message was changed.
|
11
|
+
- bump DuckDb to v0.2.4
|
12
|
+
- add test CI with Ruby 3.0.0
|
13
|
+
- add test CI on MacOS.
|
14
|
+
- bunp DuckDB to v0.2.3
|
15
|
+
|
16
|
+
## 0.0.10
|
17
|
+
|
18
|
+
- bump DuckDB to v0.2.2
|
19
|
+
- fix to build failure on MacOS.
|
20
|
+
|
21
|
+
## 0.0.9
|
22
|
+
|
23
|
+
- bump DuckDB to v0.2.1
|
24
|
+
- bump Ruby to v2.7.2
|
25
|
+
- bunmp DuckDB to v0.2.0
|
26
|
+
|
27
|
+
## 0.0.8.1
|
28
|
+
|
29
|
+
- update Gemfile.lock
|
30
|
+
- unsupport Ruby 2.4
|
31
|
+
|
3
32
|
## 0.0.8
|
4
33
|
|
5
34
|
- remove test with Ruby 2.4.10
|
data/Gemfile.lock
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
duckdb (0.0.
|
4
|
+
duckdb (0.0.12)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
minitest (5.
|
10
|
-
rake (13.0.
|
11
|
-
rake-compiler (1.1.
|
9
|
+
minitest (5.14.4)
|
10
|
+
rake (13.0.3)
|
11
|
+
rake-compiler (1.1.1)
|
12
12
|
rake
|
13
13
|
|
14
14
|
PLATFORMS
|
15
|
-
|
15
|
+
x86_64-linux
|
16
16
|
|
17
17
|
DEPENDENCIES
|
18
18
|
bundler (~> 2.0)
|
@@ -22,4 +22,4 @@ DEPENDENCIES
|
|
22
22
|
rake-compiler
|
23
23
|
|
24
24
|
BUNDLED WITH
|
25
|
-
2.
|
25
|
+
2.2.3
|
data/README.md
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
[](https://travis-ci.com/suketa/ruby-duckdb)
|
4
4
|
[](https://github.com/suketa/ruby-duckdb/actions?query=workflow%3AUbuntu)
|
5
|
+
[](https://github.com/suketa/ruby-duckdb/actions?query=workflow%3AMacOS)
|
5
6
|
|
6
7
|
## Description
|
7
8
|
|
@@ -63,3 +64,26 @@ DuckDB::Database.open do |db|
|
|
63
64
|
end
|
64
65
|
end
|
65
66
|
```
|
67
|
+
|
68
|
+
### using BLOB column
|
69
|
+
|
70
|
+
BLOB is available with DuckDB v0.2.5 or later.
|
71
|
+
Use `DuckDB::Blob.new` or use sting#force_encoding(Encoding::ASCII_8BIT)
|
72
|
+
|
73
|
+
```
|
74
|
+
require 'duckdb'
|
75
|
+
|
76
|
+
DuckDB::Database.open do |db|
|
77
|
+
db.connect do |con|
|
78
|
+
con.query('CREATE TABLE blob_table (binary_data BLOB)')
|
79
|
+
stmt = DuckDB::PreparedStatement.new(con, 'INSERT INTO blob_table VALUES ($1)')
|
80
|
+
|
81
|
+
stmt.bind(1, DuckDB::Blob.new("\0\1\2\3\4\5"))
|
82
|
+
# stmt.bind(1, "\0\1\2\3\4\5".force_encoding(Encoding::BINARY))
|
83
|
+
stmt.execute
|
84
|
+
|
85
|
+
result = con.query('SELECT binary_data FROM blob_table')
|
86
|
+
p result.first.first
|
87
|
+
end
|
88
|
+
end
|
89
|
+
```
|
data/duckdb.gemspec
CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
|
|
26
26
|
end
|
27
27
|
spec.require_paths = ['lib']
|
28
28
|
spec.extensions = ['ext/duckdb/extconf.rb']
|
29
|
-
spec.required_ruby_version = '>= 2.
|
29
|
+
spec.required_ruby_version = '>= 2.5.0'
|
30
30
|
|
31
31
|
spec.add_development_dependency 'bundler', '~> 2.0'
|
32
32
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
data/ext/duckdb/blob.c
ADDED
data/ext/duckdb/blob.h
ADDED
data/ext/duckdb/connection.c
CHANGED
data/ext/duckdb/connection.h
CHANGED
data/ext/duckdb/database.c
CHANGED
data/ext/duckdb/database.h
CHANGED
data/ext/duckdb/duckdb.c
CHANGED
data/ext/duckdb/error.c
CHANGED
data/ext/duckdb/error.h
CHANGED
data/ext/duckdb/extconf.rb
CHANGED
@@ -81,7 +81,7 @@ static VALUE duckdb_prepared_statement_bind_boolean(VALUE self, VALUE vidx, VALU
|
|
81
81
|
}
|
82
82
|
|
83
83
|
if (duckdb_bind_boolean(ctx->prepared_statement, idx, (val == Qtrue)) == DuckDBError) {
|
84
|
-
rb_raise(eDuckDBError, "fail to bind %
|
84
|
+
rb_raise(eDuckDBError, "fail to bind %llu parameter", (unsigned long long)idx);
|
85
85
|
}
|
86
86
|
return self;
|
87
87
|
}
|
@@ -95,7 +95,7 @@ static VALUE duckdb_prepared_statement_bind_int16(VALUE self, VALUE vidx, VALUE
|
|
95
95
|
Data_Get_Struct(self, rubyDuckDBPreparedStatement, ctx);
|
96
96
|
|
97
97
|
if (duckdb_bind_int16(ctx->prepared_statement, idx, i16val) == DuckDBError) {
|
98
|
-
rb_raise(eDuckDBError, "fail to bind %
|
98
|
+
rb_raise(eDuckDBError, "fail to bind %llu parameter", (unsigned long long)idx);
|
99
99
|
}
|
100
100
|
return self;
|
101
101
|
}
|
@@ -104,12 +104,12 @@ static VALUE duckdb_prepared_statement_bind_int32(VALUE self, VALUE vidx, VALUE
|
|
104
104
|
{
|
105
105
|
rubyDuckDBPreparedStatement *ctx;
|
106
106
|
idx_t idx = check_index(vidx);
|
107
|
-
int32_t i32val =
|
107
|
+
int32_t i32val = NUM2INT(val);
|
108
108
|
|
109
109
|
Data_Get_Struct(self, rubyDuckDBPreparedStatement, ctx);
|
110
110
|
|
111
111
|
if (duckdb_bind_int32(ctx->prepared_statement, idx, i32val) == DuckDBError) {
|
112
|
-
rb_raise(eDuckDBError, "fail to bind %
|
112
|
+
rb_raise(eDuckDBError, "fail to bind %llu parameter", (unsigned long long)idx);
|
113
113
|
}
|
114
114
|
return self;
|
115
115
|
}
|
@@ -123,7 +123,7 @@ static VALUE duckdb_prepared_statement_bind_int64(VALUE self, VALUE vidx, VALUE
|
|
123
123
|
Data_Get_Struct(self, rubyDuckDBPreparedStatement, ctx);
|
124
124
|
|
125
125
|
if (duckdb_bind_int64(ctx->prepared_statement, idx, i64val) == DuckDBError) {
|
126
|
-
rb_raise(eDuckDBError, "fail to bind %
|
126
|
+
rb_raise(eDuckDBError, "fail to bind %llu parameter", (unsigned long long)idx);
|
127
127
|
}
|
128
128
|
return self;
|
129
129
|
}
|
@@ -137,7 +137,7 @@ static VALUE duckdb_prepared_statement_bind_float(VALUE self, VALUE vidx, VALUE
|
|
137
137
|
Data_Get_Struct(self, rubyDuckDBPreparedStatement, ctx);
|
138
138
|
|
139
139
|
if (duckdb_bind_float(ctx->prepared_statement, idx, (float)dbl) == DuckDBError) {
|
140
|
-
rb_raise(eDuckDBError, "fail to bind %
|
140
|
+
rb_raise(eDuckDBError, "fail to bind %llu parameter", (unsigned long long)idx);
|
141
141
|
}
|
142
142
|
return self;
|
143
143
|
}
|
@@ -151,7 +151,7 @@ static VALUE duckdb_prepared_statement_bind_double(VALUE self, VALUE vidx, VALUE
|
|
151
151
|
Data_Get_Struct(self, rubyDuckDBPreparedStatement, ctx);
|
152
152
|
|
153
153
|
if (duckdb_bind_double(ctx->prepared_statement, idx, dbl) == DuckDBError) {
|
154
|
-
rb_raise(eDuckDBError, "fail to bind %
|
154
|
+
rb_raise(eDuckDBError, "fail to bind %llu parameter", (unsigned long long)idx);
|
155
155
|
}
|
156
156
|
return self;
|
157
157
|
}
|
@@ -163,11 +163,25 @@ static VALUE duckdb_prepared_statement_bind_varchar(VALUE self, VALUE vidx, VALU
|
|
163
163
|
|
164
164
|
Data_Get_Struct(self, rubyDuckDBPreparedStatement, ctx);
|
165
165
|
if (duckdb_bind_varchar(ctx->prepared_statement, idx, StringValuePtr(str)) == DuckDBError) {
|
166
|
-
rb_raise(eDuckDBError, "fail to bind %
|
166
|
+
rb_raise(eDuckDBError, "fail to bind %llu parameter", (unsigned long long)idx);
|
167
167
|
}
|
168
168
|
return self;
|
169
169
|
}
|
170
170
|
|
171
|
+
#ifdef HAVE_DUCKDB_VALUE_BLOB
|
172
|
+
static VALUE duckdb_prepared_statement_bind_blob(VALUE self, VALUE vidx, VALUE blob)
|
173
|
+
{
|
174
|
+
rubyDuckDBPreparedStatement *ctx;
|
175
|
+
idx_t idx = check_index(vidx);
|
176
|
+
|
177
|
+
Data_Get_Struct(self, rubyDuckDBPreparedStatement, ctx);
|
178
|
+
if (duckdb_bind_blob(ctx->prepared_statement, idx, (const void *)StringValuePtr(blob), (idx_t)RSTRING_LEN(blob)) == DuckDBError) {
|
179
|
+
rb_raise(eDuckDBError, "fail to bind %llu parameter", (unsigned long long)idx);
|
180
|
+
}
|
181
|
+
return self;
|
182
|
+
}
|
183
|
+
#endif /* HAVE_DUCKDB_VALUE_BLOB */
|
184
|
+
|
171
185
|
static VALUE duckdb_prepared_statement_bind_null(VALUE self, VALUE vidx)
|
172
186
|
{
|
173
187
|
rubyDuckDBPreparedStatement *ctx;
|
@@ -175,7 +189,7 @@ static VALUE duckdb_prepared_statement_bind_null(VALUE self, VALUE vidx)
|
|
175
189
|
|
176
190
|
Data_Get_Struct(self, rubyDuckDBPreparedStatement, ctx);
|
177
191
|
if (duckdb_bind_null(ctx->prepared_statement, idx) == DuckDBError) {
|
178
|
-
rb_raise(eDuckDBError, "fail to bind %
|
192
|
+
rb_raise(eDuckDBError, "fail to bind %llu parameter", (unsigned long long)idx);
|
179
193
|
}
|
180
194
|
return self;
|
181
195
|
}
|
@@ -196,5 +210,8 @@ void init_duckdb_prepared_statement(void)
|
|
196
210
|
rb_define_method(cDuckDBPreparedStatement, "bind_float", duckdb_prepared_statement_bind_float, 2);
|
197
211
|
rb_define_method(cDuckDBPreparedStatement, "bind_double", duckdb_prepared_statement_bind_double, 2);
|
198
212
|
rb_define_method(cDuckDBPreparedStatement, "bind_varchar", duckdb_prepared_statement_bind_varchar, 2);
|
213
|
+
#ifdef HAVE_DUCKDB_VALUE_BLOB
|
214
|
+
rb_define_method(cDuckDBPreparedStatement, "bind_blob", duckdb_prepared_statement_bind_blob, 2);
|
215
|
+
#endif /* HAVE_DUCKDB_VALUE_BLOB */
|
199
216
|
rb_define_method(cDuckDBPreparedStatement, "bind_null", duckdb_prepared_statement_bind_null, 1);
|
200
217
|
}
|
data/ext/duckdb/result.c
CHANGED
@@ -52,6 +52,14 @@ static VALUE to_ruby_obj_double(duckdb_result *result, idx_t col_idx, idx_t row_
|
|
52
52
|
return DBL2NUM(dval);
|
53
53
|
}
|
54
54
|
|
55
|
+
#ifdef HAVE_DUCKDB_VALUE_BLOB
|
56
|
+
static VALUE to_ruby_obj_string_from_blob(duckdb_result *result, idx_t col_idx, idx_t row_idx)
|
57
|
+
{
|
58
|
+
duckdb_blob bval = duckdb_value_blob(result, col_idx, row_idx);
|
59
|
+
return rb_str_new(bval.data, bval.size);
|
60
|
+
}
|
61
|
+
#endif /* HAVE_DUCKDB_VALUE_BLOB */
|
62
|
+
|
55
63
|
static VALUE to_ruby_obj(duckdb_result *result, idx_t col_idx, idx_t row_idx)
|
56
64
|
{
|
57
65
|
char *p;
|
@@ -72,6 +80,10 @@ static VALUE to_ruby_obj(duckdb_result *result, idx_t col_idx, idx_t row_idx)
|
|
72
80
|
return to_ruby_obj_float(result, col_idx, row_idx);
|
73
81
|
case DUCKDB_TYPE_DOUBLE:
|
74
82
|
return to_ruby_obj_double(result, col_idx, row_idx);
|
83
|
+
#ifdef HAVE_DUCKDB_VALUE_BLOB
|
84
|
+
case DUCKDB_TYPE_BLOB:
|
85
|
+
return to_ruby_obj_string_from_blob(result, col_idx, row_idx);
|
86
|
+
#endif /* HAVE_DUCKDB_VALUE_BLOB */
|
75
87
|
default:
|
76
88
|
p = duckdb_value_varchar(result, col_idx, row_idx);
|
77
89
|
obj = rb_str_new2(p);
|
data/ext/duckdb/ruby-duckdb.h
CHANGED
@@ -9,6 +9,22 @@
|
|
9
9
|
#include "./result.h"
|
10
10
|
#include "./prepared_statement.h"
|
11
11
|
|
12
|
+
#ifdef HAVE_DUCKDB_VALUE_BLOB
|
13
|
+
|
14
|
+
#include "./blob.h"
|
15
|
+
|
16
|
+
#endif /* HAVE_DUCKDB_VALUE_BLOB */
|
17
|
+
|
12
18
|
extern VALUE mDuckDB;
|
19
|
+
extern VALUE cDuckDBDatabase;
|
20
|
+
extern VALUE cDuckDBConnection;
|
21
|
+
|
22
|
+
#ifdef HAVE_DUCKDB_VALUE_BLOB
|
23
|
+
|
24
|
+
extern VALUE cDuckDBBlob;
|
25
|
+
|
26
|
+
#endif /* HAVE_DUCKDB_VALUE_BLOB */
|
27
|
+
|
28
|
+
extern VALUE eDuckDBError;
|
13
29
|
|
14
30
|
#endif
|
@@ -33,7 +33,11 @@ module DuckDB
|
|
33
33
|
when Integer
|
34
34
|
bind_int64(i, value)
|
35
35
|
when String
|
36
|
-
|
36
|
+
if defined?(DuckDB::Blob)
|
37
|
+
blob?(value) ? bind_blob(i, value) : bind_varchar(i, value)
|
38
|
+
else
|
39
|
+
bind_varchar(i, value)
|
40
|
+
end
|
37
41
|
when TrueClass, FalseClass
|
38
42
|
bind_boolean(i, value)
|
39
43
|
when Time
|
@@ -44,5 +48,11 @@ module DuckDB
|
|
44
48
|
rb_raise(DuckDB::Error, "not supported type #{value} (value.class)")
|
45
49
|
end
|
46
50
|
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def blob?(value)
|
55
|
+
value.instance_of?(DuckDB::Blob) || value.encoding == Encoding::BINARY
|
56
|
+
end
|
47
57
|
end
|
48
58
|
end
|
data/lib/duckdb/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: duckdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masaki Suketa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -75,7 +75,8 @@ extensions:
|
|
75
75
|
- ext/duckdb/extconf.rb
|
76
76
|
extra_rdoc_files: []
|
77
77
|
files:
|
78
|
-
- ".github/workflows/
|
78
|
+
- ".github/workflows/test_on_macos.yml"
|
79
|
+
- ".github/workflows/test_on_ubuntu.yml"
|
79
80
|
- ".gitignore"
|
80
81
|
- ".travis.yml"
|
81
82
|
- CHANGELOG.md
|
@@ -87,6 +88,8 @@ files:
|
|
87
88
|
- bin/console
|
88
89
|
- bin/setup
|
89
90
|
- duckdb.gemspec
|
91
|
+
- ext/duckdb/blob.c
|
92
|
+
- ext/duckdb/blob.h
|
90
93
|
- ext/duckdb/connection.c
|
91
94
|
- ext/duckdb/connection.h
|
92
95
|
- ext/duckdb/database.c
|
@@ -121,14 +124,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
121
124
|
requirements:
|
122
125
|
- - ">="
|
123
126
|
- !ruby/object:Gem::Version
|
124
|
-
version: 2.
|
127
|
+
version: 2.5.0
|
125
128
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
129
|
requirements:
|
127
130
|
- - ">="
|
128
131
|
- !ruby/object:Gem::Version
|
129
132
|
version: '0'
|
130
133
|
requirements: []
|
131
|
-
rubygems_version: 3.
|
134
|
+
rubygems_version: 3.2.3
|
132
135
|
signing_key:
|
133
136
|
specification_version: 4
|
134
137
|
summary: This module is Ruby binding for DuckDB database engine.
|
@@ -1,66 +0,0 @@
|
|
1
|
-
name: Ubuntu
|
2
|
-
|
3
|
-
on: [push]
|
4
|
-
|
5
|
-
jobs:
|
6
|
-
build:
|
7
|
-
|
8
|
-
runs-on: ubuntu-latest
|
9
|
-
strategy:
|
10
|
-
matrix:
|
11
|
-
ruby: ['2.5.8', '2.6.6', '2.7.1', 'head']
|
12
|
-
duckdb: ['0.1.8', '0.1.9']
|
13
|
-
|
14
|
-
steps:
|
15
|
-
- uses: actions/checkout@v2
|
16
|
-
|
17
|
-
- name: Set up Ruby
|
18
|
-
uses: ruby/setup-ruby@v1
|
19
|
-
with:
|
20
|
-
ruby-version: ${{ matrix.ruby }}
|
21
|
-
|
22
|
-
- name: duckdb 0.1.8 cache
|
23
|
-
id: duckdb-cache-v0_1_8
|
24
|
-
uses: actions/cache@v1.1.0
|
25
|
-
with:
|
26
|
-
path: duckdb-v0.1.8
|
27
|
-
key: ${{ runner.os }}-duckdb-v0_1_8_001
|
28
|
-
restore-keys: |
|
29
|
-
${{ runner.os }}-duckdb-v0_1_8
|
30
|
-
|
31
|
-
- name: duckdb 0.1.9 cache
|
32
|
-
id: duckdb-cache-v0_1_9
|
33
|
-
uses: actions/cache@v1.1.0
|
34
|
-
with:
|
35
|
-
path: duckdb-v0.1.9
|
36
|
-
key: ${{ runner.os }}-duckdb-v0_1_9_001
|
37
|
-
restore-keys: |
|
38
|
-
${{ runner.os }}-duckdb-v0_1_9
|
39
|
-
|
40
|
-
- name: Build duckdb 0.1.8
|
41
|
-
if: steps.duckdb-cache-v0_1_8.outputs.cache-hit != 'true'
|
42
|
-
run: |
|
43
|
-
git clone -b v0.1.8 https://github.com/cwida/duckdb.git duckdb-tmp-v0.1.8
|
44
|
-
cd duckdb-tmp-v0.1.8 && make && cd ..
|
45
|
-
rm -rf duckdb-v0.1.8
|
46
|
-
mkdir -p duckdb-v0.1.8/build/release/src duckdb-v0.1.8/src
|
47
|
-
cp -rip duckdb-tmp-v0.1.8/build/release/src/*.so duckdb-v0.1.8/build/release/src
|
48
|
-
cp -rip duckdb-tmp-v0.1.8/src/include duckdb-v0.1.8/src/
|
49
|
-
|
50
|
-
- name: Build duckdb 0.1.9
|
51
|
-
if: steps.duckdb-cache-v0_1_9.outputs.cache-hit != 'true'
|
52
|
-
run: |
|
53
|
-
git clone -b v0.1.9 https://github.com/cwida/duckdb.git duckdb-tmp-v0.1.9
|
54
|
-
cd duckdb-tmp-v0.1.9 && make && cd ..
|
55
|
-
rm -rf duckdb-v0.1.9
|
56
|
-
mkdir -p duckdb-v0.1.9/build/release/src duckdb-v0.1.9/src
|
57
|
-
cp -rip duckdb-tmp-v0.1.9/build/release/src/*.so duckdb-v0.1.9/build/release/src
|
58
|
-
cp -rip duckdb-tmp-v0.1.9/src/include duckdb-v0.1.9/src/
|
59
|
-
|
60
|
-
- name: Build and test with Rake with Ruby ${{ matrix.ruby }}
|
61
|
-
env:
|
62
|
-
DUCKDB_VERSION: ${{ matrix.duckdb }}
|
63
|
-
run: |
|
64
|
-
gem install bundler
|
65
|
-
bundle install --jobs 4 --retry 3
|
66
|
-
bundle exec rake -- --with-duckdb-include=${GITHUB_WORKSPACE}/duckdb-v${DUCKDB_VERSION}/src/include --with-duckdb-lib=${GITHUB_WORKSPACE}/duckdb-v${DUCKDB_VERSION}/build/release/src/
|