extralite 1.23 → 1.25
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/.github/workflows/test.yml +1 -1
- data/CHANGELOG.md +16 -0
- data/Gemfile.lock +1 -1
- data/ext/extralite/common.c +2 -2
- data/ext/extralite/database.c +74 -21
- data/ext/extralite/extconf-bundle.rb +9 -2
- data/ext/extralite/extconf.rb +87 -109
- data/ext/extralite/extralite.h +7 -7
- data/ext/extralite/prepared_statement.c +3 -4
- data/extralite-bundle.gemspec +1 -0
- data/extralite.gemspec +2 -0
- data/lib/extralite/sqlite3_constants.rb +109 -1
- data/lib/extralite/version.rb +1 -1
- data/test/test_database.rb +36 -6
- data/test/test_prepared_statement.rb +6 -0
- metadata +2 -4
- data/ext/sqlite3/sqlite3.c +0 -243616
- data/ext/sqlite3/sqlite3.h +0 -12894
@@ -46,5 +46,113 @@ module Extralite
|
|
46
46
|
SQLITE_LIMIT_LIKE_PATTERN_LENGTH = 8
|
47
47
|
SQLITE_LIMIT_VARIABLE_NUMBER = 9
|
48
48
|
SQLITE_LIMIT_TRIGGER_DEPTH = 10
|
49
|
-
SQLITE_LIMIT_WORKER_THREADS = 11
|
49
|
+
SQLITE_LIMIT_WORKER_THREADS = 11
|
50
|
+
|
51
|
+
SQLITE_OK = 0
|
52
|
+
SQLITE_ERROR = 1
|
53
|
+
SQLITE_INTERNAL = 2
|
54
|
+
SQLITE_PERM = 3
|
55
|
+
SQLITE_ABORT = 4
|
56
|
+
SQLITE_BUSY = 5
|
57
|
+
SQLITE_LOCKED = 6
|
58
|
+
SQLITE_NOMEM = 7
|
59
|
+
SQLITE_READONLY = 8
|
60
|
+
SQLITE_INTERRUPT = 9
|
61
|
+
SQLITE_IOERR = 10
|
62
|
+
SQLITE_CORRUPT = 11
|
63
|
+
SQLITE_NOTFOUND = 12
|
64
|
+
SQLITE_FULL = 13
|
65
|
+
SQLITE_CANTOPEN = 14
|
66
|
+
SQLITE_PROTOCOL = 15
|
67
|
+
SQLITE_EMPTY = 16
|
68
|
+
SQLITE_SCHEMA = 17
|
69
|
+
SQLITE_TOOBIG = 18
|
70
|
+
SQLITE_CONSTRAINT = 19
|
71
|
+
SQLITE_MISMATCH = 20
|
72
|
+
SQLITE_MISUSE = 21
|
73
|
+
SQLITE_NOLFS = 22
|
74
|
+
SQLITE_AUTH = 23
|
75
|
+
SQLITE_FORMAT = 24
|
76
|
+
SQLITE_RANGE = 25
|
77
|
+
SQLITE_NOTADB = 26
|
78
|
+
SQLITE_NOTICE = 27
|
79
|
+
SQLITE_WARNING = 28
|
80
|
+
SQLITE_ROW = 100
|
81
|
+
SQLITE_DONE = 101
|
82
|
+
|
83
|
+
SQLITE_ERROR_MISSING_COLLSEQ = (SQLITE_ERROR | (1<<8))
|
84
|
+
SQLITE_ERROR_RETRY = (SQLITE_ERROR | (2<<8))
|
85
|
+
SQLITE_ERROR_SNAPSHOT = (SQLITE_ERROR | (3<<8))
|
86
|
+
SQLITE_IOERR_READ = (SQLITE_IOERR | (1<<8))
|
87
|
+
SQLITE_IOERR_SHORT_READ = (SQLITE_IOERR | (2<<8))
|
88
|
+
SQLITE_IOERR_WRITE = (SQLITE_IOERR | (3<<8))
|
89
|
+
SQLITE_IOERR_FSYNC = (SQLITE_IOERR | (4<<8))
|
90
|
+
SQLITE_IOERR_DIR_FSYNC = (SQLITE_IOERR | (5<<8))
|
91
|
+
SQLITE_IOERR_TRUNCATE = (SQLITE_IOERR | (6<<8))
|
92
|
+
SQLITE_IOERR_FSTAT = (SQLITE_IOERR | (7<<8))
|
93
|
+
SQLITE_IOERR_UNLOCK = (SQLITE_IOERR | (8<<8))
|
94
|
+
SQLITE_IOERR_RDLOCK = (SQLITE_IOERR | (9<<8))
|
95
|
+
SQLITE_IOERR_DELETE = (SQLITE_IOERR | (10<<8))
|
96
|
+
SQLITE_IOERR_BLOCKED = (SQLITE_IOERR | (11<<8))
|
97
|
+
SQLITE_IOERR_NOMEM = (SQLITE_IOERR | (12<<8))
|
98
|
+
SQLITE_IOERR_ACCESS = (SQLITE_IOERR | (13<<8))
|
99
|
+
SQLITE_IOERR_CHECKRESERVEDLOCK = (SQLITE_IOERR | (14<<8))
|
100
|
+
SQLITE_IOERR_LOCK = (SQLITE_IOERR | (15<<8))
|
101
|
+
SQLITE_IOERR_CLOSE = (SQLITE_IOERR | (16<<8))
|
102
|
+
SQLITE_IOERR_DIR_CLOSE = (SQLITE_IOERR | (17<<8))
|
103
|
+
SQLITE_IOERR_SHMOPEN = (SQLITE_IOERR | (18<<8))
|
104
|
+
SQLITE_IOERR_SHMSIZE = (SQLITE_IOERR | (19<<8))
|
105
|
+
SQLITE_IOERR_SHMLOCK = (SQLITE_IOERR | (20<<8))
|
106
|
+
SQLITE_IOERR_SHMMAP = (SQLITE_IOERR | (21<<8))
|
107
|
+
SQLITE_IOERR_SEEK = (SQLITE_IOERR | (22<<8))
|
108
|
+
SQLITE_IOERR_DELETE_NOENT = (SQLITE_IOERR | (23<<8))
|
109
|
+
SQLITE_IOERR_MMAP = (SQLITE_IOERR | (24<<8))
|
110
|
+
SQLITE_IOERR_GETTEMPPATH = (SQLITE_IOERR | (25<<8))
|
111
|
+
SQLITE_IOERR_CONVPATH = (SQLITE_IOERR | (26<<8))
|
112
|
+
SQLITE_IOERR_VNODE = (SQLITE_IOERR | (27<<8))
|
113
|
+
SQLITE_IOERR_AUTH = (SQLITE_IOERR | (28<<8))
|
114
|
+
SQLITE_IOERR_BEGIN_ATOMIC = (SQLITE_IOERR | (29<<8))
|
115
|
+
SQLITE_IOERR_COMMIT_ATOMIC = (SQLITE_IOERR | (30<<8))
|
116
|
+
SQLITE_IOERR_ROLLBACK_ATOMIC = (SQLITE_IOERR | (31<<8))
|
117
|
+
SQLITE_IOERR_DATA = (SQLITE_IOERR | (32<<8))
|
118
|
+
SQLITE_IOERR_CORRUPTFS = (SQLITE_IOERR | (33<<8))
|
119
|
+
SQLITE_LOCKED_SHAREDCACHE = (SQLITE_LOCKED | (1<<8))
|
120
|
+
SQLITE_LOCKED_VTAB = (SQLITE_LOCKED | (2<<8))
|
121
|
+
SQLITE_BUSY_RECOVERY = (SQLITE_BUSY | (1<<8))
|
122
|
+
SQLITE_BUSY_SNAPSHOT = (SQLITE_BUSY | (2<<8))
|
123
|
+
SQLITE_BUSY_TIMEOUT = (SQLITE_BUSY | (3<<8))
|
124
|
+
SQLITE_CANTOPEN_NOTEMPDIR = (SQLITE_CANTOPEN | (1<<8))
|
125
|
+
SQLITE_CANTOPEN_ISDIR = (SQLITE_CANTOPEN | (2<<8))
|
126
|
+
SQLITE_CANTOPEN_FULLPATH = (SQLITE_CANTOPEN | (3<<8))
|
127
|
+
SQLITE_CANTOPEN_CONVPATH = (SQLITE_CANTOPEN | (4<<8))
|
128
|
+
SQLITE_CANTOPEN_DIRTYWAL = (SQLITE_CANTOPEN | (5<<8))
|
129
|
+
SQLITE_CANTOPEN_SYMLINK = (SQLITE_CANTOPEN | (6<<8))
|
130
|
+
SQLITE_CORRUPT_VTAB = (SQLITE_CORRUPT | (1<<8))
|
131
|
+
SQLITE_CORRUPT_SEQUENCE = (SQLITE_CORRUPT | (2<<8))
|
132
|
+
SQLITE_CORRUPT_INDEX = (SQLITE_CORRUPT | (3<<8))
|
133
|
+
SQLITE_READONLY_RECOVERY = (SQLITE_READONLY | (1<<8))
|
134
|
+
SQLITE_READONLY_CANTLOCK = (SQLITE_READONLY | (2<<8))
|
135
|
+
SQLITE_READONLY_ROLLBACK = (SQLITE_READONLY | (3<<8))
|
136
|
+
SQLITE_READONLY_DBMOVED = (SQLITE_READONLY | (4<<8))
|
137
|
+
SQLITE_READONLY_CANTINIT = (SQLITE_READONLY | (5<<8))
|
138
|
+
SQLITE_READONLY_DIRECTORY = (SQLITE_READONLY | (6<<8))
|
139
|
+
SQLITE_ABORT_ROLLBACK = (SQLITE_ABORT | (2<<8))
|
140
|
+
SQLITE_CONSTRAINT_CHECK = (SQLITE_CONSTRAINT | (1<<8))
|
141
|
+
SQLITE_CONSTRAINT_COMMITHOOK = (SQLITE_CONSTRAINT | (2<<8))
|
142
|
+
SQLITE_CONSTRAINT_FOREIGNKEY = (SQLITE_CONSTRAINT | (3<<8))
|
143
|
+
SQLITE_CONSTRAINT_FUNCTION = (SQLITE_CONSTRAINT | (4<<8))
|
144
|
+
SQLITE_CONSTRAINT_NOTNULL = (SQLITE_CONSTRAINT | (5<<8))
|
145
|
+
SQLITE_CONSTRAINT_PRIMARYKEY = (SQLITE_CONSTRAINT | (6<<8))
|
146
|
+
SQLITE_CONSTRAINT_TRIGGER = (SQLITE_CONSTRAINT | (7<<8))
|
147
|
+
SQLITE_CONSTRAINT_UNIQUE = (SQLITE_CONSTRAINT | (8<<8))
|
148
|
+
SQLITE_CONSTRAINT_VTAB = (SQLITE_CONSTRAINT | (9<<8))
|
149
|
+
SQLITE_CONSTRAINT_ROWID = (SQLITE_CONSTRAINT |(10<<8))
|
150
|
+
SQLITE_CONSTRAINT_PINNED = (SQLITE_CONSTRAINT |(11<<8))
|
151
|
+
SQLITE_CONSTRAINT_DATATYPE = (SQLITE_CONSTRAINT |(12<<8))
|
152
|
+
SQLITE_NOTICE_RECOVER_WAL = (SQLITE_NOTICE | (1<<8))
|
153
|
+
SQLITE_NOTICE_RECOVER_ROLLBACK = (SQLITE_NOTICE | (2<<8))
|
154
|
+
SQLITE_WARNING_AUTOINDEX = (SQLITE_WARNING | (1<<8))
|
155
|
+
SQLITE_AUTH_USER = (SQLITE_AUTH | (1<<8))
|
156
|
+
SQLITE_OK_LOAD_PERMANENTLY = (SQLITE_OK | (1<<8))
|
157
|
+
SQLITE_OK_SYMLINK = (SQLITE_OK | (2<<8))
|
50
158
|
end
|
data/lib/extralite/version.rb
CHANGED
data/test/test_database.rb
CHANGED
@@ -169,8 +169,6 @@ end
|
|
169
169
|
assert_nil r
|
170
170
|
end
|
171
171
|
|
172
|
-
|
173
|
-
|
174
172
|
def test_extension_loading
|
175
173
|
case RUBY_PLATFORM
|
176
174
|
when /linux/
|
@@ -291,7 +289,7 @@ end
|
|
291
289
|
db1.query('begin exclusive')
|
292
290
|
assert_raises(Extralite::BusyError) { db2.query('begin exclusive') }
|
293
291
|
|
294
|
-
db2.busy_timeout =
|
292
|
+
db2.busy_timeout = 3
|
295
293
|
t0 = Time.now
|
296
294
|
t = Thread.new { sleep 0.1; db1.query('rollback') }
|
297
295
|
result = db2.query('begin exclusive')
|
@@ -300,19 +298,24 @@ end
|
|
300
298
|
assert_equal [], result
|
301
299
|
assert t1 - t0 >= 0.1
|
302
300
|
db2.query('rollback')
|
301
|
+
t.join
|
303
302
|
|
304
303
|
# try to provoke a timeout
|
305
304
|
db1.query('begin exclusive')
|
306
|
-
db2.busy_timeout =
|
305
|
+
db2.busy_timeout = nil
|
306
|
+
assert_raises(Extralite::BusyError) { db2.query('begin exclusive') }
|
307
|
+
|
308
|
+
db2.busy_timeout = 0.2
|
307
309
|
t0 = Time.now
|
308
310
|
t = Thread.new do
|
309
|
-
sleep
|
311
|
+
sleep 3
|
310
312
|
ensure
|
311
313
|
db1.query('rollback')
|
312
314
|
end
|
313
315
|
assert_raises(Extralite::BusyError) { db2.query('begin exclusive') }
|
316
|
+
|
314
317
|
t1 = Time.now
|
315
|
-
assert t1 - t0 >= 0.
|
318
|
+
assert t1 - t0 >= 0.2
|
316
319
|
t.kill
|
317
320
|
t.join
|
318
321
|
|
@@ -331,6 +334,33 @@ end
|
|
331
334
|
|
332
335
|
assert_equal 3, @db.total_changes
|
333
336
|
end
|
337
|
+
|
338
|
+
def test_database_errcode_errmsg
|
339
|
+
assert_equal 0, @db.errcode
|
340
|
+
assert_equal 'not an error', @db.errmsg
|
341
|
+
|
342
|
+
@db.query('select foo') rescue nil
|
343
|
+
|
344
|
+
assert_equal 1, @db.errcode
|
345
|
+
assert_equal 'no such column: foo', @db.errmsg
|
346
|
+
|
347
|
+
if Extralite.sqlite3_version >= '3.38.5'
|
348
|
+
assert_equal 7, @db.error_offset
|
349
|
+
end
|
350
|
+
|
351
|
+
@db.query('create table t2 (v not null)')
|
352
|
+
|
353
|
+
assert_raises(Extralite::Error) { @db.query('insert into t2 values (null)') }
|
354
|
+
assert_equal Extralite::SQLITE_CONSTRAINT_NOTNULL, @db.errcode
|
355
|
+
assert_equal 'NOT NULL constraint failed: t2.v', @db.errmsg
|
356
|
+
end
|
357
|
+
|
358
|
+
|
359
|
+
def test_close_with_open_prepared_statement
|
360
|
+
stmt = @db.prepare('select * from t')
|
361
|
+
stmt.query
|
362
|
+
@db.close
|
363
|
+
end
|
334
364
|
end
|
335
365
|
|
336
366
|
class ScenarioTest < MiniTest::Test
|
@@ -216,4 +216,10 @@ end
|
|
216
216
|
assert_equal 3, @stmt.status(Extralite::SQLITE_STMTSTATUS_RUN, true)
|
217
217
|
assert_equal 0, @stmt.status(Extralite::SQLITE_STMTSTATUS_RUN)
|
218
218
|
end
|
219
|
+
|
220
|
+
def test_query_after_db_close
|
221
|
+
assert_equal [{ x: 4, y: 5, z: 6}], @stmt.query(4)
|
222
|
+
@db.close
|
223
|
+
assert_equal [{ x: 4, y: 5, z: 6}], @stmt.query(4)
|
224
|
+
end
|
219
225
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: extralite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.25'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -107,8 +107,6 @@ files:
|
|
107
107
|
- ext/extralite/extralite_ext.c
|
108
108
|
- ext/extralite/extralite_sqlite3.c
|
109
109
|
- ext/extralite/prepared_statement.c
|
110
|
-
- ext/sqlite3/sqlite3.c
|
111
|
-
- ext/sqlite3/sqlite3.h
|
112
110
|
- extralite-bundle.gemspec
|
113
111
|
- extralite.gemspec
|
114
112
|
- gemspec.rb
|