mirror of
https://github.com/sqlite/sqlite.git
synced 2026-10-23 21:49:02 +03:00
Merge the latest branch-3.54 fixes onto trunk
FossilOrigin-Name: 79ba7ba1a75c998c68dd2cc60de7fbe133a563e803a536efea94eff657603965
This commit is contained in:
@@ -2932,7 +2932,7 @@ qrf_reinit:
|
||||
case QRF_STYLE_Json: {
|
||||
p->spec.eText = QRF_TEXT_Json;
|
||||
p->spec.zNull = "null";
|
||||
if( p->spec.zFpFmt==0 ) p->spec.zFpFmt = "%0.16g";
|
||||
if( p->spec.zFpFmt==0 ) p->spec.zFpFmt = "%!0.17g";
|
||||
break;
|
||||
}
|
||||
case QRF_STYLE_Html: {
|
||||
@@ -2946,7 +2946,7 @@ qrf_reinit:
|
||||
if( p->spec.zTableName==0 || p->spec.zTableName[0]==0 ){
|
||||
p->spec.zTableName = "tab";
|
||||
}
|
||||
if( p->spec.zFpFmt==0 ) p->spec.zFpFmt = "%0.16g";
|
||||
if( p->spec.zFpFmt==0 ) p->spec.zFpFmt = "%!0.17g";
|
||||
p->u.nIns = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -163,6 +163,13 @@ do_test 4.1 {
|
||||
do_test 4.2 {
|
||||
list [catch { rbu close } msg] $msg
|
||||
} {1 {SQLITE_ERROR - rbu vfs not found}}
|
||||
do_test 4.3 {
|
||||
sqlite3rbu_vacuum rbu file:test.db?vfs=tvfs
|
||||
list [catch { rbu step } msg] $msg
|
||||
} {0 SQLITE_ERROR}
|
||||
do_test 4.4 {
|
||||
list [catch { rbu close } msg] $msg
|
||||
} {1 {SQLITE_ERROR - rbu vfs not found}}
|
||||
tvfs delete
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
@@ -2891,7 +2891,7 @@ static void rbuOpenDatabase(sqlite3rbu *p, sqlite3 *dbMain, int *pbRetry){
|
||||
p->nRbu = 0;
|
||||
p->pRbuFd = 0;
|
||||
rc = sqlite3_file_control(p->dbRbu, "main", SQLITE_FCNTL_RBUCNT, (void*)p);
|
||||
if( rc!=SQLITE_NOTFOUND ) p->rc = rc;
|
||||
if( rc!=SQLITE_NOTFOUND || p->pRbuFd==0 ) p->rc = rc;
|
||||
if( p->eStage>=RBU_STAGE_MOVE ){
|
||||
bOpen = 1;
|
||||
}else{
|
||||
|
||||
@@ -757,7 +757,9 @@ emcc.jsflags = -fPIC
|
||||
#emcc.jsflags += -Wno-gcc-install-dir-libstdcxx
|
||||
#emcc is not passing ^^^ this on to clang
|
||||
emcc.jsflags += --no-entry
|
||||
emcc.jsflags += -sWASM_BIGINT=$(emcc.WASM_BIGINT)
|
||||
# emcc 6.0.12+ emits ugly warnings if we turn on BIGINT,
|
||||
# despite the value being the same one it will use by
|
||||
# default: emcc.jsflags += -sWASM_BIGINT=$(emcc.WASM_BIGINT)
|
||||
emcc.jsflags += -sMODULARIZE
|
||||
emcc.jsflags += -sDYNAMIC_EXECUTION=0
|
||||
emcc.jsflags += -sNO_POLYFILL
|
||||
@@ -1084,7 +1086,6 @@ $(EXPORTED_FUNCTIONS.fiddle): $(EXPORTED_FUNCTIONS.api.in) \
|
||||
|
||||
emcc.flags.fiddle = \
|
||||
$(emcc.cflags) $(emcc_opt_full) \
|
||||
$(emcc.MEMORY64) \
|
||||
--minify 0 \
|
||||
-sALLOW_TABLE_GROWTH \
|
||||
-sALLOW_MEMORY_GROWTH \
|
||||
|
||||
@@ -65,9 +65,40 @@ const toExportForESM =
|
||||
? (...args)=>console.warn('sqlite3.debugModule:',...args)
|
||||
: ()=>{};
|
||||
|
||||
if(sIMS.urlParams.has('sqlite3.dir')){
|
||||
sIMS.sqlite3Dir = sIMS.urlParams.get('sqlite3.dir') +'/';
|
||||
}else if(sIMS.moduleScript){
|
||||
/**
|
||||
Fetchs sIMS.urlParams.get(key). If that looks like it might
|
||||
be a remote path value then null is returned and a console
|
||||
warning may be emitted. If it looks like it's a local path,
|
||||
it is returned.
|
||||
|
||||
[bugs:74f052d3d2]: do not allow URL arguments which are used for
|
||||
determining file locations to be anything other than what appears
|
||||
to be a local file reference. That is the only documented use for
|
||||
these args and allowing URLs as values leads to chaos. This is
|
||||
believed to resolve that report but is also considered a stopgap
|
||||
measure. TODO is only allow query parameters from the same origin
|
||||
as this script.
|
||||
*/
|
||||
sIMS.getPathArgument = (key)=>{
|
||||
const s = sIMS.urlParams.get(key);
|
||||
//console.warn("sIMS.getPathArgument(",key,")",s);
|
||||
if( !s ) return s;
|
||||
if( s.indexOf(':')>=0 || s.indexOf('//')>=0 ){
|
||||
console.warn(
|
||||
"Rejecting path string",key," because it does not look",
|
||||
"like a local path:",s
|
||||
);
|
||||
return null;
|
||||
}
|
||||
return s;
|
||||
};
|
||||
|
||||
if( sIMS.urlParams.has('sqlite3.dir') ){
|
||||
const s = sIMS.getPathArgument('sqlite3.dir');
|
||||
if( s ){
|
||||
sIMS.sqlite3Dir = s + (s[s.length-1]==='/' ? '' : '/');
|
||||
}
|
||||
}else if( sIMS.moduleScript ){
|
||||
const li = sIMS.moduleScript.src.split('/');
|
||||
li.pop();
|
||||
sIMS.sqlite3Dir = li.join('/') + '/';
|
||||
|
||||
@@ -56,7 +56,8 @@
|
||||
Worker constructor or importScripts() to be able to resolve
|
||||
foo/bar/X.wasm (in the latter case, with some help):
|
||||
|
||||
1) If URL param named the same as `path` is set, it is returned.
|
||||
1) If URL param named the same as `path` is set and it looks like
|
||||
a local path reference, it is returned.
|
||||
|
||||
2) If sqlite3InitModuleState.sqlite3Dir is set, then (thatName + path)
|
||||
is returned (it's assumed to end with '/').
|
||||
@@ -84,21 +85,20 @@
|
||||
return new URL(path, import.meta.url).href;
|
||||
//#else
|
||||
'use strict';
|
||||
let theFile;
|
||||
const up = this.urlParams;
|
||||
if(up?.has(path)){
|
||||
theFile = up.get(path);
|
||||
}else if(this.sqlite3Dir){
|
||||
theFile = this.sqlite3Dir + path;
|
||||
}else if(this.scriptDir){
|
||||
theFile = this.scriptDir + path;
|
||||
}else{
|
||||
theFile = prefix + path;
|
||||
let theFile = this.getPathArgument(path);
|
||||
if( !theFile ){
|
||||
if(this.sqlite3Dir){
|
||||
theFile = this.sqlite3Dir + path;
|
||||
}else if(this.scriptDir){
|
||||
theFile = this.scriptDir + path;
|
||||
}else{
|
||||
theFile = prefix + path;
|
||||
}
|
||||
}
|
||||
this.debugModule(
|
||||
"locateFile(",arguments[0], ',', arguments[1],")",
|
||||
'sqlite3InitModuleState.scriptDir =',this.scriptDir,
|
||||
'up.entries() =',Array.from(up.entries()),
|
||||
'urlParams.entries() =',Array.from(this.urlParams.entries()),
|
||||
"result =", theFile
|
||||
);
|
||||
return theFile;
|
||||
|
||||
@@ -272,7 +272,14 @@ globalThis.sqlite3Worker1Promiser.defaultConfig = {
|
||||
//sqlite3.config.warn("promiser currentScript, theJs =",this.currentScript,theJs);
|
||||
}else if(globalThis.location){
|
||||
//sqlite3.config.warn("promiser globalThis.location =",globalThis.location);
|
||||
const urlParams = new URL(globalThis.location.href).searchParams;
|
||||
const s = urlParams.get('sqlite3.dir');
|
||||
if( s ){
|
||||
if( s.indexOf(':')<0 && s.indexOf('//')<0 ){
|
||||
theJs = s + '/' + theJs;
|
||||
}else{
|
||||
console.warn("Invalid sqlite3.dir value:",s);
|
||||
}
|
||||
}
|
||||
if(urlParams.has('sqlite3.dir')){
|
||||
theJs = urlParams.get('sqlite3.dir') + '/' + theJs;
|
||||
}
|
||||
|
||||
@@ -44,7 +44,12 @@ import sqlite3InitModule from './sqlite3.mjs';
|
||||
: new URLSearchParams();
|
||||
let theJs = 'sqlite3.js';
|
||||
if(urlParams.has('sqlite3.dir')){
|
||||
theJs = urlParams.get('sqlite3.dir') + '/' + theJs;
|
||||
const s = urlParams.get('sqlite3.dir');
|
||||
if( s && s.indexOf(':')<0 && s.indexOf('//')<0 ){
|
||||
theJs = s + '/' + theJs;
|
||||
}else{
|
||||
console.warn("Invalid sqlite3.dir value:",s);
|
||||
}
|
||||
}
|
||||
//console.warn("worker1 theJs =",theJs);
|
||||
importScripts(theJs);
|
||||
|
||||
@@ -498,6 +498,9 @@ static void mk_prologue(void){
|
||||
*/
|
||||
"--enable-bulk-memory-opt " /* required */
|
||||
"--all-features " /* required */
|
||||
"--disable-compact-imports " /*
|
||||
https://github.com/emscripten-core/emscripten/issues/28016
|
||||
*/
|
||||
"--post-emscripten " /* Saves roughly 12kb */
|
||||
"--strip-debug " /* We already wasm-strip, but in
|
||||
** case this environment has no
|
||||
|
||||
@@ -76,8 +76,15 @@
|
||||
"sqlite3 tester #1: ES6 Worker Module (@bitness@-bit WASM)";
|
||||
});
|
||||
}else{
|
||||
workerArgs.push(baseName+'.js?sqlite3.dir=jswasm');
|
||||
const l = globalThis.location;
|
||||
workerArgs.push(baseName+'.js?sqlite3.dir='+(
|
||||
0/*set to 1 only for testing*/
|
||||
? (l.protocol+'//'+l.host+'/jswasm')
|
||||
/* ^^^ must be rejected/ignored by module init */
|
||||
: 'jswasm'
|
||||
));
|
||||
}
|
||||
console.warn("workerArgs =",workerArgs);
|
||||
const w = new Worker(...workerArgs);
|
||||
w.onmessage = function({data}){
|
||||
switch(data.type){
|
||||
|
||||
@@ -4642,8 +4642,13 @@ if(!globalThis.sqlite3InitModule && !isUIThread()){
|
||||
support for locating the wasm, so remove
|
||||
that dir part. */;
|
||||
const urlParams = new URL(globalThis.location.href).searchParams;
|
||||
if(urlParams.has('sqlite3.dir')){
|
||||
sqlite3Js = urlParams.get('sqlite3.dir') + '/' + sqlite3Js;
|
||||
const s3d = urlParams.get('sqlite3.dir');
|
||||
if( s3d ){
|
||||
if( s3d.indexOf(':')<0 && s3d.indexOf('//')<0 ){
|
||||
sqlite3Js = s3d + '/' + sqlite3Js;
|
||||
}else{
|
||||
throw new Error("Invalid sqlite3.dir value: "+s3d);
|
||||
}
|
||||
}
|
||||
importScripts(sqlite3Js);
|
||||
}
|
||||
|
||||
52
manifest
52
manifest
@@ -1,5 +1,5 @@
|
||||
C Fix\sa\svec1\sproblem\swith\squerying\sa\stable\swithin\sthe\ssame\stransaction\sas\swriting\sit\sin\ssome\sconfigurations.
|
||||
D 2026-10-19T11:06:06.382
|
||||
C Merge\sthe\slatest\sbranch-3.54\sfixes\sonto\strunk
|
||||
D 2026-10-19T18:26:06.211
|
||||
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
@@ -427,7 +427,7 @@ F ext/misc/zipfile.c 54bd61f1d80a170dde6c15e6eee790ff89a0acbe3bf57e9d63eba6e3414
|
||||
F ext/misc/zorder.c bddff2e1b9661a90c95c2a9a9c7ecd8908afab5763256294dd12d609d4664eee
|
||||
F ext/qrf/README.md c5c47a8b82ee870557ec9c6734bf93c296ae4821d33cf60253b36f2fcee09601
|
||||
F ext/qrf/dev-notes.md e68a6d91ce4c7eb296ef2daadc2bb79c95c317ad15b9fafe40850c67b29c2430
|
||||
F ext/qrf/qrf.c 395f16f676c3254b83b0b540ca91c891bfc88290df80930f6a7d9e52c340c34f
|
||||
F ext/qrf/qrf.c 13d6c899814afe61fb0213be3bdcd23732251e185c820d80fee12badb89a4f43
|
||||
F ext/qrf/qrf.h b04e50048695aa4a5a41577fb4a56c1feed0bef816354995713116780a4bdacb
|
||||
F ext/rbu/rbu.c 801450b24eaf14440d8fd20385aacc751d5c9d6123398df41b1b5aa804bf4ce8
|
||||
F ext/rbu/rbu1.test 25870dd7db7eb5597e2b4d6e29e7a7e095abf332660f67d89959552ce8f8f255
|
||||
@@ -436,7 +436,7 @@ F ext/rbu/rbu11.test 3b71377c018b05dd39c30ea2feb272a087eb0faeff1b7b4511144f87219
|
||||
F ext/rbu/rbu12.test ec63aa7bfc3c65c1d774bf4357ed731723827d211d9d7cb0efa171bbaeeebaf4
|
||||
F ext/rbu/rbu13.test 658edbc3325d79252a98b761fde95460e439f80e820ff29e10261e25f870b3b6
|
||||
F ext/rbu/rbu14.test 05dac607a62f62102f4db92135979a8a4501143638060019aca08c753822cf39
|
||||
F ext/rbu/rbu3.test 4a81517af618c3bf8c72e2d0b81c7c06acb8d176036d63d8e6669b73342306ae
|
||||
F ext/rbu/rbu3.test b84d4e74c1a1beef5c31fce6ecba0147dab946220c4c7dced8e852f0d41e160f
|
||||
F ext/rbu/rbu5.test e21820b83822ae4c12afc2078a7b6c0523fb0cefe69c8b23c044cea91359e81c
|
||||
F ext/rbu/rbu6.test db2ff1f832dfc9e34c7910b17e157c2fe0e36024a3fe1119dd6437640dc07c82
|
||||
F ext/rbu/rbu7.test 5fa41734613a3ae1bb93d280eb3c341cff5dcc72652ff9ec7fbaa12425eda9c2
|
||||
@@ -475,7 +475,7 @@ F ext/rbu/rbuvacuum.test 6ded47e692b89c5c31f0bef31d899eecfaa3f0df7e1e969746ea507
|
||||
F ext/rbu/rbuvacuum2.test 1a9bd41f127be2826de2a65204df9118525a8af8d16e61e6bc63ba3ac0010a23
|
||||
F ext/rbu/rbuvacuum3.test 3ce42695fdf21aaa3499e857d7d4253bc499ad759bcd6c9362042c13cd37d8de
|
||||
F ext/rbu/rbuvacuum4.test ffccd22f67e2d0b380d2889685742159dfe0d19a3880ca3d2d1d69eefaebb205
|
||||
F ext/rbu/sqlite3rbu.c d1bb89154707af558b48d92f3c4d81a9d9ea1a2a13e6f46c445945f66398310e
|
||||
F ext/rbu/sqlite3rbu.c 29be4d2e7a7fbc8124545d2833570bdefef8724239c6cdd81a8d1e6dd07889f2
|
||||
F ext/rbu/sqlite3rbu.h e3a5bf21e09ca93ce4e8740e00d6a853e90a697968ec0ea98f40826938bdb68e
|
||||
F ext/rbu/test_rbu.c 8b6e64e486c28c41ef29f6f4ea6be7b3091958987812784904f5e903f6b56418
|
||||
F ext/recover/dbdata.c 10d3c56968a9af6853722a47280805ad1564714d79ea45ac6f7da14bb57fd137
|
||||
@@ -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 d93df7101619ae363f431704bb77c0e683240e4d9e7edfb32a0e96e31c23f214
|
||||
F ext/wasm/GNUmakefile 390cf98771f3c99e9e6a4a34c506d911f49016d7ed0d4913f78a41a63cda69f1
|
||||
F ext/wasm/README-dist.txt f01081a850ce38a56706af6b481e3a7878e24e42b314cfcd4b129f0f8427066a
|
||||
F ext/wasm/README.md 6d820c98468ebcee1dbf547467a03f65d256a2be48a9dcbeb5637d3da569c6fe
|
||||
F ext/wasm/SQLTester/GNUmakefile e0794f676d55819951bbfae45cc5e8d7818dc460492dc317ce7f0d2eca15caff
|
||||
@@ -658,13 +658,13 @@ F ext/wasm/SQLTester/index.html 64f3435084c7d6139b08d1f2a713828a73f68de2ae6a3112
|
||||
F ext/wasm/SQLTester/touint8array.c 2d5ece04ec1393a6a60c4bf96385bda5e1a10ad49f3038b96460fc5e5aa7e536
|
||||
F ext/wasm/api/EXPORTED_FUNCTIONS.c-pp 0b0eee602791286ab18e07eadd38a531389285681bd3dbe92c5520ff81ca769a
|
||||
F ext/wasm/api/README.md a905d5c6bfc3e2df875bd391d6d6b7b48d41b43bdee02ad115b47244781a7e81
|
||||
F ext/wasm/api/extern-post-js.c-pp.js cba0f9735f741ce266aa0c52e6e1224f9fb027f20253292d3e71480787675a05
|
||||
F ext/wasm/api/extern-post-js.c-pp.js 22f9437272a44c385bac4ef66f632ab63ee662e31cbf7053a8961f276a28b6a4
|
||||
F ext/wasm/api/extern-pre-js.js cc61c09c7a24a07dbecb4c352453c3985170cec12b4e7e7e7a4d11d43c5c8f41
|
||||
F ext/wasm/api/opfs-common-inline.c-pp.js f84640e2b1e9c5903deb55ef3d7bf537587e31eb6f4f257b4a75827146d2b5a9
|
||||
F ext/wasm/api/opfs-common-shared.c-pp.js 51d86e01ec20438552d09d233dfad97e681364b3e432fc083e2b8cd88fdcc865
|
||||
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 2d12b65e1caefda202edc67ccbe248918ed1aee7fd4907527bffb3e6bca599c0
|
||||
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-oo1.c-pp.js d41c122250a213002adf294487156ed46f146760a4d904e13996dcc425d7c15e
|
||||
F ext/wasm/api/sqlite3-api-prologue.js 0084e15d66fbcd75cacbaa58e3b473d5e57082c30f3122be7fdadff5589cf6b6
|
||||
@@ -678,8 +678,8 @@ F ext/wasm/api/sqlite3-vfs-opfs-wl.c-pp.js 60fa106fc11d31adb1773ac16dd60fc9335a3
|
||||
F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js 5dd8410121acf623ce53005a4aab2c7b2b7f5d1ad072f69ebc208882bc7b7236
|
||||
F ext/wasm/api/sqlite3-vtab-helper.c-pp.js 3218318194b11fa625ebda9f7900280c5c26cf257ab5b2b66709ce58e9531624
|
||||
F ext/wasm/api/sqlite3-wasm.c 5ac22d03231318615112fdea462ea6abbee6cadf964f22b6dfcc813dd6b37b85
|
||||
F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js 46919740f8176c10f691431a81c769c35657e3b537e2ed2bde691f9017b0ee8a
|
||||
F ext/wasm/api/sqlite3-worker1.c-pp.js 21b20d3b8d43471d1647123616a7e5435b1e4b6fa447714f91ffc7f950ea01e8
|
||||
F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js 3b551b4c4434d96c5daa21fe849c2f3f9ed1356d931b231975c32828efaa3c86
|
||||
F ext/wasm/api/sqlite3-worker1.c-pp.js d274d5eb7f43f4f3b35a4d1f9213a1e34aa5ae27df7af9e74df9f89a50ee7bda
|
||||
F ext/wasm/common/SqliteTestUtil.js dae753b95e72248c4395d8de8359e0d055cd9928488e8dd84aef89e46d23b32e
|
||||
F ext/wasm/common/emscripten.css 11bd104b6c0d597c67d40cc8ecc0a60dae2b965151e3b6a37fa5708bac3acd15
|
||||
F ext/wasm/common/testing.css e97549bab24126c24e0daabfe2de9bb478fb0a69fdb2ddd0a73a992c091aad6f
|
||||
@@ -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 d2cd19cf2e373ae4cc7b08baf6520c0c125b24f30311fcfcd91e69606213a5ec
|
||||
F ext/wasm/mkwasmbuilds.c 0ec4b858fe04921d88de98216a65fd6d885eb98170e9c2d27a81cb2295eef811
|
||||
F ext/wasm/module-symbols.html e54f42112e0aac2a31f850ab33e7f2630a2ea4f63496f484a12469a2501e07e2
|
||||
F ext/wasm/scratchpad-wasmfs.html a3d7388f3c4b263676b58b526846e9d02dfcb4014ff29d3a5040935286af5b96
|
||||
F ext/wasm/scratchpad-wasmfs.mjs 66034b9256b218de59248aad796760a1584c1dd842231505895eff00dbd57c63
|
||||
@@ -717,9 +717,9 @@ F ext/wasm/split-speedtest1-script.sh a3e271938d4d14ee49105eb05567c6a69ba4c1f129
|
||||
F ext/wasm/sql/000-mandelbrot.sql 775337a4b80938ac8146aedf88808282f04d02d983d82675bd63d9c2d97a15f0
|
||||
F ext/wasm/sql/001-sudoku.sql 35b7cb7239ba5d5f193bc05ec379bcf66891bce6f2a5b3879f2f78d0917299b5
|
||||
F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555e685bce3da8c3f
|
||||
F ext/wasm/tester1-worker.c-pp.html 441b8b12769670a6bf03be205e6f20ec05827348a565ddcee94219c44ec313e3
|
||||
F ext/wasm/tester1-worker.c-pp.html e81f5a74c045499262b47beaef39cd36963f67021c6575f920ee3f11d0501420
|
||||
F ext/wasm/tester1.c-pp.html 69403505b2c0b6cd76c8a210e3a09e80a8eb84a47c3eae591ab0e81c3934af61
|
||||
F ext/wasm/tester1.c-pp.js de7cdfee3b1dace334698be34a36945f2476be265f20d8c84d6b2408d5d8f8fd
|
||||
F ext/wasm/tester1.c-pp.js 84c86fbdd6b2867fae245e0c1fa87ab885f1feed018b48eeb1ba3a3ae18f755b
|
||||
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
|
||||
@@ -768,7 +768,7 @@ F src/hash.h 46b92795a95bfefb210f52f0c316e9d7cdbcdd7e7fcfb0d8be796d3a5767cddf
|
||||
F src/hwtime.h 5cb15147c8583d0fc4748e1c12ea6f38c9deaeefa147a4d8d379fd9bc81fee9a
|
||||
F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
|
||||
F src/insert.c 482d853c980f4765f045bbea3ab095067a52cd57f47e357f9f17aa7c7fff793f
|
||||
F src/json.c 7d28da4a3740941eab5fa3361276160bb7698bf87218c9d30be7c10b894b6115
|
||||
F src/json.c 11548a00ddd10ecadf90407ce48720486c8aafd613676b972e592398c0f4446b
|
||||
F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
|
||||
F src/loadext.c 5cd4cd7ec6e1a46416806899086363fbf95eecd3bfb9a388b436c9a77243c902
|
||||
F src/main.c 43912e1fae97d827e2c2345661336bdf36c31d01efd1f3bf9b5900406849b778
|
||||
@@ -807,8 +807,8 @@ F src/printf.c 4bd228ed9e9346d558362be562757ee5eef6f9bf483b7f02751ca42cf95174d3
|
||||
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
|
||||
F src/resolve.c 0e0990f60c93db38c735d85e5d1741130e72dd0670aec204b5a39118b53c8044
|
||||
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
|
||||
F src/select.c 25ca7908bab21aefd6bf8b5424992ebd3b74cb5ac74735beddd889c31c9c1706
|
||||
F src/shell.c.in e474c0820422fb3a34d45151785a606d1e1a42ba468d9580cc92b09a905f7f8e
|
||||
F src/select.c 71d639113349e0bcaab097629297e3b6bd6ca9d5ae3a842f9c77ab45e4ae1751
|
||||
F src/shell.c.in 163279dc63d58ff501ccea12112885d2e19c1e97182ac64ab2484c6ccf35e10b
|
||||
F src/sqlite.h.in d73bee6ea0612260b5edf72e3e58de7bd2a50cff000e0f4b3c3549d3e4c35171
|
||||
F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
|
||||
F src/sqlite3ext.h 5e113c4c0442f2f1b3345d44cbe4b82fad45f2fc0c35f0ed4eef27fb8f1cb394
|
||||
@@ -869,7 +869,7 @@ F src/threads.c 85d8b9f05f78211c61e3739ab5db761d7118766d1916ae7f2764735106bc4e13
|
||||
F src/tokenize.c e9d52d9f7374d82dadcd11726bea8a597d43709d6672704f3f0375bf1d726912
|
||||
F src/treeview.c 3a9e59b0d2b9e54e403fa65056ba90716eb91b5cc6e3fe0cda0edea060ddd281
|
||||
F src/trigger.c d6d8991ca346eb6f56e50a3c5df486176b67a9179336798a75bb05e622c72cac
|
||||
F src/update.c 2c5ea3803c19e5726960df9416a50759322d750b820db7d2b623b4f122e25bf9
|
||||
F src/update.c a38e0fa71f66a0c1eec564f08c20ec0935db8e3e558f0b9e305549972b91e4f4
|
||||
F src/upsert.c dd9f0fcccbfb4f20e1026a21a7254ba3f2c08e9cfa92affaff5b5ec3b00ea549
|
||||
F src/utf.c c5bec56770b71fe75e12f1f7b0a512032e1fd3d1f83c50c4ab4474ced20347a4
|
||||
F src/util.c 5cda82abda6cc880f67749af782ebd79ac1fad75edf9ab8cdb568482a71e9cd4
|
||||
@@ -1448,7 +1448,7 @@ F test/json106.test 4aed3afd16549045d198a8d9cea00deea96e1f2ecf55864dce96cac558b8
|
||||
F test/json107.test 59054e815c8f6b67d634d44ace421cf975828fb5651c4460aa66015c8e19d562
|
||||
F test/json108.test eab1859b19138ee03acd4415751308fc3849943c669a06b515bba658b96b55c3
|
||||
F test/json109.test 441cea5d73c24a1a34d284101740dfae5a082237c048c8a66b03aeebe5e3643e
|
||||
F test/json501.test 25e3ffd0e1e70efb3328e823dbad304687f1340e5b337bebef6e9a3e641d12de
|
||||
F test/json501.test 37889447b2f0a774711ad7a0a653fa3f59ba5c61e4d7a5a2bd92ecf4ba7579f5
|
||||
F test/json502.test 4ef68e4f272dfb083d4cbceb4e9e51d67ec1186a185e0c13637c50a4dc2f9796
|
||||
F test/jsonb01.test 42419c8080af5660cdfd3fddec322d28bdbc244d9800ee9569091d455f1c0dea
|
||||
F test/keyword1.test 37ef6bba5d2ed5b07ecdd6810571de2956599dff
|
||||
@@ -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 85875b8d676a3f4f7cb320f1a3d2b87e739dd9f3958902689a37a675affa125c
|
||||
F test/modeA.sql 555cc4724b59fb9e437efbdbcf6b64cadf7f46d42d1dbb51b7dbf85bf2696403
|
||||
F test/multiplex.test d74c034e52805f6de8cc5432cef8c9eb774bb64ec29b83a22effc8ca4dac1f08
|
||||
F test/multiplex2.test 580ca5817c7edbe4cc68fa150609c9473393003a
|
||||
F test/multiplex3.test fac575e0b1b852025575a6a8357701d80933e98b5d2fe6d35ddaa68f92f6a1f7
|
||||
@@ -1691,7 +1691,7 @@ F test/selectA.test 1da8ce3884c326e11d2855baffb76436b0d7e044404af8a2a70d1399a4ff
|
||||
F test/selectB.test 954e4e49cf1f896d61794e440669e03a27ceea25
|
||||
F test/selectC.test 38c530b0cc5728b793c3c11f52b52c70290d39822224acd39011c89c1853bd31
|
||||
F test/selectD.test 6d1909b49970bf92f45ce657505befcef5fc7cbc13544e18103a316d32189bfb
|
||||
F test/selectE.test a8730ca330fcf40ace158f134f4fe0eb00c7edbf
|
||||
F test/selectE.test eb48c5abc126d5e17c8de2db509d0669762beafd1b074b016b8619fab8495d3c
|
||||
F test/selectF.test 21c94e6438f76537b72532fa9fd4710cdd455fc3
|
||||
F test/selectG.test 089f7d3d7e6db91566f00b036cb353107a2cca6220eb1cb264085a836dae8840
|
||||
F test/selectH.test 0b54599f1917d99568c9b929df22ec6261ed7b6d2f02a46b5945ef81b7871aac
|
||||
@@ -1763,7 +1763,7 @@ F test/spellfix.test 09c4b3aecb6754dd9fd4a01ae3a712935c3a8456bc70d81480926f55d1e
|
||||
F test/spellfix2.test dfc8f519a3fc204cb2dfa8b4f29821ae90f6f8c3
|
||||
F test/spellfix3.test 0f9efaaa502a0e0a09848028518a6fb096c8ad33
|
||||
F test/spellfix4.test 7c56a09de68b95051ef0627fe235e514efbba2aa816dc2a9c5c670d98877e632
|
||||
F test/sqldiff1.test 1b7ab4f312442c5cc6b3a5f299fa8ca051416d1dd173cb1126fd51bf64f2c3fb
|
||||
F test/sqldiff1.test b2486da15013e4a54be82067893e49052082be9c72a1410d1ebce66c17967a43
|
||||
F test/sqllimits1.test 95dcc54332b5fdb00036876d1d98e91d22f4ea0f3b6c076ee8106bd157390977
|
||||
F test/sqllog.test 6af6cb0b09f4e44e1917e06ce85be7670302517a
|
||||
F test/starschema1.test f5388cd32527ab18d3f98f9e3402ec780f6a186e04e0d9c8531d7568ee734e11
|
||||
@@ -2273,7 +2273,7 @@ F tool/soak1.tcl a3892082ed1079671565c044e93b55c3c7f38829aedf53cc597c65d23ffdadd
|
||||
F tool/spaceanal.tcl cf693cae76f88cf4e378ccb9de1a6c84dcb9762b336ade56cd3206d10a446db1
|
||||
F tool/spellsift.tcl 52b4b04dc4333c7ab024f09d9d66ed6b6f7c6eb00b38497a09f338fa55d40618 x
|
||||
F tool/split-sqlite3c.tcl fca49ffd65f54b2d219200ed6b199433a9e6a0a397835045e478601c4c0ea89c
|
||||
F tool/sqldiff.c c038c3a058f8d8c992eefee6f7e173b1361b81d7f3e3bd871b9808f7d0e96a9a
|
||||
F tool/sqldiff.c b3d5f5d970a5339d880f7630c9d0481b24c718697204d5df9dd20f80e743d476
|
||||
F tool/sqlite3_analyzer.c.in 14f02cb5ec3c264cd6107d1f1dad77092b1cf440fc196c30b69ae87b56a1a43b
|
||||
F tool/sqlite3_rsync.c a342f9762653f968e12993bb2dc9083c52ad755c23f6005c575d8a376f970422
|
||||
F tool/sqltclsh.c.in c103c6fc7d42bce611f9d4596774d60b7ef3d0b291a1f58c9e6184e458b89296
|
||||
@@ -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 2448fc46cae2149c5d1777b9fe574a48e21d5e16dd64997d2343bb6e160840e3
|
||||
R 09d3e97e7e8cbf0049f0f65dd688ee61
|
||||
U dan
|
||||
Z adafb80534c463cf81e26d72578b22d5
|
||||
P e2af533c281989c751fa4a15e8a5ebafa9cad5efadfd37a2407c89e397b3ddf2 606005419f60bd14eec71ee87a770051c8c551273c9a7567d830283eeb1058e8
|
||||
R b3c969998688fe748072288abe8a1319
|
||||
U drh
|
||||
Z 34b918f9a0d1d3776adc9d5e49f72fce
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
||||
@@ -1 +1 @@
|
||||
e2af533c281989c751fa4a15e8a5ebafa9cad5efadfd37a2407c89e397b3ddf2
|
||||
79ba7ba1a75c998c68dd2cc60de7fbe133a563e803a536efea94eff657603965
|
||||
|
||||
@@ -3503,7 +3503,12 @@ static void jsonReturnFromBlob(
|
||||
if( c=='\\' ){
|
||||
u32 v;
|
||||
u32 szEscape = jsonUnescapeOneChar(&z[iIn], sz-iIn, &v);
|
||||
if( v<=0x7f ){
|
||||
if( v==0 && iIn+szEscape==sz
|
||||
&& (z[iIn+1]=='\n' || z[iIn+1]=='\r' || (u8)z[iIn+1]==0xe2)
|
||||
){
|
||||
/* A JSON5 line continuation at the end of the string
|
||||
** contributes no characters */
|
||||
}else if( v<=0x7f ){
|
||||
zOut[iOut++] = (char)v;
|
||||
}else if( v<=0x7ff ){
|
||||
assert( szEscape>=2 );
|
||||
|
||||
39
src/select.c
39
src/select.c
@@ -5763,6 +5763,8 @@ With *sqlite3WithPush(Parse *pParse, With *pWith, u8 bFree){
|
||||
return pWith;
|
||||
}
|
||||
|
||||
static int selectExpanderWalk(Walker*, Select*);
|
||||
|
||||
/*
|
||||
** This function checks to see if argument pFrom refers to a CTE declared by
|
||||
** a WITH clause on the stack currently maintained by the parser (on the
|
||||
@@ -5927,7 +5929,7 @@ static int resolveFromTermToCte(
|
||||
return 2;
|
||||
}
|
||||
}else{
|
||||
if( sqlite3WalkSelect(pWalker, pSel) ){
|
||||
if( selectExpanderWalk(pWalker, pSel) ){
|
||||
pParse->pWith = pSavedWith;
|
||||
return 2;
|
||||
}
|
||||
@@ -6189,7 +6191,10 @@ static int selectExpander(Walker *pWalker, Select *p){
|
||||
pTab->nCol = -1;
|
||||
pWalker->eCode = 1; /* Turn on Select.selId renumbering */
|
||||
if( pFrom->fg.isSubquery ){
|
||||
sqlite3WalkSelect(pWalker, pFrom->u4.pSubq->pSelect);
|
||||
bft hasCompound = pParse->hasCompound;
|
||||
pParse->hasCompound = 1;
|
||||
selectExpanderWalk(pWalker, pFrom->u4.pSubq->pSelect);
|
||||
pParse->hasCompound = hasCompound;
|
||||
}
|
||||
pWalker->eCode = eCodeOrig;
|
||||
pTab->nCol = nCol;
|
||||
@@ -6479,6 +6484,27 @@ void sqlite3SelectWalkAssert2(Walker *NotUsed, Select *NotUsed2){
|
||||
assert( 0 );
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
** The first argument is a Walker object created by sqlite3SelectExpand().
|
||||
** This function uses the walker to expand the SELECT statement passed
|
||||
** as the second argument. If necessary, it also converts any compound
|
||||
** SELECT statements that have COLLATE clauses on ORDER BY expressions
|
||||
** to sub-queries. Return the return value of sqlite3WalkSelect().
|
||||
*/
|
||||
static int selectExpanderWalk(Walker *pWalker, Select *pSelect){
|
||||
assert( pWalker->xExprCallback==sqlite3ExprWalkNoop );
|
||||
assert( pWalker->pParse!=0 );
|
||||
if( OK_IF_ALWAYS_TRUE(pWalker->pParse->hasCompound) ){
|
||||
pWalker->xSelectCallback = convertCompoundSelectToSubquery;
|
||||
pWalker->xSelectCallback2 = 0;
|
||||
sqlite3WalkSelect(pWalker, pSelect);
|
||||
}
|
||||
pWalker->xSelectCallback = selectExpander;
|
||||
pWalker->xSelectCallback2 = sqlite3SelectPopWith;
|
||||
return sqlite3WalkSelect(pWalker, pSelect);
|
||||
}
|
||||
|
||||
/*
|
||||
** This routine "expands" a SELECT statement and all of its subqueries.
|
||||
** For additional information on what it means to "expand" a SELECT
|
||||
@@ -6496,15 +6522,8 @@ static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){
|
||||
Walker w;
|
||||
w.xExprCallback = sqlite3ExprWalkNoop;
|
||||
w.pParse = pParse;
|
||||
if( OK_IF_ALWAYS_TRUE(pParse->hasCompound) ){
|
||||
w.xSelectCallback = convertCompoundSelectToSubquery;
|
||||
w.xSelectCallback2 = 0;
|
||||
sqlite3WalkSelect(&w, pSelect);
|
||||
}
|
||||
w.xSelectCallback = selectExpander;
|
||||
w.xSelectCallback2 = sqlite3SelectPopWith;
|
||||
w.eCode = 0;
|
||||
sqlite3WalkSelect(&w, pSelect);
|
||||
selectExpanderWalk(&w, pSelect);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -4300,6 +4300,9 @@ static int dump_callback(void *pArg, int nArg, char **azArg, char **azNotUsed){
|
||||
p->mode.spec.eBlob = QRF_BLOB_Sql;
|
||||
p->mode.spec.bTitles = QRF_No;
|
||||
p->mode.spec.nCharLimit = 0;
|
||||
p->mode.spec.bTextJsonb = QRF_No;
|
||||
p->mode.spec.zIFmt = 0;
|
||||
p->mode.spec.zFpFmt = 0;
|
||||
rc = shell_exec(p, sSelect.zTxt, 0);
|
||||
if( (rc&0xff)==SQLITE_CORRUPT ){
|
||||
cli_puts("/****** CORRUPTION ERROR *******/\n", p->out);
|
||||
@@ -10622,6 +10625,8 @@ static int do_meta_command(const char *zLine, ShellState *p){
|
||||
p->shellFlgs = savedShellFlags;
|
||||
modeFree(&p->mode);
|
||||
p->mode = saved_mode;
|
||||
if( p->mode.spec.zFpFmt ) p->mode.spec.zFpFmt = p->mode.zFpFmt;
|
||||
if( p->mode.spec.zIFmt ) p->mode.spec.zIFmt = p->mode.zIFmt;
|
||||
rc = p->nErr>0;
|
||||
}else
|
||||
|
||||
@@ -14471,7 +14476,7 @@ int SQLITE_CDECL main(int argc, char **argv){
|
||||
|| cli_strcmp(z,"-unsafe")==0 ){
|
||||
ShellSetFlag(&data,SHFLG_TestingMode);
|
||||
}else if( cli_strcmp(z,"-safe")==0 ){
|
||||
/* no-op - catch this on the second pass */
|
||||
noInit = 1; /* --safe implies --noinit */
|
||||
}else if( cli_strcmp(z,"-escape")==0 && i+1<argc ){
|
||||
/* skip over the argument */
|
||||
i++;
|
||||
|
||||
12
src/update.c
12
src/update.c
@@ -519,10 +519,14 @@ void sqlite3Update(
|
||||
rc = sqlite3AuthCheck(pParse, SQLITE_UPDATE, pTab->zName,
|
||||
j<0 ? "ROWID" : pTab->aCol[j].zCnName,
|
||||
db->aDb[iDb].zDbSName);
|
||||
if( rc==SQLITE_DENY ){
|
||||
goto update_cleanup;
|
||||
}else if( rc==SQLITE_IGNORE ){
|
||||
aXRef[j] = -1;
|
||||
if( rc!=SQLITE_OK ){
|
||||
if( rc==SQLITE_DENY ){
|
||||
goto update_cleanup;
|
||||
}else if( j<0 || j==pTab->iPKey ){
|
||||
chngRowid = 0;
|
||||
}else{
|
||||
aXRef[j] = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -344,4 +344,28 @@ do_execsql_test 15.0 {
|
||||
ORDER BY jid, pid;
|
||||
} {4 integer c text bb text 2 integer}
|
||||
|
||||
# Bug 2026-10-18T04:42:37Z
|
||||
#
|
||||
do_execsql_test 14.1 {
|
||||
SELECT hex(('"ab\' || char(10) || '"') ->> '$');
|
||||
} {6162}
|
||||
do_execsql_test 14.2 {
|
||||
SELECT hex(('"ab\' || char(13,10) || '"') ->> '$');
|
||||
} {6162}
|
||||
do_execsql_test 14.3 {
|
||||
SELECT hex(('"ab\' || char(8232) || '"') ->> '$');
|
||||
} {6162}
|
||||
do_execsql_test 14.4 {
|
||||
SELECT hex(('"\' || char(10) || '"') ->> '$');
|
||||
} {{}}
|
||||
do_execsql_test 14.5 {
|
||||
SELECT hex(jsonb('"ab\' || char(10) || '"') ->> '$');
|
||||
} {6162}
|
||||
do_execsql_test 14.6 {
|
||||
SELECT hex(('"ab\' || char(10) || 'c"') ->> '$');
|
||||
} {616263}
|
||||
do_execsql_test 14.7 {
|
||||
SELECT hex('"ab\u0000"' ->> '$');
|
||||
} {616200}
|
||||
|
||||
finish_test
|
||||
|
||||
@@ -640,7 +640,7 @@ SELECT 1.25e+12, 0x1234;
|
||||
.testcase 1200
|
||||
.mode jobject --fpfmt auto
|
||||
SELECT 1 AS a, +9.0e+999 AS b, -9.0e+999 AS c, 0.0 AS d;
|
||||
.check {"a":1,"b":9e+999,"c":-9e+999,"d":0}
|
||||
.check {"a":1,"b":9.0e+999,"c":-9.0e+999,"d":0.0}
|
||||
.open :memory:
|
||||
.testcase 1210
|
||||
CREATE TABLE t1(a);
|
||||
@@ -651,9 +651,9 @@ PRAGMA foreign_keys=OFF;
|
||||
BEGIN TRANSACTION;
|
||||
CREATE TABLE t1(a);
|
||||
INSERT INTO t1 VALUES(123);
|
||||
INSERT INTO t1 VALUES(9e+999);
|
||||
INSERT INTO t1 VALUES(9.0e+999);
|
||||
INSERT INTO t1 VALUES('hello');
|
||||
INSERT INTO t1 VALUES(-9e+999);
|
||||
INSERT INTO t1 VALUES(-9.0e+999);
|
||||
INSERT INTO t1 VALUES(x'313233');
|
||||
COMMIT;
|
||||
END
|
||||
@@ -670,3 +670,63 @@ SELECT '' AS '';
|
||||
│ │
|
||||
╰──╯
|
||||
END
|
||||
|
||||
# Bug 2026-10-18T20:39:22Z
|
||||
#
|
||||
# .dump should not be affected by the --fpfmt, --ifmt, and --textjsonb
|
||||
# settings of .mode
|
||||
#
|
||||
.open :memory:
|
||||
.testcase 1400
|
||||
CREATE TABLE t1(a,b,c);
|
||||
INSERT INTO t1 VALUES(1234.5678, 16, jsonb('{"a":1}'));
|
||||
INSERT INTO t1 VALUES(0.5, 1234567, x'0102');
|
||||
.mode list --fpfmt %.2f --ifmt %x --textjsonb on
|
||||
.dump
|
||||
.check <<END
|
||||
PRAGMA foreign_keys=OFF;
|
||||
BEGIN TRANSACTION;
|
||||
CREATE TABLE t1(a,b,c);
|
||||
INSERT INTO t1 VALUES(1234.5678,16,x'4c17611331');
|
||||
INSERT INTO t1 VALUES(0.5,1234567,x'0102');
|
||||
COMMIT;
|
||||
END
|
||||
.testcase 1410
|
||||
.mode list --ifmt %,d
|
||||
.dump
|
||||
.check <<END
|
||||
PRAGMA foreign_keys=OFF;
|
||||
BEGIN TRANSACTION;
|
||||
CREATE TABLE t1(a,b,c);
|
||||
INSERT INTO t1 VALUES(1234.5678,16,x'4c17611331');
|
||||
INSERT INTO t1 VALUES(0.5,1234567,x'0102');
|
||||
COMMIT;
|
||||
END
|
||||
.testcase 1420
|
||||
SELECT a, b FROM t1;
|
||||
.check <<END
|
||||
1234.57|16
|
||||
0.50|1,234,567
|
||||
END
|
||||
.testcase 1430
|
||||
.mode
|
||||
.check ".mode list --fpfmt %.2f --ifmt %,d --limits on --textjsonb on"
|
||||
|
||||
# Bug 2026-10-18T20:37:23Z
|
||||
#
|
||||
# Preserve full double precision for .dump and .mode insert.
|
||||
#
|
||||
.open :memory:
|
||||
.testcase 1500
|
||||
CREATE TABLE t(x REAL);
|
||||
INSERT INTO t VALUES(1.7976931348623157e308),(0.1+0.2),(123456789.123456789);
|
||||
.dump
|
||||
.check <<END
|
||||
PRAGMA foreign_keys=OFF;
|
||||
BEGIN TRANSACTION;
|
||||
CREATE TABLE t(x REAL);
|
||||
INSERT INTO t VALUES(1.7976931348623157e+308);
|
||||
INSERT INTO t VALUES(0.30000000000000004);
|
||||
INSERT INTO t VALUES(123456789.12345679);
|
||||
COMMIT;
|
||||
END
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
|
||||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
set testprefix selectE
|
||||
|
||||
do_test selectE-1.0 {
|
||||
db eval {
|
||||
@@ -75,6 +76,31 @@ do_test selectE-1.3 {
|
||||
}
|
||||
} {DEF abc}
|
||||
|
||||
do_execsql_test selectE-1.4 {
|
||||
WITH xyz AS (
|
||||
SELECT a FROM t2 EXCEPT SELECT a FROM t3 ORDER BY a
|
||||
)
|
||||
SELECT * FROM xyz;
|
||||
} {DEF abc}
|
||||
|
||||
do_execsql_test selectE-1.5 {
|
||||
WITH xyz AS (
|
||||
SELECT a FROM t2 EXCEPT SELECT a FROM t3 ORDER BY a COLLATE nocase
|
||||
)
|
||||
SELECT * FROM xyz;
|
||||
} {abc DEF}
|
||||
|
||||
do_execsql_test selectE-1.6 {
|
||||
CREATE VIEW v1 AS SELECT a FROM t2 EXCEPT SELECT a FROM t3 ORDER BY a;
|
||||
SELECT * FROM v1;
|
||||
} {DEF abc}
|
||||
|
||||
do_execsql_test selectE-1.7 {
|
||||
CREATE VIEW v2 AS
|
||||
SELECT a FROM t2 EXCEPT SELECT a FROM t3 ORDER BY a COLLATE nocase;
|
||||
SELECT * FROM v2;
|
||||
} {abc DEF}
|
||||
|
||||
do_test selectE-2.1 {
|
||||
db eval {
|
||||
DELETE FROM t2;
|
||||
@@ -96,5 +122,35 @@ do_catchsql_test selectE-3.1 {
|
||||
SELECT 1 EXCEPT SELECT 2 ORDER BY 1 COLLATE nocase EXCEPT SELECT 3;
|
||||
} {1 {ORDER BY clause should come after EXCEPT not before}}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
reset_db
|
||||
do_execsql_test 4.0 {
|
||||
CREATE TABLE t1(a);
|
||||
CREATE TABLE t2(a);
|
||||
INSERT INTO t1 VALUES ('def');
|
||||
INSERT INTO t2 VALUES ('DEF');
|
||||
}
|
||||
|
||||
do_execsql_test 4.1 {
|
||||
WITH c AS MATERIALIZED (
|
||||
SELECT a FROM t1
|
||||
EXCEPT SELECT a FROM t2
|
||||
ORDER BY a COLLATE nocase
|
||||
)
|
||||
SELECT * FROM c;
|
||||
} {def}
|
||||
|
||||
do_execsql_test 4.2 {
|
||||
SELECT a FROM t1
|
||||
EXCEPT SELECT a FROM t2
|
||||
ORDER BY a COLLATE nocase
|
||||
} {def}
|
||||
|
||||
do_execsql_test 4.3 {
|
||||
CREATE VIEW vvv AS
|
||||
SELECT a FROM t1 EXCEPT SELECT a FROM t2 ORDER BY a COLLATE nocase;
|
||||
SELECT * FROM vvv;
|
||||
} {def}
|
||||
|
||||
finish_test
|
||||
|
||||
@@ -85,4 +85,97 @@ do_test sqldiff-2.1 {
|
||||
set ::MSG
|
||||
} {ALTER TABLE t1 ADD COLUMN b;}
|
||||
|
||||
# Bug 2026-10-18T20:38:30Z
|
||||
#
|
||||
proc sqldiff_apply_test {tn} {
|
||||
set patch [exec $::PROG test.db test2.db]
|
||||
sqlite3 db test.db
|
||||
set rc [catch {db eval $patch} msg]
|
||||
db close
|
||||
if {$rc} {
|
||||
puts "PATCH: [list $patch]"
|
||||
}
|
||||
do_test $tn.1 [list list $rc $msg] {0 {}}
|
||||
do_test $tn.2 {exec $::PROG test.db test2.db} {}
|
||||
}
|
||||
|
||||
forcedelete test.db test2.db
|
||||
sqlite3 db test.db
|
||||
do_execsql_test sqldiff-3.0 {
|
||||
CREATE TABLE t1(a INTEGER PRIMARY KEY, b REAL);
|
||||
}
|
||||
db backup test2.db
|
||||
db close
|
||||
sqlite3 db test2.db
|
||||
do_execsql_test sqldiff-3.1 {
|
||||
INSERT INTO t1 VALUES(1, 0.1+0.2);
|
||||
INSERT INTO t1 VALUES(2, 1.0/3.0);
|
||||
INSERT INTO t1 VALUES(3, 1.7976931348623157e308);
|
||||
INSERT INTO t1 VALUES(4, -1.7976931348623157e308);
|
||||
INSERT INTO t1 VALUES(5, 4.9406564584124654e-324);
|
||||
INSERT INTO t1 VALUES(6, 123456789.12345678);
|
||||
}
|
||||
db close
|
||||
sqldiff_apply_test sqldiff-3.2
|
||||
sqlite3 db test.db
|
||||
do_execsql_test sqldiff-3.3 {
|
||||
ATTACH 'test2.db' AS x2;
|
||||
SELECT a FROM t1 WHERE b IS NOT (SELECT b FROM x2.t1 AS y WHERE y.a=t1.a);
|
||||
} {}
|
||||
db close
|
||||
|
||||
forcedelete test.db test2.db
|
||||
sqlite3 db test.db
|
||||
do_execsql_test sqldiff-4.0 {
|
||||
CREATE TABLE t1(a INTEGER PRIMARY KEY, b REAL);
|
||||
}
|
||||
db backup test2.db
|
||||
db close
|
||||
sqlite3 db test2.db
|
||||
do_execsql_test sqldiff-4.1 {
|
||||
INSERT INTO t1 VALUES(1, 9e999);
|
||||
INSERT INTO t1 VALUES(2, -9e999);
|
||||
}
|
||||
db close
|
||||
sqldiff_apply_test sqldiff-4.2
|
||||
sqlite3 db test.db
|
||||
do_execsql_test sqldiff-4.3 {
|
||||
SELECT a, b>1e308, b<-1e308 FROM t1 ORDER BY a;
|
||||
} {1 1 0 2 0 1}
|
||||
db close
|
||||
|
||||
# The following test cases demonstrate that if the source table contains
|
||||
# an AUTOINCREMENT table but there is no corresponding entry in the
|
||||
# sqlite_sequence table, then the sqlite_sequence table is not updated
|
||||
# correctly. This is a long-standing deficiency in sqldiff, though the
|
||||
# issue is contrived and does not appear in practice. If the issue is
|
||||
# ever fixed, then simply uncomment the following test sequence to verify
|
||||
# the fix.
|
||||
#
|
||||
if 0 {
|
||||
forcedelete test.db test2.db
|
||||
sqlite3 db test.db
|
||||
do_execsql_test sqldiff-5.0 {
|
||||
CREATE TABLE a1(id INTEGER PRIMARY KEY AUTOINCREMENT, x);
|
||||
}
|
||||
db backup test2.db
|
||||
db close
|
||||
sqlite3 db test2.db
|
||||
do_execsql_test sqldiff-5.1 {
|
||||
INSERT INTO a1(x) VALUES('one'),('two'),('three');
|
||||
DELETE FROM a1 WHERE id=3;
|
||||
SELECT seq FROM sqlite_sequence WHERE name='a1';
|
||||
} {3}
|
||||
db close
|
||||
sqldiff_apply_test sqldiff-5.2
|
||||
sqlite3 db test.db
|
||||
do_execsql_test sqldiff-5.3 {
|
||||
SELECT seq FROM sqlite_sequence WHERE name='a1';
|
||||
} {3}
|
||||
do_execsql_test sqldiff-5.4 {
|
||||
INSERT INTO a1(x) VALUES('four');
|
||||
SELECT id FROM a1 WHERE x='four';
|
||||
} {4}
|
||||
}
|
||||
|
||||
finish_test
|
||||
|
||||
@@ -341,7 +341,7 @@ static void printQuoted(FILE *out, sqlite3_value *X){
|
||||
double r1;
|
||||
char zBuf[50];
|
||||
r1 = sqlite3_value_double(X);
|
||||
sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1);
|
||||
sqlite3_snprintf(sizeof(zBuf), zBuf, "%!0.17g", r1);
|
||||
sqlite3_fprintf(out, "%s", zBuf);
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user