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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +38 -0
  3. data/duckdb.gemspec +37 -0
  4. data/ext/duckdb/aggregate_function.c +62 -100
  5. data/ext/duckdb/aggregate_function.h +2 -2
  6. data/ext/duckdb/aggregate_function_set.c +86 -0
  7. data/ext/duckdb/aggregate_function_set.h +14 -0
  8. data/ext/duckdb/appender.c +121 -39
  9. data/ext/duckdb/appender.h +1 -1
  10. data/ext/duckdb/client_context.c +5 -5
  11. data/ext/duckdb/client_context.h +2 -2
  12. data/ext/duckdb/column.c +13 -13
  13. data/ext/duckdb/column.h +1 -1
  14. data/ext/duckdb/connection.c +63 -41
  15. data/ext/duckdb/connection.h +2 -2
  16. data/ext/duckdb/converter.h +1 -7
  17. data/ext/duckdb/conveter.c +6 -6
  18. data/ext/duckdb/data_chunk.c +22 -22
  19. data/ext/duckdb/data_chunk.h +2 -2
  20. data/ext/duckdb/database.c +10 -10
  21. data/ext/duckdb/database.h +1 -1
  22. data/ext/duckdb/duckdb.c +18 -17
  23. data/ext/duckdb/expression.c +8 -8
  24. data/ext/duckdb/expression.h +1 -1
  25. data/ext/duckdb/extconf.rb +32 -16
  26. data/ext/duckdb/extracted_statements.c +15 -15
  27. data/ext/duckdb/extracted_statements.h +1 -1
  28. data/ext/duckdb/instance_cache.c +10 -10
  29. data/ext/duckdb/instance_cache.h +1 -1
  30. data/ext/duckdb/logical_type.c +94 -133
  31. data/ext/duckdb/logical_type.h +2 -2
  32. data/ext/duckdb/memory_helper.c +28 -28
  33. data/ext/duckdb/pending_result.c +27 -27
  34. data/ext/duckdb/pending_result.h +2 -2
  35. data/ext/duckdb/prepared_statement.c +120 -103
  36. data/ext/duckdb/prepared_statement.h +2 -2
  37. data/ext/duckdb/result.c +24 -74
  38. data/ext/duckdb/result.h +2 -3
  39. data/ext/duckdb/ruby-duckdb.h +5 -0
  40. data/ext/duckdb/scalar_function.c +3 -3
  41. data/ext/duckdb/table_description.c +1 -1
  42. data/ext/duckdb/table_function.c +3 -3
  43. data/ext/duckdb/table_function_bind_info.c +1 -1
  44. data/ext/duckdb/value.c +62 -50
  45. data/ext/duckdb/value.h +2 -2
  46. data/ext/duckdb/vector.c +20 -20
  47. data/ext/duckdb/vector.h +2 -2
  48. data/lib/duckdb/aggregate_function.rb +208 -3
  49. data/lib/duckdb/aggregate_function_set.rb +29 -0
  50. data/lib/duckdb/appender.rb +148 -0
  51. data/lib/duckdb/connection.rb +86 -25
  52. data/lib/duckdb/converter.rb +5 -0
  53. data/lib/duckdb/logical_type.rb +1 -3
  54. data/lib/duckdb/prepared_statement.rb +19 -1
  55. data/lib/duckdb/result.rb +39 -2
  56. data/lib/duckdb/scalar_function.rb +9 -4
  57. data/lib/duckdb/scalar_function_set.rb +0 -1
  58. data/lib/duckdb/table_description.rb +7 -0
  59. data/lib/duckdb/table_function.rb +0 -1
  60. data/lib/duckdb/table_name_parser.rb +58 -0
  61. data/lib/duckdb/value.rb +19 -0
  62. data/lib/duckdb/version.rb +1 -1
  63. data/lib/duckdb.rb +2 -0
  64. metadata +7 -3
  65. data/lib/duckdb/duckdb_native.so +0 -0
@@ -9,7 +9,8 @@ static size_t memsize(const void *p);
9
9
 
10
10
  static VALUE appender_s_create_query(VALUE klass, VALUE con, VALUE query, VALUE types, VALUE table, VALUE columns);
11
11
 
12
- static VALUE appender_initialize(VALUE klass, VALUE con, VALUE schema, VALUE table);
12
+ static VALUE appender__initialize(VALUE self, VALUE con, VALUE schema, VALUE table);
13
+ static VALUE appender__initialize_ext(VALUE self, VALUE con, VALUE catalog, VALUE schema, VALUE table);
13
14
  static VALUE appender_error_message(VALUE self);
14
15
  static VALUE appender__append_bool(VALUE self, VALUE val);
15
16
  static VALUE appender__append_int8(VALUE self, VALUE val);
@@ -36,9 +37,17 @@ static VALUE appender__append_hugeint(VALUE self, VALUE lower, VALUE upper);
36
37
  static VALUE appender__append_uhugeint(VALUE self, VALUE lower, VALUE upper);
37
38
  static VALUE appender__append_value(VALUE self, VALUE val);
38
39
  static VALUE appender__append_data_chunk(VALUE self, VALUE chunk);
40
+ static VALUE appender__append_default_to_chunk(VALUE self, VALUE chunk, VALUE col, VALUE row);
39
41
  static VALUE appender__flush(VALUE self);
42
+
43
+ #ifdef HAVE_DUCKDB_H_GE_V1_5_0
44
+ static VALUE appender__clear(VALUE self);
45
+ #endif
46
+
47
+ static VALUE appender__add_column(VALUE self, VALUE name);
48
+ static VALUE appender__clear_columns(VALUE self);
40
49
  static VALUE appender__close(VALUE self);
41
- static VALUE duckdb_state_to_bool_value(duckdb_state state);
50
+ static VALUE state_to_rbool(duckdb_state state);
42
51
 
43
52
  static const rb_data_type_t appender_data_type = {
44
53
  "DuckDB/Appender",
@@ -95,7 +104,7 @@ static VALUE appender_s_create_query(VALUE klass, VALUE con, VALUE query, VALUE
95
104
  type_array = ALLOCA_N(duckdb_logical_type, (size_t)column_count);
96
105
  for (idx_t i = 0; i < column_count; i++) {
97
106
  VALUE type_val = rb_ary_entry(types, i);
98
- rubyDuckDBLogicalType *type_ctx = get_struct_logical_type(type_val);
107
+ rubyDuckDBLogicalType *type_ctx = rbduckdb_get_struct_logical_type(type_val);
99
108
  type_array[i] = type_ctx->logical_type;
100
109
  }
101
110
 
@@ -113,7 +122,7 @@ static VALUE appender_s_create_query(VALUE klass, VALUE con, VALUE query, VALUE
113
122
  column_names[i] = StringValuePtr(col_name_val);
114
123
  }
115
124
  }
116
- ctxcon = get_struct_connection(con);
125
+ ctxcon = rbduckdb_get_struct_connection(con);
117
126
  appender = allocate(klass);
118
127
  TypedData_Get_Struct(appender, rubyDuckDBAppender, &appender_data_type, ctx);
119
128
  if (duckdb_appender_create_query(ctxcon->con, query_str, column_count, type_array, table_name, column_names, &ctx->appender) == DuckDBError) {
@@ -123,18 +132,18 @@ static VALUE appender_s_create_query(VALUE klass, VALUE con, VALUE query, VALUE
123
132
  return appender;
124
133
  }
125
134
 
126
- static VALUE appender_initialize(VALUE self, VALUE con, VALUE schema, VALUE table) {
135
+ static VALUE appender__initialize(VALUE self, VALUE con, VALUE schema, VALUE table) {
127
136
 
128
137
  rubyDuckDBConnection *ctxcon;
129
138
  rubyDuckDBAppender *ctx;
130
139
  char *pschema = 0;
131
140
 
132
141
  if (!rb_obj_is_kind_of(con, cDuckDBConnection)) {
133
- rb_raise(rb_eTypeError, "1st argument should be instance of DackDB::Connection");
142
+ rb_raise(rb_eTypeError, "1st argument should be instance of DuckDB::Connection");
134
143
  }
135
144
 
136
145
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
137
- ctxcon = get_struct_connection(con);
146
+ ctxcon = rbduckdb_get_struct_connection(con);
138
147
 
139
148
  if (schema != Qnil) {
140
149
  pschema = StringValuePtr(schema);
@@ -146,6 +155,32 @@ static VALUE appender_initialize(VALUE self, VALUE con, VALUE schema, VALUE tabl
146
155
  return self;
147
156
  }
148
157
 
158
+ static VALUE appender__initialize_ext(VALUE self, VALUE con, VALUE catalog, VALUE schema, VALUE table) {
159
+ rubyDuckDBConnection *ctxcon;
160
+ rubyDuckDBAppender *ctx;
161
+ char *pcatalog = 0;
162
+ char *pschema = 0;
163
+
164
+ if (!rb_obj_is_kind_of(con, cDuckDBConnection)) {
165
+ rb_raise(rb_eTypeError, "1st argument should be instance of DuckDB::Connection");
166
+ }
167
+
168
+ TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
169
+ ctxcon = rbduckdb_get_struct_connection(con);
170
+
171
+ if (catalog != Qnil) {
172
+ pcatalog = StringValuePtr(catalog);
173
+ }
174
+ if (schema != Qnil) {
175
+ pschema = StringValuePtr(schema);
176
+ }
177
+
178
+ if (duckdb_appender_create_ext(ctxcon->con, pcatalog, pschema, StringValuePtr(table), &(ctx->appender)) == DuckDBError) {
179
+ rb_raise(eDuckDBError, "failed to create appender");
180
+ }
181
+ return self;
182
+ }
183
+
149
184
  /* call-seq:
150
185
  * appender.error_message -> String
151
186
  *
@@ -179,7 +214,7 @@ static VALUE appender__end_row(VALUE self) {
179
214
  rubyDuckDBAppender *ctx;
180
215
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
181
216
 
182
- return duckdb_state_to_bool_value(duckdb_appender_end_row(ctx->appender));
217
+ return state_to_rbool(duckdb_appender_end_row(ctx->appender));
183
218
  }
184
219
 
185
220
  /* :nodoc: */
@@ -191,7 +226,7 @@ static VALUE appender__append_bool(VALUE self, VALUE val) {
191
226
  rb_raise(rb_eArgError, "argument must be boolean");
192
227
  }
193
228
 
194
- return duckdb_state_to_bool_value(duckdb_append_bool(ctx->appender, (val == Qtrue)));
229
+ return state_to_rbool(duckdb_append_bool(ctx->appender, (val == Qtrue)));
195
230
  }
196
231
 
197
232
  /* :nodoc: */
@@ -201,7 +236,7 @@ static VALUE appender__append_int8(VALUE self, VALUE val) {
201
236
 
202
237
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
203
238
 
204
- return duckdb_state_to_bool_value(duckdb_append_int8(ctx->appender, i8val));
239
+ return state_to_rbool(duckdb_append_int8(ctx->appender, i8val));
205
240
  }
206
241
 
207
242
  /* :nodoc: */
@@ -211,7 +246,7 @@ static VALUE appender__append_int16(VALUE self, VALUE val) {
211
246
 
212
247
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
213
248
 
214
- return duckdb_state_to_bool_value(duckdb_append_int16(ctx->appender, i16val));
249
+ return state_to_rbool(duckdb_append_int16(ctx->appender, i16val));
215
250
  }
216
251
 
217
252
  /* :nodoc: */
@@ -221,7 +256,7 @@ static VALUE appender__append_int32(VALUE self, VALUE val) {
221
256
 
222
257
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
223
258
 
224
- return duckdb_state_to_bool_value(duckdb_append_int32(ctx->appender, i32val));
259
+ return state_to_rbool(duckdb_append_int32(ctx->appender, i32val));
225
260
  }
226
261
 
227
262
  /* :nodoc: */
@@ -231,7 +266,7 @@ static VALUE appender__append_int64(VALUE self, VALUE val) {
231
266
 
232
267
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
233
268
 
234
- return duckdb_state_to_bool_value(duckdb_append_int64(ctx->appender, i64val));
269
+ return state_to_rbool(duckdb_append_int64(ctx->appender, i64val));
235
270
  }
236
271
 
237
272
  /* :nodoc: */
@@ -241,7 +276,7 @@ static VALUE appender__append_uint8(VALUE self, VALUE val) {
241
276
 
242
277
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
243
278
 
244
- return duckdb_state_to_bool_value(duckdb_append_uint8(ctx->appender, ui8val));
279
+ return state_to_rbool(duckdb_append_uint8(ctx->appender, ui8val));
245
280
  }
246
281
 
247
282
  /* :nodoc: */
@@ -251,7 +286,7 @@ static VALUE appender__append_uint16(VALUE self, VALUE val) {
251
286
 
252
287
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
253
288
 
254
- return duckdb_state_to_bool_value(duckdb_append_uint16(ctx->appender, ui16val));
289
+ return state_to_rbool(duckdb_append_uint16(ctx->appender, ui16val));
255
290
  }
256
291
 
257
292
  /* :nodoc: */
@@ -261,7 +296,7 @@ static VALUE appender__append_uint32(VALUE self, VALUE val) {
261
296
 
262
297
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
263
298
 
264
- return duckdb_state_to_bool_value(duckdb_append_uint32(ctx->appender, ui32val));
299
+ return state_to_rbool(duckdb_append_uint32(ctx->appender, ui32val));
265
300
  }
266
301
 
267
302
  /* :nodoc: */
@@ -271,7 +306,7 @@ static VALUE appender__append_uint64(VALUE self, VALUE val) {
271
306
 
272
307
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
273
308
 
274
- return duckdb_state_to_bool_value(duckdb_append_uint64(ctx->appender, ui64val));
309
+ return state_to_rbool(duckdb_append_uint64(ctx->appender, ui64val));
275
310
  }
276
311
 
277
312
  /* :nodoc: */
@@ -281,7 +316,7 @@ static VALUE appender__append_float(VALUE self, VALUE val) {
281
316
 
282
317
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
283
318
 
284
- return duckdb_state_to_bool_value(duckdb_append_float(ctx->appender, fval));
319
+ return state_to_rbool(duckdb_append_float(ctx->appender, fval));
285
320
  }
286
321
 
287
322
  /* :nodoc: */
@@ -291,7 +326,7 @@ static VALUE appender__append_double(VALUE self, VALUE val) {
291
326
 
292
327
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
293
328
 
294
- return duckdb_state_to_bool_value(duckdb_append_double(ctx->appender, dval));
329
+ return state_to_rbool(duckdb_append_double(ctx->appender, dval));
295
330
  }
296
331
 
297
332
  /* :nodoc: */
@@ -301,7 +336,7 @@ static VALUE appender__append_varchar(VALUE self, VALUE val) {
301
336
 
302
337
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
303
338
 
304
- return duckdb_state_to_bool_value(duckdb_append_varchar(ctx->appender, pval));
339
+ return state_to_rbool(duckdb_append_varchar(ctx->appender, pval));
305
340
  }
306
341
 
307
342
  /* :nodoc: */
@@ -313,7 +348,7 @@ static VALUE appender__append_varchar_length(VALUE self, VALUE val, VALUE len) {
313
348
 
314
349
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
315
350
 
316
- return duckdb_state_to_bool_value(duckdb_append_varchar_length(ctx->appender, pval, length));
351
+ return state_to_rbool(duckdb_append_varchar_length(ctx->appender, pval, length));
317
352
  }
318
353
 
319
354
  /* :nodoc: */
@@ -325,7 +360,7 @@ static VALUE appender__append_blob(VALUE self, VALUE val) {
325
360
 
326
361
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
327
362
 
328
- return duckdb_state_to_bool_value(duckdb_append_blob(ctx->appender, (void *)pval, length));
363
+ return state_to_rbool(duckdb_append_blob(ctx->appender, (void *)pval, length));
329
364
  }
330
365
 
331
366
  /* :nodoc: */
@@ -333,7 +368,7 @@ static VALUE appender__append_null(VALUE self) {
333
368
  rubyDuckDBAppender *ctx;
334
369
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
335
370
 
336
- return duckdb_state_to_bool_value(duckdb_append_null(ctx->appender));
371
+ return state_to_rbool(duckdb_append_null(ctx->appender));
337
372
  }
338
373
 
339
374
  /* :nodoc: */
@@ -341,7 +376,7 @@ static VALUE appender__append_default(VALUE self) {
341
376
  rubyDuckDBAppender *ctx;
342
377
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
343
378
 
344
- return duckdb_state_to_bool_value(duckdb_append_default(ctx->appender));
379
+ return state_to_rbool(duckdb_append_default(ctx->appender));
345
380
  }
346
381
 
347
382
  /* :nodoc: */
@@ -352,7 +387,7 @@ static VALUE appender__append_date(VALUE self, VALUE year, VALUE month, VALUE da
352
387
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
353
388
  dt = rbduckdb_to_duckdb_date_from_value(year, month, day);
354
389
 
355
- return duckdb_state_to_bool_value(duckdb_append_date(ctx->appender, dt));
390
+ return state_to_rbool(duckdb_append_date(ctx->appender, dt));
356
391
  }
357
392
 
358
393
  /* :nodoc: */
@@ -363,7 +398,7 @@ static VALUE appender__append_interval(VALUE self, VALUE months, VALUE days, VAL
363
398
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
364
399
  rbduckdb_to_duckdb_interval_from_value(&interval, months, days, micros);
365
400
 
366
- return duckdb_state_to_bool_value(duckdb_append_interval(ctx->appender, interval));
401
+ return state_to_rbool(duckdb_append_interval(ctx->appender, interval));
367
402
  }
368
403
 
369
404
  /* :nodoc: */
@@ -374,7 +409,7 @@ static VALUE appender__append_time(VALUE self, VALUE hour, VALUE min, VALUE sec,
374
409
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
375
410
  time = rbduckdb_to_duckdb_time_from_value(hour, min, sec, micros);
376
411
 
377
- return duckdb_state_to_bool_value(duckdb_append_time(ctx->appender, time));
412
+ return state_to_rbool(duckdb_append_time(ctx->appender, time));
378
413
  }
379
414
 
380
415
  /* :nodoc: */
@@ -387,7 +422,7 @@ static VALUE appender__append_timestamp(VALUE self, VALUE year, VALUE month, VAL
387
422
 
388
423
  timestamp = rbduckdb_to_duckdb_timestamp_from_value(year, month, day, hour, min, sec, micros);
389
424
 
390
- return duckdb_state_to_bool_value(duckdb_append_timestamp(ctx->appender, timestamp));
425
+ return state_to_rbool(duckdb_append_timestamp(ctx->appender, timestamp));
391
426
  }
392
427
 
393
428
  /* :nodoc: */
@@ -401,7 +436,7 @@ static VALUE appender__append_hugeint(VALUE self, VALUE lower, VALUE upper) {
401
436
 
402
437
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
403
438
 
404
- return duckdb_state_to_bool_value(duckdb_append_hugeint(ctx->appender, hugeint));
439
+ return state_to_rbool(duckdb_append_hugeint(ctx->appender, hugeint));
405
440
  }
406
441
 
407
442
  /* :nodoc: */
@@ -415,7 +450,7 @@ static VALUE appender__append_uhugeint(VALUE self, VALUE lower, VALUE upper) {
415
450
 
416
451
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
417
452
 
418
- return duckdb_state_to_bool_value(duckdb_append_uhugeint(ctx->appender, uhugeint));
453
+ return state_to_rbool(duckdb_append_uhugeint(ctx->appender, uhugeint));
419
454
  }
420
455
 
421
456
  /* :nodoc: */
@@ -424,9 +459,9 @@ static VALUE appender__append_value(VALUE self, VALUE val) {
424
459
  rubyDuckDBValue *value_ctx;
425
460
 
426
461
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
427
- value_ctx = get_struct_value(val);
462
+ value_ctx = rbduckdb_get_struct_value(val);
428
463
 
429
- return duckdb_state_to_bool_value(duckdb_append_value(ctx->appender, value_ctx->value));
464
+ return state_to_rbool(duckdb_append_value(ctx->appender, value_ctx->value));
430
465
  }
431
466
 
432
467
  /* :nodoc: */
@@ -435,9 +470,20 @@ static VALUE appender__append_data_chunk(VALUE self, VALUE chunk) {
435
470
  rubyDuckDBDataChunk *chunk_ctx;
436
471
 
437
472
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
438
- chunk_ctx = get_struct_data_chunk(chunk);
473
+ chunk_ctx = rbduckdb_get_struct_data_chunk(chunk);
439
474
 
440
- return duckdb_state_to_bool_value(duckdb_append_data_chunk(ctx->appender, chunk_ctx->data_chunk));
475
+ return state_to_rbool(duckdb_append_data_chunk(ctx->appender, chunk_ctx->data_chunk));
476
+ }
477
+
478
+ /* :nodoc: */
479
+ static VALUE appender__append_default_to_chunk(VALUE self, VALUE chunk, VALUE col, VALUE row) {
480
+ rubyDuckDBAppender *ctx;
481
+ rubyDuckDBDataChunk *chunk_ctx;
482
+
483
+ TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
484
+ chunk_ctx = rbduckdb_get_struct_data_chunk(chunk);
485
+
486
+ return state_to_rbool(duckdb_append_default_to_chunk(ctx->appender, chunk_ctx->data_chunk, NUM2ULL(col), NUM2ULL(row)));
441
487
  }
442
488
 
443
489
  /* :nodoc: */
@@ -445,7 +491,34 @@ static VALUE appender__flush(VALUE self) {
445
491
  rubyDuckDBAppender *ctx;
446
492
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
447
493
 
448
- return duckdb_state_to_bool_value(duckdb_appender_flush(ctx->appender));
494
+ return state_to_rbool(duckdb_appender_flush(ctx->appender));
495
+ }
496
+
497
+ #ifdef HAVE_DUCKDB_H_GE_V1_5_0
498
+ /* :nodoc: */
499
+ static VALUE appender__clear(VALUE self) {
500
+ rubyDuckDBAppender *ctx;
501
+ TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
502
+
503
+ return state_to_rbool(duckdb_appender_clear(ctx->appender));
504
+ }
505
+ #endif
506
+
507
+ /* :nodoc: */
508
+ static VALUE appender__add_column(VALUE self, VALUE name) {
509
+ char *p = StringValuePtr(name);
510
+ rubyDuckDBAppender *ctx;
511
+ TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
512
+
513
+ return state_to_rbool(duckdb_appender_add_column(ctx->appender, p));
514
+ }
515
+
516
+ /* :nodoc: */
517
+ static VALUE appender__clear_columns(VALUE self) {
518
+ rubyDuckDBAppender *ctx;
519
+ TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
520
+
521
+ return state_to_rbool(duckdb_appender_clear_columns(ctx->appender));
449
522
  }
450
523
 
451
524
  /* :nodoc: */
@@ -453,27 +526,35 @@ static VALUE appender__close(VALUE self) {
453
526
  rubyDuckDBAppender *ctx;
454
527
  TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
455
528
 
456
- return duckdb_state_to_bool_value(duckdb_appender_close(ctx->appender));
529
+ return state_to_rbool(duckdb_appender_close(ctx->appender));
457
530
  }
458
531
 
459
- static VALUE duckdb_state_to_bool_value(duckdb_state state) {
532
+ static VALUE state_to_rbool(duckdb_state state) {
460
533
  if (state == DuckDBSuccess) {
461
534
  return Qtrue;
462
535
  }
463
536
  return Qfalse;
464
537
  }
465
538
 
466
- void rbduckdb_init_duckdb_appender(void) {
539
+ void rbduckdb_init_appender(void) {
467
540
  #if 0
468
541
  VALUE mDuckDB = rb_define_module("DuckDB");
469
542
  #endif
470
543
  cDuckDBAppender = rb_define_class_under(mDuckDB, "Appender", rb_cObject);
471
544
  rb_define_alloc_func(cDuckDBAppender, allocate);
472
545
  rb_define_singleton_method(cDuckDBAppender, "create_query", appender_s_create_query, 5);
473
- rb_define_method(cDuckDBAppender, "initialize", appender_initialize, 3);
546
+ rb_define_private_method(cDuckDBAppender, "_initialize", appender__initialize, 3);
547
+ rb_define_private_method(cDuckDBAppender, "_initialize_ext", appender__initialize_ext, 4);
474
548
  rb_define_method(cDuckDBAppender, "error_message", appender_error_message, 0);
475
549
  rb_define_private_method(cDuckDBAppender, "_end_row", appender__end_row, 0);
476
550
  rb_define_private_method(cDuckDBAppender, "_flush", appender__flush, 0);
551
+
552
+ #ifdef HAVE_DUCKDB_H_GE_V1_5_0
553
+ rb_define_private_method(cDuckDBAppender, "_clear", appender__clear, 0);
554
+ #endif
555
+
556
+ rb_define_private_method(cDuckDBAppender, "_add_column", appender__add_column, 1);
557
+ rb_define_private_method(cDuckDBAppender, "_clear_columns", appender__clear_columns, 0);
477
558
  rb_define_private_method(cDuckDBAppender, "_close", appender__close, 0);
478
559
  rb_define_private_method(cDuckDBAppender, "_append_bool", appender__append_bool, 1);
479
560
  rb_define_private_method(cDuckDBAppender, "_append_int8", appender__append_int8, 1);
@@ -499,4 +580,5 @@ void rbduckdb_init_duckdb_appender(void) {
499
580
  rb_define_private_method(cDuckDBAppender, "_append_uhugeint", appender__append_uhugeint, 2);
500
581
  rb_define_private_method(cDuckDBAppender, "_append_value", appender__append_value, 1);
501
582
  rb_define_private_method(cDuckDBAppender, "_append_data_chunk", appender__append_data_chunk, 1);
583
+ rb_define_private_method(cDuckDBAppender, "_append_default_to_chunk", appender__append_default_to_chunk, 3);
502
584
  }
@@ -7,6 +7,6 @@ struct _rubyDuckDBAppender {
7
7
 
8
8
  typedef struct _rubyDuckDBAppender rubyDuckDBAppender;
9
9
 
10
- void rbduckdb_init_duckdb_appender(void);
10
+ void rbduckdb_init_appender(void);
11
11
 
12
12
  #endif
@@ -5,7 +5,7 @@ VALUE cDuckDBClientContext;
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 rbduckdb_client_context_connection_id(VALUE self);
8
+ static VALUE client_context_connection_id(VALUE self);
9
9
 
10
10
  static const rb_data_type_t client_context_data_type = {
11
11
  "DuckDB/ClientContext",
@@ -42,7 +42,7 @@ VALUE rbduckdb_client_context_new(duckdb_client_context client_context) {
42
42
  return obj;
43
43
  }
44
44
 
45
- rubyDuckDBClientContext *get_struct_client_context(VALUE obj) {
45
+ rubyDuckDBClientContext *rbduckdb_get_struct_client_context(VALUE obj) {
46
46
  rubyDuckDBClientContext *ctx;
47
47
  TypedData_Get_Struct(obj, rubyDuckDBClientContext, &client_context_data_type, ctx);
48
48
  return ctx;
@@ -54,17 +54,17 @@ rubyDuckDBClientContext *get_struct_client_context(VALUE obj) {
54
54
  *
55
55
  * Returns the connection id of the client context.
56
56
  */
57
- static VALUE rbduckdb_client_context_connection_id(VALUE self) {
57
+ static VALUE client_context_connection_id(VALUE self) {
58
58
  rubyDuckDBClientContext *ctx;
59
59
  TypedData_Get_Struct(self, rubyDuckDBClientContext, &client_context_data_type, ctx);
60
60
  return ULL2NUM(duckdb_client_context_get_connection_id(ctx->client_context));
61
61
  }
62
62
 
63
- void rbduckdb_init_duckdb_client_context(void) {
63
+ void rbduckdb_init_client_context(void) {
64
64
  #if 0
65
65
  VALUE mDuckDB = rb_define_module("DuckDB");
66
66
  #endif
67
67
  cDuckDBClientContext = rb_define_class_under(mDuckDB, "ClientContext", rb_cObject);
68
68
  rb_define_alloc_func(cDuckDBClientContext, allocate);
69
- rb_define_method(cDuckDBClientContext, "connection_id", rbduckdb_client_context_connection_id, 0);
69
+ rb_define_method(cDuckDBClientContext, "connection_id", client_context_connection_id, 0);
70
70
  }
@@ -7,8 +7,8 @@ struct _rubyDuckDBClientContext {
7
7
 
8
8
  typedef struct _rubyDuckDBClientContext rubyDuckDBClientContext;
9
9
 
10
- void rbduckdb_init_duckdb_client_context(void);
10
+ void rbduckdb_init_client_context(void);
11
11
  VALUE rbduckdb_client_context_new(duckdb_client_context client_context);
12
- rubyDuckDBClientContext *get_struct_client_context(VALUE obj);
12
+ rubyDuckDBClientContext *rbduckdb_get_struct_client_context(VALUE obj);
13
13
 
14
14
  #endif
data/ext/duckdb/column.c CHANGED
@@ -5,9 +5,9 @@ static VALUE cDuckDBColumn;
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 duckdb_column__type(VALUE oDuckDBColumn);
9
- static VALUE duckdb_column__logical_type(VALUE oDuckDBColumn);
10
- static VALUE duckdb_column_get_name(VALUE oDuckDBColumn);
8
+ static VALUE column__type(VALUE oDuckDBColumn);
9
+ static VALUE column_logical_type(VALUE oDuckDBColumn);
10
+ static VALUE column_name(VALUE oDuckDBColumn);
11
11
 
12
12
  static const rb_data_type_t column_data_type = {
13
13
  "DuckDB/Column",
@@ -31,7 +31,7 @@ static size_t memsize(const void *p) {
31
31
  }
32
32
 
33
33
  /* :nodoc: */
34
- VALUE duckdb_column__type(VALUE oDuckDBColumn) {
34
+ VALUE column__type(VALUE oDuckDBColumn) {
35
35
  rubyDuckDBColumn *ctx;
36
36
  rubyDuckDBResult *ctxresult;
37
37
  VALUE result;
@@ -40,7 +40,7 @@ VALUE duckdb_column__type(VALUE oDuckDBColumn) {
40
40
  TypedData_Get_Struct(oDuckDBColumn, rubyDuckDBColumn, &column_data_type, ctx);
41
41
 
42
42
  result = rb_ivar_get(oDuckDBColumn, rb_intern("result"));
43
- ctxresult = get_struct_result(result);
43
+ ctxresult = rbduckdb_get_struct_result(result);
44
44
  type = duckdb_column_type(&(ctxresult->result), ctx->col);
45
45
 
46
46
  return INT2FIX(type);
@@ -53,7 +53,7 @@ VALUE duckdb_column__type(VALUE oDuckDBColumn) {
53
53
  * Returns the logical type class.
54
54
  *
55
55
  */
56
- VALUE duckdb_column__logical_type(VALUE oDuckDBColumn) {
56
+ VALUE column_logical_type(VALUE oDuckDBColumn) {
57
57
  rubyDuckDBColumn *ctx;
58
58
  rubyDuckDBResult *ctxresult;
59
59
  VALUE result;
@@ -63,7 +63,7 @@ VALUE duckdb_column__logical_type(VALUE oDuckDBColumn) {
63
63
  TypedData_Get_Struct(oDuckDBColumn, rubyDuckDBColumn, &column_data_type, ctx);
64
64
 
65
65
  result = rb_ivar_get(oDuckDBColumn, rb_intern("result"));
66
- ctxresult = get_struct_result(result);
66
+ ctxresult = rbduckdb_get_struct_result(result);
67
67
  _logical_type = duckdb_column_logical_type(&(ctxresult->result), ctx->col);
68
68
 
69
69
  if (_logical_type) {
@@ -80,7 +80,7 @@ VALUE duckdb_column__logical_type(VALUE oDuckDBColumn) {
80
80
  * Returns the column name.
81
81
  *
82
82
  */
83
- VALUE duckdb_column_get_name(VALUE oDuckDBColumn) {
83
+ VALUE column_name(VALUE oDuckDBColumn) {
84
84
  rubyDuckDBColumn *ctx;
85
85
  VALUE result;
86
86
  rubyDuckDBResult *ctxresult;
@@ -89,7 +89,7 @@ VALUE duckdb_column_get_name(VALUE oDuckDBColumn) {
89
89
 
90
90
  result = rb_ivar_get(oDuckDBColumn, rb_intern("result"));
91
91
 
92
- ctxresult = get_struct_result(result);
92
+ ctxresult = rbduckdb_get_struct_result(result);
93
93
 
94
94
  return rb_utf8_str_new_cstr(duckdb_column_name(&(ctxresult->result), ctx->col));
95
95
  }
@@ -107,14 +107,14 @@ VALUE rbduckdb_create_column(VALUE oDuckDBResult, idx_t col) {
107
107
  return obj;
108
108
  }
109
109
 
110
- void rbduckdb_init_duckdb_column(void) {
110
+ void rbduckdb_init_column(void) {
111
111
  #if 0
112
112
  VALUE mDuckDB = rb_define_module("DuckDB");
113
113
  #endif
114
114
  cDuckDBColumn = rb_define_class_under(mDuckDB, "Column", rb_cObject);
115
115
  rb_define_alloc_func(cDuckDBColumn, allocate);
116
116
 
117
- rb_define_private_method(cDuckDBColumn, "_type", duckdb_column__type, 0);
118
- rb_define_method(cDuckDBColumn, "logical_type", duckdb_column__logical_type, 0);
119
- rb_define_method(cDuckDBColumn, "name", duckdb_column_get_name, 0);
117
+ rb_define_private_method(cDuckDBColumn, "_type", column__type, 0);
118
+ rb_define_method(cDuckDBColumn, "logical_type", column_logical_type, 0);
119
+ rb_define_method(cDuckDBColumn, "name", column_name, 0);
120
120
  }
data/ext/duckdb/column.h CHANGED
@@ -8,7 +8,7 @@ struct _rubyDuckDBColumn {
8
8
 
9
9
  typedef struct _rubyDuckDBColumn rubyDuckDBColumn;
10
10
 
11
- void rbduckdb_init_duckdb_column(void);
11
+ void rbduckdb_init_column(void);
12
12
  VALUE rbduckdb_create_column(VALUE oDuckDBResult, idx_t col);
13
13
 
14
14
  #endif