duckdb 1.5.2.0 → 1.5.3.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/CHANGELOG.md +38 -0
- data/duckdb.gemspec +37 -0
- data/ext/duckdb/aggregate_function.c +62 -100
- data/ext/duckdb/aggregate_function.h +2 -2
- data/ext/duckdb/aggregate_function_set.c +86 -0
- data/ext/duckdb/aggregate_function_set.h +14 -0
- data/ext/duckdb/appender.c +121 -39
- data/ext/duckdb/appender.h +1 -1
- data/ext/duckdb/client_context.c +5 -5
- data/ext/duckdb/client_context.h +2 -2
- data/ext/duckdb/column.c +13 -13
- data/ext/duckdb/column.h +1 -1
- data/ext/duckdb/connection.c +63 -41
- data/ext/duckdb/connection.h +2 -2
- data/ext/duckdb/converter.h +1 -7
- data/ext/duckdb/conveter.c +6 -6
- data/ext/duckdb/data_chunk.c +22 -22
- data/ext/duckdb/data_chunk.h +2 -2
- data/ext/duckdb/database.c +10 -10
- data/ext/duckdb/database.h +1 -1
- data/ext/duckdb/duckdb.c +18 -17
- data/ext/duckdb/expression.c +8 -8
- data/ext/duckdb/expression.h +1 -1
- data/ext/duckdb/extconf.rb +32 -16
- data/ext/duckdb/extracted_statements.c +15 -15
- data/ext/duckdb/extracted_statements.h +1 -1
- data/ext/duckdb/instance_cache.c +10 -10
- data/ext/duckdb/instance_cache.h +1 -1
- data/ext/duckdb/logical_type.c +94 -133
- data/ext/duckdb/logical_type.h +2 -2
- data/ext/duckdb/memory_helper.c +28 -28
- data/ext/duckdb/pending_result.c +27 -27
- data/ext/duckdb/pending_result.h +2 -2
- data/ext/duckdb/prepared_statement.c +120 -103
- data/ext/duckdb/prepared_statement.h +2 -2
- data/ext/duckdb/result.c +24 -74
- data/ext/duckdb/result.h +2 -3
- data/ext/duckdb/ruby-duckdb.h +5 -0
- data/ext/duckdb/scalar_function.c +3 -3
- data/ext/duckdb/table_description.c +1 -1
- data/ext/duckdb/table_function.c +3 -3
- data/ext/duckdb/table_function_bind_info.c +1 -1
- data/ext/duckdb/value.c +62 -50
- data/ext/duckdb/value.h +2 -2
- data/ext/duckdb/vector.c +20 -20
- data/ext/duckdb/vector.h +2 -2
- data/lib/duckdb/aggregate_function.rb +208 -3
- data/lib/duckdb/aggregate_function_set.rb +29 -0
- data/lib/duckdb/appender.rb +148 -0
- data/lib/duckdb/connection.rb +86 -25
- data/lib/duckdb/converter.rb +5 -0
- data/lib/duckdb/logical_type.rb +1 -3
- data/lib/duckdb/prepared_statement.rb +19 -1
- data/lib/duckdb/result.rb +39 -2
- data/lib/duckdb/scalar_function.rb +9 -4
- data/lib/duckdb/scalar_function_set.rb +0 -1
- data/lib/duckdb/table_description.rb +7 -0
- data/lib/duckdb/table_function.rb +0 -1
- data/lib/duckdb/table_name_parser.rb +58 -0
- data/lib/duckdb/value.rb +19 -0
- data/lib/duckdb/version.rb +1 -1
- data/lib/duckdb.rb +2 -0
- metadata +7 -3
- data/lib/duckdb/duckdb_native.so +0 -0
data/ext/duckdb/logical_type.c
CHANGED
|
@@ -5,30 +5,32 @@ static VALUE cDuckDBLogicalType;
|
|
|
5
5
|
static void deallocate(void *ctx);
|
|
6
6
|
static VALUE allocate(VALUE klass);
|
|
7
7
|
static size_t memsize(const void *p);
|
|
8
|
-
static VALUE
|
|
9
|
-
static VALUE
|
|
10
|
-
static VALUE
|
|
11
|
-
static VALUE
|
|
12
|
-
static VALUE
|
|
13
|
-
static VALUE
|
|
14
|
-
static VALUE
|
|
15
|
-
static VALUE
|
|
16
|
-
static VALUE
|
|
17
|
-
static VALUE
|
|
18
|
-
static VALUE
|
|
19
|
-
static VALUE
|
|
20
|
-
static VALUE
|
|
21
|
-
static VALUE
|
|
22
|
-
static VALUE
|
|
23
|
-
static VALUE
|
|
24
|
-
static VALUE
|
|
25
|
-
static VALUE
|
|
26
|
-
static VALUE
|
|
27
|
-
static VALUE
|
|
28
|
-
static VALUE
|
|
29
|
-
static VALUE
|
|
30
|
-
static VALUE
|
|
31
|
-
static VALUE
|
|
8
|
+
static VALUE logical_type__type(VALUE self);
|
|
9
|
+
static VALUE logical_type_width(VALUE self);
|
|
10
|
+
static VALUE logical_type_scale(VALUE self);
|
|
11
|
+
static VALUE logical_type_child_count(VALUE self);
|
|
12
|
+
static VALUE logical_type_child_name_at(VALUE self, VALUE cidx);
|
|
13
|
+
static VALUE logical_type_child_type(VALUE self);
|
|
14
|
+
static VALUE logical_type_child_type_at(VALUE self, VALUE cidx);
|
|
15
|
+
static VALUE logical_type_size(VALUE self);
|
|
16
|
+
static VALUE logical_type_key_type(VALUE self);
|
|
17
|
+
static VALUE logical_type_value_type(VALUE self);
|
|
18
|
+
static VALUE logical_type_member_count(VALUE self);
|
|
19
|
+
static VALUE logical_type_member_name_at(VALUE self, VALUE midx);
|
|
20
|
+
static VALUE logical_type_member_type_at(VALUE self, VALUE midx);
|
|
21
|
+
static VALUE logical_type__internal_type(VALUE self);
|
|
22
|
+
static VALUE logical_type_dictionary_size(VALUE self);
|
|
23
|
+
static VALUE logical_type_dictionary_value_at(VALUE self, VALUE didx);
|
|
24
|
+
static VALUE logical_type_get_alias(VALUE self);
|
|
25
|
+
static VALUE logical_type_set_alias(VALUE self, VALUE aname);
|
|
26
|
+
static VALUE logical_type_s__create_array_type(VALUE klass, VALUE child, VALUE array_size);
|
|
27
|
+
static VALUE logical_type_s__create_list_type(VALUE klass, VALUE child);
|
|
28
|
+
static VALUE logical_type_s__create_map_type(VALUE klass, VALUE key, VALUE value);
|
|
29
|
+
static VALUE logical_type_s__create_union_type(VALUE klass, VALUE members);
|
|
30
|
+
static VALUE logical_type_s__create_struct_type(VALUE klass, VALUE members);
|
|
31
|
+
static VALUE logical_type_s__create_enum_type(VALUE klass, VALUE members);
|
|
32
|
+
static VALUE logical_type_s__create_decimal_type(VALUE klass, VALUE width, VALUE scale);
|
|
33
|
+
static VALUE logical_type_initialize(VALUE self, VALUE type_id_arg);
|
|
32
34
|
|
|
33
35
|
static const rb_data_type_t logical_type_data_type = {
|
|
34
36
|
"DuckDB/LogicalType",
|
|
@@ -46,7 +48,7 @@ static void deallocate(void *ctx) {
|
|
|
46
48
|
xfree(p);
|
|
47
49
|
}
|
|
48
50
|
|
|
49
|
-
rubyDuckDBLogicalType *
|
|
51
|
+
rubyDuckDBLogicalType *rbduckdb_get_struct_logical_type(VALUE obj) {
|
|
50
52
|
rubyDuckDBLogicalType *ctx;
|
|
51
53
|
TypedData_Get_Struct(obj, rubyDuckDBLogicalType, &logical_type_data_type, ctx);
|
|
52
54
|
return ctx;
|
|
@@ -61,7 +63,7 @@ static size_t memsize(const void *p) {
|
|
|
61
63
|
return sizeof(rubyDuckDBLogicalType);
|
|
62
64
|
}
|
|
63
65
|
|
|
64
|
-
static VALUE
|
|
66
|
+
static VALUE logical_type_initialize(VALUE self, VALUE type_id_arg) {
|
|
65
67
|
rubyDuckDBLogicalType *ctx;
|
|
66
68
|
duckdb_type type = (duckdb_type)NUM2INT(type_id_arg);
|
|
67
69
|
duckdb_logical_type new_logical_type;
|
|
@@ -86,14 +88,8 @@ static VALUE initialize(VALUE self, VALUE type_id_arg) {
|
|
|
86
88
|
return self;
|
|
87
89
|
}
|
|
88
90
|
|
|
89
|
-
/*
|
|
90
|
-
|
|
91
|
-
* decimal_col.logical_type.type -> Symbol
|
|
92
|
-
*
|
|
93
|
-
* Returns the logical type's type symbol.
|
|
94
|
-
*
|
|
95
|
-
*/
|
|
96
|
-
static VALUE duckdb_logical_type__type(VALUE self) {
|
|
91
|
+
/* :nodoc: */
|
|
92
|
+
static VALUE logical_type__type(VALUE self) {
|
|
97
93
|
rubyDuckDBLogicalType *ctx;
|
|
98
94
|
TypedData_Get_Struct(self, rubyDuckDBLogicalType, &logical_type_data_type, ctx);
|
|
99
95
|
return INT2FIX(duckdb_get_type_id(ctx->logical_type));
|
|
@@ -106,7 +102,7 @@ static VALUE duckdb_logical_type__type(VALUE self) {
|
|
|
106
102
|
* Returns the width of the decimal column.
|
|
107
103
|
*
|
|
108
104
|
*/
|
|
109
|
-
static VALUE
|
|
105
|
+
static VALUE logical_type_width(VALUE self) {
|
|
110
106
|
rubyDuckDBLogicalType *ctx;
|
|
111
107
|
TypedData_Get_Struct(self, rubyDuckDBLogicalType, &logical_type_data_type, ctx);
|
|
112
108
|
return INT2FIX(duckdb_decimal_width(ctx->logical_type));
|
|
@@ -119,7 +115,7 @@ static VALUE duckdb_logical_type_width(VALUE self) {
|
|
|
119
115
|
* Returns the scale of the decimal column.
|
|
120
116
|
*
|
|
121
117
|
*/
|
|
122
|
-
static VALUE
|
|
118
|
+
static VALUE logical_type_scale(VALUE self) {
|
|
123
119
|
rubyDuckDBLogicalType *ctx;
|
|
124
120
|
TypedData_Get_Struct(self, rubyDuckDBLogicalType, &logical_type_data_type, ctx);
|
|
125
121
|
return INT2FIX(duckdb_decimal_scale(ctx->logical_type));
|
|
@@ -132,7 +128,7 @@ static VALUE duckdb_logical_type_scale(VALUE self) {
|
|
|
132
128
|
* Returns the number of children of a struct type, otherwise 0.
|
|
133
129
|
*
|
|
134
130
|
*/
|
|
135
|
-
static VALUE
|
|
131
|
+
static VALUE logical_type_child_count(VALUE self) {
|
|
136
132
|
rubyDuckDBLogicalType *ctx;
|
|
137
133
|
TypedData_Get_Struct(self, rubyDuckDBLogicalType, &logical_type_data_type, ctx);
|
|
138
134
|
return INT2FIX(duckdb_struct_type_child_count(ctx->logical_type));
|
|
@@ -145,7 +141,7 @@ static VALUE duckdb_logical_type_child_count(VALUE self) {
|
|
|
145
141
|
* Returns the name of the struct child at the specified index.
|
|
146
142
|
*
|
|
147
143
|
*/
|
|
148
|
-
static VALUE
|
|
144
|
+
static VALUE logical_type_child_name_at(VALUE self, VALUE cidx) {
|
|
149
145
|
rubyDuckDBLogicalType *ctx;
|
|
150
146
|
VALUE cname;
|
|
151
147
|
const char *child_name;
|
|
@@ -169,7 +165,7 @@ static VALUE duckdb_logical_type_child_name_at(VALUE self, VALUE cidx) {
|
|
|
169
165
|
* Returns the child logical type for list and map types, otherwise nil.
|
|
170
166
|
*
|
|
171
167
|
*/
|
|
172
|
-
static VALUE
|
|
168
|
+
static VALUE logical_type_child_type(VALUE self) {
|
|
173
169
|
rubyDuckDBLogicalType *ctx;
|
|
174
170
|
duckdb_type type_id;
|
|
175
171
|
duckdb_logical_type child_logical_type;
|
|
@@ -202,7 +198,7 @@ static VALUE duckdb_logical_type_child_type(VALUE self) {
|
|
|
202
198
|
* DuckDB::LogicalType object.
|
|
203
199
|
*
|
|
204
200
|
*/
|
|
205
|
-
static VALUE
|
|
201
|
+
static VALUE logical_type_child_type_at(VALUE self, VALUE cidx) {
|
|
206
202
|
rubyDuckDBLogicalType *ctx;
|
|
207
203
|
duckdb_logical_type struct_child_type;
|
|
208
204
|
idx_t idx = NUM2ULL(cidx);
|
|
@@ -226,7 +222,7 @@ static VALUE duckdb_logical_type_child_type_at(VALUE self, VALUE cidx) {
|
|
|
226
222
|
* Returns the size of the array column, otherwise 0.
|
|
227
223
|
*
|
|
228
224
|
*/
|
|
229
|
-
static VALUE
|
|
225
|
+
static VALUE logical_type_size(VALUE self) {
|
|
230
226
|
rubyDuckDBLogicalType *ctx;
|
|
231
227
|
TypedData_Get_Struct(self, rubyDuckDBLogicalType, &logical_type_data_type, ctx);
|
|
232
228
|
return INT2FIX(duckdb_array_type_array_size(ctx->logical_type));
|
|
@@ -239,7 +235,7 @@ static VALUE duckdb_logical_type_size(VALUE self) {
|
|
|
239
235
|
* Returns the key logical type for map type, otherwise nil.
|
|
240
236
|
*
|
|
241
237
|
*/
|
|
242
|
-
static VALUE
|
|
238
|
+
static VALUE logical_type_key_type(VALUE self) {
|
|
243
239
|
rubyDuckDBLogicalType *ctx;
|
|
244
240
|
duckdb_logical_type key_logical_type;
|
|
245
241
|
VALUE logical_type = Qnil;
|
|
@@ -257,7 +253,7 @@ static VALUE duckdb_logical_type_key_type(VALUE self) {
|
|
|
257
253
|
* Returns the value logical type for map type, otherwise nil.
|
|
258
254
|
*
|
|
259
255
|
*/
|
|
260
|
-
static VALUE
|
|
256
|
+
static VALUE logical_type_value_type(VALUE self) {
|
|
261
257
|
rubyDuckDBLogicalType *ctx;
|
|
262
258
|
duckdb_logical_type value_logical_type;
|
|
263
259
|
VALUE logical_type = Qnil;
|
|
@@ -275,7 +271,7 @@ static VALUE duckdb_logical_type_value_type(VALUE self) {
|
|
|
275
271
|
* Returns the member count of union type, otherwise 0.
|
|
276
272
|
*
|
|
277
273
|
*/
|
|
278
|
-
static VALUE
|
|
274
|
+
static VALUE logical_type_member_count(VALUE self) {
|
|
279
275
|
rubyDuckDBLogicalType *ctx;
|
|
280
276
|
TypedData_Get_Struct(self, rubyDuckDBLogicalType, &logical_type_data_type, ctx);
|
|
281
277
|
return INT2FIX(duckdb_union_type_member_count(ctx->logical_type));
|
|
@@ -288,7 +284,7 @@ static VALUE duckdb_logical_type_member_count(VALUE self) {
|
|
|
288
284
|
* Returns the name of the union member at the specified index.
|
|
289
285
|
*
|
|
290
286
|
*/
|
|
291
|
-
static VALUE
|
|
287
|
+
static VALUE logical_type_member_name_at(VALUE self, VALUE midx) {
|
|
292
288
|
rubyDuckDBLogicalType *ctx;
|
|
293
289
|
VALUE mname;
|
|
294
290
|
const char *member_name;
|
|
@@ -313,7 +309,7 @@ static VALUE duckdb_logical_type_member_name_at(VALUE self, VALUE midx) {
|
|
|
313
309
|
* DuckDB::LogicalType object.
|
|
314
310
|
*
|
|
315
311
|
*/
|
|
316
|
-
static VALUE
|
|
312
|
+
static VALUE logical_type_member_type_at(VALUE self, VALUE midx) {
|
|
317
313
|
rubyDuckDBLogicalType *ctx;
|
|
318
314
|
duckdb_logical_type union_member_type;
|
|
319
315
|
idx_t idx = NUM2ULL(midx);
|
|
@@ -337,7 +333,7 @@ static VALUE duckdb_logical_type_member_type_at(VALUE self, VALUE midx) {
|
|
|
337
333
|
* Returns the logical type's internal type.
|
|
338
334
|
*
|
|
339
335
|
*/
|
|
340
|
-
static VALUE
|
|
336
|
+
static VALUE logical_type__internal_type(VALUE self) {
|
|
341
337
|
rubyDuckDBLogicalType *ctx;
|
|
342
338
|
duckdb_type type_id;
|
|
343
339
|
duckdb_type internal_type_id;
|
|
@@ -366,7 +362,7 @@ static VALUE duckdb_logical_type__internal_type(VALUE self) {
|
|
|
366
362
|
* Returns the dictionary size of the enum type.
|
|
367
363
|
*
|
|
368
364
|
*/
|
|
369
|
-
static VALUE
|
|
365
|
+
static VALUE logical_type_dictionary_size(VALUE self) {
|
|
370
366
|
rubyDuckDBLogicalType *ctx;
|
|
371
367
|
TypedData_Get_Struct(self, rubyDuckDBLogicalType, &logical_type_data_type, ctx);
|
|
372
368
|
return INT2FIX(duckdb_enum_dictionary_size(ctx->logical_type));
|
|
@@ -379,7 +375,7 @@ static VALUE duckdb_logical_type_dictionary_size(VALUE self) {
|
|
|
379
375
|
* Returns the dictionary value at the specified index.
|
|
380
376
|
*
|
|
381
377
|
*/
|
|
382
|
-
static VALUE
|
|
378
|
+
static VALUE logical_type_dictionary_value_at(VALUE self, VALUE didx) {
|
|
383
379
|
rubyDuckDBLogicalType *ctx;
|
|
384
380
|
VALUE dvalue;
|
|
385
381
|
const char *dict_value;
|
|
@@ -403,7 +399,7 @@ static VALUE duckdb_logical_type_dictionary_value_at(VALUE self, VALUE didx) {
|
|
|
403
399
|
* Returns the alias of the logical type.
|
|
404
400
|
*
|
|
405
401
|
*/
|
|
406
|
-
static VALUE
|
|
402
|
+
static VALUE logical_type_get_alias(VALUE self) {
|
|
407
403
|
rubyDuckDBLogicalType *ctx;
|
|
408
404
|
VALUE alias = Qnil;
|
|
409
405
|
const char *_alias;
|
|
@@ -425,7 +421,7 @@ static VALUE duckdb_logical_type__get_alias(VALUE self) {
|
|
|
425
421
|
* Return the set alias of the logical type.
|
|
426
422
|
*
|
|
427
423
|
*/
|
|
428
|
-
static VALUE
|
|
424
|
+
static VALUE logical_type_set_alias(VALUE self, VALUE aname) {
|
|
429
425
|
rubyDuckDBLogicalType *ctx;
|
|
430
426
|
VALUE alias = Qnil;
|
|
431
427
|
const char *_alias = StringValuePtr(aname);
|
|
@@ -439,14 +435,9 @@ static VALUE duckdb_logical_type__set_alias(VALUE self, VALUE aname) {
|
|
|
439
435
|
return alias;
|
|
440
436
|
}
|
|
441
437
|
|
|
442
|
-
/*
|
|
443
|
-
|
|
444
|
-
*
|
|
445
|
-
*
|
|
446
|
-
* Return an array logical type from the given child logical type and size.
|
|
447
|
-
*/
|
|
448
|
-
static VALUE duckdb_logical_type_s_create_array_type(VALUE klass, VALUE child, VALUE array_size) {
|
|
449
|
-
rubyDuckDBLogicalType *child_ctx = get_struct_logical_type(child);
|
|
438
|
+
/* :nodoc: */
|
|
439
|
+
static VALUE logical_type_s__create_array_type(VALUE klass, VALUE child, VALUE array_size) {
|
|
440
|
+
rubyDuckDBLogicalType *child_ctx = rbduckdb_get_struct_logical_type(child);
|
|
450
441
|
idx_t size = NUM2ULL(array_size);
|
|
451
442
|
duckdb_logical_type new_type = duckdb_create_array_type(child_ctx->logical_type, size);
|
|
452
443
|
|
|
@@ -457,14 +448,9 @@ static VALUE duckdb_logical_type__set_alias(VALUE self, VALUE aname) {
|
|
|
457
448
|
return rbduckdb_create_logical_type(new_type);
|
|
458
449
|
}
|
|
459
450
|
|
|
460
|
-
/*
|
|
461
|
-
|
|
462
|
-
*
|
|
463
|
-
*
|
|
464
|
-
* Return a list logical type from the given child logical type.
|
|
465
|
-
*/
|
|
466
|
-
static VALUE duckdb_logical_type_s_create_list_type(VALUE klass, VALUE child) {
|
|
467
|
-
rubyDuckDBLogicalType *child_ctx = get_struct_logical_type(child);
|
|
451
|
+
/* :nodoc: */
|
|
452
|
+
static VALUE logical_type_s__create_list_type(VALUE klass, VALUE child) {
|
|
453
|
+
rubyDuckDBLogicalType *child_ctx = rbduckdb_get_struct_logical_type(child);
|
|
468
454
|
duckdb_logical_type new_type = duckdb_create_list_type(child_ctx->logical_type);
|
|
469
455
|
|
|
470
456
|
if (!new_type) {
|
|
@@ -474,15 +460,10 @@ static VALUE duckdb_logical_type_s_create_list_type(VALUE klass, VALUE child) {
|
|
|
474
460
|
return rbduckdb_create_logical_type(new_type);
|
|
475
461
|
}
|
|
476
462
|
|
|
477
|
-
/*
|
|
478
|
-
|
|
479
|
-
*
|
|
480
|
-
*
|
|
481
|
-
* Return a map logical type from the given key and value logical types.
|
|
482
|
-
*/
|
|
483
|
-
static VALUE duckdb_logical_type_s_create_map_type(VALUE klass, VALUE key, VALUE value) {
|
|
484
|
-
rubyDuckDBLogicalType *key_ctx = get_struct_logical_type(key);
|
|
485
|
-
rubyDuckDBLogicalType *value_ctx = get_struct_logical_type(value);
|
|
463
|
+
/* :nodoc: */
|
|
464
|
+
static VALUE logical_type_s__create_map_type(VALUE klass, VALUE key, VALUE value) {
|
|
465
|
+
rubyDuckDBLogicalType *key_ctx = rbduckdb_get_struct_logical_type(key);
|
|
466
|
+
rubyDuckDBLogicalType *value_ctx = rbduckdb_get_struct_logical_type(value);
|
|
486
467
|
duckdb_logical_type new_type = duckdb_create_map_type(key_ctx->logical_type, value_ctx->logical_type);
|
|
487
468
|
|
|
488
469
|
if (!new_type) {
|
|
@@ -492,13 +473,8 @@ static VALUE duckdb_logical_type_s_create_map_type(VALUE klass, VALUE key, VALUE
|
|
|
492
473
|
return rbduckdb_create_logical_type(new_type);
|
|
493
474
|
}
|
|
494
475
|
|
|
495
|
-
/*
|
|
496
|
-
|
|
497
|
-
* DuckDB::LogicalType._create_union_type(members) -> DuckDB::LogicalType
|
|
498
|
-
*
|
|
499
|
-
* Return a union logical type from the given member hash.
|
|
500
|
-
*/
|
|
501
|
-
static VALUE duckdb_logical_type_s_create_union_type(VALUE klass, VALUE members) {
|
|
476
|
+
/* :nodoc: */
|
|
477
|
+
static VALUE logical_type_s__create_union_type(VALUE klass, VALUE members) {
|
|
502
478
|
idx_t member_size = RHASH_SIZE(members);
|
|
503
479
|
duckdb_logical_type *member_types = NULL;
|
|
504
480
|
const char **member_names = NULL;
|
|
@@ -517,7 +493,7 @@ static VALUE duckdb_logical_type_s_create_union_type(VALUE klass, VALUE members)
|
|
|
517
493
|
for (idx_t i = 0; i < member_size; i++) {
|
|
518
494
|
VALUE key = rb_ary_entry(keys, (long)i);
|
|
519
495
|
VALUE val = rb_hash_aref(members, key);
|
|
520
|
-
rubyDuckDBLogicalType *type_ctx =
|
|
496
|
+
rubyDuckDBLogicalType *type_ctx = rbduckdb_get_struct_logical_type(val);
|
|
521
497
|
|
|
522
498
|
member_names[i] = rb_id2name(SYM2ID(key));
|
|
523
499
|
member_types[i] = type_ctx->logical_type;
|
|
@@ -535,13 +511,8 @@ static VALUE duckdb_logical_type_s_create_union_type(VALUE klass, VALUE members)
|
|
|
535
511
|
return rbduckdb_create_logical_type(new_type);
|
|
536
512
|
}
|
|
537
513
|
|
|
538
|
-
/*
|
|
539
|
-
|
|
540
|
-
* DuckDB::LogicalType._create_struct_type(members) -> DuckDB::LogicalType
|
|
541
|
-
*
|
|
542
|
-
* Return a struct logical type from the given member hash.
|
|
543
|
-
*/
|
|
544
|
-
static VALUE duckdb_logical_type_s_create_struct_type(VALUE klass, VALUE members) {
|
|
514
|
+
/* :nodoc: */
|
|
515
|
+
static VALUE logical_type_s__create_struct_type(VALUE klass, VALUE members) {
|
|
545
516
|
idx_t member_size = RHASH_SIZE(members);
|
|
546
517
|
duckdb_logical_type *member_types = NULL;
|
|
547
518
|
const char **member_names = NULL;
|
|
@@ -560,7 +531,7 @@ static VALUE duckdb_logical_type_s_create_struct_type(VALUE klass, VALUE members
|
|
|
560
531
|
for (idx_t i = 0; i < member_size; i++) {
|
|
561
532
|
VALUE key = rb_ary_entry(keys, (long)i);
|
|
562
533
|
VALUE val = rb_hash_aref(members, key);
|
|
563
|
-
rubyDuckDBLogicalType *type_ctx =
|
|
534
|
+
rubyDuckDBLogicalType *type_ctx = rbduckdb_get_struct_logical_type(val);
|
|
564
535
|
|
|
565
536
|
member_names[i] = rb_id2name(SYM2ID(key));
|
|
566
537
|
member_types[i] = type_ctx->logical_type;
|
|
@@ -578,13 +549,8 @@ static VALUE duckdb_logical_type_s_create_struct_type(VALUE klass, VALUE members
|
|
|
578
549
|
return rbduckdb_create_logical_type(new_type);
|
|
579
550
|
}
|
|
580
551
|
|
|
581
|
-
/*
|
|
582
|
-
|
|
583
|
-
* DuckDB::LogicalType._create_enum_type(members) -> DuckDB::LogicalType
|
|
584
|
-
*
|
|
585
|
-
* Return an enum logical type from the given array of strings.
|
|
586
|
-
*/
|
|
587
|
-
static VALUE duckdb_logical_type_s_create_enum_type(VALUE klass, VALUE members) {
|
|
552
|
+
/* :nodoc: */
|
|
553
|
+
static VALUE logical_type_s__create_enum_type(VALUE klass, VALUE members) {
|
|
588
554
|
idx_t member_size = RARRAY_LEN(members);
|
|
589
555
|
const char **member_names = NULL;
|
|
590
556
|
duckdb_logical_type new_type;
|
|
@@ -611,13 +577,8 @@ static VALUE duckdb_logical_type_s_create_enum_type(VALUE klass, VALUE members)
|
|
|
611
577
|
return rbduckdb_create_logical_type(new_type);
|
|
612
578
|
}
|
|
613
579
|
|
|
614
|
-
/*
|
|
615
|
-
|
|
616
|
-
* DuckDB::LogicalType._create_decimal_type(width, scale) -> DuckDB::LogicalType
|
|
617
|
-
*
|
|
618
|
-
* Return a decimal logical type with the given width and scale.
|
|
619
|
-
*/
|
|
620
|
-
static VALUE duckdb_logical_type_s_create_decimal_type(VALUE klass, VALUE width, VALUE scale) {
|
|
580
|
+
/* :nodoc: */
|
|
581
|
+
static VALUE logical_type_s__create_decimal_type(VALUE klass, VALUE width, VALUE scale) {
|
|
621
582
|
duckdb_logical_type new_type;
|
|
622
583
|
|
|
623
584
|
new_type = duckdb_create_decimal_type((uint8_t)NUM2UINT(width), (uint8_t)NUM2UINT(scale));
|
|
@@ -641,46 +602,46 @@ VALUE rbduckdb_create_logical_type(duckdb_logical_type logical_type) {
|
|
|
641
602
|
return obj;
|
|
642
603
|
}
|
|
643
604
|
|
|
644
|
-
void
|
|
605
|
+
void rbduckdb_init_logical_type(void) {
|
|
645
606
|
#if 0
|
|
646
607
|
VALUE mDuckDB = rb_define_module("DuckDB");
|
|
647
608
|
#endif
|
|
648
609
|
cDuckDBLogicalType = rb_define_class_under(mDuckDB, "LogicalType", rb_cObject);
|
|
649
610
|
rb_define_alloc_func(cDuckDBLogicalType, allocate);
|
|
650
611
|
|
|
651
|
-
rb_define_private_method(cDuckDBLogicalType, "_type",
|
|
652
|
-
rb_define_method(cDuckDBLogicalType, "width",
|
|
653
|
-
rb_define_method(cDuckDBLogicalType, "scale",
|
|
654
|
-
rb_define_method(cDuckDBLogicalType, "child_count",
|
|
655
|
-
rb_define_method(cDuckDBLogicalType, "child_name_at",
|
|
656
|
-
rb_define_method(cDuckDBLogicalType, "child_type",
|
|
657
|
-
rb_define_method(cDuckDBLogicalType, "child_type_at",
|
|
658
|
-
rb_define_method(cDuckDBLogicalType, "size",
|
|
659
|
-
rb_define_method(cDuckDBLogicalType, "key_type",
|
|
660
|
-
rb_define_method(cDuckDBLogicalType, "value_type",
|
|
661
|
-
rb_define_method(cDuckDBLogicalType, "member_count",
|
|
662
|
-
rb_define_method(cDuckDBLogicalType, "member_name_at",
|
|
663
|
-
rb_define_method(cDuckDBLogicalType, "member_type_at",
|
|
664
|
-
|
|
665
|
-
rb_define_method(cDuckDBLogicalType, "dictionary_size",
|
|
666
|
-
rb_define_method(cDuckDBLogicalType, "dictionary_value_at",
|
|
667
|
-
rb_define_method(cDuckDBLogicalType, "get_alias",
|
|
668
|
-
rb_define_method(cDuckDBLogicalType, "set_alias",
|
|
612
|
+
rb_define_private_method(cDuckDBLogicalType, "_type", logical_type__type, 0);
|
|
613
|
+
rb_define_method(cDuckDBLogicalType, "width", logical_type_width, 0);
|
|
614
|
+
rb_define_method(cDuckDBLogicalType, "scale", logical_type_scale, 0);
|
|
615
|
+
rb_define_method(cDuckDBLogicalType, "child_count", logical_type_child_count, 0);
|
|
616
|
+
rb_define_method(cDuckDBLogicalType, "child_name_at", logical_type_child_name_at, 1);
|
|
617
|
+
rb_define_method(cDuckDBLogicalType, "child_type", logical_type_child_type, 0);
|
|
618
|
+
rb_define_method(cDuckDBLogicalType, "child_type_at", logical_type_child_type_at, 1);
|
|
619
|
+
rb_define_method(cDuckDBLogicalType, "size", logical_type_size, 0);
|
|
620
|
+
rb_define_method(cDuckDBLogicalType, "key_type", logical_type_key_type, 0);
|
|
621
|
+
rb_define_method(cDuckDBLogicalType, "value_type", logical_type_value_type, 0);
|
|
622
|
+
rb_define_method(cDuckDBLogicalType, "member_count", logical_type_member_count, 0);
|
|
623
|
+
rb_define_method(cDuckDBLogicalType, "member_name_at", logical_type_member_name_at, 1);
|
|
624
|
+
rb_define_method(cDuckDBLogicalType, "member_type_at", logical_type_member_type_at, 1);
|
|
625
|
+
rb_define_private_method(cDuckDBLogicalType, "_internal_type", logical_type__internal_type, 0);
|
|
626
|
+
rb_define_method(cDuckDBLogicalType, "dictionary_size", logical_type_dictionary_size, 0);
|
|
627
|
+
rb_define_method(cDuckDBLogicalType, "dictionary_value_at", logical_type_dictionary_value_at, 1);
|
|
628
|
+
rb_define_method(cDuckDBLogicalType, "get_alias", logical_type_get_alias, 0);
|
|
629
|
+
rb_define_method(cDuckDBLogicalType, "set_alias", logical_type_set_alias, 1);
|
|
669
630
|
|
|
670
631
|
rb_define_private_method(rb_singleton_class(cDuckDBLogicalType), "_create_array_type",
|
|
671
|
-
|
|
632
|
+
logical_type_s__create_array_type, 2);
|
|
672
633
|
rb_define_private_method(rb_singleton_class(cDuckDBLogicalType), "_create_list_type",
|
|
673
|
-
|
|
634
|
+
logical_type_s__create_list_type, 1);
|
|
674
635
|
rb_define_private_method(rb_singleton_class(cDuckDBLogicalType), "_create_map_type",
|
|
675
|
-
|
|
636
|
+
logical_type_s__create_map_type, 2);
|
|
676
637
|
rb_define_private_method(rb_singleton_class(cDuckDBLogicalType), "_create_union_type",
|
|
677
|
-
|
|
638
|
+
logical_type_s__create_union_type, 1);
|
|
678
639
|
rb_define_private_method(rb_singleton_class(cDuckDBLogicalType), "_create_struct_type",
|
|
679
|
-
|
|
640
|
+
logical_type_s__create_struct_type, 1);
|
|
680
641
|
rb_define_private_method(rb_singleton_class(cDuckDBLogicalType), "_create_enum_type",
|
|
681
|
-
|
|
642
|
+
logical_type_s__create_enum_type, 1);
|
|
682
643
|
rb_define_private_method(rb_singleton_class(cDuckDBLogicalType), "_create_decimal_type",
|
|
683
|
-
|
|
644
|
+
logical_type_s__create_decimal_type, 2);
|
|
684
645
|
|
|
685
|
-
rb_define_method(cDuckDBLogicalType, "initialize",
|
|
646
|
+
rb_define_method(cDuckDBLogicalType, "initialize", logical_type_initialize, 1);
|
|
686
647
|
}
|
data/ext/duckdb/logical_type.h
CHANGED
|
@@ -7,7 +7,7 @@ struct _rubyDuckDBLogicalType {
|
|
|
7
7
|
|
|
8
8
|
typedef struct _rubyDuckDBLogicalType rubyDuckDBLogicalType;
|
|
9
9
|
|
|
10
|
-
void
|
|
10
|
+
void rbduckdb_init_logical_type(void);
|
|
11
11
|
VALUE rbduckdb_create_logical_type(duckdb_logical_type logical_type);
|
|
12
|
-
rubyDuckDBLogicalType *
|
|
12
|
+
rubyDuckDBLogicalType *rbduckdb_get_struct_logical_type(VALUE obj);
|
|
13
13
|
#endif
|
data/ext/duckdb/memory_helper.c
CHANGED
|
@@ -14,7 +14,7 @@ static VALUE mDuckDBMemoryHelper;
|
|
|
14
14
|
* DuckDB::MemoryHelper.write_bigint(ptr, 0, 42) # Write 42 at index 0
|
|
15
15
|
* DuckDB::MemoryHelper.write_bigint(ptr, 1, 84) # Write 84 at index 1
|
|
16
16
|
*/
|
|
17
|
-
static VALUE
|
|
17
|
+
static VALUE memory_helper_s_write_bigint(VALUE self, VALUE ptr, VALUE index, VALUE value) {
|
|
18
18
|
int64_t *data;
|
|
19
19
|
idx_t idx;
|
|
20
20
|
int64_t val;
|
|
@@ -41,7 +41,7 @@ static VALUE rbduckdb_memory_helper_write_bigint(VALUE self, VALUE ptr, VALUE in
|
|
|
41
41
|
* ptr = vector.get_data
|
|
42
42
|
* DuckDB::MemoryHelper.write_double(ptr, 0, 3.14)
|
|
43
43
|
*/
|
|
44
|
-
static VALUE
|
|
44
|
+
static VALUE memory_helper_s_write_double(VALUE self, VALUE ptr, VALUE index, VALUE value) {
|
|
45
45
|
double *data;
|
|
46
46
|
idx_t idx;
|
|
47
47
|
double val;
|
|
@@ -66,7 +66,7 @@ static VALUE rbduckdb_memory_helper_write_double(VALUE self, VALUE ptr, VALUE in
|
|
|
66
66
|
* ptr = vector.get_data
|
|
67
67
|
* DuckDB::MemoryHelper.write_integer(ptr, 0, 42)
|
|
68
68
|
*/
|
|
69
|
-
static VALUE
|
|
69
|
+
static VALUE memory_helper_s_write_integer(VALUE self, VALUE ptr, VALUE index, VALUE value) {
|
|
70
70
|
int32_t *data;
|
|
71
71
|
idx_t idx;
|
|
72
72
|
int32_t val;
|
|
@@ -88,7 +88,7 @@ static VALUE rbduckdb_memory_helper_write_integer(VALUE self, VALUE ptr, VALUE i
|
|
|
88
88
|
*
|
|
89
89
|
* Writes a boolean to raw memory.
|
|
90
90
|
*/
|
|
91
|
-
static VALUE
|
|
91
|
+
static VALUE memory_helper_s_write_boolean(VALUE self, VALUE ptr, VALUE index, VALUE value) {
|
|
92
92
|
bool *data;
|
|
93
93
|
idx_t idx;
|
|
94
94
|
|
|
@@ -107,7 +107,7 @@ static VALUE rbduckdb_memory_helper_write_boolean(VALUE self, VALUE ptr, VALUE i
|
|
|
107
107
|
*
|
|
108
108
|
* Writes an 8-bit signed integer (TINYINT) to raw memory.
|
|
109
109
|
*/
|
|
110
|
-
static VALUE
|
|
110
|
+
static VALUE memory_helper_s_write_tinyint(VALUE self, VALUE ptr, VALUE index, VALUE value) {
|
|
111
111
|
int8_t *data;
|
|
112
112
|
idx_t idx;
|
|
113
113
|
|
|
@@ -126,7 +126,7 @@ static VALUE rbduckdb_memory_helper_write_tinyint(VALUE self, VALUE ptr, VALUE i
|
|
|
126
126
|
*
|
|
127
127
|
* Writes a 16-bit signed integer (SMALLINT) to raw memory.
|
|
128
128
|
*/
|
|
129
|
-
static VALUE
|
|
129
|
+
static VALUE memory_helper_s_write_smallint(VALUE self, VALUE ptr, VALUE index, VALUE value) {
|
|
130
130
|
int16_t *data;
|
|
131
131
|
idx_t idx;
|
|
132
132
|
|
|
@@ -145,7 +145,7 @@ static VALUE rbduckdb_memory_helper_write_smallint(VALUE self, VALUE ptr, VALUE
|
|
|
145
145
|
*
|
|
146
146
|
* Writes an 8-bit unsigned integer (UTINYINT) to raw memory.
|
|
147
147
|
*/
|
|
148
|
-
static VALUE
|
|
148
|
+
static VALUE memory_helper_s_write_utinyint(VALUE self, VALUE ptr, VALUE index, VALUE value) {
|
|
149
149
|
uint8_t *data;
|
|
150
150
|
idx_t idx;
|
|
151
151
|
|
|
@@ -164,7 +164,7 @@ static VALUE rbduckdb_memory_helper_write_utinyint(VALUE self, VALUE ptr, VALUE
|
|
|
164
164
|
*
|
|
165
165
|
* Writes a 16-bit unsigned integer (USMALLINT) to raw memory.
|
|
166
166
|
*/
|
|
167
|
-
static VALUE
|
|
167
|
+
static VALUE memory_helper_s_write_usmallint(VALUE self, VALUE ptr, VALUE index, VALUE value) {
|
|
168
168
|
uint16_t *data;
|
|
169
169
|
idx_t idx;
|
|
170
170
|
|
|
@@ -183,7 +183,7 @@ static VALUE rbduckdb_memory_helper_write_usmallint(VALUE self, VALUE ptr, VALUE
|
|
|
183
183
|
*
|
|
184
184
|
* Writes a 32-bit unsigned integer (UINTEGER) to raw memory.
|
|
185
185
|
*/
|
|
186
|
-
static VALUE
|
|
186
|
+
static VALUE memory_helper_s_write_uinteger(VALUE self, VALUE ptr, VALUE index, VALUE value) {
|
|
187
187
|
uint32_t *data;
|
|
188
188
|
idx_t idx;
|
|
189
189
|
|
|
@@ -202,7 +202,7 @@ static VALUE rbduckdb_memory_helper_write_uinteger(VALUE self, VALUE ptr, VALUE
|
|
|
202
202
|
*
|
|
203
203
|
* Writes a 64-bit unsigned integer (UBIGINT) to raw memory.
|
|
204
204
|
*/
|
|
205
|
-
static VALUE
|
|
205
|
+
static VALUE memory_helper_s_write_ubigint(VALUE self, VALUE ptr, VALUE index, VALUE value) {
|
|
206
206
|
uint64_t *data;
|
|
207
207
|
idx_t idx;
|
|
208
208
|
|
|
@@ -221,7 +221,7 @@ static VALUE rbduckdb_memory_helper_write_ubigint(VALUE self, VALUE ptr, VALUE i
|
|
|
221
221
|
*
|
|
222
222
|
* Writes a 32-bit floating point number (FLOAT) to raw memory.
|
|
223
223
|
*/
|
|
224
|
-
static VALUE
|
|
224
|
+
static VALUE memory_helper_s_write_float(VALUE self, VALUE ptr, VALUE index, VALUE value) {
|
|
225
225
|
float *data;
|
|
226
226
|
idx_t idx;
|
|
227
227
|
|
|
@@ -244,7 +244,7 @@ static VALUE rbduckdb_memory_helper_write_float(VALUE self, VALUE ptr, VALUE ind
|
|
|
244
244
|
* ptr = vector.get_data
|
|
245
245
|
* DuckDB::MemoryHelper.write_timestamp(ptr, 0, Time.new(2024, 3, 15, 10, 30, 45))
|
|
246
246
|
*/
|
|
247
|
-
static VALUE
|
|
247
|
+
static VALUE memory_helper_s_write_timestamp(VALUE self, VALUE ptr, VALUE index, VALUE value) {
|
|
248
248
|
duckdb_timestamp *data;
|
|
249
249
|
idx_t idx;
|
|
250
250
|
|
|
@@ -273,7 +273,7 @@ static VALUE rbduckdb_memory_helper_write_timestamp(VALUE self, VALUE ptr, VALUE
|
|
|
273
273
|
* ptr = vector.get_data
|
|
274
274
|
* DuckDB::MemoryHelper.write_timestamp_tz(ptr, 0, Time.new(2024, 3, 15, 10, 30, 45, '+00:00'))
|
|
275
275
|
*/
|
|
276
|
-
static VALUE
|
|
276
|
+
static VALUE memory_helper_s_write_timestamp_tz(VALUE self, VALUE ptr, VALUE index, VALUE value) {
|
|
277
277
|
duckdb_time_tz *data;
|
|
278
278
|
idx_t idx;
|
|
279
279
|
int64_t secs;
|
|
@@ -295,7 +295,7 @@ static VALUE rbduckdb_memory_helper_write_timestamp_tz(VALUE self, VALUE ptr, VA
|
|
|
295
295
|
return Qnil;
|
|
296
296
|
}
|
|
297
297
|
|
|
298
|
-
static VALUE
|
|
298
|
+
static VALUE memory_helper_s_write_date(VALUE self, VALUE ptr, VALUE index, VALUE value) {
|
|
299
299
|
duckdb_date *data;
|
|
300
300
|
idx_t idx;
|
|
301
301
|
|
|
@@ -314,18 +314,18 @@ static VALUE rbduckdb_memory_helper_write_date(VALUE self, VALUE ptr, VALUE inde
|
|
|
314
314
|
void rbduckdb_init_memory_helper(void) {
|
|
315
315
|
mDuckDBMemoryHelper = rb_define_module_under(mDuckDB, "MemoryHelper");
|
|
316
316
|
|
|
317
|
-
rb_define_singleton_method(mDuckDBMemoryHelper, "write_bigint",
|
|
318
|
-
rb_define_singleton_method(mDuckDBMemoryHelper, "write_double",
|
|
319
|
-
rb_define_singleton_method(mDuckDBMemoryHelper, "write_integer",
|
|
320
|
-
rb_define_singleton_method(mDuckDBMemoryHelper, "write_boolean",
|
|
321
|
-
rb_define_singleton_method(mDuckDBMemoryHelper, "write_tinyint",
|
|
322
|
-
rb_define_singleton_method(mDuckDBMemoryHelper, "write_smallint",
|
|
323
|
-
rb_define_singleton_method(mDuckDBMemoryHelper, "write_utinyint",
|
|
324
|
-
rb_define_singleton_method(mDuckDBMemoryHelper, "write_usmallint",
|
|
325
|
-
rb_define_singleton_method(mDuckDBMemoryHelper, "write_uinteger",
|
|
326
|
-
rb_define_singleton_method(mDuckDBMemoryHelper, "write_ubigint",
|
|
327
|
-
rb_define_singleton_method(mDuckDBMemoryHelper, "write_float",
|
|
328
|
-
rb_define_singleton_method(mDuckDBMemoryHelper, "write_timestamp",
|
|
329
|
-
rb_define_singleton_method(mDuckDBMemoryHelper, "write_timestamp_tz",
|
|
330
|
-
rb_define_singleton_method(mDuckDBMemoryHelper, "write_date",
|
|
317
|
+
rb_define_singleton_method(mDuckDBMemoryHelper, "write_bigint", memory_helper_s_write_bigint, 3);
|
|
318
|
+
rb_define_singleton_method(mDuckDBMemoryHelper, "write_double", memory_helper_s_write_double, 3);
|
|
319
|
+
rb_define_singleton_method(mDuckDBMemoryHelper, "write_integer", memory_helper_s_write_integer, 3);
|
|
320
|
+
rb_define_singleton_method(mDuckDBMemoryHelper, "write_boolean", memory_helper_s_write_boolean, 3);
|
|
321
|
+
rb_define_singleton_method(mDuckDBMemoryHelper, "write_tinyint", memory_helper_s_write_tinyint, 3);
|
|
322
|
+
rb_define_singleton_method(mDuckDBMemoryHelper, "write_smallint", memory_helper_s_write_smallint, 3);
|
|
323
|
+
rb_define_singleton_method(mDuckDBMemoryHelper, "write_utinyint", memory_helper_s_write_utinyint, 3);
|
|
324
|
+
rb_define_singleton_method(mDuckDBMemoryHelper, "write_usmallint", memory_helper_s_write_usmallint, 3);
|
|
325
|
+
rb_define_singleton_method(mDuckDBMemoryHelper, "write_uinteger", memory_helper_s_write_uinteger, 3);
|
|
326
|
+
rb_define_singleton_method(mDuckDBMemoryHelper, "write_ubigint", memory_helper_s_write_ubigint, 3);
|
|
327
|
+
rb_define_singleton_method(mDuckDBMemoryHelper, "write_float", memory_helper_s_write_float, 3);
|
|
328
|
+
rb_define_singleton_method(mDuckDBMemoryHelper, "write_timestamp", memory_helper_s_write_timestamp, 3);
|
|
329
|
+
rb_define_singleton_method(mDuckDBMemoryHelper, "write_timestamp_tz", memory_helper_s_write_timestamp_tz, 3);
|
|
330
|
+
rb_define_singleton_method(mDuckDBMemoryHelper, "write_date", memory_helper_s_write_date, 3);
|
|
331
331
|
}
|