koffi 2.2.1 → 2.2.2-beta.1
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.
- package/package.json +1 -1
- package/src/koffi/build/2.2.2-beta.1/koffi_darwin_arm64.tar.gz +0 -0
- package/src/koffi/build/2.2.2-beta.1/koffi_darwin_x64.tar.gz +0 -0
- package/src/koffi/build/2.2.2-beta.1/koffi_freebsd_arm64.tar.gz +0 -0
- package/src/koffi/build/2.2.2-beta.1/koffi_freebsd_ia32.tar.gz +0 -0
- package/src/koffi/build/2.2.2-beta.1/koffi_freebsd_x64.tar.gz +0 -0
- package/src/koffi/build/2.2.2-beta.1/koffi_linux_arm32hf.tar.gz +0 -0
- package/src/koffi/build/2.2.2-beta.1/koffi_linux_arm64.tar.gz +0 -0
- package/src/koffi/build/2.2.2-beta.1/koffi_linux_ia32.tar.gz +0 -0
- package/src/koffi/build/2.2.2-beta.1/koffi_linux_riscv64hf64.tar.gz +0 -0
- package/src/koffi/build/2.2.2-beta.1/koffi_linux_x64.tar.gz +0 -0
- package/src/koffi/build/2.2.2-beta.1/koffi_openbsd_ia32.tar.gz +0 -0
- package/src/koffi/build/2.2.2-beta.1/koffi_openbsd_x64.tar.gz +0 -0
- package/src/koffi/build/2.2.2-beta.1/koffi_win32_arm64.tar.gz +0 -0
- package/src/koffi/build/2.2.2-beta.1/koffi_win32_ia32.tar.gz +0 -0
- package/src/koffi/build/2.2.2-beta.1/koffi_win32_x64.tar.gz +0 -0
- package/src/koffi/qemu/qemu.js +12 -10
- package/src/koffi/src/abi_arm32.cc +7 -12
- package/src/koffi/src/abi_arm64.cc +7 -12
- package/src/koffi/src/abi_riscv64.cc +7 -12
- package/src/koffi/src/abi_x64_sysv.cc +7 -12
- package/src/koffi/src/abi_x64_win.cc +7 -12
- package/src/koffi/src/abi_x86.cc +7 -12
- package/src/koffi/src/call.cc +51 -2
- package/src/koffi/src/call.hh +6 -1
- package/src/koffi/src/ffi.cc +61 -7
- package/src/koffi/src/ffi.hh +2 -0
- package/src/koffi/src/index.js +6 -2
- package/src/koffi/test/CMakeLists.txt +1 -1
- package/src/koffi/test/async.js +3 -0
- package/src/koffi/test/callbacks.js +11 -0
- package/vendor/{sqlite3mc → sqlite3}/sqlite3.c +139 -43
- package/vendor/{sqlite3mc → sqlite3}/sqlite3.h +10 -3
- package/vendor/{sqlite3mc → sqlite3}/sqlite3ext.h +0 -0
- package/vendor/{sqlite3mc → sqlite3}/sqlite3mc.c +156 -53
- package/vendor/{sqlite3mc → sqlite3}/sqlite3mc.def +0 -0
- package/vendor/{sqlite3mc → sqlite3}/sqlite3mc.h +12 -5
- package/vendor/sqlite3/wasm/README.txt +23 -0
- package/vendor/sqlite3/wasm/common/SqliteTestUtil.js +236 -0
- package/vendor/sqlite3/wasm/common/emscripten.css +24 -0
- package/vendor/sqlite3/wasm/common/testing.css +63 -0
- package/vendor/sqlite3/wasm/demo-123-worker.html +44 -0
- package/vendor/sqlite3/wasm/demo-123.html +24 -0
- package/vendor/sqlite3/wasm/demo-123.js +289 -0
- package/vendor/sqlite3/wasm/demo-jsstorage.html +49 -0
- package/vendor/sqlite3/wasm/demo-jsstorage.js +114 -0
- package/vendor/sqlite3/wasm/demo-worker1-promiser.html +34 -0
- package/vendor/sqlite3/wasm/demo-worker1-promiser.js +270 -0
- package/vendor/sqlite3/wasm/demo-worker1.html +34 -0
- package/vendor/sqlite3/wasm/demo-worker1.js +345 -0
- package/vendor/sqlite3/wasm/index.html +90 -0
- package/vendor/sqlite3/wasm/jswasm/sqlite3-opfs-async-proxy.js +830 -0
- package/vendor/sqlite3/wasm/jswasm/sqlite3-worker1-promiser.js +259 -0
- package/vendor/sqlite3/wasm/jswasm/sqlite3-worker1.js +49 -0
- package/vendor/sqlite3/wasm/jswasm/sqlite3.js +10119 -0
- package/vendor/sqlite3/wasm/jswasm/sqlite3.wasm +0 -0
- package/vendor/sqlite3/wasm/tester1-worker.html +63 -0
- package/vendor/sqlite3/wasm/tester1.html +28 -0
- package/vendor/sqlite3/wasm/tester1.js +1864 -0
- package/src/koffi/build/2.2.1/koffi_darwin_arm64.tar.gz +0 -0
- package/src/koffi/build/2.2.1/koffi_darwin_x64.tar.gz +0 -0
- package/src/koffi/build/2.2.1/koffi_freebsd_arm64.tar.gz +0 -0
- package/src/koffi/build/2.2.1/koffi_freebsd_ia32.tar.gz +0 -0
- package/src/koffi/build/2.2.1/koffi_freebsd_x64.tar.gz +0 -0
- package/src/koffi/build/2.2.1/koffi_linux_arm32hf.tar.gz +0 -0
- package/src/koffi/build/2.2.1/koffi_linux_arm64.tar.gz +0 -0
- package/src/koffi/build/2.2.1/koffi_linux_ia32.tar.gz +0 -0
- package/src/koffi/build/2.2.1/koffi_linux_riscv64hf64.tar.gz +0 -0
- package/src/koffi/build/2.2.1/koffi_linux_x64.tar.gz +0 -0
- package/src/koffi/build/2.2.1/koffi_openbsd_ia32.tar.gz +0 -0
- package/src/koffi/build/2.2.1/koffi_openbsd_x64.tar.gz +0 -0
- package/src/koffi/build/2.2.1/koffi_win32_arm64.tar.gz +0 -0
- package/src/koffi/build/2.2.1/koffi_win32_ia32.tar.gz +0 -0
- package/src/koffi/build/2.2.1/koffi_win32_x64.tar.gz +0 -0
package/src/koffi/test/async.js
CHANGED
|
@@ -28,6 +28,8 @@ const PackedBFG = koffi.pack('PackedBFG', {
|
|
|
28
28
|
})
|
|
29
29
|
});
|
|
30
30
|
|
|
31
|
+
const CharCallback = koffi.callback('int CharCallback(int idx, char c)');
|
|
32
|
+
|
|
31
33
|
main();
|
|
32
34
|
|
|
33
35
|
async function main() {
|
|
@@ -46,6 +48,7 @@ async function test() {
|
|
|
46
48
|
|
|
47
49
|
const ConcatenateToInt1 = lib.func('ConcatenateToInt1', 'int64_t', Array(12).fill('int8_t'));
|
|
48
50
|
const MakePackedBFG = lib.func('PackedBFG __fastcall MakePackedBFG(int x, double y, _Out_ PackedBFG *p, const char *str)');
|
|
51
|
+
const CallMeChar = lib.func('int CallMeChar(CharCallback *func)');
|
|
49
52
|
|
|
50
53
|
let promises = [];
|
|
51
54
|
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
const koffi = require('./build/koffi.node');
|
|
17
17
|
const assert = require('assert');
|
|
18
|
+
const util = require('util');
|
|
18
19
|
|
|
19
20
|
const BFG = koffi.struct('BFG', {
|
|
20
21
|
a: 'int8_t',
|
|
@@ -249,4 +250,14 @@ async function test() {
|
|
|
249
250
|
let ret = CallMeChar(cb);
|
|
250
251
|
assert.equal(ret, 97 + 98);
|
|
251
252
|
}
|
|
253
|
+
|
|
254
|
+
// Test callback inside async function
|
|
255
|
+
{
|
|
256
|
+
let chars = [97, 98];
|
|
257
|
+
|
|
258
|
+
let cb = koffi.register((idx, c) => (idx + 1) * c, 'CharCallback *');
|
|
259
|
+
let ret = await util.promisify(CallMeChar.async)(cb);
|
|
260
|
+
|
|
261
|
+
assert.equal(ret, 97 + 2 * 98);
|
|
262
|
+
}
|
|
252
263
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/******************************************************************************
|
|
2
2
|
** This file is an amalgamation of many separate C source files from SQLite
|
|
3
|
-
** version 3.40.
|
|
3
|
+
** version 3.40.1. By combining all the individual C code files into this
|
|
4
4
|
** single large file, the entire code can be compiled as a single translation
|
|
5
5
|
** unit. This allows many compilers to do optimizations that would not be
|
|
6
6
|
** possible if the files were compiled separately. Performance improvements
|
|
@@ -452,9 +452,9 @@ extern "C" {
|
|
|
452
452
|
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
|
|
453
453
|
** [sqlite_version()] and [sqlite_source_id()].
|
|
454
454
|
*/
|
|
455
|
-
#define SQLITE_VERSION "3.40.
|
|
456
|
-
#define SQLITE_VERSION_NUMBER
|
|
457
|
-
#define SQLITE_SOURCE_ID "2022-
|
|
455
|
+
#define SQLITE_VERSION "3.40.1"
|
|
456
|
+
#define SQLITE_VERSION_NUMBER 3040001
|
|
457
|
+
#define SQLITE_SOURCE_ID "2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24"
|
|
458
458
|
|
|
459
459
|
/*
|
|
460
460
|
** CAPI3REF: Run-Time Library Version Numbers
|
|
@@ -1498,6 +1498,12 @@ struct sqlite3_io_methods {
|
|
|
1498
1498
|
**
|
|
1499
1499
|
** <li>[[SQLITE_FCNTL_CKSM_FILE]]
|
|
1500
1500
|
** Used by the cksmvfs VFS module only.
|
|
1501
|
+
**
|
|
1502
|
+
** <li>[[SQLITE_FCNTL_RESET_CACHE]]
|
|
1503
|
+
** If there is currently no transaction open on the database, and the
|
|
1504
|
+
** database is not a temp db, then this file-control purges the contents
|
|
1505
|
+
** of the in-memory page cache. If there is an open transaction, or if
|
|
1506
|
+
** the db is a temp-db, it is a no-op, not an error.
|
|
1501
1507
|
** </ul>
|
|
1502
1508
|
*/
|
|
1503
1509
|
#define SQLITE_FCNTL_LOCKSTATE 1
|
|
@@ -1540,6 +1546,7 @@ struct sqlite3_io_methods {
|
|
|
1540
1546
|
#define SQLITE_FCNTL_CKPT_START 39
|
|
1541
1547
|
#define SQLITE_FCNTL_EXTERNAL_READER 40
|
|
1542
1548
|
#define SQLITE_FCNTL_CKSM_FILE 41
|
|
1549
|
+
#define SQLITE_FCNTL_RESET_CACHE 42
|
|
1543
1550
|
|
|
1544
1551
|
/* deprecated names */
|
|
1545
1552
|
#define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE
|
|
@@ -15714,6 +15721,8 @@ SQLITE_PRIVATE int sqlite3BtreeCheckpoint(Btree*, int, int *, int *);
|
|
|
15714
15721
|
|
|
15715
15722
|
SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor*, BtCursor*, i64);
|
|
15716
15723
|
|
|
15724
|
+
SQLITE_PRIVATE void sqlite3BtreeClearCache(Btree*);
|
|
15725
|
+
|
|
15717
15726
|
/*
|
|
15718
15727
|
** If we are not using shared cache, then there is no need to
|
|
15719
15728
|
** use mutexes to access the BtShared structures. So make the
|
|
@@ -27290,9 +27299,13 @@ static int memsys5Roundup(int n){
|
|
|
27290
27299
|
if( n<=mem5.szAtom ) return mem5.szAtom;
|
|
27291
27300
|
return mem5.szAtom*2;
|
|
27292
27301
|
}
|
|
27293
|
-
if( n>
|
|
27302
|
+
if( n>0x10000000 ){
|
|
27303
|
+
if( n>0x40000000 ) return 0;
|
|
27304
|
+
if( n>0x20000000 ) return 0x40000000;
|
|
27305
|
+
return 0x20000000;
|
|
27306
|
+
}
|
|
27294
27307
|
for(iFullSz=mem5.szAtom*8; iFullSz<n; iFullSz *= 4);
|
|
27295
|
-
if( (iFullSz/2)>=n ) return iFullSz/2;
|
|
27308
|
+
if( (iFullSz/2)>=(i64)n ) return iFullSz/2;
|
|
27296
27309
|
return iFullSz;
|
|
27297
27310
|
}
|
|
27298
27311
|
|
|
@@ -37350,6 +37363,9 @@ static int robust_open(const char *z, int f, mode_t m){
|
|
|
37350
37363
|
break;
|
|
37351
37364
|
}
|
|
37352
37365
|
if( fd>=SQLITE_MINIMUM_FILE_DESCRIPTOR ) break;
|
|
37366
|
+
if( (f & (O_EXCL|O_CREAT))==(O_EXCL|O_CREAT) ){
|
|
37367
|
+
(void)osUnlink(z);
|
|
37368
|
+
}
|
|
37353
37369
|
osClose(fd);
|
|
37354
37370
|
sqlite3_log(SQLITE_WARNING,
|
|
37355
37371
|
"attempt to open \"%s\" as file descriptor %d", z, fd);
|
|
@@ -51083,6 +51099,7 @@ static int memdbTruncate(sqlite3_file*, sqlite3_int64 size);
|
|
|
51083
51099
|
static int memdbSync(sqlite3_file*, int flags);
|
|
51084
51100
|
static int memdbFileSize(sqlite3_file*, sqlite3_int64 *pSize);
|
|
51085
51101
|
static int memdbLock(sqlite3_file*, int);
|
|
51102
|
+
static int memdbUnlock(sqlite3_file*, int);
|
|
51086
51103
|
/* static int memdbCheckReservedLock(sqlite3_file*, int *pResOut);// not used */
|
|
51087
51104
|
static int memdbFileControl(sqlite3_file*, int op, void *pArg);
|
|
51088
51105
|
/* static int memdbSectorSize(sqlite3_file*); // not used */
|
|
@@ -51141,7 +51158,7 @@ static const sqlite3_io_methods memdb_io_methods = {
|
|
|
51141
51158
|
memdbSync, /* xSync */
|
|
51142
51159
|
memdbFileSize, /* xFileSize */
|
|
51143
51160
|
memdbLock, /* xLock */
|
|
51144
|
-
|
|
51161
|
+
memdbUnlock, /* xUnlock */
|
|
51145
51162
|
0, /* memdbCheckReservedLock, */ /* xCheckReservedLock */
|
|
51146
51163
|
memdbFileControl, /* xFileControl */
|
|
51147
51164
|
0, /* memdbSectorSize,*/ /* xSectorSize */
|
|
@@ -51342,39 +51359,81 @@ static int memdbLock(sqlite3_file *pFile, int eLock){
|
|
|
51342
51359
|
MemFile *pThis = (MemFile*)pFile;
|
|
51343
51360
|
MemStore *p = pThis->pStore;
|
|
51344
51361
|
int rc = SQLITE_OK;
|
|
51345
|
-
if( eLock
|
|
51362
|
+
if( eLock<=pThis->eLock ) return SQLITE_OK;
|
|
51346
51363
|
memdbEnter(p);
|
|
51347
|
-
|
|
51348
|
-
|
|
51349
|
-
|
|
51350
|
-
|
|
51351
|
-
|
|
51352
|
-
|
|
51353
|
-
|
|
51354
|
-
|
|
51364
|
+
|
|
51365
|
+
assert( p->nWrLock==0 || p->nWrLock==1 );
|
|
51366
|
+
assert( pThis->eLock<=SQLITE_LOCK_SHARED || p->nWrLock==1 );
|
|
51367
|
+
assert( pThis->eLock==SQLITE_LOCK_NONE || p->nRdLock>=1 );
|
|
51368
|
+
|
|
51369
|
+
if( eLock>SQLITE_LOCK_SHARED && (p->mFlags & SQLITE_DESERIALIZE_READONLY) ){
|
|
51370
|
+
rc = SQLITE_READONLY;
|
|
51371
|
+
}else{
|
|
51372
|
+
switch( eLock ){
|
|
51373
|
+
case SQLITE_LOCK_SHARED: {
|
|
51374
|
+
assert( pThis->eLock==SQLITE_LOCK_NONE );
|
|
51375
|
+
if( p->nWrLock>0 ){
|
|
51376
|
+
rc = SQLITE_BUSY;
|
|
51377
|
+
}else{
|
|
51378
|
+
p->nRdLock++;
|
|
51379
|
+
}
|
|
51380
|
+
break;
|
|
51381
|
+
};
|
|
51382
|
+
|
|
51383
|
+
case SQLITE_LOCK_RESERVED:
|
|
51384
|
+
case SQLITE_LOCK_PENDING: {
|
|
51385
|
+
assert( pThis->eLock>=SQLITE_LOCK_SHARED );
|
|
51386
|
+
if( ALWAYS(pThis->eLock==SQLITE_LOCK_SHARED) ){
|
|
51387
|
+
if( p->nWrLock>0 ){
|
|
51388
|
+
rc = SQLITE_BUSY;
|
|
51389
|
+
}else{
|
|
51390
|
+
p->nWrLock = 1;
|
|
51391
|
+
}
|
|
51392
|
+
}
|
|
51393
|
+
break;
|
|
51394
|
+
}
|
|
51395
|
+
|
|
51396
|
+
default: {
|
|
51397
|
+
assert( eLock==SQLITE_LOCK_EXCLUSIVE );
|
|
51398
|
+
assert( pThis->eLock>=SQLITE_LOCK_SHARED );
|
|
51399
|
+
if( p->nRdLock>1 ){
|
|
51400
|
+
rc = SQLITE_BUSY;
|
|
51401
|
+
}else if( pThis->eLock==SQLITE_LOCK_SHARED ){
|
|
51402
|
+
p->nWrLock = 1;
|
|
51403
|
+
}
|
|
51404
|
+
break;
|
|
51355
51405
|
}
|
|
51356
51406
|
}
|
|
51357
|
-
}
|
|
51358
|
-
|
|
51359
|
-
|
|
51360
|
-
|
|
51361
|
-
|
|
51362
|
-
|
|
51363
|
-
|
|
51364
|
-
|
|
51407
|
+
}
|
|
51408
|
+
if( rc==SQLITE_OK ) pThis->eLock = eLock;
|
|
51409
|
+
memdbLeave(p);
|
|
51410
|
+
return rc;
|
|
51411
|
+
}
|
|
51412
|
+
|
|
51413
|
+
/*
|
|
51414
|
+
** Unlock an memdb-file.
|
|
51415
|
+
*/
|
|
51416
|
+
static int memdbUnlock(sqlite3_file *pFile, int eLock){
|
|
51417
|
+
MemFile *pThis = (MemFile*)pFile;
|
|
51418
|
+
MemStore *p = pThis->pStore;
|
|
51419
|
+
if( eLock>=pThis->eLock ) return SQLITE_OK;
|
|
51420
|
+
memdbEnter(p);
|
|
51421
|
+
|
|
51422
|
+
assert( eLock==SQLITE_LOCK_SHARED || eLock==SQLITE_LOCK_NONE );
|
|
51423
|
+
if( eLock==SQLITE_LOCK_SHARED ){
|
|
51424
|
+
if( ALWAYS(pThis->eLock>SQLITE_LOCK_SHARED) ){
|
|
51425
|
+
p->nWrLock--;
|
|
51365
51426
|
}
|
|
51366
51427
|
}else{
|
|
51367
|
-
assert( eLock==SQLITE_LOCK_NONE );
|
|
51368
51428
|
if( pThis->eLock>SQLITE_LOCK_SHARED ){
|
|
51369
|
-
|
|
51370
|
-
p->nWrLock = 0;
|
|
51429
|
+
p->nWrLock--;
|
|
51371
51430
|
}
|
|
51372
|
-
assert( p->nRdLock>0 );
|
|
51373
51431
|
p->nRdLock--;
|
|
51374
51432
|
}
|
|
51375
|
-
|
|
51433
|
+
|
|
51434
|
+
pThis->eLock = eLock;
|
|
51376
51435
|
memdbLeave(p);
|
|
51377
|
-
return
|
|
51436
|
+
return SQLITE_OK;
|
|
51378
51437
|
}
|
|
51379
51438
|
|
|
51380
51439
|
#if 0
|
|
@@ -51484,7 +51543,7 @@ static int memdbOpen(
|
|
|
51484
51543
|
|
|
51485
51544
|
memset(pFile, 0, sizeof(*pFile));
|
|
51486
51545
|
szName = sqlite3Strlen30(zName);
|
|
51487
|
-
if( szName>1 && zName[0]=='/' ){
|
|
51546
|
+
if( szName>1 && (zName[0]=='/' || zName[0]=='\\') ){
|
|
51488
51547
|
int i;
|
|
51489
51548
|
#ifndef SQLITE_MUTEX_OMIT
|
|
51490
51549
|
sqlite3_mutex *pVfsMutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1);
|
|
@@ -51831,6 +51890,13 @@ end_deserialize:
|
|
|
51831
51890
|
return rc;
|
|
51832
51891
|
}
|
|
51833
51892
|
|
|
51893
|
+
/*
|
|
51894
|
+
** Return true if the VFS is the memvfs.
|
|
51895
|
+
*/
|
|
51896
|
+
SQLITE_PRIVATE int sqlite3IsMemdb(const sqlite3_vfs *pVfs){
|
|
51897
|
+
return pVfs==&memdb_vfs;
|
|
51898
|
+
}
|
|
51899
|
+
|
|
51834
51900
|
/*
|
|
51835
51901
|
** This routine is called when the extension is loaded.
|
|
51836
51902
|
** Register the new VFS.
|
|
@@ -79159,6 +79225,17 @@ SQLITE_PRIVATE int sqlite3BtreeIsReadonly(Btree *p){
|
|
|
79159
79225
|
*/
|
|
79160
79226
|
SQLITE_PRIVATE int sqlite3HeaderSizeBtree(void){ return ROUND8(sizeof(MemPage)); }
|
|
79161
79227
|
|
|
79228
|
+
/*
|
|
79229
|
+
** If no transaction is active and the database is not a temp-db, clear
|
|
79230
|
+
** the in-memory pager cache.
|
|
79231
|
+
*/
|
|
79232
|
+
SQLITE_PRIVATE void sqlite3BtreeClearCache(Btree *p){
|
|
79233
|
+
BtShared *pBt = p->pBt;
|
|
79234
|
+
if( pBt->inTransaction==TRANS_NONE ){
|
|
79235
|
+
sqlite3PagerClearCache(pBt->pPager);
|
|
79236
|
+
}
|
|
79237
|
+
}
|
|
79238
|
+
|
|
79162
79239
|
#if !defined(SQLITE_OMIT_SHARED_CACHE)
|
|
79163
79240
|
/*
|
|
79164
79241
|
** Return true if the Btree passed as the only argument is sharable.
|
|
@@ -83398,7 +83475,7 @@ SQLITE_PRIVATE void sqlite3VdbeAppendP4(Vdbe *p, void *pP4, int n){
|
|
|
83398
83475
|
if( p->db->mallocFailed ){
|
|
83399
83476
|
freeP4(p->db, n, pP4);
|
|
83400
83477
|
}else{
|
|
83401
|
-
assert( pP4!=0 );
|
|
83478
|
+
assert( pP4!=0 || n==P4_DYNAMIC );
|
|
83402
83479
|
assert( p->nOp>0 );
|
|
83403
83480
|
pOp = &p->aOp[p->nOp-1];
|
|
83404
83481
|
assert( pOp->p4type==P4_NOTUSED );
|
|
@@ -132310,7 +132387,7 @@ static const sqlite3_api_routines sqlite3Apis = {
|
|
|
132310
132387
|
#endif
|
|
132311
132388
|
sqlite3_db_name,
|
|
132312
132389
|
/* Version 3.40.0 and later */
|
|
132313
|
-
|
|
132390
|
+
sqlite3_value_encoding
|
|
132314
132391
|
};
|
|
132315
132392
|
|
|
132316
132393
|
/* True if x is the directory separator character
|
|
@@ -145451,7 +145528,7 @@ SQLITE_PRIVATE Trigger *sqlite3TriggerList(Parse *pParse, Table *pTab){
|
|
|
145451
145528
|
if( pTrig->pTabSchema==pTab->pSchema
|
|
145452
145529
|
&& pTrig->table
|
|
145453
145530
|
&& 0==sqlite3StrICmp(pTrig->table, pTab->zName)
|
|
145454
|
-
&& pTrig->pTabSchema!=pTmpSchema
|
|
145531
|
+
&& (pTrig->pTabSchema!=pTmpSchema || pTrig->bReturning)
|
|
145455
145532
|
){
|
|
145456
145533
|
pTrig->pNext = pList;
|
|
145457
145534
|
pList = pTrig;
|
|
@@ -155635,7 +155712,7 @@ SQLITE_PRIVATE int sqlite3WhereIsDistinct(WhereInfo *pWInfo){
|
|
|
155635
155712
|
** block sorting is required.
|
|
155636
155713
|
*/
|
|
155637
155714
|
SQLITE_PRIVATE int sqlite3WhereIsOrdered(WhereInfo *pWInfo){
|
|
155638
|
-
return pWInfo->nOBSat;
|
|
155715
|
+
return pWInfo->nOBSat<0 ? 0 : pWInfo->nOBSat;
|
|
155639
155716
|
}
|
|
155640
155717
|
|
|
155641
155718
|
/*
|
|
@@ -174543,7 +174620,7 @@ SQLITE_API int sqlite3_overload_function(
|
|
|
174543
174620
|
rc = sqlite3FindFunction(db, zName, nArg, SQLITE_UTF8, 0)!=0;
|
|
174544
174621
|
sqlite3_mutex_leave(db->mutex);
|
|
174545
174622
|
if( rc ) return SQLITE_OK;
|
|
174546
|
-
zCopy = sqlite3_mprintf(zName);
|
|
174623
|
+
zCopy = sqlite3_mprintf("%s", zName);
|
|
174547
174624
|
if( zCopy==0 ) return SQLITE_NOMEM;
|
|
174548
174625
|
return sqlite3_create_function_v2(db, zName, nArg, SQLITE_UTF8,
|
|
174549
174626
|
zCopy, sqlite3InvalidFunction, 0, 0, sqlite3_free);
|
|
@@ -176375,6 +176452,9 @@ SQLITE_API int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, vo
|
|
|
176375
176452
|
sqlite3BtreeSetPageSize(pBtree, 0, iNew, 0);
|
|
176376
176453
|
}
|
|
176377
176454
|
rc = SQLITE_OK;
|
|
176455
|
+
}else if( op==SQLITE_FCNTL_RESET_CACHE ){
|
|
176456
|
+
sqlite3BtreeClearCache(pBtree);
|
|
176457
|
+
rc = SQLITE_OK;
|
|
176378
176458
|
}else{
|
|
176379
176459
|
int nSave = db->busyHandler.nBusy;
|
|
176380
176460
|
rc = sqlite3OsFileControl(fd, op, pArg);
|
|
@@ -217790,6 +217870,22 @@ static int sessionChangesetNextOne(
|
|
|
217790
217870
|
if( p->op==SQLITE_INSERT ) p->op = SQLITE_DELETE;
|
|
217791
217871
|
else if( p->op==SQLITE_DELETE ) p->op = SQLITE_INSERT;
|
|
217792
217872
|
}
|
|
217873
|
+
|
|
217874
|
+
/* If this is an UPDATE that is part of a changeset, then check that
|
|
217875
|
+
** there are no fields in the old.* record that are not (a) PK fields,
|
|
217876
|
+
** or (b) also present in the new.* record.
|
|
217877
|
+
**
|
|
217878
|
+
** Such records are technically corrupt, but the rebaser was at one
|
|
217879
|
+
** point generating them. Under most circumstances this is benign, but
|
|
217880
|
+
** can cause spurious SQLITE_RANGE errors when applying the changeset. */
|
|
217881
|
+
if( p->bPatchset==0 && p->op==SQLITE_UPDATE){
|
|
217882
|
+
for(i=0; i<p->nCol; i++){
|
|
217883
|
+
if( p->abPK[i]==0 && p->apValue[i+p->nCol]==0 ){
|
|
217884
|
+
sqlite3ValueFree(p->apValue[i]);
|
|
217885
|
+
p->apValue[i] = 0;
|
|
217886
|
+
}
|
|
217887
|
+
}
|
|
217888
|
+
}
|
|
217793
217889
|
}
|
|
217794
217890
|
|
|
217795
217891
|
return SQLITE_ROW;
|
|
@@ -219986,7 +220082,7 @@ static void sessionAppendPartialUpdate(
|
|
|
219986
220082
|
if( !pIter->abPK[i] && a1[0] ) bData = 1;
|
|
219987
220083
|
memcpy(pOut, a1, n1);
|
|
219988
220084
|
pOut += n1;
|
|
219989
|
-
}else if( a2[0]!=0xFF ){
|
|
220085
|
+
}else if( a2[0]!=0xFF && a1[0] ){
|
|
219990
220086
|
bData = 1;
|
|
219991
220087
|
memcpy(pOut, a2, n2);
|
|
219992
220088
|
pOut += n2;
|
|
@@ -236016,7 +236112,7 @@ static void fts5CheckTransactionState(Fts5FullTable *p, int op, int iSavepoint){
|
|
|
236016
236112
|
break;
|
|
236017
236113
|
|
|
236018
236114
|
case FTS5_SYNC:
|
|
236019
|
-
assert( p->ts.eState==1 );
|
|
236115
|
+
assert( p->ts.eState==1 || p->ts.eState==2 );
|
|
236020
236116
|
p->ts.eState = 2;
|
|
236021
236117
|
break;
|
|
236022
236118
|
|
|
@@ -236031,21 +236127,21 @@ static void fts5CheckTransactionState(Fts5FullTable *p, int op, int iSavepoint){
|
|
|
236031
236127
|
break;
|
|
236032
236128
|
|
|
236033
236129
|
case FTS5_SAVEPOINT:
|
|
236034
|
-
assert( p->ts.eState
|
|
236130
|
+
assert( p->ts.eState>=1 );
|
|
236035
236131
|
assert( iSavepoint>=0 );
|
|
236036
236132
|
assert( iSavepoint>=p->ts.iSavepoint );
|
|
236037
236133
|
p->ts.iSavepoint = iSavepoint;
|
|
236038
236134
|
break;
|
|
236039
236135
|
|
|
236040
236136
|
case FTS5_RELEASE:
|
|
236041
|
-
assert( p->ts.eState
|
|
236137
|
+
assert( p->ts.eState>=1 );
|
|
236042
236138
|
assert( iSavepoint>=0 );
|
|
236043
236139
|
assert( iSavepoint<=p->ts.iSavepoint );
|
|
236044
236140
|
p->ts.iSavepoint = iSavepoint-1;
|
|
236045
236141
|
break;
|
|
236046
236142
|
|
|
236047
236143
|
case FTS5_ROLLBACKTO:
|
|
236048
|
-
assert( p->ts.eState
|
|
236144
|
+
assert( p->ts.eState>=1 );
|
|
236049
236145
|
assert( iSavepoint>=-1 );
|
|
236050
236146
|
/* The following assert() can fail if another vtab strikes an error
|
|
236051
236147
|
** within an xSavepoint() call then SQLite calls xRollbackTo() - without
|
|
@@ -237381,7 +237477,7 @@ static int fts5UpdateMethod(
|
|
|
237381
237477
|
int rc = SQLITE_OK; /* Return code */
|
|
237382
237478
|
|
|
237383
237479
|
/* A transaction must be open when this is called. */
|
|
237384
|
-
assert( pTab->ts.eState==1 );
|
|
237480
|
+
assert( pTab->ts.eState==1 || pTab->ts.eState==2 );
|
|
237385
237481
|
|
|
237386
237482
|
assert( pVtab->zErrMsg==0 );
|
|
237387
237483
|
assert( nArg==1 || nArg==(2+pConfig->nCol+2) );
|
|
@@ -238549,7 +238645,7 @@ static void fts5SourceIdFunc(
|
|
|
238549
238645
|
){
|
|
238550
238646
|
assert( nArg==0 );
|
|
238551
238647
|
UNUSED_PARAM2(nArg, apUnused);
|
|
238552
|
-
sqlite3_result_text(pCtx, "fts5: 2022-
|
|
238648
|
+
sqlite3_result_text(pCtx, "fts5: 2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24", -1, SQLITE_TRANSIENT);
|
|
238553
238649
|
}
|
|
238554
238650
|
|
|
238555
238651
|
/*
|
|
@@ -146,9 +146,9 @@ extern "C" {
|
|
|
146
146
|
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
|
|
147
147
|
** [sqlite_version()] and [sqlite_source_id()].
|
|
148
148
|
*/
|
|
149
|
-
#define SQLITE_VERSION "3.40.
|
|
150
|
-
#define SQLITE_VERSION_NUMBER
|
|
151
|
-
#define SQLITE_SOURCE_ID "2022-
|
|
149
|
+
#define SQLITE_VERSION "3.40.1"
|
|
150
|
+
#define SQLITE_VERSION_NUMBER 3040001
|
|
151
|
+
#define SQLITE_SOURCE_ID "2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24"
|
|
152
152
|
|
|
153
153
|
/*
|
|
154
154
|
** CAPI3REF: Run-Time Library Version Numbers
|
|
@@ -1192,6 +1192,12 @@ struct sqlite3_io_methods {
|
|
|
1192
1192
|
**
|
|
1193
1193
|
** <li>[[SQLITE_FCNTL_CKSM_FILE]]
|
|
1194
1194
|
** Used by the cksmvfs VFS module only.
|
|
1195
|
+
**
|
|
1196
|
+
** <li>[[SQLITE_FCNTL_RESET_CACHE]]
|
|
1197
|
+
** If there is currently no transaction open on the database, and the
|
|
1198
|
+
** database is not a temp db, then this file-control purges the contents
|
|
1199
|
+
** of the in-memory page cache. If there is an open transaction, or if
|
|
1200
|
+
** the db is a temp-db, it is a no-op, not an error.
|
|
1195
1201
|
** </ul>
|
|
1196
1202
|
*/
|
|
1197
1203
|
#define SQLITE_FCNTL_LOCKSTATE 1
|
|
@@ -1234,6 +1240,7 @@ struct sqlite3_io_methods {
|
|
|
1234
1240
|
#define SQLITE_FCNTL_CKPT_START 39
|
|
1235
1241
|
#define SQLITE_FCNTL_EXTERNAL_READER 40
|
|
1236
1242
|
#define SQLITE_FCNTL_CKSM_FILE 41
|
|
1243
|
+
#define SQLITE_FCNTL_RESET_CACHE 42
|
|
1237
1244
|
|
|
1238
1245
|
/* deprecated names */
|
|
1239
1246
|
#define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE
|
|
File without changes
|