duckdb 1.2.0.0 → 1.2.2.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.
@@ -203,27 +203,235 @@ module DuckDB
203
203
  end
204
204
 
205
205
  # call-seq:
206
- # appender.append_uint8(val) -> self
206
+ # appender.append_uint8(val) -> self
207
207
  #
208
208
  # Appends an uint8 value to the current row in the appender.
209
209
  #
210
- # require 'duckdb'
211
- # db = DuckDB::Database.open
212
- # con = db.connect
213
- # con.query('CREATE TABLE users (id INTEGER, age UTINYINT)')
214
- # appender = con.appender('users')
215
- # appender
216
- # .append_int32(1)
217
- # .append_uint8(20)
218
- # .end_row
219
- # .flush
210
+ # require 'duckdb'
211
+ # db = DuckDB::Database.open
212
+ # con = db.connect
213
+ # con.query('CREATE TABLE users (id INTEGER, age UTINYINT)')
214
+ # appender = con.appender('users')
215
+ # appender
216
+ # .append_int32(1)
217
+ # .append_uint8(20)
218
+ # .end_row
219
+ # .flush
220
220
  def append_uint8(value)
221
221
  return self if _append_uint8(value)
222
222
 
223
223
  raise_appender_error('failed to append_uint8')
224
224
  end
225
225
 
226
- # appends huge int value.
226
+ # call-seq:
227
+ # appender.append_uint16(val) -> self
228
+ #
229
+ # Appends an uint16 value to the current row in the appender.
230
+ #
231
+ # require 'duckdb'
232
+ # db = DuckDB::Database.open
233
+ # con = db.connect
234
+ # con.query('CREATE TABLE users (id INTEGER, age USMALLINT)')
235
+ # appender = con.appender('users')
236
+ # appender
237
+ # .append_int32(1)
238
+ # .append_uint16(20)
239
+ # .end_row
240
+ # .flush
241
+ def append_uint16(value)
242
+ return self if _append_uint16(value)
243
+
244
+ raise_appender_error('failed to append_uint16')
245
+ end
246
+
247
+ # call-seq:
248
+ # appender.append_uint32(val) -> self
249
+ #
250
+ # Appends an uint32 value to the current row in the appender.
251
+ #
252
+ # require 'duckdb'
253
+ # db = DuckDB::Database.open
254
+ # con = db.connect
255
+ # con.query('CREATE TABLE users (id INTEGER, age UINTEGER)')
256
+ # appender = con.appender('users')
257
+ # appender
258
+ # .append_int32(1)
259
+ # .append_uint32(20)
260
+ # .end_row
261
+ # .flush
262
+ def append_uint32(value)
263
+ return self if _append_uint32(value)
264
+
265
+ raise_appender_error('failed to append_uint32')
266
+ end
267
+
268
+ # call-seq:
269
+ # appender.append_uint64(val) -> self
270
+ #
271
+ # Appends an uint64 value to the current row in the appender.
272
+ #
273
+ # require 'duckdb'
274
+ # db = DuckDB::Database.open
275
+ # con = db.connect
276
+ # con.query('CREATE TABLE users (id INTEGER, age UBIGINT)')
277
+ # appender = con.appender('users')
278
+ # Appender
279
+ # .append_int32(1)
280
+ # .append_uint64(20)
281
+ # .end_row
282
+ # .flush
283
+ def append_uint64(value)
284
+ return self if _append_uint64(value)
285
+
286
+ raise_appender_error('failed to append_uint64')
287
+ end
288
+
289
+ # call-seq:
290
+ # appender.append_float(val) -> self
291
+ #
292
+ # Appends a float value to the current row in the appender.
293
+ #
294
+ # require 'duckdb'
295
+ # db = DuckDB::Database.open
296
+ # con = db.connect
297
+ # con.query('CREATE TABLE numbers (num FLOAT)')
298
+ # appender = con.appender('numbers')
299
+ # appender
300
+ # .append_float(1.23)
301
+ # .end_row
302
+ # .flush
303
+ def append_float(value)
304
+ return self if _append_float(value)
305
+
306
+ raise_appender_error('failed to append_float')
307
+ end
308
+
309
+ # call-seq:
310
+ # appender.append_double(val) -> self
311
+ #
312
+ # Appends a double value to the current row in the appender.
313
+ #
314
+ # require 'duckdb'
315
+ # db = DuckDB::Database.open
316
+ # con = db.connect
317
+ # con.query('CREATE TABLE numbers (num DOUBLE)')
318
+ # appender = con.appender('numbers')
319
+ # appender
320
+ # .append_double(1.23)
321
+ # .end_row
322
+ # .flush
323
+ def append_double(value)
324
+ return self if _append_double(value)
325
+
326
+ raise_appender_error('failed to append_double')
327
+ end
328
+
329
+ # call-seq:
330
+ # appender.append_varchar(val) -> self
331
+ #
332
+ # Appends a varchar value to the current row in the appender.
333
+ #
334
+ # require 'duckdb'
335
+ # db = DuckDB::Database.open
336
+ # con = db.connect
337
+ # con.query('CREATE TABLE names (name VARCHAR)')
338
+ # appender = con.appender('names')
339
+ # appender
340
+ # .append_varchar('Alice')
341
+ # .end_row
342
+ # .flush
343
+ def append_varchar(value)
344
+ return self if _append_varchar(value)
345
+
346
+ raise_appender_error('failed to append_varchar')
347
+ end
348
+
349
+ # call-seq:
350
+ # appender.append_varchar_length(val, len) -> self
351
+ #
352
+ # Appends a varchar value to the current row in the appender.
353
+ #
354
+ # require 'duckdb'
355
+ # db = DuckDB::Database.open
356
+ # con = db.connect
357
+ # con.query('CREATE TABLE names (name VARCHAR)')
358
+ # appender = con.appender('names')
359
+ # appender
360
+ # .append_varchar_length('Alice', 5)
361
+ # .end_row
362
+ # .flush
363
+ def append_varchar_length(value, length)
364
+ return self if _append_varchar_length(value, length)
365
+
366
+ raise_appender_error('failed to append_varchar_length')
367
+ end
368
+
369
+ # call-seq:
370
+ # appender.append_blob(val) -> self
371
+ #
372
+ # Appends a varchar value to the current row in the appender.
373
+ #
374
+ # require 'duckdb'
375
+ # db = DuckDB::Database.open
376
+ # con = db.connect
377
+ # con.query('CREATE TABLE values (value BLOB)')
378
+ # appender = con.appender('values')
379
+ # appender
380
+ # .append('\0\1\2\3\4\5'.encode(Encoding::BINARY))
381
+ # .end_row
382
+ # .flush
383
+ def append_blob(value)
384
+ return self if _append_blob(value)
385
+
386
+ raise_appender_error('failed to append_blob')
387
+ end
388
+
389
+ # call-seq:
390
+ # appender.append_null -> self
391
+ #
392
+ # Appends a NULL value to the current row in the appender.
393
+ #
394
+ # require 'duckdb'
395
+ # db = DuckDB::Database.open
396
+ # con = db.connect
397
+ # con.query('CREATE TABLE values (value INTEGER)')
398
+ # appender = con.appender('values')
399
+ # appender
400
+ # .append_null
401
+ # .end_row
402
+ # .flush
403
+ def append_null
404
+ return self if _append_null
405
+
406
+ raise_appender_error('failed to append_null')
407
+ end
408
+
409
+ # call-seq:
410
+ # appender.append_default -> self
411
+ #
412
+ # Appends a default value to the current row in the appender.
413
+ # If the column does not have a default value, this method
414
+ # appends a NULL value.
415
+ #
416
+ # require 'duckdb'
417
+ # db = DuckDB::Database.open
418
+ # con = db.connect
419
+ # con.query('CREATE TABLE values (value INTEGER DEFAULT 1)')
420
+ # appender = con.appender('values')
421
+ # appender
422
+ # .append_default
423
+ # .end_row
424
+ # .flush
425
+ def append_default
426
+ return self if _append_default
427
+
428
+ raise_appender_error('failed to append_default')
429
+ end
430
+
431
+ # call-seq:
432
+ # appender.append_hugeint(val) -> self
433
+ #
434
+ # Appends a huge int value to the current row in the appender.
227
435
  #
228
436
  # require 'duckdb'
229
437
  # db = DuckDB::Database.open
@@ -233,12 +441,19 @@ module DuckDB
233
441
  # appender
234
442
  # .append_hugeint(-170_141_183_460_469_231_731_687_303_715_884_105_727)
235
443
  # .end_row
444
+ # .flush
236
445
  def append_hugeint(value)
237
446
  lower, upper = integer_to_hugeint(value)
238
- _append_hugeint(lower, upper)
447
+
448
+ return self if _append_hugeint(lower, upper)
449
+
450
+ raise_appender_error('failed to append_hugeint')
239
451
  end
240
452
 
241
- # appends unsigned huge int value.
453
+ # call-seq:
454
+ # appender.append_uhugeint(val) -> self
455
+ #
456
+ # Appends an unsigned huge int value to the current row in the appender.
242
457
  #
243
458
  # require 'duckdb'
244
459
  # db = DuckDB::Database.open
@@ -248,12 +463,19 @@ module DuckDB
248
463
  # appender
249
464
  # .append_hugeint(340_282_366_920_938_463_463_374_607_431_768_211_455)
250
465
  # .end_row
466
+ # .flush
251
467
  def append_uhugeint(value)
252
468
  lower, upper = integer_to_hugeint(value)
253
- _append_uhugeint(lower, upper)
469
+
470
+ return self if _append_uhugeint(lower, upper)
471
+
472
+ raise_appender_error('failed to append_uhugeint')
254
473
  end
255
474
 
256
- # appends date value.
475
+ # call-seq:
476
+ # appender.append_date(val) -> self
477
+ #
478
+ # Appends a date value to the current row in the appender.
257
479
  #
258
480
  # require 'duckdb'
259
481
  # db = DuckDB::Database.open
@@ -269,10 +491,15 @@ module DuckDB
269
491
  def append_date(value)
270
492
  date = _parse_date(value)
271
493
 
272
- _append_date(date.year, date.month, date.day)
494
+ return self if _append_date(date.year, date.month, date.day)
495
+
496
+ raise_appender_error('failed to append_date')
273
497
  end
274
498
 
275
- # appends time value.
499
+ # call-seq:
500
+ # appender.append_time(val) -> self
501
+ #
502
+ # Appends a time value to the current row in the appender.
276
503
  #
277
504
  # require 'duckdb'
278
505
  # db = DuckDB::Database.open
@@ -287,10 +514,15 @@ module DuckDB
287
514
  def append_time(value)
288
515
  time = _parse_time(value)
289
516
 
290
- _append_time(time.hour, time.min, time.sec, time.usec)
517
+ return self if _append_time(time.hour, time.min, time.sec, time.usec)
518
+
519
+ raise_appender_error('failed to append_time')
291
520
  end
292
521
 
293
- # appends timestamp value.
522
+ # call-seq:
523
+ # appender.append_timestamp(val) -> self
524
+ #
525
+ # Appends a timestamp value to the current row in the appender.
294
526
  #
295
527
  # require 'duckdb'
296
528
  # db = DuckDB::Database.open
@@ -306,12 +538,16 @@ module DuckDB
306
538
  def append_timestamp(value)
307
539
  time = to_time(value)
308
540
 
309
- _append_timestamp(time.year, time.month, time.day, time.hour, time.min, time.sec, time.nsec / 1000)
541
+ return self if _append_timestamp(time.year, time.month, time.day, time.hour, time.min, time.sec, time.nsec / 1000)
542
+
543
+ raise_appender_error('failed to append_timestamp')
310
544
  end
311
545
 
312
- # appends interval.
546
+ # call-seq:
547
+ # appender.append_interval(val) -> self
548
+ #
549
+ # Appends an interval value to the current row in the appender.
313
550
  # The argument must be ISO8601 duration format.
314
- # WARNING: This method is expremental.
315
551
  #
316
552
  # require 'duckdb'
317
553
  # db = DuckDB::Database.open
@@ -324,7 +560,10 @@ module DuckDB
324
560
  # .flush
325
561
  def append_interval(value)
326
562
  value = Interval.to_interval(value)
327
- _append_interval(value.interval_months, value.interval_days, value.interval_micros)
563
+
564
+ return self if _append_interval(value.interval_months, value.interval_days, value.interval_micros)
565
+
566
+ raise_appender_error('failed to append_interval')
328
567
  end
329
568
 
330
569
  # appends value.
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ if defined?(DuckDB::InstanceCache)
4
+
5
+ module DuckDB
6
+ # The DuckDB::InstanceCache is necessary if a client/program (re)opens
7
+ # multiple databases to the same file within the same statement.
8
+ #
9
+ # require 'duckdb'
10
+ # cache = DuckDB::InstanceCache.new
11
+ # db1 = cache.get(path: 'db.duckdb')
12
+ # db2 = cache.get(path: 'db.duckdb')
13
+ class InstanceCache
14
+ # :call-seq:
15
+ # instance_cache.get(path:, config:) -> self
16
+ #
17
+ # Returns a DuckDB::Database object for the given path and config.
18
+ # db1 = cache.get(path: 'db.duckdb')
19
+ # db2 = cache.get(path: 'db.duckdb')
20
+ def get(path: nil, config: nil)
21
+ get_or_create(path, config)
22
+ end
23
+ end
24
+ end
25
+
26
+ end
@@ -2,6 +2,9 @@
2
2
 
3
3
  module DuckDB
4
4
  class LogicalType
5
+ alias :alias get_alias
6
+ alias :alias= set_alias
7
+
5
8
  # returns logical type's type symbol
6
9
  # `:unknown` means that the logical type's type is unknown/unsupported by ruby-duckdb.
7
10
  # `:invalid` means that the logical type's type is invalid in duckdb.
@@ -18,5 +21,133 @@ module DuckDB
18
21
  type_id = _type
19
22
  DuckDB::Converter::IntToSym.type_to_sym(type_id)
20
23
  end
24
+
25
+ # returns logical type's internal type symbol for Decimal or Enum types
26
+ # `:unknown` means that the logical type's type is unknown/unsupported by ruby-duckdb.
27
+ # `:invalid` means that the logical type's type is invalid in duckdb.
28
+ #
29
+ # require 'duckdb'
30
+ # db = DuckDB::Database.open
31
+ # con = db.connect
32
+ # con.query("CREATE TYPE mood AS ENUM ('happy', 'sad')")
33
+ # con.query("CREATE TABLE emotions (id INTEGER, enum_col mood)")
34
+ #
35
+ # users = con.query('SELECT * FROM emotions')
36
+ # ernum_col = users.columns.find { |col| col.name == 'enum_col' }
37
+ # enum_col.logical_type.internal_type #=> :utinyint
38
+ def internal_type
39
+ type_id = _internal_type
40
+ DuckDB::Converter::IntToSym.type_to_sym(type_id)
41
+ end
42
+
43
+ # Iterates over each union member name.
44
+ #
45
+ # When a block is provided, this method yields each union member name in
46
+ # order. It also returns the total number of members yielded.
47
+ #
48
+ # union_logical_type.each_member_name do |name|
49
+ # puts "Union member: #{name}"
50
+ # end
51
+ #
52
+ # If no block is given, an Enumerator is returned, which can be used to
53
+ # retrieve all member names.
54
+ #
55
+ # names = union_logical_type.each_member_name.to_a
56
+ # # => ["member1", "member2"]
57
+ def each_member_name
58
+ return to_enum(__method__) {member_count} unless block_given?
59
+
60
+ member_count.times do |i|
61
+ yield member_name_at(i)
62
+ end
63
+ end
64
+
65
+ # Iterates over each union member type.
66
+ #
67
+ # When a block is provided, this method yields each union member logical
68
+ # type in order. It also returns the total number of members yielded.
69
+ #
70
+ # union_logical_type.each_member_type do |logical_type|
71
+ # puts "Union member: #{logical_type.type}"
72
+ # end
73
+ #
74
+ # If no block is given, an Enumerator is returned, which can be used to
75
+ # retrieve all member logical types.
76
+ #
77
+ # names = union_logical_type.each_member_type.map(&:type)
78
+ # # => [:varchar, :integer]
79
+ def each_member_type
80
+ return to_enum(__method__) {member_count} unless block_given?
81
+
82
+ member_count.times do |i|
83
+ yield member_type_at(i)
84
+ end
85
+ end
86
+
87
+ # Iterates over each struct child name.
88
+ #
89
+ # When a block is provided, this method yields each struct child name in
90
+ # order. It also returns the total number of children yielded.
91
+ #
92
+ # struct_logical_type.each_child_name do |name|
93
+ # puts "Struct child: #{name}"
94
+ # end
95
+ #
96
+ # If no block is given, an Enumerator is returned, which can be used to
97
+ # retrieve all child names.
98
+ #
99
+ # names = struct_logical_type.each_child_name.to_a
100
+ # # => ["child1", "child2"]
101
+ def each_child_name
102
+ return to_enum(__method__) {child_count} unless block_given?
103
+
104
+ child_count.times do |i|
105
+ yield child_name_at(i)
106
+ end
107
+ end
108
+
109
+ # Iterates over each struct child type.
110
+ #
111
+ # When a block is provided, this method yields each struct child type in
112
+ # order. It also returns the total number of children yielded.
113
+ #
114
+ # struct_logical_type.each_child_type do |logical_type|
115
+ # puts "Struct child type: #{logical_type.type}"
116
+ # end
117
+ #
118
+ # If no block is given, an Enumerator is returned, which can be used to
119
+ # retrieve all child logical types.
120
+ #
121
+ # types = struct_logical_type.each_child_type.map(&:type)
122
+ # # => [:integer, :varchar]
123
+ def each_child_type
124
+ return to_enum(__method__) {child_count} unless block_given?
125
+
126
+ child_count.times do |i|
127
+ yield child_type_at(i)
128
+ end
129
+ end
130
+
131
+ # Iterates over each enum dictionary value.
132
+ #
133
+ # When a block is provided, this method yields each enum dictionary value
134
+ # in order. It also returns the total number of dictionary values yielded.
135
+ #
136
+ # enum_logical_type.each_value do |value|
137
+ # puts "Enum value: #{value}"
138
+ # end
139
+ #
140
+ # If no block is given, an Enumerator is returned, which can be used to
141
+ # retrieve all enum dictionary values.
142
+ #
143
+ # values = enum_logical_type.each_value.to_a
144
+ # # => ["happy", "sad"]
145
+ def each_dictionary_value
146
+ return to_enum(__method__) {dictionary_size} unless block_given?
147
+
148
+ dictionary_size.times do |i|
149
+ yield dictionary_value_at(i)
150
+ end
151
+ end
21
152
  end
22
153
  end
@@ -105,6 +105,46 @@ module DuckDB
105
105
  end
106
106
  end
107
107
 
108
+ # binds i-th parameter with SQL prepared statement.
109
+ # The first argument is index of parameter.
110
+ # The index of first parameter is 1 not 0.
111
+ # The second argument value is to expected Integer value between 0 to 255.
112
+ def bind_uint8(index, val)
113
+ return _bind_uint8(index, val) if val.between?(0, 255)
114
+
115
+ raise DuckDB::Error, "can't bind uint8(bind_uint8) to `#{val}`. The `#{val}` is out of range 0..255."
116
+ end
117
+
118
+ # binds i-th parameter with SQL prepared statement.
119
+ # The first argument is index of parameter.
120
+ # The index of first parameter is 1 not 0.
121
+ # The second argument value is to expected Integer value between 0 to 65535.
122
+ def bind_uint16(index, val)
123
+ return _bind_uint16(index, val) if val.between?(0, 65_535)
124
+
125
+ raise DuckDB::Error, "can't bind uint16(bind_uint16) to `#{val}`. The `#{val}` is out of range 0..65535."
126
+ end
127
+
128
+ # binds i-th parameter with SQL prepared statement.
129
+ # The first argument is index of parameter.
130
+ # The index of first parameter is 1 not 0.
131
+ # The second argument value is to expected Integer value between 0 to 4294967295.
132
+ def bind_uint32(index, val)
133
+ return _bind_uint32(index, val) if val.between?(0, 4_294_967_295)
134
+
135
+ raise DuckDB::Error, "can't bind uint32(bind_uint32) to `#{val}`. The `#{val}` is out of range 0..4294967295."
136
+ end
137
+
138
+ # binds i-th parameter with SQL prepared statement.
139
+ # The first argument is index of parameter.
140
+ # The index of first parameter is 1 not 0.
141
+ # The second argument value is to expected Integer value between 0 to 18446744073709551615.
142
+ def bind_uint64(index, val)
143
+ return _bind_uint64(index, val) if val.between?(0, 18_446_744_073_709_551_615)
144
+
145
+ raise DuckDB::Error, "can't bind uint64(bind_uint64) to `#{val}`. The `#{val}` is out of range 0..18446744073709551615."
146
+ end
147
+
108
148
  # binds i-th parameter with SQL prepared statement.
109
149
  # The first argument is index of parameter.
110
150
  # The index of first parameter is 1 not 0.
@@ -135,7 +175,7 @@ module DuckDB
135
175
  # require 'duckdb'
136
176
  # db = DuckDB::Database.open('duckdb_database')
137
177
  # con = db.connect
138
- # sql ='SELECT name FROM users WHERE bigint_col = ?'
178
+ # sql ='SELECT name FROM users WHERE hugeint_col = ?'
139
179
  # stmt = PreparedStatement.new(con, sql)
140
180
  # stmt.bind_hugeint_internal(1, 1_234_567_890_123_456_789_012_345)
141
181
  def bind_hugeint_internal(index, value)
@@ -143,6 +183,23 @@ module DuckDB
143
183
  _bind_hugeint(index, lower, upper)
144
184
  end
145
185
 
186
+ # binds i-th parameter with SQL prepared statement.
187
+ # The first argument is index of parameter.
188
+ # The index of first parameter is 1 not 0.
189
+ # The second argument value must be Integer value.
190
+ # This method uses duckdb_bind_uhugeint internally.
191
+ #
192
+ # require 'duckdb'
193
+ # db = DuckDB::Database.open('duckdb_database')
194
+ # con = db.connect
195
+ # sql ='SELECT name FROM users WHERE uhugeint_col = ?'
196
+ # stmt = PreparedStatement.new(con, sql)
197
+ # stmt.bind_uhugeint(1, (2**128) - 1)
198
+ def bind_uhugeint(index, value)
199
+ lower, upper = integer_to_hugeint(value)
200
+ _bind_uhugeint(index, lower, upper)
201
+ end
202
+
146
203
  # binds i-th parameter with SQL prepared statement.
147
204
  # The first argument is index of parameter.
148
205
  # The index of first parameter is 1 not 0.
@@ -3,5 +3,5 @@
3
3
  module DuckDB
4
4
  # The version string of ruby-duckdb.
5
5
  # Currently, ruby-duckdb is NOT semantic versioning.
6
- VERSION = '1.2.0.0'
6
+ VERSION = '1.2.2.0'
7
7
  end
data/lib/duckdb.rb CHANGED
@@ -15,6 +15,7 @@ require 'duckdb/config'
15
15
  require 'duckdb/column'
16
16
  require 'duckdb/logical_type'
17
17
  require 'duckdb/infinity'
18
+ require 'duckdb/instance_cache'
18
19
 
19
20
  # DuckDB provides Ruby interface of DuckDB.
20
21
  module DuckDB
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: duckdb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0.0
4
+ version: 1.2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masaki Suketa
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-02-23 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: bigdecimal
@@ -132,6 +132,8 @@ files:
132
132
  - ext/duckdb/extconf.rb
133
133
  - ext/duckdb/extracted_statements.c
134
134
  - ext/duckdb/extracted_statements.h
135
+ - ext/duckdb/instance_cache.c
136
+ - ext/duckdb/instance_cache.h
135
137
  - ext/duckdb/logical_type.c
136
138
  - ext/duckdb/logical_type.h
137
139
  - ext/duckdb/pending_result.c
@@ -154,6 +156,7 @@ files:
154
156
  - lib/duckdb/database.rb
155
157
  - lib/duckdb/extracted_statements.rb
156
158
  - lib/duckdb/infinity.rb
159
+ - lib/duckdb/instance_cache.rb
157
160
  - lib/duckdb/interval.rb
158
161
  - lib/duckdb/library_version.rb
159
162
  - lib/duckdb/logical_type.rb
@@ -185,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
188
  - !ruby/object:Gem::Version
186
189
  version: '0'
187
190
  requirements: []
188
- rubygems_version: 3.6.2
191
+ rubygems_version: 3.6.7
189
192
  specification_version: 4
190
193
  summary: This module is Ruby binding for DuckDB database engine.
191
194
  test_files: []