From 811bece3f7eb9d4bf8cdc3ad78404e1f80957dd4 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 23 Oct 2023 19:51:16 +0000 Subject: [PATCH 01/49] Add the sqlite3res file to the Windows build of sqldiff.exe so that the resulting binary shows the SQLite icon. FossilOrigin-Name: c696a4963bdd010c8161acbf7601078313e7da5ebb3f60381a489a70e5728dea --- Makefile.msc | 4 ++-- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Makefile.msc b/Makefile.msc index 8ef8bd13b1..d0ca0e76a6 100644 --- a/Makefile.msc +++ b/Makefile.msc @@ -1820,8 +1820,8 @@ $(SQLITE3EXE): shell.c $(SHELL_CORE_DEP) $(LIBRESOBJS) $(SHELL_CORE_SRC) $(SQLIT /link $(SQLITE3EXEPDB) $(LDFLAGS) $(LTLINKOPTS) $(SHELL_LINK_OPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LIBREADLINE) $(LTLIBS) $(TLIBS) # <> -sqldiff.exe: $(TOP)\tool\sqldiff.c $(SQLITE3C) $(SQLITE3H) - $(LTLINK) $(NO_WARN) $(TOP)\tool\sqldiff.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS) +sqldiff.exe: $(TOP)\tool\sqldiff.c $(SQLITE3C) $(SQLITE3H) $(LIBRESOBJS) + $(LTLINK) $(NO_WARN) $(TOP)\tool\sqldiff.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS) $(LIBRESOBJS) dbhash.exe: $(TOP)\tool\dbhash.c $(SQLITE3C) $(SQLITE3H) $(LTLINK) $(NO_WARN) $(TOP)\tool\dbhash.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS) diff --git a/manifest b/manifest index 5ea46fb833..b50e573781 100644 --- a/manifest +++ b/manifest @@ -1,11 +1,11 @@ -C Avoid\sattempting\sto\sdelete\sa\sfile\swhile\sit\sis\sopen\sin\stest\sscript\ssessionalter.test. -D 2023-10-23T15:30:38.377 +C Add\sthe\ssqlite3res\sfile\sto\sthe\sWindows\sbuild\sof\ssqldiff.exe\sso\sthat\sthe\nresulting\sbinary\sshows\sthe\sSQLite\sicon. +D 2023-10-23T19:51:16.905 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 F Makefile.in 2ea4105b72561483befe0a18a37f94ca3adbc2324bad3770f99555d95fb9b0ea F Makefile.linux-gcc f3842a0b1efbfbb74ac0ef60e56b301836d05b4d867d014f714fa750048f1ab6 -F Makefile.msc e5c93ed28696ab0065e72ce352c7ec766c8b9e91f93fd1bb15000c6e35dfe58c +F Makefile.msc 0e088e4fc718668e640aafe148f4d6bf9131d63ba91d85253478a20cd37a4a80 F README.md 963d30019abf0cc06b263cd2824bce022893f3f93a531758f6f04ff2194a16a8 F VERSION 4c09b629c03b8ae32317cb336a32f3aa3252841d6dcd51184cecc4278d08f21e F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 1bf6f0f3bb54933e4e6c730554144934f73a7fac87c97a916b275afd7379f397 -R 0a5571c089d9d726fca8373411c5f8ab -U dan -Z 9f6b2b6d9a63c678025f17f7bd377abf +P f20b4a96f747adeb2ed486f06dd7d911f0f24b37df87dcd32d2c3e4b687da9a6 +R 249d9631460bc3a44c3fdfd22aa9b706 +U drh +Z 64d0e0dfaea30cc947f8f792dbf1bb4a # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index f8263d1132..52441ba107 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f20b4a96f747adeb2ed486f06dd7d911f0f24b37df87dcd32d2c3e4b687da9a6 \ No newline at end of file +c696a4963bdd010c8161acbf7601078313e7da5ebb3f60381a489a70e5728dea \ No newline at end of file From 043768ce5a8bc1742a7089504e8c489354100297 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 23 Oct 2023 23:34:24 +0000 Subject: [PATCH 02/49] Add notes on how to build a statically linked version of sqlite3_analyzer.exe. FossilOrigin-Name: 99ce9939c861ecc07877e640f75d395afb6502130bf4b5ccea8b98a80a1569ce --- doc/compile-for-windows.md | 53 +++++++++++++++++++++++++++++++++++++- manifest | 12 ++++----- manifest.uuid | 2 +- 3 files changed, 59 insertions(+), 8 deletions(-) diff --git a/doc/compile-for-windows.md b/doc/compile-for-windows.md index 0bd39d21f1..55e1f8e41c 100644 --- a/doc/compile-for-windows.md +++ b/doc/compile-for-windows.md @@ -16,7 +16,7 @@ canonical source on a new Windows 11 PC, as of 2023-08-16: a 32-bit build.) The subsequent steps will not work in a vanilla DOS prompt. Nor will they work in PowerShell. - 3. Install TCL development libraries. This note assumes that you wil + 3. Install TCL development libraries. This note assumes that you will install the TCL development libraries in the "`c:\Tcl`" directory. Make adjustments if you want TCL installed somewhere else. SQLite needs both the @@ -83,3 +83,54 @@ following minor changes: + +## Statically Linking The TCL Library + +Some utility programs associated with SQLite need to be linked +with TCL in order to function. The [sqlite3_analyzer.exe program](https://sqlite.org/sqlanalyze.html) +is an example. You can build as described above, and then +enter: + +> ~~~~ +nmake /f Makefile.msc sqlite3_analyzer.exe +~~~~ + +And you will end up with a working executable. However, that executable +will depend on having the "tcl86.dll" library somewhere on your %PATH%. +Use the following steps to build an executable that has the TCL library +statically linked so that it does not depend on separate DLL: + + 1. Use the appropriate "Command Prompt" window - either x86 or + x64, depending on whether you want a 32-bit or 64-bit executable. + + 2. Untar the TCL source tarball into a fresh directory. CD into + the "win/" subfolder. + + 3. Run: `nmake /f makefile.vc OPTS=nothreads,static shell` + + + 4. CD into the "Release*" subfolder that is created (note the + wildcard - the full name of the directory might vary). There + you will find the "tcl86s.lib" file. Copy this file into the + same directory that you put the "tcl86.lib" on your initial + installation. (In this document, that directory is + "`C:\Tcl32\lib`" for 32-bit builds and + "`C:\Tcl\lib`" for 64-bit builds. + + 5. CD into your SQLite source code directory and build the desired + utility program, but add the following extra arguments to the + nmake command line: +
+      CCOPTS="-DSTATIC_BUILD" LIBTCL="tcl86s.lib netapi32.lib user32.lib"
+      
+

So, for example, to build a statically linked version of + sqlite3_analyzer.exe, you might type: +

+      nmake /f Makefile.msc CCOPTS="-DSTATIC_BUILD" LIBTCL="tcl86s.lib netapi32.lib user32.lib" sqlite3_analyzer.exe
+      
+ + 6. After your executable is built, you can verify that it does not + depend on the TCL DLL by running: +
+      dumpbin /dependents sqlite3_analyzer.exe
+      
diff --git a/manifest b/manifest index b50e573781..88e45d03bb 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\ssqlite3res\sfile\sto\sthe\sWindows\sbuild\sof\ssqldiff.exe\sso\sthat\sthe\nresulting\sbinary\sshows\sthe\sSQLite\sicon. -D 2023-10-23T19:51:16.905 +C Add\snotes\son\show\sto\sbuild\sa\sstatically\slinked\sversion\sof\ssqlite3_analyzer.exe. +D 2023-10-23T23:34:24.214 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -37,7 +37,7 @@ F configure 1d9cbcb416cb5387b3f750ae6db63cfedb703a2e46bf8ca61daecff31d208252 x F configure.ac de31fea7d975bb7ebafbe0e2190a855cc80d48558bf0c9a6578a1836daf1cd3a F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad F doc/F2FS.txt c1d4a0ae9711cfe0e1d8b019d154f1c29e0d3abfe820787ba1e9ed7691160fcd -F doc/compile-for-windows.md c52f2903f1cb11b2308798feecca2e44701b037b78f467a538ac5c46c28ee250 +F doc/compile-for-windows.md 3fbda59bea9219e7b88fac89747aaf8c74b77de53d76a5abefd2570bf2bc6ca2 F doc/json-enhancements.md e356fc834781f1f1aa22ee300027a270b2c960122468499bf347bb123ce1ea4f F doc/lemon.html 44a53a1d2b42d7751f7b2f478efb23c978e258d794bfd172442307a755b9fa44 F doc/pager-invariants.txt 27fed9a70ddad2088750c4a2b493b63853da2710 @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P f20b4a96f747adeb2ed486f06dd7d911f0f24b37df87dcd32d2c3e4b687da9a6 -R 249d9631460bc3a44c3fdfd22aa9b706 +P c696a4963bdd010c8161acbf7601078313e7da5ebb3f60381a489a70e5728dea +R 63bc65d093cd6c883a355f795496cb92 U drh -Z 64d0e0dfaea30cc947f8f792dbf1bb4a +Z 23c997e26716c966c8277eb8fd0c7c2b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 52441ba107..cbe6cf319c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c696a4963bdd010c8161acbf7601078313e7da5ebb3f60381a489a70e5728dea \ No newline at end of file +99ce9939c861ecc07877e640f75d395afb6502130bf4b5ccea8b98a80a1569ce \ No newline at end of file From 13e69440fba91886f34d7976dcf9c95c4b5b9e0e Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 23 Oct 2023 23:34:53 +0000 Subject: [PATCH 03/49] Fix a minor typo in the previous. FossilOrigin-Name: 9d388267e4e6724e2df333fe09d509e87defcfe984c5c2ebe031152d320812d0 --- doc/compile-for-windows.md | 2 +- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/compile-for-windows.md b/doc/compile-for-windows.md index 55e1f8e41c..20f79afa93 100644 --- a/doc/compile-for-windows.md +++ b/doc/compile-for-windows.md @@ -115,7 +115,7 @@ statically linked so that it does not depend on separate DLL: same directory that you put the "tcl86.lib" on your initial installation. (In this document, that directory is "`C:\Tcl32\lib`" for 32-bit builds and - "`C:\Tcl\lib`" for 64-bit builds. + "`C:\Tcl\lib`" for 64-bit builds.) 5. CD into your SQLite source code directory and build the desired utility program, but add the following extra arguments to the diff --git a/manifest b/manifest index 88e45d03bb..779e9daa92 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\snotes\son\show\sto\sbuild\sa\sstatically\slinked\sversion\sof\ssqlite3_analyzer.exe. -D 2023-10-23T23:34:24.214 +C Fix\sa\sminor\stypo\sin\sthe\sprevious. +D 2023-10-23T23:34:53.502 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -37,7 +37,7 @@ F configure 1d9cbcb416cb5387b3f750ae6db63cfedb703a2e46bf8ca61daecff31d208252 x F configure.ac de31fea7d975bb7ebafbe0e2190a855cc80d48558bf0c9a6578a1836daf1cd3a F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad F doc/F2FS.txt c1d4a0ae9711cfe0e1d8b019d154f1c29e0d3abfe820787ba1e9ed7691160fcd -F doc/compile-for-windows.md 3fbda59bea9219e7b88fac89747aaf8c74b77de53d76a5abefd2570bf2bc6ca2 +F doc/compile-for-windows.md 922ba580d210a1f1bd3ef9d0413121556f9b5714fb5c01e664d980f85fa4ac8c F doc/json-enhancements.md e356fc834781f1f1aa22ee300027a270b2c960122468499bf347bb123ce1ea4f F doc/lemon.html 44a53a1d2b42d7751f7b2f478efb23c978e258d794bfd172442307a755b9fa44 F doc/pager-invariants.txt 27fed9a70ddad2088750c4a2b493b63853da2710 @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P c696a4963bdd010c8161acbf7601078313e7da5ebb3f60381a489a70e5728dea -R 63bc65d093cd6c883a355f795496cb92 +P 99ce9939c861ecc07877e640f75d395afb6502130bf4b5ccea8b98a80a1569ce +R f32ae66a46d5a68b60c31d8f75cc7635 U drh -Z 23c997e26716c966c8277eb8fd0c7c2b +Z bbd6d4c6c0e8c3badc3185a6c900116d # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index cbe6cf319c..9270bb485b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -99ce9939c861ecc07877e640f75d395afb6502130bf4b5ccea8b98a80a1569ce \ No newline at end of file +9d388267e4e6724e2df333fe09d509e87defcfe984c5c2ebe031152d320812d0 \ No newline at end of file From eb9882d7d144ab6f4ab9078ca9eb62251801be19 Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 24 Oct 2023 09:57:54 +0000 Subject: [PATCH 04/49] Fix a harmless compiler warning in the expert extension. FossilOrigin-Name: 0c4907ddf9abd1ebfef31c1a53d702c4dcaa015c0032b8b52774c9e260b6cfd7 --- ext/expert/sqlite3expert.c | 2 +- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ext/expert/sqlite3expert.c b/ext/expert/sqlite3expert.c index 57baf1ffc1..861cc869a8 100644 --- a/ext/expert/sqlite3expert.c +++ b/ext/expert/sqlite3expert.c @@ -1873,9 +1873,9 @@ int registerUDFs(sqlite3 *dbSrc, sqlite3 *dbDst){ if( name==0 || type==0 || enc==0 ) rc = SQLITE_NOMEM; else{ int ienc = SQLITE_UTF8; + int rcf = SQLITE_ERROR; if( strcmp(enc,"utf16le")==0 ) ienc = SQLITE_UTF16LE; else if( strcmp(enc,"utf16be")==0 ) ienc = SQLITE_UTF16BE; - int rcf = SQLITE_ERROR; ienc |= (flags & (SQLITE_DETERMINISTIC|SQLITE_DIRECTONLY)); if( strcmp(type,"w")==0 ){ rcf = sqlite3_create_window_function(dbDst,name,nargs,ienc,0, diff --git a/manifest b/manifest index 779e9daa92..478fdfd714 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sminor\stypo\sin\sthe\sprevious. -D 2023-10-23T23:34:53.502 +C Fix\sa\sharmless\scompiler\swarning\sin\sthe\sexpert\sextension. +D 2023-10-24T09:57:54.656 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -53,7 +53,7 @@ F ext/async/sqlite3async.h 46b47c79357b97ad85d20d2795942c0020dc20c532114a4980828 F ext/expert/README.md b321c2762bb93c18ea102d5a5f7753a4b8bac646cb392b3b437f633caf2020c3 F ext/expert/expert.c d548d603a4cc9e61f446cc179c120c6713511c413f82a4a32b1e1e69d3f086a4 F ext/expert/expert1.test 0dd5cb096d66bed593e33053a3b364f6ef52ed72064bf5cf298364636dbf3cd6 -F ext/expert/sqlite3expert.c 4255c8e53da9f777ba9222897a5e4b33a750564d61a66d72fba9c2bdc392ccf5 +F ext/expert/sqlite3expert.c 295ca3b9bd09e857820a7c86b71b25c7c763c68402de7061741ccacff21a5bb2 F ext/expert/sqlite3expert.h ca81efc2679a92373a13a3e76a6138d0310e32be53d6c3bfaedabd158ea8969b F ext/expert/test_expert.c d56c194b769bdc90cf829a14c9ecbc1edca9c850b837a4d0b13be14095c32a72 F ext/fts3/README.content b9078d0843a094d86af0d48dffbff13c906702b4c3558012e67b9c7cc3bf59ee @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 99ce9939c861ecc07877e640f75d395afb6502130bf4b5ccea8b98a80a1569ce -R f32ae66a46d5a68b60c31d8f75cc7635 +P 9d388267e4e6724e2df333fe09d509e87defcfe984c5c2ebe031152d320812d0 +R c93c65b4d457eea3e32fda50bd8711c7 U drh -Z bbd6d4c6c0e8c3badc3185a6c900116d +Z 3370819568316647d482b2f4e035059a # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 9270bb485b..0939b5868b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9d388267e4e6724e2df333fe09d509e87defcfe984c5c2ebe031152d320812d0 \ No newline at end of file +0c4907ddf9abd1ebfef31c1a53d702c4dcaa015c0032b8b52774c9e260b6cfd7 \ No newline at end of file From c0ba6a97ec377aee55b671721291d517a08ff21d Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 24 Oct 2023 11:06:44 +0000 Subject: [PATCH 05/49] Fix various harmless scan-build warnings. FossilOrigin-Name: 54be9af4469d7e31ee852f67e5aa32996557c10de654a60103fd165d2fedf311 --- ext/expert/sqlite3expert.c | 5 +++-- ext/fts3/fts3_write.c | 2 ++ ext/session/sqlite3session.c | 5 ++++- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/btree.c | 2 ++ 6 files changed, 21 insertions(+), 13 deletions(-) diff --git a/ext/expert/sqlite3expert.c b/ext/expert/sqlite3expert.c index 861cc869a8..33d62226f0 100644 --- a/ext/expert/sqlite3expert.c +++ b/ext/expert/sqlite3expert.c @@ -1870,8 +1870,9 @@ int registerUDFs(sqlite3 *dbSrc, sqlite3 *dbDst){ const char *name = (char*)sqlite3_column_text(pStmt,0); const char *type = (char*)sqlite3_column_text(pStmt,1); const char *enc = (char*)sqlite3_column_text(pStmt,2); - if( name==0 || type==0 || enc==0 ) rc = SQLITE_NOMEM; - else{ + if( name==0 || type==0 || enc==0 ){ + /* no-op. Only happens on OOM */ + }else{ int ienc = SQLITE_UTF8; int rcf = SQLITE_ERROR; if( strcmp(enc,"utf16le")==0 ) ienc = SQLITE_UTF16LE; diff --git a/ext/fts3/fts3_write.c b/ext/fts3/fts3_write.c index 08884a1b1b..0f894943dd 100644 --- a/ext/fts3/fts3_write.c +++ b/ext/fts3/fts3_write.c @@ -3981,6 +3981,8 @@ static int fts3AppendToNode( blobGrowBuffer(pPrev, nTerm, &rc); if( rc!=SQLITE_OK ) return rc; + assert( pPrev!=0 ); + assert( pPrev->a!=0 ); nPrefix = fts3PrefixCompress(pPrev->a, pPrev->n, zTerm, nTerm); nSuffix = nTerm - nPrefix; diff --git a/ext/session/sqlite3session.c b/ext/session/sqlite3session.c index e7459b1af9..a5538ddacf 100644 --- a/ext/session/sqlite3session.c +++ b/ext/session/sqlite3session.c @@ -603,8 +603,10 @@ static int sessionPreupdateHash( ** the type byte). */ static int sessionSerialLen(const u8 *a){ - int e = *a; + int e; int n; + assert( a!=0 ); + e = *a; if( e==0 || e==0xFF ) return 1; if( e==SQLITE_NULL ) return 1; if( e==SQLITE_INTEGER || e==SQLITE_FLOAT ) return 9; @@ -5450,6 +5452,7 @@ static int sessionChangeMerge( ){ SessionChange *pNew = 0; int rc = SQLITE_OK; + assert( aRec!=0 ); if( !pExist ){ pNew = (SessionChange *)sqlite3_malloc64(sizeof(SessionChange) + nRec); diff --git a/manifest b/manifest index 478fdfd714..7113776fb9 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sharmless\scompiler\swarning\sin\sthe\sexpert\sextension. -D 2023-10-24T09:57:54.656 +C Fix\svarious\sharmless\sscan-build\swarnings. +D 2023-10-24T11:06:44.828 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -53,7 +53,7 @@ F ext/async/sqlite3async.h 46b47c79357b97ad85d20d2795942c0020dc20c532114a4980828 F ext/expert/README.md b321c2762bb93c18ea102d5a5f7753a4b8bac646cb392b3b437f633caf2020c3 F ext/expert/expert.c d548d603a4cc9e61f446cc179c120c6713511c413f82a4a32b1e1e69d3f086a4 F ext/expert/expert1.test 0dd5cb096d66bed593e33053a3b364f6ef52ed72064bf5cf298364636dbf3cd6 -F ext/expert/sqlite3expert.c 295ca3b9bd09e857820a7c86b71b25c7c763c68402de7061741ccacff21a5bb2 +F ext/expert/sqlite3expert.c 90446bb1183429308c68ceb23e00cb8252f43b8886cf5efa3fc7e833b5fa24c8 F ext/expert/sqlite3expert.h ca81efc2679a92373a13a3e76a6138d0310e32be53d6c3bfaedabd158ea8969b F ext/expert/test_expert.c d56c194b769bdc90cf829a14c9ecbc1edca9c850b837a4d0b13be14095c32a72 F ext/fts3/README.content b9078d0843a094d86af0d48dffbff13c906702b4c3558012e67b9c7cc3bf59ee @@ -78,7 +78,7 @@ F ext/fts3/fts3_tokenizer.h 64c6ef6c5272c51ebe60fc607a896e84288fcbc3 F ext/fts3/fts3_tokenizer1.c c1de4ae28356ad98ccb8b2e3388a7fdcce7607b5523738c9afb6275dab765154 F ext/fts3/fts3_unicode.c de426ff05c1c2e7bce161cf6b706638419c3a1d9c2667de9cb9dc0458c18e226 F ext/fts3/fts3_unicode2.c 416eb7e1e81142703520d284b768ca2751d40e31fa912cae24ba74860532bf0f -F ext/fts3/fts3_write.c 16df5ea9ff3634821003ac71a0275e3af030517b8768680062f425a347aab5f0 +F ext/fts3/fts3_write.c 5bb4721330ca589f906e72bb824dd4080b313c6d4c4231fa541e9db32dc67982 F ext/fts3/fts3speed.tcl b54caf6a18d38174f1a6e84219950d85e98bb1e9 F ext/fts3/tool/fts3cov.sh c331d006359456cf6f8f953e37f2b9c7d568f3863f00bb5f7eb87fea4ac01b73 F ext/fts3/tool/fts3view.c 413c346399159df81f86c4928b7c4a455caab73bfbc8cd68f950f632e5751674 @@ -554,7 +554,7 @@ F ext/session/sessionrowid.test 85187c2f1b38861a5844868126f69f9ec62223a03449a98a F ext/session/sessionsize.test 8fcf4685993c3dbaa46a24183940ab9f5aa9ed0d23e5fb63bfffbdb56134b795 F ext/session/sessionstat1.test b039e38e2ba83767b464baf39b297cc0b1cc6f3292255cb467ea7e12d0d0280c F ext/session/sessionwor.test 6fd9a2256442cebde5b2284936ae9e0d54bde692d0f5fd009ecef8511f4cf3fc -F ext/session/sqlite3session.c a0694a23f9c72f25e98b7c3a1bc8cfa7e5903d4edafe31efec47de7cd54f5df9 +F ext/session/sqlite3session.c 3e8aa4bd7136b5504952b5d3ab0b2e75f2ab50c7fc2f9915ef980d382dabbf51 F ext/session/sqlite3session.h 4cf19a51975746d7cff2fdd74db8b769c570958e1c3639ac150d824ac1553b3e F ext/session/test_session.c 73e9921205633a08c1497770beecf3dcbc9b826dd4358f7f8152f706eaac5d71 F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3 @@ -660,7 +660,7 @@ F src/auth.c 19b7ccacae3dfba23fc6f1d0af68134fa216e9040e53b0681b4715445ea030b4 F src/backup.c 5c97e8023aab1ce14a42387eb3ae00ba5a0644569e3476f38661fa6f824c3523 F src/bitvec.c 9eac5f42c11914d5ef00a75605bb205e934f435c579687f985f1f8b0995c8645 F src/btmutex.c 79a43670447eacc651519a429f6ece9fd638563cf95b469d6891185ddae2b522 -F src/btree.c 58f5cca2aced6888824ed69d19a0c398d288d0840b1c72c0834525e82b10c076 +F src/btree.c f6c8512a0db0851877683e41936aac0f8927bc31630cbb1bc87ccccf79c06944 F src/btree.h 03e3356f5208bcab8eed4e094240fdac4a7f9f5ddf5e91045ce589f67d47c240 F src/btreeInt.h ef12a72b708677e48d6bc8dcd66fed25434740568b89e2cfa368093cfc5b9d15 F src/build.c 1a9061ab67987cfa9c7f9d52ccc862a31d37ad2b05faaf0d72eeb4b4b5ee37cf @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 9d388267e4e6724e2df333fe09d509e87defcfe984c5c2ebe031152d320812d0 -R c93c65b4d457eea3e32fda50bd8711c7 +P 0c4907ddf9abd1ebfef31c1a53d702c4dcaa015c0032b8b52774c9e260b6cfd7 +R 3b16c84fa7541a0bf70d90782b9e7ac2 U drh -Z 3370819568316647d482b2f4e035059a +Z 5ec383f1783155e9b83d1659c374bbaa # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 0939b5868b..cfc515ad63 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0c4907ddf9abd1ebfef31c1a53d702c4dcaa015c0032b8b52774c9e260b6cfd7 \ No newline at end of file +54be9af4469d7e31ee852f67e5aa32996557c10de654a60103fd165d2fedf311 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index ec4d02d195..7e340f5e5e 100644 --- a/src/btree.c +++ b/src/btree.c @@ -10459,6 +10459,7 @@ static void checkAppendMsg( ** corresponds to page iPg is already set. */ static int getPageReferenced(IntegrityCk *pCheck, Pgno iPg){ + assert( pCheck->aPgRef!=0 ); assert( iPg<=pCheck->nCkPage && sizeof(pCheck->aPgRef[0])==1 ); return (pCheck->aPgRef[iPg/8] & (1 << (iPg & 0x07))); } @@ -10467,6 +10468,7 @@ static int getPageReferenced(IntegrityCk *pCheck, Pgno iPg){ ** Set the bit in the IntegrityCk.aPgRef[] array that corresponds to page iPg. */ static void setPageReferenced(IntegrityCk *pCheck, Pgno iPg){ + assert( pCheck->aPgRef!=0 ); assert( iPg<=pCheck->nCkPage && sizeof(pCheck->aPgRef[0])==1 ); pCheck->aPgRef[iPg/8] |= (1 << (iPg & 0x07)); } From da67619d97fa031bd45ff8671cfed6e412ccaee3 Mon Sep 17 00:00:00 2001 From: larrybr Date: Tue, 24 Oct 2023 15:07:28 +0000 Subject: [PATCH 06/49] Spelling improvements, in comments only FossilOrigin-Name: 65bcc583784476f8cc52dfe72ecc52df93d0ec5817c313ad7a83905c0047dd8c --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/sqlite.h.in | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 7113776fb9..e835acc8d2 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\svarious\sharmless\sscan-build\swarnings. -D 2023-10-24T11:06:44.828 +C Spelling\simprovements,\sin\scomments\sonly +D 2023-10-24T15:07:28.933 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -723,7 +723,7 @@ F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c f9d8ece7f0742d7b835efa9590ccda4eccee5b9def7581ec94f556e3c52efe51 F src/shell.c.in 66995332610ed7d47483152c4c78810519ca9ac8b2f93ee884127ce330ca12e8 -F src/sqlite.h.in b37b3df6fb0684929446c095e81287fbdffd64f55481e4195ee7768f2f0ae72e +F src/sqlite.h.in cd71e0cc6a301796c47d7944222b82cb75ac82fa9ed8879bc647c5bb85e07052 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac F src/sqliteInt.h cf6646e8694a63749096e1f086767a2c1920dca9848ec2dbe9f7bfb961d322ef @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 0c4907ddf9abd1ebfef31c1a53d702c4dcaa015c0032b8b52774c9e260b6cfd7 -R 3b16c84fa7541a0bf70d90782b9e7ac2 -U drh -Z 5ec383f1783155e9b83d1659c374bbaa +P 54be9af4469d7e31ee852f67e5aa32996557c10de654a60103fd165d2fedf311 +R 4534a93cc60bc9b01f38eb8cc54ed3a2 +U larrybr +Z bbcec0ff0072931f8df68fe4f02cd0b5 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index cfc515ad63..9fa7c19753 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -54be9af4469d7e31ee852f67e5aa32996557c10de654a60103fd165d2fedf311 \ No newline at end of file +65bcc583784476f8cc52dfe72ecc52df93d0ec5817c313ad7a83905c0047dd8c \ No newline at end of file diff --git a/src/sqlite.h.in b/src/sqlite.h.in index b915ef4fb7..23a8162ae2 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -2127,7 +2127,7 @@ struct sqlite3_mem_methods { ** is stored in each sorted record and the required column values loaded ** from the database as records are returned in sorted order. The default ** value for this option is to never use this optimization. Specifying a -** negative value for this option restores the default behaviour. +** negative value for this option restores the default behavior. ** This option is only available if SQLite is compiled with the ** [SQLITE_ENABLE_SORTER_REFERENCES] compile-time option. ** @@ -5960,7 +5960,7 @@ void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*)); **
  • The database connection closes. SQLite does not make any guarantees ** about the order in which destructors are called, only that all ** destructors will be called exactly once at some point during the -** database connection closingi process. +** database connection closing process. ** ** ** SQLite does not do anything with client data other than invoke @@ -6756,7 +6756,7 @@ void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); ** ^Each call to the sqlite3_autovacuum_pages() interface overrides all ** previous invocations for that database connection. ^If the callback ** argument (C) to sqlite3_autovacuum_pages(D,C,P,X) is a NULL pointer, -** then the autovacuum steps callback is cancelled. The return value +** then the autovacuum steps callback is canceled. The return value ** from sqlite3_autovacuum_pages() is normally SQLITE_OK, but might ** be some other error code if something goes wrong. The current ** implementation will only return SQLITE_OK or SQLITE_MISUSE, but other From bdcae89358b5cfdc303ddd4b85ef95fb52dc6ba7 Mon Sep 17 00:00:00 2001 From: larrybr Date: Tue, 24 Oct 2023 15:11:55 +0000 Subject: [PATCH 07/49] Spelling improvements, in comments only FossilOrigin-Name: 9ee25eeaf17124dbe34b961384e74c1ae239ee1798bb01907938600ed6b4066f --- manifest | 10 +++++----- manifest.uuid | 2 +- src/sqlite.h.in | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index e835acc8d2..3c9098773b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ C Spelling\simprovements,\sin\scomments\sonly -D 2023-10-24T15:07:28.933 +D 2023-10-24T15:11:55.292 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -723,7 +723,7 @@ F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c f9d8ece7f0742d7b835efa9590ccda4eccee5b9def7581ec94f556e3c52efe51 F src/shell.c.in 66995332610ed7d47483152c4c78810519ca9ac8b2f93ee884127ce330ca12e8 -F src/sqlite.h.in cd71e0cc6a301796c47d7944222b82cb75ac82fa9ed8879bc647c5bb85e07052 +F src/sqlite.h.in e9047d63745272ebe5c91bf994f9bbc608edfbc3b0be9873062e9a69657bf984 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac F src/sqliteInt.h cf6646e8694a63749096e1f086767a2c1920dca9848ec2dbe9f7bfb961d322ef @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 54be9af4469d7e31ee852f67e5aa32996557c10de654a60103fd165d2fedf311 -R 4534a93cc60bc9b01f38eb8cc54ed3a2 +P 65bcc583784476f8cc52dfe72ecc52df93d0ec5817c313ad7a83905c0047dd8c +R c8334cab1fcc469c9751c0c187d23f95 U larrybr -Z bbcec0ff0072931f8df68fe4f02cd0b5 +Z 39c62f83179e0f32d38df3d4da9ac443 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 9fa7c19753..1f637be117 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -65bcc583784476f8cc52dfe72ecc52df93d0ec5817c313ad7a83905c0047dd8c \ No newline at end of file +9ee25eeaf17124dbe34b961384e74c1ae239ee1798bb01907938600ed6b4066f \ No newline at end of file diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 23a8162ae2..43a1d524d1 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -2302,7 +2302,7 @@ struct sqlite3_mem_methods { ** database handle, SQLite checks if this will mean that there are now no ** connections at all to the database. If so, it performs a checkpoint ** operation before closing the connection. This option may be used to -** override this behaviour. The first parameter passed to this operation +** override this behavior. The first parameter passed to this operation ** is an integer - positive to disable checkpoints-on-close, or zero (the ** default) to enable them, and negative to leave the setting unchanged. ** The second parameter is a pointer to an integer @@ -7765,7 +7765,7 @@ int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64); ** code is returned and the transaction rolled back. ** ** Calling this function with an argument that is not a NULL pointer or an -** open blob handle results in undefined behaviour. ^Calling this routine +** open blob handle results in undefined behavior. ^Calling this routine ** with a null pointer (such as would be returned by a failed call to ** [sqlite3_blob_open()]) is a harmless no-op. ^Otherwise, if this function ** is passed a valid open blob handle, the values returned by the @@ -9307,8 +9307,8 @@ int sqlite3_backup_pagecount(sqlite3_backup *p); ** blocked connection already has a registered unlock-notify callback, ** then the new callback replaces the old.)^ ^If sqlite3_unlock_notify() is ** called with a NULL pointer as its second argument, then any existing -** unlock-notify callback is cancelled. ^The blocked connections -** unlock-notify callback may also be cancelled by closing the blocked +** unlock-notify callback is canceled. ^The blocked connections +** unlock-notify callback may also be canceled by closing the blocked ** connection using [sqlite3_close()]. ** ** The unlock-notify callback is not reentrant. If an application invokes From d548f7402477840b4f3abc0da5ef86799eaaca28 Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 24 Oct 2023 15:53:02 +0000 Subject: [PATCH 08/49] Fix a problem with the fts5 highlight() and snippet() functions when used with tokenizers like "trigram" that output overlapping tokens. Forum post [forum:/forumpost/63735293ec|63735293ec]. FossilOrigin-Name: d570aa02f79b1d7d3889e33f9eebab1b7edcf5231b1357451eed9a538607de54 --- ext/fts5/fts5_aux.c | 51 ++++++++++++++++++++++++++-------- ext/fts5/test/fts5trigram.test | 38 +++++++++++++++++++++++++ manifest | 19 +++++++------ manifest.uuid | 2 +- 4 files changed, 89 insertions(+), 21 deletions(-) diff --git a/ext/fts5/fts5_aux.c b/ext/fts5/fts5_aux.c index b178f47334..fa58b9aac3 100644 --- a/ext/fts5/fts5_aux.c +++ b/ext/fts5/fts5_aux.c @@ -110,15 +110,19 @@ static int fts5CInstIterInit( */ typedef struct HighlightContext HighlightContext; struct HighlightContext { - CInstIter iter; /* Coalesced Instance Iterator */ - int iPos; /* Current token offset in zIn[] */ + /* Constant parameters to fts5HighlightCb() */ int iRangeStart; /* First token to include */ int iRangeEnd; /* If non-zero, last token to include */ const char *zOpen; /* Opening highlight */ const char *zClose; /* Closing highlight */ const char *zIn; /* Input text */ int nIn; /* Size of input text in bytes */ - int iOff; /* Current offset within zIn[] */ + + /* Variables modified by fts5HighlightCb() */ + CInstIter iter; /* Coalesced Instance Iterator */ + int iPos; /* Current token offset in zIn[] */ + int iOff; /* Have copied up to this offset in zIn[] */ + int bOpen; /* True if highlight is open */ char *zOut; /* Output value */ }; @@ -151,8 +155,8 @@ static int fts5HighlightCb( int tflags, /* Mask of FTS5_TOKEN_* flags */ const char *pToken, /* Buffer containing token */ int nToken, /* Size of token in bytes */ - int iStartOff, /* Start offset of token */ - int iEndOff /* End offset of token */ + int iStartOff, /* Start byte offset of token */ + int iEndOff /* End byte offset of token */ ){ HighlightContext *p = (HighlightContext*)pContext; int rc = SQLITE_OK; @@ -168,30 +172,47 @@ static int fts5HighlightCb( if( p->iRangeStart && iPos==p->iRangeStart ) p->iOff = iStartOff; } - if( iPos==p->iter.iStart ){ + /* If the parenthesis is open, and this token is not part of the current + ** phrase, and the starting byte offset of this token is past the point + ** that has currently been copied into the output buffer, close the + ** parenthesis. */ + if( p->bOpen + && (iPos<=p->iter.iStart || p->iter.iStart<0) + && iStartOff>p->iOff + ){ + fts5HighlightAppend(&rc, p, p->zClose, -1); + p->bOpen = 0; + } + + /* If this is the start of a new phrase, and the highlight is not open: + ** + ** * copy text from the input up to the start of the phrase, and + ** * open the highlight. + */ + if( iPos==p->iter.iStart && p->bOpen==0 ){ fts5HighlightAppend(&rc, p, &p->zIn[p->iOff], iStartOff - p->iOff); fts5HighlightAppend(&rc, p, p->zOpen, -1); p->iOff = iStartOff; + p->bOpen = 1; } if( iPos==p->iter.iEnd ){ - if( p->iRangeEnd>=0 && p->iter.iStartiRangeStart ){ + if( p->bOpen==0 ){ + assert( p->iRangeEnd>=0 ); fts5HighlightAppend(&rc, p, p->zOpen, -1); + p->bOpen = 1; } fts5HighlightAppend(&rc, p, &p->zIn[p->iOff], iEndOff - p->iOff); - fts5HighlightAppend(&rc, p, p->zClose, -1); p->iOff = iEndOff; + if( rc==SQLITE_OK ){ rc = fts5CInstIterNext(&p->iter); } } - if( p->iRangeEnd>=0 && iPos==p->iRangeEnd ){ + if( iPos==p->iRangeEnd ){ fts5HighlightAppend(&rc, p, &p->zIn[p->iOff], iEndOff - p->iOff); p->iOff = iEndOff; - if( iPos>=p->iter.iStart && iPositer.iEnd ){ - fts5HighlightAppend(&rc, p, p->zClose, -1); - } } return rc; @@ -232,6 +253,9 @@ static void fts5HighlightFunction( if( rc==SQLITE_OK ){ rc = pApi->xTokenize(pFts, ctx.zIn, ctx.nIn, (void*)&ctx,fts5HighlightCb); } + if( ctx.bOpen ){ + fts5HighlightAppend(&rc, &ctx, ctx.zClose, -1); + } fts5HighlightAppend(&rc, &ctx, &ctx.zIn[ctx.iOff], ctx.nIn - ctx.iOff); if( rc==SQLITE_OK ){ @@ -510,6 +534,9 @@ static void fts5SnippetFunction( if( rc==SQLITE_OK ){ rc = pApi->xTokenize(pFts, ctx.zIn, ctx.nIn, (void*)&ctx,fts5HighlightCb); } + if( ctx.bOpen ){ + fts5HighlightAppend(&rc, &ctx, ctx.zClose, -1); + } if( ctx.iRangeEnd>=(nColSize-1) ){ fts5HighlightAppend(&rc, &ctx, &ctx.zIn[ctx.iOff], ctx.nIn - ctx.iOff); }else{ diff --git a/ext/fts5/test/fts5trigram.test b/ext/fts5/test/fts5trigram.test index 951daf1440..351c059bf5 100644 --- a/ext/fts5/test/fts5trigram.test +++ b/ext/fts5/test/fts5trigram.test @@ -215,4 +215,42 @@ do_execsql_test 7.2 { SELECT rowid FROM f WHERE filename GLOB '*ир*'; } {20} + +#------------------------------------------------------------------------- +reset_db +do_execsql_test 8.0 { + CREATE VIRTUAL TABLE t1 USING fts5(y, tokenize=trigram); + INSERT INTO t1 VALUES('abcdefghijklm'); +} + +foreach {tn match res} { + 1 "abc ghi" "(abc)def(ghi)jklm" + 2 "def ghi" "abc(defghi)jklm" + 3 "efg ghi" "abcd(efghi)jklm" + 4 "efghi" "abcd(efghi)jklm" + 5 "abcd jklm" "(abcd)efghi(jklm)" + 6 "ijkl jklm" "abcdefgh(ijklm)" + 7 "ijk ijkl hijk" "abcdefg(hijkl)m" + +} { + do_execsql_test 8.1.$tn { + SELECT highlight(t1, 0, '(', ')') FROM t1($match) + } $res +} + +do_execsql_test 8.2 { + CREATE VIRTUAL TABLE ft2 USING fts5(a, tokenize="trigram"); + INSERT INTO ft2 VALUES('abc x cde'); + INSERT INTO ft2 VALUES('abc cde'); + INSERT INTO ft2 VALUES('abcde'); +} + +do_execsql_test 8.3 { + SELECT highlight(ft2, 0, '[', ']') FROM ft2 WHERE ft2 MATCH 'abc AND cde'; +} { + {[abc] x [cde]} + {[abc] [cde]} + {[abcde]} +} + finish_test diff --git a/manifest b/manifest index 478fdfd714..5cbda42c7c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sharmless\scompiler\swarning\sin\sthe\sexpert\sextension. -D 2023-10-24T09:57:54.656 +C Fix\sa\sproblem\swith\sthe\sfts5\shighlight()\sand\ssnippet()\sfunctions\swhen\sused\swith\stokenizers\slike\s"trigram"\sthat\soutput\soverlapping\stokens.\sForum\spost\s[forum:/forumpost/63735293ec|63735293ec]. +D 2023-10-24T15:53:02.462 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -89,7 +89,7 @@ F ext/fts3/unicode/parseunicode.tcl a981bd6466d12dd17967515801c3ff23f74a281be1a0 F ext/fts5/extract_api_docs.tcl a36e54ec777172ddd3f9a88daf593b00848368e0 F ext/fts5/fts5.h 05501612cc655504c5dce8ba765ab621d50fc478490089beaa0d75e00b23e520 F ext/fts5/fts5Int.h 78a63cc0795186cde5384816a9403a68c65774b35d952e05b81a1b4b158e07c8 -F ext/fts5/fts5_aux.c 572d5ec92ba7301df2fea3258576332f2f4d2dfd66d8263afd157d9deceac480 +F ext/fts5/fts5_aux.c 35c4101613eff86902877a4dedd9400b07922e412cbdd637b45041dce2fd5388 F ext/fts5/fts5_buffer.c 3001fbabb585d6de52947b44b455235072b741038391f830d6b729225eeaf6a5 F ext/fts5/fts5_config.c 054359543566cbff1ba65a188330660a5457299513ac71c53b3a07d934c7b081 F ext/fts5/fts5_expr.c bd3b81ce669c4104e34ffe66570af1999a317b142c15fccb112de9fb0caa57a6 @@ -216,7 +216,7 @@ F ext/fts5/test/fts5synonym2.test 8f891fc49cc1e8daed727051e77e1f42849c784a6a54be F ext/fts5/test/fts5tok1.test 1f7817499f5971450d8c4a652114b3d833393c8134e32422d0af27884ffe9cef F ext/fts5/test/fts5tok2.test dcacb32d4a2a3f0dd3215d4a3987f78ae4be21a2 F ext/fts5/test/fts5tokenizer.test ac3c9112b263a639fb0508ae73a3ee886bf4866d2153771a8e8a20c721305a43 -F ext/fts5/test/fts5trigram.test c76acc1913a06182e791a0dfdae285b9cdd67327a1a35b34cabf0a6aa09cf05e +F ext/fts5/test/fts5trigram.test 6c4e37864f3e7d90673db5563d9736d7e40080ab94d10ebdffa94c1b77941da0 F ext/fts5/test/fts5ubsan.test 783d5a8d13ebfa169e634940228db54540780e3ba7a87ad1e4510e61440bf64b F ext/fts5/test/fts5umlaut.test a42fe2fe6387c40c49ab27ccbd070e1ae38e07f38d05926482cc0bccac9ad602 F ext/fts5/test/fts5unicode.test 17056f4efe6b0a5d4f41fdf7a7dc9af2873004562eaa899d40633b93dc95f5a9 @@ -2138,8 +2138,11 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 9d388267e4e6724e2df333fe09d509e87defcfe984c5c2ebe031152d320812d0 -R c93c65b4d457eea3e32fda50bd8711c7 -U drh -Z 3370819568316647d482b2f4e035059a +P 0c4907ddf9abd1ebfef31c1a53d702c4dcaa015c0032b8b52774c9e260b6cfd7 +R 41175df0065ba91132d9e078adcc9517 +T *branch * fts5-trigram-snippet-fix +T *sym-fts5-trigram-snippet-fix * +T -sym-trunk * +U dan +Z fb6ef8c426c83834a5c6c815bfcd6614 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 0939b5868b..3af9e01b11 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0c4907ddf9abd1ebfef31c1a53d702c4dcaa015c0032b8b52774c9e260b6cfd7 \ No newline at end of file +d570aa02f79b1d7d3889e33f9eebab1b7edcf5231b1357451eed9a538607de54 \ No newline at end of file From 9d486435f116feb0ff3e46254fb51b0606082913 Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 24 Oct 2023 16:16:27 +0000 Subject: [PATCH 09/49] New #ifdefs to fix certain compile-time options. FossilOrigin-Name: 688c6279ef1d4ff8d58e83a1c73ca0221ab8570a7cd89459946a86afdad6ec1c --- manifest | 17 ++++++++--------- manifest.uuid | 2 +- src/main.c | 2 ++ src/vdbe.c | 8 ++++++++ 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index f72955b93a..8c2d2c043e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sproblem\swith\sthe\sfts5\shighlight()\sand\ssnippet()\sfunctions\swhen\sused\swith\stokenizers\slike\s"trigram"\sthat\soutput\soverlapping\stokens.\sForum\spost\s[forum:/forumpost/63735293ec|63735293ec]. -D 2023-10-24T16:06:56.794 +C New\s#ifdefs\sto\sfix\scertain\scompile-time\soptions. +D 2023-10-24T16:16:27.059 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -684,7 +684,7 @@ F src/insert.c 3f0a94082d978bbdd33c38fefea15346c6c6bffb70bc645a71dc0f1f87dd3276 F src/json.c d69c6e28ff7b602877bda68cd20583b8487c059759aa4d154dd21b3fd99c6238 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c 7d56c6f28aaf9b42e2772289e0d0a12a77b57c2baed021dbfd1fcafec69c156a -F src/main.c e3166de468267c7d2888af536b8a9454a8e13c39700fdd9560213a6cf00b714a +F src/main.c e1bc8864834697503d370d94613be945d05ca1c5ebdda43e7d5c8ee8c48d433c F src/malloc.c f016922435dc7d1f1f5083a03338a3e91f8c67ce2c5bdcfa4cdef62e612f5fcc F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c 3bb59158c38e05f6270e761a9f435bf19827a264c13d1631c58b84bdc96d73b2 @@ -791,7 +791,7 @@ F src/upsert.c fa125a8d3410ce9a97b02cb50f7ae68a2476c405c76aa692d3acf6b8586e9242 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0 F src/util.c b22cc9f203a8c0b9ee5338a67f8860347d14845864c10248bebe84518a781677 F src/vacuum.c 604fcdaebe76f3497c855afcbf91b8fa5046b32de3045bab89cc008d68e40104 -F src/vdbe.c 300b1ac9339a5b7db9ccd48c1a13c3d71722da13352a38ee042ca0a399b4dd7e +F src/vdbe.c af7eace744ec425f7f0c3c298b3471f6144b2648b15882f285a6852b3bd2fe83 F src/vdbe.h 41485521f68e9437fdb7ec4a90f9d86ab294e9bb8281e33b235915e29122cfc0 F src/vdbeInt.h 949669dfd8a41550d27dcb905b494f2ccde9a2e6c1b0b04daa1227e2e74c2b2c F src/vdbeapi.c fe654b1f54e1feebcaed6c2ae3ed035cc65bfeb9a1169bed866abc42bfc63ff6 @@ -2138,9 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 9ee25eeaf17124dbe34b961384e74c1ae239ee1798bb01907938600ed6b4066f d570aa02f79b1d7d3889e33f9eebab1b7edcf5231b1357451eed9a538607de54 -R 4c04974dbac2d5b02e9db5f09d63c22c -T +closed d570aa02f79b1d7d3889e33f9eebab1b7edcf5231b1357451eed9a538607de54 -U dan -Z 7a83bdd07c56b465bbc46bd2267d0f1f +P e952db86faaafd2ef8558175ebcae6834d0b0002813cc78c7ae7da713604cbec +R 235d95e16d499ec1c60f3973e144465a +U drh +Z b1a1ae289b7963d5b110e3f6be1d2e73 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 200a4a1138..9c840ba0ce 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e952db86faaafd2ef8558175ebcae6834d0b0002813cc78c7ae7da713604cbec \ No newline at end of file +688c6279ef1d4ff8d58e83a1c73ca0221ab8570a7cd89459946a86afdad6ec1c \ No newline at end of file diff --git a/src/main.c b/src/main.c index de9e248d11..fbe00f5fa9 100644 --- a/src/main.c +++ b/src/main.c @@ -382,7 +382,9 @@ int sqlite3_initialize(void){ /* Experimentally determine if high-precision floating point is ** available. */ +#ifndef SQLITE_OMIT_WSD sqlite3Config.bUseLongDouble = hasHighPrecisionDouble(rc); +#endif return rc; } diff --git a/src/vdbe.c b/src/vdbe.c index b7bf8c0ec7..3a5c70d696 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -6911,21 +6911,29 @@ case OP_CreateBtree: { /* out2 */ */ case OP_SqlExec: { char *zErr; +#ifndef SQLITE_OMIT_AUTHORIZATION sqlite3_xauth xAuth; +#endif u8 mTrace; sqlite3VdbeIncrWriteCounter(p, 0); db->nSqlExec++; zErr = 0; +#ifndef SQLITE_OMIT_AUTHORIZATION xAuth = db->xAuth; +#endif mTrace = db->mTrace; if( pOp->p1 ){ +#ifndef SQLITE_OMIT_AUTHORIZATION db->xAuth = 0; +#endif db->mTrace = 0; } rc = sqlite3_exec(db, pOp->p4.z, 0, 0, &zErr); db->nSqlExec--; +#ifndef SQLITE_OMIT_AUTHORIZATION db->xAuth = xAuth; +#endif db->mTrace = mTrace; if( zErr || rc ){ sqlite3VdbeError(p, "%s", zErr); From 85b1f5c2f6a05ba151496122fc62b10d560498ca Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 24 Oct 2023 17:45:11 +0000 Subject: [PATCH 10/49] Test cases for COLLATE and NULLS FIRST/LAST in the ORDER BY for an aggregate function. FossilOrigin-Name: 641f928feb8b6cfd64cb03992bc18c1653960b6eaeb35145d17df494727c7a11 --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/aggorderby.test | 26 ++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 8c2d2c043e..9af5eb1bf6 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C New\s#ifdefs\sto\sfix\scertain\scompile-time\soptions. -D 2023-10-24T16:16:27.059 +C Test\scases\sfor\sCOLLATE\sand\sNULLS\sFIRST/LAST\sin\sthe\sORDER\sBY\sfor\san\naggregate\sfunction. +D 2023-10-24T17:45:11.642 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -817,7 +817,7 @@ F test/affinity3.test f094773025eddf31135c7ad4cde722b7696f8eb07b97511f98585addf2 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 F test/aggfault.test 777f269d0da5b0c2524c7ff6d99ae9a93db4f1b1839a914dd2a12e3035c29829 F test/aggnested.test 2e738bfe2980df301a782f6e7bbf9459266f64f7e72f58f3b5c843bf897c568c -F test/aggorderby.test d110490c62d29318fa56831cd67bc49b07789592f1cdd7881725735ecd05308a +F test/aggorderby.test 4a4b2d49532124fbb799a2c014e5134d0e6db2345b19286d027e227e0f383dfa F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87 F test/all.test 2ecb8bbd52416642e41c9081182a8df05d42c75637afd4488aace78cc4b69e13 F test/alter.test 403a7f8842457044a994d0ffb42963d6e84fcfbf5e8f54556063b25d966cd454 @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P e952db86faaafd2ef8558175ebcae6834d0b0002813cc78c7ae7da713604cbec -R 235d95e16d499ec1c60f3973e144465a +P 688c6279ef1d4ff8d58e83a1c73ca0221ab8570a7cd89459946a86afdad6ec1c +R 3064fd7ebff205f56ff9b901509432de U drh -Z b1a1ae289b7963d5b110e3f6be1d2e73 +Z 43199bfadf9e01e03c769a5bbfeebed2 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 9c840ba0ce..bcf1742392 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -688c6279ef1d4ff8d58e83a1c73ca0221ab8570a7cd89459946a86afdad6ec1c \ No newline at end of file +641f928feb8b6cfd64cb03992bc18c1653960b6eaeb35145d17df494727c7a11 \ No newline at end of file diff --git a/test/aggorderby.test b/test/aggorderby.test index bf77a7d4cf..61adb9ae14 100644 --- a/test/aggorderby.test +++ b/test/aggorderby.test @@ -76,4 +76,30 @@ do_execsql_test aggorderby-5.3 { SELECT (SELECT string_agg(a,'#' ORDER BY d) FROM t3) FROM t1; } {aaa#aaa bbb#bbb} +# COLLATE works on the ORDER BY. +# +do_execsql_test aggorderby-6.0 { + WITH c(x) AS (VALUES('abc'),('DEF'),('xyz'),('ABC'),('XYZ')) + SELECT string_agg(x,',' ORDER BY x COLLATE nocase), + string_agg(x,',' ORDER BY x) FROM c; +} {abc,ABC,DEF,xyz,XYZ ABC,DEF,XYZ,abc,xyz} +do_execsql_test aggorderby-6.1 { + WITH c(x,y) AS (VALUES(1,'a'),(2,'B'),(3,'c'),(4,'D')) + SELECT group_concat(x ORDER BY y COLLATE nocase), + group_concat(x ORDER BY y COLLATE binary) FROM c; +} {1,2,3,4 2,4,1,3} + +# NULLS FIRST and NULLS LAST work on the ORDER BY +# +do_execsql_test aggorderby-7.0 { + WITH c(x) AS (VALUES(1),(NULL),(2.5),(NULL),('three')) + SELECT json_group_array(x ORDER BY x NULLS FIRST), + json_group_array(x ORDER BY x NULLS LAST) FROM c; +} {[null,null,1,2.5,"three"] [1,2.5,"three",null,null]} +do_execsql_test aggorderby-7.1 { + WITH c(x,y) AS (VALUES(1,9),(2,null),(3,5),(4,null),(5,1)) + SELECT json_group_array(x ORDER BY y NULLS FIRST, x), + json_group_array(x ORDER BY y NULLS LAST, x) FROM c; +} {[2,4,5,3,1] [5,3,1,2,4]} + finish_test From f4154879ebb84fc0875d553e2de60d8ed4864da9 Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 24 Oct 2023 19:56:57 +0000 Subject: [PATCH 11/49] Implement check-in [477577120b897bf1] differently, so as not to disrupt non-standard build configuration. See [forum:/forumpost/c11523ca2df50293|forum post c11523ca2df50293]. FossilOrigin-Name: 50448fe4fdc8fd93303fe26bdcd885ecc606080c8e66e69d5be8dac28a77492b --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/shell.c.in | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 9af5eb1bf6..b9774f5769 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Test\scases\sfor\sCOLLATE\sand\sNULLS\sFIRST/LAST\sin\sthe\sORDER\sBY\sfor\san\naggregate\sfunction. -D 2023-10-24T17:45:11.642 +C Implement\scheck-in\s[477577120b897bf1]\sdifferently,\sso\sas\snot\sto\sdisrupt\nnon-standard\sbuild\sconfiguration.\sSee\n[forum:/forumpost/c11523ca2df50293|forum\spost\sc11523ca2df50293]. +D 2023-10-24T19:56:57.182 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -722,7 +722,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c f9d8ece7f0742d7b835efa9590ccda4eccee5b9def7581ec94f556e3c52efe51 -F src/shell.c.in 66995332610ed7d47483152c4c78810519ca9ac8b2f93ee884127ce330ca12e8 +F src/shell.c.in acc452c414fddd10289d165be3c89a7a2c36c919def04c93fb7dd11ac022e6ed F src/sqlite.h.in e9047d63745272ebe5c91bf994f9bbc608edfbc3b0be9873062e9a69657bf984 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 688c6279ef1d4ff8d58e83a1c73ca0221ab8570a7cd89459946a86afdad6ec1c -R 3064fd7ebff205f56ff9b901509432de +P 641f928feb8b6cfd64cb03992bc18c1653960b6eaeb35145d17df494727c7a11 +R 07cab3cfe441872ad8db93a7e61dc6f3 U drh -Z 43199bfadf9e01e03c769a5bbfeebed2 +Z 7ea3a838c923da816dd181b561116bed # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index bcf1742392..b418b289bf 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -641f928feb8b6cfd64cb03992bc18c1653960b6eaeb35145d17df494727c7a11 \ No newline at end of file +50448fe4fdc8fd93303fe26bdcd885ecc606080c8e66e69d5be8dac28a77492b \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index 50f78acca8..b78759c002 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -454,6 +454,7 @@ static int stdin_is_interactive = 1; # define SHELL_WIN_UTF8_OPT 1 static int console_utf8 = sizeof(char*)/4 - 1; #else +# define console_utf8 0 # define SHELL_WIN_UTF8_OPT 0 #endif From 9f20bde65a26e13b512ec521421c7b892ad6eadd Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 25 Oct 2023 10:37:11 +0000 Subject: [PATCH 12/49] Enhance the new xIntegrity method of the sqlite3_module object with new parameters that provide the name of the table being checked and a flag to indicate a "quick_check". Based on feedback in [forum:/forumpost/965c0d02ea|forum post 965c0d02ea]. FossilOrigin-Name: bc8afa3f15954bb35f65dbf940bf069de5e14d333036676c24430cf17b658d05 --- ext/fts3/fts3.c | 17 +++++++++++++---- ext/fts5/fts5_main.c | 16 ++++++++++++---- ext/rtree/rtree.c | 14 ++++++++++++-- manifest | 22 +++++++++++----------- manifest.uuid | 2 +- src/pragma.c | 2 +- src/sqlite.h.in | 2 +- src/vdbe.c | 17 ++++++++++------- 8 files changed, 61 insertions(+), 31 deletions(-) diff --git a/ext/fts3/fts3.c b/ext/fts3/fts3.c index 6f8668534f..65852804a1 100644 --- a/ext/fts3/fts3.c +++ b/ext/fts3/fts3.c @@ -4006,15 +4006,24 @@ static int fts3ShadowName(const char *zName){ ** Implementation of the xIntegrity() method on the FTS3/FTS4 virtual ** table. */ -static int fts3Integrity(sqlite3_vtab *pVtab, char **pzErr){ +static int fts3Integrity( + sqlite3_vtab *pVtab, /* The virtual table to be checked */ + const char *zSchema, /* Name of schema in which pVtab lives */ + const char *zTabname, /* Name of the pVTab table */ + int isQuick, /* True if this is a quick_check */ + char **pzErr /* Write error message here */ +){ Fts3Table *p = (Fts3Table*)pVtab; char *zSql; int rc; char *zErr = 0; + assert( pzErr!=0 ); + assert( *pzErr==0 ); + UNUSED_PARAMETER(isQuick); zSql = sqlite3_mprintf( "INSERT INTO \"%w\".\"%w\"(\"%w\") VALUES('integrity-check');", - p->zDb, p->zName, p->zName); + zSchema, zTabname, zTabname); if( zSql==0 ){ return SQLITE_NOMEM; } @@ -4022,11 +4031,11 @@ static int fts3Integrity(sqlite3_vtab *pVtab, char **pzErr){ sqlite3_free(zSql); if( (rc&0xff)==SQLITE_CORRUPT ){ *pzErr = sqlite3_mprintf("malformed inverted index for FTS%d table %s.%s", - p->bFts4 ? 4 : 3, p->zDb, p->zName); + p->bFts4 ? 4 : 3, zSchema, zTabname); }else if( rc!=SQLITE_OK ){ *pzErr = sqlite3_mprintf("unable to validate the inverted index for" " FTS%d table %s.%s: %s", - p->bFts4 ? 4 : 3, p->zDb, p->zName, zErr); + p->bFts4 ? 4 : 3, zSchema, zTabname, zErr); } sqlite3_free(zErr); return SQLITE_OK; diff --git a/ext/fts5/fts5_main.c b/ext/fts5/fts5_main.c index c78af28b61..6e86ca5951 100644 --- a/ext/fts5/fts5_main.c +++ b/ext/fts5/fts5_main.c @@ -2914,25 +2914,33 @@ static int fts5ShadowName(const char *zName){ ** if anything is found amiss. Return a NULL pointer if everything is ** OK. */ -static int fts5Integrity(sqlite3_vtab *pVtab, char **pzErr){ +static int fts5Integrity( + sqlite3_vtab *pVtab, /* the FTS5 virtual table to check */ + const char *zSchema, /* Name of schema in which this table lives */ + const char *zTabname, /* Name of the table itself */ + int isQuick, /* True if this is a quick-check */ + char **pzErr /* Write error message here */ +){ Fts5FullTable *pTab = (Fts5FullTable*)pVtab; Fts5Config *pConfig = pTab->p.pConfig; char *zSql; char *zErr = 0; int rc; + assert( pzErr!=0 && *pzErr==0 ); + UNUSED_PARAM(isQuick); zSql = sqlite3_mprintf( "INSERT INTO \"%w\".\"%w\"(\"%w\") VALUES('integrity-check');", - pConfig->zDb, pConfig->zName, pConfig->zName); + zSchema, zTabname, pConfig->zName); if( zSql==0 ) return SQLITE_NOMEM; rc = sqlite3_exec(pConfig->db, zSql, 0, 0, &zErr); sqlite3_free(zSql); if( (rc&0xff)==SQLITE_CORRUPT ){ *pzErr = sqlite3_mprintf("malformed inverted index for FTS5 table %s.%s", - pConfig->zDb, pConfig->zName); + zSchema, zTabname); }else if( rc!=SQLITE_OK ){ *pzErr = sqlite3_mprintf("unable to validate the inverted index for" " FTS5 table %s.%s: %s", - pConfig->zDb, pConfig->zName, zErr); + zSchema, zTabname, zErr); } sqlite3_free(zErr); return SQLITE_OK; diff --git a/ext/rtree/rtree.c b/ext/rtree/rtree.c index 682c052c56..1705abd51c 100644 --- a/ext/rtree/rtree.c +++ b/ext/rtree/rtree.c @@ -3332,7 +3332,7 @@ static int rtreeShadowName(const char *zName){ } /* Forward declaration */ -static int rtreeIntegrity(sqlite3_vtab*, char**); +static int rtreeIntegrity(sqlite3_vtab*, const char*, const char*, int, char**); static sqlite3_module rtreeModule = { 4, /* iVersion */ @@ -4187,9 +4187,19 @@ static int rtreeCheckTable( /* ** Implementation of the xIntegrity method for Rtree. */ -static int rtreeIntegrity(sqlite3_vtab *pVtab, char **pzErr){ +static int rtreeIntegrity( + sqlite3_vtab *pVtab, /* The virtual table to check */ + const char *zSchema, /* Schema in which the virtual table lives */ + const char *zName, /* Name of the virtual table */ + int isQuick, /* True for a quick_check */ + char **pzErr /* Write results here */ +){ Rtree *pRtree = (Rtree*)pVtab; int rc; + assert( pzErr!=0 && *pzErr==0 ); + UNUSED_PARAMETER(zSchema); + UNUSED_PARAMETER(zName); + UNUSED_PARAMETER(isQuick); rc = rtreeCheckTable(pRtree->db, pRtree->zDb, pRtree->zName, pzErr); if( rc==SQLITE_OK && *pzErr ){ *pzErr = sqlite3_mprintf("In RTree %s.%s:\n%z", diff --git a/manifest b/manifest index b9774f5769..90799478a8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Implement\scheck-in\s[477577120b897bf1]\sdifferently,\sso\sas\snot\sto\sdisrupt\nnon-standard\sbuild\sconfiguration.\sSee\n[forum:/forumpost/c11523ca2df50293|forum\spost\sc11523ca2df50293]. -D 2023-10-24T19:56:57.182 +C Enhance\sthe\snew\sxIntegrity\smethod\sof\sthe\ssqlite3_module\sobject\swith\snew\nparameters\sthat\sprovide\sthe\sname\sof\sthe\stable\sbeing\schecked\sand\na\sflag\sto\sindicate\sa\s"quick_check".\s\sBased\son\sfeedback\sin\n[forum:/forumpost/965c0d02ea|forum\spost\s965c0d02ea]. +D 2023-10-25T10:37:11.394 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -60,7 +60,7 @@ F ext/fts3/README.content b9078d0843a094d86af0d48dffbff13c906702b4c3558012e67b9c F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a F ext/fts3/README.tokenizers b92bdeb8b46503f0dd301d364efc5ef59ef9fa8e2758b8e742f39fa93a2e422d F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d -F ext/fts3/fts3.c 7e23ea4675ed55b54d33aeb6227da6fb19f072a81a93230a8866f3803e33f35a +F ext/fts3/fts3.c d01dfb641fc04efeeadcb94d7a8342eb07d71c1a3a3852ec8ab5e64c1fcdfff9 F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe F ext/fts3/fts3Int.h be688580701d41340de73384e3acc8c55be12a438583207444bd5e20f9ef426c F ext/fts3/fts3_aux.c 7eab82a9cf0830f6551ba3abfdbe73ed39e322a4d3940ee82fbf723674ecd9f3 @@ -95,7 +95,7 @@ F ext/fts5/fts5_config.c 054359543566cbff1ba65a188330660a5457299513ac71c53b3a07d F ext/fts5/fts5_expr.c bd3b81ce669c4104e34ffe66570af1999a317b142c15fccb112de9fb0caa57a6 F ext/fts5/fts5_hash.c 65e7707bc8774706574346d18c20218facf87de3599b995963c3e6d6809f203d F ext/fts5/fts5_index.c 730c9c32ada18ce1eb7ff847b36507f4b005d88d47af7b47db521e695a8ea4c7 -F ext/fts5/fts5_main.c 0a0ddd6c6d1d790bacbba838efd7882e1986a283915cce9097c6e6513ccd8fb5 +F ext/fts5/fts5_main.c a07ed863b8bd9e6fefb62db2fd40a3518eb30a5f7dcfda5be915dd2db45efa2f F ext/fts5/fts5_storage.c 5d10b9bdcce5b90656cad13c7d12ad4148677d4b9e3fca0481fca56d6601426d F ext/fts5/fts5_tcl.c b1445cbe69908c411df8084a10b2485500ac70a9c747cdc8cda175a3da59d8ae F ext/fts5/fts5_test_mi.c 08c11ec968148d4cb4119d96d819f8c1f329812c568bac3684f5464be177d3ee @@ -481,7 +481,7 @@ F ext/repair/test/checkindex01.test b530f141413b587c9eb78ff734de6bb79bc3515c3350 F ext/repair/test/test.tcl 686d76d888dffd021f64260abf29a55c57b2cedfa7fc69150b42b1d6119aac3c F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761 F ext/rtree/geopoly.c 0dd4775e896cee6067979d67aff7c998e75c2c9d9cd8d62a1a790c09cde7adca -F ext/rtree/rtree.c da842644466b84391e9fa1b1d5a17f461b475b8e36f1217117d1d98ad5f437e3 +F ext/rtree/rtree.c 2e1452a9338fe4db057fa677277bed86b65c667ed48b9b59144adae99f85a7cb F ext/rtree/rtree.h 4a690463901cb5e6127cf05eb8e642f127012fd5003830dbc974eca5802d9412 F ext/rtree/rtree1.test ecc881fdd1bc10fc390faa988ad93343739af84384e4cf3619fed7afada66a30 F ext/rtree/rtree2.test 9d9deddbb16fd0c30c36e6b4fdc3ee3132d765567f0f9432ee71e1303d32603d @@ -714,7 +714,7 @@ F src/parse.y 020d80386eb216ec9520549106353c517d2bbc89be28752ffdca649a9eaf56ec F src/pcache.c 040b165f30622a21b7a9a77c6f2e4877a32fb7f22d4c7f0d2a6fa6833a156a75 F src/pcache.h 1497ce1b823cf00094bb0cf3bac37b345937e6f910890c626b16512316d3abf5 F src/pcache1.c 602acb23c471bb8d557a6f0083cc2be641d6cafcafa19e481eba7ef4c9ca0f00 -F src/pragma.c 2c44dca04a9970d0174da30f1dcd227541deb9e0269378d15bb2fc58d6fff88e +F src/pragma.c b3b4ad9c0298d63098a067acca613c21a5f56b4d176d5842922bcd0b07b7164e F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7 F src/prepare.c bde74add20fc0e8ce0c4e937a1f70a36d17413afe4f71d3e103f5cb74b17c8d9 F src/printf.c 9da63b9ae1c14789bcae12840f5d800fd9302500cd2d62733fac77f0041b4750 @@ -723,7 +723,7 @@ F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c f9d8ece7f0742d7b835efa9590ccda4eccee5b9def7581ec94f556e3c52efe51 F src/shell.c.in acc452c414fddd10289d165be3c89a7a2c36c919def04c93fb7dd11ac022e6ed -F src/sqlite.h.in e9047d63745272ebe5c91bf994f9bbc608edfbc3b0be9873062e9a69657bf984 +F src/sqlite.h.in 81c70644aeef9c974f72c9cadeb505ebb9441d2f6db594c018604ae935a12e6e F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac F src/sqliteInt.h cf6646e8694a63749096e1f086767a2c1920dca9848ec2dbe9f7bfb961d322ef @@ -791,7 +791,7 @@ F src/upsert.c fa125a8d3410ce9a97b02cb50f7ae68a2476c405c76aa692d3acf6b8586e9242 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0 F src/util.c b22cc9f203a8c0b9ee5338a67f8860347d14845864c10248bebe84518a781677 F src/vacuum.c 604fcdaebe76f3497c855afcbf91b8fa5046b32de3045bab89cc008d68e40104 -F src/vdbe.c af7eace744ec425f7f0c3c298b3471f6144b2648b15882f285a6852b3bd2fe83 +F src/vdbe.c 14479441337135eed8e290fb1d4abb7db657d93217a3b1ea8a2f031d3895536a F src/vdbe.h 41485521f68e9437fdb7ec4a90f9d86ab294e9bb8281e33b235915e29122cfc0 F src/vdbeInt.h 949669dfd8a41550d27dcb905b494f2ccde9a2e6c1b0b04daa1227e2e74c2b2c F src/vdbeapi.c fe654b1f54e1feebcaed6c2ae3ed035cc65bfeb9a1169bed866abc42bfc63ff6 @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 641f928feb8b6cfd64cb03992bc18c1653960b6eaeb35145d17df494727c7a11 -R 07cab3cfe441872ad8db93a7e61dc6f3 +P 50448fe4fdc8fd93303fe26bdcd885ecc606080c8e66e69d5be8dac28a77492b +R 30ef2af5a58be5aa899fd43e3a6be25e U drh -Z 7ea3a838c923da816dd181b561116bed +Z aefb39a97493c6e3bdb1f5a57cd2f3c5 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index b418b289bf..9bbe515f93 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -50448fe4fdc8fd93303fe26bdcd885ecc606080c8e66e69d5be8dac28a77492b \ No newline at end of file +bc8afa3f15954bb35f65dbf940bf069de5e14d333036676c24430cf17b658d05 \ No newline at end of file diff --git a/src/pragma.c b/src/pragma.c index d310b83a34..90076b0c26 100644 --- a/src/pragma.c +++ b/src/pragma.c @@ -1778,7 +1778,7 @@ void sqlite3Pragma( if( NEVER(pVTab->pModule==0) ) continue; if( pVTab->pModule->iVersion<4 ) continue; if( pVTab->pModule->xIntegrity==0 ) continue; - sqlite3VdbeAddOp2(v, OP_VCheck, 0, 3); + sqlite3VdbeAddOp3(v, OP_VCheck, i, 3, isQuick); sqlite3VdbeAppendP4(v, pTab, P4_TABLE); a1 = sqlite3VdbeAddOp1(v, OP_IsNull, 3); VdbeCoverage(v); integrityCheckResultRow(v); diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 43a1d524d1..f3db71dea9 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -7277,7 +7277,7 @@ struct sqlite3_module { int (*xShadowName)(const char*); /* The methods above are in versions 1 through 3 of the sqlite_module object. ** Those below are for version 4 and greater. */ - int (*xIntegrity)(sqlite3_vtab *pVTab, char**); + int (*xIntegrity)(sqlite3_vtab *pVTab, const char*, const char*, int, char**); }; /* diff --git a/src/vdbe.c b/src/vdbe.c index 3a5c70d696..221e8847db 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -8162,13 +8162,14 @@ case OP_VOpen: { /* ncycle */ #endif /* SQLITE_OMIT_VIRTUALTABLE */ #ifndef SQLITE_OMIT_VIRTUALTABLE -/* Opcode: VCheck * P2 * P4 * +/* Opcode: VCheck P1 P2 P3 P4 * ** -** P4 is a pointer to a Table object that is a virtual table that -** supports the xIntegrity() method. This opcode runs the xIntegrity() -** method for that virtual table. If an error is reported back, the error -** message is stored in register P2. If no errors are seen, register P2 -** is set to NULL. +** P4 is a pointer to a Table object that is a virtual table in schema P1 +** that supports the xIntegrity() method. This opcode runs the xIntegrity() +** method for that virtual table, using P3 as the integer argument. If +** an error is reported back, the table name is prepended to the error +** message and that message is stored in P2. If no errors are seen, +** register P2 is set to NULL. */ case OP_VCheck: { /* out2 */ Table *pTab; @@ -8191,7 +8192,9 @@ case OP_VCheck: { /* out2 */ assert( pModule->xIntegrity!=0 ); pTab->nTabRef++; sqlite3VtabLock(pTab->u.vtab.p); - rc = pModule->xIntegrity(pVtab, &zErr); + assert( pOp->p1>=0 && pOp->p1nDb ); + rc = pModule->xIntegrity(pVtab, db->aDb[pOp->p1].zDbSName, pTab->zName, + pOp->p3, &zErr); sqlite3VtabUnlock(pTab->u.vtab.p); sqlite3DeleteTable(db, pTab); if( rc ){ From a9a7d118f68d0209f99b03a5f6754f0218ea6019 Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 25 Oct 2023 12:58:06 +0000 Subject: [PATCH 13/49] Fix the amalgamation generator so that when it is reporting the Fossil version number in the header comment of the amalgamation, it does not elide the first hex digit of the version hash. FossilOrigin-Name: cc66f526bd58c110cac027583f636099fa05b2b56d7ea9807b554cd950c1bf3c --- manifest | 12 ++++++------ manifest.uuid | 2 +- tool/mksqlite3c.tcl | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 90799478a8..6d4c13160e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enhance\sthe\snew\sxIntegrity\smethod\sof\sthe\ssqlite3_module\sobject\swith\snew\nparameters\sthat\sprovide\sthe\sname\sof\sthe\stable\sbeing\schecked\sand\na\sflag\sto\sindicate\sa\s"quick_check".\s\sBased\son\sfeedback\sin\n[forum:/forumpost/965c0d02ea|forum\spost\s965c0d02ea]. -D 2023-10-25T10:37:11.394 +C Fix\sthe\samalgamation\sgenerator\sso\sthat\swhen\sit\sis\sreporting\sthe\sFossil\nversion\snumber\sin\sthe\sheader\scomment\sof\sthe\samalgamation,\sit\sdoes\snot\nelide\sthe\sfirst\shex\sdigit\sof\sthe\sversion\shash. +D 2023-10-25T12:58:06.512 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -2069,7 +2069,7 @@ F tool/mkshellc.tcl b7adf08b82de60811d2cb6af05ff59fc17e5cd6f3e98743c14eaaa3f8971 F tool/mksourceid.c 36aa8020014aed0836fd13c51d6dc9219b0df1761d6b5f58ff5b616211b079b9 F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97 F tool/mksqlite3c-noext.tcl 4f7cfef5152b0c91920355cbfc1d608a4ad242cb819f1aea07f6d0274f584a7f -F tool/mksqlite3c.tcl 49e39b1e616abc92fd8c24445f2b0a38881825f764541e0026f72371f0d84b65 +F tool/mksqlite3c.tcl 2c760ab786cb509b47f00c96fea82994866cb99f5e046df81c768288f57897b4 F tool/mksqlite3h.tcl d391cff7cad0a372ee1406faee9ccc7dad9cb80a0c95cae0f73d10dd26e06762 F tool/mksqlite3internalh.tcl eb994013e833359137eb53a55acdad0b5ae1049b F tool/mktoolzip.tcl 6e17f53eb924c76ea5f290cf7b8f554cc245ad6299e46928419abcd2de691663 @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 50448fe4fdc8fd93303fe26bdcd885ecc606080c8e66e69d5be8dac28a77492b -R 30ef2af5a58be5aa899fd43e3a6be25e +P bc8afa3f15954bb35f65dbf940bf069de5e14d333036676c24430cf17b658d05 +R 6ec86e3a31586d43a486c38d42879355 U drh -Z aefb39a97493c6e3bdb1f5a57cd2f3c5 +Z 0c4d685f28f353f462c813fc0dbcad7d # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 9bbe515f93..83cc6773bf 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bc8afa3f15954bb35f65dbf940bf069de5e14d333036676c24430cf17b658d05 \ No newline at end of file +cc66f526bd58c110cac027583f636099fa05b2b56d7ea9807b554cd950c1bf3c \ No newline at end of file diff --git a/tool/mksqlite3c.tcl b/tool/mksqlite3c.tcl index 6def8fa447..53fa59ac7a 100644 --- a/tool/mksqlite3c.tcl +++ b/tool/mksqlite3c.tcl @@ -116,7 +116,7 @@ if {$tcl_platform(platform)=="windows"} { if {[file executable $vsrcprog] && [file readable $srcroot/manifest]} { set res [string trim [split [exec $vsrcprog -x $srcroot]] \n] puts $out "** The content in this amalgamation comes from Fossil check-in" - puts -nonewline $out "** [string range [lindex $res 0] 1 35]" + puts -nonewline $out "** [string range [lindex $res 0] 0 35]" if {[llength $res]==1} { puts $out "." } else { From 8f99cb9ad69c8d423c4760fe67b78a0c01a1cff6 Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 25 Oct 2023 14:54:16 +0000 Subject: [PATCH 14/49] When doing a DISTINCT aggregate that contains an ORDER BY, only the arguments to the aggregate need to be distinct, not the ORDER BY terms. FossilOrigin-Name: d2dbbdf7194bab4e5e3b74d3dbffb012a335829824c775c72dd7347c013d2125 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/expr.c | 3 ++- src/select.c | 8 ++++++-- test/aggorderby.test | 17 +++++++++++++++++ 5 files changed, 34 insertions(+), 12 deletions(-) diff --git a/manifest b/manifest index 6d4c13160e..1fc4f1f48b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\samalgamation\sgenerator\sso\sthat\swhen\sit\sis\sreporting\sthe\sFossil\nversion\snumber\sin\sthe\sheader\scomment\sof\sthe\samalgamation,\sit\sdoes\snot\nelide\sthe\sfirst\shex\sdigit\sof\sthe\sversion\shash. -D 2023-10-25T12:58:06.512 +C When\sdoing\sa\sDISTINCT\saggregate\sthat\scontains\san\sORDER\sBY,\sonly\sthe\narguments\sto\sthe\saggregate\sneed\sto\sbe\sdistinct,\snot\sthe\sORDER\sBY\sterms. +D 2023-10-25T14:54:16.468 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -671,7 +671,7 @@ F src/date.c eebc54a00e888d3c56147779e9f361b77d62fd69ff2008c5373946aa1ba1d574 F src/dbpage.c 80e46e1df623ec40486da7a5086cb723b0275a6e2a7b01d9f9b5da0f04ba2782 F src/dbstat.c 3b677254d512fcafd4d0b341bf267b38b235ccfddbef24f9154e19360fa22e43 F src/delete.c cb766727c78e715f9fb7ec8a7d03658ed2a3016343ca687acfcec9083cdca500 -F src/expr.c 072dc4029ccfb4be3d227b559d6d531c46c5fc95cd89f2db17a2e154a3144d71 +F src/expr.c 2ad50ae13cc6402973593eebd1f9af2c0915d5f7cc2c2f4f2f3472a9a7aeddce F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c a47610f0a5c6cb0ad79f8fcef039c01833dec0c751bb695f28dc0ec6a4c3ba00 F src/func.c 472f6dcfa39cf54f89a6aec76c79c225fb880a6c14469c15d361331662b9bf43 @@ -721,7 +721,7 @@ F src/printf.c 9da63b9ae1c14789bcae12840f5d800fd9302500cd2d62733fac77f0041b4750 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 -F src/select.c f9d8ece7f0742d7b835efa9590ccda4eccee5b9def7581ec94f556e3c52efe51 +F src/select.c 845936a85dd39be43a7b76aa0a5c1e68105bf0b98e4986124f78052254e3fe5b F src/shell.c.in acc452c414fddd10289d165be3c89a7a2c36c919def04c93fb7dd11ac022e6ed F src/sqlite.h.in 81c70644aeef9c974f72c9cadeb505ebb9441d2f6db594c018604ae935a12e6e F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -817,7 +817,7 @@ F test/affinity3.test f094773025eddf31135c7ad4cde722b7696f8eb07b97511f98585addf2 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 F test/aggfault.test 777f269d0da5b0c2524c7ff6d99ae9a93db4f1b1839a914dd2a12e3035c29829 F test/aggnested.test 2e738bfe2980df301a782f6e7bbf9459266f64f7e72f58f3b5c843bf897c568c -F test/aggorderby.test 4a4b2d49532124fbb799a2c014e5134d0e6db2345b19286d027e227e0f383dfa +F test/aggorderby.test e6b98dbbf3ababa96892435d387de2dcf602ef02c2b848d2d817473066f154ba F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87 F test/all.test 2ecb8bbd52416642e41c9081182a8df05d42c75637afd4488aace78cc4b69e13 F test/alter.test 403a7f8842457044a994d0ffb42963d6e84fcfbf5e8f54556063b25d966cd454 @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P bc8afa3f15954bb35f65dbf940bf069de5e14d333036676c24430cf17b658d05 -R 6ec86e3a31586d43a486c38d42879355 +P cc66f526bd58c110cac027583f636099fa05b2b56d7ea9807b554cd950c1bf3c +R 2001118bd227fdbabf4cf18d4c63742c U drh -Z 0c4d685f28f353f462c813fc0dbcad7d +Z 9e38892552611c3668b16789a65f9f49 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 83cc6773bf..2a3eea65c3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cc66f526bd58c110cac027583f636099fa05b2b56d7ea9807b554cd950c1bf3c \ No newline at end of file +d2dbbdf7194bab4e5e3b74d3dbffb012a335829824c775c72dd7347c013d2125 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 010c8ce6ab..e071c96908 100644 --- a/src/expr.c +++ b/src/expr.c @@ -6806,16 +6806,17 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){ pItem->iOBTab = pParse->nTab++; pOBList = pExpr->pLeft->x.pList; assert( pOBList->nExpr>0 ); + assert( pItem->bOBUnique==0 ); if( pOBList->nExpr==1 && nArg==1 && sqlite3ExprCompare(0,pOBList->a[0].pExpr, pExpr->x.pList->a[0].pExpr,0)==0 ){ pItem->bOBPayload = 0; + pItem->bOBUnique = ExprHasProperty(pExpr, EP_Distinct); }else{ pItem->bOBPayload = 1; } - pItem->bOBUnique = ExprHasProperty(pExpr, EP_Distinct); }else{ pItem->iOBTab = -1; } diff --git a/src/select.c b/src/select.c index 29df3325f3..5530321744 100644 --- a/src/select.c +++ b/src/select.c @@ -6771,6 +6771,7 @@ static void updateAccumulator( int addrNext = 0; int regAgg; int regAggSz = 0; + int regDistinct = 0; ExprList *pList; assert( ExprUseXList(pF->pFExpr) ); assert( !IsWindowFunc(pF->pFExpr) ); @@ -6820,6 +6821,7 @@ static void updateAccumulator( } regAggSz++; /* One extra register to hold result of MakeRecord */ regAgg = sqlite3GetTempRange(pParse, regAggSz); + regDistinct = regAgg; sqlite3ExprCodeExprList(pParse, pOBList, regAgg, 0, SQLITE_ECEL_DUP); jj = pOBList->nExpr; if( !pF->bOBUnique ){ @@ -6827,11 +6829,13 @@ static void updateAccumulator( jj++; } if( pF->bOBPayload ){ - sqlite3ExprCodeExprList(pParse, pList, regAgg+jj, 0, SQLITE_ECEL_DUP); + regDistinct = regAgg+jj; + sqlite3ExprCodeExprList(pParse, pList, regDistinct, 0, SQLITE_ECEL_DUP); } }else if( pList ){ nArg = pList->nExpr; regAgg = sqlite3GetTempRange(pParse, nArg); + regDistinct = regAgg; sqlite3ExprCodeExprList(pParse, pList, regAgg, 0, SQLITE_ECEL_DUP); }else{ nArg = 0; @@ -6842,7 +6846,7 @@ static void updateAccumulator( addrNext = sqlite3VdbeMakeLabel(pParse); } pF->iDistinct = codeDistinct(pParse, eDistinctType, - pF->iDistinct, addrNext, pList, regAgg); + pF->iDistinct, addrNext, pList, regDistinct); } if( pF->iOBTab>=0 ){ /* Insert a new record into the ORDER BY table */ diff --git a/test/aggorderby.test b/test/aggorderby.test index 61adb9ae14..f94c5ec898 100644 --- a/test/aggorderby.test +++ b/test/aggorderby.test @@ -102,4 +102,21 @@ do_execsql_test aggorderby-7.1 { json_group_array(x ORDER BY y NULLS LAST, x) FROM c; } {[2,4,5,3,1] [5,3,1,2,4]} +# The DISTINCT only applies to the function arguments, not to the +# ORDER BY arguments. +# +do_execsql_test aggorderby-8.0 { + WITH c(x,y,z) AS (VALUES('a',4,5),('b',3,6),('c',2,7),('c',1,8)) + SELECT group_concat(DISTINCT x ORDER BY y, z) FROM c; +} {c,b,a} +do_execsql_test aggorderby-8.1 { + WITH c(x,y,z) AS (VALUES('a',4,5),('b',3,6),('b',2,7),('c',1,8)) + SELECT group_concat(DISTINCT x ORDER BY y, z) FROM c; +} {c,b,a} +do_execsql_test aggorderby-8.2 { + WITH c(x,y) AS (VALUES(1,1),(2,2),(3,3),(3,4),(3,5),(3,6)) + SELECT sum(DISTINCT x ORDER BY y) FROM c; +} 6 + + finish_test From 47a484d8ed62b7455a915575c7311e878fb3bec6 Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 25 Oct 2023 15:30:11 +0000 Subject: [PATCH 15/49] Add an ALWAYS on branch that was made always-true by the DISTINCT ORDER BY fix. FossilOrigin-Name: c29ebcb0be8e969c359c077bd4ce752a9c952d2659062868f12efdd2cc77186d --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/select.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 1fc4f1f48b..8ad88c1414 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C When\sdoing\sa\sDISTINCT\saggregate\sthat\scontains\san\sORDER\sBY,\sonly\sthe\narguments\sto\sthe\saggregate\sneed\sto\sbe\sdistinct,\snot\sthe\sORDER\sBY\sterms. -D 2023-10-25T14:54:16.468 +C Add\san\sALWAYS\son\sbranch\sthat\swas\smade\salways-true\sby\sthe\sDISTINCT\sORDER\sBY\nfix. +D 2023-10-25T15:30:11.779 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -721,7 +721,7 @@ F src/printf.c 9da63b9ae1c14789bcae12840f5d800fd9302500cd2d62733fac77f0041b4750 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 -F src/select.c 845936a85dd39be43a7b76aa0a5c1e68105bf0b98e4986124f78052254e3fe5b +F src/select.c 64c9bc7494f3d220a27498137551762c25458282388ea9ac0a710dd6d5dc1510 F src/shell.c.in acc452c414fddd10289d165be3c89a7a2c36c919def04c93fb7dd11ac022e6ed F src/sqlite.h.in 81c70644aeef9c974f72c9cadeb505ebb9441d2f6db594c018604ae935a12e6e F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P cc66f526bd58c110cac027583f636099fa05b2b56d7ea9807b554cd950c1bf3c -R 2001118bd227fdbabf4cf18d4c63742c +P d2dbbdf7194bab4e5e3b74d3dbffb012a335829824c775c72dd7347c013d2125 +R 69224f49fd227efd4871d1e294714787 U drh -Z 9e38892552611c3668b16789a65f9f49 +Z 09c12c04ae80362f6524540f0fd3a848 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 2a3eea65c3..d996fb461a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d2dbbdf7194bab4e5e3b74d3dbffb012a335829824c775c72dd7347c013d2125 \ No newline at end of file +c29ebcb0be8e969c359c077bd4ce752a9c952d2659062868f12efdd2cc77186d \ No newline at end of file diff --git a/src/select.c b/src/select.c index 5530321744..0dac37b10c 100644 --- a/src/select.c +++ b/src/select.c @@ -6715,7 +6715,7 @@ static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){ assert( ExprUseXList(pF->pFExpr->pLeft) ); assert( pF->pFExpr->pLeft->x.pList!=0 ); nKey = pF->pFExpr->pLeft->x.pList->nExpr; - if( !pF->bOBUnique ) nKey++; + if( ALWAYS(!pF->bOBUnique) ) nKey++; } iTop = sqlite3VdbeAddOp1(v, OP_Rewind, pF->iOBTab); VdbeCoverage(v); for(j=nArg-1; j>=0; j--){ From b7086c48b68ca57ee6048e7d770b029b37336e56 Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 25 Oct 2023 17:26:11 +0000 Subject: [PATCH 16/49] Test module altermalloc3.test requires DQS_DDL to be turned on. FossilOrigin-Name: c4d02f4b0761a2836aa34f204e725f49478a19b02160e694e01042e6e7766167 --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/altermalloc3.test | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 8ad88c1414..11a7a1493b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\san\sALWAYS\son\sbranch\sthat\swas\smade\salways-true\sby\sthe\sDISTINCT\sORDER\sBY\nfix. -D 2023-10-25T15:30:11.779 +C Test\smodule\saltermalloc3.test\srequires\sDQS_DDL\sto\sbe\sturned\son. +D 2023-10-25T17:26:11.573 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -834,7 +834,7 @@ F test/alterfault.test 289067108947bedca27534edd4ff251bcd298cf84402d7b24eaa37493 F test/alterlegacy.test f38c6d06cda39e1f7b955bbce57f2e3ef5b7cb566d3d1234502093e228c15811 F test/altermalloc.test 167a47de41b5c638f5f5c6efb59784002b196fff70f98d9b4ed3cd74a3fb80c9 F test/altermalloc2.test 17fb3724c4b004c469c27dc4ef181608aa644555fbd3f3236767584f73747c81 -F test/altermalloc3.test 8531b3086f0a7889f43971a579a8c81832d5123f4703d8c86b89ba1136c63b9a +F test/altermalloc3.test 8040e486368403f2fdd6fc3998258b499bd4cc2f3ddbb5f8f874cd436f076e81 F test/alterqf.test 8ec03d776de9c391daa0078ea8f838903bdcfb11dfae4ba3576b48436834ccba F test/altertab.test 8a2712f9076da5012a002d0b5cc0a421398a5bf61c25bab41b77c427586a7a27 F test/altertab2.test 62597b6fd08feaba1b6bfe7d31dac6117c67e06dc9ce9c478a3abe75b5926de0 @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P d2dbbdf7194bab4e5e3b74d3dbffb012a335829824c775c72dd7347c013d2125 -R 69224f49fd227efd4871d1e294714787 +P c29ebcb0be8e969c359c077bd4ce752a9c952d2659062868f12efdd2cc77186d +R 1801e0da56e4876ff07eaa2fbc6ddd00 U drh -Z 09c12c04ae80362f6524540f0fd3a848 +Z 79a4773e545153772af92c625c1e9ce1 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index d996fb461a..ffa1fbbd6e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c29ebcb0be8e969c359c077bd4ce752a9c952d2659062868f12efdd2cc77186d \ No newline at end of file +c4d02f4b0761a2836aa34f204e725f49478a19b02160e694e01042e6e7766167 \ No newline at end of file diff --git a/test/altermalloc3.test b/test/altermalloc3.test index 2dc0b46f29..47efebe228 100644 --- a/test/altermalloc3.test +++ b/test/altermalloc3.test @@ -26,6 +26,7 @@ set ::TMPDBERROR [list 1 \ {unable to open a temporary database file for storing temporary tables} ] +sqlite3_db_config db SQLITE_DBCONFIG_DQS_DDL 1 do_execsql_test 1.0 { CREATE TABLE x1( one, two, three, PRIMARY KEY(one), From 1d91f8619b8c82c0603977b4cb95f8fcc4aeafa1 Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 25 Oct 2023 18:35:48 +0000 Subject: [PATCH 17/49] Fix minor problems with the "showwal" utility program. Add a missing header to the zipfile.c extension. FossilOrigin-Name: 7b3f866e619c2b781b613493727cd111335ceec690d984408725c756feff26e6 --- ext/misc/zipfile.c | 1 + manifest | 14 +++++++------- manifest.uuid | 2 +- tool/showwal.c | 23 +++++++++++++++++------ 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/ext/misc/zipfile.c b/ext/misc/zipfile.c index 416a49443b..db327809f8 100644 --- a/ext/misc/zipfile.c +++ b/ext/misc/zipfile.c @@ -29,6 +29,7 @@ SQLITE_EXTENSION_INIT1 #include #include #include +#include #include diff --git a/manifest b/manifest index 11a7a1493b..9f37b1635c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Test\smodule\saltermalloc3.test\srequires\sDQS_DDL\sto\sbe\sturned\son. -D 2023-10-25T17:26:11.573 +C Fix\sminor\sproblems\swith\sthe\s"showwal"\sutility\sprogram.\s\sAdd\sa\smissing\sheader\nto\sthe\szipfile.c\sextension. +D 2023-10-25T18:35:48.042 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -404,7 +404,7 @@ F ext/misc/vfsstat.c a85df08654743922a19410d7b1e3111de41bb7cd07d20dd16eda4e2b808 F ext/misc/vtablog.c f2c9d41afe00b51b2c8307b79f508eb0c2dcd57bae074807944e73376fcf15b7 F ext/misc/vtshim.c 1976e6dd68dd0d64508c91a6dfab8e75f8aaf6cd F ext/misc/wholenumber.c 0fa0c082676b7868bf2fa918e911133f2b349bcdceabd1198bba5f65b4fc0668 -F ext/misc/zipfile.c 59af123b4595801d495f55167523b68e840b8e5bfcbbb73f84cbc6a65a994ac2 +F ext/misc/zipfile.c 64cb3d98b6316586e6056d182051aa9d28fdedfbf4b908e6b7a7d70209b1db11 F ext/misc/zorder.c b0ff58fa643afa1d846786d51ea8d5c4b6b35aa0254ab5a82617db92f3adda64 F ext/rbu/rbu.c 801450b24eaf14440d8fd20385aacc751d5c9d6123398df41b1b5aa804bf4ce8 F ext/rbu/rbu1.test 25870dd7db7eb5597e2b4d6e29e7a7e095abf332660f67d89959552ce8f8f255 @@ -2088,7 +2088,7 @@ F tool/showjournal.c 5bad7ae8784a43d2b270d953060423b8bd480818 F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/showshm.c a0ab6ec32dd1f11218ca2a4018f8fb875b59414801ab8ceed8b2e69b7b45a809 F tool/showstat4.c 0682ebea7abf4d3657f53c4a243f2e7eab48eab344ed36a94bb75dcd19a5c2a1 -F tool/showwal.c 65ecabae3a2dcff4116301d5a8dbb8c4964814da1b2aff6d85c806a88b71fa4e +F tool/showwal.c 11eca547980a066b081f512636151233350ac679f29ecf4ebfce7f4530230b3d F tool/soak1.tcl 8d407956e1a45b485a8e072470a3e629a27037fe F tool/spaceanal.tcl 70c87c04cfd2e77b3e6f21c33ca768296aa8f67d4ab4874786ac8fbb28433477 F tool/speed-check.sh 72dc85b2c0484af971ee3e7d10775f72b4e771e27e162c2099b3bf25517c25fb @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P c29ebcb0be8e969c359c077bd4ce752a9c952d2659062868f12efdd2cc77186d -R 1801e0da56e4876ff07eaa2fbc6ddd00 +P c4d02f4b0761a2836aa34f204e725f49478a19b02160e694e01042e6e7766167 +R 0b8f4aebc898107714a7e5d3cf2077d1 U drh -Z 79a4773e545153772af92c625c1e9ce1 +Z 420ad20bfbeee1b4c84bf5501f995f57 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index ffa1fbbd6e..bb1906f202 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c4d02f4b0761a2836aa34f204e725f49478a19b02160e694e01042e6e7766167 \ No newline at end of file +7b3f866e619c2b781b613493727cd111335ceec690d984408725c756feff26e6 \ No newline at end of file diff --git a/tool/showwal.c b/tool/showwal.c index a8e9b53b32..7e6c0e17cd 100644 --- a/tool/showwal.c +++ b/tool/showwal.c @@ -543,15 +543,26 @@ int main(int argc, char **argv){ } zPgSz[0] = 0; zPgSz[1] = 0; - lseek(fd, 8, SEEK_SET); - read(fd, zPgSz, 4); + fstat(fd, &sbuf); + if( sbuf.st_size<32 ){ + printf("%s: file too small to be a WAL - only %d bytes\n", + argv[1], (int)sbuf.st_size); + return 0; + } + if( lseek(fd, 8, SEEK_SET)!=8 ){ + printf("\"%s\" seems to not be a valid WAL file\n", argv[1]); + return 1; + } + if( read(fd, zPgSz, 4)!=4 ){ + printf("\"%s\": cannot read the page size\n", argv[1]); + return 1; + } pagesize = zPgSz[1]*65536 + zPgSz[2]*256 + zPgSz[3]; if( pagesize==0 ) pagesize = 1024; printf("Pagesize: %d\n", pagesize); - fstat(fd, &sbuf); - if( sbuf.st_size<32 ){ - printf("file too small to be a WAL\n"); - return 0; + if( (pagesize & (pagesize-1))!=0 || pagesize<512 || pagesize>65536 ){ + printf("\"%s\": invalid page size.\n", argv[1]); + return 1; } mxFrame = (sbuf.st_size - 32)/(pagesize + 24); printf("Available pages: 1..%d\n", mxFrame); From d91884586a773b72f6fbaa46a86c56797fa24282 Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 25 Oct 2023 18:53:00 +0000 Subject: [PATCH 18/49] Provide dummy parameter names in the prototype for the new xIntegrity method of the sqlite3_module object. FossilOrigin-Name: 131374d720a365cbbe3031a2bc0a34ba1c74e751e39c66e484dbce07ab49fb62 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/sqlite.h.in | 3 ++- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 9f37b1635c..1e5e13f419 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sminor\sproblems\swith\sthe\s"showwal"\sutility\sprogram.\s\sAdd\sa\smissing\sheader\nto\sthe\szipfile.c\sextension. -D 2023-10-25T18:35:48.042 +C Provide\sdummy\sparameter\snames\sin\sthe\sprototype\sfor\sthe\snew\sxIntegrity\smethod\nof\sthe\ssqlite3_module\sobject. +D 2023-10-25T18:53:00.881 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -723,7 +723,7 @@ F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 64c9bc7494f3d220a27498137551762c25458282388ea9ac0a710dd6d5dc1510 F src/shell.c.in acc452c414fddd10289d165be3c89a7a2c36c919def04c93fb7dd11ac022e6ed -F src/sqlite.h.in 81c70644aeef9c974f72c9cadeb505ebb9441d2f6db594c018604ae935a12e6e +F src/sqlite.h.in 428948ef39b3ef7b675ec12bd4853619bad77279b5fa38e3a51c5b9656ae16ff F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac F src/sqliteInt.h cf6646e8694a63749096e1f086767a2c1920dca9848ec2dbe9f7bfb961d322ef @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P c4d02f4b0761a2836aa34f204e725f49478a19b02160e694e01042e6e7766167 -R 0b8f4aebc898107714a7e5d3cf2077d1 +P 7b3f866e619c2b781b613493727cd111335ceec690d984408725c756feff26e6 +R 6d9977d57ab2d179650d1da7f78d796f U drh -Z 420ad20bfbeee1b4c84bf5501f995f57 +Z 667356e5303058006da752293bd2707e # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index bb1906f202..ac5295a4da 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7b3f866e619c2b781b613493727cd111335ceec690d984408725c756feff26e6 \ No newline at end of file +131374d720a365cbbe3031a2bc0a34ba1c74e751e39c66e484dbce07ab49fb62 \ No newline at end of file diff --git a/src/sqlite.h.in b/src/sqlite.h.in index f3db71dea9..d8caf81067 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -7277,7 +7277,8 @@ struct sqlite3_module { int (*xShadowName)(const char*); /* The methods above are in versions 1 through 3 of the sqlite_module object. ** Those below are for version 4 and greater. */ - int (*xIntegrity)(sqlite3_vtab *pVTab, const char*, const char*, int, char**); + int (*xIntegrity)(sqlite3_vtab *pVTab, const char *zSchema, + const char *zTabName, int mFlags, char **pzErr); }; /* From 208f5c65d4d97b7257bd13adcf2bcb07a34352b2 Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 25 Oct 2023 19:06:23 +0000 Subject: [PATCH 19/49] Fix harmless compiler warnings. FossilOrigin-Name: cc8efe0494b8fe0df18aa67b1675779bf704d1ac53647fe1f7f55d8048041680 --- ext/misc/mmapwarm.c | 7 ++++--- manifest | 14 +++++++------- manifest.uuid | 2 +- src/os_unix.c | 9 --------- 4 files changed, 12 insertions(+), 20 deletions(-) diff --git a/ext/misc/mmapwarm.c b/ext/misc/mmapwarm.c index 5afa47bf7a..851f8b0eb7 100644 --- a/ext/misc/mmapwarm.c +++ b/ext/misc/mmapwarm.c @@ -38,7 +38,7 @@ int sqlite3_mmap_warm(sqlite3 *db, const char *zDb){ int rc = SQLITE_OK; char *zSql = 0; int pgsz = 0; - int nTotal = 0; + unsigned int nTotal = 0; if( 0==sqlite3_get_autocommit(db) ) return SQLITE_MISUSE; @@ -86,8 +86,8 @@ int sqlite3_mmap_warm(sqlite3 *db, const char *zDb){ rc = p->xFetch(pFd, pgsz*iPg, pgsz, (void**)&pMap); if( rc!=SQLITE_OK || pMap==0 ) break; - nTotal += pMap[0]; - nTotal += pMap[pgsz-1]; + nTotal += (unsigned int)pMap[0]; + nTotal += (unsigned int)pMap[pgsz-1]; rc = p->xUnfetch(pFd, pgsz*iPg, (void*)pMap); if( rc!=SQLITE_OK ) break; @@ -103,5 +103,6 @@ int sqlite3_mmap_warm(sqlite3 *db, const char *zDb){ if( rc==SQLITE_OK ) rc = rc2; } + (void)nTotal; return rc; } diff --git a/manifest b/manifest index 1e5e13f419..5075245d48 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Provide\sdummy\sparameter\snames\sin\sthe\sprototype\sfor\sthe\snew\sxIntegrity\smethod\nof\sthe\ssqlite3_module\sobject. -D 2023-10-25T18:53:00.881 +C Fix\sharmless\scompiler\swarnings. +D 2023-10-25T19:06:23.319 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -373,7 +373,7 @@ F ext/misc/ieee754.c 62a90978204d2c956d5036eb89e548e736ca5fac0e965912867ddd7bb83 F ext/misc/memstat.c 5b284b78be431c1f5fa154b18eade2407e42c65ed32ec9e9fbf195d114778d7d F ext/misc/memtrace.c 7c0d115d2ef716ad0ba632c91e05bd119cb16c1aedf3bec9f06196ead2d5537b F ext/misc/memvfs.c 7dffa8cc89c7f2d73da4bd4ccea1bcbd2bd283e3bb4cea398df7c372a197291b -F ext/misc/mmapwarm.c 347caa99915fb254e8949ec131667b7fae99e2a9ce91bd468efb6dc372d9b7a9 +F ext/misc/mmapwarm.c a81af4aaec00f24f308e2f4c19bf1d88f3ac3ce848c36daa7a4cd38145c4080d F ext/misc/nextchar.c 7877914c2a80c2f181dd04c3dbef550dfb54c93495dc03da2403b5dd58f34edd F ext/misc/noop.c 81efe4cad9ec740e64388b14281cb983e6e2c223fed43eb77ab3e34946e0c1ab F ext/misc/normalize.c bd84355c118e297522aba74de34a4fd286fc775524e0499b14473918d09ea61f @@ -705,7 +705,7 @@ F src/os.h 1ff5ae51d339d0e30d8a9d814f4b8f8e448169304d83a7ed9db66a65732f3e63 F src/os_common.h 6c0eb8dd40ef3e12fe585a13e709710267a258e2c8dd1c40b1948a1d14582e06 F src/os_kv.c 4d39e1f1c180b11162c6dc4aa8ad34053873a639bac6baae23272fc03349986a F src/os_setup.h 6011ad7af5db4e05155f385eb3a9b4470688de6f65d6166b8956e58a3d872107 -F src/os_unix.c 2e8b12107f75d1bd16412f312b4c5d5103191807a37836d3b81beb26436ad81b +F src/os_unix.c cb116fde9e3ca3c1bbfdf89d6928f776a2a34da168e2667426523a4db353b271 F src/os_win.c 4a50a154aeebc66a1f8fb79c1ff6dd5fe3d005556533361e0d460d41cb6a45a8 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a F src/pager.c 2188897e1102a776dcb1bbe8b2eb70ac7de8863c9cb95ef09d35e9bad406cf45 @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 7b3f866e619c2b781b613493727cd111335ceec690d984408725c756feff26e6 -R 6d9977d57ab2d179650d1da7f78d796f +P 131374d720a365cbbe3031a2bc0a34ba1c74e751e39c66e484dbce07ab49fb62 +R c0de33bff3e5c117952aa74ec280fe09 U drh -Z 667356e5303058006da752293bd2707e +Z 32e645354aeb54c909684a4b4c583e71 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index ac5295a4da..535cf914a1 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -131374d720a365cbbe3031a2bc0a34ba1c74e751e39c66e484dbce07ab49fb62 \ No newline at end of file +cc8efe0494b8fe0df18aa67b1675779bf704d1ac53647fe1f7f55d8048041680 \ No newline at end of file diff --git a/src/os_unix.c b/src/os_unix.c index 59f67d142a..a33e6f4dff 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -3150,9 +3150,6 @@ static int afpUnlock(sqlite3_file *id, int eFileLock) { unixInodeInfo *pInode; afpLockingContext *context = (afpLockingContext *) pFile->lockingContext; int skipShared = 0; -#ifdef SQLITE_TEST - int h = pFile->h; -#endif assert( pFile ); OSTRACE(("UNLOCK %d %d was %d(%d,%d) pid=%d (afp)\n", pFile->h, eFileLock, @@ -3168,9 +3165,6 @@ static int afpUnlock(sqlite3_file *id, int eFileLock) { assert( pInode->nShared!=0 ); if( pFile->eFileLock>SHARED_LOCK ){ assert( pInode->eFileLock==pFile->eFileLock ); - SimulateIOErrorBenign(1); - SimulateIOError( h=(-1) ) - SimulateIOErrorBenign(0); #ifdef SQLITE_DEBUG /* When reducing a lock such that other processes can start @@ -3219,9 +3213,6 @@ static int afpUnlock(sqlite3_file *id, int eFileLock) { unsigned long long sharedLockByte = SHARED_FIRST+pInode->sharedByte; pInode->nShared--; if( pInode->nShared==0 ){ - SimulateIOErrorBenign(1); - SimulateIOError( h=(-1) ) - SimulateIOErrorBenign(0); if( !skipShared ){ rc = afpSetLock(context->dbPath, pFile, sharedLockByte, 1, 0); } From 799e7433331d2c9f19914ba21cac2570b6cc10c0 Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 25 Oct 2023 20:08:21 +0000 Subject: [PATCH 20/49] Updates to the mktoolzip.tcl to work on win32. FossilOrigin-Name: 166b775bb523362ffe17722ce175278726303c319fbe7e4a1e9291736db38a5d --- Makefile.msc | 2 +- manifest | 19 +++++++++++-------- manifest.uuid | 2 +- tool/mktoolzip.tcl | 18 ++++++++++++++---- 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/Makefile.msc b/Makefile.msc index d0ca0e76a6..4adbbee2a5 100644 --- a/Makefile.msc +++ b/Makefile.msc @@ -2467,7 +2467,7 @@ extensiontest: testfixture.exe testloadext.dll @set PATH=$(LIBTCLPATH);$(PATH) .\testfixture.exe $(TOP)\test\loadext.test $(TESTOPTS) -tool-zip: testfixture.exe sqlite3.exe sqldiff.exe sqlite3_analyzer.exe tool\mktoolzip.tcl +tool-zip: testfixture.exe sqlite3.exe sqldiff.exe sqlite3_analyzer.exe $(TOP)\tool\mktoolzip.tcl .\testfixture.exe $(TOP)\tool\mktoolzip.tcl coretestprogs: $(TESTPROGS) diff --git a/manifest b/manifest index 8ad88c1414..29386b9844 100644 --- a/manifest +++ b/manifest @@ -1,11 +1,11 @@ -C Add\san\sALWAYS\son\sbranch\sthat\swas\smade\salways-true\sby\sthe\sDISTINCT\sORDER\sBY\nfix. -D 2023-10-25T15:30:11.779 +C Updates\sto\sthe\smktoolzip.tcl\sto\swork\son\swin32. +D 2023-10-25T20:08:21.183 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 F Makefile.in 2ea4105b72561483befe0a18a37f94ca3adbc2324bad3770f99555d95fb9b0ea F Makefile.linux-gcc f3842a0b1efbfbb74ac0ef60e56b301836d05b4d867d014f714fa750048f1ab6 -F Makefile.msc 0e088e4fc718668e640aafe148f4d6bf9131d63ba91d85253478a20cd37a4a80 +F Makefile.msc c1aa09e0212d8609df041d13da6ca63198d1c1e29846f33104beecf19917102b F README.md 963d30019abf0cc06b263cd2824bce022893f3f93a531758f6f04ff2194a16a8 F VERSION 4c09b629c03b8ae32317cb336a32f3aa3252841d6dcd51184cecc4278d08f21e F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 @@ -2072,7 +2072,7 @@ F tool/mksqlite3c-noext.tcl 4f7cfef5152b0c91920355cbfc1d608a4ad242cb819f1aea07f6 F tool/mksqlite3c.tcl 2c760ab786cb509b47f00c96fea82994866cb99f5e046df81c768288f57897b4 F tool/mksqlite3h.tcl d391cff7cad0a372ee1406faee9ccc7dad9cb80a0c95cae0f73d10dd26e06762 F tool/mksqlite3internalh.tcl eb994013e833359137eb53a55acdad0b5ae1049b -F tool/mktoolzip.tcl 6e17f53eb924c76ea5f290cf7b8f554cc245ad6299e46928419abcd2de691663 +F tool/mktoolzip.tcl c7a9b685f5131d755e7d941cec50cee7f34178b9e34c9a89811eeb08617f8423 F tool/mkvsix.tcl b9e0777a213c23156b6542842c238479e496ebf5 F tool/offsets.c 8ed2b344d33f06e71366a9b93ccedaa38c096cc1dbd4c3c26ad08c6115285845 F tool/omittest-msvc.tcl d6b8f501ac1d7798c4126065030f89812379012cad98a1735d6d7221492abc08 @@ -2138,8 +2138,11 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P d2dbbdf7194bab4e5e3b74d3dbffb012a335829824c775c72dd7347c013d2125 -R 69224f49fd227efd4871d1e294714787 -U drh -Z 09c12c04ae80362f6524540f0fd3a848 +P c29ebcb0be8e969c359c077bd4ce752a9c952d2659062868f12efdd2cc77186d +R f15a5fdcd63b6841b7a7c9c0886fae2f +T *branch * win32-mktoolzip +T *sym-win32-mktoolzip * +T -sym-trunk * +U dan +Z f7ced12f7649f08d9657796243d67be4 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index d996fb461a..3d08a7357f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c29ebcb0be8e969c359c077bd4ce752a9c952d2659062868f12efdd2cc77186d \ No newline at end of file +166b775bb523362ffe17722ce175278726303c319fbe7e4a1e9291736db38a5d \ No newline at end of file diff --git a/tool/mktoolzip.tcl b/tool/mktoolzip.tcl index 0eb678825f..885bae960b 100644 --- a/tool/mktoolzip.tcl +++ b/tool/mktoolzip.tcl @@ -48,12 +48,22 @@ switch $tcl_platform(machine) { set ARCH unk } } -set in [open VERSION] +set in [open [file join [file dirname [file dirname [info script]]] VERSION]] set vers [read $in] close $in scan $vers %d.%d.%d v1 v2 v3 set v2 [format 3%02d%02d00 $v2 $v3] set name sqlite-tools-$OS-$ARCH-$v2.zip -puts "zip $name sqlite3$EXE sqldiff$EXE sqlite3_analyzer$EXE" -puts [exec zip $name sqlite3$EXE sqldiff$EXE sqlite3_analyzer$EXE] -puts [exec ls -l $name] + +if {$OS=="win32"} { + # The win32 tar.exe supports the -a ("auto-compress") option. This causes + # tar to create an archive type based on the extension of the output file. + # In this case, a zip file. + puts "tar -a -cf $name sqlite3$EXE sqldiff$EXE sqlite3_analyzer$EXE" + puts [exec tar -a -cf $name sqlite3$EXE sqldiff$EXE sqlite3_analyzer$EXE] + puts "$name: [file size $name] bytes" +} else { + puts "zip $name sqlite3$EXE sqldiff$EXE sqlite3_analyzer$EXE" + puts [exec zip $name sqlite3$EXE sqldiff$EXE sqlite3_analyzer$EXE] + puts [exec ls -l $name] +} From 63aff62e697b46438004ac05fd6588e574e00f2f Mon Sep 17 00:00:00 2001 From: larrybr Date: Wed, 25 Oct 2023 20:27:18 +0000 Subject: [PATCH 21/49] In CLI for Windows builds, do MBCS/UTF-8 translation independently for input and output. (WIP) FossilOrigin-Name: 47b13e66e07be3a26cf7fa0b7b65ad8576c3b4be50fc422be8fe93be93d681ac --- manifest | 17 +++++---- manifest.uuid | 2 +- src/shell.c.in | 99 +++++++++++++++++++++++++++++--------------------- 3 files changed, 69 insertions(+), 49 deletions(-) diff --git a/manifest b/manifest index 8ad88c1414..dd27939d14 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\san\sALWAYS\son\sbranch\sthat\swas\smade\salways-true\sby\sthe\sDISTINCT\sORDER\sBY\nfix. -D 2023-10-25T15:30:11.779 +C In\sCLI\sfor\sWindows\sbuilds,\sdo\sMBCS/UTF-8\stranslation\sindependently\sfor\sinput\sand\soutput.\s(WIP) +D 2023-10-25T20:27:18.335 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -722,7 +722,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 64c9bc7494f3d220a27498137551762c25458282388ea9ac0a710dd6d5dc1510 -F src/shell.c.in acc452c414fddd10289d165be3c89a7a2c36c919def04c93fb7dd11ac022e6ed +F src/shell.c.in 6b7662064d78025f0c68567971fe834840da8683972ac1ac7a02d6fbc9c166ef F src/sqlite.h.in 81c70644aeef9c974f72c9cadeb505ebb9441d2f6db594c018604ae935a12e6e F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac @@ -2138,8 +2138,11 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P d2dbbdf7194bab4e5e3b74d3dbffb012a335829824c775c72dd7347c013d2125 -R 69224f49fd227efd4871d1e294714787 -U drh -Z 09c12c04ae80362f6524540f0fd3a848 +P c29ebcb0be8e969c359c077bd4ce752a9c952d2659062868f12efdd2cc77186d +R 023b0809f9198b763f6cfba361f37800 +T *branch * win-utf8-io-split +T *sym-win-utf8-io-split * +T -sym-trunk * +U larrybr +Z 1eb3a8144b68660f3c58b794f51200b9 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index d996fb461a..0e8e6f875b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c29ebcb0be8e969c359c077bd4ce752a9c952d2659062868f12efdd2cc77186d \ No newline at end of file +47b13e66e07be3a26cf7fa0b7b65ad8576c3b4be50fc422be8fe93be93d681ac \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index b78759c002..b970ce4799 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -449,12 +449,20 @@ static int bail_on_error = 0; */ static int stdin_is_interactive = 1; +/* +** If build is for Windows, without 3rd-party line editing, Console +** input and output may be done in a UTF-8 compatible way. This is +** determined by invocation option and OS installed capability. +*/ #if (defined(_WIN32) || defined(WIN32)) && SHELL_USE_LOCAL_GETLINE \ && !defined(SHELL_OMIT_WIN_UTF8) # define SHELL_WIN_UTF8_OPT 1 - static int console_utf8 = sizeof(char*)/4 - 1; + static int console_utf8_in = 0; + static int console_utf8_out = 0; + static int mbcs_opted = 0; #else -# define console_utf8 0 +# define console_utf8_in 0 +# define console_utf8_out 0 # define SHELL_WIN_UTF8_OPT 0 #endif @@ -597,7 +605,7 @@ static struct ConsoleState { int infsMode; /* Input file stream mode upon shell start */ UINT inCodePage; /* Input code page upon shell start */ UINT outCodePage; /* Output code page upon shell start */ - HANDLE hConsoleIn; /* Console input handle */ + HANDLE hConsole; /* Console input or output handle */ DWORD consoleMode; /* Console mode upon shell start */ } conState = { 0, 0, 0, 0, INVALID_HANDLE_VALUE, 0 }; @@ -607,49 +615,59 @@ static struct ConsoleState { /* ** Prepare console, (if known to be a WIN32 console), for UTF-8 -** input (from either typing or suitable paste operations) and for +** input (from either typing or suitable paste operations) and/or for ** UTF-8 rendering. This may "fail" with a message to stderr, where ** the preparation is not done and common "code page" issues occur. */ -static void console_prepare(void){ +static void console_prepare_utf8(void){ HANDLE hCI = GetStdHandle(STD_INPUT_HANDLE); + HANDLE hCO = GetStdHandle(STD_OUTPUT_HANDLE); + HANDLE hCC = INVALID_HANDLE_VALUE; DWORD consoleMode = 0; - if( isatty(0) && GetFileType(hCI)==FILE_TYPE_CHAR - && GetConsoleMode( hCI, &consoleMode) ){ - if( !IsValidCodePage(CP_UTF8) ){ - fprintf(stderr, "Cannot use UTF-8 code page.\n"); - console_utf8 = 0; - return; - } - conState.hConsoleIn = hCI; - conState.consoleMode = consoleMode; - conState.inCodePage = GetConsoleCP(); - conState.outCodePage = GetConsoleOutputCP(); + u8 conIO = 0; + + console_utf8_in = console_utf8_out = 0; + if( isatty(0) && GetFileType(hCI)==FILE_TYPE_CHAR ) conIO = 1; + if( isatty(1) && GetFileType(hCO)==FILE_TYPE_CHAR ) conIO |= 2; + if( conIO==0 || mbcs_opted ) return; + if( conIO & 1 ) hCC = hCI; + else hCC = hCO; + if( !IsValidCodePage(CP_UTF8) || !GetConsoleMode( hCC, &consoleMode) ){ + fprintf(stderr, "Cannot use UTF-8 code page.\n"); + return; + } + conState.hConsole = hCC; + conState.consoleMode = consoleMode; + conState.inCodePage = GetConsoleCP(); + conState.outCodePage = GetConsoleOutputCP(); + if( conIO & 1 ){ + console_utf8_in = 1; SetConsoleCP(CP_UTF8); - SetConsoleOutputCP(CP_UTF8); consoleMode |= ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT; - SetConsoleMode(conState.hConsoleIn, consoleMode); + SetConsoleMode(conState.hConsole, consoleMode); conState.infsMode = _setmode(_fileno(stdin), _O_U16TEXT); - console_utf8 = 1; - }else{ - console_utf8 = 0; + } + if( conIO & 2 ){ + console_utf8_out = 1; + SetConsoleOutputCP(CP_UTF8); } } /* -** Undo the effects of console_prepare(), if any. +** Undo the effects of console_prepare_utf8(), if any. */ static void SQLITE_CDECL console_restore(void){ - if( console_utf8 && conState.inCodePage!=0 - && conState.hConsoleIn!=INVALID_HANDLE_VALUE ){ + if( (console_utf8_in||console_utf8_out) && conState.inCodePage!=0 + && conState.hConsole!=INVALID_HANDLE_VALUE ){ _setmode(_fileno(stdin), conState.infsMode); SetConsoleCP(conState.inCodePage); SetConsoleOutputCP(conState.outCodePage); - SetConsoleMode(conState.hConsoleIn, conState.consoleMode); + SetConsoleMode(conState.hConsole, conState.consoleMode); /* Avoid multiple calls. */ - conState.hConsoleIn = INVALID_HANDLE_VALUE; + conState.hConsole = INVALID_HANDLE_VALUE; conState.consoleMode = 0; - console_utf8 = 0; + console_utf8_in = 0; + console_utf8_out = 0; } } @@ -657,11 +675,11 @@ static void SQLITE_CDECL console_restore(void){ ** Collect input like fgets(...) with special provisions for input ** from the Windows console to get around its strange coding issues. ** Defers to plain fgets() when input is not interactive or when the -** startup option, -utf8, has not been provided or taken effect. +** UTF-8 input is unavailable or opted out. */ static char* utf8_fgets(char *buf, int ncmax, FILE *fin){ if( fin==0 ) fin = stdin; - if( fin==stdin && stdin_is_interactive && console_utf8 ){ + if( fin==stdin && stdin_is_interactive && console_utf8_in ){ # define SQLITE_IALIM 150 wchar_t wbuf[SQLITE_IALIM]; int lend = 0; @@ -674,7 +692,7 @@ static char* utf8_fgets(char *buf, int ncmax, FILE *fin){ ? SQLITE_IALIM : (ncmax-1 - noc)/4; # undef SQLITE_IALIM DWORD nbr = 0; - BOOL bRC = ReadConsoleW(conState.hConsoleIn, wbuf, na, &nbr, 0); + BOOL bRC = ReadConsoleW(conState.hConsole, wbuf, na, &nbr, 0); if( !bRC || (noc==0 && nbr==0) ) return 0; if( nbr > 0 ){ int nmb = WideCharToMultiByte(CP_UTF8,WC_COMPOSITECHECK|WC_DEFAULTCHAR, @@ -720,8 +738,8 @@ static char* utf8_fgets(char *buf, int ncmax, FILE *fin){ /* ** Render output like fprintf(). Except, if the output is going to the -** console and if this is running on a Windows machine, and if the -utf8 -** option is unavailable or (available and inactive), translate the +** console and if this is running on a Windows machine, and if UTF-8 +** output unavailable (or available but opted out), translate the ** output from UTF-8 into MBCS for output through 8-bit stdout stream. ** (With -utf8 active, no translation is needed and must not be done.) */ @@ -729,7 +747,7 @@ static char* utf8_fgets(char *buf, int ncmax, FILE *fin){ void utf8_printf(FILE *out, const char *zFormat, ...){ va_list ap; va_start(ap, zFormat); - if( stdout_is_console && (out==stdout || out==stderr) && !console_utf8 ){ + if( stdout_is_console && (out==stdout || out==stderr) && !console_utf8_out ){ char *z1 = sqlite3_vmprintf(zFormat, ap); char *z2 = sqlite3_win32_utf8_to_mbcs_v2(z1, 0); sqlite3_free(z1); @@ -942,8 +960,8 @@ static char *local_getline(char *zLine, FILE *in){ #if defined(_WIN32) || defined(WIN32) /* For interactive input on Windows systems, without -utf8, ** translate the multi-byte characterset characters into UTF-8. - ** This is the translation that predates the -utf8 option. */ - if( stdin_is_interactive && in==stdin && !console_utf8 ){ + ** This is the translation that predates console UTF-8 input. */ + if( stdin_is_interactive && in==stdin && !console_utf8_in ){ char *zTrans = sqlite3_win32_mbcs_to_utf8_v2(zLine, 0); if( zTrans ){ i64 nTrans = strlen(zTrans)+1; @@ -12503,11 +12521,11 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ stdin_is_interactive = 0; }else if( cli_strcmp(z,"-utf8")==0 ){ #if SHELL_WIN_UTF8_OPT - console_utf8 = 1; + mbcs_opted = 0; #endif /* SHELL_WIN_UTF8_OPT */ }else if( cli_strcmp(z,"-no-utf8")==0 ){ #if SHELL_WIN_UTF8_OPT - console_utf8 = 0; + mbcs_opted = 1; #endif /* SHELL_WIN_UTF8_OPT */ }else if( cli_strcmp(z,"-heap")==0 ){ i++; @@ -12591,11 +12609,10 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ data.cMode = data.mode; } #if SHELL_WIN_UTF8_OPT - if( console_utf8 && stdin_is_interactive ){ - console_prepare(); + if( stdin_is_interactive ){ + console_prepare_utf8(); }else{ setBinaryMode(stdin, 0); - console_utf8 = 0; } #endif @@ -12636,7 +12653,7 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ const char *zCharset = ""; int nHistory; #if SHELL_WIN_UTF8_OPT - if( console_utf8 ) zCharset = " (utf8)"; + if( console_utf8_in ) zCharset = " (utf8)"; #endif printf( "SQLite version %s %.19s%s\n" /*extra-version-info*/ From 634b037fa38c42d03cf67abea5a0e79e40df896b Mon Sep 17 00:00:00 2001 From: larrybr Date: Wed, 25 Oct 2023 20:44:01 +0000 Subject: [PATCH 22/49] Cure a harmless MSVC warning. (no other changes) FossilOrigin-Name: 02234ef85ed9349ddf6225f67b7e941b0b68cbd2e58c9d7d84a8324393349853 --- ext/session/sqlite3session.c | 2 +- manifest | 15 ++++++--------- manifest.uuid | 2 +- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/ext/session/sqlite3session.c b/ext/session/sqlite3session.c index a5538ddacf..4f682a13d3 100644 --- a/ext/session/sqlite3session.c +++ b/ext/session/sqlite3session.c @@ -1268,7 +1268,7 @@ static int sessionReinitTable(sqlite3_session *pSession, SessionTable *pTab){ } } - sqlite3_free(azCol); + sqlite3_free((char*)azCol); return pSession->rc; } diff --git a/manifest b/manifest index dd27939d14..64593c1910 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C In\sCLI\sfor\sWindows\sbuilds,\sdo\sMBCS/UTF-8\stranslation\sindependently\sfor\sinput\sand\soutput.\s(WIP) -D 2023-10-25T20:27:18.335 +C Cure\sa\sharmless\sMSVC\swarning.\s(no\sother\schanges) +D 2023-10-25T20:44:01.155 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -554,7 +554,7 @@ F ext/session/sessionrowid.test 85187c2f1b38861a5844868126f69f9ec62223a03449a98a F ext/session/sessionsize.test 8fcf4685993c3dbaa46a24183940ab9f5aa9ed0d23e5fb63bfffbdb56134b795 F ext/session/sessionstat1.test b039e38e2ba83767b464baf39b297cc0b1cc6f3292255cb467ea7e12d0d0280c F ext/session/sessionwor.test 6fd9a2256442cebde5b2284936ae9e0d54bde692d0f5fd009ecef8511f4cf3fc -F ext/session/sqlite3session.c 3e8aa4bd7136b5504952b5d3ab0b2e75f2ab50c7fc2f9915ef980d382dabbf51 +F ext/session/sqlite3session.c 7b0f9bf6479aebd49e5f34cdaeb1479cde843cf5189bca6f32db4f36c130b414 F ext/session/sqlite3session.h 4cf19a51975746d7cff2fdd74db8b769c570958e1c3639ac150d824ac1553b3e F ext/session/test_session.c 73e9921205633a08c1497770beecf3dcbc9b826dd4358f7f8152f706eaac5d71 F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3 @@ -2138,11 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P c29ebcb0be8e969c359c077bd4ce752a9c952d2659062868f12efdd2cc77186d -R 023b0809f9198b763f6cfba361f37800 -T *branch * win-utf8-io-split -T *sym-win-utf8-io-split * -T -sym-trunk * +P 47b13e66e07be3a26cf7fa0b7b65ad8576c3b4be50fc422be8fe93be93d681ac +R b74c842dae72512c83feef833a3df3e2 U larrybr -Z 1eb3a8144b68660f3c58b794f51200b9 +Z 0170b741738e0aeb080b89c815bde8d0 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 0e8e6f875b..1fae80af8b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -47b13e66e07be3a26cf7fa0b7b65ad8576c3b4be50fc422be8fe93be93d681ac \ No newline at end of file +02234ef85ed9349ddf6225f67b7e941b0b68cbd2e58c9d7d84a8324393349853 \ No newline at end of file From 3c75a03615ec49cdad31983b1e6140d3d716f905 Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 26 Oct 2023 12:59:41 +0000 Subject: [PATCH 23/49] Deal with the case of a reentrant INSERT on a virtual table where the outer INSERT has a RETURNING clause but the inner does not. dbsqlfuzz 3ac9a1e33f676254e02c0f297263b0a7aeb0c1a5. FossilOrigin-Name: 8aba78e4dbf5c196aa50a28579f4bcd7c96103661c5968d62b2fded075bc73e4 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/trigger.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 5075245d48..009e49e106 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sharmless\scompiler\swarnings. -D 2023-10-25T19:06:23.319 +C Deal\swith\sthe\scase\sof\sa\sreentrant\sINSERT\son\sa\svirtual\stable\swhere\sthe\nouter\sINSERT\shas\sa\sRETURNING\sclause\sbut\sthe\sinner\sdoes\snot.\ndbsqlfuzz\s3ac9a1e33f676254e02c0f297263b0a7aeb0c1a5. +D 2023-10-26T12:59:41.136 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -785,7 +785,7 @@ F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c F src/tokenize.c 23d9f4539880b40226254ad9072f4ecf12eb1902e62aea47aac29928afafcfd5 F src/treeview.c 62fafcd31eea60b718f8daf448116b7b19f90134ebc6c20777ddbb07f56a3d28 -F src/trigger.c 5286019b152f622a38900284109e4aae1e5f566deb7ad9ba7e931f0660771f32 +F src/trigger.c e8c460233d28e1cb291b08ffe00749d313f3686be79ac50f1af15f3087053449 F src/update.c 6904814dd62a7a93bbb86d9f1419c7f134a9119582645854ab02b36b676d9f92 F src/upsert.c fa125a8d3410ce9a97b02cb50f7ae68a2476c405c76aa692d3acf6b8586e9242 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0 @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 131374d720a365cbbe3031a2bc0a34ba1c74e751e39c66e484dbce07ab49fb62 -R c0de33bff3e5c117952aa74ec280fe09 +P cc8efe0494b8fe0df18aa67b1675779bf704d1ac53647fe1f7f55d8048041680 +R 9ba44fb9dc03b38d8120c04401aaff8f U drh -Z 32e645354aeb54c909684a4b4c583e71 +Z ab6f9f2ea52a3134056d677d31c255aa # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 535cf914a1..15e01cccdb 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cc8efe0494b8fe0df18aa67b1675779bf704d1ac53647fe1f7f55d8048041680 \ No newline at end of file +8aba78e4dbf5c196aa50a28579f4bcd7c96103661c5968d62b2fded075bc73e4 \ No newline at end of file diff --git a/src/trigger.c b/src/trigger.c index 2decea8206..c4f09a4866 100644 --- a/src/trigger.c +++ b/src/trigger.c @@ -970,7 +970,7 @@ static void codeReturningTrigger( SrcList sFrom; assert( v!=0 ); - assert( pParse->bReturning ); + if( !pParse->bReturning ) return; assert( db->pParse==pParse ); pReturning = pParse->u1.pReturning; assert( pTrigger == &(pReturning->retTrig) ); From 69d40f8e1f04ddcab9d78663693bd9b145830a3d Mon Sep 17 00:00:00 2001 From: larrybr Date: Thu, 26 Oct 2023 15:12:41 +0000 Subject: [PATCH 24/49] Ready for merge, but could use testing on some dusty old Windows machines. FossilOrigin-Name: 20220615621e01ff83fd26133840e2553a6087bcb56bbb8e9bf1408dd881cd9b --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/shell.c.in | 23 ++++++++++++++--------- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/manifest b/manifest index 64593c1910..e083c76ea0 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Cure\sa\sharmless\sMSVC\swarning.\s(no\sother\schanges) -D 2023-10-25T20:44:01.155 +C Ready\sfor\smerge,\sbut\scould\suse\stesting\son\ssome\sdusty\sold\sWindows\smachines. +D 2023-10-26T15:12:41.667 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -722,7 +722,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 64c9bc7494f3d220a27498137551762c25458282388ea9ac0a710dd6d5dc1510 -F src/shell.c.in 6b7662064d78025f0c68567971fe834840da8683972ac1ac7a02d6fbc9c166ef +F src/shell.c.in 14d70da4c678b2d9d8df105e113669ca956fad1d8538976e33fc8f878c17e84d F src/sqlite.h.in 81c70644aeef9c974f72c9cadeb505ebb9441d2f6db594c018604ae935a12e6e F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac @@ -2138,8 +2138,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 47b13e66e07be3a26cf7fa0b7b65ad8576c3b4be50fc422be8fe93be93d681ac -R b74c842dae72512c83feef833a3df3e2 +P 02234ef85ed9349ddf6225f67b7e941b0b68cbd2e58c9d7d84a8324393349853 +R 89654e88f6715a69f16578b67cbc1c07 U larrybr -Z 0170b741738e0aeb080b89c815bde8d0 +Z 1dcda7e82518a66f972beec27c9600f6 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 1fae80af8b..7e50ecd289 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -02234ef85ed9349ddf6225f67b7e941b0b68cbd2e58c9d7d84a8324393349853 \ No newline at end of file +20220615621e01ff83fd26133840e2553a6087bcb56bbb8e9bf1408dd881cd9b \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index b970ce4799..53d3551279 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -624,13 +624,13 @@ static void console_prepare_utf8(void){ HANDLE hCO = GetStdHandle(STD_OUTPUT_HANDLE); HANDLE hCC = INVALID_HANDLE_VALUE; DWORD consoleMode = 0; - u8 conIO = 0; + u8 conI = 0, conO = 0; console_utf8_in = console_utf8_out = 0; - if( isatty(0) && GetFileType(hCI)==FILE_TYPE_CHAR ) conIO = 1; - if( isatty(1) && GetFileType(hCO)==FILE_TYPE_CHAR ) conIO |= 2; - if( conIO==0 || mbcs_opted ) return; - if( conIO & 1 ) hCC = hCI; + if( isatty(0) && GetFileType(hCI)==FILE_TYPE_CHAR ) conI = 1; + if( isatty(1) && GetFileType(hCO)==FILE_TYPE_CHAR ) conO = 1; + if( (!conI && !conO) || mbcs_opted ) return; + if( conI ) hCC = hCI; else hCC = hCO; if( !IsValidCodePage(CP_UTF8) || !GetConsoleMode( hCC, &consoleMode) ){ fprintf(stderr, "Cannot use UTF-8 code page.\n"); @@ -640,14 +640,14 @@ static void console_prepare_utf8(void){ conState.consoleMode = consoleMode; conState.inCodePage = GetConsoleCP(); conState.outCodePage = GetConsoleOutputCP(); - if( conIO & 1 ){ + if( conI ){ console_utf8_in = 1; SetConsoleCP(CP_UTF8); consoleMode |= ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT; SetConsoleMode(conState.hConsole, consoleMode); conState.infsMode = _setmode(_fileno(stdin), _O_U16TEXT); } - if( conIO & 2 ){ + if( conO ){ console_utf8_out = 1; SetConsoleOutputCP(CP_UTF8); } @@ -657,7 +657,7 @@ static void console_prepare_utf8(void){ ** Undo the effects of console_prepare_utf8(), if any. */ static void SQLITE_CDECL console_restore(void){ - if( (console_utf8_in||console_utf8_out) && conState.inCodePage!=0 + if( (console_utf8_in||console_utf8_out) && conState.hConsole!=INVALID_HANDLE_VALUE ){ _setmode(_fileno(stdin), conState.infsMode); SetConsoleCP(conState.inCodePage); @@ -12653,7 +12653,12 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ const char *zCharset = ""; int nHistory; #if SHELL_WIN_UTF8_OPT - if( console_utf8_in ) zCharset = " (utf8)"; + switch( console_utf8_in+2*console_utf8_out ){ + default: case 0: break; + case 1: zCharset = " (utf8 in)"; break; + case 2: zCharset = " (utf8 out)"; break; + case 3: zCharset = " (utf8 I/O)"; break; + } #endif printf( "SQLite version %s %.19s%s\n" /*extra-version-info*/ From 94331d406a9549f5dd795a8f6a805a23aefed729 Mon Sep 17 00:00:00 2001 From: dan Date: Thu, 26 Oct 2023 16:05:57 +0000 Subject: [PATCH 25/49] Handle the case where a virtual table xBestIndex method called while coding a trigger fired by a top-level statement with a RETURNING clause prepares a statement that also contains a RETURNING clause. FossilOrigin-Name: ec6bffa3b0fbf7cdee852cb0208de1f5869dafd88e2ee64c23cec89634219adc --- manifest | 17 +++++---- manifest.uuid | 2 +- src/build.c | 17 +++------ src/sqliteInt.h | 1 + test/bestindexB.test | 87 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 104 insertions(+), 20 deletions(-) create mode 100644 test/bestindexB.test diff --git a/manifest b/manifest index 009e49e106..70aeaa22c5 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Deal\swith\sthe\scase\sof\sa\sreentrant\sINSERT\son\sa\svirtual\stable\swhere\sthe\nouter\sINSERT\shas\sa\sRETURNING\sclause\sbut\sthe\sinner\sdoes\snot.\ndbsqlfuzz\s3ac9a1e33f676254e02c0f297263b0a7aeb0c1a5. -D 2023-10-26T12:59:41.136 +C Handle\sthe\scase\swhere\sa\svirtual\stable\sxBestIndex\smethod\scalled\swhile\scoding\sa\strigger\sfired\sby\sa\stop-level\sstatement\swith\sa\sRETURNING\sclause\sprepares\sa\sstatement\sthat\salso\scontains\sa\sRETURNING\sclause. +D 2023-10-26T16:05:57.832 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -663,7 +663,7 @@ F src/btmutex.c 79a43670447eacc651519a429f6ece9fd638563cf95b469d6891185ddae2b522 F src/btree.c f6c8512a0db0851877683e41936aac0f8927bc31630cbb1bc87ccccf79c06944 F src/btree.h 03e3356f5208bcab8eed4e094240fdac4a7f9f5ddf5e91045ce589f67d47c240 F src/btreeInt.h ef12a72b708677e48d6bc8dcd66fed25434740568b89e2cfa368093cfc5b9d15 -F src/build.c 1a9061ab67987cfa9c7f9d52ccc862a31d37ad2b05faaf0d72eeb4b4b5ee37cf +F src/build.c 189e4517d67f09f0a3e0d8e1faa6e2ef0c2e95f6ac82e33c912cb7efa2a359cc F src/callback.c db3a45e376deff6a16c0058163fe0ae2b73a2945f3f408ca32cf74960b28d490 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 23331529e654be40ca97d171cbbffe9b3d4c71cc53b78fe5501230675952da8b @@ -726,7 +726,7 @@ F src/shell.c.in acc452c414fddd10289d165be3c89a7a2c36c919def04c93fb7dd11ac022e6e F src/sqlite.h.in 428948ef39b3ef7b675ec12bd4853619bad77279b5fa38e3a51c5b9656ae16ff F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac -F src/sqliteInt.h cf6646e8694a63749096e1f086767a2c1920dca9848ec2dbe9f7bfb961d322ef +F src/sqliteInt.h 567e317f8631883897b7d3da43fce778b7c30dd0dd7f714558c9725fc1c1196c F src/sqliteLimit.h 33b1c9baba578d34efe7dfdb43193b366111cdf41476b1e82699e14c11ee1fb6 F src/status.c 160c445d7d28c984a0eae38c144f6419311ed3eace59b44ac6dafc20db4af749 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 @@ -905,6 +905,7 @@ F test/bestindex7.test f094c669a6400777f4d2ddc3ed28e39169f1adb5be3d59b55f22ccf8c F test/bestindex8.test 333ad8c6a554b885a49b68c019166eda92b05f493a92b36b0acdf7f766d04dad F test/bestindex9.test 1a4b93db117fd8abe74ae9be982f86aa72f01e60cd4ac541e6ede39673a451a0 F test/bestindexA.test e1b5def6b190797cacf008e6815ffb78fb30261999030d60a728d572eef44c7f +F test/bestindexB.test 328b97b69cd1a20928d5997f9ecb04d2e00f1d18e19ab27f9e9adb44d7bc51ce F test/between.test b9a65fb065391980119e8a781a7409d3fcf059d89968279c750e190a9a1d5263 F test/bigfile.test aa74f4e5db51c8e54a1d9de9fa65d01d1eb20b59 F test/bigfile2.test 1b489a3a39ae90c7f027b79110d6b4e1dbc71bfc @@ -2138,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P cc8efe0494b8fe0df18aa67b1675779bf704d1ac53647fe1f7f55d8048041680 -R 9ba44fb9dc03b38d8120c04401aaff8f -U drh -Z ab6f9f2ea52a3134056d677d31c255aa +P 8aba78e4dbf5c196aa50a28579f4bcd7c96103661c5968d62b2fded075bc73e4 +R 3f971dd192c77b68556855589625c95d +U dan +Z ef9839d8477bc114052377f752ca4da6 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 15e01cccdb..edc06300fd 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8aba78e4dbf5c196aa50a28579f4bcd7c96103661c5968d62b2fded075bc73e4 \ No newline at end of file +ec6bffa3b0fbf7cdee852cb0208de1f5869dafd88e2ee64c23cec89634219adc \ No newline at end of file diff --git a/src/build.c b/src/build.c index 24f5d3f96a..3d06792358 100644 --- a/src/build.c +++ b/src/build.c @@ -1407,20 +1407,13 @@ void sqlite3ColumnPropertiesFromName(Table *pTab, Column *pCol){ } #endif -/* -** Name of the special TEMP trigger used to implement RETURNING. The -** name begins with "sqlite_" so that it is guaranteed not to collide -** with any application-generated triggers. -*/ -#define RETURNING_TRIGGER_NAME "sqlite_returning" - /* ** Clean up the data structures associated with the RETURNING clause. */ static void sqlite3DeleteReturning(sqlite3 *db, Returning *pRet){ Hash *pHash; pHash = &(db->aDb[1].pSchema->trigHash); - sqlite3HashInsert(pHash, RETURNING_TRIGGER_NAME, 0); + sqlite3HashInsert(pHash, pRet->zName, 0); sqlite3ExprListDelete(db, pRet->pReturnEL); sqlite3DbFree(db, pRet); } @@ -1463,7 +1456,9 @@ void sqlite3AddReturning(Parse *pParse, ExprList *pList){ (void(*)(sqlite3*,void*))sqlite3DeleteReturning, pRet); testcase( pParse->earlyCleanup ); if( db->mallocFailed ) return; - pRet->retTrig.zName = RETURNING_TRIGGER_NAME; + sqlite3_snprintf(sizeof(pRet->zName), pRet->zName, + "sqlite_returning_%p", pParse); + pRet->retTrig.zName = pRet->zName; pRet->retTrig.op = TK_RETURNING; pRet->retTrig.tr_tm = TRIGGER_AFTER; pRet->retTrig.bReturning = 1; @@ -1474,9 +1469,9 @@ void sqlite3AddReturning(Parse *pParse, ExprList *pList){ pRet->retTStep.pTrig = &pRet->retTrig; pRet->retTStep.pExprList = pList; pHash = &(db->aDb[1].pSchema->trigHash); - assert( sqlite3HashFind(pHash, RETURNING_TRIGGER_NAME)==0 + assert( sqlite3HashFind(pHash, pRet->zName)==0 || pParse->nErr || pParse->ifNotExists ); - if( sqlite3HashInsert(pHash, RETURNING_TRIGGER_NAME, &pRet->retTrig) + if( sqlite3HashInsert(pHash, pRet->zName, &pRet->retTrig) ==&pRet->retTrig ){ sqlite3OomFault(db); } diff --git a/src/sqliteInt.h b/src/sqliteInt.h index b6cc81fba1..dbf01dd139 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -4077,6 +4077,7 @@ struct Returning { int iRetCur; /* Transient table holding RETURNING results */ int nRetCol; /* Number of in pReturnEL after expansion */ int iRetReg; /* Register array for holding a row of RETURNING */ + char zName[40]; /* Name of trigger: "sqlite_returning_%p" */ }; /* diff --git a/test/bestindexB.test b/test/bestindexB.test new file mode 100644 index 0000000000..b50e74fee3 --- /dev/null +++ b/test/bestindexB.test @@ -0,0 +1,87 @@ +# 2023-10-26 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix bestindexB + +ifcapable !vtab { + finish_test + return +} + +register_tcl_module db + +proc vtab_command {method args} { + switch -- $method { + xConnect { + return "CREATE TABLE t1(a, b, c)" + } + + xBestIndex { + set hdl [lindex $args 0] + set clist [$hdl constraints] + set orderby [$hdl orderby] + + if {[info exists ::xbestindex_sql]} { + explain_i $::xbestindex_sql + set ::xbestindex_res [ execsql $::xbestindex_sql ] + } + + return "cost 1000000 rows 1000000 idxnum 0 idxstr hello" + } + + xFilter { + return "sql {SELECT 0, 1, 2, 3}" + } + } + + return {} +} + +do_execsql_test 1.0 { + CREATE VIRTUAL TABLE x1 USING tcl(vtab_command); + CREATE TABLE y1(a, b); + CREATE TABLE y2(a, b); +} {} + +do_execsql_test 1.1 { + SELECT * FROM x1 +} {1 2 3} + +do_execsql_test 1.2 { + INSERT INTO y1 VALUES(1, 2) RETURNING rowid; +} {1} + +do_execsql_test 1.3 { + CREATE TRIGGER y1tr BEFORE INSERT ON y1 BEGIN + SELECT * FROM x1; + END; + INSERT INTO y1 VALUES(3, 4) RETURNING rowid; +} {2} + + +# This time, rig the xBestIndex() method of the vtab to invoke an SQL +# statement that uses RETURNING. +set ::xbestindex_sql { + INSERT INTO y2 VALUES(NULL, NULL) RETURNING rowid; +} +do_execsql_test 1.4 { + INSERT INTO y1 VALUES(5, 6) RETURNING rowid; +} {3} + +do_test 1.5 { + set ::xbestindex_res +} {1} + +finish_test From 113e15fbbe3422367f158a78f2d2452db1dcfff0 Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 26 Oct 2023 16:59:22 +0000 Subject: [PATCH 26/49] Further enhancements to make sure the correct returnning trigger is run when there are nested INSERT RETURNING statements. FossilOrigin-Name: d83405e870b071540b56e76291bdce1388db80b860afd68a34e4233f6ff2a3ab --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/trigger.c | 11 +++++++++-- test/vt02.c | 7 +++++-- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index 70aeaa22c5..aa0307cf1b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Handle\sthe\scase\swhere\sa\svirtual\stable\sxBestIndex\smethod\scalled\swhile\scoding\sa\strigger\sfired\sby\sa\stop-level\sstatement\swith\sa\sRETURNING\sclause\sprepares\sa\sstatement\sthat\salso\scontains\sa\sRETURNING\sclause. -D 2023-10-26T16:05:57.832 +C Further\senhancements\sto\smake\ssure\sthe\scorrect\sreturnning\strigger\sis\srun\swhen\nthere\sare\snested\sINSERT\sRETURNING\sstatements. +D 2023-10-26T16:59:22.532 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -785,7 +785,7 @@ F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c F src/tokenize.c 23d9f4539880b40226254ad9072f4ecf12eb1902e62aea47aac29928afafcfd5 F src/treeview.c 62fafcd31eea60b718f8daf448116b7b19f90134ebc6c20777ddbb07f56a3d28 -F src/trigger.c e8c460233d28e1cb291b08ffe00749d313f3686be79ac50f1af15f3087053449 +F src/trigger.c 0905b96b04bb6658509f711a8207287f1315cdbc3df1a1b13ba6483c8e341c81 F src/update.c 6904814dd62a7a93bbb86d9f1419c7f134a9119582645854ab02b36b676d9f92 F src/upsert.c fa125a8d3410ce9a97b02cb50f7ae68a2476c405c76aa692d3acf6b8586e9242 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0 @@ -1886,7 +1886,7 @@ F test/veryquick.test 57ab846bacf7b90cf4e9a672721ea5c5b669b661 F test/view.test d4c4281e1679245829db35597817282f60dc513fc39cc5439078f009bd118487 F test/view2.test db32c8138b5b556f610b35dfddd38c5a58a292f07fda5281eedb0851b2672679 F test/view3.test ad8a8290ee2b55ff6ce66c9ef1ce3f1e47926273a3814e1c425293e128a95456 -F test/vt02.c 9f098d11920c832900959d7a2545fd67476d76ea6d4147e0b8ff70e915794e5b +F test/vt02.c 5b44ac67b1a283fedecf2d6e2ceda61e7a157f01d44dcb4490dcb1e87d057060 F test/vtab1.test 09a72330d0f31eda2ffaa828b06a6b917fb86250ee72de0301570af725774c07 F test/vtab2.test 14d4ab26cee13ba6cf5c5601b158e4f57552d3b055cdd9406cf7f711e9c84082 F test/vtab3.test b45f47d20f225ccc9c28dc915d92740c2dee311e @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 8aba78e4dbf5c196aa50a28579f4bcd7c96103661c5968d62b2fded075bc73e4 -R 3f971dd192c77b68556855589625c95d -U dan -Z ef9839d8477bc114052377f752ca4da6 +P ec6bffa3b0fbf7cdee852cb0208de1f5869dafd88e2ee64c23cec89634219adc +R b477c0da03665873d8762d7870dd6ef6 +U drh +Z 2e58a9a8215340c7ff8b8940ddc39cbe # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index edc06300fd..378e98d271 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ec6bffa3b0fbf7cdee852cb0208de1f5869dafd88e2ee64c23cec89634219adc \ No newline at end of file +d83405e870b071540b56e76291bdce1388db80b860afd68a34e4233f6ff2a3ab \ No newline at end of file diff --git a/src/trigger.c b/src/trigger.c index c4f09a4866..97ca249be5 100644 --- a/src/trigger.c +++ b/src/trigger.c @@ -970,10 +970,17 @@ static void codeReturningTrigger( SrcList sFrom; assert( v!=0 ); - if( !pParse->bReturning ) return; + if( !pParse->bReturning ){ + /* This RETURNING trigger must be for a different statement as + ** this statement lacks a RETURNING clause. */ + return; + } assert( db->pParse==pParse ); pReturning = pParse->u1.pReturning; - assert( pTrigger == &(pReturning->retTrig) ); + if( pTrigger != &(pReturning->retTrig) ){ + /* This RETURNING trigger is for a different statement */ + return; + } memset(&sSelect, 0, sizeof(sSelect)); memset(&sFrom, 0, sizeof(sFrom)); sSelect.pEList = sqlite3ExprListDup(db, pReturning->pReturnEL, 0); diff --git a/test/vt02.c b/test/vt02.c index 350a0400e9..06fade0969 100644 --- a/test/vt02.c +++ b/test/vt02.c @@ -580,8 +580,11 @@ static void sqlite3BestIndexLog( sqlite3_finalize(pStmt); } sqlite3RunSql(db,pVTab, - "INSERT INTO temp.\"%w\"(bi,vn,ix) VALUES(%d,'nConstraint',%d)", - zLogTab, iBI, pInfo->nConstraint + "INSERT INTO temp.\"%w\"(bi,vn,ix) VALUES(%d,'nConstraint',%d)" + "RETURNING iif(bi=%d,'ok',RAISE(ABORT,'wrong trigger'))", + /* The RETURNING clause checks to see that the returning trigger fired + ** for the correct INSERT in the case of nested INSERT RETURNINGs. */ + zLogTab, iBI, pInfo->nConstraint, iBI ); for(i=0; inConstraint; i++){ sqlite3_value *pVal; From c42276f63e72b993e2b0ef8776d5d906a8e1dd7e Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 27 Oct 2023 10:49:17 +0000 Subject: [PATCH 27/49] Back out [2904fcbeebba9189], mostly. The page bitmap is needed even for a partial integrity_check in order to avoid an infinite loops while walking the database. FossilOrigin-Name: dd6e03b37356e2961abd97f636402c09744c98c3033f3435503958c6219f9121 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/btree.c | 14 ++++---------- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/manifest b/manifest index 21b3b47224..b02b855491 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C In\sCLI\sfor\sWindows\sbuilds,\sdo\sMBCS/UTF-8\stranslation\sindependently\sfor\sinput\sand\soutput.\s(And\scure\san\sMSVC\swarning.) -D 2023-10-26T18:41:13.465 +C Back\sout\s[2904fcbeebba9189],\smostly.\s\sThe\spage\sbitmap\sis\sneeded\seven\sfor\sa\npartial\sintegrity_check\sin\sorder\sto\savoid\san\sinfinite\sloops\swhile\swalking\sthe\ndatabase. +D 2023-10-27T10:49:17.477 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -660,7 +660,7 @@ F src/auth.c 19b7ccacae3dfba23fc6f1d0af68134fa216e9040e53b0681b4715445ea030b4 F src/backup.c 5c97e8023aab1ce14a42387eb3ae00ba5a0644569e3476f38661fa6f824c3523 F src/bitvec.c 9eac5f42c11914d5ef00a75605bb205e934f435c579687f985f1f8b0995c8645 F src/btmutex.c 79a43670447eacc651519a429f6ece9fd638563cf95b469d6891185ddae2b522 -F src/btree.c f6c8512a0db0851877683e41936aac0f8927bc31630cbb1bc87ccccf79c06944 +F src/btree.c f3b09c5414de3a11db73e11e1d66f4c5e53c9e89876ff3b531a887ab656ca303 F src/btree.h 03e3356f5208bcab8eed4e094240fdac4a7f9f5ddf5e91045ce589f67d47c240 F src/btreeInt.h ef12a72b708677e48d6bc8dcd66fed25434740568b89e2cfa368093cfc5b9d15 F src/build.c 189e4517d67f09f0a3e0d8e1faa6e2ef0c2e95f6ac82e33c912cb7efa2a359cc @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P d2f2f9126562c24966b0e9bc3629b85950c20199c41250478ba1da68eb7a0046 59452e7c72de02c2b6d40974c91173d87fd5f6f2e28c0b1f6f53eb1a09693fb6 -R 1716e4fec6d2ad5fb1fb5737fb80f58b -U larrybr -Z 9ed808ed6c9d999a4b8724038afbe422 +P 80f0b6f9c76c049edaaaeedc1745978b9d5b02a9c34bbf64209266a154b2b0e3 +R 84d7c9418e41d2dbf6dd84433b9d6b54 +U drh +Z eb223c9086f97454e7586a05089e442c # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index a27d977737..3777dcf2b7 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -80f0b6f9c76c049edaaaeedc1745978b9d5b02a9c34bbf64209266a154b2b0e3 \ No newline at end of file +dd6e03b37356e2961abd97f636402c09744c98c3033f3435503958c6219f9121 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 7e340f5e5e..5be30d562c 100644 --- a/src/btree.c +++ b/src/btree.c @@ -10484,7 +10484,6 @@ static void setPageReferenced(IntegrityCk *pCheck, Pgno iPg){ */ static int checkRef(IntegrityCk *pCheck, Pgno iPage){ if( iPage>pCheck->nCkPage || iPage==0 ){ - if( pCheck->nCkPage==0 ) return 0; /* omit reference counting */ checkAppendMsg(pCheck, "invalid page number %u", iPage); return 1; } @@ -10990,15 +10989,10 @@ int sqlite3BtreeIntegrityCheck( goto integrity_ck_cleanup; } - if( bPartial ){ - sCheck.nCkPage = 0; - sCheck.aPgRef = 0; - }else{ - sCheck.aPgRef = sqlite3MallocZero((sCheck.nCkPage / 8)+ 1); - if( !sCheck.aPgRef ){ - checkOom(&sCheck); - goto integrity_ck_cleanup; - } + sCheck.aPgRef = sqlite3MallocZero((sCheck.nCkPage / 8)+ 1); + if( !sCheck.aPgRef ){ + checkOom(&sCheck); + goto integrity_ck_cleanup; } sCheck.heap = (u32*)sqlite3PageMalloc( pBt->pageSize ); if( sCheck.heap==0 ){ From 1b2a93ea366a46d191376fc5b6db3f65e0bffe6c Mon Sep 17 00:00:00 2001 From: larrybr Date: Fri, 27 Oct 2023 13:59:05 +0000 Subject: [PATCH 28/49] Cleanup shell.c comments. Hide -utf8 option, as it is undocumented and accepted only for backward compatibility. No functional changes except for -help content. FossilOrigin-Name: 3a87995560b5acbebeb5af407aa9eddf4c37c6a27ec9429ece0ea931918f9d9c --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/btree.c | 0 src/shell.c.in | 15 ++++++++------- 4 files changed, 17 insertions(+), 16 deletions(-) mode change 100644 => 100755 src/btree.c diff --git a/manifest b/manifest index b02b855491..cfc5de0f6e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Back\sout\s[2904fcbeebba9189],\smostly.\s\sThe\spage\sbitmap\sis\sneeded\seven\sfor\sa\npartial\sintegrity_check\sin\sorder\sto\savoid\san\sinfinite\sloops\swhile\swalking\sthe\ndatabase. -D 2023-10-27T10:49:17.477 +C Cleanup\sshell.c\scomments.\sHide\s-utf8\soption,\sas\sit\sis\sundocumented\sand\saccepted\sonly\sfor\sbackward\scompatibility.\sNo\sfunctional\schanges\sexcept\sfor\s-help\scontent. +D 2023-10-27T13:59:05.662 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -660,7 +660,7 @@ F src/auth.c 19b7ccacae3dfba23fc6f1d0af68134fa216e9040e53b0681b4715445ea030b4 F src/backup.c 5c97e8023aab1ce14a42387eb3ae00ba5a0644569e3476f38661fa6f824c3523 F src/bitvec.c 9eac5f42c11914d5ef00a75605bb205e934f435c579687f985f1f8b0995c8645 F src/btmutex.c 79a43670447eacc651519a429f6ece9fd638563cf95b469d6891185ddae2b522 -F src/btree.c f3b09c5414de3a11db73e11e1d66f4c5e53c9e89876ff3b531a887ab656ca303 +F src/btree.c f3b09c5414de3a11db73e11e1d66f4c5e53c9e89876ff3b531a887ab656ca303 x F src/btree.h 03e3356f5208bcab8eed4e094240fdac4a7f9f5ddf5e91045ce589f67d47c240 F src/btreeInt.h ef12a72b708677e48d6bc8dcd66fed25434740568b89e2cfa368093cfc5b9d15 F src/build.c 189e4517d67f09f0a3e0d8e1faa6e2ef0c2e95f6ac82e33c912cb7efa2a359cc @@ -722,7 +722,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 64c9bc7494f3d220a27498137551762c25458282388ea9ac0a710dd6d5dc1510 -F src/shell.c.in 93f5591ea14e087860801d98c0404ffb5948ccf4cd9b2e98938cfd836f48a932 +F src/shell.c.in 9b29276cb6447b4c608e77c08b49bd3315cdcb399801e08b2f15723aa5b733e8 F src/sqlite.h.in 428948ef39b3ef7b675ec12bd4853619bad77279b5fa38e3a51c5b9656ae16ff F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 80f0b6f9c76c049edaaaeedc1745978b9d5b02a9c34bbf64209266a154b2b0e3 -R 84d7c9418e41d2dbf6dd84433b9d6b54 -U drh -Z eb223c9086f97454e7586a05089e442c +P dd6e03b37356e2961abd97f636402c09744c98c3033f3435503958c6219f9121 +R b4f027e64bba8f896523d3874bfe956c +U larrybr +Z 9d578a0ee37bec1d8a1793330bcc1208 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 3777dcf2b7..5fa722c205 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -dd6e03b37356e2961abd97f636402c09744c98c3033f3435503958c6219f9121 \ No newline at end of file +3a87995560b5acbebeb5af407aa9eddf4c37c6a27ec9429ece0ea931918f9d9c \ No newline at end of file diff --git a/src/btree.c b/src/btree.c old mode 100644 new mode 100755 diff --git a/src/shell.c.in b/src/shell.c.in index 395cbd035d..f1362d613d 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -599,7 +599,7 @@ static char *dynamicContinuePrompt(void){ #endif /* !defined(SQLITE_OMIT_DYNAPROMPT) */ #if SHELL_WIN_UTF8_OPT -/* Following struct is used for -utf8 operation. */ +/* Following struct is used for UTF-8 operation. */ static struct ConsoleState { int stdinEof; /* EOF has been seen on console input */ int infsMode; /* Input file stream mode upon shell start */ @@ -743,7 +743,7 @@ static char* utf8_fgets(char *buf, int ncmax, FILE *fin){ ** console and if this is running on a Windows machine, and if UTF-8 ** output unavailable (or available but opted out), translate the ** output from UTF-8 into MBCS for output through 8-bit stdout stream. -** (With -utf8 active, no translation is needed and must not be done.) +** (Without -no-utf8, no translation is needed and must not be done.) */ #if defined(_WIN32) || defined(WIN32) void utf8_printf(FILE *out, const char *zFormat, ...){ @@ -960,7 +960,7 @@ static char *local_getline(char *zLine, FILE *in){ } } #if defined(_WIN32) || defined(WIN32) - /* For interactive input on Windows systems, without -utf8, + /* For interactive input on Windows systems, with -no-utf8, ** translate the multi-byte characterset characters into UTF-8. ** This is the translation that predates console UTF-8 input. */ if( stdin_is_interactive && in==stdin && !console_utf8_in ){ @@ -11957,7 +11957,7 @@ static const char zOptions[] = " -newline SEP set output row separator. Default: '\\n'\n" #if SHELL_WIN_UTF8_OPT " -no-utf8 do not try to set up UTF-8 output (for legacy)\n" -#endif +#endif " -nofollow refuse to open symbolic links to database files\n" " -nonce STRING set the safe-mode escape nonce\n" " -nullvalue TEXT set text string for NULL values. Default ''\n" @@ -11974,7 +11974,7 @@ static const char zOptions[] = " -table set output mode to 'table'\n" " -tabs set output mode to 'tabs'\n" " -unsafe-testing allow unsafe commands and modes for testing\n" -#if SHELL_WIN_UTF8_OPT +#if SHELL_WIN_UTF8_OPT && 0 /* Option is accepted, but is now the default. */ " -utf8 setup interactive console code page for UTF-8\n" #endif " -version show SQLite version\n" @@ -12212,8 +12212,8 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ /* Do an initial pass through the command-line argument to locate ** the name of the database file, the name of the initialization file, - ** the size of the alternative malloc heap, - ** and the first command to execute. + ** the size of the alternative malloc heap, options affecting commands + ** or SQL run from the command line, and the first command to execute. */ #ifndef SQLITE_SHELL_FIDDLE verify_uninitialized(); @@ -12260,6 +12260,7 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ stdin_is_interactive = 0; }else if( cli_strcmp(z,"-utf8")==0 ){ #if SHELL_WIN_UTF8_OPT + /* Option accepted, but just specifies default UTF-8 console I/O. */ mbcs_opted = 0; #endif /* SHELL_WIN_UTF8_OPT */ }else if( cli_strcmp(z,"-no-utf8")==0 ){ From a03932a790a62aef66282d8090f25cec462065cc Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 27 Oct 2023 15:31:44 +0000 Subject: [PATCH 29/49] Fix to Makefile.in so that the "tool-zip" target can be run from outside the source tree. FossilOrigin-Name: cd118da9db0680fab8761ff44384639b9d564b67a5dfb1280ab72e44ff57714d --- Makefile.in | 2 +- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Makefile.in b/Makefile.in index 0287915717..bdbfdd7e5d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1486,7 +1486,7 @@ snapshot-tarball: sqlite3.c sqlite3rc.h # Build a ZIP archive containing various command-line tools. # -tool-zip: testfixture sqlite3 sqldiff sqlite3_analyzer tool/mktoolzip.tcl +tool-zip: testfixture sqlite3 sqldiff sqlite3_analyzer $(TOP)/tool/mktoolzip.tcl ./testfixture $(TOP)/tool/mktoolzip.tcl # The next two rules are used to support the "threadtest" target. Building diff --git a/manifest b/manifest index cfc5de0f6e..2f73120ab7 100644 --- a/manifest +++ b/manifest @@ -1,9 +1,9 @@ -C Cleanup\sshell.c\scomments.\sHide\s-utf8\soption,\sas\sit\sis\sundocumented\sand\saccepted\sonly\sfor\sbackward\scompatibility.\sNo\sfunctional\schanges\sexcept\sfor\s-help\scontent. -D 2023-10-27T13:59:05.662 +C Fix\sto\sMakefile.in\sso\sthat\sthe\s"tool-zip"\starget\scan\sbe\srun\sfrom\soutside\sthe\ssource\stree. +D 2023-10-27T15:31:44.997 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 -F Makefile.in 2ea4105b72561483befe0a18a37f94ca3adbc2324bad3770f99555d95fb9b0ea +F Makefile.in ab9045ee4781caaf92d7f9262768dcbb35e463aead30df4aa2d0c4e38ee0d2f6 F Makefile.linux-gcc f3842a0b1efbfbb74ac0ef60e56b301836d05b4d867d014f714fa750048f1ab6 F Makefile.msc c1aa09e0212d8609df041d13da6ca63198d1c1e29846f33104beecf19917102b F README.md 963d30019abf0cc06b263cd2824bce022893f3f93a531758f6f04ff2194a16a8 @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P dd6e03b37356e2961abd97f636402c09744c98c3033f3435503958c6219f9121 -R b4f027e64bba8f896523d3874bfe956c -U larrybr -Z 9d578a0ee37bec1d8a1793330bcc1208 +P 3a87995560b5acbebeb5af407aa9eddf4c37c6a27ec9429ece0ea931918f9d9c +R 0efb00b52520b1614c5871063698f7c2 +U dan +Z 057c60122b3365185e9a7fdd1b36a1c0 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 5fa722c205..ed2689bce5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3a87995560b5acbebeb5af407aa9eddf4c37c6a27ec9429ece0ea931918f9d9c \ No newline at end of file +cd118da9db0680fab8761ff44384639b9d564b67a5dfb1280ab72e44ff57714d \ No newline at end of file From 2e0d7b28c19895d74aec85e3f47398bfd554f190 Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 27 Oct 2023 17:40:46 +0000 Subject: [PATCH 30/49] Add makefile targets for fuzzcheck-asan and fuzzcheck-ubsan. FossilOrigin-Name: 27fc14303a0c6942e8cf5017d66c7ff5fcbc700a6109a93768263370f608397e --- Makefile.in | 3 +++ main.mk | 12 +++++++++++- manifest | 16 ++++++++-------- manifest.uuid | 2 +- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/Makefile.in b/Makefile.in index bdbfdd7e5d..c521586a14 100644 --- a/Makefile.in +++ b/Makefile.in @@ -707,6 +707,9 @@ fuzzcheck$(TEXE): $(FUZZCHECK_SRC) sqlite3.c sqlite3.h $(FUZZCHECK_DEP) fuzzcheck-asan$(TEXE): $(FUZZCHECK_SRC) sqlite3.c sqlite3.h $(FUZZCHECK_DEP) $(LTLINK) -o $@ -fsanitize=address $(FUZZCHECK_OPT) $(FUZZCHECK_SRC) sqlite3.c $(TLIBS) +fuzzcheck-ubsan$(TEXE): $(FUZZCHECK_SRC) sqlite3.c sqlite3.h $(FUZZCHECK_DEP) + $(LTLINK) -o $@ -fsanitize=undefined $(FUZZCHECK_OPT) $(FUZZCHECK_SRC) sqlite3.c $(TLIBS) + ossshell$(TEXE): $(TOP)/test/ossfuzz.c $(TOP)/test/ossshell.c sqlite3.c sqlite3.h $(LTLINK) -o $@ $(FUZZCHECK_OPT) $(TOP)/test/ossshell.c \ $(TOP)/test/ossfuzz.c sqlite3.c $(TLIBS) diff --git a/main.mk b/main.mk index d8c372430e..fdfdb75291 100644 --- a/main.mk +++ b/main.mk @@ -597,7 +597,17 @@ dbfuzz2$(EXE): $(TOP)/test/dbfuzz2.c sqlite3.c sqlite3.h $(DBFUZZ2_OPTS) $(TOP)/test/dbfuzz2.c sqlite3.c $(TLIBS) $(THREADLIB) fuzzcheck$(EXE): $(FUZZSRC) sqlite3.c sqlite3.h $(FUZZDEP) - $(TCCX) -o fuzzcheck$(EXE) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \ + $(TCCX) -o $@ -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \ + -DSQLITE_ENABLE_MEMSYS5 $(FUZZCHECK_OPT) -DSQLITE_OSS_FUZZ \ + $(FUZZSRC) sqlite3.c $(TLIBS) $(THREADLIB) + +fuzzcheck-asan$(EXE): $(FUZZSRC) sqlite3.c sqlite3.h $(FUZZDEP) + $(TCCX) -fsanitize=address -o $W -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \ + -DSQLITE_ENABLE_MEMSYS5 $(FUZZCHECK_OPT) -DSQLITE_OSS_FUZZ \ + $(FUZZSRC) sqlite3.c $(TLIBS) $(THREADLIB) + +fuzzcheck-ubsan$(EXE): $(FUZZSRC) sqlite3.c sqlite3.h $(FUZZDEP) + $(TCCX) -fsanitize=undefined -o $@ -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \ -DSQLITE_ENABLE_MEMSYS5 $(FUZZCHECK_OPT) -DSQLITE_OSS_FUZZ \ $(FUZZSRC) sqlite3.c $(TLIBS) $(THREADLIB) diff --git a/manifest b/manifest index 2f73120ab7..7a3c310a45 100644 --- a/manifest +++ b/manifest @@ -1,9 +1,9 @@ -C Fix\sto\sMakefile.in\sso\sthat\sthe\s"tool-zip"\starget\scan\sbe\srun\sfrom\soutside\sthe\ssource\stree. -D 2023-10-27T15:31:44.997 +C Add\smakefile\stargets\sfor\sfuzzcheck-asan\sand\sfuzzcheck-ubsan. +D 2023-10-27T17:40:46.550 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 -F Makefile.in ab9045ee4781caaf92d7f9262768dcbb35e463aead30df4aa2d0c4e38ee0d2f6 +F Makefile.in 8b59912fc1538f96a08555605c5886cdcc733696ae7f22e374b2a4752196ca20 F Makefile.linux-gcc f3842a0b1efbfbb74ac0ef60e56b301836d05b4d867d014f714fa750048f1ab6 F Makefile.msc c1aa09e0212d8609df041d13da6ca63198d1c1e29846f33104beecf19917102b F README.md 963d30019abf0cc06b263cd2824bce022893f3f93a531758f6f04ff2194a16a8 @@ -641,7 +641,7 @@ F ext/wasm/wasmfs.make 8a4955882aaa0783b3f60a9484a1f0f3d8b6f775c0fcd17c082f31966 F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 -F main.mk 5536159f62058714c972b5bd325c8d5ecd5c9b00b385dd2e1cbc17da70a711b2 +F main.mk 51fd5fc8565007266e6bfd9e299199c752b171707a667b8914a204b38258e1b1 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421 @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 3a87995560b5acbebeb5af407aa9eddf4c37c6a27ec9429ece0ea931918f9d9c -R 0efb00b52520b1614c5871063698f7c2 -U dan -Z 057c60122b3365185e9a7fdd1b36a1c0 +P cd118da9db0680fab8761ff44384639b9d564b67a5dfb1280ab72e44ff57714d +R 803f05028bcb0911d31da2c38e3126c9 +U drh +Z 66eee725aa902aff9f760f94dee7a24e # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index ed2689bce5..c773092b8c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cd118da9db0680fab8761ff44384639b9d564b67a5dfb1280ab72e44ff57714d \ No newline at end of file +27fc14303a0c6942e8cf5017d66c7ff5fcbc700a6109a93768263370f608397e \ No newline at end of file From 6572f7799ca10bfc257a5c6b452b10b0b91450d1 Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 27 Oct 2023 18:16:15 +0000 Subject: [PATCH 31/49] Disable two rtree test cases for Linux-i686. We do not have that platform available for testing. The test cases work on all other 64-bit and 32-bit platforms that we have at hand. So there is no way for us to debug this problem. Better to disable the test. [forum:/forumpost/ffcbf789b5386573|forum post ffcbf789b5386573]. FossilOrigin-Name: fed4d6e90baecca716429f95e1fab7930297afa2a191a87a0a87cb93910d1bce --- ext/rtree/rtree1.test | 20 +++++++++++--------- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/ext/rtree/rtree1.test b/ext/rtree/rtree1.test index 2d8458a538..61664e1529 100644 --- a/ext/rtree/rtree1.test +++ b/ext/rtree/rtree1.test @@ -774,15 +774,17 @@ do_execsql_test 21.1 { # Round-off error associated with using large integer constraints on # a rtree search. # -reset_db -do_execsql_test 22.0 { - CREATE VIRTUAL TABLE t1 USING rtree ( id, x0, x1 ); - INSERT INTO t1 VALUES (123, 9223372036854775799, 9223372036854775800); - SELECT id FROM t1 WHERE x0 > 9223372036854775807; -} {123} -do_execsql_test 22.1 { - SELECT id, x0 > 9223372036854775807 AS 'a0' FROM t1; -} {123 1} +if {$tcl_platform(machine)!="i686" || $tcl_platform(os)!="Linux"} { + reset_db + do_execsql_test 22.0 { + CREATE VIRTUAL TABLE t1 USING rtree ( id, x0, x1 ); + INSERT INTO t1 VALUES (123, 9223372036854775799, 9223372036854775800); + SELECT id FROM t1 WHERE x0 > 9223372036854775807; + } {123} + do_execsql_test 22.1 { + SELECT id, x0 > 9223372036854775807 AS 'a0' FROM t1; + } {123 1} +} # 2023-10-14 dbsqlfuzz --sql-fuzz find. rtreecheck() should not call # BEGIN/COMMIT because that causes problems with statement transactions, diff --git a/manifest b/manifest index 7a3c310a45..901c67f8b7 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\smakefile\stargets\sfor\sfuzzcheck-asan\sand\sfuzzcheck-ubsan. -D 2023-10-27T17:40:46.550 +C Disable\stwo\srtree\stest\scases\sfor\sLinux-i686.\s\sWe\sdo\snot\shave\sthat\splatform\navailable\sfor\stesting.\s\sThe\stest\scases\swork\son\sall\sother\s64-bit\sand\s32-bit\nplatforms\sthat\swe\shave\sat\shand.\s\sSo\sthere\sis\sno\sway\sfor\sus\sto\sdebug\sthis\nproblem.\s\sBetter\sto\sdisable\sthe\stest.\n[forum:/forumpost/ffcbf789b5386573|forum\spost\sffcbf789b5386573]. +D 2023-10-27T18:16:15.021 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -483,7 +483,7 @@ F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761 F ext/rtree/geopoly.c 0dd4775e896cee6067979d67aff7c998e75c2c9d9cd8d62a1a790c09cde7adca F ext/rtree/rtree.c 2e1452a9338fe4db057fa677277bed86b65c667ed48b9b59144adae99f85a7cb F ext/rtree/rtree.h 4a690463901cb5e6127cf05eb8e642f127012fd5003830dbc974eca5802d9412 -F ext/rtree/rtree1.test ecc881fdd1bc10fc390faa988ad93343739af84384e4cf3619fed7afada66a30 +F ext/rtree/rtree1.test 2b5b8c719c6a4abe377f57766f428a49af36a93061cb146cccfdc3b30000c0a4 F ext/rtree/rtree2.test 9d9deddbb16fd0c30c36e6b4fdc3ee3132d765567f0f9432ee71e1303d32603d F ext/rtree/rtree3.test 272594f88c344e973864008bbe4c71fd3a41a264c097d568593ee7886d83d409 F ext/rtree/rtree4.test 304de65d484540111b896827e4261815e5dca4ce28eeecd58be648cd73452c4b @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P cd118da9db0680fab8761ff44384639b9d564b67a5dfb1280ab72e44ff57714d -R 803f05028bcb0911d31da2c38e3126c9 +P 27fc14303a0c6942e8cf5017d66c7ff5fcbc700a6109a93768263370f608397e +R 71d72cb40c4b26196886d1c5a851d0e7 U drh -Z 66eee725aa902aff9f760f94dee7a24e +Z b23e32d3e4b66b7a3031ae330eecd039 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index c773092b8c..b4e00d9b15 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -27fc14303a0c6942e8cf5017d66c7ff5fcbc700a6109a93768263370f608397e \ No newline at end of file +fed4d6e90baecca716429f95e1fab7930297afa2a191a87a0a87cb93910d1bce \ No newline at end of file From 4b8010a8ee0fec09de4114e1ed381386b53ac425 Mon Sep 17 00:00:00 2001 From: larrybr Date: Fri, 27 Oct 2023 21:44:53 +0000 Subject: [PATCH 32/49] Fix cosmetic flaw in SQLITE_TXN_* doc. (no code change) FossilOrigin-Name: 72d7c18f80f41529811f74855ac198681a0cfe7634225233ec4b8df219c2e73b --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/sqlite.h.in | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 901c67f8b7..278bae0248 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Disable\stwo\srtree\stest\scases\sfor\sLinux-i686.\s\sWe\sdo\snot\shave\sthat\splatform\navailable\sfor\stesting.\s\sThe\stest\scases\swork\son\sall\sother\s64-bit\sand\s32-bit\nplatforms\sthat\swe\shave\sat\shand.\s\sSo\sthere\sis\sno\sway\sfor\sus\sto\sdebug\sthis\nproblem.\s\sBetter\sto\sdisable\sthe\stest.\n[forum:/forumpost/ffcbf789b5386573|forum\spost\sffcbf789b5386573]. -D 2023-10-27T18:16:15.021 +C Fix\scosmetic\sflaw\sin\sSQLITE_TXN_*\sdoc.\s(no\scode\schange) +D 2023-10-27T21:44:53.875 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -723,7 +723,7 @@ F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 64c9bc7494f3d220a27498137551762c25458282388ea9ac0a710dd6d5dc1510 F src/shell.c.in 9b29276cb6447b4c608e77c08b49bd3315cdcb399801e08b2f15723aa5b733e8 -F src/sqlite.h.in 428948ef39b3ef7b675ec12bd4853619bad77279b5fa38e3a51c5b9656ae16ff +F src/sqlite.h.in c782ba48253f503a2c56898477a5b4ec42ce959147ff6209f51828d0fedff563 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac F src/sqliteInt.h 567e317f8631883897b7d3da43fce778b7c30dd0dd7f714558c9725fc1c1196c @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 27fc14303a0c6942e8cf5017d66c7ff5fcbc700a6109a93768263370f608397e -R 71d72cb40c4b26196886d1c5a851d0e7 -U drh -Z b23e32d3e4b66b7a3031ae330eecd039 +P fed4d6e90baecca716429f95e1fab7930297afa2a191a87a0a87cb93910d1bce +R 57fc96011aead4e5ab340c284590ec27 +U larrybr +Z ba99082b6fa40ef9d4b3d6125771df22 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index b4e00d9b15..e4f911fcad 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -fed4d6e90baecca716429f95e1fab7930297afa2a191a87a0a87cb93910d1bce \ No newline at end of file +72d7c18f80f41529811f74855ac198681a0cfe7634225233ec4b8df219c2e73b \ No newline at end of file diff --git a/src/sqlite.h.in b/src/sqlite.h.in index d8caf81067..e29f2ab605 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -6624,7 +6624,7 @@ int sqlite3_db_readonly(sqlite3 *db, const char *zDbName); int sqlite3_txn_state(sqlite3*,const char *zSchema); /* -** CAPI3REF: Allowed return values from [sqlite3_txn_state()] +** CAPI3REF: Allowed return values from sqlite3_txn_state() ** KEYWORDS: {transaction state} ** ** These constants define the current transaction state of a database file. From a9fea287610298a7748a01cb423fa1263ed8f428 Mon Sep 17 00:00:00 2001 From: stephan Date: Sat, 28 Oct 2023 03:54:28 +0000 Subject: [PATCH 33/49] Remove the SQLITE_MAX_ALLOCATION_SIZE flag (set to 536mb) from the WASM and JNI builds because it can unduly limit db exports via sqlite3_serialize(), as reported in [forum:75524f7342c1ba45|forum post 75524f7342c1ba45]. It now defaults to whatever sqlite3.c uses, which is currently just shy of 2gb. FossilOrigin-Name: f6e1137919243c5ce86725df64b40b7e12e82cbceaff210ca41616d620f0dd1b --- ext/wasm/api/sqlite3-wasm.c | 6 ------ manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/ext/wasm/api/sqlite3-wasm.c b/ext/wasm/api/sqlite3-wasm.c index 88a679c518..18d27bdf0c 100644 --- a/ext/wasm/api/sqlite3-wasm.c +++ b/ext/wasm/api/sqlite3-wasm.c @@ -129,12 +129,6 @@ # define SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION #endif -/**********************************************************************/ -/* SQLITE_M... */ -#ifndef SQLITE_MAX_ALLOCATION_SIZE -# define SQLITE_MAX_ALLOCATION_SIZE 0x1fffffff -#endif - /**********************************************************************/ /* SQLITE_O... */ #ifndef SQLITE_OMIT_DEPRECATED diff --git a/manifest b/manifest index 278bae0248..7ee959d342 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\scosmetic\sflaw\sin\sSQLITE_TXN_*\sdoc.\s(no\scode\schange) -D 2023-10-27T21:44:53.875 +C Remove\sthe\sSQLITE_MAX_ALLOCATION_SIZE\sflag\s(set\sto\s536mb)\sfrom\sthe\sWASM\sand\sJNI\sbuilds\sbecause\sit\scan\sunduly\slimit\sdb\sexports\svia\ssqlite3_serialize(),\sas\sreported\sin\s[forum:75524f7342c1ba45|forum\spost\s75524f7342c1ba45].\sIt\snow\sdefaults\sto\swhatever\ssqlite3.c\suses,\swhich\sis\scurrently\sjust\sshy\sof\s2gb. +D 2023-10-28T03:54:28.627 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -588,7 +588,7 @@ F ext/wasm/api/sqlite3-opfs-async-proxy.js 8cf8a897726f14071fae6be6648125162b256 F ext/wasm/api/sqlite3-v-helper.js 7daa0eab0a513a25b05e9abae7b5beaaa39209b3ed12f86aeae9ef8d2719ed25 F ext/wasm/api/sqlite3-vfs-opfs-sahpool.c-pp.js 595953994aa3ae2287c889c4da39ab3d6f17b6461ecf4bec334b7a3faafddb02 F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js 46c4afa6c50d7369252c104f274ad977a97e91ccfafc38b400fe36e90bdda88e -F ext/wasm/api/sqlite3-wasm.c c8c5b81b838cef2053b1eb6e7a79c44a2caedcf0c9e6b0d12a45d73ce0617be0 +F ext/wasm/api/sqlite3-wasm.c 038de1b6d40b2cc0f41a143a0451db60b2a6f1b5bc06de67da255c54ea1661b7 F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js bc06df0d599e625bde6a10a394e326dc68da9ff07fa5404354580f81566e591f F ext/wasm/api/sqlite3-worker1.c-pp.js a541112aa51e16705f13a99bb943c64efe178aa28c86704a955f8fd9afe4ba37 F ext/wasm/batch-runner.html 4deeed44fe41496dc6898d9fb17938ea3291f40f4bfb977e29d0cef96fbbe4c8 @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P fed4d6e90baecca716429f95e1fab7930297afa2a191a87a0a87cb93910d1bce -R 57fc96011aead4e5ab340c284590ec27 -U larrybr -Z ba99082b6fa40ef9d4b3d6125771df22 +P 72d7c18f80f41529811f74855ac198681a0cfe7634225233ec4b8df219c2e73b +R bf08c39748b4512d96281328ee8f10df +U stephan +Z 7196c1c2248d91eedb16eedfc74c5151 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index e4f911fcad..b2dd4e2f35 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -72d7c18f80f41529811f74855ac198681a0cfe7634225233ec4b8df219c2e73b \ No newline at end of file +f6e1137919243c5ce86725df64b40b7e12e82cbceaff210ca41616d620f0dd1b \ No newline at end of file From 1b772cae2d7d7285d6ceea480c21e0ffaf3a4e0d Mon Sep 17 00:00:00 2001 From: drh <> Date: Sat, 28 Oct 2023 11:40:33 +0000 Subject: [PATCH 34/49] Since SQLite considers NaN to be like NULL and NULL sorts before any integer, make sure the sqlite3IntFloatCompare() routine reports that the integer argument is larger if the floating-point argument is NaN. FossilOrigin-Name: de1cf31a34b0f21288e7e30434a06baf25ee579929107c22e65c57236577fc4a --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/vdbeaux.c | 5 +++++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 7ee959d342..dc69b709fb 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\sthe\sSQLITE_MAX_ALLOCATION_SIZE\sflag\s(set\sto\s536mb)\sfrom\sthe\sWASM\sand\sJNI\sbuilds\sbecause\sit\scan\sunduly\slimit\sdb\sexports\svia\ssqlite3_serialize(),\sas\sreported\sin\s[forum:75524f7342c1ba45|forum\spost\s75524f7342c1ba45].\sIt\snow\sdefaults\sto\swhatever\ssqlite3.c\suses,\swhich\sis\scurrently\sjust\sshy\sof\s2gb. -D 2023-10-28T03:54:28.627 +C Since\sSQLite\sconsiders\sNaN\sto\sbe\slike\sNULL\sand\sNULL\ssorts\sbefore\sany\sinteger,\nmake\ssure\sthe\ssqlite3IntFloatCompare()\sroutine\sreports\sthat\sthe\sinteger\nargument\sis\slarger\sif\sthe\sfloating-point\sargument\sis\sNaN. +D 2023-10-28T11:40:33.874 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -795,7 +795,7 @@ F src/vdbe.c 14479441337135eed8e290fb1d4abb7db657d93217a3b1ea8a2f031d3895536a F src/vdbe.h 41485521f68e9437fdb7ec4a90f9d86ab294e9bb8281e33b235915e29122cfc0 F src/vdbeInt.h 949669dfd8a41550d27dcb905b494f2ccde9a2e6c1b0b04daa1227e2e74c2b2c F src/vdbeapi.c fe654b1f54e1feebcaed6c2ae3ed035cc65bfeb9a1169bed866abc42bfc63ff6 -F src/vdbeaux.c 929a4edecf9845fb063b47b23b9d187473a648470d915521cf72419f5219c4b7 +F src/vdbeaux.c dffcf79e7e415fcd6e4c8ac1ec7124cae5257018443adf09551c807655b04993 F src/vdbeblob.c 13f9287b55b6356b4b1845410382d6bede203ceb29ef69388a4a3d007ffacbe5 F src/vdbemem.c c936e9002af4993b84c4eb7133d6b1190efe46d391cc86117ecd67ba17b1a04b F src/vdbesort.c 237840ca1947511fa59bd4e18b9eeae93f2af2468c34d2427b059f896230a547 @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 72d7c18f80f41529811f74855ac198681a0cfe7634225233ec4b8df219c2e73b -R bf08c39748b4512d96281328ee8f10df -U stephan -Z 7196c1c2248d91eedb16eedfc74c5151 +P f6e1137919243c5ce86725df64b40b7e12e82cbceaff210ca41616d620f0dd1b +R a6a0caaaeaf258d62d251b7e0c096200 +U drh +Z e4297a009a5cb0d7d92fe890e604c55c # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index b2dd4e2f35..9520cf2269 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f6e1137919243c5ce86725df64b40b7e12e82cbceaff210ca41616d620f0dd1b \ No newline at end of file +de1cf31a34b0f21288e7e30434a06baf25ee579929107c22e65c57236577fc4a \ No newline at end of file diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 27be95a6b5..54317b816f 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -4481,6 +4481,11 @@ static int SQLITE_NOINLINE doubleEq(double a, double b){ return a==b; } ** equal to, or greater than the second (double). */ int sqlite3IntFloatCompare(i64 i, double r){ + if( sqlite3IsNaN(r) ){ + /* SQLite considers NaN to be a NULL. And all integer values are greater + ** than NULL */ + return 1; + } if( sqlite3Config.bUseLongDouble ){ LONGDOUBLE_TYPE x = (LONGDOUBLE_TYPE)i; testcase( x Date: Sat, 28 Oct 2023 11:53:14 +0000 Subject: [PATCH 35/49] Update documentation for sqlite3_errmsg() to try to make it clear that if the schema of a database contains table names or similar with invalid UTF, then the error message generated by SQLite might also contain invalid UTF. No changes to code. FossilOrigin-Name: 33ba13c7c4b6f9c5e64ea30c819718f2caea214afca945c9ed7075864f4aaa40 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/sqlite.h.in | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index dc69b709fb..274fb7e24c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Since\sSQLite\sconsiders\sNaN\sto\sbe\slike\sNULL\sand\sNULL\ssorts\sbefore\sany\sinteger,\nmake\ssure\sthe\ssqlite3IntFloatCompare()\sroutine\sreports\sthat\sthe\sinteger\nargument\sis\slarger\sif\sthe\sfloating-point\sargument\sis\sNaN. -D 2023-10-28T11:40:33.874 +C Update\sdocumentation\sfor\ssqlite3_errmsg()\sto\stry\sto\smake\sit\sclear\sthat\sif\nthe\sschema\sof\sa\sdatabase\scontains\stable\snames\sor\ssimilar\swith\sinvalid\sUTF,\nthen\sthe\serror\smessage\sgenerated\sby\sSQLite\smight\salso\scontain\sinvalid\sUTF.\nNo\schanges\sto\scode. +D 2023-10-28T11:53:14.116 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -723,7 +723,7 @@ F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 64c9bc7494f3d220a27498137551762c25458282388ea9ac0a710dd6d5dc1510 F src/shell.c.in 9b29276cb6447b4c608e77c08b49bd3315cdcb399801e08b2f15723aa5b733e8 -F src/sqlite.h.in c782ba48253f503a2c56898477a5b4ec42ce959147ff6209f51828d0fedff563 +F src/sqlite.h.in ef0e41e83ad1ac0dcc9ec9939bf541a44b1c5de821bee2d6c61754c3252f3276 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac F src/sqliteInt.h 567e317f8631883897b7d3da43fce778b7c30dd0dd7f714558c9725fc1c1196c @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P f6e1137919243c5ce86725df64b40b7e12e82cbceaff210ca41616d620f0dd1b -R a6a0caaaeaf258d62d251b7e0c096200 +P de1cf31a34b0f21288e7e30434a06baf25ee579929107c22e65c57236577fc4a +R ce627b31c8a7f399b0e12cf71b754a64 U drh -Z e4297a009a5cb0d7d92fe890e604c55c +Z 86353e9fa0a68bc2fae9ca0e76a0a632 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 9520cf2269..6590c170a6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -de1cf31a34b0f21288e7e30434a06baf25ee579929107c22e65c57236577fc4a \ No newline at end of file +33ba13c7c4b6f9c5e64ea30c819718f2caea214afca945c9ed7075864f4aaa40 \ No newline at end of file diff --git a/src/sqlite.h.in b/src/sqlite.h.in index e29f2ab605..01a7f4d4e0 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -3955,6 +3955,7 @@ void sqlite3_free_filename(sqlite3_filename); ** ** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language ** text that describes the error, as either UTF-8 or UTF-16 respectively. +** (See how SQLite handles [invalid UTF] for exceptions to this rule.) ** ^(Memory to hold the error message string is managed internally. ** The application does not need to worry about freeing the result. ** However, the error string might be overwritten or deallocated by From 5269e846dc9b4e6c20b90c368a6be79c4d29da20 Mon Sep 17 00:00:00 2001 From: drh <> Date: Sat, 28 Oct 2023 16:19:21 +0000 Subject: [PATCH 36/49] Limit the range of integer unix timestamps in date4.test, since some systems (RaspberryPI) cannot deal with timestamp values that exceed pow(2,31). FossilOrigin-Name: 765290663b28e90a0494997baf023f9610a4ed32f0ff0099bf9fc3d485733fca --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/date4.test | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 274fb7e24c..d2d1aeb7ec 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Update\sdocumentation\sfor\ssqlite3_errmsg()\sto\stry\sto\smake\sit\sclear\sthat\sif\nthe\sschema\sof\sa\sdatabase\scontains\stable\snames\sor\ssimilar\swith\sinvalid\sUTF,\nthen\sthe\serror\smessage\sgenerated\sby\sSQLite\smight\salso\scontain\sinvalid\sUTF.\nNo\schanges\sto\scode. -D 2023-10-28T11:53:14.116 +C Limit\sthe\srange\sof\sinteger\sunix\stimestamps\sin\sdate4.test,\ssince\ssome\ssystems\n(RaspberryPI)\scannot\sdeal\swith\stimestamp\svalues\sthat\sexceed\spow(2,31). +D 2023-10-28T16:19:21.185 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1016,7 +1016,7 @@ F test/dataversion1.test 6e5e86ac681f0782e766ebcb56c019ae001522d114e0e111e5ebf68 F test/date.test c0d17cdfd89395bc78087b131e3538d96f864b5029c335318011accc7c0d0934 F test/date2.test 7e12ec14aaf4d5e6294b4ba140445b0eca06ea50062a9c3a69c4ee13d0b6f8b1 F test/date3.test a1b77abf05c6772fe5ca2337cac1398892f2a41e62bce7e6be0f4a08a0e64ae5 -F test/date4.test db9e5760cf6f480fcf36bb7ca8e215880ff44354a31be6fb3d7e58f9d2e057e9 +F test/date4.test 8aeb3de5b5e9fda968baa9357e4c0fae573724b7904943410195a19e96e31b6a F test/dbdata.test 042f49acff3438f940eeba5868d3af080ae64ddf26ae78f80c92bec3ca7d8603 F test/dbfuzz.c 73047c920d6210e5912c87cdffd9a1c281d4252e F test/dbfuzz001.test 6c9a4622029d69dc38926f115864b055cb2f39badd25ec22cbfb130c8ba8e9c3 @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P de1cf31a34b0f21288e7e30434a06baf25ee579929107c22e65c57236577fc4a -R ce627b31c8a7f399b0e12cf71b754a64 +P 33ba13c7c4b6f9c5e64ea30c819718f2caea214afca945c9ed7075864f4aaa40 +R 1be0f0e552da136234a76c43155a60a1 U drh -Z 86353e9fa0a68bc2fae9ca0e76a0a632 +Z 9c40aed2a8cf9df874dfb316aa86c044 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 6590c170a6..4d8f453cfa 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -33ba13c7c4b6f9c5e64ea30c819718f2caea214afca945c9ed7075864f4aaa40 \ No newline at end of file +765290663b28e90a0494997baf023f9610a4ed32f0ff0099bf9fc3d485733fca \ No newline at end of file diff --git a/test/date4.test b/test/date4.test index 5da9906bf2..0d820a0a40 100644 --- a/test/date4.test +++ b/test/date4.test @@ -28,7 +28,7 @@ if {$tcl_platform(os)=="Linux"} { } else { set FMT {%d,%e,%F,%H,%I,%j,%p,%R,%u,%w,%W,%%} } -for {set i 0} {$i<=86400} {incr i} { +for {set i 0} {$i<=24854} {incr i} { set TS [expr {$i*86401}] do_execsql_test date4-$i { SELECT strftime($::FMT,$::TS,'unixepoch'); From 3017a6851ffabfbff536d233d922f2335f46a8af Mon Sep 17 00:00:00 2001 From: larrybr Date: Sun, 29 Oct 2023 00:24:22 +0000 Subject: [PATCH 37/49] Condition default UTF-8 console I/O for Windows builds on OS version 10 or more. This is to accomodate an IsValidCodePage() API which may happily report CP_UTF8 as a valid code page when the stock console cannot, in fact, do UTF-8 I/O. FossilOrigin-Name: 6b9b2a886fd4d239c2e87c3f3809c011f77c0f60e0c279bbe4e1d1b53c609e2d --- manifest | 17 ++++++++++------- manifest.uuid | 2 +- src/shell.c.in | 40 +++++++++++++++++++++++++++++++++++++++- 3 files changed, 50 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index d2d1aeb7ec..1eba221ff9 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Limit\sthe\srange\sof\sinteger\sunix\stimestamps\sin\sdate4.test,\ssince\ssome\ssystems\n(RaspberryPI)\scannot\sdeal\swith\stimestamp\svalues\sthat\sexceed\spow(2,31). -D 2023-10-28T16:19:21.185 +C Condition\sdefault\sUTF-8\sconsole\sI/O\sfor\sWindows\sbuilds\son\sOS\sversion\s10\sor\smore.\sThis\sis\sto\saccomodate\san\sIsValidCodePage()\sAPI\swhich\smay\shappily\sreport\sCP_UTF8\sas\sa\svalid\scode\spage\swhen\sthe\sstock\sconsole\scannot,\sin\sfact,\sdo\sUTF-8\sI/O. +D 2023-10-29T00:24:22.936 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -722,7 +722,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 64c9bc7494f3d220a27498137551762c25458282388ea9ac0a710dd6d5dc1510 -F src/shell.c.in 9b29276cb6447b4c608e77c08b49bd3315cdcb399801e08b2f15723aa5b733e8 +F src/shell.c.in 29b2abb039ddff7b512960a5396cecbaee6ab236537de36f4f972adbfc4467c1 F src/sqlite.h.in ef0e41e83ad1ac0dcc9ec9939bf541a44b1c5de821bee2d6c61754c3252f3276 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac @@ -2139,8 +2139,11 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 33ba13c7c4b6f9c5e64ea30c819718f2caea214afca945c9ed7075864f4aaa40 -R 1be0f0e552da136234a76c43155a60a1 -U drh -Z 9c40aed2a8cf9df874dfb316aa86c044 +P 765290663b28e90a0494997baf023f9610a4ed32f0ff0099bf9fc3d485733fca +R 06beefd7b5a601159ef2b90a69791f5c +T *branch * win-utf8-io-split +T *sym-win-utf8-io-split * +T -sym-trunk * +U larrybr +Z 8b9699cbbd0e4aa806c0f866919f402f # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 4d8f453cfa..d8f3ed59bf 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -765290663b28e90a0494997baf023f9610a4ed32f0ff0099bf9fc3d485733fca \ No newline at end of file +6b9b2a886fd4d239c2e87c3f3809c011f77c0f60e0c279bbe4e1d1b53c609e2d \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index f1362d613d..e61887bc62 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -613,6 +613,40 @@ static struct ConsoleState { # define _O_U16TEXT 0x20000 #endif + +#if !SQLITE_OS_WINRT +static int CheckAtLeastWin10(void){ + typedef LONG (WINAPI *REG_OPEN)(HKEY,LPCSTR,DWORD,REGSAM,PHKEY); + typedef LSTATUS (WINAPI *REG_READ)(HKEY,LPCSTR,LPCSTR,DWORD, + LPDWORD,PVOID,LPDWORD); + typedef LSTATUS (WINAPI *REG_UNLOAD)(HKEY,LPCSTR); + int rv = 0; + HINSTANCE hLib = LoadLibrary(TEXT("Advapi32.dll")); + if( NULL != hLib ){ + REG_OPEN rkOpen = (REG_OPEN)GetProcAddress(hLib, "RegOpenKeyExA"); + REG_READ rkRead = (REG_READ)GetProcAddress(hLib, "RegGetValueA"); + REG_UNLOAD rkFree = (REG_UNLOAD)GetProcAddress(hLib, "RegUnLoadKeyA"); + if( rkOpen != NULL && rkRead != NULL && rkFree != NULL ){ + HKEY hk; + const char *zsk = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"; + if( ERROR_SUCCESS == rkOpen(HKEY_LOCAL_MACHINE, zsk, 0, KEY_READ, &hk) ){ + DWORD kv = 0, kvsize = sizeof(kv); + if( ERROR_SUCCESS == rkRead(hk, 0, "CurrentMajorVersionNumber", + RRF_RT_REG_DWORD, 0, &kv, &kvsize) ){ + rv = (kv >= 10); + } + rkFree(hk, 0); + } + } + FreeLibrary(hLib); + } + return rv; +} +# define IS_WIN10_OR_LATER() CheckAtLeastWin10() +#else /* defined(SQLITE_OS_WINRT) */ +# define IS_WIN10_OR_LATER() 0 +#endif + /* ** Prepare console, (if known to be a WIN32 console), for UTF-8 ** input (from either typing or suitable paste operations) and/or for @@ -12210,6 +12244,11 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ } #endif +#if SHELL_WIN_UTF8_OPT + /* If Windows build and not RT, set*/ + mbcs_opted = (IS_WIN10_OR_LATER())? 0 : 1; +#endif + /* Do an initial pass through the command-line argument to locate ** the name of the database file, the name of the initialization file, ** the size of the alternative malloc heap, options affecting commands @@ -12405,7 +12444,6 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ exit(1); } } - #if SHELL_WIN_UTF8_OPT /* Get indicated Windows console setup done before running invocation commands. */ if( stdin_is_interactive || stdout_is_console ){ From 060c097e0d2f947ad77ce12f6781320aec6088f9 Mon Sep 17 00:00:00 2001 From: larrybr Date: Sun, 29 Oct 2023 16:26:12 +0000 Subject: [PATCH 38/49] Properly close a handle. Use a putatively effective runtime test for UTF-8 console I/O capability. (This makes the version test useful mainly for avoiding a warning that UTF-8 console I/O could not be setup.) FossilOrigin-Name: dc91eb91725f3db65c73725f1fbcf18a711cafb65b4fea3277aa0905a24df353 --- manifest | 15 ++++++--------- manifest.uuid | 2 +- src/shell.c.in | 30 +++++++++++++++++++----------- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/manifest b/manifest index 1eba221ff9..431c97d07b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Condition\sdefault\sUTF-8\sconsole\sI/O\sfor\sWindows\sbuilds\son\sOS\sversion\s10\sor\smore.\sThis\sis\sto\saccomodate\san\sIsValidCodePage()\sAPI\swhich\smay\shappily\sreport\sCP_UTF8\sas\sa\svalid\scode\spage\swhen\sthe\sstock\sconsole\scannot,\sin\sfact,\sdo\sUTF-8\sI/O. -D 2023-10-29T00:24:22.936 +C Properly\sclose\sa\shandle.\sUse\sa\sputatively\seffective\sruntime\stest\sfor\sUTF-8\sconsole\sI/O\scapability.\s(This\smakes\sthe\sversion\stest\suseful\smainly\sfor\savoiding\sa\swarning\sthat\sUTF-8\sconsole\sI/O\scould\snot\sbe\ssetup.) +D 2023-10-29T16:26:12.664 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -722,7 +722,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 64c9bc7494f3d220a27498137551762c25458282388ea9ac0a710dd6d5dc1510 -F src/shell.c.in 29b2abb039ddff7b512960a5396cecbaee6ab236537de36f4f972adbfc4467c1 +F src/shell.c.in 6c7a4481b776a2d568816344597d0481359b4a20f465ce1c3033004fa9fa4a72 F src/sqlite.h.in ef0e41e83ad1ac0dcc9ec9939bf541a44b1c5de821bee2d6c61754c3252f3276 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac @@ -2139,11 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 765290663b28e90a0494997baf023f9610a4ed32f0ff0099bf9fc3d485733fca -R 06beefd7b5a601159ef2b90a69791f5c -T *branch * win-utf8-io-split -T *sym-win-utf8-io-split * -T -sym-trunk * +P 6b9b2a886fd4d239c2e87c3f3809c011f77c0f60e0c279bbe4e1d1b53c609e2d +R bab24205be6731c553860e9beeba6fcf U larrybr -Z 8b9699cbbd0e4aa806c0f866919f402f +Z a3328aae66d1d54e0b613e1b32590aa3 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index d8f3ed59bf..dd7ecada55 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6b9b2a886fd4d239c2e87c3f3809c011f77c0f60e0c279bbe4e1d1b53c609e2d \ No newline at end of file +dc91eb91725f3db65c73725f1fbcf18a711cafb65b4fea3277aa0905a24df353 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index e61887bc62..7041b7d693 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -619,13 +619,13 @@ static int CheckAtLeastWin10(void){ typedef LONG (WINAPI *REG_OPEN)(HKEY,LPCSTR,DWORD,REGSAM,PHKEY); typedef LSTATUS (WINAPI *REG_READ)(HKEY,LPCSTR,LPCSTR,DWORD, LPDWORD,PVOID,LPDWORD); - typedef LSTATUS (WINAPI *REG_UNLOAD)(HKEY,LPCSTR); + typedef LSTATUS (WINAPI *REG_CLOSE)(HKEY); int rv = 0; HINSTANCE hLib = LoadLibrary(TEXT("Advapi32.dll")); if( NULL != hLib ){ REG_OPEN rkOpen = (REG_OPEN)GetProcAddress(hLib, "RegOpenKeyExA"); REG_READ rkRead = (REG_READ)GetProcAddress(hLib, "RegGetValueA"); - REG_UNLOAD rkFree = (REG_UNLOAD)GetProcAddress(hLib, "RegUnLoadKeyA"); + REG_CLOSE rkFree = (REG_CLOSE)GetProcAddress(hLib, "RegCloseKey"); if( rkOpen != NULL && rkRead != NULL && rkFree != NULL ){ HKEY hk; const char *zsk = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"; @@ -635,7 +635,7 @@ static int CheckAtLeastWin10(void){ RRF_RT_REG_DWORD, 0, &kv, &kvsize) ){ rv = (kv >= 10); } - rkFree(hk, 0); + rkFree(hk); } } FreeLibrary(hLib); @@ -659,6 +659,7 @@ static void console_prepare_utf8(void){ HANDLE hCC = INVALID_HANDLE_VALUE; DWORD consoleMode = 0; u8 conI = 0, conO = 0; + struct ConsoleState csWork = { 0, 0, 0, 0, INVALID_HANDLE_VALUE, 0 }; console_utf8_in = console_utf8_out = 0; if( isatty(0) && GetFileType(hCI)==FILE_TYPE_CHAR ) conI = 1; @@ -667,24 +668,28 @@ static void console_prepare_utf8(void){ if( conI ) hCC = hCI; else hCC = hCO; if( !IsValidCodePage(CP_UTF8) || !GetConsoleMode( hCC, &consoleMode) ){ + bail: fprintf(stderr, "Cannot use UTF-8 code page.\n"); return; } - conState.hConsole = hCC; - conState.consoleMode = consoleMode; - conState.inCodePage = GetConsoleCP(); - conState.outCodePage = GetConsoleOutputCP(); + csWork.hConsole = hCC; + csWork.consoleMode = consoleMode; + csWork.inCodePage = GetConsoleCP(); + csWork.outCodePage = GetConsoleOutputCP(); if( conI ){ + if( !SetConsoleCP(CP_UTF8) ) goto bail; console_utf8_in = 1; - SetConsoleCP(CP_UTF8); consoleMode |= ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT; SetConsoleMode(conState.hConsole, consoleMode); - conState.infsMode = _setmode(_fileno(stdin), _O_U16TEXT); + csWork.infsMode = _setmode(_fileno(stdin), _O_U16TEXT); } if( conO ){ + /* Here, it is assumed that if conI is true, this call will + ** also succeed, so there is no need to undo above setup. */ + if( !SetConsoleOutputCP(CP_UTF8) ) goto bail; console_utf8_out = 1; - SetConsoleOutputCP(CP_UTF8); } + conState = csWork; } /* @@ -12245,7 +12250,10 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ #endif #if SHELL_WIN_UTF8_OPT - /* If Windows build and not RT, set*/ + /* If Windows build and not RT, set default MBCS/UTF-8 translation + ** for console according to detected Windows version. This default + ** may be overridden by the -utf8 or -no-utf8 invocation options. + */ mbcs_opted = (IS_WIN10_OR_LATER())? 0 : 1; #endif From 84eab13df95c3dcaaf3a2fd789d0002efc9989e3 Mon Sep 17 00:00:00 2001 From: larrybr Date: Sun, 29 Oct 2023 19:55:22 +0000 Subject: [PATCH 39/49] Simplify code slightly. Improve comments on added code and its use. FossilOrigin-Name: 046c84296627382ee416f64b02b77a937b368e30b32e6b800de5a854810766f6 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/shell.c.in | 51 +++++++++++++++++++++++++++++++++++++------------- 3 files changed, 45 insertions(+), 20 deletions(-) diff --git a/manifest b/manifest index 431c97d07b..3dddd587af 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Properly\sclose\sa\shandle.\sUse\sa\sputatively\seffective\sruntime\stest\sfor\sUTF-8\sconsole\sI/O\scapability.\s(This\smakes\sthe\sversion\stest\suseful\smainly\sfor\savoiding\sa\swarning\sthat\sUTF-8\sconsole\sI/O\scould\snot\sbe\ssetup.) -D 2023-10-29T16:26:12.664 +C Simplify\scode\sslightly.\sImprove\scomments\son\sadded\scode\sand\sits\suse. +D 2023-10-29T19:55:22.809 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -722,7 +722,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 64c9bc7494f3d220a27498137551762c25458282388ea9ac0a710dd6d5dc1510 -F src/shell.c.in 6c7a4481b776a2d568816344597d0481359b4a20f465ce1c3033004fa9fa4a72 +F src/shell.c.in 9e234ec61ce462b63ce37b29d875d0a716878f049ad50f13f55b859d01c919ad F src/sqlite.h.in ef0e41e83ad1ac0dcc9ec9939bf541a44b1c5de821bee2d6c61754c3252f3276 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 6b9b2a886fd4d239c2e87c3f3809c011f77c0f60e0c279bbe4e1d1b53c609e2d -R bab24205be6731c553860e9beeba6fcf +P dc91eb91725f3db65c73725f1fbcf18a711cafb65b4fea3277aa0905a24df353 +R 21d5e98541aed894e5aa957e7e737a78 U larrybr -Z a3328aae66d1d54e0b613e1b32590aa3 +Z 84338a34602261108f59c503d896ebcf # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index dd7ecada55..219a9cc027 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -dc91eb91725f3db65c73725f1fbcf18a711cafb65b4fea3277aa0905a24df353 \ No newline at end of file +046c84296627382ee416f64b02b77a937b368e30b32e6b800de5a854810766f6 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index 7041b7d693..3d9b46db0b 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -615,7 +615,24 @@ static struct ConsoleState { #if !SQLITE_OS_WINRT -static int CheckAtLeastWin10(void){ +/* +** Check Windows major version against given value, returning +** 1 if the OS major version is no less than the argument. +** This check uses very late binding to the registry access +** API so that it can operate gracefully on OS versions that +** do not have that API. The Windows NT registry, for versions +** through Windows 11 (at least, as of October 2023), keeps +** the actual major version number at registry key/value +** HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentMajorVersionNumber +** where it can be read more reliably than allowed by various +** version info APIs which "process" the result in a manner +** incompatible with the purpose of the CLI's version check. +** +** If the registry API is unavailable, or the location of +** the above registry value changes, or the OS major version +** is less than the argument, this function returns 0. +*/ +static int CheckAtLeastWinX(DWORD major_version){ typedef LONG (WINAPI *REG_OPEN)(HKEY,LPCSTR,DWORD,REGSAM,PHKEY); typedef LSTATUS (WINAPI *REG_READ)(HKEY,LPCSTR,LPCSTR,DWORD, LPDWORD,PVOID,LPDWORD); @@ -633,7 +650,7 @@ static int CheckAtLeastWin10(void){ DWORD kv = 0, kvsize = sizeof(kv); if( ERROR_SUCCESS == rkRead(hk, 0, "CurrentMajorVersionNumber", RRF_RT_REG_DWORD, 0, &kv, &kvsize) ){ - rv = (kv >= 10); + rv = (kv >= major_version); } rkFree(hk); } @@ -642,16 +659,22 @@ static int CheckAtLeastWin10(void){ } return rv; } -# define IS_WIN10_OR_LATER() CheckAtLeastWin10() +# define IS_WIN10_OR_LATER() CheckAtLeastWinX(10) #else /* defined(SQLITE_OS_WINRT) */ # define IS_WIN10_OR_LATER() 0 #endif /* -** Prepare console, (if known to be a WIN32 console), for UTF-8 -** input (from either typing or suitable paste operations) and/or for -** UTF-8 rendering. This may "fail" with a message to stderr, where +** Prepare console, (if known to be a WIN32 console), for UTF-8 input +** (from either typing or suitable paste operations) and/or for UTF-8 +** output rendering. This may "fail" with a message to stderr, where ** the preparation is not done and common "code page" issues occur. +** +** The console state upon entry is preserved, in conState, so that +** console_restore() can later restore the same console state. +** +** The globals console_utf8_in and console_utf8_out are set, for +** later use in selecting UTF-8 or MBCS console I/O translations. */ static void console_prepare_utf8(void){ HANDLE hCI = GetStdHandle(STD_INPUT_HANDLE); @@ -678,17 +701,17 @@ static void console_prepare_utf8(void){ csWork.outCodePage = GetConsoleOutputCP(); if( conI ){ if( !SetConsoleCP(CP_UTF8) ) goto bail; - console_utf8_in = 1; consoleMode |= ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT; SetConsoleMode(conState.hConsole, consoleMode); csWork.infsMode = _setmode(_fileno(stdin), _O_U16TEXT); } if( conO ){ - /* Here, it is assumed that if conI is true, this call will - ** also succeed, so there is no need to undo above setup. */ + /* Here, it is assumed that if conI is true, this call will also + ** succeed, so there is no need to undo above setup upon failure. */ if( !SetConsoleOutputCP(CP_UTF8) ) goto bail; - console_utf8_out = 1; } + console_utf8_in = conI; + console_utf8_out = conO; conState = csWork; } @@ -12250,9 +12273,11 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ #endif #if SHELL_WIN_UTF8_OPT - /* If Windows build and not RT, set default MBCS/UTF-8 translation - ** for console according to detected Windows version. This default - ** may be overridden by the -utf8 or -no-utf8 invocation options. + /* If Windows build and not RT, set default MBCS/UTF-8 translation for + ** console according to detected Windows version. This default may be + ** overridden by a -no-utf8 or (undocumented) -utf8 invocation option. + ** If a runtime check for UTF-8 console I/O capability is devised, + ** that should be preferred over this version check. */ mbcs_opted = (IS_WIN10_OR_LATER())? 0 : 1; #endif From d2147bd32b0bb2e6cc4dc0306a834d7355932ba1 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 30 Oct 2023 12:09:48 +0000 Subject: [PATCH 40/49] With SQLITE_ENABLE_BLOCK_ATOMIC_WRITE enabled, if a transaction is committing and there is a new freelist page at the end of the database file which would cause the database file size to grow, ensure that page is written and the file size grows before the block-atomic-write commits. Fix for the problem identified by [forum:/forumpost/3bd8d497b2|forum post 3bd8d497b2] FossilOrigin-Name: c9fdd6805df04f05ef347e5a43506fd37a729c5924abb6e1103e871c4ac2d6dc --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/pager.c | 7 +++++++ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index b00c6fb942..482e9ce639 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C For\sWindows\sCLI,\sinstitute\sa\sversion\scheck\sto\sdetermine\sdefault\sMBCS\sor\sUTF-8\stranslation\son\sconsole\sI/O.\s(Default\sto\sUTF-8\swhere\sknown\spossible.) -D 2023-10-29T20:05:18.263 +C With\sSQLITE_ENABLE_BLOCK_ATOMIC_WRITE\senabled,\sif\sa\stransaction\sis\scommitting\nand\sthere\sis\sa\snew\sfreelist\spage\sat\sthe\send\sof\sthe\sdatabase\sfile\swhich\swould\ncause\sthe\sdatabase\sfile\ssize\sto\sgrow,\sensure\sthat\spage\sis\swritten\sand\sthe\nfile\ssize\sgrows\sbefore\sthe\sblock-atomic-write\scommits.\s\sFix\sfor\sthe\nproblem\sidentified\sby\s[forum:/forumpost/3bd8d497b2|forum\spost\s3bd8d497b2] +D 2023-10-30T12:09:48.933 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -708,7 +708,7 @@ F src/os_setup.h 6011ad7af5db4e05155f385eb3a9b4470688de6f65d6166b8956e58a3d87210 F src/os_unix.c cb116fde9e3ca3c1bbfdf89d6928f776a2a34da168e2667426523a4db353b271 F src/os_win.c 4a50a154aeebc66a1f8fb79c1ff6dd5fe3d005556533361e0d460d41cb6a45a8 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a -F src/pager.c 2188897e1102a776dcb1bbe8b2eb70ac7de8863c9cb95ef09d35e9bad406cf45 +F src/pager.c 9c9343d9ff407fb9e01f8c22e9babbe42807ab53aa1c7d747da77bb2b2f74629 F src/pager.h f4d33fec8052603758792045493423b8871a996da2d0973927b7d36cd6070473 F src/parse.y 020d80386eb216ec9520549106353c517d2bbc89be28752ffdca649a9eaf56ec F src/pcache.c 040b165f30622a21b7a9a77c6f2e4877a32fb7f22d4c7f0d2a6fa6833a156a75 @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 765290663b28e90a0494997baf023f9610a4ed32f0ff0099bf9fc3d485733fca 046c84296627382ee416f64b02b77a937b368e30b32e6b800de5a854810766f6 -R 21d5e98541aed894e5aa957e7e737a78 -U larrybr -Z 388b78b418fa51ea2b695e5b2ab587f8 +P ddc6ead6453e0f98943bd07aedd90d47bc2e9e9e27b008d493491168bea2b3f1 +R d568eda5a52aecc6980b1f18605b773c +U drh +Z 6faa5f859e86aecdc04ddabbaa63c135 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index cec26a520d..127b422d23 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ddc6ead6453e0f98943bd07aedd90d47bc2e9e9e27b008d493491168bea2b3f1 \ No newline at end of file +c9fdd6805df04f05ef347e5a43506fd37a729c5924abb6e1103e871c4ac2d6dc \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index 5c2d556b3e..826e90f137 100644 --- a/src/pager.c +++ b/src/pager.c @@ -6588,6 +6588,13 @@ int sqlite3PagerCommitPhaseOne( rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_BEGIN_ATOMIC_WRITE, 0); if( rc==SQLITE_OK ){ rc = pager_write_pagelist(pPager, pList); + if( rc==SQLITE_OK && pPager->dbSize>pPager->dbFileSize ){ + char *pTmp = pPager->pTmpSpace; + int szPage = (int)pPager->pageSize; + memset(pTmp, 0, szPage); + rc = sqlite3OsWrite(pPager->fd, pTmp, szPage, + (pPager->dbSize*pPager->pageSize)-szPage); + } if( rc==SQLITE_OK ){ rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, 0); } From 8a95e92af95e9ab247ba72d2b22ac2515b317ef6 Mon Sep 17 00:00:00 2001 From: larrybr Date: Mon, 30 Oct 2023 13:56:50 +0000 Subject: [PATCH 41/49] Predicate Windows CLI UTF-8 console I/O on a runtime capability check rather than an OS version check. FossilOrigin-Name: f89d062f8890fffc957a354e966784031d561d0f8f5c174c1ccdcf77e66c32bd --- manifest | 12 +-- manifest.uuid | 2 +- src/shell.c.in | 193 +++++++++++++++++++++++-------------------------- 3 files changed, 98 insertions(+), 109 deletions(-) diff --git a/manifest b/manifest index 3dddd587af..280b948327 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Simplify\scode\sslightly.\sImprove\scomments\son\sadded\scode\sand\sits\suse. -D 2023-10-29T19:55:22.809 +C Predicate\sWindows\sCLI\sUTF-8\sconsole\sI/O\son\sa\sruntime\scapability\scheck\srather\sthan\san\sOS\sversion\scheck. +D 2023-10-30T13:56:50.918 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -722,7 +722,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 64c9bc7494f3d220a27498137551762c25458282388ea9ac0a710dd6d5dc1510 -F src/shell.c.in 9e234ec61ce462b63ce37b29d875d0a716878f049ad50f13f55b859d01c919ad +F src/shell.c.in 3826827be22545318865b0c387a8b9208b0a0f5d849d68440a63488ea9c275c8 F src/sqlite.h.in ef0e41e83ad1ac0dcc9ec9939bf541a44b1c5de821bee2d6c61754c3252f3276 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P dc91eb91725f3db65c73725f1fbcf18a711cafb65b4fea3277aa0905a24df353 -R 21d5e98541aed894e5aa957e7e737a78 +P 046c84296627382ee416f64b02b77a937b368e30b32e6b800de5a854810766f6 +R 3cdce76f5cb17ac317716fdc83d39d50 U larrybr -Z 84338a34602261108f59c503d896ebcf +Z 39db1e0ea2a35c1c7711150de7a00b37 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 219a9cc027..194f81ce32 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -046c84296627382ee416f64b02b77a937b368e30b32e6b800de5a854810766f6 \ No newline at end of file +f89d062f8890fffc957a354e966784031d561d0f8f5c174c1ccdcf77e66c32bd \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index 3d9b46db0b..cf8e4f0611 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -450,16 +450,18 @@ static int bail_on_error = 0; static int stdin_is_interactive = 1; /* -** If build is for Windows, without 3rd-party line editing, Console -** input and output may be done in a UTF-8 compatible way. This is -** determined by invocation option and OS installed capability. +** If build is for non-RT Windows, without 3rd-party line editing, +** console input and output may be done in a UTF-8 compatible way, +** if the OS is capable of it and the --no-utf8 option is not seen. */ #if (defined(_WIN32) || defined(WIN32)) && SHELL_USE_LOCAL_GETLINE \ - && !defined(SHELL_OMIT_WIN_UTF8) + && !defined(SHELL_OMIT_WIN_UTF8) && !SQLITE_OS_WINRT # define SHELL_WIN_UTF8_OPT 1 +/* Record whether to do UTF-8 console I/O translation per stream. */ static int console_utf8_in = 0; static int console_utf8_out = 0; - static int mbcs_opted = 0; +/* Record whether can do UTF-8 or --no-utf8 seen in invocation. */ + static int mbcs_opted = 1; /* Assume cannot do until shown otherwise. */ #else # define console_utf8_in 0 # define console_utf8_out 0 @@ -599,7 +601,7 @@ static char *dynamicContinuePrompt(void){ #endif /* !defined(SQLITE_OMIT_DYNAPROMPT) */ #if SHELL_WIN_UTF8_OPT -/* Following struct is used for UTF-8 operation. */ +/* Following struct is used for UTF-8 console I/O. */ static struct ConsoleState { int stdinEof; /* EOF has been seen on console input */ int infsMode; /* Input file stream mode upon shell start */ @@ -613,106 +615,102 @@ static struct ConsoleState { # define _O_U16TEXT 0x20000 #endif - -#if !SQLITE_OS_WINRT /* -** Check Windows major version against given value, returning -** 1 if the OS major version is no less than the argument. -** This check uses very late binding to the registry access -** API so that it can operate gracefully on OS versions that -** do not have that API. The Windows NT registry, for versions -** through Windows 11 (at least, as of October 2023), keeps -** the actual major version number at registry key/value -** HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentMajorVersionNumber -** where it can be read more reliably than allowed by various -** version info APIs which "process" the result in a manner -** incompatible with the purpose of the CLI's version check. -** -** If the registry API is unavailable, or the location of -** the above registry value changes, or the OS major version -** is less than the argument, this function returns 0. +** If given stream number is a console, return 1 and get some attributes, +** else return 0 and set the output attributes to invalid values. */ -static int CheckAtLeastWinX(DWORD major_version){ - typedef LONG (WINAPI *REG_OPEN)(HKEY,LPCSTR,DWORD,REGSAM,PHKEY); - typedef LSTATUS (WINAPI *REG_READ)(HKEY,LPCSTR,LPCSTR,DWORD, - LPDWORD,PVOID,LPDWORD); - typedef LSTATUS (WINAPI *REG_CLOSE)(HKEY); - int rv = 0; - HINSTANCE hLib = LoadLibrary(TEXT("Advapi32.dll")); - if( NULL != hLib ){ - REG_OPEN rkOpen = (REG_OPEN)GetProcAddress(hLib, "RegOpenKeyExA"); - REG_READ rkRead = (REG_READ)GetProcAddress(hLib, "RegGetValueA"); - REG_CLOSE rkFree = (REG_CLOSE)GetProcAddress(hLib, "RegCloseKey"); - if( rkOpen != NULL && rkRead != NULL && rkFree != NULL ){ - HKEY hk; - const char *zsk = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"; - if( ERROR_SUCCESS == rkOpen(HKEY_LOCAL_MACHINE, zsk, 0, KEY_READ, &hk) ){ - DWORD kv = 0, kvsize = sizeof(kv); - if( ERROR_SUCCESS == rkRead(hk, 0, "CurrentMajorVersionNumber", - RRF_RT_REG_DWORD, 0, &kv, &kvsize) ){ - rv = (kv >= major_version); - } - rkFree(hk); - } - } - FreeLibrary(hLib); +static short console_attrs(unsigned stnum, HANDLE *pH, DWORD *pConsMode){ + static int stid[3] = { STD_INPUT_HANDLE,STD_OUTPUT_HANDLE,STD_ERROR_HANDLE }; + HANDLE h; + *pH = INVALID_HANDLE_VALUE; + *pConsMode = 0; + if( stnum > 2 ) return 0; + h = GetStdHandle(stid[stnum]); + if( h!=*pH && GetFileType(h)==FILE_TYPE_CHAR && GetConsoleMode(h,pConsMode) ){ + *pH = h; + return 1; } - return rv; + return 0; } -# define IS_WIN10_OR_LATER() CheckAtLeastWinX(10) -#else /* defined(SQLITE_OS_WINRT) */ -# define IS_WIN10_OR_LATER() 0 -#endif /* -** Prepare console, (if known to be a WIN32 console), for UTF-8 input -** (from either typing or suitable paste operations) and/or for UTF-8 -** output rendering. This may "fail" with a message to stderr, where -** the preparation is not done and common "code page" issues occur. +** Perform a runtime test of Windows console to determine if it can +** do char-stream I/O correctly when the code page is set to CP_UTF8. +** Returns are: 1 => yes it can, 0 => no it cannot +** +** The console's output code page is momentarily set, then restored. +** So this should only be run when the process is given use of the +** console for either input or output. +*/ +static short ConsoleDoesUTF8(void){ + UINT ocp = GetConsoleOutputCP(); + CONSOLE_SCREEN_BUFFER_INFO csbInfo = {0}; + /* Create an inactive screen buffer with which to do the experiment. */ + HANDLE hCSB = CreateConsoleScreenBuffer(GENERIC_READ|GENERIC_WRITE, 0, 0, + CONSOLE_TEXTMODE_BUFFER, NULL); + if( hCSB!=INVALID_HANDLE_VALUE ){ + const char TrialUtf8[] = { '\xC8', '\xAB' }; /* "ȫ" or 2 MBCS characters */ + COORD cpos = {0,0}; + SetConsoleCursorPosition(hCSB, cpos); + SetConsoleOutputCP(CP_UTF8); + /* Write 2 chars which are a single character in UTF-8 but more in MBCS. */ + WriteConsoleA(hCSB, TrialUtf8, sizeof(TrialUtf8), NULL, NULL); + GetConsoleScreenBufferInfo(hCSB, &csbInfo); + SetConsoleOutputCP(ocp); + CloseHandle(hCSB); + } + /* Return 1 if cursor advanced by 1 position, else 0. */ + return (short)(csbInfo.dwCursorPosition.X == 1); +} + +static short in_console = 0; +static short out_console = 0; + +/* +** Determine whether either normal I/O stream is the console, +** and whether it can do UTF-8 translation, setting globals +** in_console, out_console and mbcs_opted accordingly. +*/ +static void probe_console(void){ + HANDLE h; + DWORD cMode; + in_console = console_attrs(0, &h, &cMode); + out_console = console_attrs(1, &h, &cMode); + if( in_console || out_console ) mbcs_opted = !ConsoleDoesUTF8(); +} + +/* +** If console is used for normal I/O, absent a --no-utf8 option, +** prepare console for UTF-8 input (from either typing or suitable +** paste operations) and/or for UTF-8 output rendering. ** ** The console state upon entry is preserved, in conState, so that ** console_restore() can later restore the same console state. ** ** The globals console_utf8_in and console_utf8_out are set, for ** later use in selecting UTF-8 or MBCS console I/O translations. +** This routine depends upon globals set by probe_console(). */ static void console_prepare_utf8(void){ - HANDLE hCI = GetStdHandle(STD_INPUT_HANDLE); - HANDLE hCO = GetStdHandle(STD_OUTPUT_HANDLE); - HANDLE hCC = INVALID_HANDLE_VALUE; - DWORD consoleMode = 0; - u8 conI = 0, conO = 0; struct ConsoleState csWork = { 0, 0, 0, 0, INVALID_HANDLE_VALUE, 0 }; console_utf8_in = console_utf8_out = 0; - if( isatty(0) && GetFileType(hCI)==FILE_TYPE_CHAR ) conI = 1; - if( isatty(1) && GetFileType(hCO)==FILE_TYPE_CHAR ) conO = 1; - if( (!conI && !conO) || mbcs_opted ) return; - if( conI ) hCC = hCI; - else hCC = hCO; - if( !IsValidCodePage(CP_UTF8) || !GetConsoleMode( hCC, &consoleMode) ){ - bail: - fprintf(stderr, "Cannot use UTF-8 code page.\n"); - return; + if( (!in_console && !out_console) || mbcs_opted ) return; + console_attrs((in_console)? 0 : 1, &conState.hConsole, &conState.consoleMode); + conState.inCodePage = GetConsoleCP(); + conState.outCodePage = GetConsoleOutputCP(); + if( in_console ){ + SetConsoleCP(CP_UTF8); + DWORD newConsoleMode = conState.consoleMode + | ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT; + SetConsoleMode(conState.hConsole, newConsoleMode); + conState.infsMode = _setmode(_fileno(stdin), _O_U16TEXT); + console_utf8_in = 1; } - csWork.hConsole = hCC; - csWork.consoleMode = consoleMode; - csWork.inCodePage = GetConsoleCP(); - csWork.outCodePage = GetConsoleOutputCP(); - if( conI ){ - if( !SetConsoleCP(CP_UTF8) ) goto bail; - consoleMode |= ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT; - SetConsoleMode(conState.hConsole, consoleMode); - csWork.infsMode = _setmode(_fileno(stdin), _O_U16TEXT); + if( out_console ){ + SetConsoleOutputCP(CP_UTF8); + console_utf8_out = 1; } - if( conO ){ - /* Here, it is assumed that if conI is true, this call will also - ** succeed, so there is no need to undo above setup upon failure. */ - if( !SetConsoleOutputCP(CP_UTF8) ) goto bail; - } - console_utf8_in = conI; - console_utf8_out = conO; - conState = csWork; } /* @@ -12187,7 +12185,8 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ stdout_is_console = isatty(1); #endif #if SHELL_WIN_UTF8_OPT - atexit(console_restore); /* Needs revision for CLI as library call */ + probe_console(); /* Check for console I/O and UTF-8 capability. */ + if( !mbcs_opted ) atexit(console_restore); #endif atexit(sayAbnormalExit); #ifdef SQLITE_DEBUG @@ -12272,16 +12271,6 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ } #endif -#if SHELL_WIN_UTF8_OPT - /* If Windows build and not RT, set default MBCS/UTF-8 translation for - ** console according to detected Windows version. This default may be - ** overridden by a -no-utf8 or (undocumented) -utf8 invocation option. - ** If a runtime check for UTF-8 console I/O capability is devised, - ** that should be preferred over this version check. - */ - mbcs_opted = (IS_WIN10_OR_LATER())? 0 : 1; -#endif - /* Do an initial pass through the command-line argument to locate ** the name of the database file, the name of the initialization file, ** the size of the alternative malloc heap, options affecting commands @@ -12332,8 +12321,8 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ stdin_is_interactive = 0; }else if( cli_strcmp(z,"-utf8")==0 ){ #if SHELL_WIN_UTF8_OPT - /* Option accepted, but just specifies default UTF-8 console I/O. */ - mbcs_opted = 0; + /* Option accepted, but is ignored except for this diagnostic. */ + if( mbcs_opted ) fprintf(stderr, "Cannot do UTF-8 at this console.\n"); #endif /* SHELL_WIN_UTF8_OPT */ }else if( cli_strcmp(z,"-no-utf8")==0 ){ #if SHELL_WIN_UTF8_OPT @@ -12479,10 +12468,10 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ } #if SHELL_WIN_UTF8_OPT /* Get indicated Windows console setup done before running invocation commands. */ - if( stdin_is_interactive || stdout_is_console ){ + if( in_console || out_console ){ console_prepare_utf8(); } - if( !stdin_is_interactive ){ + if( !in_console ){ setBinaryMode(stdin, 0); } #endif From 23e8f976ddde5e9bcda20d8934eb8984b9c5d1f0 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 30 Oct 2023 17:13:12 +0000 Subject: [PATCH 42/49] Add FTS5 to default Makefile.msc builds. And UNKNOWN_SQL_FUNCTION and STMT_SCANSTATUS to default Makefile.msc shell builds. FossilOrigin-Name: bf99ebba23b6a72a0c02c5542574f409828343e89501cbe2112596ced063c6ab --- Makefile.msc | 3 +++ manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/Makefile.msc b/Makefile.msc index 4adbbee2a5..16635f0196 100644 --- a/Makefile.msc +++ b/Makefile.msc @@ -374,6 +374,7 @@ SQLITE_TCL_DEP = !IFNDEF OPT_FEATURE_FLAGS !IF $(MINIMAL_AMALGAMATION)==0 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_FTS3=1 +OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_FTS5=1 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_RTREE=1 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_GEOPOLY=1 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_STMTVTAB=1 @@ -1689,6 +1690,8 @@ SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_DQS=0 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_FTS4=1 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_EXPLAIN_COMMENTS=1 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_OFFSET_SQL_FUNC=1 +SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION=1 +SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_STMT_SCANSTATUS=1 !ENDIF # <> diff --git a/manifest b/manifest index 74e0b30b35..45e738cf92 100644 --- a/manifest +++ b/manifest @@ -1,11 +1,11 @@ -C Predicate\sWindows\sCLI\sUTF-8\sconsole\sI/O\son\sa\sruntime\scapability\scheck\srather\sthan\san\sOS\sversion\scheck. -D 2023-10-30T16:38:05.798 +C Add\sFTS5\sto\sdefault\sMakefile.msc\sbuilds.\sAnd\sUNKNOWN_SQL_FUNCTION\sand\sSTMT_SCANSTATUS\sto\sdefault\sMakefile.msc\sshell\sbuilds. +D 2023-10-30T17:13:12.161 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 F Makefile.in 8b59912fc1538f96a08555605c5886cdcc733696ae7f22e374b2a4752196ca20 F Makefile.linux-gcc f3842a0b1efbfbb74ac0ef60e56b301836d05b4d867d014f714fa750048f1ab6 -F Makefile.msc c1aa09e0212d8609df041d13da6ca63198d1c1e29846f33104beecf19917102b +F Makefile.msc 23bd95afb445537aba610eaec45cd3848bdeb591d4350c21831f1a714754f339 F README.md 963d30019abf0cc06b263cd2824bce022893f3f93a531758f6f04ff2194a16a8 F VERSION 4c09b629c03b8ae32317cb336a32f3aa3252841d6dcd51184cecc4278d08f21e F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P c9fdd6805df04f05ef347e5a43506fd37a729c5924abb6e1103e871c4ac2d6dc f89d062f8890fffc957a354e966784031d561d0f8f5c174c1ccdcf77e66c32bd -R 43d0ce4e57a74fef184c4e525ab03183 -U larrybr -Z 1a3e09d8f095a721c300f93b0f338e98 +P 0058ea6a69103c1442bf5090553ce9bf77e06011a4960df754eb96144ced497d +R 841dad75dbd2b5725c477d5302bf71ff +U dan +Z bcdddb47387f655ace8d6b5a5dfbcdc4 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index d0f08ad018..f13c72172c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0058ea6a69103c1442bf5090553ce9bf77e06011a4960df754eb96144ced497d \ No newline at end of file +bf99ebba23b6a72a0c02c5542574f409828343e89501cbe2112596ced063c6ab \ No newline at end of file From 30c9aca83eb25acf69faa5f1ba0eb92d116efed1 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 30 Oct 2023 17:56:27 +0000 Subject: [PATCH 43/49] Fix typo in a comment. No code changes. FossilOrigin-Name: 424ef9550abaab32f745dc955e8996d51836eaed737e24c4b4db811aa118ce5d --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/select.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 74e0b30b35..635c711fca 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Predicate\sWindows\sCLI\sUTF-8\sconsole\sI/O\son\sa\sruntime\scapability\scheck\srather\sthan\san\sOS\sversion\scheck. -D 2023-10-30T16:38:05.798 +C Fix\stypo\sin\sa\scomment.\s\sNo\scode\schanges. +D 2023-10-30T17:56:27.807 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -721,7 +721,7 @@ F src/printf.c 9da63b9ae1c14789bcae12840f5d800fd9302500cd2d62733fac77f0041b4750 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 -F src/select.c 64c9bc7494f3d220a27498137551762c25458282388ea9ac0a710dd6d5dc1510 +F src/select.c 7753615c837fa6828a12035e9806cb89c63cef7d23f6ed20259b0569fb9a9787 F src/shell.c.in 3826827be22545318865b0c387a8b9208b0a0f5d849d68440a63488ea9c275c8 F src/sqlite.h.in ef0e41e83ad1ac0dcc9ec9939bf541a44b1c5de821bee2d6c61754c3252f3276 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P c9fdd6805df04f05ef347e5a43506fd37a729c5924abb6e1103e871c4ac2d6dc f89d062f8890fffc957a354e966784031d561d0f8f5c174c1ccdcf77e66c32bd -R 43d0ce4e57a74fef184c4e525ab03183 -U larrybr -Z 1a3e09d8f095a721c300f93b0f338e98 +P 0058ea6a69103c1442bf5090553ce9bf77e06011a4960df754eb96144ced497d +R f33ecf41a934a4fccd6ae4bb30c5c099 +U drh +Z aa23cad2bd7d24584bbb58137cf46214 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index d0f08ad018..5a1c5bf9da 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0058ea6a69103c1442bf5090553ce9bf77e06011a4960df754eb96144ced497d \ No newline at end of file +424ef9550abaab32f745dc955e8996d51836eaed737e24c4b4db811aa118ce5d \ No newline at end of file diff --git a/src/select.c b/src/select.c index 0dac37b10c..d7106f6eec 100644 --- a/src/select.c +++ b/src/select.c @@ -6743,7 +6743,7 @@ static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){ ** registers if register regAcc contains 0. The caller will take care ** of setting and clearing regAcc. ** -** For an ORDER BY aggregate, the actually accumulator memory cell update +** For an ORDER BY aggregate, the actual accumulator memory cell update ** is deferred until after all input rows have been received, so that they ** can be run in the requested order. In that case, instead of invoking ** OP_AggStep to update accumulator, just add the arguments that would From a238c57eb83e6337fe36bfc51b5bd98b0b8e9779 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 30 Oct 2023 18:07:18 +0000 Subject: [PATCH 44/49] Fix problems with previous commit on Makefile.msc. Also some win32-specific test failures in fts5misc.test. FossilOrigin-Name: 527f2237a6fb5e2ac97afddd7c65c0afa971efc616cb3b738e7245ee0b8d9570 --- Makefile.msc | 3 +-- ext/fts5/test/fts5misc.test | 6 +++++- manifest | 14 +++++++------- manifest.uuid | 2 +- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/Makefile.msc b/Makefile.msc index 16635f0196..cb83f9c4b7 100644 --- a/Makefile.msc +++ b/Makefile.msc @@ -1594,8 +1594,7 @@ TESTEXT = \ $(TOP)\ext\rtree\test_rtreedoc.c \ $(TOP)\ext\recover\sqlite3recover.c \ $(TOP)\ext\recover\test_recover.c \ - $(TOP)\ext\recover\dbdata.c \ - fts5.c + $(TOP)\ext\recover\dbdata.c # If use of zlib is enabled, add the "zipfile.c" source file. # diff --git a/ext/fts5/test/fts5misc.test b/ext/fts5/test/fts5misc.test index adab157809..d67d79e29f 100644 --- a/ext/fts5/test/fts5misc.test +++ b/ext/fts5/test/fts5misc.test @@ -424,10 +424,12 @@ do_execsql_test -db db2 15.3 { SAVEPOINT one; } {} do_execsql_test 15.4 END -do_test 15.4 { +do_test 15.5 { list [catch { db2 eval COMMIT } msg] $msg } {0 {}} +db2 close + #------------------------------------------------------------------------- reset_db forcedelete test.db2 @@ -469,6 +471,8 @@ do_execsql_test -db db2 16.6 { SELECT * FROM x1 } {abc def} +db2 close + #------------------------------------------------------------------------- reset_db do_execsql_test 17.1 { diff --git a/manifest b/manifest index 45e738cf92..6b08f6005f 100644 --- a/manifest +++ b/manifest @@ -1,11 +1,11 @@ -C Add\sFTS5\sto\sdefault\sMakefile.msc\sbuilds.\sAnd\sUNKNOWN_SQL_FUNCTION\sand\sSTMT_SCANSTATUS\sto\sdefault\sMakefile.msc\sshell\sbuilds. -D 2023-10-30T17:13:12.161 +C Fix\sproblems\swith\sprevious\scommit\son\sMakefile.msc.\sAlso\ssome\swin32-specific\stest\sfailures\sin\sfts5misc.test. +D 2023-10-30T18:07:18.983 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 F Makefile.in 8b59912fc1538f96a08555605c5886cdcc733696ae7f22e374b2a4752196ca20 F Makefile.linux-gcc f3842a0b1efbfbb74ac0ef60e56b301836d05b4d867d014f714fa750048f1ab6 -F Makefile.msc 23bd95afb445537aba610eaec45cd3848bdeb591d4350c21831f1a714754f339 +F Makefile.msc 2309c96119271c76f25c5a1bb012b7b8d6716ff47918fc172eed84ab386f0897 F README.md 963d30019abf0cc06b263cd2824bce022893f3f93a531758f6f04ff2194a16a8 F VERSION 4c09b629c03b8ae32317cb336a32f3aa3252841d6dcd51184cecc4278d08f21e F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 @@ -180,7 +180,7 @@ F ext/fts5/test/fts5limits.test 8ab67cf5d311c124b6ceb0062d0297767176df4572d955fc F ext/fts5/test/fts5matchinfo.test 10c9a6f7fe61fb132299c4183c012770b10c4d5c2f2edb6df0b6607f683d737a F ext/fts5/test/fts5merge.test e92a8db28b45931e7a9c7b1bbd36101692759d00274df74d83fd29d25d53b3a6 F ext/fts5/test/fts5merge2.test 3ebad1a59d6ad3fb66eff6523a09e95dc6367cbefb3cd73196801dea0425c8e2 -F ext/fts5/test/fts5misc.test 3947a481486156536f417a015343f05f9f367a17f282a4e02bdb95bb5bd43293 +F ext/fts5/test/fts5misc.test 5ca82f2a5ee016b0842043155d1382f98a34d0d86b2791165a44d7807f6e0f54 F ext/fts5/test/fts5multi.test a15bc91cdb717492e6e1b66fec1c356cb57386b980c7ba5af1915f97fe878581 F ext/fts5/test/fts5multiclient.test 5ff811c028d6108045ffef737f1e9f05028af2458e456c0937c1d1b8dea56d45 F ext/fts5/test/fts5near.test 211477940142d733ac04fad97cb24095513ab2507073a99c2765c3ddd2ef58bd @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 0058ea6a69103c1442bf5090553ce9bf77e06011a4960df754eb96144ced497d -R 841dad75dbd2b5725c477d5302bf71ff +P bf99ebba23b6a72a0c02c5542574f409828343e89501cbe2112596ced063c6ab +R beb66a8ff59ba764fca9e805da3860cc U dan -Z bcdddb47387f655ace8d6b5a5dfbcdc4 +Z a0b45d69600175e4b62a4e35aa5b9b82 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index f13c72172c..1deb37cdf8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bf99ebba23b6a72a0c02c5542574f409828343e89501cbe2112596ced063c6ab \ No newline at end of file +527f2237a6fb5e2ac97afddd7c65c0afa971efc616cb3b738e7245ee0b8d9570 \ No newline at end of file From aa36dcf074f7c1c29d74b6a83707ceb2bef2056f Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 30 Oct 2023 18:09:14 +0000 Subject: [PATCH 45/49] Make the new sqlite3_get_clientdata() and sqlite3_set_clientdata() interfaces available to run-time loaded extensions. FossilOrigin-Name: 8fc9aa0f896a2676b73c41cefbff74c822a7106b56324558862dd0a2a1877eaf --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/loadext.c | 5 ++++- src/sqlite3ext.h | 6 ++++++ 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 635c711fca..db47df879c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\stypo\sin\sa\scomment.\s\sNo\scode\schanges. -D 2023-10-30T17:56:27.807 +C Make\sthe\snew\ssqlite3_get_clientdata()\sand\ssqlite3_set_clientdata()\sinterfaces\navailable\sto\srun-time\sloaded\sextensions. +D 2023-10-30T18:09:14.202 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -683,7 +683,7 @@ F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 F src/insert.c 3f0a94082d978bbdd33c38fefea15346c6c6bffb70bc645a71dc0f1f87dd3276 F src/json.c d69c6e28ff7b602877bda68cd20583b8487c059759aa4d154dd21b3fd99c6238 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa -F src/loadext.c 7d56c6f28aaf9b42e2772289e0d0a12a77b57c2baed021dbfd1fcafec69c156a +F src/loadext.c 7432c944ff197046d67a1207790a1b13eec4548c85a9457eb0896bb3641dfb36 F src/main.c e1bc8864834697503d370d94613be945d05ca1c5ebdda43e7d5c8ee8c48d433c F src/malloc.c f016922435dc7d1f1f5083a03338a3e91f8c67ce2c5bdcfa4cdef62e612f5fcc F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 @@ -725,7 +725,7 @@ F src/select.c 7753615c837fa6828a12035e9806cb89c63cef7d23f6ed20259b0569fb9a9787 F src/shell.c.in 3826827be22545318865b0c387a8b9208b0a0f5d849d68440a63488ea9c275c8 F src/sqlite.h.in ef0e41e83ad1ac0dcc9ec9939bf541a44b1c5de821bee2d6c61754c3252f3276 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 -F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac +F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54 F src/sqliteInt.h 567e317f8631883897b7d3da43fce778b7c30dd0dd7f714558c9725fc1c1196c F src/sqliteLimit.h 33b1c9baba578d34efe7dfdb43193b366111cdf41476b1e82699e14c11ee1fb6 F src/status.c 160c445d7d28c984a0eae38c144f6419311ed3eace59b44ac6dafc20db4af749 @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 0058ea6a69103c1442bf5090553ce9bf77e06011a4960df754eb96144ced497d -R f33ecf41a934a4fccd6ae4bb30c5c099 +P 424ef9550abaab32f745dc955e8996d51836eaed737e24c4b4db811aa118ce5d +R b67ddbe02a61e56d8935630c18f88ea9 U drh -Z aa23cad2bd7d24584bbb58137cf46214 +Z d18de580e8444772fc3fb4710376591e # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 5a1c5bf9da..fccd04489e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -424ef9550abaab32f745dc955e8996d51836eaed737e24c4b4db811aa118ce5d \ No newline at end of file +8fc9aa0f896a2676b73c41cefbff74c822a7106b56324558862dd0a2a1877eaf \ No newline at end of file diff --git a/src/loadext.c b/src/loadext.c index cfa8ba4ca8..7e0ae25437 100644 --- a/src/loadext.c +++ b/src/loadext.c @@ -514,7 +514,10 @@ static const sqlite3_api_routines sqlite3Apis = { /* Version 3.41.0 and later */ sqlite3_is_interrupted, /* Version 3.43.0 and later */ - sqlite3_stmt_explain + sqlite3_stmt_explain, + /* Version 3.44.0 and later */ + sqlite3_get_clientdata, + sqlite3_set_clientdata }; /* True if x is the directory separator character diff --git a/src/sqlite3ext.h b/src/sqlite3ext.h index 7116380992..ae0949baf7 100644 --- a/src/sqlite3ext.h +++ b/src/sqlite3ext.h @@ -363,6 +363,9 @@ struct sqlite3_api_routines { int (*is_interrupted)(sqlite3*); /* Version 3.43.0 and later */ int (*stmt_explain)(sqlite3_stmt*,int); + /* Version 3.44.0 and later */ + void *(*get_clientdata)(sqlite3*,const char*); + int (*set_clientdata)(sqlite3*, const char*, void*, void(*)(void*)); }; /* @@ -693,6 +696,9 @@ typedef int (*sqlite3_loadext_entry)( #define sqlite3_is_interrupted sqlite3_api->is_interrupted /* Version 3.43.0 and later */ #define sqlite3_stmt_explain sqlite3_api->stmt_explain +/* Version 3.44.0 and later */ +#define sqlite3_get_clientdata sqlite3_api->get_clientdata +#define sqlite3_set_clientdata sqlite3_api->set_clientdata #endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */ #if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) From 383295eb17072c4a88b73d4ff7963c1eb4ea2dcd Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 30 Oct 2023 18:48:03 +0000 Subject: [PATCH 46/49] Fix another comment typo. No code changes. FossilOrigin-Name: 3203256c0285ef2fea810d59978603bfd7e38151cbc42e1baddf84b57c56f638 --- manifest | 15 +++++++-------- manifest.uuid | 2 +- src/select.c | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 686cbcb64c..a2ab42bfd3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sFTS5\sto\sdefault\sMakefile.msc\sbuilds.\sAnd\sUNKNOWN_SQL_FUNCTION\sand\sSTMT_SCANSTATUS\sto\sdefault\sMakefile.msc\sshell\sbuilds. -D 2023-10-30T18:17:29.237 +C Fix\sanother\scomment\stypo.\s\sNo\scode\schanges. +D 2023-10-30T18:48:03.095 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -721,7 +721,7 @@ F src/printf.c 9da63b9ae1c14789bcae12840f5d800fd9302500cd2d62733fac77f0041b4750 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 -F src/select.c 7753615c837fa6828a12035e9806cb89c63cef7d23f6ed20259b0569fb9a9787 +F src/select.c a19daa26e95f7245106a31f288b2f50c72d1f2cc156703f04c8c91450e111515 F src/shell.c.in 3826827be22545318865b0c387a8b9208b0a0f5d849d68440a63488ea9c275c8 F src/sqlite.h.in ef0e41e83ad1ac0dcc9ec9939bf541a44b1c5de821bee2d6c61754c3252f3276 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -2139,9 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 8fc9aa0f896a2676b73c41cefbff74c822a7106b56324558862dd0a2a1877eaf 527f2237a6fb5e2ac97afddd7c65c0afa971efc616cb3b738e7245ee0b8d9570 -R 924fb849b3424780285acb2e9a121568 -T +closed 527f2237a6fb5e2ac97afddd7c65c0afa971efc616cb3b738e7245ee0b8d9570 -U dan -Z 3a8d30a63ed084f341d01d17623ea50e +P e41fde2fdb999b430561ac6d6ba150666ad1858e99c973f8dcd04a6934991032 +R 0419b51896081f56de024f9efaca85b4 +U drh +Z 85228b44c3864b12cba540f8b7c26125 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 03b4038491..d219d13ac0 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e41fde2fdb999b430561ac6d6ba150666ad1858e99c973f8dcd04a6934991032 \ No newline at end of file +3203256c0285ef2fea810d59978603bfd7e38151cbc42e1baddf84b57c56f638 \ No newline at end of file diff --git a/src/select.c b/src/select.c index d7106f6eec..7a79385e0b 100644 --- a/src/select.c +++ b/src/select.c @@ -6746,7 +6746,7 @@ static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){ ** For an ORDER BY aggregate, the actual accumulator memory cell update ** is deferred until after all input rows have been received, so that they ** can be run in the requested order. In that case, instead of invoking -** OP_AggStep to update accumulator, just add the arguments that would +** OP_AggStep to update the accumulator, just add the arguments that would ** have been passed into OP_AggStep into the sorting ephemeral table ** (along with the appropriate sort key). */ From f3f0bd2155d2200b5a3d4975ddbde94d44164ba1 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 30 Oct 2023 19:03:17 +0000 Subject: [PATCH 47/49] Add a cast to i64 for an integer in an sqlite3OsWrite() offset calculation. The cast is not strictly necessary, but it helps human readers see that the code is correct. FossilOrigin-Name: 7564ff1ba2c2fba89106d1aa06cc5379e752f119f22370f2f155f24cc698dec6 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/pager.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index a2ab42bfd3..a6fdab9375 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sanother\scomment\stypo.\s\sNo\scode\schanges. -D 2023-10-30T18:48:03.095 +C Add\sa\scast\sto\si64\sfor\san\sinteger\sin\san\ssqlite3OsWrite()\soffset\ncalculation.\s\sThe\scast\sis\snot\sstrictly\snecessary,\sbut\sit\shelps\shuman\sreaders\nsee\sthat\sthe\scode\sis\scorrect. +D 2023-10-30T19:03:17.274 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -708,7 +708,7 @@ F src/os_setup.h 6011ad7af5db4e05155f385eb3a9b4470688de6f65d6166b8956e58a3d87210 F src/os_unix.c cb116fde9e3ca3c1bbfdf89d6928f776a2a34da168e2667426523a4db353b271 F src/os_win.c 4a50a154aeebc66a1f8fb79c1ff6dd5fe3d005556533361e0d460d41cb6a45a8 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a -F src/pager.c 9c9343d9ff407fb9e01f8c22e9babbe42807ab53aa1c7d747da77bb2b2f74629 +F src/pager.c 699aab8dfc88056d796b03b40c0ab979040d58dfc3ae9db207f1be91e4880bbf F src/pager.h f4d33fec8052603758792045493423b8871a996da2d0973927b7d36cd6070473 F src/parse.y 020d80386eb216ec9520549106353c517d2bbc89be28752ffdca649a9eaf56ec F src/pcache.c 040b165f30622a21b7a9a77c6f2e4877a32fb7f22d4c7f0d2a6fa6833a156a75 @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P e41fde2fdb999b430561ac6d6ba150666ad1858e99c973f8dcd04a6934991032 -R 0419b51896081f56de024f9efaca85b4 +P 3203256c0285ef2fea810d59978603bfd7e38151cbc42e1baddf84b57c56f638 +R bc4d33b10898224fed6a435408a265f0 U drh -Z 85228b44c3864b12cba540f8b7c26125 +Z dd8b500ddcc44fefafb6cf0d50166aea # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index d219d13ac0..805d975e44 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3203256c0285ef2fea810d59978603bfd7e38151cbc42e1baddf84b57c56f638 \ No newline at end of file +7564ff1ba2c2fba89106d1aa06cc5379e752f119f22370f2f155f24cc698dec6 \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index 826e90f137..e547504243 100644 --- a/src/pager.c +++ b/src/pager.c @@ -6593,7 +6593,7 @@ int sqlite3PagerCommitPhaseOne( int szPage = (int)pPager->pageSize; memset(pTmp, 0, szPage); rc = sqlite3OsWrite(pPager->fd, pTmp, szPage, - (pPager->dbSize*pPager->pageSize)-szPage); + ((i64)pPager->dbSize*pPager->pageSize)-szPage); } if( rc==SQLITE_OK ){ rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, 0); From cc2af7e68a6bb318a8cee8ab282ade96841c626e Mon Sep 17 00:00:00 2001 From: larrybr Date: Mon, 30 Oct 2023 19:50:20 +0000 Subject: [PATCH 48/49] Dodge a nuisance warning from MSVC in CLI use of Prepared Statement Scan Status. (Yes, C rules are fine.) FossilOrigin-Name: 166c96d91dcc8c500a084d5703db103176ed5ec7d5f1334050cd66b3f1cd0e4f --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/shell.c.in | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/manifest b/manifest index a6fdab9375..498079075b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sa\scast\sto\si64\sfor\san\sinteger\sin\san\ssqlite3OsWrite()\soffset\ncalculation.\s\sThe\scast\sis\snot\sstrictly\snecessary,\sbut\sit\shelps\shuman\sreaders\nsee\sthat\sthe\scode\sis\scorrect. -D 2023-10-30T19:03:17.274 +C Dodge\sa\snuisance\swarning\sfrom\sMSVC\sin\sCLI\suse\sof\sPrepared\sStatement\sScan\sStatus.\s(Yes,\sC\srules\sare\sfine.) +D 2023-10-30T19:50:20.447 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -722,7 +722,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c a19daa26e95f7245106a31f288b2f50c72d1f2cc156703f04c8c91450e111515 -F src/shell.c.in 3826827be22545318865b0c387a8b9208b0a0f5d849d68440a63488ea9c275c8 +F src/shell.c.in fbb0ff59cd62e1103221f655a9b3357edec4f89bd6c6d3350f6bddc1ff855357 F src/sqlite.h.in ef0e41e83ad1ac0dcc9ec9939bf541a44b1c5de821bee2d6c61754c3252f3276 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54 @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 3203256c0285ef2fea810d59978603bfd7e38151cbc42e1baddf84b57c56f638 -R bc4d33b10898224fed6a435408a265f0 -U drh -Z dd8b500ddcc44fefafb6cf0d50166aea +P 7564ff1ba2c2fba89106d1aa06cc5379e752f119f22370f2f155f24cc698dec6 +R 592cb591ccb42176be22bbcd43e1bb22 +U larrybr +Z f318336f9f4c56ad4c0496d33e161662 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 805d975e44..5009919aa8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7564ff1ba2c2fba89106d1aa06cc5379e752f119f22370f2f155f24cc698dec6 \ No newline at end of file +166c96d91dcc8c500a084d5703db103176ed5ec7d5f1334050cd66b3f1cd0e4f \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index cf8e4f0611..88bb8c0868 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -3438,7 +3438,7 @@ static void display_explain_scanstats( if( sqlite3_stmt_scanstatus_v2(p,ii,SQLITE_SCANSTAT_EXPLAIN,f,(void*)&z) ){ break; } - n = strlen(z) + scanStatsHeight(p, ii)*3; + n = (int)strlen(z) + scanStatsHeight(p, ii)*3; if( n>nWidth ) nWidth = n; } nWidth += 4; @@ -3450,12 +3450,12 @@ static void display_explain_scanstats( i64 nCycle = 0; int iId = 0; int iPid = 0; - const char *z = 0; + const char *zo = 0; const char *zName = 0; char *zText = 0; double rEst = 0.0; - if( sqlite3_stmt_scanstatus_v2(p,ii,SQLITE_SCANSTAT_EXPLAIN,f,(void*)&z) ){ + if( sqlite3_stmt_scanstatus_v2(p,ii,SQLITE_SCANSTAT_EXPLAIN,f,(void*)&zo) ){ break; } sqlite3_stmt_scanstatus_v2(p, ii, SQLITE_SCANSTAT_EST,f,(void*)&rEst); @@ -3466,7 +3466,7 @@ static void display_explain_scanstats( sqlite3_stmt_scanstatus_v2(p, ii, SQLITE_SCANSTAT_PARENTID,f,(void*)&iPid); sqlite3_stmt_scanstatus_v2(p, ii, SQLITE_SCANSTAT_NAME,f,(void*)&zName); - zText = sqlite3_mprintf("%s", z); + zText = sqlite3_mprintf("%s", zo); if( nCycle>=0 || nLoop>=0 || nRow>=0 ){ char *z = 0; if( nCycle>=0 && nTotal>0 ){ From 23f5f62d41339fbe246cf7860a713ac419b2a253 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 30 Oct 2023 20:35:33 +0000 Subject: [PATCH 49/49] Update the autoconf/Makefile.msc so that it aligns with Makefile.msc. FossilOrigin-Name: c4f724de279dae1afd10d435ad61ed07c1e4658288457c50e4f9b2f4521bbe12 --- autoconf/Makefile.msc | 3 +++ manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/autoconf/Makefile.msc b/autoconf/Makefile.msc index 8a64e8f46f..280bb95deb 100644 --- a/autoconf/Makefile.msc +++ b/autoconf/Makefile.msc @@ -296,6 +296,7 @@ SQLITE3EXEPDB = /pdb:sqlite3sh.pdb !IFNDEF OPT_FEATURE_FLAGS !IF $(MINIMAL_AMALGAMATION)==0 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_FTS3=1 +OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_FTS5=1 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_RTREE=1 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_GEOPOLY=1 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_STMTVTAB=1 @@ -987,6 +988,8 @@ SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_DQS=0 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_FTS4=1 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_EXPLAIN_COMMENTS=1 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_OFFSET_SQL_FUNC=1 +SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION=1 +SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_STMT_SCANSTATUS=1 !ENDIF diff --git a/manifest b/manifest index 498079075b..4c9859dc5c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Dodge\sa\snuisance\swarning\sfrom\sMSVC\sin\sCLI\suse\sof\sPrepared\sStatement\sScan\sStatus.\s(Yes,\sC\srules\sare\sfine.) -D 2023-10-30T19:50:20.447 +C Update\sthe\sautoconf/Makefile.msc\sso\sthat\sit\saligns\swith\sMakefile.msc. +D 2023-10-30T20:35:33.577 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -15,7 +15,7 @@ F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac -F autoconf/Makefile.msc 3dfe7dc4677569256724e4988db59521f10b1d8b8fba393ea8a255eb038b9825 +F autoconf/Makefile.msc 34f8c222846db1b354720c8a78a4fa7dec9176ea447c0fffdf442b7f74e8b1df F autoconf/README.first 6c4f34fe115ff55d4e8dbfa3cecf04a0188292f7 F autoconf/README.txt 42cfd21d0b19dc7d5d85fb5c405c5f3c6a4c923021c39128f6ba685355d8fd56 F autoconf/configure.ac ec7fa914c5e74ff212fe879f9bb6918e1234497e05facfb641f30c4d5893b277 @@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 7564ff1ba2c2fba89106d1aa06cc5379e752f119f22370f2f155f24cc698dec6 -R 592cb591ccb42176be22bbcd43e1bb22 -U larrybr -Z f318336f9f4c56ad4c0496d33e161662 +P 166c96d91dcc8c500a084d5703db103176ed5ec7d5f1334050cd66b3f1cd0e4f +R a40397540ae65bc3266dad738379719e +U drh +Z fc1d61aea6975cccbcf8186ffc5ca0c5 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 5009919aa8..ad98d6629a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -166c96d91dcc8c500a084d5703db103176ed5ec7d5f1334050cd66b3f1cd0e4f \ No newline at end of file +c4f724de279dae1afd10d435ad61ed07c1e4658288457c50e4f9b2f4521bbe12 \ No newline at end of file