sqlite3 1.3.4-x86-mswin32-60 → 1.3.5-x86-mswin32-60

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.
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,21 @@
1
+ === 1.3.5 / 2011-12-03 - ZOMG Holidays are here Edition!
2
+
3
+ * Enhancements
4
+ * Windows: build against SQLite 3.7.9
5
+ * Static: enable SQLITE_ENABLE_COLUMN_METADATA
6
+ * Added Statement#clear_bindings! to set bindings back to nil
7
+
8
+ * Bugfixes
9
+ * Fixed a segv on Database.new. Fixes #34 (thanks nobu!)
10
+ * Database error is not reset, so don't check it in Statement#reset!
11
+ * Remove conditional around Bignum statement bindings.
12
+ Fixes #52. Fixes #56. Thank you Evgeny Myasishchev.
13
+
14
+ * Internal
15
+ * Use proper endianness when testing database connection with UTF-16.
16
+ Fixes #40. Fixes #51
17
+ * Use -fPIC for static compilation when host is x86_64.
18
+
1
19
  === 1.3.4 / 2011-07-25
2
20
 
3
21
  * Enhancements:
data/README.rdoc CHANGED
@@ -9,7 +9,7 @@ This module allows Ruby programs to interface with the SQLite3
9
9
  database engine (http://www.sqlite.org). You must have the
10
10
  SQLite engine installed in order to build this module.
11
11
 
12
- Note that this module is NOT compatible with SQLite 2.x.
12
+ Note that this module is only compatible with SQLite 3.6.16 or newer.
13
13
 
14
14
  == SYNOPSIS
15
15
 
@@ -42,7 +42,7 @@ Note that this module is NOT compatible with SQLite 2.x.
42
42
 
43
43
  == Compilation and Installation
44
44
 
45
- Install SQLite3, enabling option SQLITE_ENABLE_COLUMN_METADATA (see
45
+ Install SQLite3, enabling the option SQLITE_ENABLE_COLUMN_METADATA (see
46
46
  www.sqlite.org/compile.html for details).
47
47
 
48
48
  Then do the following:
@@ -50,7 +50,14 @@ static VALUE initialize(int argc, VALUE *argv, VALUE self)
50
50
  Data_Get_Struct(self, sqlite3Ruby, ctx);
51
51
 
52
52
  rb_scan_args(argc, argv, "12", &file, &opts, &zvfs);
53
+ #if defined StringValueCStr
54
+ StringValuePtr(file);
55
+ rb_check_safe_obj(file);
56
+ #else
57
+ Check_SafeStr(file);
58
+ #endif
53
59
  if(NIL_P(opts)) opts = rb_hash_new();
60
+ else Check_Type(opts, T_HASH);
54
61
 
55
62
  #ifdef HAVE_RUBY_ENCODING_H
56
63
  if(UTF16_LE_P(file)) {
@@ -716,6 +723,20 @@ static VALUE db_encoding(VALUE self)
716
723
  return rb_iv_get(self, "@encoding");
717
724
  }
718
725
 
726
+ /* call-seq: db.transaction_active?
727
+ *
728
+ * Returns +true+ if there is a transaction active, and +false+ otherwise.
729
+ *
730
+ */
731
+ static VALUE transaction_active_p(VALUE self)
732
+ {
733
+ sqlite3RubyPtr ctx;
734
+ Data_Get_Struct(self, sqlite3Ruby, ctx);
735
+ REQUIRE_OPEN_DB(ctx);
736
+
737
+ return sqlite3_get_autocommit(ctx->db) ? Qfalse : Qtrue;
738
+ }
739
+
719
740
  void init_sqlite3_database()
720
741
  {
721
742
  ID id_utf16, id_results_as_hash, id_type_translation;
@@ -742,6 +763,7 @@ void init_sqlite3_database()
742
763
  rb_define_method(cSqlite3Database, "authorizer=", set_authorizer, 1);
743
764
  rb_define_method(cSqlite3Database, "busy_handler", busy_handler, -1);
744
765
  rb_define_method(cSqlite3Database, "busy_timeout=", set_busy_timeout, 1);
766
+ rb_define_method(cSqlite3Database, "transaction_active?", transaction_active_p, 0);
745
767
 
746
768
  #ifdef HAVE_SQLITE3_LOAD_EXTENSION
747
769
  rb_define_method(cSqlite3Database, "load_extension", load_extension, 1);
@@ -25,7 +25,7 @@ def asplode missing
25
25
  else
26
26
  abort <<-error
27
27
  #{missing} is missing. Try 'port install sqlite3 +universal'
28
- or 'yum install sqlite3-devel' and check your shared library search path (the
28
+ or 'yum install sqlite-devel' and check your shared library search path (the
29
29
  location where your sqlite3 shared library is located).
30
30
  error
31
31
  end
@@ -255,12 +255,10 @@ static VALUE bind_param(VALUE self, VALUE key, VALUE value)
255
255
  }
256
256
  break;
257
257
  case T_BIGNUM:
258
- #if SIZEOF_LONG < 8
259
258
  if (RBIGNUM_LEN(value) * SIZEOF_BDIGITS <= 8) {
260
259
  status = sqlite3_bind_int64(ctx->st, index, (sqlite3_int64)NUM2LL(value));
261
260
  break;
262
261
  }
263
- #endif
264
262
  case T_FLOAT:
265
263
  status = sqlite3_bind_double(ctx->st, index, NUM2DBL(value));
266
264
  break;
@@ -295,7 +293,26 @@ static VALUE reset_bang(VALUE self)
295
293
  REQUIRE_OPEN_STMT(ctx);
296
294
 
297
295
  status = sqlite3_reset(ctx->st);
298
- CHECK(sqlite3_db_handle(ctx->st), status);
296
+
297
+ ctx->done_p = 0;
298
+
299
+ return self;
300
+ }
301
+
302
+ /* call-seq: stmt.clear_bindings!
303
+ *
304
+ * Resets the statement. This is typically done internally, though it might
305
+ * occassionally be necessary to manually reset the statement.
306
+ */
307
+ static VALUE clear_bindings(VALUE self)
308
+ {
309
+ sqlite3StmtRubyPtr ctx;
310
+ int status;
311
+
312
+ Data_Get_Struct(self, sqlite3StmtRuby, ctx);
313
+ REQUIRE_OPEN_STMT(ctx);
314
+
315
+ status = sqlite3_clear_bindings(ctx->st);
299
316
 
300
317
  ctx->done_p = 0;
301
318
 
@@ -405,6 +422,7 @@ void init_sqlite3_statement()
405
422
  rb_define_method(cSqlite3Statement, "closed?", closed_p, 0);
406
423
  rb_define_method(cSqlite3Statement, "bind_param", bind_param, 2);
407
424
  rb_define_method(cSqlite3Statement, "reset!", reset_bang, 0);
425
+ rb_define_method(cSqlite3Statement, "clear_bindings!", clear_bindings, 0);
408
426
  rb_define_method(cSqlite3Statement, "step", step, 0);
409
427
  rb_define_method(cSqlite3Statement, "done?", done_p, 0);
410
428
  rb_define_method(cSqlite3Statement, "column_count", column_count, 0);
Binary file
Binary file
@@ -482,7 +482,6 @@ Support for this will be removed in version 2.0.0.
482
482
  # #rollback.
483
483
  def transaction( mode = :deferred )
484
484
  execute "begin #{mode.to_s} transaction"
485
- @transaction_active = true
486
485
 
487
486
  if block_given?
488
487
  abort = false
@@ -505,7 +504,6 @@ Support for this will be removed in version 2.0.0.
505
504
  # <tt>abort? and rollback or commit</tt>.
506
505
  def commit
507
506
  execute "commit transaction"
508
- @transaction_active = false
509
507
  true
510
508
  end
511
509
 
@@ -515,15 +513,9 @@ Support for this will be removed in version 2.0.0.
515
513
  # <tt>abort? and rollback or commit</tt>.
516
514
  def rollback
517
515
  execute "rollback transaction"
518
- @transaction_active = false
519
516
  true
520
517
  end
521
518
 
522
- # Returns +true+ if there is a transaction active, and +false+ otherwise.
523
- def transaction_active?
524
- @transaction_active
525
- end
526
-
527
519
  # Returns +true+ if the database has been open in readonly mode
528
520
  # A helper to check before performing any operation
529
521
  def readonly?
@@ -1,6 +1,6 @@
1
1
  module SQLite3
2
2
 
3
- VERSION = '1.3.4'
3
+ VERSION = '1.3.5'
4
4
 
5
5
  module VersionProxy
6
6
 
data/tasks/native.rake CHANGED
@@ -4,8 +4,8 @@ require 'rake/extensiontask'
4
4
  # NOTE: version used by cross compilation of Windows native extension
5
5
  # It do not affect compilation under other operating systems
6
6
  # The version indicated is the minimum DLL suggested for correct functionality
7
- BINARY_VERSION = '3.7.7.1'
8
- URL_VERSION = BINARY_VERSION.tr(".", "0")
7
+ BINARY_VERSION = "3.7.9"
8
+ URL_VERSION = "3070900"
9
9
 
10
10
  # build sqlite3_native C extension
11
11
  Rake::ExtensionTask.new('sqlite3_native', HOE.spec) do |ext|
@@ -16,6 +16,9 @@ namespace :ports do
16
16
  checkpoint = "ports/.#{recipe.name}-#{recipe.version}-#{recipe.host}.installed"
17
17
 
18
18
  unless File.exist?(checkpoint)
19
+ cflags = "-O2 -DSQLITE_ENABLE_COLUMN_METADATA"
20
+ cflags << " -fPIC" if recipe.host.include?("x86_64")
21
+ recipe.configure_options << "CFLAGS='#{cflags}'"
19
22
  recipe.cook
20
23
  touch checkpoint
21
24
  end
@@ -28,6 +31,10 @@ if RUBY_PLATFORM =~ /mingw/
28
31
  Rake::Task['compile'].prerequisites.unshift "ports:sqlite3"
29
32
  end
30
33
 
34
+ if ENV["USE_MINI_PORTILE"] == "true"
35
+ Rake::Task["compile"].prerequisites.unshift "ports:sqlite3"
36
+ end
37
+
31
38
  task :cross do
32
39
  host = ENV.fetch("HOST", Rake::ExtensionCompiler.mingw_host)
33
40
  $recipes.each do |_, recipe|
@@ -2,10 +2,24 @@ require 'helper'
2
2
 
3
3
  module SQLite3
4
4
  class TestDatabase < Test::Unit::TestCase
5
+ attr_reader :db
6
+
5
7
  def setup
6
8
  @db = SQLite3::Database.new(':memory:')
7
9
  end
8
10
 
11
+ def test_segv
12
+ assert_raises(TypeError) { SQLite3::Database.new 1 }
13
+ end
14
+
15
+ def test_bignum
16
+ num = 4907021672125087844
17
+ db.execute 'CREATE TABLE "employees" ("token" integer(8), "name" varchar(20) NOT NULL)'
18
+ db.execute "INSERT INTO employees(name, token) VALUES('employee-1', ?)", [num]
19
+ rows = db.execute 'select token from employees'
20
+ assert_equal num, rows.first.first
21
+ end
22
+
9
23
  def test_blob
10
24
  @db.execute("CREATE TABLE blobs ( id INTEGER, hash BLOB(10) )")
11
25
  str = "\0foo"
@@ -60,7 +74,10 @@ module SQLite3
60
74
  end
61
75
 
62
76
  def test_new_with_options
63
- db = SQLite3::Database.new(Iconv.conv('UTF-16LE', 'UTF-8', ':memory:'),
77
+ # determine if Ruby is running on Big Endian platform
78
+ utf16 = ([1].pack("I") == [1].pack("N")) ? "UTF-16BE" : "UTF-16LE"
79
+
80
+ db = SQLite3::Database.new(Iconv.conv(utf16, 'UTF-8', ':memory:'),
64
81
  :utf16 => true)
65
82
  assert db
66
83
  end
@@ -75,8 +75,10 @@ module SQLite3
75
75
  end
76
76
 
77
77
  def test_db_with_utf16
78
- db = SQLite3::Database.new(':memory:'.encode('UTF-16LE'))
79
- assert_equal(Encoding.find('UTF-16LE'), db.encoding)
78
+ utf16 = ([1].pack("I") == [1].pack("N")) ? "UTF-16BE" : "UTF-16LE"
79
+
80
+ db = SQLite3::Database.new(':memory:'.encode(utf16))
81
+ assert_equal(Encoding.find(utf16), db.encoding)
80
82
  end
81
83
 
82
84
  def test_statement_eucjp
@@ -454,6 +454,17 @@ class TC_Database_Integration < Test::Unit::TestCase
454
454
  assert !@db.transaction_active?
455
455
  end
456
456
 
457
+ def test_transaction_implicit_rollback
458
+ assert !@db.transaction_active?
459
+ @db.transaction
460
+ @db.execute('create table bar (x CHECK(1 = 0))')
461
+ assert @db.transaction_active?
462
+ assert_raises( SQLite3::ConstraintException ) do
463
+ @db.execute("insert or rollback into bar (x) VALUES ('x')")
464
+ end
465
+ assert !@db.transaction_active?
466
+ end
467
+
457
468
  def test_interrupt
458
469
  @db.create_function( "abort", 1 ) do |func,x|
459
470
  @db.interrupt
@@ -209,5 +209,30 @@ module SQLite3
209
209
  stmt = @db.prepare('select :n, :h')
210
210
  assert_equal [[10, nil]], stmt.execute('n' => 10, 'h' => nil).to_a
211
211
  end
212
+
213
+ def test_with_error
214
+ @db.execute('CREATE TABLE "employees" ("name" varchar(20) NOT NULL CONSTRAINT "index_employees_on_name" UNIQUE)')
215
+ stmt = @db.prepare("INSERT INTO Employees(name) VALUES(?)")
216
+ stmt.execute('employee-1')
217
+ stmt.execute('employee-1') rescue SQLite3::ConstraintException
218
+ stmt.reset!
219
+ assert_nothing_raised(SQLite3::ConstraintException) {
220
+ stmt.execute('employee-2')
221
+ }
222
+ end
223
+
224
+ def test_clear_bindings
225
+ stmt = @db.prepare('select ?, ?')
226
+ stmt.bind_param 1, "foo"
227
+ stmt.bind_param 2, "bar"
228
+
229
+ # We can't fetch bound parameters back out of sqlite3, so just call
230
+ # the clear_bindings! method and assert that nil is returned
231
+ stmt.clear_bindings!
232
+
233
+ while x = stmt.step
234
+ assert_equal [nil, nil], x
235
+ end
236
+ end
212
237
  end
213
238
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqlite3
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 3
9
- - 4
10
- version: 1.3.4
9
+ - 5
10
+ version: 1.3.5
11
11
  platform: x86-mswin32-60
12
12
  authors:
13
13
  - Jamis Buck
@@ -17,8 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2011-07-25 00:00:00 -03:00
21
- default_executable:
20
+ date: 2011-12-03 00:00:00 Z
22
21
  dependencies:
23
22
  - !ruby/object:Gem::Dependency
24
23
  name: rake-compiler
@@ -60,19 +59,34 @@ dependencies:
60
59
  requirements:
61
60
  - - ~>
62
61
  - !ruby/object:Gem::Version
63
- hash: 23
62
+ hash: 27
64
63
  segments:
65
64
  - 2
66
- - 10
67
- version: "2.10"
65
+ - 12
66
+ version: "2.12"
68
67
  type: :development
69
68
  version_requirements: *id003
69
+ - !ruby/object:Gem::Dependency
70
+ name: rdoc
71
+ prerelease: false
72
+ requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ hash: 19
78
+ segments:
79
+ - 3
80
+ - 10
81
+ version: "3.10"
82
+ type: :development
83
+ version_requirements: *id004
70
84
  description: |-
71
85
  This module allows Ruby programs to interface with the SQLite3
72
86
  database engine (http://www.sqlite.org). You must have the
73
87
  SQLite engine installed in order to build this module.
74
88
 
75
- Note that this module is NOT compatible with SQLite 2.x.
89
+ Note that this module is only compatible with SQLite 3.6.16 or newer.
76
90
  email:
77
91
  - jamis@37signals.com
78
92
  - luislavena@gmail.com
@@ -145,7 +159,6 @@ files:
145
159
  - .gemtest
146
160
  - lib/sqlite3/1.8/sqlite3_native.so
147
161
  - lib/sqlite3/1.9/sqlite3_native.so
148
- has_rdoc: true
149
162
  homepage: http://github.com/luislavena/sqlite3-ruby
150
163
  licenses: []
151
164
 
@@ -180,7 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
193
  requirements: []
181
194
 
182
195
  rubyforge_project: sqlite3
183
- rubygems_version: 1.6.2
196
+ rubygems_version: 1.8.12
184
197
  signing_key:
185
198
  specification_version: 3
186
199
  summary: This module allows Ruby programs to interface with the SQLite3 database engine (http://www.sqlite.org)