mirror of
https://github.com/sqlite/sqlite.git
synced 2026-10-23 21:49:02 +03:00
Merge the latest branch-3.54 fixes into trunk
FossilOrigin-Name: b3606f7019b2a2dc77d9e476055156631d07c33dfef2d8bc0fdd75b13fad54fd
This commit is contained in:
@@ -241,7 +241,8 @@ inject ANSI cursor movement sequences to hide nefarious values.
|
||||
|
||||
The QRF_ESC_Auto value for eEsc means that the query result formatter
|
||||
gets to pick whichever control-character encoding it thinks is best for
|
||||
the situation. This will usually be QRF_ESC_Ascii.
|
||||
the situation. This will usually be QRF_ESC_Ascii, but there can be
|
||||
exceptions.
|
||||
|
||||
The TAB (U+0009), LF (U+000a) and CR-LF (U+000d,U+000a) character
|
||||
sequence are always output literally and are not mapped to alternative
|
||||
|
||||
@@ -2992,7 +2992,11 @@ qrf_reinit:
|
||||
}
|
||||
}
|
||||
if( p->spec.eEsc==QRF_Auto ){
|
||||
p->spec.eEsc = QRF_ESC_Ascii;
|
||||
if( p->spec.eText==QRF_TEXT_Csv ){
|
||||
p->spec.eEsc = QRF_ESC_Off;
|
||||
}else{
|
||||
p->spec.eEsc = QRF_ESC_Ascii;
|
||||
}
|
||||
}
|
||||
if( p->spec.eText==QRF_Auto ){
|
||||
p->spec.eText = QRF_TEXT_Plain;
|
||||
|
||||
@@ -217,7 +217,7 @@ do_faultsim_test 2.4 -faults oom* -prep {
|
||||
set {} {}
|
||||
} -test {
|
||||
catch { R delete }
|
||||
faultsim_test_result {0 {}} {1 SQLITE_NOMEM}
|
||||
faultsim_test_result_strict {0 {}} {1 SQLITE_NOMEM}
|
||||
}
|
||||
do_faultsim_test 2.5 -faults oom* -prep {
|
||||
catch {db2 close}
|
||||
|
||||
@@ -54,8 +54,55 @@ do_test 2.0 {
|
||||
} {1 SQLITE_ERROR}
|
||||
|
||||
do_test 2.1 {
|
||||
set I2 [R rebase $I]
|
||||
list [catch { set I2 [R rebase $I] } msg] $msg
|
||||
} {1 SQLITE_CORRUPT}
|
||||
do_test 2.2 {
|
||||
R delete
|
||||
} {}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
reset_db
|
||||
|
||||
proc get_changeset {sql} {
|
||||
execsql BEGIN
|
||||
set cs [changeset_from_sql $sql]
|
||||
execsql ROLLBACK
|
||||
return $cs
|
||||
}
|
||||
|
||||
proc xConflict {args} {
|
||||
set res [lindex $::lConflict 0]
|
||||
set ::lConflict [lrange $::lConflict 1 end]
|
||||
return $res
|
||||
}
|
||||
|
||||
|
||||
proc rebased {blobs cs} {
|
||||
sqlite3rebaser_create R
|
||||
foreach b $blobs { R configure $b }
|
||||
set out [R rebase $cs]
|
||||
R delete
|
||||
changeset_to_list $out
|
||||
}
|
||||
|
||||
do_execsql_test 3.0 {
|
||||
CREATE TABLE t1(a INTEGER PRIMARY KEY, b);
|
||||
INSERT INTO t1 VALUES(1, 'x');
|
||||
}
|
||||
|
||||
|
||||
set c_peer1 [get_changeset {DELETE FROM t1 WHERE a=1}]
|
||||
set c_peer2 [get_changeset {UPDATE t1 SET b='peer2' WHERE a=1}]
|
||||
set c_local [changeset_from_sql {UPDATE t1 SET b='local' WHERE a=1}]
|
||||
|
||||
set ::lConflict REPLACE
|
||||
set b1 [sqlite3changeset_apply_v2 db $c_peer1 xConflict]
|
||||
set ::lConflict OMIT
|
||||
set b2 [sqlite3changeset_apply_v2 db $c_peer2 xConflict]
|
||||
|
||||
do_test 3.1 { rebased [list $b1] $c_local } {}
|
||||
do_test 3.2 { rebased [list $b2 $b1] $c_local } {}
|
||||
do_test 3.3 { rebased [list $b1 $b2] $c_local } {}
|
||||
|
||||
finish_test
|
||||
|
||||
@@ -6214,7 +6214,7 @@ static int sessionChangeMerge(
|
||||
}
|
||||
}else if( bRebase ){
|
||||
if( pExist->op==SQLITE_DELETE && pExist->bIndirect ){
|
||||
*ppNew = pExist;
|
||||
pNew = pExist;
|
||||
}else{
|
||||
sqlite3_int64 nByte = nRec + pExist->nRecord + sizeof(SessionChange);
|
||||
pNew = (SessionChange*)sqlite3_malloc64(nByte);
|
||||
@@ -7223,6 +7223,7 @@ static int sessionRebase(
|
||||
}
|
||||
}
|
||||
sqlite3_free(sOut.aBuf);
|
||||
if( rc==SQLITE_OK ) rc = pIter->rc;
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
typedef unsigned char u8;
|
||||
#endif
|
||||
|
||||
#include "sqliteInt.h"
|
||||
|
||||
extern const char *sqlite3ErrName(int);
|
||||
|
||||
typedef struct TestSession TestSession;
|
||||
@@ -102,7 +104,9 @@ int sql_exec_changeset(
|
||||
static int sqlite3_test_changeset(int, void *, char **);
|
||||
static void assert_changeset_is_ok(int n, void *p){
|
||||
char *z = 0;
|
||||
sqlite3BeginBenignMalloc();
|
||||
(void)sqlite3_test_changeset(n, p, &z);
|
||||
sqlite3EndBenignMalloc();
|
||||
assert( z==0 );
|
||||
}
|
||||
#else
|
||||
|
||||
@@ -1096,7 +1096,6 @@ emcc.flags.fiddle = \
|
||||
-sENVIRONMENT=web,worker \
|
||||
-sMODULARIZE \
|
||||
-sDYNAMIC_EXECUTION=0 \
|
||||
-sWASM_BIGINT=$(emcc.WASM_BIGINT) \
|
||||
-sEXPORT_NAME=$(sqlite3.js.init-func) \
|
||||
-Wno-limited-postlink-optimizations \
|
||||
$(emcc.exportedRuntimeMethods),FS \
|
||||
@@ -1312,7 +1311,6 @@ emcc.speedtest1.common += -sALLOW_TABLE_GROWTH
|
||||
emcc.speedtest1.common += -sDYNAMIC_EXECUTION=0
|
||||
emcc.speedtest1.common += --minify 0
|
||||
emcc.speedtest1.common += -sEXPORT_NAME=$(sqlite3.js.init-func)
|
||||
emcc.speedtest1.common += -sWASM_BIGINT=$(emcc.WASM_BIGINT)
|
||||
speedtest1.exit-runtime0 = -sEXIT_RUNTIME=0
|
||||
speedtest1.exit-runtime1 = -sEXIT_RUNTIME=1
|
||||
# Re -sEXIT_RUNTIME=1 vs 0: if it's 1 and speedtest1 crashes, we get
|
||||
|
||||
@@ -1605,8 +1605,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
||||
return __bindText(pStmt, iCol, text, nText, xDestroy);
|
||||
}else if(text instanceof ArrayBuffer){
|
||||
text = new Uint8Array(text);
|
||||
}else if(Array.isArray(pMem)){
|
||||
text = pMem.join('');
|
||||
}else if(Array.isArray(text)){
|
||||
text = text.join('');
|
||||
}
|
||||
let p, n;
|
||||
try{
|
||||
@@ -1614,7 +1614,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
||||
p = wasm.allocFromTypedArray(text);
|
||||
n = text.byteLength;
|
||||
}else if('string'===typeof text){
|
||||
[p, n] = wasm.allocCString(text);
|
||||
[p, n] = wasm.allocCString(text, true);
|
||||
}else{
|
||||
return util.sqlite3__wasm_db_error(
|
||||
capi.sqlite3_db_handle(pStmt), capi.SQLITE_MISUSE,
|
||||
@@ -1648,7 +1648,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
||||
p = wasm.allocFromTypedArray(pMem);
|
||||
n = nMem>=0 ? nMem : pMem.byteLength;
|
||||
}else if('string'===typeof pMem){
|
||||
[p, n] = wasm.allocCString(pMem);
|
||||
[p, n] = wasm.allocCString(pMem, true);
|
||||
}else{
|
||||
return util.sqlite3__wasm_db_error(
|
||||
capi.sqlite3_db_handle(pStmt), capi.SQLITE_MISUSE,
|
||||
|
||||
@@ -242,7 +242,7 @@ const BuildDefs oBuildDefs = {
|
||||
.zDotWasm = 0,
|
||||
.zCmppD = 0,
|
||||
.zEmcc = 0,
|
||||
.zEmccExtra = "$(emcc.MEMORY64) -sWASM_BIGINT=1",
|
||||
.zEmccExtra = "$(emcc.MEMORY64)",
|
||||
.zEnv = 0,
|
||||
.zDeps = 0,
|
||||
.zIfCond = 0,
|
||||
@@ -270,7 +270,7 @@ const BuildDefs oBuildDefs = {
|
||||
.zDotWasm = 0,
|
||||
.zCmppD = "-Dtarget:es6-module",
|
||||
.zEmcc = 0,
|
||||
.zEmccExtra = "$(emcc.MEMORY64) -sWASM_BIGINT=1",
|
||||
.zEmccExtra = "$(emcc.MEMORY64)",
|
||||
.zEnv = 0,
|
||||
.zDeps = 0,
|
||||
.zIfCond = 0,
|
||||
@@ -313,7 +313,7 @@ const BuildDefs oBuildDefs = {
|
||||
.zEmcc =
|
||||
"$(emcc.speedtest1)"
|
||||
" $(emcc.speedtest1.common)"
|
||||
" $(emcc.MEMORY64) -sWASM_BIGINT=1"
|
||||
" $(emcc.MEMORY64)"
|
||||
" $(pre-post.speedtest164.flags)"
|
||||
" $(cflags.common)"
|
||||
" -DSQLITE_SPEEDTEST1_WASM"
|
||||
@@ -496,11 +496,15 @@ static void mk_prologue(void){
|
||||
** Performance gains or losses are _not_ taken into account
|
||||
** here, only wasm file size.
|
||||
*/
|
||||
#if 1
|
||||
/* -Oz builds fail to build if we remove this block, for
|
||||
as-yet-unknown reasons. */
|
||||
"--enable-bulk-memory-opt " /* required */
|
||||
"--all-features " /* required */
|
||||
"--disable-compact-imports " /*
|
||||
https://github.com/emscripten-core/emscripten/issues/28016
|
||||
*/
|
||||
#endif
|
||||
"--post-emscripten " /* Saves roughly 12kb */
|
||||
"--strip-debug " /* We already wasm-strip, but in
|
||||
** case this environment has no
|
||||
@@ -880,9 +884,8 @@ static void mk_lib_mode(const char *zBuildName, const BuildDef * pB){
|
||||
/* althttpd will automatically try to execute wasm files
|
||||
if they have the +x bit set. Why that bit is set
|
||||
at all is a mystery. */);
|
||||
pf("\t@$(call b.call.wasm-strip,%s)\n", zBuildName);
|
||||
|
||||
pf("\t@$(call b.do.wasm-opt,%s)\n", zBuildName);
|
||||
pf("\t@$(call b.call.wasm-strip,%s)\n", zBuildName);
|
||||
pf("\t@$(call b.strip-js-emcc-bindings,$(logtag.%s))\n", zBuildName);
|
||||
|
||||
pf("\t@if [ x1 = 'x$(base64.wasm)' ]; then \\\n"
|
||||
|
||||
@@ -1604,9 +1604,8 @@ T.g('sqlite3.oo1')
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
.t('DB.Stmt', function(sqlite3){
|
||||
let st = this.db.prepare(
|
||||
new TextEncoder('utf-8').encode("select 3 as a")
|
||||
);
|
||||
this.textEncoder = new TextEncoder('utf-8');
|
||||
let st = this.db.prepare( this.textEncoder.encode("select 3 as a") );
|
||||
let rc;
|
||||
try {
|
||||
T.assert(wasm.isPtr(st.pointer))
|
||||
@@ -1701,6 +1700,71 @@ T.g('sqlite3.oo1')
|
||||
});
|
||||
})
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
.t('sqlite3_bind_text/blob() with JS values', function(){
|
||||
/* Derived from [bugs:bbb715c3f2a0e989]. */
|
||||
const q = this.db.prepare("select ?1, typeof(?1), octet_length(?1)");
|
||||
const enc = this.textEncoder, denc = new TextDecoder('utf-8');
|
||||
const BindText = capi.sqlite3_bind_text, BindBlob = capi.sqlite3_bind_blob;
|
||||
/* Bind value v of length n to q using binding function f(), step
|
||||
it, fetch it, reset it, and return the fetched row. */
|
||||
const bindAndGet = (f, v, n)=>{
|
||||
const rc = f(q, 1, v, n, capi.SQLITE_WASM_DEALLOC);
|
||||
q.step();
|
||||
const rv = q.get([]);
|
||||
T.assert( 3===rv.length );
|
||||
rv.unshift(rc);
|
||||
q.reset(true);
|
||||
return rv;
|
||||
};
|
||||
/* Pass (v,n) through sqlite3_bind_text() and affirm that
|
||||
expect === column 0 of the result. */
|
||||
const checkText = (v, n, expect)=>{
|
||||
const [rc, val, type, len] = bindAndGet(BindText, v, n);
|
||||
T.assert(0===rc)
|
||||
.assert(expect===val)
|
||||
.assert('text'===type)
|
||||
.assert(enc.encode(expect).byteLength===len);
|
||||
};
|
||||
/* Pass (v,n) through sqlite3_bind_blob() and affirm that
|
||||
the resulting value has a length of expectLen. Returns
|
||||
the resulting Uint8Array.*/
|
||||
const checkBlob = (v, n, expectLen)=>{
|
||||
const [rc, val, type, len] = bindAndGet(BindBlob, v, n);
|
||||
T.assert(0===rc, "bind_blob rc", rc)
|
||||
.assert('blob'===type)
|
||||
.assert(expectLen===len)
|
||||
.assert(val instanceof Uint8Array && expectLen===val.byteLength);
|
||||
return val;
|
||||
};
|
||||
const checkBlobText = (v, n, expectLen, expectText)=>{
|
||||
const rv = checkBlob(v, n, expectLen);
|
||||
T.assert(denc.decode(rv)===expectText, "checkBlobText()", expectText);
|
||||
}
|
||||
try{
|
||||
checkText("SQLite", -1, "SQLite");
|
||||
checkText(["Früh","stück"], -1, "Frühstück");
|
||||
checkText("", -1, "");
|
||||
checkText(enc.encode("SQLite"), -1, "SQLite");
|
||||
const xenc = enc.encode("a string");
|
||||
checkText(new Int8Array(xenc), -1, "a string");
|
||||
checkText(xenc.buffer, -1, "a string");
|
||||
checkBlobText("SQLite", -1, 6, "SQLite");
|
||||
checkBlobText("SQLite", 2, 6, "SQLite");
|
||||
checkBlob("", -1, 0);
|
||||
checkBlobText(["SQL", "i", "te"], -1, 6, "SQLite");
|
||||
T.assert("SQL"===denc.decode(checkBlob(enc.encode("SQLite"), 3, 3)));
|
||||
T.assert(capi.SQLITE_MISUSE===bindAndGet(
|
||||
BindBlob, {}, -1
|
||||
)[0]);
|
||||
T.assert(capi.SQLITE_MISUSE===bindAndGet(
|
||||
BindText, {}, -1
|
||||
)[0]);
|
||||
}finally{
|
||||
q.finalize();
|
||||
}
|
||||
})/*sqlite3_bind_text/blob()*/
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
.t('sqlite3_js_...()', function(){
|
||||
const db = this.db;
|
||||
|
||||
36
manifest
36
manifest
@@ -1,5 +1,5 @@
|
||||
C Fix\san\sadverse\sinteraction\sbetween\striggers\schanging\sa\stable\sthat\suses\nON\sDELETE\sSET\sNULL\sconstraints\sand\sthe\soptimization\sat\s[8c5dd6cc259e0cda],\nalmost\s12\syears\sago.\n[bugs:/info/2026-10-19T06:36:47Z|Bug\s2026-10-19T06:36:47Z].
|
||||
D 2026-10-20T00:14:02.927
|
||||
C Merge\sthe\slatest\sbranch-3.54\sfixes\sinto\strunk
|
||||
D 2026-10-20T00:17:35.624
|
||||
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
@@ -425,9 +425,9 @@ F ext/misc/wholenumber.c e41953e078894e66a0ff05dd6c76a61f904828c9a4620c7255fac26
|
||||
F ext/misc/windirent.h 02211ce51f3034c675f2dbf4d228194d51b3ee05734678bad5106fff6292e60c
|
||||
F ext/misc/zipfile.c 54bd61f1d80a170dde6c15e6eee790ff89a0acbe3bf57e9d63eba6e3414a6a0c
|
||||
F ext/misc/zorder.c bddff2e1b9661a90c95c2a9a9c7ecd8908afab5763256294dd12d609d4664eee
|
||||
F ext/qrf/README.md c5c47a8b82ee870557ec9c6734bf93c296ae4821d33cf60253b36f2fcee09601
|
||||
F ext/qrf/README.md 394a70c5cda1d0f57c82434751b0174a594b1c8800c8584fad6091e867cd5a90
|
||||
F ext/qrf/dev-notes.md e68a6d91ce4c7eb296ef2daadc2bb79c95c317ad15b9fafe40850c67b29c2430
|
||||
F ext/qrf/qrf.c 13d6c899814afe61fb0213be3bdcd23732251e185c820d80fee12badb89a4f43
|
||||
F ext/qrf/qrf.c 61b756cad31024165f3980f98f1b3a131e02eb8a6dfc53e85b6c488a7b6f5fc9
|
||||
F ext/qrf/qrf.h b04e50048695aa4a5a41577fb4a56c1feed0bef816354995713116780a4bdacb
|
||||
F ext/rbu/rbu.c 801450b24eaf14440d8fd20385aacc751d5c9d6123398df41b1b5aa804bf4ce8
|
||||
F ext/rbu/rbu1.test 25870dd7db7eb5597e2b4d6e29e7a7e095abf332660f67d89959552ce8f8f255
|
||||
@@ -570,7 +570,7 @@ F ext/session/sessionconflict2.test dcaa9979a71d47ff524d01757d137a66cd1dee8faaf9
|
||||
F ext/session/sessioncorrupt.test e4e4c346415b09f3354a1ade13d25cf08bb073beb750ebaea9fc6d6313f857d9 x
|
||||
F ext/session/sessiondiff.test e89f7aedcdd89e5ebac3a455224eb553a171e9586fc3e1e6a7b3388d2648ba8d
|
||||
F ext/session/sessionfault.test c2b43d01213b389a3f518e90775fca2120812ba51e50444c4066962263e45c11
|
||||
F ext/session/sessionfault2.test b0d6a7c1d7398a7e800d84657404909c7d385965ea8576dc79ed344c46fbf41c
|
||||
F ext/session/sessionfault2.test 0c050779bc8daa21d1b9233dfd36b84716d51fad750b7b460cee12e21eb3f59c
|
||||
F ext/session/sessionfault3.test eb981a9f1165132d405952f593998e65ddd140805624906b799678588b385890
|
||||
F ext/session/sessioninvert.test 7ccb7609a2c11e4e13e606df439bf3d484ba8e455d0bd3aa8d4828a940e1a242 x
|
||||
F ext/session/sessionmem.test f2a735db84a3e9e19f571033b725b0b2daf847f3f28b1da55a0c1a4e74f1de09
|
||||
@@ -578,14 +578,14 @@ F ext/session/sessionnoact.test 2cf060c12a7a23e663f0ec796561e58638c5c10a846653d3
|
||||
F ext/session/sessionnoop.test a9366a36a95ef85f8a3687856ebef46983df399541174cb1ede2ee53b8011bc7
|
||||
F ext/session/sessionnoop2.test 2d8146321785bdc7cee8966d984560184cfca83fd46da2ff81ea883d6e977b36
|
||||
F ext/session/sessionrebase.test 702378bdcb5062f1106e74457beca8797d09c113a81768734a58b197b5b334e2
|
||||
F ext/session/sessionrebase2.test b3c9ca8f40290d9bca97beec6f985d8e56fee80328ea639ee0a0104275a9b4a9
|
||||
F ext/session/sessionrebase2.test 6946c5df7ab15f8cf792b36418da2777dca9781e0dac8296c674c3096ffed3b2
|
||||
F ext/session/sessionrowid.test 85187c2f1b38861a5844868126f69f9ec62223a03449a98a80600a44396f7363
|
||||
F ext/session/sessionsize.test 8fcf4685993c3dbaa46a24183940ab9f5aa9ed0d23e5fb63bfffbdb56134b795
|
||||
F ext/session/sessionstat1.test 5e718d5888c0c49bbb33a7a4f816366db85f59f6a4f97544a806421b85dc2dec
|
||||
F ext/session/sessionwor.test 6fd9a2256442cebde5b2284936ae9e0d54bde692d0f5fd009ecef8511f4cf3fc
|
||||
F ext/session/sqlite3session.c 46c81df7e294663e2aa5bf720d7d3236600a7d1281c6befef45eb60a56de25ed
|
||||
F ext/session/sqlite3session.c 26f68307d1d876493d94efceb4ae62a19802cdee7fb4d0d3b0bdb96986cfcc99
|
||||
F ext/session/sqlite3session.h ca7c4422c1514a95056cc8d333217df6b1829d39058126b1de85d10cd62d7a9c
|
||||
F ext/session/test_session.c f465f13c661919f8ba4485a9d0690c4df5bff1cc79e962cfdafa9ff376d5119f
|
||||
F ext/session/test_session.c b30b1ecbb042d08f42406eb4fcfb2efef9609507e1b6b04b0a1ea4cb0a3cffe3
|
||||
F ext/vec1/Makefile 791bd52e40d5b65026c63c8778dbdfc6d66083457ee50cf873d6483d98f43437
|
||||
F ext/vec1/Makefile.msc 66fbdf78ebb987bdbe646e3b1c895fc8785e14c50666f6694b840a0cdd3b7f9e
|
||||
F ext/vec1/test/vec1_common.tcl 72226d9ee7cea8ad331905b28496392e4771f7b7c9d2890575795eddefc19db3
|
||||
@@ -648,7 +648,7 @@ F ext/vec1/tool/vec1bench.tcl a117caee3cb99712f0477fe2fa85c94c260866951d3a9d667b
|
||||
F ext/vec1/tool/vec1bench_addcols.tcl 8c509253d07b179928f2ee32e3591a2c70d13c914217e1328c01afa148717051
|
||||
F ext/vec1/tool/vec1bench_vibe2db.py 84ddb0236bc3d02a0393abce41986a1b7dad7f0d83884576f8318c2883e3aed3
|
||||
F ext/vec1/vec1.c 7c930e6b5577622326dcf32569318f06d5f73fcc81912e43fb258f3ce396b00e
|
||||
F ext/wasm/GNUmakefile 390cf98771f3c99e9e6a4a34c506d911f49016d7ed0d4913f78a41a63cda69f1
|
||||
F ext/wasm/GNUmakefile b656d39f7792b6ff8d9129d38452804bccba29e1fe22976655cebb3e1e9f184b
|
||||
F ext/wasm/README-dist.txt f01081a850ce38a56706af6b481e3a7878e24e42b314cfcd4b129f0f8427066a
|
||||
F ext/wasm/README.md 6d820c98468ebcee1dbf547467a03f65d256a2be48a9dcbeb5637d3da569c6fe
|
||||
F ext/wasm/SQLTester/GNUmakefile e0794f676d55819951bbfae45cc5e8d7818dc460492dc317ce7f0d2eca15caff
|
||||
@@ -665,7 +665,7 @@ F ext/wasm/api/opfs-common-shared.c-pp.js 51d86e01ec20438552d09d233dfad97e681364
|
||||
F ext/wasm/api/post-js-footer.js a50c1a2c4d008aede7b2aa1f18891a7ee71437c2f415b8aeb3db237ddce2935b
|
||||
F ext/wasm/api/post-js-header.js f35d2dcf1ab7f22a93d565f8e0b622a2934fc4e743edf3b708e4dd8140eeff55
|
||||
F ext/wasm/api/pre-js.c-pp.js 145da76085bd31bbe9c9b2d52bc56106116745576699d03b8bd6eaaf78e1e537
|
||||
F ext/wasm/api/sqlite3-api-glue.c-pp.js 0e41b7b571219eaf91a66d8cdbcbcab2b16db537046c0a35af8e0e48a72f99ca
|
||||
F ext/wasm/api/sqlite3-api-glue.c-pp.js 15ac205ced4b55134de9f447fff285906072f4410bd5d1b1db8408d39b700c6b
|
||||
F ext/wasm/api/sqlite3-api-oo1.c-pp.js d41c122250a213002adf294487156ed46f146760a4d904e13996dcc425d7c15e
|
||||
F ext/wasm/api/sqlite3-api-prologue.js 0084e15d66fbcd75cacbaa58e3b473d5e57082c30f3122be7fdadff5589cf6b6
|
||||
F ext/wasm/api/sqlite3-api-worker1.c-pp.js eee70a9962c02d86d2332f2432e257ccdf5eb7a742f90d34bdc137346fbc97ae
|
||||
@@ -704,7 +704,7 @@ F ext/wasm/jaccwabyt/jaccwabyt.js 99039632cd8fa6f82acdb01e213850d2efe220388441fa
|
||||
F ext/wasm/jaccwabyt/jaccwabyt.md 6aa90fa1a973d0ad10d077088bea163b241d8470c75eafdef87620a1de1dea41
|
||||
F ext/wasm/libcmpp.c a5bec47a754206aac2ffb45ba4adaec6af3b4fcc24c705c61a6f47893b72aef5
|
||||
F ext/wasm/mkdist.sh f8883b077a2ca47cf92e6f0ce305fbf72ca648c3501810125056c4b09c2d5554 x
|
||||
F ext/wasm/mkwasmbuilds.c 0ec4b858fe04921d88de98216a65fd6d885eb98170e9c2d27a81cb2295eef811
|
||||
F ext/wasm/mkwasmbuilds.c a012ba85adc4dea9cc6a6ed6ffb1d127ceda6bcc8e18cd0a118bf4d6e9049caa
|
||||
F ext/wasm/module-symbols.html e54f42112e0aac2a31f850ab33e7f2630a2ea4f63496f484a12469a2501e07e2
|
||||
F ext/wasm/scratchpad-wasmfs.html a3d7388f3c4b263676b58b526846e9d02dfcb4014ff29d3a5040935286af5b96
|
||||
F ext/wasm/scratchpad-wasmfs.mjs 66034b9256b218de59248aad796760a1584c1dd842231505895eff00dbd57c63
|
||||
@@ -719,7 +719,7 @@ F ext/wasm/sql/001-sudoku.sql 35b7cb7239ba5d5f193bc05ec379bcf66891bce6f2a5b3879f
|
||||
F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555e685bce3da8c3f
|
||||
F ext/wasm/tester1-worker.c-pp.html e81f5a74c045499262b47beaef39cd36963f67021c6575f920ee3f11d0501420
|
||||
F ext/wasm/tester1.c-pp.html 69403505b2c0b6cd76c8a210e3a09e80a8eb84a47c3eae591ab0e81c3934af61
|
||||
F ext/wasm/tester1.c-pp.js 84c86fbdd6b2867fae245e0c1fa87ab885f1feed018b48eeb1ba3a3ae18f755b
|
||||
F ext/wasm/tester1.c-pp.js 06776391c86c17c57cebb6aabe7aac40c525461e309dc93179495da5c2856916
|
||||
F ext/wasm/tests/opfs/concurrency/index.html 706eab6308343c04ac2360aba6001af4ffaf46d8f33a0ccd02c64d93e3216a43
|
||||
F ext/wasm/tests/opfs/concurrency/test.js 6919778fceaac1b7cc78caf41d796f545d2c4433b31188aa9689f05b5ad28828
|
||||
F ext/wasm/tests/opfs/concurrency/worker.js 704d82c5e287e47f612349e027765943a58ad967dcf178fb5a1c3a8eaafb09af
|
||||
@@ -740,7 +740,7 @@ F mptest/multiwrite01.test dab5c5f8f9534971efce679152c5146da265222d
|
||||
F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
|
||||
F sqlite3.1 1b9c24374a85dfc7eb8fa7c4266ee0db4f9609cceecfc5481cd8307e5af04366
|
||||
F sqlite3.pc.in e6dee284fba59ef500092fdc1843df3be8433323a3733c91da96690a50a5b398
|
||||
F src/alter.c 1032f83df87e620e18662f085071bd33b8a4d5d1341575547ebb122c6b81a010
|
||||
F src/alter.c 4df4a8dbaea089dbfd1c3530171edaaa0e9b5c59d7f735262f80347f5effdc87
|
||||
F src/analyze.c 73162482c656187823217f4c00758c9ee13a420c8745bc542129e0279b792287
|
||||
F src/attach.c 40a83de1c720dfb3552458ebf6c9dac7ed6b2fcde4e073658fd9a38d90cb329e
|
||||
F src/auth.c b5ece4e1edccad082c0332fa0087df225473bae0feea9269f824312201377185
|
||||
@@ -1500,7 +1500,7 @@ F test/mallocJ.test b5d1839da331d96223e5f458856f8ffe1366f62e
|
||||
F test/mallocK.test 25897506da0098cea09b302ff432b0fb6d8002773c1e0fc9732aa8b444bfd455
|
||||
F test/mallocL.test fb311ff80afddf3b1a75e52289081f4754d901dc
|
||||
F test/mallocM.test 78bbe9d3da84a5c679123cdb40d7b2010b18fc46e13897e4f253c6ba6fbff134
|
||||
F test/malloc_common.tcl 806c50379cf4fa65008cd4d5af18273e5dac8ab62d1d4316c76aa2ecd2e54018
|
||||
F test/malloc_common.tcl e3731f2f42f660fc58648d9a715d928da5d0ead133d50dfeb2a43c128289dc2f
|
||||
F test/malloctraceviewer.tcl 3e3ddf11e30d2b20f53aa16aa6615082fb24a100bea61cca7214c927b742eba6
|
||||
F test/manydb.test 28385ae2087967aa05c38624cec7d96ec74feb3e
|
||||
F test/mem5.test c6460fba403c5703141348cd90de1c294188c68f
|
||||
@@ -1535,7 +1535,7 @@ F test/mmapcorrupt.test 470fb44fe92e99c1d23701d156f8c17865f5b027063c9119dcfdb842
|
||||
F test/mmapfault.test d4c9eff9cd8c2dc14bc43e71e042f175b0a26fe3
|
||||
F test/mmapleak.test 7542cafa4771abba531d072ea905f474a2875a153337a04f327f0a9319cdb72c
|
||||
F test/mmapwarm.test 2272005969cd17a910077bd5082f70bc1fefad9a875afec7fc9af483898ecaf3
|
||||
F test/modeA.sql 555cc4724b59fb9e437efbdbcf6b64cadf7f46d42d1dbb51b7dbf85bf2696403
|
||||
F test/modeA.sql 8fc797edf0d04be08168302dcc509a075a6896a71c65b07a197cc46040a5843f
|
||||
F test/multiplex.test d74c034e52805f6de8cc5432cef8c9eb774bb64ec29b83a22effc8ca4dac1f08
|
||||
F test/multiplex2.test 580ca5817c7edbe4cc68fa150609c9473393003a
|
||||
F test/multiplex3.test fac575e0b1b852025575a6a8357701d80933e98b5d2fe6d35ddaa68f92f6a1f7
|
||||
@@ -2294,8 +2294,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
|
||||
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
|
||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
|
||||
P fd341a1952ded314e3b3d129c14552318246c0f187c63bea82a0f7bf8aec6759
|
||||
R 7120feee1743f3e7210d0aff5ab60d0a
|
||||
P 15424da529e827f3eca7d70b1c54b57f2e9e05ed866a872ea45fa538e8b72825 d45943cbaf35f21f72b78aafa88f72830343bfeb3a0198a3af0da063dcf6a707
|
||||
R aecb776e642164957603f92bcf1cc00c
|
||||
U drh
|
||||
Z 648661a2562c4b8c375a0ac686e09793
|
||||
Z 42c9e74b37b241a3bd771a8cfc9167b1
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
||||
@@ -1 +1 @@
|
||||
15424da529e827f3eca7d70b1c54b57f2e9e05ed866a872ea45fa538e8b72825
|
||||
b3606f7019b2a2dc77d9e476055156631d07c33dfef2d8bc0fdd75b13fad54fd
|
||||
|
||||
10
src/alter.c
10
src/alter.c
@@ -2387,12 +2387,12 @@ void sqlite3AlterDropColumn(Parse *pParse, SrcList *pSrc, const Token *pName){
|
||||
if( i==pTab->iPKey ){
|
||||
sqlite3VdbeAddOp2(v, OP_Null, 0, regOut);
|
||||
}else{
|
||||
char aff = pTab->aCol[i].affinity;
|
||||
if( aff==SQLITE_AFF_REAL ){
|
||||
pTab->aCol[i].affinity = SQLITE_AFF_NUMERIC;
|
||||
}
|
||||
sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, i, regOut);
|
||||
pTab->aCol[i].affinity = aff;
|
||||
assert( pParse->nErr
|
||||
|| sqlite3VdbeGetOp(v,sqlite3VdbeCurrentAddr(v)-1)->opcode
|
||||
!= OP_RealAffinity
|
||||
|| pTab->aCol[i].affinity==SQLITE_AFF_REAL );
|
||||
sqlite3VdbeDeletePriorOpcode(v, OP_RealAffinity);
|
||||
}
|
||||
nField++;
|
||||
}
|
||||
|
||||
@@ -193,7 +193,8 @@ proc oom_injectstart {nRepeat iFail} {
|
||||
sqlite3_memdebug_fail [expr $iFail-1] -repeat $nRepeat
|
||||
}
|
||||
proc oom_injectstop {} {
|
||||
sqlite3_memdebug_fail -1
|
||||
set nFail [sqlite3_memdebug_fail -1 -benigncnt nBenign]
|
||||
return [expr $nFail - $nBenign]
|
||||
}
|
||||
|
||||
# The following procs are used as [do_one_faultsim_test] callbacks when
|
||||
@@ -296,6 +297,16 @@ proc faultsim_test_result_int {args} {
|
||||
error "nfail=$testnfail rc=$testrc result=$testresult list=$r"
|
||||
}
|
||||
}
|
||||
proc faultsim_test_result_int_strict {args} {
|
||||
upvar testrc testrc testresult testresult testnfail testnfail
|
||||
set t [list $testrc $testresult]
|
||||
set r $args
|
||||
|
||||
set idx [lsearch -exact $r $t]
|
||||
if {($testnfail==0 && $idx!=0) || ($testnfail>0 && $idx<=0)} {
|
||||
error "nfail=$testnfail rc=$testrc result=$testresult list=$r"
|
||||
}
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
# Usage do_one_faultsim_test NAME ?OPTIONS...?
|
||||
@@ -348,6 +359,9 @@ proc do_one_faultsim_test {testname args} {
|
||||
proc faultsim_test_result {args} "
|
||||
uplevel faultsim_test_result_int \$args [list $O(-injecterrlist)]
|
||||
"
|
||||
proc faultsim_test_result_strict {args} "
|
||||
uplevel faultsim_test_result_int_strict \$args [list $O(-injecterrlist)]
|
||||
"
|
||||
|
||||
eval $O(-injectinstall)
|
||||
eval $O(-install)
|
||||
|
||||
@@ -281,7 +281,7 @@ SELECT * FROM t1;
|
||||
|
||||
.testcase 601
|
||||
SELECT 'abc',char(0x05,0x18,0x33),'xyz';
|
||||
.check --glob abc,"*3",xyz
|
||||
.check --glob abc,"??3",xyz
|
||||
|
||||
.testcase 610
|
||||
.mode csv -reset
|
||||
|
||||
Reference in New Issue
Block a user