duckdb 0.9.1 → 0.9.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/test_on_macos.yml +1 -1
- data/.github/workflows/test_on_ubuntu.yml +1 -1
- data/.github/workflows/test_on_windows.yml +1 -1
- data/CHANGELOG.md +17 -6
- data/Gemfile.lock +3 -3
- data/ext/duckdb/duckdb.c +1 -0
- data/ext/duckdb/extconf.rb +1 -6
- data/ext/duckdb/pending_result.c +100 -0
- data/ext/duckdb/pending_result.h +13 -0
- data/ext/duckdb/prepared_statement.c +6 -1
- data/ext/duckdb/prepared_statement.h +1 -0
- data/ext/duckdb/result.c +0 -6
- data/ext/duckdb/ruby-duckdb.h +1 -8
- data/lib/duckdb/library_version.rb +1 -1
- data/lib/duckdb/pending_result.rb +39 -0
- data/lib/duckdb/prepared_statement.rb +4 -0
- data/lib/duckdb/result.rb +16 -12
- data/lib/duckdb/version.rb +1 -1
- data/lib/duckdb.rb +1 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f3ac463fffc2fc6362c34abbfa5b862a7b8c993052ede087ca4403542c98dc8
|
4
|
+
data.tar.gz: c5ea1236f240a62165b7e371ae48033447868d119261def6c5310d3911e9df91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 210fe783740da4b6eb7991de416a7b5581403d8ad3661625110e275c030fe9dc1192d6fe2d73dcb778e53408b0e349eb28f37f2a1308d31ff30b0b783be5e498
|
7
|
+
data.tar.gz: b6fcc8d47c20ff9ce053122d9d9c03f4b19f1a72d9cd56addc1704d862ab7cfda4b3bec88bb3d8580befa006dcfeeee76138e00a2a34f065cca630bde523fb7d
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# ChangeLog
|
2
2
|
|
3
|
+
# 0.9.1.1
|
4
|
+
- change default branch to main from master.
|
5
|
+
- add DuckDB::PendingResult class.
|
6
|
+
- add DuckDB::PendingResult#state.
|
7
|
+
- add DuckDB::PendingResult#execute_task.
|
8
|
+
- add DuckDB::PendingResult#execute_pending.
|
9
|
+
- add DuckDB::PreparedStatement#pending_prepared.
|
10
|
+
|
11
|
+
## Breaking Changes
|
12
|
+
- drop duckdb v0.7.x.
|
13
|
+
|
3
14
|
# 0.9.1
|
4
15
|
- add `DuckDB::PreparedStatement#parameter_name`.
|
5
16
|
- bump duckdb to 0.9.1.
|
@@ -11,7 +22,7 @@
|
|
11
22
|
# 0.9.0
|
12
23
|
- bump duckdb to 0.9.0.
|
13
24
|
|
14
|
-
## Breaking
|
25
|
+
## Breaking Changes
|
15
26
|
- deprecation warning when DuckDB::Result.each calling with `DuckDB::Result.use_chunk_each` is false.
|
16
27
|
The `each` behavior will be same as `DuckDB::Result.chunk_each` in the future.
|
17
28
|
set `DuckDB::Result.use_chunk_each = true` to suppress the warning.
|
@@ -54,7 +65,7 @@
|
|
54
65
|
- support enum type in DuckDB::Result#chunk_each.
|
55
66
|
- support uuid type in DuckDB::Result#chunk_each.
|
56
67
|
|
57
|
-
## Breaking
|
68
|
+
## Breaking Changes
|
58
69
|
|
59
70
|
- DuckDB::Config.set_config does not raise exception when invalid key specified.
|
60
71
|
Instead, DuckDB::Database.open raises DuckDB::Error with invalid key configuration.
|
@@ -64,7 +75,7 @@
|
|
64
75
|
- add DuckDB::Result#_to_decimal_internal
|
65
76
|
- add DuckDB::Result#_to_hugeint_internal
|
66
77
|
|
67
|
-
## Breaking
|
78
|
+
## Breaking Changes
|
68
79
|
- DuckDB::Result returns BigDecimal object instead of String object if the column type is DECIMAL.
|
69
80
|
|
70
81
|
# 0.7.1
|
@@ -81,7 +92,7 @@
|
|
81
92
|
- add DuckDB::Result#__to_decimal_internal
|
82
93
|
- add Ruby 3.2.1 on CI test
|
83
94
|
- add Ruby mswin on CI test
|
84
|
-
## Breaking
|
95
|
+
## Breaking Changes
|
85
96
|
- drop Ruby 2.6
|
86
97
|
|
87
98
|
# 0.6.1
|
@@ -95,7 +106,7 @@
|
|
95
106
|
- bump Ruby to 3.2.0rc1
|
96
107
|
- bump duckdb to 0.6.0
|
97
108
|
|
98
|
-
## Breaking
|
109
|
+
## Breaking Changes
|
99
110
|
- drop duckdb <= 0.4.x. ruby-duckdb supports duckdb >= 0.5.0
|
100
111
|
|
101
112
|
# 0.5.1.1
|
@@ -114,7 +125,7 @@
|
|
114
125
|
- add DuckDB::Result#row_count, DuckDB::Result#row_size(alias of row_count).
|
115
126
|
- add DuckDB::Result#column_count, DuckDB::Result#column_size(alias of column_count).
|
116
127
|
|
117
|
-
## Breaking
|
128
|
+
## Breaking Changes
|
118
129
|
- bind_varchar does not raised DuckDB::Error when the binding column is date or datetime.
|
119
130
|
|
120
131
|
# 0.3.4.0
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
duckdb (0.9.1)
|
4
|
+
duckdb (0.9.1.1)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
9
|
benchmark-ips (2.12.0)
|
10
|
-
mini_portile2 (2.8.
|
10
|
+
mini_portile2 (2.8.5)
|
11
11
|
minitest (5.20.0)
|
12
12
|
nokogiri (1.15.4)
|
13
13
|
mini_portile2 (~> 2.8.2)
|
@@ -15,7 +15,7 @@ GEM
|
|
15
15
|
nokogiri (1.15.4-x86_64-linux)
|
16
16
|
racc (~> 1.4)
|
17
17
|
racc (1.7.1)
|
18
|
-
rake (13.0
|
18
|
+
rake (13.1.0)
|
19
19
|
rake-compiler (1.2.5)
|
20
20
|
rake
|
21
21
|
ruby_memcheck (2.2.0)
|
data/ext/duckdb/duckdb.c
CHANGED
data/ext/duckdb/extconf.rb
CHANGED
@@ -20,13 +20,8 @@ end
|
|
20
20
|
|
21
21
|
dir_config('duckdb')
|
22
22
|
|
23
|
-
check_duckdb_library('duckdb_extract_statements', '0.7.0')
|
24
|
-
|
25
|
-
# check duckdb >= 0.7.0
|
26
|
-
have_func('duckdb_extract_statements', 'duckdb.h')
|
27
|
-
|
28
23
|
# check duckdb >= 0.8.0
|
29
|
-
|
24
|
+
check_duckdb_library('duckdb_string_is_inlined', '0.8.0')
|
30
25
|
|
31
26
|
# check duckdb >= 0.9.0
|
32
27
|
have_func('duckdb_bind_parameter_index', 'duckdb.h')
|
@@ -0,0 +1,100 @@
|
|
1
|
+
#include "ruby-duckdb.h"
|
2
|
+
|
3
|
+
static VALUE cDuckDBPendingResult;
|
4
|
+
|
5
|
+
static void deallocate(void *ctx);
|
6
|
+
static VALUE allocate(VALUE klass);
|
7
|
+
static size_t memsize(const void *p);
|
8
|
+
static VALUE duckdb_pending_result_initialize(VALUE self, VALUE oDuckDBPreparedStatement);
|
9
|
+
static VALUE duckdb_pending_result_execute_task(VALUE self);
|
10
|
+
static VALUE duckdb_pending_result_execute_pending(VALUE self);
|
11
|
+
|
12
|
+
#ifdef HAVE_DUCKDB_H_GE_V090
|
13
|
+
static VALUE duckdb_pending_result_execution_finished_p(VALUE self);
|
14
|
+
#endif
|
15
|
+
|
16
|
+
static VALUE duckdb_pending_result__state(VALUE self);
|
17
|
+
|
18
|
+
static const rb_data_type_t pending_result_data_type = {
|
19
|
+
"DuckDB/PendingResult",
|
20
|
+
{NULL, deallocate, memsize,},
|
21
|
+
0, 0, RUBY_TYPED_FREE_IMMEDIATELY
|
22
|
+
};
|
23
|
+
|
24
|
+
static void deallocate(void *ctx) {
|
25
|
+
rubyDuckDBPendingResult *p = (rubyDuckDBPendingResult *)ctx;
|
26
|
+
|
27
|
+
duckdb_destroy_pending(&(p->pending_result));
|
28
|
+
xfree(p);
|
29
|
+
}
|
30
|
+
|
31
|
+
static VALUE allocate(VALUE klass) {
|
32
|
+
rubyDuckDBPendingResult *ctx = xcalloc((size_t)1, sizeof(rubyDuckDBPendingResult));
|
33
|
+
ctx->state = DUCKDB_PENDING_RESULT_NOT_READY;
|
34
|
+
return TypedData_Wrap_Struct(klass, &pending_result_data_type, ctx);
|
35
|
+
}
|
36
|
+
|
37
|
+
static size_t memsize(const void *p) {
|
38
|
+
return sizeof(rubyDuckDBPendingResult);
|
39
|
+
}
|
40
|
+
|
41
|
+
static VALUE duckdb_pending_result_initialize(VALUE self, VALUE oDuckDBPreparedStatement) {
|
42
|
+
rubyDuckDBPendingResult *ctx = get_struct_pending_result(self);
|
43
|
+
rubyDuckDBPreparedStatement *stmt = get_struct_prepared_statement(oDuckDBPreparedStatement);
|
44
|
+
|
45
|
+
if (duckdb_pending_prepared(stmt->prepared_statement, &(ctx->pending_result)) == DuckDBError) {
|
46
|
+
rb_raise(eDuckDBError, "%s", duckdb_pending_error(ctx->pending_result));
|
47
|
+
}
|
48
|
+
return self;
|
49
|
+
}
|
50
|
+
|
51
|
+
static VALUE duckdb_pending_result_execute_task(VALUE self) {
|
52
|
+
rubyDuckDBPendingResult *ctx = get_struct_pending_result(self);
|
53
|
+
ctx->state = duckdb_pending_execute_task(ctx->pending_result);
|
54
|
+
return Qnil;
|
55
|
+
}
|
56
|
+
|
57
|
+
#ifdef HAVE_DUCKDB_H_GE_V090
|
58
|
+
static VALUE duckdb_pending_result_execution_finished_p(VALUE self) {
|
59
|
+
rubyDuckDBPendingResult *ctx = get_struct_pending_result(self);
|
60
|
+
return duckdb_pending_execution_is_finished(ctx->state) ? Qtrue : Qfalse;
|
61
|
+
}
|
62
|
+
#endif
|
63
|
+
|
64
|
+
static VALUE duckdb_pending_result_execute_pending(VALUE self) {
|
65
|
+
rubyDuckDBPendingResult *ctx;
|
66
|
+
rubyDuckDBResult *ctxr;
|
67
|
+
VALUE result = create_result();
|
68
|
+
|
69
|
+
TypedData_Get_Struct(self, rubyDuckDBPendingResult, &pending_result_data_type, ctx);
|
70
|
+
ctxr = get_struct_result(result);
|
71
|
+
if (duckdb_execute_pending(ctx->pending_result, &(ctxr->result)) == DuckDBError) {
|
72
|
+
rb_raise(eDuckDBError, "%s", duckdb_pending_error(ctx->pending_result));
|
73
|
+
}
|
74
|
+
return result;
|
75
|
+
}
|
76
|
+
|
77
|
+
static VALUE duckdb_pending_result__state(VALUE self) {
|
78
|
+
rubyDuckDBPendingResult *ctx = get_struct_pending_result(self);
|
79
|
+
return INT2FIX(ctx->state);
|
80
|
+
}
|
81
|
+
|
82
|
+
rubyDuckDBPendingResult *get_struct_pending_result(VALUE obj) {
|
83
|
+
rubyDuckDBPendingResult *ctx;
|
84
|
+
TypedData_Get_Struct(obj, rubyDuckDBPendingResult, &pending_result_data_type, ctx);
|
85
|
+
return ctx;
|
86
|
+
}
|
87
|
+
|
88
|
+
void init_duckdb_pending_result(void) {
|
89
|
+
cDuckDBPendingResult = rb_define_class_under(mDuckDB, "PendingResult", rb_cObject);
|
90
|
+
rb_define_alloc_func(cDuckDBPendingResult, allocate);
|
91
|
+
|
92
|
+
rb_define_method(cDuckDBPendingResult, "initialize", duckdb_pending_result_initialize, 1);
|
93
|
+
rb_define_method(cDuckDBPendingResult, "execute_task", duckdb_pending_result_execute_task, 0);
|
94
|
+
rb_define_method(cDuckDBPendingResult, "execute_pending", duckdb_pending_result_execute_pending, 0);
|
95
|
+
|
96
|
+
#ifdef HAVE_DUCKDB_H_GE_V090
|
97
|
+
rb_define_method(cDuckDBPendingResult, "execution_finished?", duckdb_pending_result_execution_finished_p, 0);
|
98
|
+
#endif
|
99
|
+
rb_define_private_method(cDuckDBPendingResult, "_state", duckdb_pending_result__state, 0);
|
100
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#ifndef RUBY_DUCKDB_PENDING_RESULT_H
|
2
|
+
#define RUBY_DUCKDB_PENDING_RESULT_H
|
3
|
+
|
4
|
+
struct _rubyDuckDBPendingResult {
|
5
|
+
duckdb_pending_result pending_result;
|
6
|
+
duckdb_pending_state state;
|
7
|
+
};
|
8
|
+
|
9
|
+
typedef struct _rubyDuckDBPendingResult rubyDuckDBPendingResult;
|
10
|
+
|
11
|
+
rubyDuckDBPendingResult *get_struct_pending_result(VALUE obj);
|
12
|
+
void init_duckdb_pending_result(void);
|
13
|
+
#endif
|
@@ -341,6 +341,12 @@ static VALUE duckdb_prepared_statement__bind_hugeint(VALUE self, VALUE vidx, VAL
|
|
341
341
|
return self;
|
342
342
|
}
|
343
343
|
|
344
|
+
rubyDuckDBPreparedStatement *get_struct_prepared_statement(VALUE self) {
|
345
|
+
rubyDuckDBPreparedStatement *ctx;
|
346
|
+
TypedData_Get_Struct(self, rubyDuckDBPreparedStatement, &prepared_statement_data_type, ctx);
|
347
|
+
return ctx;
|
348
|
+
}
|
349
|
+
|
344
350
|
void init_duckdb_prepared_statement(void) {
|
345
351
|
cDuckDBPreparedStatement = rb_define_class_under(mDuckDB, "PreparedStatement", rb_cObject);
|
346
352
|
|
@@ -356,7 +362,6 @@ void init_duckdb_prepared_statement(void) {
|
|
356
362
|
rb_define_method(cDuckDBPreparedStatement, "parameter_name", duckdb_prepared_statement_parameter_name, 1);
|
357
363
|
#endif
|
358
364
|
#endif
|
359
|
-
|
360
365
|
rb_define_method(cDuckDBPreparedStatement, "bind_bool", duckdb_prepared_statement_bind_bool, 2);
|
361
366
|
rb_define_method(cDuckDBPreparedStatement, "bind_int8", duckdb_prepared_statement_bind_int8, 2);
|
362
367
|
rb_define_method(cDuckDBPreparedStatement, "bind_int16", duckdb_prepared_statement_bind_int16, 2);
|
data/ext/duckdb/result.c
CHANGED
@@ -37,7 +37,6 @@ static VALUE duckdb_result__enum_internal_type(VALUE oDuckDBResult, VALUE col_id
|
|
37
37
|
static VALUE duckdb_result__enum_dictionary_size(VALUE oDuckDBResult, VALUE col_idx);
|
38
38
|
static VALUE duckdb_result__enum_dictionary_value(VALUE oDuckDBResult, VALUE col_idx, VALUE idx);
|
39
39
|
|
40
|
-
#ifdef HAVE_DUCKDB_H_GE_V080
|
41
40
|
static VALUE vector_date(void *vector_data, idx_t row_idx);
|
42
41
|
static VALUE vector_timestamp(void* vector_data, idx_t row_idx);
|
43
42
|
static VALUE vector_interval(void* vector_data, idx_t row_idx);
|
@@ -52,7 +51,6 @@ static VALUE vector_struct(duckdb_logical_type ty, duckdb_vector vector, idx_t r
|
|
52
51
|
static VALUE vector_uuid(void* vector_data, idx_t row_idx);
|
53
52
|
static VALUE vector_value(duckdb_vector vector, idx_t row_idx);
|
54
53
|
static VALUE duckdb_result_chunk_each(VALUE oDuckDBResult);
|
55
|
-
#endif
|
56
54
|
|
57
55
|
static const rb_data_type_t result_data_type = {
|
58
56
|
"DuckDB/Result",
|
@@ -403,7 +401,6 @@ VALUE create_result(void) {
|
|
403
401
|
return allocate(cDuckDBResult);
|
404
402
|
}
|
405
403
|
|
406
|
-
#ifdef HAVE_DUCKDB_H_GE_V080
|
407
404
|
static VALUE vector_date(void *vector_data, idx_t row_idx) {
|
408
405
|
duckdb_date_struct date = duckdb_from_date(((duckdb_date *) vector_data)[row_idx]);
|
409
406
|
|
@@ -719,7 +716,6 @@ static VALUE duckdb_result_chunk_each(VALUE oDuckDBResult) {
|
|
719
716
|
}
|
720
717
|
return Qnil;
|
721
718
|
}
|
722
|
-
#endif
|
723
719
|
|
724
720
|
void init_duckdb_result(void) {
|
725
721
|
cDuckDBResult = rb_define_class_under(mDuckDB, "Result", rb_cObject);
|
@@ -746,7 +742,5 @@ void init_duckdb_result(void) {
|
|
746
742
|
rb_define_private_method(cDuckDBResult, "_enum_internal_type", duckdb_result__enum_internal_type, 1);
|
747
743
|
rb_define_private_method(cDuckDBResult, "_enum_dictionary_size", duckdb_result__enum_dictionary_size, 1);
|
748
744
|
rb_define_private_method(cDuckDBResult, "_enum_dictionary_value", duckdb_result__enum_dictionary_value, 2);
|
749
|
-
#ifdef HAVE_DUCKDB_H_GE_V080
|
750
745
|
rb_define_method(cDuckDBResult, "chunk_each", duckdb_result_chunk_each, 0);
|
751
|
-
#endif
|
752
746
|
}
|
data/ext/duckdb/ruby-duckdb.h
CHANGED
@@ -4,14 +4,6 @@
|
|
4
4
|
#include "ruby.h"
|
5
5
|
#include <duckdb.h>
|
6
6
|
|
7
|
-
#ifdef HAVE_DUCKDB_EXTRACT_STATEMENTS
|
8
|
-
#define HAVE_DUCKDB_H_GE_V070 1
|
9
|
-
#endif
|
10
|
-
|
11
|
-
#ifdef HAVE_DUCKDB_STRING_IS_INLINED
|
12
|
-
#define HAVE_DUCKDB_H_GE_V080 1
|
13
|
-
#endif
|
14
|
-
|
15
7
|
#ifdef HAVE_DUCKDB_BIND_PARAMETER_INDEX
|
16
8
|
#define HAVE_DUCKDB_H_GE_V090 1
|
17
9
|
#endif
|
@@ -22,6 +14,7 @@
|
|
22
14
|
#include "./result.h"
|
23
15
|
#include "./column.h"
|
24
16
|
#include "./prepared_statement.h"
|
17
|
+
#include "./pending_result.h"
|
25
18
|
#include "./util.h"
|
26
19
|
#include "./converter.h"
|
27
20
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module DuckDB
|
2
|
+
# The DuckDB::PendingResult encapsulates connection with DuckDB pending
|
3
|
+
# result.
|
4
|
+
# PendingResult provides methods to execute SQL asynchronousely and check
|
5
|
+
# if the result is ready and to get the result.
|
6
|
+
#
|
7
|
+
# require 'duckdb'
|
8
|
+
#
|
9
|
+
# DuckDB::Result.use_chunk_each = true
|
10
|
+
#
|
11
|
+
# db = DuckDB::Database.open
|
12
|
+
# con = db.connect
|
13
|
+
# stmt = con.prepared_statement(VERY_SLOW_QUERY)
|
14
|
+
# pending_result = stmt.pending_prepared
|
15
|
+
# while pending_result.state == :not_ready
|
16
|
+
# print '.'
|
17
|
+
# sleep(0.01)
|
18
|
+
# pending_result.execute_task
|
19
|
+
# end
|
20
|
+
# result = pending_result.execute_pending
|
21
|
+
class PendingResult
|
22
|
+
STATES = %i[ready not_ready error no_tasks].freeze
|
23
|
+
|
24
|
+
# returns the state of the pending result.
|
25
|
+
# The result can be :ready, :not_ready, :error, :no_tasks.
|
26
|
+
# (:no_tasks is available only with duckdb 0.9.0 or later.)
|
27
|
+
#
|
28
|
+
# :ready means the result is ready to be fetched, and
|
29
|
+
# you can call `execute_pending` to get the result.
|
30
|
+
#
|
31
|
+
# :not_ready means the result is not ready yet, so
|
32
|
+
# you need to call `execute_task`.
|
33
|
+
#
|
34
|
+
# @return [Symbol] :ready, :not_ready, :error, :no_tasks
|
35
|
+
def state
|
36
|
+
STATES[_state]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -20,6 +20,10 @@ module DuckDB
|
|
20
20
|
RANGE_INT32 = -2_147_483_648..2_147_483_647
|
21
21
|
RANGE_INT64 = -9_223_372_036_854_775_808..9_223_372_036_854_775_807
|
22
22
|
|
23
|
+
def pending_prepared
|
24
|
+
PendingResult.new(self)
|
25
|
+
end
|
26
|
+
|
23
27
|
# binds i-th parameter with SQL prepared statement.
|
24
28
|
# The first argument is index of parameter.
|
25
29
|
# The index of first parameter is 1 not 0.
|
data/lib/duckdb/result.rb
CHANGED
@@ -25,7 +25,7 @@ module DuckDB
|
|
25
25
|
class Result
|
26
26
|
include Enumerable
|
27
27
|
|
28
|
-
|
28
|
+
TO_METHODS = Hash.new(:_to_string).merge(
|
29
29
|
1 => :_to_boolean,
|
30
30
|
3 => :_to_smallint,
|
31
31
|
4 => :_to_integer,
|
@@ -35,21 +35,25 @@ module DuckDB
|
|
35
35
|
16 => :_to_hugeint_internal,
|
36
36
|
18 => :_to_blob,
|
37
37
|
19 => :_to_decimal_internal
|
38
|
-
|
39
|
-
|
40
|
-
ToRuby.default = :_to_string
|
38
|
+
).freeze
|
41
39
|
|
42
40
|
alias column_size column_count
|
43
41
|
alias row_size row_count
|
44
42
|
|
45
|
-
|
46
|
-
|
43
|
+
class << self
|
44
|
+
def new
|
45
|
+
raise DuckDB::Error, 'DuckDB::Result cannot be instantiated directly.'
|
46
|
+
end
|
47
47
|
|
48
|
-
|
49
|
-
|
48
|
+
def use_chunk_each=(val)
|
49
|
+
raise DuckDB::Error, 'chunk_each is not available. Install duckdb >= 0.8.0 and rerun `gem install duckdb`.' unless instance_methods.include?(:chunk_each)
|
50
50
|
|
51
|
-
|
52
|
-
|
51
|
+
@use_chunk_each = val
|
52
|
+
end
|
53
|
+
|
54
|
+
def use_chunk_each?
|
55
|
+
!!@use_chunk_each
|
56
|
+
end
|
53
57
|
end
|
54
58
|
|
55
59
|
def each
|
@@ -58,7 +62,7 @@ module DuckDB
|
|
58
62
|
|
59
63
|
chunk_each { |row| yield row }
|
60
64
|
else
|
61
|
-
warn('this `each` behavior will be deprecated in the future. set `Result.use_chunk_each = true` to use new `each` behavior.')
|
65
|
+
warn('this `each` behavior will be deprecated in the future. set `DuckDB::Result.use_chunk_each = true` to use new `each` behavior.')
|
62
66
|
return to_enum { row_size } unless block_given?
|
63
67
|
|
64
68
|
row_count.times do |row_index|
|
@@ -76,7 +80,7 @@ module DuckDB
|
|
76
80
|
end
|
77
81
|
|
78
82
|
def to_value(row_index, col_index)
|
79
|
-
send(
|
83
|
+
send(TO_METHODS[_column_type(col_index)], row_index, col_index)
|
80
84
|
end
|
81
85
|
|
82
86
|
def enum_dictionary_values(col_index)
|
data/lib/duckdb/version.rb
CHANGED
data/lib/duckdb.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.9.1
|
4
|
+
version: 0.9.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masaki Suketa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-10-
|
11
|
+
date: 2023-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -115,6 +115,8 @@ files:
|
|
115
115
|
- ext/duckdb/error.c
|
116
116
|
- ext/duckdb/error.h
|
117
117
|
- ext/duckdb/extconf.rb
|
118
|
+
- ext/duckdb/pending_result.c
|
119
|
+
- ext/duckdb/pending_result.h
|
118
120
|
- ext/duckdb/prepared_statement.c
|
119
121
|
- ext/duckdb/prepared_statement.h
|
120
122
|
- ext/duckdb/result.c
|
@@ -132,6 +134,7 @@ files:
|
|
132
134
|
- lib/duckdb/database.rb
|
133
135
|
- lib/duckdb/interval.rb
|
134
136
|
- lib/duckdb/library_version.rb
|
137
|
+
- lib/duckdb/pending_result.rb
|
135
138
|
- lib/duckdb/prepared_statement.rb
|
136
139
|
- lib/duckdb/result.rb
|
137
140
|
- lib/duckdb/version.rb
|