sqlite3 1.7.3 → 2.5.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +292 -0
- data/CONTRIBUTING.md +33 -7
- data/FAQ.md +43 -77
- data/INSTALLATION.md +14 -6
- data/LICENSE +18 -22
- data/README.md +97 -9
- data/dependencies.yml +10 -11
- data/ext/sqlite3/aggregator.c +142 -145
- data/ext/sqlite3/aggregator.h +2 -4
- data/ext/sqlite3/backup.c +74 -65
- data/ext/sqlite3/backup.h +2 -2
- data/ext/sqlite3/database.c +621 -493
- data/ext/sqlite3/database.h +13 -4
- data/ext/sqlite3/exception.c +116 -92
- data/ext/sqlite3/exception.h +5 -1
- data/ext/sqlite3/extconf.rb +33 -24
- data/ext/sqlite3/sqlite3.c +176 -115
- data/ext/sqlite3/sqlite3_ruby.h +2 -2
- data/ext/sqlite3/statement.c +553 -300
- data/ext/sqlite3/statement.h +4 -3
- data/ext/sqlite3/timespec.h +20 -0
- data/lib/sqlite3/constants.rb +195 -47
- data/lib/sqlite3/database.rb +223 -187
- data/lib/sqlite3/errors.rb +54 -1
- data/lib/sqlite3/fork_safety.rb +66 -0
- data/lib/sqlite3/pragmas.rb +140 -136
- data/lib/sqlite3/resultset.rb +14 -97
- data/lib/sqlite3/statement.rb +58 -13
- data/lib/sqlite3/value.rb +17 -20
- data/lib/sqlite3/version.rb +2 -21
- data/lib/sqlite3/version_info.rb +17 -0
- data/lib/sqlite3.rb +8 -4
- data/ports/archives/sqlite-autoconf-3470200.tar.gz +0 -0
- metadata +9 -37
- data/API_CHANGES.md +0 -49
- data/ChangeLog.cvs +0 -88
- data/Gemfile +0 -10
- data/LICENSE-DEPENDENCIES +0 -20
- data/lib/sqlite3/translator.rb +0 -117
- data/ports/archives/sqlite-autoconf-3450200.tar.gz +0 -0
- data/test/helper.rb +0 -27
- data/test/test_backup.rb +0 -33
- data/test/test_collation.rb +0 -82
- data/test/test_database.rb +0 -668
- data/test/test_database_flags.rb +0 -95
- data/test/test_database_readonly.rb +0 -36
- data/test/test_database_readwrite.rb +0 -41
- data/test/test_deprecated.rb +0 -49
- data/test/test_encoding.rb +0 -165
- data/test/test_integration.rb +0 -507
- data/test/test_integration_aggregate.rb +0 -336
- data/test/test_integration_open_close.rb +0 -30
- data/test/test_integration_pending.rb +0 -115
- data/test/test_integration_resultset.rb +0 -142
- data/test/test_integration_statement.rb +0 -194
- data/test/test_pragmas.rb +0 -22
- data/test/test_result_set.rb +0 -47
- data/test/test_sqlite3.rb +0 -30
- data/test/test_statement.rb +0 -290
- data/test/test_statement_execute.rb +0 -39
data/test/test_database_flags.rb
DELETED
@@ -1,95 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
module SQLite3
|
4
|
-
class TestDatabaseFlags < SQLite3::TestCase
|
5
|
-
def setup
|
6
|
-
File.unlink 'test-flags.db' if File.exist?('test-flags.db')
|
7
|
-
@db = SQLite3::Database.new('test-flags.db')
|
8
|
-
@db.execute("CREATE TABLE foos (id integer)")
|
9
|
-
@db.close
|
10
|
-
end
|
11
|
-
|
12
|
-
def teardown
|
13
|
-
@db.close unless @db.closed?
|
14
|
-
File.unlink 'test-flags.db' if File.exist?('test-flags.db')
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_open_database_flags_constants
|
18
|
-
defined_to_date = [:READONLY, :READWRITE, :CREATE, :DELETEONCLOSE,
|
19
|
-
:EXCLUSIVE, :MAIN_DB, :TEMP_DB, :TRANSIENT_DB,
|
20
|
-
:MAIN_JOURNAL, :TEMP_JOURNAL, :SUBJOURNAL,
|
21
|
-
:MASTER_JOURNAL, :NOMUTEX, :FULLMUTEX]
|
22
|
-
if SQLite3::SQLITE_VERSION_NUMBER > 3007002
|
23
|
-
defined_to_date += [:AUTOPROXY, :SHAREDCACHE, :PRIVATECACHE, :WAL]
|
24
|
-
end
|
25
|
-
if SQLite3::SQLITE_VERSION_NUMBER > 3007007
|
26
|
-
defined_to_date += [:URI]
|
27
|
-
end
|
28
|
-
if SQLite3::SQLITE_VERSION_NUMBER > 3007013
|
29
|
-
defined_to_date += [:MEMORY]
|
30
|
-
end
|
31
|
-
assert defined_to_date.sort == SQLite3::Constants::Open.constants.sort
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_open_database_flags_conflicts_with_readonly
|
35
|
-
assert_raise(RuntimeError) do
|
36
|
-
@db = SQLite3::Database.new('test-flags.db', :flags => 2, :readonly => true)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_open_database_flags_conflicts_with_readwrite
|
41
|
-
assert_raise(RuntimeError) do
|
42
|
-
@db = SQLite3::Database.new('test-flags.db', :flags => 2, :readwrite => true)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_open_database_readonly_flags
|
47
|
-
@db = SQLite3::Database.new('test-flags.db', :flags => SQLite3::Constants::Open::READONLY)
|
48
|
-
assert @db.readonly?
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_open_database_readwrite_flags
|
52
|
-
@db = SQLite3::Database.new('test-flags.db', :flags => SQLite3::Constants::Open::READWRITE)
|
53
|
-
assert !@db.readonly?
|
54
|
-
end
|
55
|
-
|
56
|
-
def test_open_database_readonly_flags_cant_open
|
57
|
-
File.unlink 'test-flags.db'
|
58
|
-
assert_raise(SQLite3::CantOpenException) do
|
59
|
-
@db = SQLite3::Database.new('test-flags.db', :flags => SQLite3::Constants::Open::READONLY)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_open_database_readwrite_flags_cant_open
|
64
|
-
File.unlink 'test-flags.db'
|
65
|
-
assert_raise(SQLite3::CantOpenException) do
|
66
|
-
@db = SQLite3::Database.new('test-flags.db', :flags => SQLite3::Constants::Open::READWRITE)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_open_database_misuse_flags
|
71
|
-
assert_raise(SQLite3::MisuseException) do
|
72
|
-
flags = SQLite3::Constants::Open::READONLY | SQLite3::Constants::Open::READWRITE # <== incompatible flags
|
73
|
-
@db = SQLite3::Database.new('test-flags.db', :flags => flags)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_open_database_create_flags
|
78
|
-
File.unlink 'test-flags.db'
|
79
|
-
flags = SQLite3::Constants::Open::READWRITE | SQLite3::Constants::Open::CREATE
|
80
|
-
@db = SQLite3::Database.new('test-flags.db', :flags => flags) do |db|
|
81
|
-
db.execute("CREATE TABLE foos (id integer)")
|
82
|
-
db.execute("INSERT INTO foos (id) VALUES (12)")
|
83
|
-
end
|
84
|
-
assert File.exist?('test-flags.db')
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_open_database_exotic_flags
|
88
|
-
flags = SQLite3::Constants::Open::READWRITE | SQLite3::Constants::Open::CREATE
|
89
|
-
exotic_flags = SQLite3::Constants::Open::NOMUTEX | SQLite3::Constants::Open::TEMP_DB
|
90
|
-
@db = SQLite3::Database.new('test-flags.db', :flags => flags | exotic_flags)
|
91
|
-
@db.execute("INSERT INTO foos (id) VALUES (12)")
|
92
|
-
assert @db.changes == 1
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
module SQLite3
|
4
|
-
class TestDatabaseReadonly < SQLite3::TestCase
|
5
|
-
def setup
|
6
|
-
File.unlink 'test-readonly.db' if File.exist?('test-readonly.db')
|
7
|
-
@db = SQLite3::Database.new('test-readonly.db')
|
8
|
-
@db.execute("CREATE TABLE foos (id integer)")
|
9
|
-
@db.close
|
10
|
-
end
|
11
|
-
|
12
|
-
def teardown
|
13
|
-
@db.close unless @db.closed?
|
14
|
-
File.unlink 'test-readonly.db' if File.exist?('test-readonly.db')
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_open_readonly_database
|
18
|
-
@db = SQLite3::Database.new('test-readonly.db', :readonly => true)
|
19
|
-
assert @db.readonly?
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_open_readonly_not_exists_database
|
23
|
-
File.unlink 'test-readonly.db'
|
24
|
-
assert_raise(SQLite3::CantOpenException) do
|
25
|
-
@db = SQLite3::Database.new('test-readonly.db', :readonly => true)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_insert_readonly_database
|
30
|
-
@db = SQLite3::Database.new('test-readonly.db', :readonly => true)
|
31
|
-
assert_raise(SQLite3::ReadOnlyException) do
|
32
|
-
@db.execute("INSERT INTO foos (id) VALUES (12)")
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
module SQLite3
|
4
|
-
class TestDatabaseReadwrite < SQLite3::TestCase
|
5
|
-
def setup
|
6
|
-
File.unlink 'test-readwrite.db' if File.exist?('test-readwrite.db')
|
7
|
-
@db = SQLite3::Database.new('test-readwrite.db')
|
8
|
-
@db.execute("CREATE TABLE foos (id integer)")
|
9
|
-
@db.close
|
10
|
-
end
|
11
|
-
|
12
|
-
def teardown
|
13
|
-
@db.close unless @db.closed?
|
14
|
-
File.unlink 'test-readwrite.db' if File.exist?('test-readwrite.db')
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_open_readwrite_database
|
18
|
-
@db = SQLite3::Database.new('test-readwrite.db', :readwrite => true)
|
19
|
-
assert !@db.readonly?
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_open_readwrite_readonly_database
|
23
|
-
assert_raise(RuntimeError) do
|
24
|
-
@db = SQLite3::Database.new('test-readwrite.db', :readwrite => true, :readonly => true)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_open_readwrite_not_exists_database
|
29
|
-
File.unlink 'test-readwrite.db'
|
30
|
-
assert_raise(SQLite3::CantOpenException) do
|
31
|
-
@db = SQLite3::Database.new('test-readwrite.db', :readonly => true)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_insert_readwrite_database
|
36
|
-
@db = SQLite3::Database.new('test-readwrite.db', :readwrite => true)
|
37
|
-
@db.execute("INSERT INTO foos (id) VALUES (12)")
|
38
|
-
assert @db.changes == 1
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
data/test/test_deprecated.rb
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
module SQLite3
|
4
|
-
class TestDeprecated < SQLite3::TestCase
|
5
|
-
def setup
|
6
|
-
super
|
7
|
-
@warn_before = $-w
|
8
|
-
$-w = false
|
9
|
-
@db = SQLite3::Database.new(':memory:')
|
10
|
-
@db.execute 'CREATE TABLE test_table (name text, age int)'
|
11
|
-
end
|
12
|
-
|
13
|
-
def teardown
|
14
|
-
super
|
15
|
-
$-w = @warn_before
|
16
|
-
@db.close
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_query_with_many_bind_params_not_nil
|
20
|
-
rs = @db.query('select ?, ?', 1, 2)
|
21
|
-
assert_equal [[1, 2]], rs.to_a
|
22
|
-
rs.close
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_execute_with_many_bind_params_not_nil
|
26
|
-
assert_equal [[1, 2]], @db.execute("select ?, ?", 1, 2).to_a
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_query_with_many_bind_params
|
30
|
-
rs = @db.query("select ?, ?", nil, 1)
|
31
|
-
assert_equal [[nil, 1]], rs.to_a
|
32
|
-
rs.close
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_query_with_nil_bind_params
|
36
|
-
rs = @db.query("select 'foo'", nil)
|
37
|
-
assert_equal [['foo']], rs.to_a
|
38
|
-
rs.close
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_execute_with_many_bind_params
|
42
|
-
assert_equal [[nil, 1]], @db.execute("select ?, ?", nil, 1)
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_execute_with_nil_bind_params
|
46
|
-
assert_equal [['foo']], @db.execute("select 'foo'", nil)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
data/test/test_encoding.rb
DELETED
@@ -1,165 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require 'helper'
|
4
|
-
|
5
|
-
module SQLite3
|
6
|
-
class TestEncoding < SQLite3::TestCase
|
7
|
-
def setup
|
8
|
-
@db = SQLite3::Database.new(':memory:')
|
9
|
-
@create = "create table ex(id int, data string)"
|
10
|
-
@insert = "insert into ex(id, data) values (?, ?)"
|
11
|
-
@db.execute(@create);
|
12
|
-
end
|
13
|
-
|
14
|
-
def teardown
|
15
|
-
@db.close
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_select_encoding_on_utf_16
|
19
|
-
str = "foo"
|
20
|
-
utf16 = ([1].pack("I") == [1].pack("N")) ? "UTF-16BE" : "UTF-16LE"
|
21
|
-
db = SQLite3::Database.new(':memory:'.encode(utf16))
|
22
|
-
db.execute @create
|
23
|
-
db.execute "insert into ex (id, data) values (1, \"#{str}\")"
|
24
|
-
|
25
|
-
stmt = db.prepare 'select * from ex where data = ?'
|
26
|
-
['US-ASCII', utf16, 'EUC-JP', 'UTF-8'].each do |enc|
|
27
|
-
stmt.bind_param 1, str.encode(enc)
|
28
|
-
assert_equal 1, stmt.to_a.length
|
29
|
-
stmt.reset!
|
30
|
-
end
|
31
|
-
stmt.close
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_insert_encoding
|
35
|
-
str = "foo"
|
36
|
-
utf16 = ([1].pack("I") == [1].pack("N")) ? "UTF-16BE" : "UTF-16LE"
|
37
|
-
db = SQLite3::Database.new(':memory:'.encode(utf16))
|
38
|
-
db.execute @create
|
39
|
-
stmt = db.prepare @insert
|
40
|
-
|
41
|
-
['US-ASCII', utf16, 'EUC-JP', 'UTF-8'].each_with_index do |enc,i|
|
42
|
-
stmt.bind_param 1, i
|
43
|
-
stmt.bind_param 2, str.encode(enc)
|
44
|
-
stmt.to_a
|
45
|
-
stmt.reset!
|
46
|
-
end
|
47
|
-
stmt.close
|
48
|
-
|
49
|
-
db.execute('select data from ex').flatten.each do |s|
|
50
|
-
assert_equal str, s
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_default_internal_is_honored
|
55
|
-
warn_before = $-w
|
56
|
-
$-w = false
|
57
|
-
|
58
|
-
before_enc = Encoding.default_internal
|
59
|
-
|
60
|
-
str = "壁に耳あり、障子に目あり"
|
61
|
-
stmt = @db.prepare('insert into ex(data) values (?)')
|
62
|
-
stmt.bind_param 1, str
|
63
|
-
stmt.step
|
64
|
-
stmt.close
|
65
|
-
|
66
|
-
Encoding.default_internal = 'EUC-JP'
|
67
|
-
string = @db.execute('select data from ex').first.first
|
68
|
-
|
69
|
-
assert_equal Encoding.default_internal, string.encoding
|
70
|
-
assert_equal str.encode('EUC-JP'), string
|
71
|
-
assert_equal str, string.encode(str.encoding)
|
72
|
-
ensure
|
73
|
-
Encoding.default_internal = before_enc
|
74
|
-
$-w = warn_before
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_blob_is_binary
|
78
|
-
str = "猫舌"
|
79
|
-
@db.execute('create table foo(data text)')
|
80
|
-
stmt = @db.prepare('insert into foo(data) values (?)')
|
81
|
-
stmt.bind_param(1, SQLite3::Blob.new(str))
|
82
|
-
stmt.step
|
83
|
-
stmt.close
|
84
|
-
|
85
|
-
string = @db.execute('select data from foo').first.first
|
86
|
-
assert_equal Encoding.find('ASCII-8BIT'), string.encoding
|
87
|
-
assert_equal str, string.force_encoding('UTF-8')
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_blob_is_ascii8bit
|
91
|
-
str = "猫舌"
|
92
|
-
@db.execute('create table foo(data text)')
|
93
|
-
stmt = @db.prepare('insert into foo(data) values (?)')
|
94
|
-
stmt.bind_param(1, str.dup.force_encoding("ASCII-8BIT"))
|
95
|
-
stmt.step
|
96
|
-
stmt.close
|
97
|
-
|
98
|
-
string = @db.execute('select data from foo').first.first
|
99
|
-
assert_equal Encoding.find('ASCII-8BIT'), string.encoding
|
100
|
-
assert_equal str, string.force_encoding('UTF-8')
|
101
|
-
end
|
102
|
-
|
103
|
-
def test_blob_with_eucjp
|
104
|
-
str = "猫舌".encode("EUC-JP")
|
105
|
-
@db.execute('create table foo(data text)')
|
106
|
-
stmt = @db.prepare('insert into foo(data) values (?)')
|
107
|
-
stmt.bind_param(1, SQLite3::Blob.new(str))
|
108
|
-
stmt.step
|
109
|
-
stmt.close
|
110
|
-
|
111
|
-
string = @db.execute('select data from foo').first.first
|
112
|
-
assert_equal Encoding.find('ASCII-8BIT'), string.encoding
|
113
|
-
assert_equal str, string.force_encoding('EUC-JP')
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_db_with_eucjp
|
117
|
-
db = SQLite3::Database.new(':memory:'.encode('EUC-JP'))
|
118
|
-
assert_equal(Encoding.find('UTF-8'), db.encoding)
|
119
|
-
end
|
120
|
-
|
121
|
-
def test_db_with_utf16
|
122
|
-
utf16 = ([1].pack("I") == [1].pack("N")) ? "UTF-16BE" : "UTF-16LE"
|
123
|
-
|
124
|
-
db = SQLite3::Database.new(':memory:'.encode(utf16))
|
125
|
-
assert_equal(Encoding.find(utf16), db.encoding)
|
126
|
-
end
|
127
|
-
|
128
|
-
def test_statement_eucjp
|
129
|
-
str = "猫舌"
|
130
|
-
@db.execute("insert into ex(data) values ('#{str}')".encode('EUC-JP'))
|
131
|
-
row = @db.execute("select data from ex")
|
132
|
-
assert_equal @db.encoding, row.first.first.encoding
|
133
|
-
assert_equal str, row.first.first
|
134
|
-
end
|
135
|
-
|
136
|
-
def test_statement_utf8
|
137
|
-
str = "猫舌"
|
138
|
-
@db.execute("insert into ex(data) values ('#{str}')")
|
139
|
-
row = @db.execute("select data from ex")
|
140
|
-
assert_equal @db.encoding, row.first.first.encoding
|
141
|
-
assert_equal str, row.first.first
|
142
|
-
end
|
143
|
-
|
144
|
-
def test_encoding
|
145
|
-
assert_equal Encoding.find("UTF-8"), @db.encoding
|
146
|
-
end
|
147
|
-
|
148
|
-
def test_utf_8
|
149
|
-
str = "猫舌"
|
150
|
-
@db.execute(@insert, [10, str])
|
151
|
-
row = @db.execute("select data from ex")
|
152
|
-
assert_equal @db.encoding, row.first.first.encoding
|
153
|
-
assert_equal str, row.first.first
|
154
|
-
end
|
155
|
-
|
156
|
-
def test_euc_jp
|
157
|
-
str = "猫舌".encode('EUC-JP')
|
158
|
-
@db.execute(@insert, [10, str])
|
159
|
-
row = @db.execute("select data from ex")
|
160
|
-
assert_equal @db.encoding, row.first.first.encoding
|
161
|
-
assert_equal str.encode('UTF-8'), row.first.first
|
162
|
-
end
|
163
|
-
|
164
|
-
end if RUBY_VERSION >= '1.9.1'
|
165
|
-
end
|