duckdb 1.0.0.2 → 1.1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2a632e159017449943e06edae0808189967be14845c29b479cb77a0d9e6b9da7
4
- data.tar.gz: ec7b9c0f6d34aa943436e9525e914759dbd775d8c9a02b1eff991e2a03ade249
3
+ metadata.gz: 874174344b2be8ad2eba6fa1e89d2c96827a7e53e0982bacaa7a804b1ee8cf0b
4
+ data.tar.gz: 9d57293bc3dc59cc10ad7a23ae8e0b8ed4944524c83ecd3e5e9503c6f460d73f
5
5
  SHA512:
6
- metadata.gz: e50c031a4d9f38a87eb77996c90f90a36c4c5f840694bad4a7ce79dcf3d2e439b30fee8e41a21522285ff7db5293e6fa059186c958f7fbed99089455b4ea04db
7
- data.tar.gz: 65b7187a73f43b89a8ec8997edcce562af456e3b89f697b4e25c23ae114ed712916643d39c81ef323a1b47b6ac4783e384c53477d177a9d73271859e31c0f970
6
+ metadata.gz: b8739a162ec00fb0bb98e13d4f9adecb8f3230e2b4fa81067a128ce4f9db4456b76fe825652ba09b46a5c05fb1f7637a762f369f28f9d7d9423649f7e646b7f0
7
+ data.tar.gz: 3b564b2aa68cbfcc5eec96d9cc4dd038749d172b28b2329ba20af14610bc1db34a270d3034688dfdf852b26edd0a711d803886e3d731619848d5cd5e6ca331be
@@ -15,8 +15,8 @@ jobs:
15
15
  runs-on: macos-latest
16
16
  strategy:
17
17
  matrix:
18
- ruby: ['3.0.7', '3.1.6', '3.2.4', '3.3.3', '3.4.0-preview1', 'head']
19
- duckdb: ['1.0.0', '0.10.3']
18
+ ruby: ['3.1.6', '3.2.5', '3.3.5', '3.4.0-preview1', 'head']
19
+ duckdb: ['1.1.0', '1.0.0', '0.10.3']
20
20
 
21
21
  steps:
22
22
  - uses: actions/checkout@v4
@@ -51,12 +51,12 @@ jobs:
51
51
  run: |
52
52
  bundle install --jobs 4 --retry 3
53
53
 
54
- - name: Build test with DUCKDB_API_NO_DEPRECATED and Ruby ${{ matrix.ruby }}
55
- env:
56
- DUCKDB_VERSION: ${{ matrix.duckdb }}
57
- run: |
58
- env DUCKDB_API_NO_DEPRECATED=1 bundle exec rake build -- --with-duckdb-include=${GITHUB_WORKSPACE}/duckdb-v${DUCKDB_VERSION}/src/include --with-duckdb-lib=${GITHUB_WORKSPACE}/duckdb-v${DUCKDB_VERSION}/build/release/src/
59
- bundle exec rake clean
54
+ # - name: Build test with DUCKDB_API_NO_DEPRECATED and Ruby ${{ matrix.ruby }}
55
+ # env:
56
+ # DUCKDB_VERSION: ${{ matrix.duckdb }}
57
+ # run: |
58
+ # env DUCKDB_API_NO_DEPRECATED=1 bundle exec rake build -- --with-duckdb-include=${GITHUB_WORKSPACE}/duckdb-v${DUCKDB_VERSION}/src/include --with-duckdb-lib=${GITHUB_WORKSPACE}/duckdb-v${DUCKDB_VERSION}/build/release/src/
59
+ # bundle exec rake clean
60
60
 
61
61
  - name: Build with Ruby ${{ matrix.ruby }}
62
62
  env:
@@ -15,8 +15,8 @@ jobs:
15
15
  runs-on: ubuntu-latest
16
16
  strategy:
17
17
  matrix:
18
- ruby: ['3.0.7', '3.1.6', '3.2.4', '3.3.3', '3.4.0-preview1', 'head']
19
- duckdb: ['1.0.0', '0.10.3']
18
+ ruby: ['3.1.6', '3.2.5', '3.3.5', '3.4.0-preview1', 'head']
19
+ duckdb: ['1.1.0', '1.0.0', '0.10.3']
20
20
 
21
21
  steps:
22
22
  - uses: actions/checkout@v4
@@ -15,8 +15,8 @@ jobs:
15
15
  runs-on: windows-latest
16
16
  strategy:
17
17
  matrix:
18
- ruby: ['3.0.7', '3.1.5', '3.2.4', '3.3.2', 'ucrt', 'mingw', 'mswin', 'head']
19
- duckdb: ['1.0.0', '0.10.3']
18
+ ruby: ['3.1.6', '3.2.5', '3.3.5', 'ucrt', 'mingw', 'mswin', 'head']
19
+ duckdb: ['1.1.0', '1.0.0', '0.10.3']
20
20
 
21
21
  steps:
22
22
  - uses: actions/checkout@v4
data/CHANGELOG.md CHANGED
@@ -1,8 +1,63 @@
1
1
  # Changelog
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
+ # Unreleased
5
+
6
+ # 1.1.0.1 - 2024-09-21
7
+ - add `DuckDB::Connection#prepare`. `DuckDB::Connection#prepare` is an alias of `DuckDB::Connection#prepared_statement`.
8
+
9
+ # 1.1.0.0 - 2024-09-15
10
+ - drop ruby 3.0.x.
11
+ - bump duckdb to 1.1.0.
12
+ - Add `DuckDB::PendingResult#execute_check_state` to check the state of the pending result.
13
+ - Add `DuckDB::PreparedStatement#clear_bindings` to clear all bindings.
14
+ - Add `DuckDB::PreparedStatement#param_type` to get the type of the paramerter type.
15
+ - The return value is one of the `:invalid`, `:boolean`, `:tinyint`, `:smallint`, `:integer`, `:bigint`, `:utinyint`,
16
+ `:usmallint`, `:uinteger`, `:ubigint`, `:float`, `:double`, `:timestamp`, `:date`, `:time`, `:interval`, `:hugeint`,
17
+ `:uhugeint`, `:varchar`, `:blob`, `:decimal`, `:timestamp_s`, `:timestamp_ms`, `:timestamp_ns`, `:enum`, `:list`,
18
+ `:struct`, `:map`, `:array`, `:uuid`, `:union`, `:bit`, `:time_tz`, `:timestamp_tz`.
19
+ - Add `DuckDB::PreparedStatement#statement_type` to get the type of the statement.
20
+ - The return value is one of the `:invalid`, `:select`, `:insert`, `:update`, `:explain`, `:delete`, `:prepare`, `:create`,
21
+ `:execute`, `:alter`, `:transaction`, `:copy`, `:analyze`, `:variable_set`, `:create_func`,
22
+ `:drop`, `:export`, `:pragma`, `:vacuum`, `:call`, `:set`, `:load`, `:relation`, `:extension`,
23
+ `:logical_plan`, `:attach`, `:detach`, `:multi`.
24
+ - Add `DuckDB::Result#statement_type` to get the return type of the statement.
25
+ - The return value is one of the `:invalid`, `:select`, `:insert`, `:update`, `:explain`, `:delete`, `:prepare`, `:create`,
26
+ `:execute`, `:alter`, `:transaction`, `:copy`, `:analyze`, `:variable_set`, `:create_func`,
27
+ `:drop`, `:export`, `:pragma`, `:vacuum`, `:call`, `:set`, `:load`, `:relation`, `:extension`,
28
+ `:logical_plan`, `:attach`, `:detach`, `:multi`.
29
+ - Add `DuckDB::Result#return_type` to get the return type of the result.
30
+ - The return value is one of the `:invalid`, `:query_result`, `:rows_changed`, `:nothing`.
31
+ - The following method will be deprecated.
32
+ - `DuckDB::Result#use_chunk_each?`
33
+ - `DuckDB::Result#use_chunk_each=`
4
34
 
5
- ## Unreleased
35
+ ## Breaking changes
36
+ - drop duckdb v0.9.x.
37
+ - skip to check duckdb_parameter_name is available.
38
+ - The following methods are obsoleted.
39
+ - `DuckDB::Result#_null?`
40
+ - `DuckDB::Result#_to_boolean`
41
+ - `DuckDB::Result#_to_smallint`
42
+ - `DuckDB::Result#_to_utinyint`
43
+ - `DuckDB::Result#_to_integer`
44
+ - `DuckDB::Result#_to_bigint`
45
+ - `DuckDB::Result#_to_hugeint`
46
+ - `DuckDB::Result#_to_hugeint_internal`
47
+ - `DuckDB::Result#__to_hugeint_internal`
48
+ - `DuckDB::Result#_to_decimal`
49
+ - `DuckDB::Result#_to_decimal_internal`
50
+ - `DuckDB::Result#__to_decimal_internal`
51
+ - `DuckDB::Result#_to_float`
52
+ - `DuckDB::Result#_to_double`
53
+ - `DuckDB::Result#_to_string`
54
+ - `DuckDB::Result#_to_string_internal`
55
+ - `DuckDB::Result#_to_blob`
56
+ - `DuckDB::Result#to_value`
57
+ - `DuckDB::Result#row`
58
+ - `DuckDB::Result#use_chunk_each?` is always true.
59
+ - `DuckDB::Result#use_chunk_each=` always ignores the argument.
60
+ - `DuckDB::Result#each` always works the same as `DuckDB::Result#chunk_each`.
6
61
 
7
62
  # 1.0.0.2 - 2024-06-23
8
63
  - DuckDB::Result supports TIMESTAMPTZ column type (only when DuckDB::Result.use_chunk_each is true).
data/Dockerfile CHANGED
@@ -1,7 +1,7 @@
1
- ARG RUBY_VERSION=3.3.3
1
+ ARG RUBY_VERSION=3.3.5
2
2
  FROM ruby:${RUBY_VERSION}
3
3
 
4
- ARG DUCKDB_VERSION=1.0.0
4
+ ARG DUCKDB_VERSION=1.1.0
5
5
 
6
6
  RUN apt update -qq && \
7
7
  apt install -y build-essential curl git wget
data/Gemfile.lock CHANGED
@@ -1,22 +1,22 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- duckdb (1.0.0.2)
4
+ duckdb (1.1.0.1)
5
5
  bigdecimal (>= 3.1.4)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- benchmark-ips (2.13.0)
10
+ benchmark-ips (2.14.0)
11
11
  bigdecimal (3.1.8)
12
12
  mini_portile2 (2.8.7)
13
- minitest (5.24.0)
14
- nokogiri (1.16.6)
13
+ minitest (5.25.1)
14
+ nokogiri (1.16.7)
15
15
  mini_portile2 (~> 2.8.2)
16
16
  racc (~> 1.4)
17
- nokogiri (1.16.6-x86_64-linux)
17
+ nokogiri (1.16.7-x86_64-linux)
18
18
  racc (~> 1.4)
19
- racc (1.8.0)
19
+ racc (1.8.1)
20
20
  rake (13.2.1)
21
21
  rake-compiler (1.2.7)
22
22
  rake
data/README.md CHANGED
@@ -113,15 +113,24 @@ con.query('SELECT * FROM users WHERE name = ? AND email = ?', 'Alice', 'alice@ex
113
113
  # or
114
114
  con.query('SELECT * FROM users WHERE name = $name AND email = $email', name: 'Alice', email: 'alice@example.com')
115
115
  ```
116
+ ### Using prepared statement
116
117
 
118
+ You can use prepared statement.
119
+
120
+ ```ruby
121
+ stmt = con.prepare('SELECT * FROM users WHERE name = $name AND email = $email')
122
+ # or
123
+ # stmt = con.prepared_statement('SELECT * FROM users WHERE name = $name AND email = $email')
124
+ # or
125
+ # stmt = DuckDB::PreparedStatement.new(con, 'SELECT * FROM users WHERE name = $name AND email = $email')
126
+ stmt.bind(name: 'Alice', email: 'alice@example.com')
127
+ result = stmt.execute
128
+ ```
117
129
  ### Using async query
118
130
 
119
131
  You can use async query.
120
132
 
121
133
  ```ruby
122
- DuckDB::Result.use_chunk_each = true
123
- ...
124
-
125
134
  pending_result = con.async_query_stream('SLOW QUERY')
126
135
  pending_result.execute_task while pending_result.state == :not_ready
127
136
 
@@ -2,8 +2,6 @@ require 'bundler/setup'
2
2
  require 'duckdb'
3
3
  require 'benchmark/ips'
4
4
 
5
-
6
- DuckDB::Result.use_chunk_each = true
7
5
  DuckDB::Database.open do |db|
8
6
  db.connect do |con|
9
7
  con.query('SET threads=1')
@@ -4,7 +4,6 @@ require 'bundler/setup'
4
4
  require 'duckdb'
5
5
  require 'benchmark/ips'
6
6
 
7
- DuckDB::Result.use_chunk_each = true
8
7
  db = DuckDB::Database.open
9
8
  con = db.connect
10
9
  con.query(<<~SQL
data/duckdb.gemspec CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
26
26
  end
27
27
  spec.require_paths = ['lib']
28
28
  spec.extensions = ['ext/duckdb/extconf.rb']
29
- spec.required_ruby_version = '>= 3.0.0'
29
+ spec.required_ruby_version = '>= 3.1.0'
30
30
  spec.add_dependency 'bigdecimal', '>= 3.1.4'
31
31
 
32
32
  spec.add_development_dependency 'bundler', '~> 2.3'
data/ext/duckdb/duckdb.c CHANGED
@@ -1,6 +1,8 @@
1
1
  #include "ruby-duckdb.h"
2
2
 
3
3
  VALUE mDuckDB;
4
+ VALUE PositiveInfinity;
5
+ VALUE NegativeInfinity;
4
6
 
5
7
  static VALUE duckdb_s_library_version(VALUE self);
6
8
 
@@ -19,6 +21,8 @@ static VALUE duckdb_s_library_version(VALUE self) {
19
21
  void
20
22
  Init_duckdb_native(void) {
21
23
  mDuckDB = rb_define_module("DuckDB");
24
+ PositiveInfinity = rb_str_new_literal("infinity");
25
+ NegativeInfinity = rb_str_new_literal("-infinity");
22
26
 
23
27
  rb_define_singleton_method(mDuckDB, "library_version", duckdb_s_library_version, 0);
24
28
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'mkmf'
4
4
 
5
- DUCKDB_REQUIRED_VERSION = '0.9.0'
5
+ DUCKDB_REQUIRED_VERSION = '0.10.0'
6
6
 
7
7
  def check_duckdb_header(header, version)
8
8
  found = find_header(
@@ -56,10 +56,7 @@ end
56
56
  dir_config('duckdb')
57
57
 
58
58
  check_duckdb_header('duckdb.h', DUCKDB_REQUIRED_VERSION)
59
- check_duckdb_library('duckdb', 'duckdb_bind_parameter_index', DUCKDB_REQUIRED_VERSION)
60
-
61
- # check duckdb >= 0.9.0
62
- have_func('duckdb_bind_parameter_index', 'duckdb.h')
59
+ check_duckdb_library('duckdb', 'duckdb_appender_column_count', DUCKDB_REQUIRED_VERSION)
63
60
 
64
61
  # check duckdb >= 0.10.0
65
62
  have_func('duckdb_appender_column_count', 'duckdb.h')
@@ -67,8 +64,8 @@ have_func('duckdb_appender_column_count', 'duckdb.h')
67
64
  # check duckdb >= 1.0.0
68
65
  have_func('duckdb_fetch_chunk', 'duckdb.h')
69
66
 
70
- # duckdb_parameter_name in duckdb <= 0.9.1 is not found on Windows.
71
- have_func('duckdb_parameter_name', 'duckdb.h')
67
+ # check duckdb >= 1.1.0
68
+ have_func('duckdb_result_error_type', 'duckdb.h')
72
69
 
73
70
  $CFLAGS << ' -DDUCKDB_API_NO_DEPRECATED' if ENV['DUCKDB_API_NO_DEPRECATED']
74
71
 
@@ -10,6 +10,7 @@ static VALUE duckdb_pending_result_execute_task(VALUE self);
10
10
  static VALUE duckdb_pending_result_execute_pending(VALUE self);
11
11
  static VALUE duckdb_pending_result_execution_finished_p(VALUE self);
12
12
  static VALUE duckdb_pending_result__state(VALUE self);
13
+ static VALUE duckdb_pending_result__execute_check_state(VALUE self);
13
14
 
14
15
  static const rb_data_type_t pending_result_data_type = {
15
16
  "DuckDB/PendingResult",
@@ -128,6 +129,11 @@ static VALUE duckdb_pending_result__state(VALUE self) {
128
129
  return INT2FIX(ctx->state);
129
130
  }
130
131
 
132
+ static VALUE duckdb_pending_result__execute_check_state(VALUE self) {
133
+ rubyDuckDBPendingResult *ctx = get_struct_pending_result(self);
134
+ return INT2FIX(duckdb_pending_execute_check_state(ctx->pending_result));
135
+ }
136
+
131
137
  rubyDuckDBPendingResult *get_struct_pending_result(VALUE obj) {
132
138
  rubyDuckDBPendingResult *ctx;
133
139
  TypedData_Get_Struct(obj, rubyDuckDBPendingResult, &pending_result_data_type, ctx);
@@ -143,4 +149,5 @@ void rbduckdb_init_duckdb_pending_result(void) {
143
149
  rb_define_method(cDuckDBPendingResult, "execute_pending", duckdb_pending_result_execute_pending, 0);
144
150
  rb_define_method(cDuckDBPendingResult, "execution_finished?", duckdb_pending_result_execution_finished_p, 0);
145
151
  rb_define_private_method(cDuckDBPendingResult, "_state", duckdb_pending_result__state, 0);
152
+ rb_define_private_method(cDuckDBPendingResult, "_execute_check_state", duckdb_pending_result__execute_check_state, 0);
146
153
  }
@@ -11,10 +11,8 @@ static VALUE duckdb_prepared_statement_execute(VALUE self);
11
11
  static idx_t check_index(VALUE vidx);
12
12
 
13
13
  static VALUE duckdb_prepared_statement_bind_parameter_index(VALUE self, VALUE name);
14
- #ifdef HAVE_DUCKDB_PARAMETER_NAME
15
14
  static VALUE duckdb_prepared_statement_parameter_name(VALUE self, VALUE vidx);
16
- #endif
17
-
15
+ static VALUE duckdb_prepared_statement_clear_bindings(VALUE self);
18
16
  static VALUE duckdb_prepared_statement_bind_bool(VALUE self, VALUE vidx, VALUE val);
19
17
  static VALUE duckdb_prepared_statement_bind_int8(VALUE self, VALUE vidx, VALUE val);
20
18
  static VALUE duckdb_prepared_statement_bind_int16(VALUE self, VALUE vidx, VALUE val);
@@ -25,6 +23,8 @@ static VALUE duckdb_prepared_statement_bind_double(VALUE self, VALUE vidx, VALUE
25
23
  static VALUE duckdb_prepared_statement_bind_varchar(VALUE self, VALUE vidx, VALUE str);
26
24
  static VALUE duckdb_prepared_statement_bind_blob(VALUE self, VALUE vidx, VALUE blob);
27
25
  static VALUE duckdb_prepared_statement_bind_null(VALUE self, VALUE vidx);
26
+ static VALUE duckdb_prepared_statement__statement_type(VALUE self);
27
+ static VALUE duckdb_prepared_statement__param_type(VALUE self, VALUE vidx);
28
28
  static VALUE duckdb_prepared_statement__bind_date(VALUE self, VALUE vidx, VALUE year, VALUE month, VALUE day);
29
29
  static VALUE duckdb_prepared_statement__bind_time(VALUE self, VALUE vidx, VALUE hour, VALUE min, VALUE sec, VALUE micros);
30
30
  static VALUE duckdb_prepared_statement__bind_timestamp(VALUE self, VALUE vidx, VALUE year, VALUE month, VALUE day, VALUE hour, VALUE min, VALUE sec, VALUE micros);
@@ -125,7 +125,6 @@ static VALUE duckdb_prepared_statement_bind_parameter_index(VALUE self, VALUE na
125
125
  return ULL2NUM(idx);
126
126
  }
127
127
 
128
- #ifdef HAVE_DUCKDB_PARAMETER_NAME
129
128
  static VALUE duckdb_prepared_statement_parameter_name(VALUE self, VALUE vidx) {
130
129
  rubyDuckDBPreparedStatement *ctx;
131
130
  VALUE vname;
@@ -142,7 +141,23 @@ static VALUE duckdb_prepared_statement_parameter_name(VALUE self, VALUE vidx) {
142
141
  duckdb_free((void *)name);
143
142
  return vname;
144
143
  }
145
- #endif /* HAVE_DUCKDB_PARAMETER_NAME */
144
+
145
+ /*
146
+ * call-seq:
147
+ * prepared_statement.clear_bindings -> DuckDB::PreparedStatement
148
+ *
149
+ * clear all bindings of prepared statement.
150
+ */
151
+ static VALUE duckdb_prepared_statement_clear_bindings(VALUE self) {
152
+ rubyDuckDBPreparedStatement *ctx;
153
+ TypedData_Get_Struct(self, rubyDuckDBPreparedStatement, &prepared_statement_data_type, ctx);
154
+
155
+ if (duckdb_clear_bindings(ctx->prepared_statement) == DuckDBError) {
156
+ const char *error = duckdb_prepare_error(ctx->prepared_statement);
157
+ rb_raise(eDuckDBError, "fail to clear bindings. %s", error);
158
+ }
159
+ return self;
160
+ }
146
161
 
147
162
  static VALUE duckdb_prepared_statement_bind_bool(VALUE self, VALUE vidx, VALUE val) {
148
163
  rubyDuckDBPreparedStatement *ctx;
@@ -273,6 +288,18 @@ static VALUE duckdb_prepared_statement_bind_null(VALUE self, VALUE vidx) {
273
288
  return self;
274
289
  }
275
290
 
291
+ static VALUE duckdb_prepared_statement__statement_type(VALUE self) {
292
+ rubyDuckDBPreparedStatement *ctx;
293
+ TypedData_Get_Struct(self, rubyDuckDBPreparedStatement, &prepared_statement_data_type, ctx);
294
+ return INT2FIX(duckdb_prepared_statement_type(ctx->prepared_statement));
295
+ }
296
+
297
+ static VALUE duckdb_prepared_statement__param_type(VALUE self, VALUE vidx) {
298
+ rubyDuckDBPreparedStatement *ctx;
299
+ TypedData_Get_Struct(self, rubyDuckDBPreparedStatement, &prepared_statement_data_type, ctx);
300
+ return INT2FIX(duckdb_param_type(ctx->prepared_statement, NUM2ULL(vidx)));
301
+ }
302
+
276
303
  static VALUE duckdb_prepared_statement__bind_date(VALUE self, VALUE vidx, VALUE year, VALUE month, VALUE day) {
277
304
  rubyDuckDBPreparedStatement *ctx;
278
305
  duckdb_date dt;
@@ -366,11 +393,8 @@ void rbduckdb_init_duckdb_prepared_statement(void) {
366
393
  rb_define_method(cDuckDBPreparedStatement, "execute", duckdb_prepared_statement_execute, 0);
367
394
  rb_define_method(cDuckDBPreparedStatement, "nparams", duckdb_prepared_statement_nparams, 0);
368
395
  rb_define_method(cDuckDBPreparedStatement, "bind_parameter_index", duckdb_prepared_statement_bind_parameter_index, 1);
369
-
370
- #ifdef HAVE_DUCKDB_PARAMETER_NAME
371
396
  rb_define_method(cDuckDBPreparedStatement, "parameter_name", duckdb_prepared_statement_parameter_name, 1);
372
- #endif
373
-
397
+ rb_define_method(cDuckDBPreparedStatement, "clear_bindings", duckdb_prepared_statement_clear_bindings, 0);
374
398
  rb_define_method(cDuckDBPreparedStatement, "bind_bool", duckdb_prepared_statement_bind_bool, 2);
375
399
  rb_define_method(cDuckDBPreparedStatement, "bind_int8", duckdb_prepared_statement_bind_int8, 2);
376
400
  rb_define_method(cDuckDBPreparedStatement, "bind_int16", duckdb_prepared_statement_bind_int16, 2);
@@ -381,6 +405,8 @@ void rbduckdb_init_duckdb_prepared_statement(void) {
381
405
  rb_define_method(cDuckDBPreparedStatement, "bind_varchar", duckdb_prepared_statement_bind_varchar, 2);
382
406
  rb_define_method(cDuckDBPreparedStatement, "bind_blob", duckdb_prepared_statement_bind_blob, 2);
383
407
  rb_define_method(cDuckDBPreparedStatement, "bind_null", duckdb_prepared_statement_bind_null, 1);
408
+ rb_define_private_method(cDuckDBPreparedStatement, "_statement_type", duckdb_prepared_statement__statement_type, 0);
409
+ rb_define_private_method(cDuckDBPreparedStatement, "_param_type", duckdb_prepared_statement__param_type, 1);
384
410
  rb_define_private_method(cDuckDBPreparedStatement, "_bind_date", duckdb_prepared_statement__bind_date, 4);
385
411
  rb_define_private_method(cDuckDBPreparedStatement, "_bind_time", duckdb_prepared_statement__bind_time, 5);
386
412
  rb_define_private_method(cDuckDBPreparedStatement, "_bind_timestamp", duckdb_prepared_statement__bind_timestamp, 8);