duckdb 0.2.9.0 → 0.3.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 +4 -4
- data/.github/workflows/test_on_macos.yml +7 -22
- data/.github/workflows/test_on_ubuntu.yml +1 -1
- data/.github/workflows/test_on_windows.yml +1 -3
- data/CHANGELOG.md +7 -0
- data/Gemfile.lock +1 -1
- data/ext/duckdb/connection.c +12 -12
- data/ext/duckdb/database.c +10 -16
- data/lib/duckdb/appender.rb +33 -38
- data/lib/duckdb/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ba5fa57fc1eaf1a2b0bb6ffa7379b8982d3858d17075c83b949af79331322a1e
|
4
|
+
data.tar.gz: cbe87ed1de6de024e9941e063102e7bf31a5407945d99180121a38fde703a8d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 52d8cff8db75e7e2d7f86632573fda6d1fe021e7ff38524edf9307e2d3c4720541daab609caee24307c3a8b6a0fa40d6b1cca4151d1edbb8b17f3c7f770bb7d3
|
7
|
+
data.tar.gz: 371925fa099235c382cdd370f0d43d346f40b9dc45332931956f953ab742b0a55ec7afa52f73aa942695fe30b1df78722e7afadb1de66a6250381fdf0ed990f8
|
@@ -8,7 +8,7 @@ jobs:
|
|
8
8
|
strategy:
|
9
9
|
matrix:
|
10
10
|
ruby: ['2.6.8', '2.7.4', '3.0.2', 'head']
|
11
|
-
duckdb: ['0.
|
11
|
+
duckdb: ['0.3.0', '0.3.1']
|
12
12
|
|
13
13
|
steps:
|
14
14
|
- uses: actions/checkout@v2
|
@@ -18,32 +18,17 @@ jobs:
|
|
18
18
|
with:
|
19
19
|
ruby-version: ${{ matrix.ruby }}
|
20
20
|
|
21
|
-
- name: duckdb
|
22
|
-
id: duckdb-cache
|
23
|
-
uses: actions/cache@v2
|
24
|
-
with:
|
25
|
-
path: /usr/local/Cellar/duckdb@${{ matrix.duckdb }}
|
26
|
-
key: ${{ runner.os }}-duckdb-v${{ matrix.duckdb }}
|
27
|
-
|
28
|
-
- name: Install duckdb v${{ matrix.duckdb }} by brew
|
21
|
+
- name: download duckdb binary for MacOS 64bit
|
29
22
|
env:
|
30
23
|
DUCKDB_VERSION: ${{ matrix.duckdb }}
|
31
|
-
if: steps.duckdb-cache.outputs.cache-hit != 'true'
|
32
24
|
run: |
|
33
|
-
|
34
|
-
brew extract duckdb duckdb/taps --version $DUCKDB_VERSION
|
35
|
-
brew install duckdb/taps/duckdb@$DUCKDB_VERSION
|
25
|
+
curl -OL https://github.com/duckdb/duckdb/releases/download/v${DUCKDB_VERSION}/libduckdb-osx-amd64.zip
|
36
26
|
|
37
|
-
- name:
|
38
|
-
env:
|
39
|
-
DUCKDB_VERSION: ${{ matrix.duckdb }}
|
27
|
+
- name: extract zip file
|
40
28
|
run: |
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
ln -s $header /usr/local/include/duckdb.h
|
45
|
-
ln -s $lib /usr/local/lib/libduckdb.dylib
|
46
|
-
fi
|
29
|
+
unzip libduckdb-osx-amd64.zip
|
30
|
+
cp duckdb.h /usr/local/include
|
31
|
+
cp libduckdb.dylib /usr/local/lib
|
47
32
|
|
48
33
|
- name: Build and test with Rake with Ruby ${{ matrix.ruby }}
|
49
34
|
run: |
|
@@ -8,7 +8,7 @@ jobs:
|
|
8
8
|
strategy:
|
9
9
|
matrix:
|
10
10
|
ruby: ['2.6.8', '2.7.4', '3.0.2', 'head']
|
11
|
-
duckdb: ['0.
|
11
|
+
duckdb: ['0.3.0', '0.3.1']
|
12
12
|
|
13
13
|
steps:
|
14
14
|
- uses: actions/checkout@v2
|
@@ -36,8 +36,6 @@ jobs:
|
|
36
36
|
run: |
|
37
37
|
cp duckdb.dll C:/Windows/System32/
|
38
38
|
|
39
|
-
# FIXME: rake test fails with LoadError
|
40
|
-
# C:/hostedtoolcache/windows/Ruby/2.7.3/x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:83:in `require': 126: The specified module could not be found. - D:/a/ruby-duckdb/ruby-duckdb/lib/duckdb/duckdb_native.so (LoadError)`
|
41
39
|
- name: rake test
|
42
40
|
run: |
|
43
41
|
rake test
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# ChangeLog
|
2
2
|
|
3
|
+
# 0.3.1.0
|
4
|
+
|
5
|
+
- bump duckdb to 0.3.1 in CI.
|
6
|
+
- bump duckdb to 0.3.0 in CI.
|
7
|
+
- append_time, append_date, append_timestamp of DuckDB::Appender accept argument
|
8
|
+
having to_str to convert time string.
|
9
|
+
|
3
10
|
# 0.2.9.0
|
4
11
|
|
5
12
|
- add DuckDB::Appender#append
|
data/Gemfile.lock
CHANGED
data/ext/duckdb/connection.c
CHANGED
@@ -2,22 +2,25 @@
|
|
2
2
|
|
3
3
|
VALUE cDuckDBConnection;
|
4
4
|
|
5
|
-
static void deallocate(void *ctx)
|
6
|
-
|
5
|
+
static void deallocate(void *ctx);
|
6
|
+
static VALUE allocate(VALUE klass);
|
7
|
+
static VALUE duckdb_connection_disconnect(VALUE self);
|
8
|
+
static VALUE duckdb_connection_connect(VALUE self, VALUE oDuckDBDatabase);
|
9
|
+
static VALUE duckdb_connection_query_sql(VALUE self, VALUE str);
|
10
|
+
|
11
|
+
static void deallocate(void *ctx) {
|
7
12
|
rubyDuckDBConnection *p = (rubyDuckDBConnection *)ctx;
|
8
13
|
|
9
14
|
duckdb_disconnect(&(p->con));
|
10
15
|
xfree(p);
|
11
16
|
}
|
12
17
|
|
13
|
-
static VALUE allocate(VALUE klass)
|
14
|
-
{
|
18
|
+
static VALUE allocate(VALUE klass) {
|
15
19
|
rubyDuckDBConnection *ctx = xcalloc((size_t)1, sizeof(rubyDuckDBConnection));
|
16
20
|
return Data_Wrap_Struct(klass, NULL, deallocate, ctx);
|
17
21
|
}
|
18
22
|
|
19
|
-
VALUE create_connection(VALUE oDuckDBDatabase)
|
20
|
-
{
|
23
|
+
VALUE create_connection(VALUE oDuckDBDatabase) {
|
21
24
|
rubyDuckDB *ctxdb;
|
22
25
|
rubyDuckDBConnection *ctxcon;
|
23
26
|
VALUE obj;
|
@@ -35,8 +38,7 @@ VALUE create_connection(VALUE oDuckDBDatabase)
|
|
35
38
|
return obj;
|
36
39
|
}
|
37
40
|
|
38
|
-
static VALUE duckdb_connection_disconnect(VALUE self)
|
39
|
-
{
|
41
|
+
static VALUE duckdb_connection_disconnect(VALUE self) {
|
40
42
|
rubyDuckDBConnection *ctx;
|
41
43
|
|
42
44
|
Data_Get_Struct(self, rubyDuckDBConnection, ctx);
|
@@ -45,8 +47,7 @@ static VALUE duckdb_connection_disconnect(VALUE self)
|
|
45
47
|
return self;
|
46
48
|
}
|
47
49
|
|
48
|
-
static VALUE duckdb_connection_connect(VALUE self, VALUE oDuckDBDatabase)
|
49
|
-
{
|
50
|
+
static VALUE duckdb_connection_connect(VALUE self, VALUE oDuckDBDatabase) {
|
50
51
|
rubyDuckDBConnection *ctx;
|
51
52
|
rubyDuckDB *ctxdb;
|
52
53
|
|
@@ -63,8 +64,7 @@ static VALUE duckdb_connection_connect(VALUE self, VALUE oDuckDBDatabase)
|
|
63
64
|
return self;
|
64
65
|
}
|
65
66
|
|
66
|
-
static VALUE duckdb_connection_query_sql(VALUE self, VALUE str)
|
67
|
-
{
|
67
|
+
static VALUE duckdb_connection_query_sql(VALUE self, VALUE str) {
|
68
68
|
rubyDuckDBConnection *ctx;
|
69
69
|
rubyDuckDBResult *ctxr;
|
70
70
|
|
data/ext/duckdb/database.c
CHANGED
@@ -7,28 +7,26 @@ static void deallocate(void * ctx);
|
|
7
7
|
static VALUE allocate(VALUE klass);
|
8
8
|
static VALUE duckdb_database_s_open(int argc, VALUE *argv, VALUE cDuckDBDatabase);
|
9
9
|
static VALUE duckdb_database_s_open_ext(int argc, VALUE *argv, VALUE cDuckDBDatabase);
|
10
|
+
static VALUE duckdb_database_connect(VALUE self);
|
11
|
+
static VALUE duckdb_database_close(VALUE self);
|
10
12
|
|
11
|
-
static void close_database(rubyDuckDB *p)
|
12
|
-
{
|
13
|
+
static void close_database(rubyDuckDB *p) {
|
13
14
|
duckdb_close(&(p->db));
|
14
15
|
}
|
15
16
|
|
16
|
-
static void deallocate(void * ctx)
|
17
|
-
{
|
17
|
+
static void deallocate(void * ctx) {
|
18
18
|
rubyDuckDB *p = (rubyDuckDB *)ctx;
|
19
19
|
|
20
20
|
close_database(p);
|
21
21
|
xfree(p);
|
22
22
|
}
|
23
23
|
|
24
|
-
static VALUE allocate(VALUE klass)
|
25
|
-
{
|
24
|
+
static VALUE allocate(VALUE klass) {
|
26
25
|
rubyDuckDB *ctx = xcalloc((size_t)1, sizeof(rubyDuckDB));
|
27
26
|
return Data_Wrap_Struct(klass, NULL, deallocate, ctx);
|
28
27
|
}
|
29
28
|
|
30
|
-
static VALUE duckdb_database_s_open(int argc, VALUE *argv, VALUE cDuckDBDatabase)
|
31
|
-
{
|
29
|
+
static VALUE duckdb_database_s_open(int argc, VALUE *argv, VALUE cDuckDBDatabase) {
|
32
30
|
rubyDuckDB *ctx;
|
33
31
|
VALUE obj;
|
34
32
|
|
@@ -50,8 +48,7 @@ static VALUE duckdb_database_s_open(int argc, VALUE *argv, VALUE cDuckDBDatabase
|
|
50
48
|
}
|
51
49
|
|
52
50
|
#ifdef HAVE_DUCKDB_OPEN_EXT
|
53
|
-
static VALUE duckdb_database_s_open_ext(int argc, VALUE *argv, VALUE cDuckDBDatabase)
|
54
|
-
{
|
51
|
+
static VALUE duckdb_database_s_open_ext(int argc, VALUE *argv, VALUE cDuckDBDatabase) {
|
55
52
|
rubyDuckDB *ctx;
|
56
53
|
VALUE obj;
|
57
54
|
rubyDuckDBConfig *ctx_config;
|
@@ -86,8 +83,7 @@ static VALUE duckdb_database_s_open_ext(int argc, VALUE *argv, VALUE cDuckDBData
|
|
86
83
|
}
|
87
84
|
#endif /* HAVE_DUCKDB_OPEN_EXT */
|
88
85
|
|
89
|
-
static VALUE duckdb_database_connect(VALUE self)
|
90
|
-
{
|
86
|
+
static VALUE duckdb_database_connect(VALUE self) {
|
91
87
|
return create_connection(self);
|
92
88
|
}
|
93
89
|
|
@@ -97,16 +93,14 @@ static VALUE duckdb_database_connect(VALUE self)
|
|
97
93
|
*
|
98
94
|
* closes DuckDB database.
|
99
95
|
*/
|
100
|
-
static VALUE duckdb_database_close(VALUE self)
|
101
|
-
{
|
96
|
+
static VALUE duckdb_database_close(VALUE self) {
|
102
97
|
rubyDuckDB *ctx;
|
103
98
|
Data_Get_Struct(self, rubyDuckDB, ctx);
|
104
99
|
close_database(ctx);
|
105
100
|
return self;
|
106
101
|
}
|
107
102
|
|
108
|
-
void init_duckdb_database(void)
|
109
|
-
{
|
103
|
+
void init_duckdb_database(void) {
|
110
104
|
cDuckDBDatabase = rb_define_class_under(mDuckDB, "Database", rb_cObject);
|
111
105
|
rb_define_alloc_func(cDuckDBDatabase, allocate);
|
112
106
|
rb_define_singleton_method(cDuckDBDatabase, "_open", duckdb_database_s_open, -1);
|
data/lib/duckdb/appender.rb
CHANGED
@@ -63,18 +63,16 @@ module DuckDB
|
|
63
63
|
# appender.flush
|
64
64
|
#
|
65
65
|
def append_date(value)
|
66
|
-
case value
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
raise(ArgumentError, "Argument `#{value}` must be Date, Time or String.")
|
77
|
-
end
|
66
|
+
date = case value
|
67
|
+
when Date, Time
|
68
|
+
value
|
69
|
+
else
|
70
|
+
begin
|
71
|
+
Date.parse(value)
|
72
|
+
rescue
|
73
|
+
raise(ArgumentError, "Cannot parse argument `#{value}` to Date.")
|
74
|
+
end
|
75
|
+
end
|
78
76
|
|
79
77
|
_append_date(date.year, date.month, date.day)
|
80
78
|
end
|
@@ -95,18 +93,16 @@ module DuckDB
|
|
95
93
|
# appender.flush
|
96
94
|
#
|
97
95
|
def append_time(value)
|
98
|
-
case value
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
raise(ArgumentError, "Argument `#{value}` must be Time or String.")
|
109
|
-
end
|
96
|
+
time = case value
|
97
|
+
when Time
|
98
|
+
value
|
99
|
+
else
|
100
|
+
begin
|
101
|
+
Time.parse(value)
|
102
|
+
rescue
|
103
|
+
raise(ArgumentError, "Cannot parse argument `#{value}` to Time.")
|
104
|
+
end
|
105
|
+
end
|
110
106
|
|
111
107
|
_append_time(time.hour, time.min, time.sec, time.usec)
|
112
108
|
end
|
@@ -128,20 +124,19 @@ module DuckDB
|
|
128
124
|
# appender.flush
|
129
125
|
#
|
130
126
|
def append_timestamp(value)
|
131
|
-
case value
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
end
|
127
|
+
time = case value
|
128
|
+
when Time
|
129
|
+
value
|
130
|
+
when Date
|
131
|
+
value.to_time
|
132
|
+
else
|
133
|
+
begin
|
134
|
+
Time.parse(value)
|
135
|
+
rescue
|
136
|
+
raise(ArgumentError, "Cannot parse argument `#{value}` to Time or Date.")
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
145
140
|
_append_timestamp(time.year, time.month, time.day, time.hour, time.min, time.sec, time.nsec / 1000)
|
146
141
|
end
|
147
142
|
|
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.
|
4
|
+
version: 0.3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masaki Suketa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|