duckdb 0.9.1 → 0.9.1.1
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 +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
|