sqlite3 1.3.11-x64-mingw32 → 1.5.0.rc1-x64-mingw32

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 (54) hide show
  1. checksums.yaml +5 -5
  2. data/.gemtest +0 -0
  3. data/{API_CHANGES.rdoc → API_CHANGES.md} +3 -4
  4. data/CHANGELOG.md +419 -0
  5. data/CONTRIBUTING.md +24 -0
  6. data/Gemfile +2 -15
  7. data/LICENSE-DEPENDENCIES +20 -0
  8. data/README.md +233 -0
  9. data/ext/sqlite3/aggregator.c +273 -0
  10. data/ext/sqlite3/aggregator.h +12 -0
  11. data/ext/sqlite3/database.c +210 -182
  12. data/ext/sqlite3/database.h +2 -0
  13. data/ext/sqlite3/exception.c +6 -2
  14. data/ext/sqlite3/extconf.rb +148 -39
  15. data/ext/sqlite3/sqlite3.c +67 -1
  16. data/ext/sqlite3/sqlite3_ruby.h +0 -7
  17. data/ext/sqlite3/statement.c +15 -20
  18. data/faq/faq.md +431 -0
  19. data/faq/faq.yml +1 -1
  20. data/lib/sqlite3/2.6/sqlite3_native.so +0 -0
  21. data/lib/sqlite3/2.7/sqlite3_native.so +0 -0
  22. data/lib/sqlite3/3.0/sqlite3_native.so +0 -0
  23. data/lib/sqlite3/constants.rb +2 -1
  24. data/lib/sqlite3/database.rb +209 -58
  25. data/lib/sqlite3/errors.rb +1 -10
  26. data/lib/sqlite3/pragmas.rb +372 -57
  27. data/lib/sqlite3/resultset.rb +2 -10
  28. data/lib/sqlite3/statement.rb +2 -1
  29. data/lib/sqlite3/translator.rb +1 -1
  30. data/lib/sqlite3/version.rb +4 -4
  31. data/lib/sqlite3.rb +5 -0
  32. data/test/helper.rb +9 -0
  33. data/test/test_database.rb +180 -9
  34. data/test/test_database_flags.rb +95 -0
  35. data/test/test_database_readonly.rb +9 -2
  36. data/test/test_database_readwrite.rb +41 -0
  37. data/test/test_integration.rb +12 -77
  38. data/test/test_integration_aggregate.rb +336 -0
  39. data/test/test_integration_resultset.rb +0 -17
  40. data/test/test_sqlite3.rb +16 -0
  41. data/test/test_statement.rb +12 -9
  42. metadata +55 -84
  43. data/CHANGELOG.rdoc +0 -287
  44. data/Manifest.txt +0 -52
  45. data/README.rdoc +0 -101
  46. data/Rakefile +0 -10
  47. data/lib/sqlite3/2.0/sqlite3_native.so +0 -0
  48. data/lib/sqlite3/2.1/sqlite3_native.so +0 -0
  49. data/lib/sqlite3/2.2/sqlite3_native.so +0 -0
  50. data/setup.rb +0 -1333
  51. data/tasks/faq.rake +0 -9
  52. data/tasks/gem.rake +0 -38
  53. data/tasks/native.rake +0 -52
  54. data/tasks/vendor_sqlite3.rake +0 -97
@@ -1,50 +1,159 @@
1
- ENV['RC_ARCHS'] = '' if RUBY_PLATFORM =~ /darwin/
1
+ require "mkmf"
2
+ require "mini_portile2"
2
3
 
3
- require 'mkmf'
4
+ module Sqlite3
5
+ module ExtConf
6
+ ENV_ALLOWLIST = ["CC", "CFLAGS", "LDFLAGS", "LIBS", "CPPFLAGS", "LT_SYS_LIBRARY_PATH", "CPP"]
4
7
 
5
- # :stopdoc:
8
+ class << self
9
+ def configure
10
+ configure_cross_compiler
6
11
 
7
- RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC']
12
+ if system_libraries?
13
+ message "Building sqlite3-ruby using system #{libname}.\n"
14
+ configure_system_libraries
15
+ else
16
+ message "Building sqlite3-ruby using packaged sqlite3.\n"
17
+ configure_packaged_libraries
18
+ end
8
19
 
9
- # --with-sqlite3-{dir,include,lib}
10
- dir_config("sqlite3")
20
+ configure_extension
11
21
 
12
- if RbConfig::CONFIG["host_os"] =~ /mswin/
13
- $CFLAGS << ' -W3'
14
- end
22
+ create_makefile('sqlite3/sqlite3_native')
23
+ end
15
24
 
16
- def asplode missing
17
- if RUBY_PLATFORM =~ /mingw|mswin/
18
- abort "#{missing} is missing. Install SQLite3 from " +
19
- "http://www.sqlite.org/ first."
20
- else
21
- abort <<-error
22
- #{missing} is missing. Try 'port install sqlite3 +universal',
23
- 'yum install sqlite-devel' or 'apt-get install libsqlite3-dev'
24
- and check your shared library search path (the
25
- location where your sqlite3 shared library is located).
26
- error
27
- end
28
- end
25
+ def configure_cross_compiler
26
+ RbConfig::CONFIG["CC"] = RbConfig::MAKEFILE_CONFIG["CC"] = ENV["CC"] if ENV["CC"]
27
+ ENV["CC"] = RbConfig::CONFIG["CC"]
28
+ end
29
+
30
+ def system_libraries?
31
+ sqlcipher? || enable_config("system-libraries")
32
+ end
33
+
34
+ def libname
35
+ sqlcipher? ? "sqlcipher" : "sqlite3"
36
+ end
37
+
38
+ def sqlcipher?
39
+ with_config("sqlcipher")
40
+ end
41
+
42
+ def configure_system_libraries
43
+ pkg_config(libname)
44
+ append_cflags("-DUSING_SQLCIPHER") if sqlcipher?
45
+ end
46
+
47
+ def configure_packaged_libraries
48
+ minimal_recipe.tap do |recipe|
49
+ recipe.configure_options += ["--enable-shared=no", "--enable-static=yes"]
50
+ ENV.to_h.tap do |env|
51
+ env["CFLAGS"] = [env["CFLAGS"], "-fPIC"].join(" ") # needed for linking the static library into a shared library
52
+ recipe.configure_options += env.select { |k,v| ENV_ALLOWLIST.include?(k) }
53
+ .map { |key, value| "#{key}=#{value.strip}" }
54
+ end
55
+
56
+ unless File.exist?(File.join(recipe.target, recipe.host, recipe.name, recipe.version))
57
+ recipe.cook
58
+ end
59
+ recipe.activate
60
+
61
+ ENV["PKG_CONFIG_ALLOW_SYSTEM_CFLAGS"] = "t" # on macos, pkg-config will not return --cflags without this
62
+ pcfile = File.join(recipe.path, "lib", "pkgconfig", "sqlite3.pc")
63
+ if pkg_config(pcfile)
64
+ # see https://bugs.ruby-lang.org/issues/18490
65
+ libs = xpopen(["pkg-config", "--libs", "--static", pcfile], err: [:child, :out], &:read)
66
+ libs.split.each { |lib| append_ldflags(lib) } if $?.success?
67
+ else
68
+ abort("\nCould not configure the build properly. Please install either the `pkg-config` utility or the `pkg-config` rubygem.\n\n")
69
+ end
70
+ end
71
+ end
72
+
73
+ def configure_extension
74
+ if Gem::Requirement.new("< 2.7").satisfied_by?(Gem::Version.new(RUBY_VERSION))
75
+ append_cflags("-DTAINTING_SUPPORT")
76
+ end
77
+
78
+ abort_could_not_find("sqlite3.h") unless find_header("sqlite3.h")
79
+ abort_could_not_find(libname) unless find_library(libname, "sqlite3_libversion_number", "sqlite3.h")
29
80
 
30
- asplode('sqlite3.h') unless find_header 'sqlite3.h'
31
- asplode('sqlite3') unless find_library 'sqlite3', 'sqlite3_libversion_number'
81
+ # Functions defined in 1.9 but not 1.8
82
+ have_func('rb_proc_arity')
32
83
 
33
- # Functions defined in 1.9 but not 1.8
34
- have_func('rb_proc_arity')
84
+ # Functions defined in 2.1 but not 2.0
85
+ have_func('rb_integer_pack')
35
86
 
36
- # Functions defined in 2.1 but not 2.0
37
- have_func('rb_integer_pack')
87
+ # These functions may not be defined
88
+ have_func('sqlite3_initialize')
89
+ have_func('sqlite3_backup_init')
90
+ have_func('sqlite3_column_database_name')
91
+ have_func('sqlite3_enable_load_extension')
92
+ have_func('sqlite3_load_extension')
38
93
 
39
- # These functions may not be defined
40
- have_func('sqlite3_initialize')
41
- have_func('sqlite3_backup_init')
42
- have_func('sqlite3_column_database_name')
43
- have_func('sqlite3_enable_load_extension')
44
- have_func('sqlite3_load_extension')
45
- have_func('sqlite3_open_v2')
46
- have_func('sqlite3_prepare_v2')
47
- have_type('sqlite3_int64', 'sqlite3.h')
48
- have_type('sqlite3_uint64', 'sqlite3.h')
94
+ unless have_func('sqlite3_open_v2') # https://www.sqlite.org/releaselog/3_5_0.html
95
+ abort("\nPlease use a version of SQLite3 >= 3.5.0\n\n")
96
+ end
97
+
98
+ have_func('sqlite3_prepare_v2')
99
+ have_type('sqlite3_int64', 'sqlite3.h')
100
+ have_type('sqlite3_uint64', 'sqlite3.h')
101
+ end
102
+
103
+ def minimal_recipe
104
+ MiniPortile.new(libname, sqlite3_config[:version]).tap do |recipe|
105
+ recipe.files = sqlite3_config[:files]
106
+ recipe.target = File.join(package_root_dir, "ports")
107
+ recipe.patch_files = Dir[File.join(package_root_dir, "patches", "*.patch")].sort
108
+ end
109
+ end
110
+
111
+ def package_root_dir
112
+ File.expand_path(File.join(File.dirname(__FILE__), "..", ".."))
113
+ end
114
+
115
+ def sqlite3_config
116
+ mini_portile_config[:sqlite3]
117
+ end
118
+
119
+ def mini_portile_config
120
+ {
121
+ sqlite3: {
122
+ # checksum verified by first checking the published sha3(256) checksum:
123
+ #
124
+ # $ sha3sum -a 256 sqlite-autoconf-3390000.tar.gz
125
+ # b8e5b3265992350d40c4ad31efc2e6dec6256813f1d5acc8f0ea805e9f33ca2a sqlite-autoconf-3390000.tar.gz
126
+ #
127
+ # $ sha256sum sqlite-autoconf-3390000.tar.gz
128
+ # e90bcaef6dd5813fcdee4e867f6b65f3c9bfd0aec0f1017f9f3bbce1e4ed09e2 sqlite-autoconf-3390000.tar.gz
129
+ #
130
+ version: "3.39.0",
131
+ files: [{
132
+ url: "https://www.sqlite.org/2022/sqlite-autoconf-3390000.tar.gz",
133
+ sha256: "e90bcaef6dd5813fcdee4e867f6b65f3c9bfd0aec0f1017f9f3bbce1e4ed09e2",
134
+ }],
135
+ }
136
+ }
137
+ end
138
+
139
+ def abort_could_not_find(missing)
140
+ abort("\nCould not find #{missing}.\nPlease visit https://github.com/sparklemotion/sqlite3-ruby for installation instructions.\n\n")
141
+ end
142
+
143
+ def cross_build?
144
+ enable_config("cross-build")
145
+ end
146
+
147
+ def download
148
+ minimal_recipe.download
149
+ end
150
+ end
151
+ end
152
+ end
153
+
154
+ if arg_config("--download-dependencies")
155
+ Sqlite3::ExtConf.download
156
+ exit!(0)
157
+ end
49
158
 
50
- create_makefile('sqlite3/sqlite3_native')
159
+ Sqlite3::ExtConf.configure
@@ -65,6 +65,68 @@ static VALUE libversion(VALUE UNUSED(klass))
65
65
  return INT2NUM(sqlite3_libversion_number());
66
66
  }
67
67
 
68
+ static VALUE using_sqlcipher(VALUE UNUSED(klass))
69
+ {
70
+ #ifdef USING_SQLCIPHER
71
+ return Qtrue;
72
+ #else
73
+ return Qfalse;
74
+ #endif
75
+ }
76
+
77
+ /* Returns the compile time setting of the SQLITE_THREADSAFE flag.
78
+ * See: https://www.sqlite.org/c3ref/threadsafe.html
79
+ */
80
+ static VALUE threadsafe_p(VALUE UNUSED(klass))
81
+ {
82
+ return INT2NUM(sqlite3_threadsafe());
83
+ }
84
+
85
+ void init_sqlite3_constants()
86
+ {
87
+ VALUE mSqlite3Constants;
88
+ VALUE mSqlite3Open;
89
+
90
+ mSqlite3Constants = rb_define_module_under(mSqlite3, "Constants");
91
+
92
+ /* sqlite3_open_v2 flags for Database::new */
93
+ mSqlite3Open = rb_define_module_under(mSqlite3Constants, "Open");
94
+
95
+ /* symbols = IO.readlines('sqlite3.h').map { |n| /\A#define\s+(SQLITE_OPEN_\w+)\s/ =~ n && $1 }.compact
96
+ * pad = symbols.map(&:length).max - 9
97
+ * symbols.each { |s| printf %Q{ rb_define_const(mSqlite3Open, %-#{pad}s INT2FIX(#{s}));\n}, '"' + s[12..-1] + '",' }
98
+ */
99
+ rb_define_const(mSqlite3Open, "READONLY", INT2FIX(SQLITE_OPEN_READONLY));
100
+ rb_define_const(mSqlite3Open, "READWRITE", INT2FIX(SQLITE_OPEN_READWRITE));
101
+ rb_define_const(mSqlite3Open, "CREATE", INT2FIX(SQLITE_OPEN_CREATE));
102
+ rb_define_const(mSqlite3Open, "DELETEONCLOSE", INT2FIX(SQLITE_OPEN_DELETEONCLOSE));
103
+ rb_define_const(mSqlite3Open, "EXCLUSIVE", INT2FIX(SQLITE_OPEN_EXCLUSIVE));
104
+ rb_define_const(mSqlite3Open, "MAIN_DB", INT2FIX(SQLITE_OPEN_MAIN_DB));
105
+ rb_define_const(mSqlite3Open, "TEMP_DB", INT2FIX(SQLITE_OPEN_TEMP_DB));
106
+ rb_define_const(mSqlite3Open, "TRANSIENT_DB", INT2FIX(SQLITE_OPEN_TRANSIENT_DB));
107
+ rb_define_const(mSqlite3Open, "MAIN_JOURNAL", INT2FIX(SQLITE_OPEN_MAIN_JOURNAL));
108
+ rb_define_const(mSqlite3Open, "TEMP_JOURNAL", INT2FIX(SQLITE_OPEN_TEMP_JOURNAL));
109
+ rb_define_const(mSqlite3Open, "SUBJOURNAL", INT2FIX(SQLITE_OPEN_SUBJOURNAL));
110
+ rb_define_const(mSqlite3Open, "MASTER_JOURNAL", INT2FIX(SQLITE_OPEN_MASTER_JOURNAL));
111
+ rb_define_const(mSqlite3Open, "NOMUTEX", INT2FIX(SQLITE_OPEN_NOMUTEX));
112
+ rb_define_const(mSqlite3Open, "FULLMUTEX", INT2FIX(SQLITE_OPEN_FULLMUTEX));
113
+ #ifdef SQLITE_OPEN_AUTOPROXY
114
+ /* SQLITE_VERSION_NUMBER>=3007002 */
115
+ rb_define_const(mSqlite3Open, "AUTOPROXY", INT2FIX(SQLITE_OPEN_AUTOPROXY));
116
+ rb_define_const(mSqlite3Open, "SHAREDCACHE", INT2FIX(SQLITE_OPEN_SHAREDCACHE));
117
+ rb_define_const(mSqlite3Open, "PRIVATECACHE", INT2FIX(SQLITE_OPEN_PRIVATECACHE));
118
+ rb_define_const(mSqlite3Open, "WAL", INT2FIX(SQLITE_OPEN_WAL));
119
+ #endif
120
+ #ifdef SQLITE_OPEN_URI
121
+ /* SQLITE_VERSION_NUMBER>=3007007 */
122
+ rb_define_const(mSqlite3Open, "URI", INT2FIX(SQLITE_OPEN_URI));
123
+ #endif
124
+ #ifdef SQLITE_OPEN_MEMORY
125
+ /* SQLITE_VERSION_NUMBER>=3007013 */
126
+ rb_define_const(mSqlite3Open, "MEMORY", INT2FIX(SQLITE_OPEN_MEMORY));
127
+ #endif
128
+ }
129
+
68
130
  void Init_sqlite3_native()
69
131
  {
70
132
  /*
@@ -85,13 +147,17 @@ void Init_sqlite3_native()
85
147
  sqlite3_initialize();
86
148
  #endif
87
149
 
150
+ init_sqlite3_constants();
88
151
  init_sqlite3_database();
89
152
  init_sqlite3_statement();
90
153
  #ifdef HAVE_SQLITE3_BACKUP_INIT
91
154
  init_sqlite3_backup();
92
155
  #endif
93
-
156
+ rb_define_singleton_method(mSqlite3, "sqlcipher?", using_sqlcipher, 0);
94
157
  rb_define_singleton_method(mSqlite3, "libversion", libversion, 0);
158
+ rb_define_singleton_method(mSqlite3, "threadsafe", threadsafe_p, 0);
95
159
  rb_define_const(mSqlite3, "SQLITE_VERSION", rb_str_new2(SQLITE_VERSION));
96
160
  rb_define_const(mSqlite3, "SQLITE_VERSION_NUMBER", INT2FIX(SQLITE_VERSION_NUMBER));
161
+ rb_define_const(mSqlite3, "SQLITE_LOADED_VERSION", rb_str_new2(sqlite3_libversion()));
162
+
97
163
  }
@@ -12,7 +12,6 @@
12
12
  # define UNUSED(x) x
13
13
  #endif
14
14
 
15
- #ifdef HAVE_RUBY_ENCODING_H
16
15
  #include <ruby/encoding.h>
17
16
 
18
17
  #define USASCII_P(_obj) (rb_enc_get_index(_obj) == rb_usascii_encindex())
@@ -22,12 +21,6 @@
22
21
  #define SQLITE3_UTF8_STR_NEW2(_obj) \
23
22
  (rb_enc_associate_index(rb_str_new2(_obj), rb_utf8_encindex()))
24
23
 
25
- #else
26
-
27
- #define SQLITE3_UTF8_STR_NEW2(_obj) (rb_str_new2(_obj))
28
-
29
- #endif
30
-
31
24
 
32
25
  #include <sqlite3.h>
33
26
 
@@ -43,11 +43,9 @@ static VALUE initialize(VALUE self, VALUE db, VALUE sql)
43
43
  if(!db_ctx->db)
44
44
  rb_raise(rb_eArgError, "prepare called on a closed database");
45
45
 
46
- #ifdef HAVE_RUBY_ENCODING_H
47
46
  if(!UTF8_P(sql)) {
48
47
  sql = rb_str_export_to_enc(sql, rb_utf8_encoding());
49
48
  }
50
- #endif
51
49
 
52
50
  #ifdef HAVE_SQLITE3_PREPARE_V2
53
51
  status = sqlite3_prepare_v2(
@@ -110,9 +108,7 @@ static VALUE step(VALUE self)
110
108
  sqlite3_stmt *stmt;
111
109
  int value, length;
112
110
  VALUE list;
113
- #ifdef HAVE_RUBY_ENCODING_H
114
111
  rb_encoding * internal_encoding;
115
- #endif
116
112
 
117
113
  Data_Get_Struct(self, sqlite3StmtRuby, ctx);
118
114
 
@@ -120,17 +116,24 @@ static VALUE step(VALUE self)
120
116
 
121
117
  if(ctx->done_p) return Qnil;
122
118
 
123
- #ifdef HAVE_RUBY_ENCODING_H
124
119
  {
125
120
  VALUE db = rb_iv_get(self, "@connection");
126
121
  rb_funcall(db, rb_intern("encoding"), 0);
127
122
  internal_encoding = rb_default_internal_encoding();
128
123
  }
129
- #endif
130
124
 
131
125
  stmt = ctx->st;
132
126
 
133
127
  value = sqlite3_step(stmt);
128
+ if (rb_errinfo() != Qnil) {
129
+ /* some user defined function was invoked as a callback during step and
130
+ * it raised an exception that has been suppressed until step returns.
131
+ * Now re-raise it. */
132
+ VALUE exception = rb_errinfo();
133
+ rb_set_errinfo(Qnil);
134
+ rb_exc_raise(exception);
135
+ }
136
+
134
137
  length = sqlite3_column_count(stmt);
135
138
  list = rb_ary_new2((long)length);
136
139
 
@@ -148,21 +151,19 @@ static VALUE step(VALUE self)
148
151
  break;
149
152
  case SQLITE_TEXT:
150
153
  {
151
- VALUE str = rb_tainted_str_new(
154
+ VALUE str = rb_str_new(
152
155
  (const char *)sqlite3_column_text(stmt, i),
153
156
  (long)sqlite3_column_bytes(stmt, i)
154
157
  );
155
- #ifdef HAVE_RUBY_ENCODING_H
156
158
  rb_enc_associate_index(str, rb_utf8_encindex());
157
159
  if(internal_encoding)
158
160
  str = rb_str_export_to_enc(str, internal_encoding);
159
- #endif
160
161
  rb_ary_push(list, str);
161
162
  }
162
163
  break;
163
164
  case SQLITE_BLOB:
164
165
  {
165
- VALUE str = rb_tainted_str_new(
166
+ VALUE str = rb_str_new(
166
167
  (const char *)sqlite3_column_blob(stmt, i),
167
168
  (long)sqlite3_column_bytes(stmt, i)
168
169
  );
@@ -225,9 +226,7 @@ static VALUE bind_param(VALUE self, VALUE key, VALUE value)
225
226
  switch(TYPE(value)) {
226
227
  case T_STRING:
227
228
  if(CLASS_OF(value) == cSqlite3Blob
228
- #ifdef HAVE_RUBY_ENCODING_H
229
229
  || rb_enc_get_index(value) == rb_ascii8bit_encindex()
230
- #endif
231
230
  ) {
232
231
  status = sqlite3_bind_blob(
233
232
  ctx->st,
@@ -239,7 +238,6 @@ static VALUE bind_param(VALUE self, VALUE key, VALUE value)
239
238
  } else {
240
239
 
241
240
 
242
- #ifdef HAVE_RUBY_ENCODING_H
243
241
  if (UTF16_LE_P(value) || UTF16_BE_P(value)) {
244
242
  status = sqlite3_bind_text16(
245
243
  ctx->st,
@@ -252,7 +250,6 @@ static VALUE bind_param(VALUE self, VALUE key, VALUE value)
252
250
  if (!UTF8_P(value) || !USASCII_P(value)) {
253
251
  value = rb_str_encode(value, rb_enc_from_encoding(rb_utf8_encoding()), 0, Qnil);
254
252
  }
255
- #endif
256
253
  status = sqlite3_bind_text(
257
254
  ctx->st,
258
255
  index,
@@ -260,9 +257,7 @@ static VALUE bind_param(VALUE self, VALUE key, VALUE value)
260
257
  (int)RSTRING_LEN(value),
261
258
  SQLITE_TRANSIENT
262
259
  );
263
- #ifdef HAVE_RUBY_ENCODING_H
264
260
  }
265
- #endif
266
261
  }
267
262
  break;
268
263
  case T_BIGNUM: {
@@ -295,7 +290,7 @@ static VALUE bind_param(VALUE self, VALUE key, VALUE value)
295
290
  /* call-seq: stmt.reset!
296
291
  *
297
292
  * Resets the statement. This is typically done internally, though it might
298
- * occassionally be necessary to manually reset the statement.
293
+ * occasionally be necessary to manually reset the statement.
299
294
  */
300
295
  static VALUE reset_bang(VALUE self)
301
296
  {
@@ -314,9 +309,9 @@ static VALUE reset_bang(VALUE self)
314
309
  /* call-seq: stmt.clear_bindings!
315
310
  *
316
311
  * Resets the statement. This is typically done internally, though it might
317
- * occassionally be necessary to manually reset the statement.
312
+ * occasionally be necessary to manually reset the statement.
318
313
  */
319
- static VALUE clear_bindings(VALUE self)
314
+ static VALUE clear_bindings_bang(VALUE self)
320
315
  {
321
316
  sqlite3StmtRubyPtr ctx;
322
317
 
@@ -433,7 +428,7 @@ void init_sqlite3_statement()
433
428
  rb_define_method(cSqlite3Statement, "closed?", closed_p, 0);
434
429
  rb_define_method(cSqlite3Statement, "bind_param", bind_param, 2);
435
430
  rb_define_method(cSqlite3Statement, "reset!", reset_bang, 0);
436
- rb_define_method(cSqlite3Statement, "clear_bindings!", clear_bindings, 0);
431
+ rb_define_method(cSqlite3Statement, "clear_bindings!", clear_bindings_bang, 0);
437
432
  rb_define_method(cSqlite3Statement, "step", step, 0);
438
433
  rb_define_method(cSqlite3Statement, "done?", done_p, 0);
439
434
  rb_define_method(cSqlite3Statement, "column_count", column_count, 0);