sqlite3 1.4.2 → 1.6.3
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 +4 -4
- data/{API_CHANGES.rdoc → API_CHANGES.md} +3 -4
- data/CHANGELOG.md +520 -0
- data/CONTRIBUTING.md +33 -0
- data/Gemfile +8 -14
- data/LICENSE-DEPENDENCIES +20 -0
- data/README.md +235 -0
- data/dependencies.yml +14 -0
- data/ext/sqlite3/aggregator.c +9 -8
- data/ext/sqlite3/backup.c +1 -1
- data/ext/sqlite3/database.c +36 -10
- data/ext/sqlite3/extconf.rb +257 -84
- data/ext/sqlite3/sqlite3.c +5 -2
- data/ext/sqlite3/sqlite3_ruby.h +5 -2
- data/ext/sqlite3/statement.c +3 -3
- data/faq/faq.md +431 -0
- data/faq/faq.yml +1 -1
- data/lib/sqlite3/constants.rb +1 -1
- data/lib/sqlite3/database.rb +11 -6
- data/lib/sqlite3/pragmas.rb +13 -6
- data/lib/sqlite3/statement.rb +2 -1
- data/lib/sqlite3/translator.rb +1 -1
- data/lib/sqlite3/version.rb +3 -5
- data/ports/archives/sqlite-autoconf-3420000.tar.gz +0 -0
- data/test/helper.rb +9 -0
- data/test/test_database.rb +76 -10
- data/test/test_deprecated.rb +10 -5
- data/test/test_encoding.rb +10 -0
- data/test/test_pragmas.rb +22 -0
- data/test/test_result_set.rb +18 -8
- data/test/test_sqlite3.rb +9 -0
- data/test/test_statement.rb +26 -1
- data/test/test_statement_execute.rb +4 -0
- metadata +30 -134
- data/.travis.yml +0 -33
- data/CHANGELOG.rdoc +0 -318
- data/Manifest.txt +0 -60
- data/README.rdoc +0 -118
- data/Rakefile +0 -8
- data/appveyor.yml +0 -36
- data/rakelib/faq.rake +0 -9
- data/rakelib/gem.rake +0 -40
- data/rakelib/native.rake +0 -56
- data/rakelib/vendor_sqlite3.rake +0 -97
- data/setup.rb +0 -1333
data/test/test_database.rb
CHANGED
|
@@ -11,6 +11,10 @@ module SQLite3
|
|
|
11
11
|
super
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
+
def teardown
|
|
15
|
+
@db.close unless @db.closed?
|
|
16
|
+
end
|
|
17
|
+
|
|
14
18
|
def test_segv
|
|
15
19
|
assert_raises { SQLite3::Database.new 1 }
|
|
16
20
|
end
|
|
@@ -20,7 +24,7 @@ module SQLite3
|
|
|
20
24
|
assert_equal '', @db.filename('main')
|
|
21
25
|
tf = Tempfile.new 'thing'
|
|
22
26
|
@db = SQLite3::Database.new tf.path
|
|
23
|
-
assert_equal File.
|
|
27
|
+
assert_equal File.realdirpath(tf.path), File.realdirpath(@db.filename('main'))
|
|
24
28
|
ensure
|
|
25
29
|
tf.unlink if tf
|
|
26
30
|
end
|
|
@@ -30,7 +34,7 @@ module SQLite3
|
|
|
30
34
|
assert_equal '', @db.filename
|
|
31
35
|
tf = Tempfile.new 'thing'
|
|
32
36
|
@db = SQLite3::Database.new tf.path
|
|
33
|
-
assert_equal File.
|
|
37
|
+
assert_equal File.realdirpath(tf.path), File.realdirpath(@db.filename)
|
|
34
38
|
ensure
|
|
35
39
|
tf.unlink if tf
|
|
36
40
|
end
|
|
@@ -40,11 +44,24 @@ module SQLite3
|
|
|
40
44
|
assert_equal '', @db.filename
|
|
41
45
|
tf = Tempfile.new 'thing'
|
|
42
46
|
@db.execute "ATTACH DATABASE '#{tf.path}' AS 'testing'"
|
|
43
|
-
|
|
47
|
+
|
|
48
|
+
assert_equal File.realdirpath(tf.path), File.realdirpath(@db.filename('testing'))
|
|
44
49
|
ensure
|
|
45
50
|
tf.unlink if tf
|
|
46
51
|
end
|
|
47
52
|
|
|
53
|
+
|
|
54
|
+
def test_filename_to_path
|
|
55
|
+
tf = Tempfile.new 'thing'
|
|
56
|
+
pn = Pathname tf.path
|
|
57
|
+
db = SQLite3::Database.new pn
|
|
58
|
+
assert_equal pn.realdirpath.to_s, File.realdirpath(db.filename)
|
|
59
|
+
ensure
|
|
60
|
+
tf.close! if tf
|
|
61
|
+
db.close if db
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
|
|
48
65
|
def test_error_code
|
|
49
66
|
begin
|
|
50
67
|
db.execute 'SELECT'
|
|
@@ -177,6 +194,8 @@ module SQLite3
|
|
|
177
194
|
def test_new
|
|
178
195
|
db = SQLite3::Database.new(':memory:')
|
|
179
196
|
assert db
|
|
197
|
+
ensure
|
|
198
|
+
db.close if db
|
|
180
199
|
end
|
|
181
200
|
|
|
182
201
|
def test_new_yields_self
|
|
@@ -198,6 +217,8 @@ module SQLite3
|
|
|
198
217
|
:utf16 => true)
|
|
199
218
|
end
|
|
200
219
|
assert db
|
|
220
|
+
ensure
|
|
221
|
+
db.close if db
|
|
201
222
|
end
|
|
202
223
|
|
|
203
224
|
def test_close
|
|
@@ -231,6 +252,8 @@ module SQLite3
|
|
|
231
252
|
db = SQLite3::Database.new(':memory:')
|
|
232
253
|
stmt = db.prepare('select "hello world"')
|
|
233
254
|
assert_instance_of(SQLite3::Statement, stmt)
|
|
255
|
+
ensure
|
|
256
|
+
stmt.close if stmt
|
|
234
257
|
end
|
|
235
258
|
|
|
236
259
|
def test_block_prepare_does_not_double_close
|
|
@@ -349,7 +372,10 @@ module SQLite3
|
|
|
349
372
|
nil
|
|
350
373
|
end
|
|
351
374
|
@db.execute("select hello(2.2, 'foo', NULL)")
|
|
352
|
-
|
|
375
|
+
|
|
376
|
+
assert_in_delta(2.2, called_with[0], 0.0001)
|
|
377
|
+
assert_equal("foo", called_with[1])
|
|
378
|
+
assert_nil(called_with[2])
|
|
353
379
|
end
|
|
354
380
|
|
|
355
381
|
def test_define_varargs
|
|
@@ -359,7 +385,10 @@ module SQLite3
|
|
|
359
385
|
nil
|
|
360
386
|
end
|
|
361
387
|
@db.execute("select hello(2.2, 'foo', NULL)")
|
|
362
|
-
|
|
388
|
+
|
|
389
|
+
assert_in_delta(2.2, called_with[0], 0.0001)
|
|
390
|
+
assert_equal("foo", called_with[1])
|
|
391
|
+
assert_nil(called_with[2])
|
|
363
392
|
end
|
|
364
393
|
|
|
365
394
|
def test_call_func_blob
|
|
@@ -441,15 +470,19 @@ module SQLite3
|
|
|
441
470
|
end
|
|
442
471
|
|
|
443
472
|
def test_authorizer_ok
|
|
473
|
+
statements = []
|
|
474
|
+
|
|
444
475
|
@db.authorizer = Class.new {
|
|
445
476
|
def call action, a, b, c, d; true end
|
|
446
477
|
}.new
|
|
447
|
-
@db.prepare("select 'fooooo'")
|
|
478
|
+
statements << @db.prepare("select 'fooooo'")
|
|
448
479
|
|
|
449
480
|
@db.authorizer = Class.new {
|
|
450
481
|
def call action, a, b, c, d; 0 end
|
|
451
482
|
}.new
|
|
452
|
-
@db.prepare("select 'fooooo'")
|
|
483
|
+
statements << @db.prepare("select 'fooooo'")
|
|
484
|
+
ensure
|
|
485
|
+
statements.each(&:close)
|
|
453
486
|
end
|
|
454
487
|
|
|
455
488
|
def test_authorizer_ignore
|
|
@@ -458,6 +491,8 @@ module SQLite3
|
|
|
458
491
|
}.new
|
|
459
492
|
stmt = @db.prepare("select 'fooooo'")
|
|
460
493
|
assert_nil stmt.step
|
|
494
|
+
ensure
|
|
495
|
+
stmt.close if stmt
|
|
461
496
|
end
|
|
462
497
|
|
|
463
498
|
def test_authorizer_fail
|
|
@@ -478,14 +513,18 @@ module SQLite3
|
|
|
478
513
|
end
|
|
479
514
|
|
|
480
515
|
@db.authorizer = nil
|
|
481
|
-
@db.prepare("select 'fooooo'")
|
|
516
|
+
s = @db.prepare("select 'fooooo'")
|
|
517
|
+
ensure
|
|
518
|
+
s.close if s
|
|
482
519
|
end
|
|
483
520
|
|
|
484
521
|
def test_close_with_open_statements
|
|
485
|
-
@db.prepare("select 'foo'")
|
|
522
|
+
s = @db.prepare("select 'foo'")
|
|
486
523
|
assert_raises(SQLite3::BusyException) do
|
|
487
524
|
@db.close
|
|
488
525
|
end
|
|
526
|
+
ensure
|
|
527
|
+
s.close if s
|
|
489
528
|
end
|
|
490
529
|
|
|
491
530
|
def test_execute_with_empty_bind_params
|
|
@@ -493,11 +532,38 @@ module SQLite3
|
|
|
493
532
|
end
|
|
494
533
|
|
|
495
534
|
def test_query_with_named_bind_params
|
|
496
|
-
|
|
535
|
+
resultset = @db.query("select :n", {'n' => 'foo'})
|
|
536
|
+
assert_equal [['foo']], resultset.to_a
|
|
537
|
+
ensure
|
|
538
|
+
resultset.close if resultset
|
|
497
539
|
end
|
|
498
540
|
|
|
499
541
|
def test_execute_with_named_bind_params
|
|
500
542
|
assert_equal [['foo']], @db.execute("select :n", {'n' => 'foo'})
|
|
501
543
|
end
|
|
544
|
+
|
|
545
|
+
def test_strict_mode
|
|
546
|
+
unless Gem::Requirement.new(">= 3.29.0").satisfied_by?(Gem::Version.new(SQLite3::SQLITE_VERSION))
|
|
547
|
+
skip("strict mode feature not available in #{SQLite3::SQLITE_VERSION}")
|
|
548
|
+
end
|
|
549
|
+
|
|
550
|
+
db = SQLite3::Database.new(':memory:')
|
|
551
|
+
db.execute('create table numbers (val int);')
|
|
552
|
+
db.execute('create index index_numbers_nope ON numbers ("nope");') # nothing raised
|
|
553
|
+
|
|
554
|
+
db = SQLite3::Database.new(':memory:', :strict => true)
|
|
555
|
+
db.execute('create table numbers (val int);')
|
|
556
|
+
error = assert_raises SQLite3::SQLException do
|
|
557
|
+
db.execute('create index index_numbers_nope ON numbers ("nope");')
|
|
558
|
+
end
|
|
559
|
+
assert_includes error.message, "no such column: nope"
|
|
560
|
+
end
|
|
561
|
+
|
|
562
|
+
def test_load_extension_with_nonstring_argument
|
|
563
|
+
db = SQLite3::Database.new(':memory:')
|
|
564
|
+
skip("extensions are not enabled") unless db.respond_to?(:load_extension)
|
|
565
|
+
assert_raises(TypeError) { db.load_extension(1) }
|
|
566
|
+
assert_raises(TypeError) { db.load_extension(Pathname.new("foo.so")) }
|
|
567
|
+
end
|
|
502
568
|
end
|
|
503
569
|
end
|
data/test/test_deprecated.rb
CHANGED
|
@@ -2,8 +2,6 @@ require 'helper'
|
|
|
2
2
|
|
|
3
3
|
module SQLite3
|
|
4
4
|
class TestDeprecated < SQLite3::TestCase
|
|
5
|
-
attr_reader :db
|
|
6
|
-
|
|
7
5
|
def setup
|
|
8
6
|
super
|
|
9
7
|
@warn_before = $-w
|
|
@@ -15,10 +13,13 @@ module SQLite3
|
|
|
15
13
|
def teardown
|
|
16
14
|
super
|
|
17
15
|
$-w = @warn_before
|
|
16
|
+
@db.close
|
|
18
17
|
end
|
|
19
18
|
|
|
20
19
|
def test_query_with_many_bind_params_not_nil
|
|
21
|
-
|
|
20
|
+
rs = @db.query('select ?, ?', 1, 2)
|
|
21
|
+
assert_equal [[1, 2]], rs.to_a
|
|
22
|
+
rs.close
|
|
22
23
|
end
|
|
23
24
|
|
|
24
25
|
def test_execute_with_many_bind_params_not_nil
|
|
@@ -26,11 +27,15 @@ module SQLite3
|
|
|
26
27
|
end
|
|
27
28
|
|
|
28
29
|
def test_query_with_many_bind_params
|
|
29
|
-
|
|
30
|
+
rs = @db.query("select ?, ?", nil, 1)
|
|
31
|
+
assert_equal [[nil, 1]], rs.to_a
|
|
32
|
+
rs.close
|
|
30
33
|
end
|
|
31
34
|
|
|
32
35
|
def test_query_with_nil_bind_params
|
|
33
|
-
|
|
36
|
+
rs = @db.query("select 'foo'", nil)
|
|
37
|
+
assert_equal [['foo']], rs.to_a
|
|
38
|
+
rs.close
|
|
34
39
|
end
|
|
35
40
|
|
|
36
41
|
def test_execute_with_many_bind_params
|
data/test/test_encoding.rb
CHANGED
|
@@ -11,6 +11,10 @@ module SQLite3
|
|
|
11
11
|
@db.execute(@create);
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
+
def teardown
|
|
15
|
+
@db.close
|
|
16
|
+
end
|
|
17
|
+
|
|
14
18
|
def test_select_encoding_on_utf_16
|
|
15
19
|
str = "foo"
|
|
16
20
|
utf16 = ([1].pack("I") == [1].pack("N")) ? "UTF-16BE" : "UTF-16LE"
|
|
@@ -24,6 +28,7 @@ module SQLite3
|
|
|
24
28
|
assert_equal 1, stmt.to_a.length
|
|
25
29
|
stmt.reset!
|
|
26
30
|
end
|
|
31
|
+
stmt.close
|
|
27
32
|
end
|
|
28
33
|
|
|
29
34
|
def test_insert_encoding
|
|
@@ -39,6 +44,7 @@ module SQLite3
|
|
|
39
44
|
stmt.to_a
|
|
40
45
|
stmt.reset!
|
|
41
46
|
end
|
|
47
|
+
stmt.close
|
|
42
48
|
|
|
43
49
|
db.execute('select data from ex').flatten.each do |s|
|
|
44
50
|
assert_equal str, s
|
|
@@ -55,6 +61,7 @@ module SQLite3
|
|
|
55
61
|
stmt = @db.prepare('insert into ex(data) values (?)')
|
|
56
62
|
stmt.bind_param 1, str
|
|
57
63
|
stmt.step
|
|
64
|
+
stmt.close
|
|
58
65
|
|
|
59
66
|
Encoding.default_internal = 'EUC-JP'
|
|
60
67
|
string = @db.execute('select data from ex').first.first
|
|
@@ -73,6 +80,7 @@ module SQLite3
|
|
|
73
80
|
stmt = @db.prepare('insert into foo(data) values (?)')
|
|
74
81
|
stmt.bind_param(1, SQLite3::Blob.new(str))
|
|
75
82
|
stmt.step
|
|
83
|
+
stmt.close
|
|
76
84
|
|
|
77
85
|
string = @db.execute('select data from foo').first.first
|
|
78
86
|
assert_equal Encoding.find('ASCII-8BIT'), string.encoding
|
|
@@ -85,6 +93,7 @@ module SQLite3
|
|
|
85
93
|
stmt = @db.prepare('insert into foo(data) values (?)')
|
|
86
94
|
stmt.bind_param(1, str.dup.force_encoding("ASCII-8BIT"))
|
|
87
95
|
stmt.step
|
|
96
|
+
stmt.close
|
|
88
97
|
|
|
89
98
|
string = @db.execute('select data from foo').first.first
|
|
90
99
|
assert_equal Encoding.find('ASCII-8BIT'), string.encoding
|
|
@@ -97,6 +106,7 @@ module SQLite3
|
|
|
97
106
|
stmt = @db.prepare('insert into foo(data) values (?)')
|
|
98
107
|
stmt.bind_param(1, SQLite3::Blob.new(str))
|
|
99
108
|
stmt.step
|
|
109
|
+
stmt.close
|
|
100
110
|
|
|
101
111
|
string = @db.execute('select data from foo').first.first
|
|
102
112
|
assert_equal Encoding.find('ASCII-8BIT'), string.encoding
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
|
|
3
|
+
module SQLite3
|
|
4
|
+
class TestPragmas < SQLite3::TestCase
|
|
5
|
+
def setup
|
|
6
|
+
super
|
|
7
|
+
@db = SQLite3::Database.new(":memory:")
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_get_boolean_pragma
|
|
11
|
+
refute(@db.get_boolean_pragma("read_uncommitted"))
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_set_boolean_pragma
|
|
15
|
+
@db.set_boolean_pragma("read_uncommitted", 1)
|
|
16
|
+
|
|
17
|
+
assert(@db.get_boolean_pragma("read_uncommitted"))
|
|
18
|
+
ensure
|
|
19
|
+
@db.set_boolean_pragma("read_uncommitted", 0)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
data/test/test_result_set.rb
CHANGED
|
@@ -2,29 +2,38 @@ require 'helper'
|
|
|
2
2
|
|
|
3
3
|
module SQLite3
|
|
4
4
|
class TestResultSet < SQLite3::TestCase
|
|
5
|
+
def setup
|
|
6
|
+
@db = SQLite3::Database.new ':memory:'
|
|
7
|
+
super
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def teardown
|
|
11
|
+
super
|
|
12
|
+
@db.close
|
|
13
|
+
end
|
|
14
|
+
|
|
5
15
|
def test_each_hash
|
|
6
|
-
db
|
|
7
|
-
db.execute "create table foo ( a integer primary key, b text )"
|
|
16
|
+
@db.execute "create table foo ( a integer primary key, b text )"
|
|
8
17
|
list = ('a'..'z').to_a
|
|
9
18
|
list.each do |t|
|
|
10
|
-
db.execute "insert into foo (b) values (\"#{t}\")"
|
|
19
|
+
@db.execute "insert into foo (b) values (\"#{t}\")"
|
|
11
20
|
end
|
|
12
21
|
|
|
13
|
-
rs = db.prepare('select * from foo').execute
|
|
22
|
+
rs = @db.prepare('select * from foo').execute
|
|
14
23
|
rs.each_hash do |hash|
|
|
15
24
|
assert_equal list[hash['a'] - 1], hash['b']
|
|
16
25
|
end
|
|
26
|
+
rs.close
|
|
17
27
|
end
|
|
18
28
|
|
|
19
29
|
def test_next_hash
|
|
20
|
-
db
|
|
21
|
-
db.execute "create table foo ( a integer primary key, b text )"
|
|
30
|
+
@db.execute "create table foo ( a integer primary key, b text )"
|
|
22
31
|
list = ('a'..'z').to_a
|
|
23
32
|
list.each do |t|
|
|
24
|
-
db.execute "insert into foo (b) values (\"#{t}\")"
|
|
33
|
+
@db.execute "insert into foo (b) values (\"#{t}\")"
|
|
25
34
|
end
|
|
26
35
|
|
|
27
|
-
rs = db.prepare('select * from foo').execute
|
|
36
|
+
rs = @db.prepare('select * from foo').execute
|
|
28
37
|
rows = []
|
|
29
38
|
while row = rs.next_hash
|
|
30
39
|
rows << row
|
|
@@ -32,6 +41,7 @@ module SQLite3
|
|
|
32
41
|
rows.each do |hash|
|
|
33
42
|
assert_equal list[hash['a'] - 1], hash['b']
|
|
34
43
|
end
|
|
44
|
+
rs.close
|
|
35
45
|
end
|
|
36
46
|
end
|
|
37
47
|
end
|
data/test/test_sqlite3.rb
CHANGED
|
@@ -17,5 +17,14 @@ module SQLite3
|
|
|
17
17
|
refute SQLite3.threadsafe?
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
|
+
|
|
21
|
+
def test_version_strings
|
|
22
|
+
skip if SQLite3::VERSION.include?("test") # see set-version-to-timestamp rake task
|
|
23
|
+
assert_equal(SQLite3::VERSION, SQLite3::VersionProxy::STRING)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_compiled_version_and_loaded_version
|
|
27
|
+
assert_equal(SQLite3::SQLITE_VERSION, SQLite3::SQLITE_LOADED_VERSION)
|
|
28
|
+
end
|
|
20
29
|
end
|
|
21
30
|
end
|
data/test/test_statement.rb
CHANGED
|
@@ -7,6 +7,11 @@ module SQLite3
|
|
|
7
7
|
@stmt = SQLite3::Statement.new(@db, "select 'foo'")
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
+
def teardown
|
|
11
|
+
@stmt.close if !@stmt.closed?
|
|
12
|
+
@db.close
|
|
13
|
+
end
|
|
14
|
+
|
|
10
15
|
def test_double_close_does_not_segv
|
|
11
16
|
@db.execute 'CREATE TABLE "things" ("number" float NOT NULL)'
|
|
12
17
|
|
|
@@ -35,6 +40,8 @@ module SQLite3
|
|
|
35
40
|
# Older versions of SQLite return:
|
|
36
41
|
# column *column_name* is not unique
|
|
37
42
|
assert_match(/(column(s)? .* (is|are) not unique|UNIQUE constraint failed: .*)/, exception.message)
|
|
43
|
+
|
|
44
|
+
stmt.close
|
|
38
45
|
end
|
|
39
46
|
|
|
40
47
|
###
|
|
@@ -46,6 +53,7 @@ module SQLite3
|
|
|
46
53
|
if stmt.respond_to?(:database_name)
|
|
47
54
|
assert_equal 'main', stmt.database_name(0)
|
|
48
55
|
end
|
|
56
|
+
stmt.close
|
|
49
57
|
end
|
|
50
58
|
|
|
51
59
|
def test_prepare_blob
|
|
@@ -77,6 +85,7 @@ module SQLite3
|
|
|
77
85
|
def test_new_with_remainder
|
|
78
86
|
stmt = SQLite3::Statement.new(@db, "select 'foo';bar")
|
|
79
87
|
assert_equal 'bar', stmt.remainder
|
|
88
|
+
stmt.close
|
|
80
89
|
end
|
|
81
90
|
|
|
82
91
|
def test_empty_remainder
|
|
@@ -101,6 +110,7 @@ module SQLite3
|
|
|
101
110
|
result = nil
|
|
102
111
|
stmt.each { |x| result = x }
|
|
103
112
|
assert_equal ['hello'], result
|
|
113
|
+
stmt.close
|
|
104
114
|
end
|
|
105
115
|
|
|
106
116
|
def test_bind_param_int
|
|
@@ -109,6 +119,7 @@ module SQLite3
|
|
|
109
119
|
result = nil
|
|
110
120
|
stmt.each { |x| result = x }
|
|
111
121
|
assert_equal [10], result
|
|
122
|
+
stmt.close
|
|
112
123
|
end
|
|
113
124
|
|
|
114
125
|
def test_bind_nil
|
|
@@ -117,6 +128,7 @@ module SQLite3
|
|
|
117
128
|
result = nil
|
|
118
129
|
stmt.each { |x| result = x }
|
|
119
130
|
assert_equal [nil], result
|
|
131
|
+
stmt.close
|
|
120
132
|
end
|
|
121
133
|
|
|
122
134
|
def test_bind_blob
|
|
@@ -125,9 +137,10 @@ module SQLite3
|
|
|
125
137
|
stmt.bind_param(1, SQLite3::Blob.new('hello'))
|
|
126
138
|
stmt.execute
|
|
127
139
|
row = @db.execute('select * from foo')
|
|
140
|
+
stmt.close
|
|
128
141
|
|
|
129
142
|
assert_equal ['hello'], row.first
|
|
130
|
-
assert_equal row.first.types
|
|
143
|
+
assert_equal ['blob'], row.first.types
|
|
131
144
|
end
|
|
132
145
|
|
|
133
146
|
def test_bind_64
|
|
@@ -136,6 +149,7 @@ module SQLite3
|
|
|
136
149
|
result = nil
|
|
137
150
|
stmt.each { |x| result = x }
|
|
138
151
|
assert_equal [2 ** 31], result
|
|
152
|
+
stmt.close
|
|
139
153
|
end
|
|
140
154
|
|
|
141
155
|
def test_bind_double
|
|
@@ -144,6 +158,7 @@ module SQLite3
|
|
|
144
158
|
result = nil
|
|
145
159
|
stmt.each { |x| result = x }
|
|
146
160
|
assert_equal [2.2], result
|
|
161
|
+
stmt.close
|
|
147
162
|
end
|
|
148
163
|
|
|
149
164
|
def test_named_bind
|
|
@@ -152,6 +167,7 @@ module SQLite3
|
|
|
152
167
|
result = nil
|
|
153
168
|
stmt.each { |x| result = x }
|
|
154
169
|
assert_equal ['hello'], result
|
|
170
|
+
stmt.close
|
|
155
171
|
end
|
|
156
172
|
|
|
157
173
|
def test_named_bind_no_colon
|
|
@@ -160,6 +176,7 @@ module SQLite3
|
|
|
160
176
|
result = nil
|
|
161
177
|
stmt.each { |x| result = x }
|
|
162
178
|
assert_equal ['hello'], result
|
|
179
|
+
stmt.close
|
|
163
180
|
end
|
|
164
181
|
|
|
165
182
|
def test_named_bind_symbol
|
|
@@ -168,6 +185,7 @@ module SQLite3
|
|
|
168
185
|
result = nil
|
|
169
186
|
stmt.each { |x| result = x }
|
|
170
187
|
assert_equal ['hello'], result
|
|
188
|
+
stmt.close
|
|
171
189
|
end
|
|
172
190
|
|
|
173
191
|
def test_named_bind_not_found
|
|
@@ -175,6 +193,7 @@ module SQLite3
|
|
|
175
193
|
assert_raises(SQLite3::Exception) do
|
|
176
194
|
stmt.bind_param('bar', 'hello')
|
|
177
195
|
end
|
|
196
|
+
stmt.close
|
|
178
197
|
end
|
|
179
198
|
|
|
180
199
|
def test_each
|
|
@@ -225,16 +244,19 @@ module SQLite3
|
|
|
225
244
|
def test_bind_parameter_count
|
|
226
245
|
stmt = SQLite3::Statement.new(@db, "select ?, ?, ?")
|
|
227
246
|
assert_equal 3, stmt.bind_parameter_count
|
|
247
|
+
stmt.close
|
|
228
248
|
end
|
|
229
249
|
|
|
230
250
|
def test_execute_with_varargs
|
|
231
251
|
stmt = @db.prepare('select ?, ?')
|
|
232
252
|
assert_equal [[nil, nil]], stmt.execute(nil, nil).to_a
|
|
253
|
+
stmt.close
|
|
233
254
|
end
|
|
234
255
|
|
|
235
256
|
def test_execute_with_hash
|
|
236
257
|
stmt = @db.prepare('select :n, :h')
|
|
237
258
|
assert_equal [[10, nil]], stmt.execute('n' => 10, 'h' => nil).to_a
|
|
259
|
+
stmt.close
|
|
238
260
|
end
|
|
239
261
|
|
|
240
262
|
def test_with_error
|
|
@@ -244,6 +266,7 @@ module SQLite3
|
|
|
244
266
|
stmt.execute('employee-1') rescue SQLite3::ConstraintException
|
|
245
267
|
stmt.reset!
|
|
246
268
|
assert stmt.execute('employee-2')
|
|
269
|
+
stmt.close
|
|
247
270
|
end
|
|
248
271
|
|
|
249
272
|
def test_clear_bindings!
|
|
@@ -258,6 +281,8 @@ module SQLite3
|
|
|
258
281
|
while x = stmt.step
|
|
259
282
|
assert_equal [nil, nil], x
|
|
260
283
|
end
|
|
284
|
+
|
|
285
|
+
stmt.close
|
|
261
286
|
end
|
|
262
287
|
end
|
|
263
288
|
end
|