From 11d5efde75b4de29c4d70d9fc321a6ec47bc0398 Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 21 Apr 2023 15:30:47 +0000 Subject: [PATCH 01/35] Add a new modifier to date/time functions: "subsecond". May be abbreviated as just "subsec". This modifier causes functions to try to show fractional seconds if they do not already. FossilOrigin-Name: 03f2a15e8779d8ca76510badeabde62a0539ce8a6368d7a9688f5aadc215b940 --- manifest | 17 ++++++---- manifest.uuid | 2 +- src/date.c | 91 +++++++++++++++++++++++++++++++++++++++++---------- 3 files changed, 84 insertions(+), 26 deletions(-) diff --git a/manifest b/manifest index d0a4959f5a..e34485f0ad 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Increase\sCLI\stolerance\sof\sarifically\slow\smemory. -D 2023-04-20T20:07:14.732 +C Add\sa\snew\smodifier\sto\sdate/time\sfunctions:\s"subsecond".\s\sMay\sbe\nabbreviated\sas\sjust\s"subsec".\s\sThis\smodifier\scauses\sfunctions\sto\stry\nto\sshow\sfractional\sseconds\sif\sthey\sdo\snot\salready. +D 2023-04-21T15:30:47.608 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -578,7 +578,7 @@ F src/build.c 8357d6ca9a8c9afc297c431df28bc2af407b47f3ef2311875276c944b30c4d54 F src/callback.c 4cd7225b26a97f7de5fee5ae10464bed5a78f2adefe19534cc2095b3a8ca484a F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 20507cc0b0a6c19cd882fcd0eaeda32ae6a4229fb4b024cfdf3183043d9b703d -F src/date.c f21815ca7172ce073db3163ac54c8d9f2841077165c1a6123b4d1c376a0c7ec7 +F src/date.c aca9e0c08b400b21238b609aea7c09585396cd770985cf8f475560f69222dad3 F src/dbpage.c f3eea5f7ec47e09ee7da40f42b25092ecbe961fc59566b8e5f705f34335b2387 F src/dbstat.c ec92074baa61d883de58c945162d9e666c13cd7cf3a23bc38b4d1c4d0b2c2bef F src/delete.c a9c6d3f51c0a31e9b831e0a0580a98d702904b42d216fee530940e40dec34873 @@ -2059,8 +2059,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 104ab105ac0e96c0fc61c6d69179bf984fcfe5e0efb2c82f3742456c1b5fe5d1 -R aa97778045cfce91a857103f91418d38 -U larrybr -Z aaec46b2f4c843c0506897156fa41de9 +P 13f2638622871db9b91db547dcfd38f61c03e7696e4df5144adefcd86140aeba +R 2529341824942da9d8aad7d6b6ee37a6 +T *branch * subsec-modifier +T *sym-subsec-modifier * +T -sym-trunk * +U drh +Z 03013fcb8c96af9e078547fa6f689eef # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 3151763d58..730a04f96b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -13f2638622871db9b91db547dcfd38f61c03e7696e4df5144adefcd86140aeba \ No newline at end of file +03f2a15e8779d8ca76510badeabde62a0539ce8a6368d7a9688f5aadc215b940 \ No newline at end of file diff --git a/src/date.c b/src/date.c index 7cc6fa684e..9b7957bbf0 100644 --- a/src/date.c +++ b/src/date.c @@ -77,6 +77,7 @@ struct DateTime { char validTZ; /* True (1) if tz is valid */ char tzSet; /* Timezone was set explicitly */ char isError; /* An overflow has occurred */ + char useSubsec; /* Display subsecond precision */ }; @@ -391,6 +392,11 @@ static int parseDateOrTime( }else if( sqlite3AtoF(zDate, &r, sqlite3Strlen30(zDate), SQLITE_UTF8)>0 ){ setRawDateNumber(p, r); return 0; + }else if( (sqlite3StrICmp(zDate,"subsec")==0 + || sqlite3StrICmp(zDate,"subsecond")==0) + && sqlite3NotPureFunc(context) ){ + p->useSubsec = 1; + return setDateTimeToCurrent(context, p); } return 1; } @@ -805,8 +811,22 @@ static int parseModifier( ** ** Move the date backwards to the beginning of the current day, ** or month or year. + ** + ** subsecond + ** subsec + ** + ** Show subsecond precision in the output of datetime() and + ** unixepoch() and strftime('%s'). */ - if( sqlite3_strnicmp(z, "start of ", 9)!=0 ) break; + if( sqlite3_strnicmp(z, "start of ", 9)!=0 ){ + if( sqlite3_stricmp(z, "subsec")==0 + || sqlite3_stricmp(z, "subsecond")==0 + ){ + p->useSubsec = 1; + rc = 0; + } + break; + } if( !p->validJD && !p->validYMD && !p->validHMS ) break; z += 9; computeYMD(p); @@ -1004,7 +1024,11 @@ static void unixepochFunc( DateTime x; if( isDate(context, argc, argv, &x)==0 ){ computeJD(&x); - sqlite3_result_int64(context, x.iJD/1000 - 21086676*(i64)10000); + if( x.useSubsec ){ + sqlite3_result_double(context, (x.iJD - 21086676*(i64)10000000)/1000.0); + }else{ + sqlite3_result_int64(context, x.iJD/1000 - 21086676*(i64)10000); + } } } @@ -1020,8 +1044,8 @@ static void datetimeFunc( ){ DateTime x; if( isDate(context, argc, argv, &x)==0 ){ - int Y, s; - char zBuf[24]; + int Y, s, n; + char zBuf[32]; computeYMD_HMS(&x); Y = x.Y; if( Y<0 ) Y = -Y; @@ -1042,15 +1066,28 @@ static void datetimeFunc( zBuf[15] = '0' + (x.m/10)%10; zBuf[16] = '0' + (x.m)%10; zBuf[17] = ':'; - s = (int)x.s; - zBuf[18] = '0' + (s/10)%10; - zBuf[19] = '0' + (s)%10; - zBuf[20] = 0; + if( x.useSubsec ){ + s = (int)1000.0*x.s; + zBuf[18] = '0' + (s/10000)%10; + zBuf[19] = '0' + (s/1000)%10; + zBuf[20] = '.'; + zBuf[21] = '0' + (s/100)%10; + zBuf[22] = '0' + (s/10)%10; + zBuf[23] = '0' + (s)%10; + zBuf[24] = 0; + n = 24; + }else{ + s = (int)x.s; + zBuf[18] = '0' + (s/10)%10; + zBuf[19] = '0' + (s)%10; + zBuf[20] = 0; + n = 20; + } if( x.Y<0 ){ zBuf[0] = '-'; - sqlite3_result_text(context, zBuf, 20, SQLITE_TRANSIENT); + sqlite3_result_text(context, zBuf, n, SQLITE_TRANSIENT); }else{ - sqlite3_result_text(context, &zBuf[1], 19, SQLITE_TRANSIENT); + sqlite3_result_text(context, &zBuf[1], n-1, SQLITE_TRANSIENT); } } } @@ -1067,7 +1104,7 @@ static void timeFunc( ){ DateTime x; if( isDate(context, argc, argv, &x)==0 ){ - int s; + int s, n; char zBuf[16]; computeHMS(&x); zBuf[0] = '0' + (x.h/10)%10; @@ -1076,11 +1113,24 @@ static void timeFunc( zBuf[3] = '0' + (x.m/10)%10; zBuf[4] = '0' + (x.m)%10; zBuf[5] = ':'; - s = (int)x.s; - zBuf[6] = '0' + (s/10)%10; - zBuf[7] = '0' + (s)%10; - zBuf[8] = 0; - sqlite3_result_text(context, zBuf, 8, SQLITE_TRANSIENT); + if( x.useSubsec ){ + s = (int)1000.0*x.s; + zBuf[6] = '0' + (s/10000)%10; + zBuf[7] = '0' + (s/1000)%10; + zBuf[8] = '.'; + zBuf[9] = '0' + (s/100)%10; + zBuf[10] = '0' + (s/10)%10; + zBuf[11] = '0' + (s)%10; + zBuf[12] = 0; + n = 12; + }else{ + s = (int)x.s; + zBuf[6] = '0' + (s/10)%10; + zBuf[7] = '0' + (s)%10; + zBuf[8] = 0; + n = 8; + } + sqlite3_result_text(context, zBuf, n, SQLITE_TRANSIENT); } } @@ -1211,8 +1261,13 @@ static void strftimeFunc( break; } case 's': { - i64 iS = (i64)(x.iJD/1000 - 21086676*(i64)10000); - sqlite3_str_appendf(&sRes,"%lld",iS); + if( x.useSubsec ){ + sqlite3_str_appendf(&sRes,"%.3f", + (x.iJD - 21086676*(i64)10000000)/1000.0); + }else{ + i64 iS = (i64)(x.iJD/1000 - 21086676*(i64)10000); + sqlite3_str_appendf(&sRes,"%lld",iS); + } break; } case 'S': { From e8468098a00d064cf2b0c436ecc33e1090f82be9 Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 4 May 2023 13:07:49 +0000 Subject: [PATCH 02/35] Add support for the comma (,) modifier to %f formats in the format() function. FossilOrigin-Name: 7080e196a1f887640ff51ddc508ec6796ce12874c2944855702753b64a8e5e50 --- manifest | 15 +++++++++------ manifest.uuid | 2 +- src/printf.c | 3 +++ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 51be3c9159..c428a5c31b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sbug\sin\scursor\shints\sthat\scan\scause\sreferences\sto\stables\sthat\shave\snot\nbeen\sopened.\s\sCursor\shints\sare\sintended\sfor\suse\sby\sCOMDB2\sonly\sand\sshould\snot\nappear\sin\sproduction\sbuilds,\sso\sthis\sshould\snot\sbe\sa\sfactor\sfor\sthe\svast\nmajority\sof\susers. -D 2023-05-04T11:29:15.774 +C Add\ssupport\sfor\sthe\scomma\s(,)\smodifier\sto\s%f\sformats\sin\sthe\sformat()\sfunction. +D 2023-05-04T13:07:49.375 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -631,7 +631,7 @@ F src/pcache1.c dee95e3cd2b61e6512dc814c5ab76d5eb36f0bfc9441dbb4260fccc0d12bbddc F src/pragma.c 26ed2cfdc5c12aa1c707178635709684960288cacc9cff9d491a38ff10e395f1 F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7 F src/prepare.c 6350675966bd0e7ac3a464af9dbfe26db6f0d4237f4e1f1acdb17b12ad371e6e -F src/printf.c 7eac1a9896a80697e03e08963e210830532ae2ff610e16c193e95af007ca5623 +F src/printf.c 19a25adf1b73892d41af7d8f7cbc55b01b592bf2062e68b9f10e604d8deee7e0 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 3e53e02ce87c9582bd7e7d22f13f4094a271678d9dc72820fa257a2abb5e4032 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 @@ -2068,8 +2068,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 b8a84a1bf53fa07ef01c57c6db6329ba439774a262b3adcbe94e7bd77525e296 -R 1610cda0987046b0dcf6630915e091b1 +P d3370d59cffb7ab982d6c620c93d22aa6a9dc786e1c4af95ca8d45ff0b9b7d6f +R ba5de07dbdc63490b9fe4eac9a9617b8 +T *branch * comma-format +T *sym-comma-format * +T -sym-trunk * U drh -Z f5391cf5725e58bc0346459288bb8d90 +Z 225e8025e1634bf3383f0a288fad9560 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 18010e18e0..b76230ca61 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d3370d59cffb7ab982d6c620c93d22aa6a9dc786e1c4af95ca8d45ff0b9b7d6f \ No newline at end of file +7080e196a1f887640ff51ddc508ec6796ce12874c2944855702753b64a8e5e50 \ No newline at end of file diff --git a/src/printf.c b/src/printf.c index 65e539befd..0cbd4c3c6a 100644 --- a/src/printf.c +++ b/src/printf.c @@ -649,6 +649,7 @@ void sqlite3_str_vappendf( { i64 szBufNeeded; /* Size of a temporary buffer needed */ szBufNeeded = MAX(e2,0)+(i64)precision+(i64)width+15; + if( cThousand ) szBufNeeded += (e2+2)/3; if( szBufNeeded > etBUFSIZE ){ bufpt = zExtra = printfTempBuf(pAccum, szBufNeeded); if( bufpt==0 ) return; @@ -666,10 +667,12 @@ void sqlite3_str_vappendf( }else if( msd>0 ){ for(; e2>=0; e2--){ *(bufpt++) = et_getdigit_int(&longvalue,&msd); + if( cThousand && (e2%3)==0 && e2>1 ) *(bufpt++) = ','; } }else{ for(; e2>=0; e2--){ *(bufpt++) = et_getdigit(&realvalue,&nsd); + if( cThousand && (e2%3)==0 && e2>1 ) *(bufpt++) = ','; } } /* The decimal point */ From 0498caec8998c2060458393854f2bd13ccc5d94c Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 5 May 2023 11:33:59 +0000 Subject: [PATCH 03/35] Improved formatting of comments on SQLITE_CONFIG_xxx defines as those comments are used by documentation. FossilOrigin-Name: 2cb840bc9df81f76699f742e5db03835f4c272548cca0e6d24412503db3d76b3 --- manifest | 13 ++++++------- manifest.uuid | 2 +- src/sqlite.h.in | 42 +++++++++++++++++++++--------------------- 3 files changed, 28 insertions(+), 29 deletions(-) diff --git a/manifest b/manifest index 21ebfe0326..064cec52c2 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\s"subsecond"\smodifier\sto\sthe\sdate/time\sfunctions. -D 2023-05-04T20:28:19.528 +C Improved\sformatting\sof\scomments\son\sSQLITE_CONFIG_xxx\sdefines\sas\sthose\ncomments\sare\sused\sby\sdocumentation. +D 2023-05-05T11:33:59.479 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -637,7 +637,7 @@ F src/resolve.c 3e53e02ce87c9582bd7e7d22f13f4094a271678d9dc72820fa257a2abb5e4032 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/select.c f879cef11c462a2c37a8c906932781e384c3bb32042c355a704a043029c90d27 F src/shell.c.in 39ea3d9c17c65c42c6c415222d89a32ae683b245c8af7b4bfc544d9246055d16 -F src/sqlite.h.in d6b0b83b2deab8f92ef7cc6f6fb94fa59d21c59f7b55f4c693bfff161ce42238 +F src/sqlite.h.in 27ca1d4b2eda8feee468af5735182390e8fe4696522751eec0136d17323201ad F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h da473ce2b3d0ae407a6300c4a164589b9a6bfdbec9462688a8593ff16f3bb6e4 F src/sqliteInt.h 91303fb4ee858b85ae1a8a48cc8f723339b81ba7138b42ee5c000083bfff0934 @@ -2068,9 +2068,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 83683e108bce83c105bbcce1aa62880d8f14ebf3383d87d83a1e5c85026a7817 6499ebff545e663198bd0534be205a4e9ca68c7fb20fdcfa54fae4d9b79bfe3a -R 8af27f80731782e09fcf7d27c983e6a4 -T +closed 6499ebff545e663198bd0534be205a4e9ca68c7fb20fdcfa54fae4d9b79bfe3a +P 6fcb5a941fba0449d017954590bde7da74e5a1f8fd9b3e1febdff9bed1f22051 +R 11c5acaba323814d1711daf662533952 U drh -Z ec3e442191ef8c8a1600e49b9abb536f +Z 9311f3acd15641a9173eab56a31a958b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 54e7dbe993..f7abc408d4 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6fcb5a941fba0449d017954590bde7da74e5a1f8fd9b3e1febdff9bed1f22051 \ No newline at end of file +2cb840bc9df81f76699f742e5db03835f4c272548cca0e6d24412503db3d76b3 \ No newline at end of file diff --git a/src/sqlite.h.in b/src/sqlite.h.in index a9972adbba..ba7ad9c537 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -2142,28 +2142,28 @@ struct sqlite3_mem_methods { ** compile-time option is not set, then the default maximum is 1073741824. ** */ -#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ -#define SQLITE_CONFIG_MULTITHREAD 2 /* nil */ -#define SQLITE_CONFIG_SERIALIZED 3 /* nil */ -#define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */ -#define SQLITE_CONFIG_GETMALLOC 5 /* sqlite3_mem_methods* */ -#define SQLITE_CONFIG_SCRATCH 6 /* No longer used */ -#define SQLITE_CONFIG_PAGECACHE 7 /* void*, int sz, int N */ -#define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */ -#define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */ -#define SQLITE_CONFIG_MUTEX 10 /* sqlite3_mutex_methods* */ -#define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */ -/* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */ -#define SQLITE_CONFIG_LOOKASIDE 13 /* int int */ -#define SQLITE_CONFIG_PCACHE 14 /* no-op */ -#define SQLITE_CONFIG_GETPCACHE 15 /* no-op */ -#define SQLITE_CONFIG_LOG 16 /* xFunc, void* */ -#define SQLITE_CONFIG_URI 17 /* int */ -#define SQLITE_CONFIG_PCACHE2 18 /* sqlite3_pcache_methods2* */ -#define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */ +#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ +#define SQLITE_CONFIG_MULTITHREAD 2 /* nil */ +#define SQLITE_CONFIG_SERIALIZED 3 /* nil */ +#define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */ +#define SQLITE_CONFIG_GETMALLOC 5 /* sqlite3_mem_methods* */ +#define SQLITE_CONFIG_SCRATCH 6 /* No longer used */ +#define SQLITE_CONFIG_PAGECACHE 7 /* void*, int sz, int N */ +#define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */ +#define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */ +#define SQLITE_CONFIG_MUTEX 10 /* sqlite3_mutex_methods* */ +#define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */ +/* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */ +#define SQLITE_CONFIG_LOOKASIDE 13 /* int int */ +#define SQLITE_CONFIG_PCACHE 14 /* no-op */ +#define SQLITE_CONFIG_GETPCACHE 15 /* no-op */ +#define SQLITE_CONFIG_LOG 16 /* xFunc, void* */ +#define SQLITE_CONFIG_URI 17 /* int */ +#define SQLITE_CONFIG_PCACHE2 18 /* sqlite3_pcache_methods2* */ +#define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */ #define SQLITE_CONFIG_COVERING_INDEX_SCAN 20 /* int */ -#define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */ -#define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */ +#define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */ +#define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */ #define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */ #define SQLITE_CONFIG_PCACHE_HDRSZ 24 /* int *psz */ #define SQLITE_CONFIG_PMASZ 25 /* unsigned int szPma */ From cad6aae45ea2f6c7dbf464204e8025387c5855bf Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 5 May 2023 11:47:31 +0000 Subject: [PATCH 04/35] Allow virtual tables to prepare writes to shadow tables in defensive mode from with xRelease() callbacks - even if the xRelease() is invoked from within sqlite3_finalize(). FossilOrigin-Name: a17106494a8a67bc92cfe27ee8ef9bf160517d6930d796980ae12287b98c1cfe --- ext/fts5/test/fts5misc.test | 34 ++++++++++++++++++++++++++++++---- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/vtab.c | 3 +++ 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/ext/fts5/test/fts5misc.test b/ext/fts5/test/fts5misc.test index fb609e2c86..da3f652697 100644 --- a/ext/fts5/test/fts5misc.test +++ b/ext/fts5/test/fts5misc.test @@ -329,7 +329,7 @@ do_execsql_test 12.3 { reset_db sqlite3_db_config db DEFENSIVE 1 -do_execsql_test 13.0 { +do_execsql_test 13.1.0 { CREATE TABLE a (id INTEGER PRIMARY KEY, name TEXT); CREATE VIRTUAL TABLE b USING fts5(name); CREATE TRIGGER a_trigger AFTER INSERT ON a BEGIN @@ -337,18 +337,44 @@ do_execsql_test 13.0 { END; } -do_test 13.1 { +do_test 13.1.1 { set ::STMT [ sqlite3_prepare db "INSERT INTO a VALUES (1, 'foo') RETURNING id;" -1 dummy ] sqlite3_step $::STMT } {SQLITE_ROW} -do_test 13.2 { +do_test 13.1.2 { sqlite3_finalize $::STMT } {SQLITE_OK} -do_test 13.3 { +do_test 13.1.3 { + sqlite3_errmsg db +} {not an error} + +reset_db +sqlite3_db_config db DEFENSIVE 1 +do_execsql_test 13.2.0 { + BEGIN; + CREATE TABLE a (id INTEGER PRIMARY KEY, name TEXT); + CREATE VIRTUAL TABLE b USING fts5(name); + CREATE TRIGGER a_trigger AFTER INSERT ON a BEGIN + INSERT INTO b (name) VALUES ('foo'); + END; +} + +do_test 13.2.1 { + set ::STMT [ + sqlite3_prepare db "INSERT INTO a VALUES (1, 'foo') RETURNING id;" -1 dummy + ] + sqlite3_step $::STMT +} {SQLITE_ROW} + +do_test 13.2.2 { + sqlite3_finalize $::STMT +} {SQLITE_OK} + +do_test 13.2.3 { sqlite3_errmsg db } {not an error} diff --git a/manifest b/manifest index 064cec52c2..ba1fd1f6c9 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improved\sformatting\sof\scomments\son\sSQLITE_CONFIG_xxx\sdefines\sas\sthose\ncomments\sare\sused\sby\sdocumentation. -D 2023-05-05T11:33:59.479 +C Allow\svirtual\stables\sto\sprepare\swrites\sto\sshadow\stables\sin\sdefensive\smode\sfrom\swith\sxRelease()\scallbacks\s-\seven\sif\sthe\sxRelease()\sis\sinvoked\sfrom\swithin\ssqlite3_finalize(). +D 2023-05-05T11:47:31.426 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -169,7 +169,7 @@ F ext/fts5/test/fts5leftjoin.test c0b4cafb9661379e576dc4405c0891d8fcc27826807405 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 c02f3e78aa7e62891b5f711c498a877f03252f10a6974e23bc722533233f2603 +F ext/fts5/test/fts5misc.test 416ec0ffbc79320a0760ec32d6684866e3ccd3fbce09f9bcd62d9aee4c666b43 F ext/fts5/test/fts5multi.test a15bc91cdb717492e6e1b66fec1c356cb57386b980c7ba5af1915f97fe878581 F ext/fts5/test/fts5multiclient.test 5ff811c028d6108045ffef737f1e9f05028af2458e456c0937c1d1b8dea56d45 F ext/fts5/test/fts5near.test 211477940142d733ac04fad97cb24095513ab2507073a99c2765c3ddd2ef58bd @@ -715,7 +715,7 @@ F src/vdbemem.c 1cac4028c0dabbf1f3259f107440e2780e05ac9fe419e9709e6eb4e166ba714b F src/vdbesort.c 43756031ca7430f7aec3ef904824a7883c4ede783e51f280d99b9b65c0796e35 F src/vdbetrace.c fe0bc29ebd4e02c8bc5c1945f1d2e6be5927ec12c06d89b03ef2a4def34bf823 F src/vdbevtab.c aae4bd769410eb7e1d02c42613eec961d514459b1c3c1c63cfc84e92a137daac -F src/vtab.c 4a1b231b5938de0282fbb605eb068ca673a1b6a383130f54d1bcbbac951988ad +F src/vtab.c 4758a96d36c9a120848386ae603b1ab32a4876e0a1faf81bfcfb524455e583dc F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 F src/wal.c 7a65f64bfe4a783c5e2df73ffb0efc383dec934dee9e3ac706b2eeb3631d17ac F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a @@ -2068,8 +2068,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 6fcb5a941fba0449d017954590bde7da74e5a1f8fd9b3e1febdff9bed1f22051 -R 11c5acaba323814d1711daf662533952 -U drh -Z 9311f3acd15641a9173eab56a31a958b +P 2cb840bc9df81f76699f742e5db03835f4c272548cca0e6d24412503db3d76b3 +R 5394c576f036f13633460f80b7c0ca1c +U dan +Z 99381f418692096bd24e6bfa992d2414 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index f7abc408d4..0f64e8c27a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2cb840bc9df81f76699f742e5db03835f4c272548cca0e6d24412503db3d76b3 \ No newline at end of file +a17106494a8a67bc92cfe27ee8ef9bf160517d6930d796980ae12287b98c1cfe \ No newline at end of file diff --git a/src/vtab.c b/src/vtab.c index 3477d67ce3..ad629bb031 100644 --- a/src/vtab.c +++ b/src/vtab.c @@ -1102,7 +1102,10 @@ int sqlite3VtabSavepoint(sqlite3 *db, int op, int iSavepoint){ break; } if( xMethod && pVTab->iSavepoint>iSavepoint ){ + u64 savedFlags = (db->flags & SQLITE_Defensive); + db->flags &= ~(u64)SQLITE_Defensive; rc = xMethod(pVTab->pVtab, iSavepoint); + db->flags |= savedFlags; } sqlite3VtabUnlock(pVTab); } From fb18d81038155d06bb8955f7e21dd6af09cf0bb9 Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 5 May 2023 14:14:10 +0000 Subject: [PATCH 05/35] Fix the pager2-3.1 test case so that it does not run if a required dependence (shared-cache) is omitted from the build. Fix for [forum:/forumpost/7a028538a7|forum post 7a028538a7]. FossilOrigin-Name: a77c8a780f884d0cb01d20912cf1aeec0bb7f3999d23117fe5bd82bc4405d483 --- manifest | 14 +++++++------- manifest.uuid | 2 +- test/pager2.test | 39 ++++++++++++++++++++------------------- 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/manifest b/manifest index ba1fd1f6c9..5b94bf1dd7 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Allow\svirtual\stables\sto\sprepare\swrites\sto\sshadow\stables\sin\sdefensive\smode\sfrom\swith\sxRelease()\scallbacks\s-\seven\sif\sthe\sxRelease()\sis\sinvoked\sfrom\swithin\ssqlite3_finalize(). -D 2023-05-05T11:47:31.426 +C Fix\sthe\spager2-3.1\stest\scase\sso\sthat\sit\sdoes\snot\srun\sif\sa\srequired\ndependence\s(shared-cache)\sis\somitted\sfrom\sthe\sbuild.\s\sFix\sfor\n[forum:/forumpost/7a028538a7|forum\spost\s7a028538a7]. +D 2023-05-05T14:14:10.402 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1381,7 +1381,7 @@ F test/ossfuzz.c 9636dad2092a05a32110df0ca06713038dd0c43dd89a77dabe4b8b0d7109671 F test/ossshell.c f125c5bd16e537a2549aa579b328dd1c59905e7ab1338dfc210e755bb7b69f17 F test/ovfl.test 199c482696defceacee8c8e0e0ef36da62726b2f F test/pager1.test ffd885cdc98b986c9f746496508c0c4810ed0eaade3575ddf53c222e85880552 -F test/pager2.test 57ce815e31a7509fcdf7c5474577fd2e9cfee1281d45601e0f7a3bd5534d70a4 +F test/pager2.test c0ede15952b607f9a38f653acdfa73c19e657958e9104aab1a71950ea7b71831 F test/pager3.test 4e9a83d6ca0838d7c602c9eb93d1357562d9059c1e02ffb138a8271020838370 F test/pager4.test a122e9e6925d5b23b31e3dfef8c6a44bbf19590e F test/pagerfault.test 63c5da625562c66345ab4528790327ca63db2f6f9cbae2aba8cb7c51de3d1628 @@ -2068,8 +2068,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 2cb840bc9df81f76699f742e5db03835f4c272548cca0e6d24412503db3d76b3 -R 5394c576f036f13633460f80b7c0ca1c -U dan -Z 99381f418692096bd24e6bfa992d2414 +P a17106494a8a67bc92cfe27ee8ef9bf160517d6930d796980ae12287b98c1cfe +R e3a4bf4875d701cb67328bbeeca5b714 +U drh +Z d618217c755710ff423f44b11a904f24 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 0f64e8c27a..8cac292a6a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a17106494a8a67bc92cfe27ee8ef9bf160517d6930d796980ae12287b98c1cfe \ No newline at end of file +a77c8a780f884d0cb01d20912cf1aeec0bb7f3999d23117fe5bd82bc4405d483 \ No newline at end of file diff --git a/test/pager2.test b/test/pager2.test index 1d78b30f5a..ef05cc76a2 100644 --- a/test/pager2.test +++ b/test/pager2.test @@ -147,24 +147,25 @@ do_test pager2-2.2 { file size test.db } {3072} -#------------------------------------------------------------------------- -# Test that shared in-memory databases seem to work. -# -db close -do_test pager2-3.1 { - forcedelete test.db - sqlite3_shutdown - sqlite3_config_uri 1 - - sqlite3 db1 {file:test.db?mode=memory&cache=shared} - sqlite3 db2 {file:test.db?mode=memory&cache=shared} - sqlite3 db3 test.db - - db1 eval { CREATE TABLE t1(a, b) } - db2 eval { INSERT INTO t1 VALUES(1, 2) } - list [catch { db3 eval { INSERT INTO t1 VALUES(3, 4) } } msg] $msg -} {1 {no such table: t1}} - -db1 close +ifcapable shared_cache { + #------------------------------------------------------------------------- + # Test that shared in-memory databases seem to work. + # + db close + do_test pager2-3.1 { + forcedelete test.db + sqlite3_shutdown + sqlite3_config_uri 1 + + sqlite3 db1 {file:test.db?mode=memory&cache=shared} + sqlite3 db2 {file:test.db?mode=memory&cache=shared} + sqlite3 db3 test.db + + db1 eval { CREATE TABLE t1(a, b) } + db2 eval { INSERT INTO t1 VALUES(1, 2) } + list [catch { db3 eval { INSERT INTO t1 VALUES(3, 4) } } msg] $msg + } {1 {no such table: t1}} + db1 close +} finish_test From e03061910915e6eee6277e41abb18171d33927a0 Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 5 May 2023 14:16:31 +0000 Subject: [PATCH 06/35] Updates to compile-time option usage and especially to the compile-time option test script in tool/omittest.tcl. FossilOrigin-Name: fece588b186c4f9f76d626313e35336fd5681e966e9bd0fa1053b147c4e3c315 --- manifest | 18 ++++++------- manifest.uuid | 2 +- src/build.c | 2 +- src/func.c | 2 +- src/select.c | 2 +- tool/omittest.tcl | 64 ++++++++++++++++++++++++++++++++++++++++------- 6 files changed, 68 insertions(+), 22 deletions(-) diff --git a/manifest b/manifest index 5b94bf1dd7..b56124fb5d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\spager2-3.1\stest\scase\sso\sthat\sit\sdoes\snot\srun\sif\sa\srequired\ndependence\s(shared-cache)\sis\somitted\sfrom\sthe\sbuild.\s\sFix\sfor\n[forum:/forumpost/7a028538a7|forum\spost\s7a028538a7]. -D 2023-05-05T14:14:10.402 +C Updates\sto\scompile-time\soption\susage\sand\sespecially\sto\sthe\scompile-time\soption\ntest\sscript\sin\stool/omittest.tcl. +D 2023-05-05T14:16:31.991 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -577,7 +577,7 @@ F src/btmutex.c 6ffb0a22c19e2f9110be0964d0731d2ef1c67b5f7fabfbaeb7b9dabc4b7740ca F src/btree.c 1949007d2792cf761799348b3760c8489d1964c49efa9e52591aa1f2fcdbc96f F src/btree.h aa354b9bad4120af71e214666b35132712b8f2ec11869cb2315c52c81fad45cc F src/btreeInt.h a9ae91868acc4b3146d47ae2a072aac2cf41ecb7386015752160c8e1a212d9f2 -F src/build.c 8357d6ca9a8c9afc297c431df28bc2af407b47f3ef2311875276c944b30c4d54 +F src/build.c 7a7217f75f202eff03617ca447bb9c3bc07d5af49da1d3cff2b1a88e8e394686 F src/callback.c 4cd7225b26a97f7de5fee5ae10464bed5a78f2adefe19534cc2095b3a8ca484a F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 20507cc0b0a6c19cd882fcd0eaeda32ae6a4229fb4b024cfdf3183043d9b703d @@ -588,7 +588,7 @@ F src/delete.c a9c6d3f51c0a31e9b831e0a0580a98d702904b42d216fee530940e40dec34873 F src/expr.c 871cfd80c516ee39d90414b2d3da2b5bc9c9e21fe87b7eb787ea7ae4b6461758 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 03c134cc8bffe54835f742ddea0b72ebfc8f6b32773d175c71b8afeea6cb5c83 -F src/func.c d187be57a886ddf4e6b7ef584a494361899be3df5eee6d4a747b68ff4aff4122 +F src/func.c 03e6b501f3056d0ba398bda17df938b2b566aa0b3ca7e1942a3cd1925d04ec36 F src/global.c bd0892ade7289f6e20bff44c07d06371f2ff9b53cea359e7854b9b72f65adc30 F src/hash.c c6af5f96a7a76d000f07c5402c48c318c2566beecdee9e78b9d9f60ce7119565 F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51 @@ -635,7 +635,7 @@ F src/printf.c 19a25adf1b73892d41af7d8f7cbc55b01b592bf2062e68b9f10e604d8deee7e0 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 3e53e02ce87c9582bd7e7d22f13f4094a271678d9dc72820fa257a2abb5e4032 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 -F src/select.c f879cef11c462a2c37a8c906932781e384c3bb32042c355a704a043029c90d27 +F src/select.c f9333ef8181192c22662f5cb8d257efc4a2880f9ee4853c6c4616f783d27e1b5 F src/shell.c.in 39ea3d9c17c65c42c6c415222d89a32ae683b245c8af7b4bfc544d9246055d16 F src/sqlite.h.in 27ca1d4b2eda8feee468af5735182390e8fe4696522751eec0136d17323201ad F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -2010,7 +2010,7 @@ F tool/mksqlite3internalh.tcl eb994013e833359137eb53a55acdad0b5ae1049b F tool/mkvsix.tcl b9e0777a213c23156b6542842c238479e496ebf5 F tool/offsets.c 8ed2b344d33f06e71366a9b93ccedaa38c096cc1dbd4c3c26ad08c6115285845 F tool/omittest-msvc.tcl d6b8f501ac1d7798c4126065030f89812379012cad98a1735d6d7221492abc08 -F tool/omittest.tcl 3bc9609aceea871e1ca6ed6749df9ce79b89369d22b492f6ce6078f40647cc3f +F tool/omittest.tcl e99c9fecc3f7a8ca2fa75d8ec8bdbb5acce33dc69f0c280aae53064693387f65 F tool/opcodesum.tcl 740ed206ba8c5040018988129abbf3089a0ccf4a F tool/pagesig.c ff0ca355fd3c2398e933da5e22439bbff89b803b F tool/replace.tcl 937c931ad560688e85bdd6258bdc754371bb1e2732e1fb28ef441e44c9228fce @@ -2068,8 +2068,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 a17106494a8a67bc92cfe27ee8ef9bf160517d6930d796980ae12287b98c1cfe -R e3a4bf4875d701cb67328bbeeca5b714 +P a77c8a780f884d0cb01d20912cf1aeec0bb7f3999d23117fe5bd82bc4405d483 +R 74f98f7cc72d3aae8c89e24d9fb2e559 U drh -Z d618217c755710ff423f44b11a904f24 +Z cacd26f295de4dcda9a986aaebe10401 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 8cac292a6a..23d0ab04b2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a77c8a780f884d0cb01d20912cf1aeec0bb7f3999d23117fe5bd82bc4405d483 \ No newline at end of file +fece588b186c4f9f76d626313e35336fd5681e966e9bd0fa1053b147c4e3c315 \ No newline at end of file diff --git a/src/build.c b/src/build.c index eecfa4705b..9be444c3c3 100644 --- a/src/build.c +++ b/src/build.c @@ -848,7 +848,7 @@ static void SQLITE_NOINLINE deleteTable(sqlite3 *db, Table *pTable){ if( IsOrdinaryTable(pTable) ){ sqlite3FkDelete(db, pTable); } -#ifndef SQLITE_OMIT_VIRTUAL_TABLE +#ifndef SQLITE_OMIT_VIRTUALTABLE else if( IsVirtual(pTable) ){ sqlite3VtabClear(db, pTable); } diff --git a/src/func.c b/src/func.c index 045c60613b..4d0da5dedd 100644 --- a/src/func.c +++ b/src/func.c @@ -1518,7 +1518,7 @@ static void trimFunc( /* ** The "unknown" function is automatically substituted in place of ** any unrecognized function name when doing an EXPLAIN or EXPLAIN QUERY PLAN -** when the SQLITE_ENABLE_UNKNOWN_FUNCTION compile-time option is used. +** when the SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION compile-time option is used. ** When the "sqlite3" command-line shell is built using this functionality, ** that allows an EXPLAIN or EXPLAIN QUERY PLAN for complex queries ** involving application-defined functions to be examined in a generic diff --git a/src/select.c b/src/select.c index 1f4b879bd6..6be3b6a556 100644 --- a/src/select.c +++ b/src/select.c @@ -717,7 +717,7 @@ static void pushOntoSorter( ** (2) All output columns are included in the sort record. In that ** case regData==regOrigData. ** (3) Some output columns are omitted from the sort record due to - ** the SQLITE_ENABLE_SORTER_REFERENCE optimization, or due to the + ** the SQLITE_ENABLE_SORTER_REFERENCES optimization, or due to the ** SQLITE_ECEL_OMITREF optimization, or due to the ** SortCtx.pDeferredRowLoad optimiation. In any of these cases ** regOrigData is 0 to prevent this routine from trying to copy diff --git a/tool/omittest.tcl b/tool/omittest.tcl index b54f2984d4..8862c685f8 100644 --- a/tool/omittest.tcl +++ b/tool/omittest.tcl @@ -192,9 +192,9 @@ proc main {argv} { SQLITE_OMIT_AUTOMATIC_INDEX \ SQLITE_OMIT_AUTORESET \ SQLITE_OMIT_AUTOVACUUM \ + SQLITE_OMIT_AUXILIARY_SAFETY_CHECKS \ SQLITE_OMIT_BETWEEN_OPTIMIZATION \ SQLITE_OMIT_BLOB_LITERAL \ - SQLITE_OMIT_BTREECOUNT \ SQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA \ SQLITE_OMIT_CAST \ SQLITE_OMIT_CHECK \ @@ -225,7 +225,7 @@ proc main {argv} { SQLITE_OMIT_LOOKASIDE \ SQLITE_OMIT_MEMORYDB \ SQLITE_OMIT_OR_OPTIMIZATION \ - SQLITE_OMIT_PAGER_PRAGMAS \ + SQLITE_OMIT_PAGER_PRAGMAS \ SQLITE_OMIT_PARSER_TRACE \ SQLITE_OMIT_POPEN \ SQLITE_OMIT_PRAGMA \ @@ -244,8 +244,9 @@ proc main {argv} { SQLITE_OMIT_TRACE \ SQLITE_OMIT_TRIGGER \ SQLITE_OMIT_TRUNCATE_OPTIMIZATION \ + SQLITE_OMIT_TWOSIZE_LOOKASIDE \ SQLITE_OMIT_UPSERT \ - SQLITE_OMIT_UTF16 \ + SQLITE_OMIT_UTF \ SQLITE_OMIT_VACUUM \ SQLITE_OMIT_VIEW \ SQLITE_OMIT_VIRTUALTABLE \ @@ -258,24 +259,69 @@ proc main {argv} { set ::ENABLE_SYMBOLS [list \ SQLITE_ALLOW_ROWID_IN_VIEW \ SQLITE_DISABLE_DIRSYNC \ + SQLITE_DISABLE_FTS \ + SQLITE_DISABLE_INTRINSIC \ SQLITE_DISABLE_LFS \ + SQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS \ + SQLITE_DISABLE_SKIPAHEAD_DISTINCT \ + SQLITE_ENABLE_API_ARMOR \ SQLITE_ENABLE_ATOMIC_WRITE \ + SQLITE_ENABLE_BATCH_ATOMIC_WRITE \ + SQLITE_ENABLE_BYTECODE_VTAB \ + SQLITE_ENABLE_CEROD \ SQLITE_ENABLE_COLUMN_METADATA \ + SQLITE_ENABLE_COLUMN_USED_MASK \ + SQLITE_ENABLE_COMMENTS \ + SQLITE_ENABLE_CORRUPT_PGNO \ + SQLITE_ENABLE_COSTMULT \ + SQLITE_ENABLE_CURSOR_HINTS \ + SQLITE_ENABLE_DBPAGE_VTAB \ + SQLITE_ENABLE_DBSTAT_VTAB \ SQLITE_ENABLE_EXPENSIVE_ASSERT \ - SQLITE_ENABLE_FTS3 \ - SQLITE_ENABLE_FTS3_PARENTHESIS \ - SQLITE_ENABLE_FTS4 \ + SQLITE_ENABLE_EXPLAIN_COMMENTS \ + SQLITE_ENABLE_FTS \ + SQLITE_ENABLE_GEOPOLY \ + SQLITE_ENABLE_HIDDEN_COLUMNS \ + SQLITE_ENABLE_ICU \ + SQLITE_ENABLE_ICU_COLLATIONS \ + SQLITE_ENABLE_INTERNAL_FUNCTIONS \ SQLITE_ENABLE_IOTRACE \ SQLITE_ENABLE_LOAD_EXTENSION \ SQLITE_ENABLE_LOCKING_STYLE \ + SQLITE_ENABLE_MATH_FUNCTIONS \ SQLITE_ENABLE_MEMORY_MANAGEMENT \ - SQLITE_ENABLE_MEMSYS3 \ - SQLITE_ENABLE_MEMSYS5 \ + SQLITE_ENABLE_MEMSYS \ + SQLITE_ENABLE_MODULE_COMMENTS \ + SQLITE_ENABLE_MULTIPLEX \ + SQLITE_ENABLE_MULTITHREADED_CHECKS \ + SQLITE_ENABLE_NORMALIZE \ + SQLITE_ENABLE_NULL_TRIM \ + SQLITE_ENABLE_OFFSET_SQL_FUNC \ SQLITE_ENABLE_OVERSIZE_CELL_CHECK \ + SQLITE_ENABLE_PREUPDATE_HOOK \ + SQLITE_ENABLE_QPSG \ + SQLITE_ENABLE_RBU \ SQLITE_ENABLE_RTREE \ - SQLITE_ENABLE_STAT3 \ + SQLITE_ENABLE_SELECTTRACE \ + SQLITE_ENABLE_SESSION \ + SQLITE_ENABLE_SETLK_TIMEOUT \ + SQLITE_ENABLE_SNAPSHOT \ + SQLITE_ENABLE_SORTER_MMAP\ + SQLITE_ENABLE_SORTER_REFERENCE \ + SQLITE_ENABLE_SORTER_REFERENCES \ + SQLITE_ENABLE_SQLLOG\ + SQLITE_ENABLE_STAT \ + SQLITE_ENABLE_STMT_SCANSTATUS \ + SQLITE_ENABLE_STMTVTAB \ + SQLITE_ENABLE_TREETRACE \ + SQLITE_ENABLE_UNKNOWN_FUNCTION \ + SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION \ SQLITE_ENABLE_UNLOCK_NOTIFY \ SQLITE_ENABLE_UPDATE_DELETE_LIMIT \ + SQLITE_ENABLE_URI_00_ERROR \ + SQLITE_ENABLE_VFSTRACE \ + SQLITE_ENABLE_WHERETRACE \ + SQLITE_ENABLE_ZIPVFS \ ] # Process any command line options. From 3e49355e17a376eb16e260055923433fd6579fe1 Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 5 May 2023 15:28:35 +0000 Subject: [PATCH 07/35] Do not attempt to run json502.test with SQLITE_OMIT_VIRTUALTABLE builds. FossilOrigin-Name: 6664850647cd314c076842df5bf94e4f12d9be7fb56795b2af25f15c1267fa4d --- manifest | 14 +++++++------- manifest.uuid | 2 +- test/json502.test | 4 ++++ 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index b56124fb5d..301fbbb355 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Updates\sto\scompile-time\soption\susage\sand\sespecially\sto\sthe\scompile-time\soption\ntest\sscript\sin\stool/omittest.tcl. -D 2023-05-05T14:16:31.991 +C Do\snot\sattempt\sto\srun\sjson502.test\swith\sSQLITE_OMIT_VIRTUALTABLE\sbuilds. +D 2023-05-05T15:28:35.372 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1262,7 +1262,7 @@ F test/json103.test 53df87f83a4e5fa0c0a56eb29ff6c94055c6eb919f33316d62161a888011 F test/json104.test 1b844a70cddcfa2e4cd81a5db0657b2e61e7f00868310f24f56a9ba0114348c1 F test/json105.test 11670a4387f4308ae0318cadcbd6a918ea7edcd19fbafde020720a073952675d F test/json501.test f71710f60fa45b19dc336fbaac9e8362f70f80cf81badefdb845ed3f7c7c2ccc -F test/json502.test 66d150cc098674b8bf4354526a8dd411b926f43ca892306bcb3b6d3f93fef7be +F test/json502.test 4edb1e8ed4f8ef2e16236d4c52e80036399f7fa1fe02386a909b573be9700d67 F test/keyword1.test 37ef6bba5d2ed5b07ecdd6810571de2956599dff F test/kvtest.c feb4358fb022da8ebd098c45811f2f6507688bb6c43aa72b3e840df19026317b F test/lastinsert.test 42e948fd6442f07d60acbd15d33fb86473e0ef63 @@ -2068,8 +2068,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 a77c8a780f884d0cb01d20912cf1aeec0bb7f3999d23117fe5bd82bc4405d483 -R 74f98f7cc72d3aae8c89e24d9fb2e559 -U drh -Z cacd26f295de4dcda9a986aaebe10401 +P fece588b186c4f9f76d626313e35336fd5681e966e9bd0fa1053b147c4e3c315 +R 4f9e6360f1a1bc9368471bbb0d80beb6 +U dan +Z 0beac7195282461c4777228af10dffa7 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 23d0ab04b2..ad8c2bcefc 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -fece588b186c4f9f76d626313e35336fd5681e966e9bd0fa1053b147c4e3c315 \ No newline at end of file +6664850647cd314c076842df5bf94e4f12d9be7fb56795b2af25f15c1267fa4d \ No newline at end of file diff --git a/test/json502.test b/test/json502.test index b5e570320d..e95c1f9b68 100644 --- a/test/json502.test +++ b/test/json502.test @@ -16,10 +16,14 @@ set testdir [file dirname $argv0] source $testdir/tester.tcl set testprefix json502 +ifcapable vtab { + do_execsql_test 1.1 { CREATE TABLE t1(x JSON); INSERT INTO t1(x) VALUES('{a:{b:{c:"hello",},},}'); SELECT fullkey FROM t1, json_tree(x); } {{$} {$.a} {$.a.b} {$.a.b.c}} +} + finish_test From ed96436f23a0b42e2a83e66272ce93dc1f18d4d1 Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 5 May 2023 15:52:44 +0000 Subject: [PATCH 08/35] Reduce the maximum depth of nesting in json objects to 1000. FossilOrigin-Name: c7697a0d45bfab20ec09f17ad65e375ddb43af6762278481c13a65c9a784978e --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/json.c | 2 +- test/json101.test | 8 ++++---- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index 301fbbb355..c00d9f4b75 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Do\snot\sattempt\sto\srun\sjson502.test\swith\sSQLITE_OMIT_VIRTUALTABLE\sbuilds. -D 2023-05-05T15:28:35.372 +C Reduce\sthe\smaximum\sdepth\sof\snesting\sin\sjson\sobjects\sto\s1000. +D 2023-05-05T15:52:44.241 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -595,7 +595,7 @@ F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51 F src/hwtime.h b638809e083b601b618df877b2e89cb87c2a47a01f4def10be4c4ebb54664ac7 F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 F src/insert.c a8de1db43335fc4946370a7a7e47d89975ad678ddb15078a150e993ba2fb37d4 -F src/json.c 7297dbd1d623850578c21bb8a99b87e745d09e14fd36ebc965ace67c86f902b4 +F src/json.c eba5afc4de8cb18958f3d2b56737f1096a2e2e73f720a357d7c57882b7925bc2 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c be5af440f3192c58681b5d43167dbca3ccbfce394d89faa22378a14264781136 F src/main.c 035be2e9ba2a0fc1701a8ab1880af3001a968a24556433538a6c073558ee4341 @@ -1256,7 +1256,7 @@ F test/json/README.md 506af1f54574b524106acb50d1a341ab5ddfa6d83fe25095007892b07e F test/json/json-generator.tcl dc0dd0f393800c98658fc4c47eaa6af29d4e17527380cd28656fb261bddc8a3f F test/json/json-q1.txt 335a7c8ab291d354f33b7decc9559e99a2823d4142291c4be7aa339a631f3c2d F test/json/json-speed-check.sh 8b7babf530faa58bd59d6d362cec8e9036a68c5457ff46f3b1f1511d21af6737 x -F test/json101.test ff8024cbb8092e723237648cea9bdbd51f31476b5015a4df3a5ecc8a5efda837 +F test/json101.test 94126d4291d4a00e45f6988ce885c410de69243490e46e70e9946cb6e6f9ea02 F test/json102.test 13dc9e7b7f359ecb861e02f9bd7019f7342a63d1c354273b0a8f3904050560a8 F test/json103.test 53df87f83a4e5fa0c0a56eb29ff6c94055c6eb919f33316d62161a8880112dbe F test/json104.test 1b844a70cddcfa2e4cd81a5db0657b2e61e7f00868310f24f56a9ba0114348c1 @@ -2068,8 +2068,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 fece588b186c4f9f76d626313e35336fd5681e966e9bd0fa1053b147c4e3c315 -R 4f9e6360f1a1bc9368471bbb0d80beb6 +P 6664850647cd314c076842df5bf94e4f12d9be7fb56795b2af25f15c1267fa4d +R 6aa76a0806777607ae43529901afa2c5 U dan -Z 0beac7195282461c4777228af10dffa7 +Z c1985c3452a227be8fa49c7d28c3263b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index ad8c2bcefc..fc8c552521 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6664850647cd314c076842df5bf94e4f12d9be7fb56795b2af25f15c1267fa4d \ No newline at end of file +c7697a0d45bfab20ec09f17ad65e375ddb43af6762278481c13a65c9a784978e \ No newline at end of file diff --git a/src/json.c b/src/json.c index ada8a91c58..8e6ba48b4c 100644 --- a/src/json.c +++ b/src/json.c @@ -147,7 +147,7 @@ struct JsonParse { ** descent parser. A depth of 2000 is far deeper than any sane JSON ** should go. */ -#define JSON_MAX_DEPTH 2000 +#define JSON_MAX_DEPTH 1000 /************************************************************************** ** Utility routines for dealing with JsonString objects diff --git a/test/json101.test b/test/json101.test index e17c8cd6a2..543e4c71e7 100644 --- a/test/json101.test +++ b/test/json101.test @@ -721,20 +721,20 @@ do_execsql_test json-10.95 { # do_execsql_test json-11.0 { /* Shallow enough to be parsed */ - SELECT json_valid(printf('%.2000c0%.2000c','[',']')); + SELECT json_valid(printf('%.1000c0%.1000c','[',']')); } {1} do_execsql_test json-11.1 { /* Too deep by one */ - SELECT json_valid(printf('%.2001c0%.2001c','[',']')); + SELECT json_valid(printf('%.1001c0%.1001c','[',']')); } {0} do_execsql_test json-11.2 { /* Shallow enough to be parsed { */ - SELECT json_valid(replace(printf('%.2000c0%.2000c','[','}'),'[','{"a":')); + SELECT json_valid(replace(printf('%.1000c0%.1000c','[','}'),'[','{"a":')); /* } */ } {1} do_execsql_test json-11.3 { /* Too deep by one { */ - SELECT json_valid(replace(printf('%.2001c0%.2001c','[','}'),'[','{"a":')); + SELECT json_valid(replace(printf('%.1001c0%.1001c','[','}'),'[','{"a":')); /* } */ } {0} From 77eb3e305c7cdee10e69426def6fa0cd0116fbe2 Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 5 May 2023 19:36:13 +0000 Subject: [PATCH 09/35] Fix a buffer overrun that could occur when using the format() function to format a very small real value with the "," modifier. FossilOrigin-Name: 910e770ad4d8e8e45bf069af963f2e975bfcfb882578dc5fe714cd2396258934 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/printf.c | 2 +- test/printf.test | 11 ++++++++++- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index c00d9f4b75..84ca12866e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Reduce\sthe\smaximum\sdepth\sof\snesting\sin\sjson\sobjects\sto\s1000. -D 2023-05-05T15:52:44.241 +C Fix\sa\sbuffer\soverrun\sthat\scould\soccur\swhen\susing\sthe\sformat()\sfunction\sto\sformat\sa\svery\ssmall\sreal\svalue\swith\sthe\s","\smodifier. +D 2023-05-05T19:36:13.987 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -631,7 +631,7 @@ F src/pcache1.c dee95e3cd2b61e6512dc814c5ab76d5eb36f0bfc9441dbb4260fccc0d12bbddc F src/pragma.c 26ed2cfdc5c12aa1c707178635709684960288cacc9cff9d491a38ff10e395f1 F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7 F src/prepare.c 6350675966bd0e7ac3a464af9dbfe26db6f0d4237f4e1f1acdb17b12ad371e6e -F src/printf.c 19a25adf1b73892d41af7d8f7cbc55b01b592bf2062e68b9f10e604d8deee7e0 +F src/printf.c b9320cdbeca0b336c3f139fd36dd121e4167dd62b35fbe9ccaa9bab44c0af38d F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 3e53e02ce87c9582bd7e7d22f13f4094a271678d9dc72820fa257a2abb5e4032 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 @@ -1403,7 +1403,7 @@ F test/pragma4.test ca5e4dfc46adfe490f75d73734f70349d95a199e6510973899e502eef2c8 F test/pragma5.test 7b33fc43e2e41abf17f35fb73f71b49671a380ea92a6c94b6ce530a25f8d9102 F test/pragmafault.test 275edaf3161771d37de60e5c2b412627ac94cef11739236bec12ed1258b240f8 F test/prefixes.test b524a1c44bffec225b9aec98bd728480352aa8532ac4c15771fb85e8beef65d9 -F test/printf.test 931381fede4f901d5f76275959339502f7d3312492c8df129972487951ff9fd1 +F test/printf.test 512152dca7f2f578f045a5a732e7bee08e4f47a8a212f83ce46791b518eba70f F test/printf2.test 3f55c1871a5a65507416076f6eb97e738d5210aeda7595a74ee895f2224cce60 F test/progress.test ebab27f670bd0d4eb9d20d49cef96e68141d92fb F test/ptrchng.test ef1aa72d6cf35a2bbd0869a649b744e9d84977fc @@ -2068,8 +2068,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 6664850647cd314c076842df5bf94e4f12d9be7fb56795b2af25f15c1267fa4d -R 6aa76a0806777607ae43529901afa2c5 +P c7697a0d45bfab20ec09f17ad65e375ddb43af6762278481c13a65c9a784978e +R 05f80cf064e5f1b4255fef1b69dd8ed9 U dan -Z c1985c3452a227be8fa49c7d28c3263b +Z 4b92cc4794f6ed3e073d6a74365d8e83 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index fc8c552521..3352c5e892 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c7697a0d45bfab20ec09f17ad65e375ddb43af6762278481c13a65c9a784978e \ No newline at end of file +910e770ad4d8e8e45bf069af963f2e975bfcfb882578dc5fe714cd2396258934 \ No newline at end of file diff --git a/src/printf.c b/src/printf.c index 0cbd4c3c6a..3e1782d466 100644 --- a/src/printf.c +++ b/src/printf.c @@ -649,7 +649,7 @@ void sqlite3_str_vappendf( { i64 szBufNeeded; /* Size of a temporary buffer needed */ szBufNeeded = MAX(e2,0)+(i64)precision+(i64)width+15; - if( cThousand ) szBufNeeded += (e2+2)/3; + if( cThousand && e2>0 ) szBufNeeded += (e2+2)/3; if( szBufNeeded > etBUFSIZE ){ bufpt = zExtra = printfTempBuf(pAccum, szBufNeeded); if( bufpt==0 ) return; diff --git a/test/printf.test b/test/printf.test index e4beb12dd0..6d4ad71d28 100644 --- a/test/printf.test +++ b/test/printf.test @@ -16,7 +16,6 @@ set testdir [file dirname $argv0] source $testdir/tester.tcl - do_test printf-1.1.1 { sqlite3_mprintf_int {abc: %d %x %o :xyz}\ 1 1 1 @@ -3824,4 +3823,14 @@ do_execsql_test printf-17.11 { SELECT format('%.30f',1.0000000000000000076e-50); } 0.000000000000000000000000000000 +#------------------------------------------------------------------------- +# dbsqlfuzz ad651aad4bb2100f3a724129a555d8d773366d46 +# +db close +sqlite3 db test.db +sqlite3_db_config_lookaside db 0 0 0 +do_execsql_test printf-18.1 { + SELECT length( format('%,.249f', -5.0e-300) ); +} {252} + finish_test From 4e73863fd4dd66d6a404a66c69e37e33292fa50e Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 5 May 2023 20:22:06 +0000 Subject: [PATCH 10/35] Fix a comment in the JSON logic. No code changes. FossilOrigin-Name: 3f30ea5ec9d849c64d8c38f4fffbc06c749ecff91ab90bc29b3a3cc9ec5b9df0 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/json.c | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 84ca12866e..7133d0784d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sbuffer\soverrun\sthat\scould\soccur\swhen\susing\sthe\sformat()\sfunction\sto\sformat\sa\svery\ssmall\sreal\svalue\swith\sthe\s","\smodifier. -D 2023-05-05T19:36:13.987 +C Fix\sa\scomment\sin\sthe\sJSON\slogic.\s\sNo\scode\schanges. +D 2023-05-05T20:22:06.621 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -595,7 +595,7 @@ F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51 F src/hwtime.h b638809e083b601b618df877b2e89cb87c2a47a01f4def10be4c4ebb54664ac7 F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 F src/insert.c a8de1db43335fc4946370a7a7e47d89975ad678ddb15078a150e993ba2fb37d4 -F src/json.c eba5afc4de8cb18958f3d2b56737f1096a2e2e73f720a357d7c57882b7925bc2 +F src/json.c 2ccd22e631227b6329f76412de58aa4926621a10d667d7f2a3374eaade202ff6 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c be5af440f3192c58681b5d43167dbca3ccbfce394d89faa22378a14264781136 F src/main.c 035be2e9ba2a0fc1701a8ab1880af3001a968a24556433538a6c073558ee4341 @@ -2068,8 +2068,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 c7697a0d45bfab20ec09f17ad65e375ddb43af6762278481c13a65c9a784978e -R 05f80cf064e5f1b4255fef1b69dd8ed9 -U dan -Z 4b92cc4794f6ed3e073d6a74365d8e83 +P 910e770ad4d8e8e45bf069af963f2e975bfcfb882578dc5fe714cd2396258934 +R fb2c885eb34d0a9c073f49ec6e0b9a64 +U drh +Z 083918063f857e50a07fc4bf5f897840 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 3352c5e892..556a9a20a0 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -910e770ad4d8e8e45bf069af963f2e975bfcfb882578dc5fe714cd2396258934 \ No newline at end of file +3f30ea5ec9d849c64d8c38f4fffbc06c749ecff91ab90bc29b3a3cc9ec5b9df0 \ No newline at end of file diff --git a/src/json.c b/src/json.c index 8e6ba48b4c..f3a24d6dfd 100644 --- a/src/json.c +++ b/src/json.c @@ -144,8 +144,8 @@ struct JsonParse { ** Maximum nesting depth of JSON for this implementation. ** ** This limit is needed to avoid a stack overflow in the recursive -** descent parser. A depth of 2000 is far deeper than any sane JSON -** should go. +** descent parser. A depth of 1000 is far deeper than any sane JSON +** should go. Historical note: This limit was 2000 prior to version 3.42.0 */ #define JSON_MAX_DEPTH 1000 From 28f32bedd16b6bb3f90848d3ac3778231eebca34 Mon Sep 17 00:00:00 2001 From: drh <> Date: Sun, 7 May 2023 03:23:32 +0000 Subject: [PATCH 11/35] It turns out that pagerExclusiveLock() can be called with the lock state already set to RESERVED if the SQLITE_FCNTL_PERSIST_WAL setting is set and a specific sequence of multiple journal mode changes occur. Enhance pagerExclusiveLock() to deal with this. [forum:/forumpost/8130545bc6|Forum post 8130545bc6] FossilOrigin-Name: 2bb8d977392f635515aa4a36f6f763a2e4858f7adc1120519e2e74c04a9749b5 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/pager.c | 6 ++++-- test/walpersist.test | 18 +++++++++++++++++- 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 7133d0784d..331a35aaec 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\scomment\sin\sthe\sJSON\slogic.\s\sNo\scode\schanges. -D 2023-05-05T20:22:06.621 +C It\sturns\sout\sthat\spagerExclusiveLock()\scan\sbe\scalled\swith\sthe\slock\sstate\nalready\sset\sto\sRESERVED\sif\sthe\sSQLITE_FCNTL_PERSIST_WAL\ssetting\sis\sset\sand\na\sspecific\ssequence\sof\smultiple\sjournal\smode\schanges\soccur.\nEnhance\spagerExclusiveLock()\sto\sdeal\swith\sthis.\n[forum:/forumpost/8130545bc6|Forum\spost\s8130545bc6] +D 2023-05-07T03:23:32.841 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -622,7 +622,7 @@ F src/os_setup.h 6011ad7af5db4e05155f385eb3a9b4470688de6f65d6166b8956e58a3d87210 F src/os_unix.c 1b3ddb7814c4bf37f494c04d2ab30c1ced5b2c927267e1930ce7cd388787a96d F src/os_win.c 2b2411279f7b24f927591561303fc5871845732df42641cbf695c23640b16975 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a -F src/pager.c 9d36ddedc842e993c88c222ed914822dbd6f8ece3c648fde04468637012a034a +F src/pager.c 45e2ef5e9eb5cc0138bcc32b5d2299479be80b206f621873f59149dfb517f496 F src/pager.h f82e9844166e1585f5786837ddc7709966138ced17f568c16af7ccf946c2baa3 F src/parse.y 146f9a1db7db5ef4299c6897d335e5abed348c2626190d2877d45ffa210fd4ca F src/pcache.c 8ee13acccfd9accbf0af94910b7323dd7f7d55300d92ddafcf40e34fcc8e21be @@ -1874,7 +1874,7 @@ F test/walhook.test ed00a40ba7255da22d6b66433ab61fab16a63483 F test/walmode.test cd6e7cff618eaaa5910ce57c3657aa50110397f86213886a2400afb9bfec7b7b F test/walnoshm.test 84ca10c544632a756467336b7c3b864d493ee496 F test/waloverwrite.test dad2f26567f1b45174e54fbf9a8dc1cb876a7f03 -F test/walpersist.test 8c6b7e3ec1ba91b5e4dc4e0921d6d3f87cd356a6 +F test/walpersist.test 8d78a1ec91299163451417b451a2bac3481f8eb9f455b1ca507a6625c927ca6e F test/walprotocol.test 1b3f922125e341703f6e946d77fdc564d38fb3e07a9385cfdc6c99cac1ecf878 F test/walprotocol2.test 7d3b6b4bf0b12f8007121b1e6ef714bc99101fb3b48e46371df1db868eebc131 F test/walro.test cb438d05ba0d191f10b688e39c4f0cd5b71569a1d1f4440e5bdf3c6880e08c20 @@ -2068,8 +2068,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 910e770ad4d8e8e45bf069af963f2e975bfcfb882578dc5fe714cd2396258934 -R fb2c885eb34d0a9c073f49ec6e0b9a64 +P 3f30ea5ec9d849c64d8c38f4fffbc06c749ecff91ab90bc29b3a3cc9ec5b9df0 +R 50489123bab67876dc44e71aabe4a3c4 U drh -Z 083918063f857e50a07fc4bf5f897840 +Z 15666d796dadaefad48a0d98e2e18377 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 556a9a20a0..a4526c604e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3f30ea5ec9d849c64d8c38f4fffbc06c749ecff91ab90bc29b3a3cc9ec5b9df0 \ No newline at end of file +2bb8d977392f635515aa4a36f6f763a2e4858f7adc1120519e2e74c04a9749b5 \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index 063b793f7f..44384de5c0 100644 --- a/src/pager.c +++ b/src/pager.c @@ -7473,13 +7473,15 @@ int sqlite3PagerWalSupported(Pager *pPager){ */ static int pagerExclusiveLock(Pager *pPager){ int rc; /* Return code */ + u8 eOrigLock; /* Original lock */ - assert( pPager->eLock==SHARED_LOCK || pPager->eLock==EXCLUSIVE_LOCK ); + assert( pPager->eLock>=SHARED_LOCK ); + eOrigLock = pPager->eLock; rc = pagerLockDb(pPager, EXCLUSIVE_LOCK); if( rc!=SQLITE_OK ){ /* If the attempt to grab the exclusive lock failed, release the ** pending lock that may have been obtained instead. */ - pagerUnlockDb(pPager, SHARED_LOCK); + pagerUnlockDb(pPager, eOrigLock); } return rc; diff --git a/test/walpersist.test b/test/walpersist.test index 692728dda4..73e6de13d4 100644 --- a/test/walpersist.test +++ b/test/walpersist.test @@ -121,6 +121,22 @@ do_test walpersist-3.4 { sqlite3 db test.db execsql { PRAGMA integrity_check } } {ok} - + +# 2023-05-07 https://sqlite.org/forum/forumpost/8130545bc6 +# +reset_db +do_test 4.1 { + db eval { + PRAGMA journal_mode=WAL; + CREATE TABLE t1(x); + } + file_control_persist_wal db 1 + db eval { + PRAGMA journal_mode=TRUNCATE; + PRAGMA journal_mode=MEMORY; + PRAGMA journal_mode=WAL; + PRAGMA journal_mode=PERSIST; + } +} {truncate memory wal persist} finish_test From 6d841fdc8946675ee95aa3a0930159f4f9936ec1 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 8 May 2023 10:51:35 +0000 Subject: [PATCH 12/35] Add tests for recovering data to a lost-and-found table from a utf-16 db. No code changes. FossilOrigin-Name: 832f6e9f797eecb9a3dae4e7e20c70eda1e91372e9d3ce4223d57f26582cdbd2 --- ext/recover/recover1.test | 32 ++++++++++++++++++++++++++++++++ manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/ext/recover/recover1.test b/ext/recover/recover1.test index 26894eaca2..eb2c3abfc3 100644 --- a/ext/recover/recover1.test +++ b/ext/recover/recover1.test @@ -329,5 +329,37 @@ do_test 17.2 { list [catch { $R finish } msg] $msg } {0 {}} +#------------------------------------------------------------------------- +foreach enc {utf8 utf16 utf16le utf16be} { + reset_db + do_execsql_test 18.$enc.1 { + PRAGMA encoding='utf16'; + CREATE TABLE t1(a, b); + CREATE TABLE t2(a, b); + INSERT INTO t1 VALUES('abc', 'def'); + PRAGMA writable_schema = 1; + DELETE FROM sqlite_schema WHERE name='t1'; + } + + proc my_sql_hook {sql} { + if {[string match "INSERT INTO lostandfound*" $sql]} { + lappend ::script $sql + } + return 0 + } + do_test 18.$enc.2 { + set ::script [list] + set R [sqlite3_recover_init_sql db main my_sql_hook] + $R config lostandfound lostandfound + $R run + $R finish + set ::script + } {{INSERT INTO lostandfound VALUES(2, 2, 2, 1, 'abc', 'def')}} +} + + + + + finish_test diff --git a/manifest b/manifest index 331a35aaec..3038d93678 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C It\sturns\sout\sthat\spagerExclusiveLock()\scan\sbe\scalled\swith\sthe\slock\sstate\nalready\sset\sto\sRESERVED\sif\sthe\sSQLITE_FCNTL_PERSIST_WAL\ssetting\sis\sset\sand\na\sspecific\ssequence\sof\smultiple\sjournal\smode\schanges\soccur.\nEnhance\spagerExclusiveLock()\sto\sdeal\swith\sthis.\n[forum:/forumpost/8130545bc6|Forum\spost\s8130545bc6] -D 2023-05-07T03:23:32.841 +C Add\stests\sfor\srecovering\sdata\sto\sa\slost-and-found\stable\sfrom\sa\sutf-16\sdb.\sNo\scode\schanges. +D 2023-05-08T10:51:35.367 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -375,7 +375,7 @@ F ext/rbu/sqlite3rbu.c 71a7f0dea3a846ff7c2499dc34a2528f5ddcbe23e2c54dc3cd1fa4d93 F ext/rbu/sqlite3rbu.h 9d923eb135c5d04aa6afd7c39ca47b0d1d0707c100e02f19fdde6a494e414304 F ext/rbu/test_rbu.c ee6ede75147bc081fe9bc3931e6b206277418d14d3fbceea6fdc6216d9b47055 F ext/recover/dbdata.c 31d580785cf14eb3c20ed6fbb421a10a66569858f837928e6b326088c38d4c72 -F ext/recover/recover1.test 36a4fd33134809439e677c0e7045b1d31a0ae4f70f464830bce158e2fb1e82f8 +F ext/recover/recover1.test 465af681e7e82616e56a1a49f137be0d3cb38d56765745b4ea2c3b7e7bac6a17 F ext/recover/recover_common.tcl a61306c1eb45c0c3fc45652c35b2d4ec19729e340bdf65a272ce4c229cefd85a F ext/recover/recoverbuild.test c74170e0f7b02456af41838afeb5353fdb985a48cc2331d661bbabbca7c6b8e3 F ext/recover/recoverclobber.test 3ba6c0c373c5c63d17e82eced64c05c57ccaf26c1abe1ca7141334022a79f32e @@ -2068,8 +2068,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 3f30ea5ec9d849c64d8c38f4fffbc06c749ecff91ab90bc29b3a3cc9ec5b9df0 -R 50489123bab67876dc44e71aabe4a3c4 -U drh -Z 15666d796dadaefad48a0d98e2e18377 +P 2bb8d977392f635515aa4a36f6f763a2e4858f7adc1120519e2e74c04a9749b5 +R 824d68be43b361e4021c8eac532ab687 +U dan +Z 3f1aa1e29fd9bcf7f00f9d1631802f51 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index a4526c604e..dea93296c2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2bb8d977392f635515aa4a36f6f763a2e4858f7adc1120519e2e74c04a9749b5 \ No newline at end of file +832f6e9f797eecb9a3dae4e7e20c70eda1e91372e9d3ce4223d57f26582cdbd2 \ No newline at end of file From c42bbfc550233cb8888ac8754b9d3c3cb9778928 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 8 May 2023 11:11:08 +0000 Subject: [PATCH 13/35] Ensure that the label for a JSON object really is a string and not an array or object that just happens to end with a string. dbsqfuzz 32f62ed8676d0a153dbe756aeae3202d3670fe50. FossilOrigin-Name: c335737c2889722ea05b732a5efff8a2f31140c18ca038c41e05c2a26e0db5bd --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/json.c | 3 ++- test/json502.test | 11 +++++++++++ 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 3038d93678..93d66370b5 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\stests\sfor\srecovering\sdata\sto\sa\slost-and-found\stable\sfrom\sa\sutf-16\sdb.\sNo\scode\schanges. -D 2023-05-08T10:51:35.367 +C Ensure\sthat\sthe\slabel\sfor\sa\sJSON\sobject\sreally\sis\sa\sstring\sand\snot\san\sarray\nor\sobject\sthat\sjust\shappens\sto\send\swith\sa\sstring.\ndbsqfuzz\s32f62ed8676d0a153dbe756aeae3202d3670fe50. +D 2023-05-08T11:11:08.344 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -595,7 +595,7 @@ F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51 F src/hwtime.h b638809e083b601b618df877b2e89cb87c2a47a01f4def10be4c4ebb54664ac7 F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 F src/insert.c a8de1db43335fc4946370a7a7e47d89975ad678ddb15078a150e993ba2fb37d4 -F src/json.c 2ccd22e631227b6329f76412de58aa4926621a10d667d7f2a3374eaade202ff6 +F src/json.c 39b1c7527f3111923e65f168a87b03b591f12a41400a63d05c119794bee36620 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c be5af440f3192c58681b5d43167dbca3ccbfce394d89faa22378a14264781136 F src/main.c 035be2e9ba2a0fc1701a8ab1880af3001a968a24556433538a6c073558ee4341 @@ -1262,7 +1262,7 @@ F test/json103.test 53df87f83a4e5fa0c0a56eb29ff6c94055c6eb919f33316d62161a888011 F test/json104.test 1b844a70cddcfa2e4cd81a5db0657b2e61e7f00868310f24f56a9ba0114348c1 F test/json105.test 11670a4387f4308ae0318cadcbd6a918ea7edcd19fbafde020720a073952675d F test/json501.test f71710f60fa45b19dc336fbaac9e8362f70f80cf81badefdb845ed3f7c7c2ccc -F test/json502.test 4edb1e8ed4f8ef2e16236d4c52e80036399f7fa1fe02386a909b573be9700d67 +F test/json502.test 98c38e3c4573841028a1381dfb81d4c3f9b105d39668167da10d055e503f6d0b F test/keyword1.test 37ef6bba5d2ed5b07ecdd6810571de2956599dff F test/kvtest.c feb4358fb022da8ebd098c45811f2f6507688bb6c43aa72b3e840df19026317b F test/lastinsert.test 42e948fd6442f07d60acbd15d33fb86473e0ef63 @@ -2068,8 +2068,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 2bb8d977392f635515aa4a36f6f763a2e4858f7adc1120519e2e74c04a9749b5 -R 824d68be43b361e4021c8eac532ab687 -U dan -Z 3f1aa1e29fd9bcf7f00f9d1631802f51 +P 832f6e9f797eecb9a3dae4e7e20c70eda1e91372e9d3ce4223d57f26582cdbd2 +R ddf88db25bf9e90593a004ef5fa1384f +U drh +Z af5b6de112b4788c002d9207b10d476b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index dea93296c2..7eec6dcaaa 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -832f6e9f797eecb9a3dae4e7e20c70eda1e91372e9d3ce4223d57f26582cdbd2 \ No newline at end of file +c335737c2889722ea05b732a5efff8a2f31140c18ca038c41e05c2a26e0db5bd \ No newline at end of file diff --git a/src/json.c b/src/json.c index f3a24d6dfd..8735634c84 100644 --- a/src/json.c +++ b/src/json.c @@ -1085,6 +1085,7 @@ json_parse_restart: return -1; } for(j=i+1;;j++){ + u32 nNode = pParse->nNode; x = jsonParseValue(pParse, j); if( x<=0 ){ if( x==(-2) ){ @@ -1111,7 +1112,7 @@ json_parse_restart: } } if( pParse->oom ) return -1; - pNode = &pParse->aNode[pParse->nNode-1]; + pNode = &pParse->aNode[nNode]; if( pNode->eType!=JSON_STRING ){ pParse->iErr = j; return -1; diff --git a/test/json502.test b/test/json502.test index e95c1f9b68..595bf63318 100644 --- a/test/json502.test +++ b/test/json502.test @@ -26,4 +26,15 @@ do_execsql_test 1.1 { } +do_execsql_test 2.1 { + SELECT json_error_position('{a:null,{"h":[1,[1,2,3]],"j":"abc"}:true}'); +} 9 +do_catchsql_test 2.2 { + SELECT json('{a:null,{"h":[1,[1,2,3]],"j":"abc"}:true}'); +} {1 {malformed JSON}} +do_catchsql_test 2.3 { + SELECT '{a:null,{"h":[1,[1,2,3]],"j":"abc"}:true}'->'$h[#-1]'; +} {1 {malformed JSON}} + + finish_test From addc7e0e5bb1e725df6a517968abaea79a246242 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 8 May 2023 13:38:14 +0000 Subject: [PATCH 14/35] In editPage(), if an attempt is made to edit an empty 64KB page, then take the slow path through rebuildPage(), in order to maintain strict invariants in the editPage() code. [forum:/forumpost/0f37727c0d|Forum post 0f37727c0d]. FossilOrigin-Name: a865e574e510c1ca192d0bd5293fb583def90f7ed086af2c89ca856ce93d115b --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/btree.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 93d66370b5..c46c202af7 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Ensure\sthat\sthe\slabel\sfor\sa\sJSON\sobject\sreally\sis\sa\sstring\sand\snot\san\sarray\nor\sobject\sthat\sjust\shappens\sto\send\swith\sa\sstring.\ndbsqfuzz\s32f62ed8676d0a153dbe756aeae3202d3670fe50. -D 2023-05-08T11:11:08.344 +C In\seditPage(),\sif\san\sattempt\sis\smade\sto\sedit\san\sempty\s64KB\spage,\sthen\stake\nthe\sslow\spath\sthrough\srebuildPage(),\sin\sorder\sto\smaintain\sstrict\sinvariants\nin\sthe\seditPage()\scode.\n[forum:/forumpost/0f37727c0d|Forum\spost\s0f37727c0d]. +D 2023-05-08T13:38:14.485 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -574,7 +574,7 @@ F src/auth.c f4fa91b6a90bbc8e0d0f738aa284551739c9543a367071f55574681e0f24f8cf F src/backup.c 5c97e8023aab1ce14a42387eb3ae00ba5a0644569e3476f38661fa6f824c3523 F src/bitvec.c 7c849aac407230278445cb069bebc5f89bf2ddd87c5ed9459b070a9175707b3d F src/btmutex.c 6ffb0a22c19e2f9110be0964d0731d2ef1c67b5f7fabfbaeb7b9dabc4b7740ca -F src/btree.c 1949007d2792cf761799348b3760c8489d1964c49efa9e52591aa1f2fcdbc96f +F src/btree.c ecaaf8d57cd8b5f4e3167bd59cf61cef031b4b2ee606e6afa11b96a60a14f9ef F src/btree.h aa354b9bad4120af71e214666b35132712b8f2ec11869cb2315c52c81fad45cc F src/btreeInt.h a9ae91868acc4b3146d47ae2a072aac2cf41ecb7386015752160c8e1a212d9f2 F src/build.c 7a7217f75f202eff03617ca447bb9c3bc07d5af49da1d3cff2b1a88e8e394686 @@ -2068,8 +2068,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 832f6e9f797eecb9a3dae4e7e20c70eda1e91372e9d3ce4223d57f26582cdbd2 -R ddf88db25bf9e90593a004ef5fa1384f +P c335737c2889722ea05b732a5efff8a2f31140c18ca038c41e05c2a26e0db5bd +R a4c80707056958d556ff67539a7c1798 U drh -Z af5b6de112b4788c002d9207b10d476b +Z b12cc07b0d2ae6aee47dbd1c24cec27b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 7eec6dcaaa..3354f0fd77 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c335737c2889722ea05b732a5efff8a2f31140c18ca038c41e05c2a26e0db5bd \ No newline at end of file +a865e574e510c1ca192d0bd5293fb583def90f7ed086af2c89ca856ce93d115b \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index dc9a828d3c..87bc0058bb 100644 --- a/src/btree.c +++ b/src/btree.c @@ -7696,7 +7696,7 @@ static int editPage( nCell -= nTail; } - pData = &aData[get2byteNotZero(&aData[hdr+5])]; + pData = &aData[get2byte(&aData[hdr+5])]; if( pDatapPg->aDataEnd) ) goto editpage_fail; From bbd0ae2e87a93805482a83df1c9399d2b52ad74f Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 8 May 2023 13:47:38 +0000 Subject: [PATCH 15/35] Improved error handling when ".open" fails in the CLI. FossilOrigin-Name: 38544b11f0e19cc6c6f8230a89d28e36c7c3587481deaac6cedbf82338ca0d47 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/shell.c.in | 18 ++++++++++++++---- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index c46c202af7..25749f8ec3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C In\seditPage(),\sif\san\sattempt\sis\smade\sto\sedit\san\sempty\s64KB\spage,\sthen\stake\nthe\sslow\spath\sthrough\srebuildPage(),\sin\sorder\sto\smaintain\sstrict\sinvariants\nin\sthe\seditPage()\scode.\n[forum:/forumpost/0f37727c0d|Forum\spost\s0f37727c0d]. -D 2023-05-08T13:38:14.485 +C Improved\serror\shandling\swhen\s".open"\sfails\sin\sthe\sCLI. +D 2023-05-08T13:47:38.883 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -636,7 +636,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 3e53e02ce87c9582bd7e7d22f13f4094a271678d9dc72820fa257a2abb5e4032 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/select.c f9333ef8181192c22662f5cb8d257efc4a2880f9ee4853c6c4616f783d27e1b5 -F src/shell.c.in 39ea3d9c17c65c42c6c415222d89a32ae683b245c8af7b4bfc544d9246055d16 +F src/shell.c.in e0ca294a4ca6322fd0888bc090d34047347ff591ca9ac8846adc57b13ab91bee F src/sqlite.h.in 27ca1d4b2eda8feee468af5735182390e8fe4696522751eec0136d17323201ad F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h da473ce2b3d0ae407a6300c4a164589b9a6bfdbec9462688a8593ff16f3bb6e4 @@ -2068,8 +2068,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 c335737c2889722ea05b732a5efff8a2f31140c18ca038c41e05c2a26e0db5bd -R a4c80707056958d556ff67539a7c1798 +P a865e574e510c1ca192d0bd5293fb583def90f7ed086af2c89ca856ce93d115b +R c59c0ab602565c9462d7f8be44cc8aca U drh -Z b12cc07b0d2ae6aee47dbd1c24cec27b +Z da3351fa0642cbfa8d9f8540ca3ba271 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 3354f0fd77..9962ca64fa 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a865e574e510c1ca192d0bd5293fb583def90f7ed086af2c89ca856ce93d115b \ No newline at end of file +38544b11f0e19cc6c6f8230a89d28e36c7c3587481deaac6cedbf82338ca0d47 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index bf804aca9f..567752e9b0 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -5380,11 +5380,21 @@ static void open_db(ShellState *p, int openFlags){ if( p->db==0 || SQLITE_OK!=sqlite3_errcode(p->db) ){ utf8_printf(stderr,"Error: unable to open database \"%s\": %s\n", zDbFilename, sqlite3_errmsg(p->db)); - if( openFlags & OPEN_DB_KEEPALIVE ){ - sqlite3_open(":memory:", &p->db); - return; + if( (openFlags & OPEN_DB_KEEPALIVE)==0 ){ + exit(1); + } + sqlite3_close(p->db); + sqlite3_open(":memory:", &p->db); + if( p->db==0 || SQLITE_OK!=sqlite3_errcode(p->db) ){ + utf8_printf(stderr, + "Also: unable to open substitute in-memory database.\n" + ); + exit(1); + }else{ + utf8_printf(stderr, + "Notice: using substitute in-memory database instead of \"%s\"\n", + zDbFilename); } - exit(1); } sqlite3_db_config(p->db, SQLITE_DBCONFIG_STMT_SCANSTATUS, (int)0, (int*)0); From d9be3873615629f913f50b6640f89f9e588b02e2 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 8 May 2023 16:26:22 +0000 Subject: [PATCH 16/35] Fix recover1.test so that it works with DEFAULT_AUTOVACUUM builds. FossilOrigin-Name: 4ffae48e831eedf8f5e61dc6d38817c0fdccfb2f4f1189d07f9722b9e3a48b5e --- ext/recover/recover1.test | 1 + manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/ext/recover/recover1.test b/ext/recover/recover1.test index eb2c3abfc3..070dd03d69 100644 --- a/ext/recover/recover1.test +++ b/ext/recover/recover1.test @@ -333,6 +333,7 @@ do_test 17.2 { foreach enc {utf8 utf16 utf16le utf16be} { reset_db do_execsql_test 18.$enc.1 { + PRAGMA auto_vacuum = 0; PRAGMA encoding='utf16'; CREATE TABLE t1(a, b); CREATE TABLE t2(a, b); diff --git a/manifest b/manifest index 25749f8ec3..02343baa6b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improved\serror\shandling\swhen\s".open"\sfails\sin\sthe\sCLI. -D 2023-05-08T13:47:38.883 +C Fix\srecover1.test\sso\sthat\sit\sworks\swith\sDEFAULT_AUTOVACUUM\sbuilds. +D 2023-05-08T16:26:22.900 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -375,7 +375,7 @@ F ext/rbu/sqlite3rbu.c 71a7f0dea3a846ff7c2499dc34a2528f5ddcbe23e2c54dc3cd1fa4d93 F ext/rbu/sqlite3rbu.h 9d923eb135c5d04aa6afd7c39ca47b0d1d0707c100e02f19fdde6a494e414304 F ext/rbu/test_rbu.c ee6ede75147bc081fe9bc3931e6b206277418d14d3fbceea6fdc6216d9b47055 F ext/recover/dbdata.c 31d580785cf14eb3c20ed6fbb421a10a66569858f837928e6b326088c38d4c72 -F ext/recover/recover1.test 465af681e7e82616e56a1a49f137be0d3cb38d56765745b4ea2c3b7e7bac6a17 +F ext/recover/recover1.test c484d01502239f11b61f23c1cee9f5dd19fa17617f8974e42e74d64639c524cf F ext/recover/recover_common.tcl a61306c1eb45c0c3fc45652c35b2d4ec19729e340bdf65a272ce4c229cefd85a F ext/recover/recoverbuild.test c74170e0f7b02456af41838afeb5353fdb985a48cc2331d661bbabbca7c6b8e3 F ext/recover/recoverclobber.test 3ba6c0c373c5c63d17e82eced64c05c57ccaf26c1abe1ca7141334022a79f32e @@ -2068,8 +2068,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 a865e574e510c1ca192d0bd5293fb583def90f7ed086af2c89ca856ce93d115b -R c59c0ab602565c9462d7f8be44cc8aca -U drh -Z da3351fa0642cbfa8d9f8540ca3ba271 +P 38544b11f0e19cc6c6f8230a89d28e36c7c3587481deaac6cedbf82338ca0d47 +R 5e5d8ddbeb8cc3782b51107bf84b5cec +U dan +Z 798dd3ac32d38e6a1c50db3cf54d26ed # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 9962ca64fa..16a0d0a53a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -38544b11f0e19cc6c6f8230a89d28e36c7c3587481deaac6cedbf82338ca0d47 \ No newline at end of file +4ffae48e831eedf8f5e61dc6d38817c0fdccfb2f4f1189d07f9722b9e3a48b5e \ No newline at end of file From 5fbb2adf7d54594e167d46477cad08b2d21c227a Mon Sep 17 00:00:00 2001 From: larrybr Date: Wed, 10 May 2023 00:20:42 +0000 Subject: [PATCH 17/35] Fix bug in fall-back logic of CLI .clone FossilOrigin-Name: 0dcd9785c11e33e6393b7c1be1ff8fe7129f280439aed12de22d4687609a8bac --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/shell.c.in | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 02343baa6b..aa696c474c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\srecover1.test\sso\sthat\sit\sworks\swith\sDEFAULT_AUTOVACUUM\sbuilds. -D 2023-05-08T16:26:22.900 +C Fix\sbug\sin\sfall-back\slogic\sof\sCLI\s.clone +D 2023-05-10T00:20:42.067 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -636,7 +636,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 3e53e02ce87c9582bd7e7d22f13f4094a271678d9dc72820fa257a2abb5e4032 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/select.c f9333ef8181192c22662f5cb8d257efc4a2880f9ee4853c6c4616f783d27e1b5 -F src/shell.c.in e0ca294a4ca6322fd0888bc090d34047347ff591ca9ac8846adc57b13ab91bee +F src/shell.c.in 8cfc51a5711df05ea0e8a4fbbe20117eb629233f0e92ebea21c2e7dc717ec3d9 F src/sqlite.h.in 27ca1d4b2eda8feee468af5735182390e8fe4696522751eec0136d17323201ad F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h da473ce2b3d0ae407a6300c4a164589b9a6bfdbec9462688a8593ff16f3bb6e4 @@ -2068,8 +2068,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 38544b11f0e19cc6c6f8230a89d28e36c7c3587481deaac6cedbf82338ca0d47 -R 5e5d8ddbeb8cc3782b51107bf84b5cec -U dan -Z 798dd3ac32d38e6a1c50db3cf54d26ed +P 4ffae48e831eedf8f5e61dc6d38817c0fdccfb2f4f1189d07f9722b9e3a48b5e +R eadcd86a7c963c3ce404937ef7af1e62 +U larrybr +Z 49d92c10f87c494a6ab4dda4d8eae4e2 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 16a0d0a53a..a511499001 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4ffae48e831eedf8f5e61dc6d38817c0fdccfb2f4f1189d07f9722b9e3a48b5e \ No newline at end of file +0dcd9785c11e33e6393b7c1be1ff8fe7129f280439aed12de22d4687609a8bac \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index 567752e9b0..2c5c59f231 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -6140,7 +6140,7 @@ static void tryToCloneSchema( zName = sqlite3_column_text(pQuery, 0); zSql = sqlite3_column_text(pQuery, 1); if( zName==0 || zSql==0 ) continue; - if( sqlite3_stricmp((char*)zName, "sqlite_sequence")!=0 ) continue; + if( sqlite3_stricmp((char*)zName, "sqlite_sequence")==0 ) continue; printf("%s... ", zName); fflush(stdout); sqlite3_exec(newDb, (const char*)zSql, 0, 0, &zErrMsg); if( zErrMsg ){ From 88a99437b96b5dde81c45bd311d4127966b97339 Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 10 May 2023 00:33:21 +0000 Subject: [PATCH 18/35] New restriction on the push-down optimization to prevent an ON or USING clause on the left side of a RIGHT JOIN from being pushed down into a subquery that is on the right side of that RIGHT JOIN. [forum:/forumpost/a7d4be7fb6|Forum post a7d4be7fb6]. Also add comments to describe previously undocumented push-down optimization restrictions. FossilOrigin-Name: da3fba18742b6e0bd5290bee9d86a2d5cb1ff2de25d737ef93060d7c1143273f --- manifest | 16 +++++++------- manifest.uuid | 2 +- src/select.c | 52 +++++++++++++++++++++++++++++++++++++++++----- test/pushdown.test | 23 ++++++++++++++++++++ 4 files changed, 79 insertions(+), 14 deletions(-) diff --git a/manifest b/manifest index aa696c474c..98b1d74c09 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sbug\sin\sfall-back\slogic\sof\sCLI\s.clone -D 2023-05-10T00:20:42.067 +C New\srestriction\son\sthe\spush-down\soptimization\sto\sprevent\san\sON\sor\sUSING\sclause\non\sthe\sleft\sside\sof\sa\sRIGHT\sJOIN\sfrom\sbeing\spushed\sdown\sinto\sa\ssubquery\sthat\nis\son\sthe\sright\sside\sof\sthat\sRIGHT\sJOIN.\n[forum:/forumpost/a7d4be7fb6|Forum\spost\sa7d4be7fb6].\nAlso\sadd\scomments\sto\sdescribe\spreviously\sundocumented\spush-down\soptimization\nrestrictions. +D 2023-05-10T00:33:21.611 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -635,7 +635,7 @@ F src/printf.c b9320cdbeca0b336c3f139fd36dd121e4167dd62b35fbe9ccaa9bab44c0af38d F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 3e53e02ce87c9582bd7e7d22f13f4094a271678d9dc72820fa257a2abb5e4032 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 -F src/select.c f9333ef8181192c22662f5cb8d257efc4a2880f9ee4853c6c4616f783d27e1b5 +F src/select.c 74cc112615f42f6dac0ecb4f4b7d2d33f89703c6b63a2a2cc88d4fba138e53f3 F src/shell.c.in 8cfc51a5711df05ea0e8a4fbbe20117eb629233f0e92ebea21c2e7dc717ec3d9 F src/sqlite.h.in 27ca1d4b2eda8feee468af5735182390e8fe4696522751eec0136d17323201ad F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -1407,7 +1407,7 @@ F test/printf.test 512152dca7f2f578f045a5a732e7bee08e4f47a8a212f83ce46791b518eba F test/printf2.test 3f55c1871a5a65507416076f6eb97e738d5210aeda7595a74ee895f2224cce60 F test/progress.test ebab27f670bd0d4eb9d20d49cef96e68141d92fb F test/ptrchng.test ef1aa72d6cf35a2bbd0869a649b744e9d84977fc -F test/pushdown.test c183fa51f93bb3a604eee9141133e36b5fbef0aac3b0447e464d977a84d6d00a +F test/pushdown.test 043e69055d841f5c4be0ff264b2a9de32d2342c3d71b20a786b0e6656603c66a F test/queryonly.test 5f653159e0f552f0552d43259890c1089391dcca F test/quick.test 1681febc928d686362d50057c642f77a02c62e57 F test/quickcheck.test f86b25b33455af0189b4d3fe7bd6e553115e80b2d7ec9bbe9a6b37fce0881bfe @@ -2068,8 +2068,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 4ffae48e831eedf8f5e61dc6d38817c0fdccfb2f4f1189d07f9722b9e3a48b5e -R eadcd86a7c963c3ce404937ef7af1e62 -U larrybr -Z 49d92c10f87c494a6ab4dda4d8eae4e2 +P 0dcd9785c11e33e6393b7c1be1ff8fe7129f280439aed12de22d4687609a8bac +R 3d961b43f90341a00d01bb4735ebf2fe +U drh +Z f03efd73d88947aad78bab321f78e97e # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index a511499001..26bfdb0a11 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0dcd9785c11e33e6393b7c1be1ff8fe7129f280439aed12de22d4687609a8bac \ No newline at end of file +da3fba18742b6e0bd5290bee9d86a2d5cb1ff2de25d737ef93060d7c1143273f \ No newline at end of file diff --git a/src/select.c b/src/select.c index 6be3b6a556..079158b4dd 100644 --- a/src/select.c +++ b/src/select.c @@ -5107,6 +5107,23 @@ static int pushDownWindowCheck(Parse *pParse, Select *pSubq, Expr *pExpr){ ** or EXCEPT, then all of the result set columns for all arms of ** the compound must use the BINARY collating sequence. ** +** (9) All three of the following are true: +** +** (9a) The WHERE clause expression originates in the ON or USING clause +** of a join (either an INNER or an OUTER join), and +** +** (9b) The subquery is to the right of the ON/USING clause +** +** (9c) There is a RIGHT JOIN (or FULL JOIN) in between the ON/USING +** clause and the subquery. +** +** Without this restriction, the push-down optimization might move +** the ON/USING filter expression from the left side of a RIGHT JOIN +** over to the right side, which leads to incorrect answers. +** +** (10) The inner query is not the right-hand table of a RIGHT JOIN. +** +** (11) The subquery is not a VALUES clause ** ** Return 0 if no changes are made and non-zero if one or more WHERE clause ** terms are duplicated into the subquery. @@ -5115,13 +5132,20 @@ static int pushDownWhereTerms( Parse *pParse, /* Parse context (for malloc() and error reporting) */ Select *pSubq, /* The subquery whose WHERE clause is to be augmented */ Expr *pWhere, /* The WHERE clause of the outer query */ - SrcItem *pSrc /* The subquery term of the outer FROM clause */ + SrcList *pSrcList, /* The complete from clause of the outer query */ + int iSrc /* Which FROM clause term to try to push into */ ){ Expr *pNew; + SrcItem *pSrc; /* The subquery FROM term into which WHERE is pushed */ int nChng = 0; + pSrc = &pSrcList->a[iSrc]; if( pWhere==0 ) return 0; - if( pSubq->selFlags & (SF_Recursive|SF_MultiPart) ) return 0; - if( pSrc->fg.jointype & (JT_LTORJ|JT_RIGHT) ) return 0; + if( pSubq->selFlags & (SF_Recursive|SF_MultiPart) ){ + return 0; /* restrictions (2) and (11) */ + } + if( pSrc->fg.jointype & (JT_LTORJ|JT_RIGHT) ){ + return 0; /* restrictions (10) */ + } if( pSubq->pPrior ){ Select *pSel; @@ -5176,10 +5200,28 @@ static int pushDownWhereTerms( return 0; /* restriction (3) */ } while( pWhere->op==TK_AND ){ - nChng += pushDownWhereTerms(pParse, pSubq, pWhere->pRight, pSrc); + nChng += pushDownWhereTerms(pParse, pSubq, pWhere->pRight, pSrcList, iSrc); pWhere = pWhere->pLeft; } + if( ExprHasProperty(pWhere, EP_OuterON|EP_InnerON) /* (9a) */ + && (pSrcList->a[0].fg.jointype & JT_LTORJ)!=0 /* Fast pre-test of (9c) */ + ){ + int jj; + for(jj=0; jjw.iJoin==pSrcList->a[jj].iCursor ){ + /* If we reach this point, both (9a) and (9b) are satisfied. + ** The following loop checks (9c): + */ + for(jj++; jja[jj].fg.jointype & JT_RIGHT)!=0 ){ + return 0; /* restriction (9) */ + } + } + } + } + } + #if 0 /* Legacy code. Checks now done by sqlite3ExprIsTableConstraint() */ if( isLeftJoin && (ExprHasProperty(pWhere,EP_OuterON)==0 @@ -7389,7 +7431,7 @@ int sqlite3Select( if( OptimizationEnabled(db, SQLITE_PushDown) && (pItem->fg.isCte==0 || (pItem->u2.pCteUse->eM10d!=M10d_Yes && pItem->u2.pCteUse->nUse<2)) - && pushDownWhereTerms(pParse, pSub, p->pWhere, pItem) + && pushDownWhereTerms(pParse, pSub, p->pWhere, pTabList, i) ){ #if TREETRACE_ENABLED if( sqlite3TreeTrace & 0x4000 ){ diff --git a/test/pushdown.test b/test/pushdown.test index b9ee48c4ac..2b5b1cb994 100644 --- a/test/pushdown.test +++ b/test/pushdown.test @@ -184,4 +184,27 @@ do_eqp_test 3.8 { # The query should be converted into: # SELECT (SELECT count(*) FROM t1)+(SELECT count(*) FROM t2) +# 2023-05-09 https://sqlite.org/forum/forumpost/a7d4be7fb6 +# Restriction (9) on the push-down optimization. +# +reset_db +db null - +do_execsql_test 4.1 { + CREATE TABLE t1(a INT); + CREATE TABLE t2(b INT); + CREATE TABLE t3(c INT); + INSERT INTO t3(c) VALUES(3); + CREATE TABLE t4(d INT); + CREATE TABLE t5(e INT); + INSERT INTO t5(e) VALUES(5); + CREATE VIEW v6(f,g) AS SELECT d, e FROM t4 RIGHT JOIN t5 ON true; + SELECT * FROM t1 JOIN t2 ON false RIGHT JOIN t3 ON true CROSS JOIN v6; +} {- - 3 - 5} +do_execsql_test 4.2 { + SELECT * FROM v6 JOIN t5 ON false RIGHT JOIN t3 ON true; +} {- - - 3} +do_execsql_test 4.3 { + SELECT * FROM t1 JOIN t2 ON false JOIN v6 ON true RIGHT JOIN t3 ON true; +} {- - - - 3} + finish_test From d733ee5cca2dbad91f99a193cb1d41e94e983df9 Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 10 May 2023 10:03:28 +0000 Subject: [PATCH 19/35] Add a missing comma to the documentation for the OP_Jump opcode. No changes to code. FossilOrigin-Name: 7e2c2b1cee760af68cf303ce9ec1babbaf607fe54e043893c046d2d37cd0ab46 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/vdbe.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 98b1d74c09..0b2a3a39e2 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C New\srestriction\son\sthe\spush-down\soptimization\sto\sprevent\san\sON\sor\sUSING\sclause\non\sthe\sleft\sside\sof\sa\sRIGHT\sJOIN\sfrom\sbeing\spushed\sdown\sinto\sa\ssubquery\sthat\nis\son\sthe\sright\sside\sof\sthat\sRIGHT\sJOIN.\n[forum:/forumpost/a7d4be7fb6|Forum\spost\sa7d4be7fb6].\nAlso\sadd\scomments\sto\sdescribe\spreviously\sundocumented\spush-down\soptimization\nrestrictions. -D 2023-05-10T00:33:21.611 +C Add\sa\smissing\scomma\sto\sthe\sdocumentation\sfor\sthe\sOP_Jump\sopcode.\s\sNo\schanges\nto\scode. +D 2023-05-10T10:03:28.780 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -705,7 +705,7 @@ F src/upsert.c 5303dc6c518fa7d4b280ec65170f465c7a70b7ac2b22491598f6d0b4875b3145 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0 F src/util.c d4bcb560471cd94e6e17d448311f8d5bf81a7e5276295a53501058ef1b95dd1a F src/vacuum.c 84ce7f01f8a7a08748e107a441db83bcec13970190ddcb0c9ff522adbc1c23fd -F src/vdbe.c 94d5520d2a287216c47e6fb641ee88ffd934b0d40c235d693d38bcd0e0750357 +F src/vdbe.c fedd2dfa5165256c8e372f2ae9454c4a82cf60ce79a04dff80a86ab2116ea15a F src/vdbe.h 637ae853b7d42ae3951034cc63ab7c8af837861f79504cdb5399552fcd89a884 F src/vdbeInt.h a4147a4ddf613cb1bcb555ace9e9e74a9c099d65facd88155f191b1fb4d74cfb F src/vdbeapi.c b4982cde547054c4f7341198db3c3008a48e1eb028f757601bf5bf2fc026cbcf @@ -2068,8 +2068,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 0dcd9785c11e33e6393b7c1be1ff8fe7129f280439aed12de22d4687609a8bac -R 3d961b43f90341a00d01bb4735ebf2fe +P da3fba18742b6e0bd5290bee9d86a2d5cb1ff2de25d737ef93060d7c1143273f +R c041941eeb7c445508464d8ad51f88f3 U drh -Z f03efd73d88947aad78bab321f78e97e +Z 30a99f1cd999b043032a00ec42ab456b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 26bfdb0a11..badf097c2d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -da3fba18742b6e0bd5290bee9d86a2d5cb1ff2de25d737ef93060d7c1143273f \ No newline at end of file +7e2c2b1cee760af68cf303ce9ec1babbaf607fe54e043893c046d2d37cd0ab46 \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index ea2e6fc5b1..2aa4e6df24 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -2399,7 +2399,7 @@ case OP_Compare: { /* Opcode: Jump P1 P2 P3 * * ** ** Jump to the instruction at address P1, P2, or P3 depending on whether -** in the most recent OP_Compare instruction the P1 vector was less than +** in the most recent OP_Compare instruction the P1 vector was less than, ** equal to, or greater than the P2 vector, respectively. ** ** This opcode must immediately follow an OP_Compare opcode. From 5af043c2e7a585da4b727cb8d3589f23de3ff2b6 Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 10 May 2023 11:05:59 +0000 Subject: [PATCH 20/35] Rename sqlite3IsTableConstraint() to sqlite3IsSingleTableConstraint() and improve its header comment, in an attempt to make the code easier to reason about. No functional changes - should generate identical machine code. FossilOrigin-Name: 5dae897431a0a9dbb354c4a8a48f935ea7438035d96f90b83dd81eae434c8277 --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/expr.c | 10 +++++++--- src/select.c | 4 ++-- src/sqliteInt.h | 2 +- src/where.c | 4 ++-- 6 files changed, 22 insertions(+), 18 deletions(-) diff --git a/manifest b/manifest index 0b2a3a39e2..beece745b5 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sa\smissing\scomma\sto\sthe\sdocumentation\sfor\sthe\sOP_Jump\sopcode.\s\sNo\schanges\nto\scode. -D 2023-05-10T10:03:28.780 +C Rename\ssqlite3IsTableConstraint()\sto\ssqlite3IsSingleTableConstraint()\sand\nimprove\sits\sheader\scomment,\sin\san\sattempt\sto\smake\sthe\scode\seasier\sto\sreason\nabout.\s\sNo\sfunctional\schanges\s-\sshould\sgenerate\sidentical\smachine\scode. +D 2023-05-10T11:05:59.149 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -585,7 +585,7 @@ F src/date.c aca9e0c08b400b21238b609aea7c09585396cd770985cf8f475560f69222dad3 F src/dbpage.c f3eea5f7ec47e09ee7da40f42b25092ecbe961fc59566b8e5f705f34335b2387 F src/dbstat.c ec92074baa61d883de58c945162d9e666c13cd7cf3a23bc38b4d1c4d0b2c2bef F src/delete.c a9c6d3f51c0a31e9b831e0a0580a98d702904b42d216fee530940e40dec34873 -F src/expr.c 871cfd80c516ee39d90414b2d3da2b5bc9c9e21fe87b7eb787ea7ae4b6461758 +F src/expr.c 6b04cccecd6f3342673fafd56033c7e40a3ff1531a6550d0a0af36bac8e824a7 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 03c134cc8bffe54835f742ddea0b72ebfc8f6b32773d175c71b8afeea6cb5c83 F src/func.c 03e6b501f3056d0ba398bda17df938b2b566aa0b3ca7e1942a3cd1925d04ec36 @@ -635,12 +635,12 @@ F src/printf.c b9320cdbeca0b336c3f139fd36dd121e4167dd62b35fbe9ccaa9bab44c0af38d F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 3e53e02ce87c9582bd7e7d22f13f4094a271678d9dc72820fa257a2abb5e4032 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 -F src/select.c 74cc112615f42f6dac0ecb4f4b7d2d33f89703c6b63a2a2cc88d4fba138e53f3 +F src/select.c 46ff52b69d3a85cb71663e48ca2ce6fb8ca35708cb80dda0e4abc4225f2c1d88 F src/shell.c.in 8cfc51a5711df05ea0e8a4fbbe20117eb629233f0e92ebea21c2e7dc717ec3d9 F src/sqlite.h.in 27ca1d4b2eda8feee468af5735182390e8fe4696522751eec0136d17323201ad F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h da473ce2b3d0ae407a6300c4a164589b9a6bfdbec9462688a8593ff16f3bb6e4 -F src/sqliteInt.h 91303fb4ee858b85ae1a8a48cc8f723339b81ba7138b42ee5c000083bfff0934 +F src/sqliteInt.h 6e08039aa944e874d3878c4f12bbd78cea797c988dad147adc9ffb1c2b179402 F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657 F src/status.c 160c445d7d28c984a0eae38c144f6419311ed3eace59b44ac6dafc20db4af749 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 @@ -720,7 +720,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 F src/wal.c 7a65f64bfe4a783c5e2df73ffb0efc383dec934dee9e3ac706b2eeb3631d17ac F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a F src/walker.c f890a3298418d7cba3b69b8803594fdc484ea241206a8dfa99db6dd36f8cbb3b -F src/where.c f69d94f34e1c523cd9b66041e4afe015cad29888617f3c09a2a5bc36018917d0 +F src/where.c 324445b046167c86c6fb4c94d4be816edcbbbf6df17fd94f1def2c3dd27520d5 F src/whereInt.h e25203e5bfee149f5f1225ae0166cfb4f1e65490c998a024249e98bb0647377c F src/wherecode.c b300db0bcd84ad6c2642bf3f509f92fad7b7d697b9856b64dd66d692d184d054 F src/whereexpr.c 22cf19b0ececeaf838daed1039c5231a8778784eba5ad67b991442a23473fd3f @@ -2068,8 +2068,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 da3fba18742b6e0bd5290bee9d86a2d5cb1ff2de25d737ef93060d7c1143273f -R c041941eeb7c445508464d8ad51f88f3 +P 7e2c2b1cee760af68cf303ce9ec1babbaf607fe54e043893c046d2d37cd0ab46 +R 2a126fc6537ab2e89822c6a7f6e0e7f6 U drh -Z 30a99f1cd999b043032a00ec42ab456b +Z fcf39436102b8d866db8404789c74929 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index badf097c2d..1f17c5cde0 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7e2c2b1cee760af68cf303ce9ec1babbaf607fe54e043893c046d2d37cd0ab46 \ No newline at end of file +5dae897431a0a9dbb354c4a8a48f935ea7438035d96f90b83dd81eae434c8277 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 9ffc3baded..acd86ac1c8 100644 --- a/src/expr.c +++ b/src/expr.c @@ -2378,12 +2378,16 @@ int sqlite3ExprIsTableConstant(Expr *p, int iCur){ } /* -** Check pExpr to see if it is an invariant constraint on data source pSrc. +** Check pExpr to see if it is an constraint on the single data source pSrc. +** In other words, check to see if pExpr constrains pSrc but does not depend +** on any other tables or data sources anywhere else in the query. Return +** true (non-zero) if pExpr is a constraint on pSrc only. +** ** This is an optimization. False negatives will perhaps cause slower ** queries, but false positives will yield incorrect answers. So when in ** doubt, return 0. ** -** To be an invariant constraint, the following must be true: +** To be an single-source constraint, the following must be true: ** ** (1) pExpr cannot refer to any table other than pSrc->iCursor. ** @@ -2400,7 +2404,7 @@ int sqlite3ExprIsTableConstant(Expr *p, int iCur){ ** operand of a RIGHT JOIN, then pExpr must be from the WHERE ** clause, not an ON clause. */ -int sqlite3ExprIsTableConstraint(Expr *pExpr, const SrcItem *pSrc){ +int sqlite3ExprIsSingleTableConstraint(Expr *pExpr, const SrcItem *pSrc){ if( pSrc->fg.jointype & JT_LTORJ ){ return 0; /* rule (3) */ } diff --git a/src/select.c b/src/select.c index 079158b4dd..43dec7d208 100644 --- a/src/select.c +++ b/src/select.c @@ -5222,7 +5222,7 @@ static int pushDownWhereTerms( } } -#if 0 /* Legacy code. Checks now done by sqlite3ExprIsTableConstraint() */ +#if 0 /* These checks now done by sqlite3ExprIsSingleTableConstraint() */ if( isLeftJoin && (ExprHasProperty(pWhere,EP_OuterON)==0 || pWhere->w.iJoin!=iCursor) @@ -5236,7 +5236,7 @@ static int pushDownWhereTerms( } #endif - if( sqlite3ExprIsTableConstraint(pWhere, pSrc) ){ + if( sqlite3ExprIsSingleTableConstraint(pWhere, pSrc) ){ nChng++; pSubq->selFlags |= SF_PushDown; while( pSubq ){ diff --git a/src/sqliteInt.h b/src/sqliteInt.h index ea12116caf..935d03805a 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -4906,7 +4906,7 @@ int sqlite3ExprIsConstantNotJoin(Expr*); int sqlite3ExprIsConstantOrFunction(Expr*, u8); int sqlite3ExprIsConstantOrGroupBy(Parse*, Expr*, ExprList*); int sqlite3ExprIsTableConstant(Expr*,int); -int sqlite3ExprIsTableConstraint(Expr*,const SrcItem*); +int sqlite3ExprIsSingleTableConstraint(Expr*,const SrcItem*); #ifdef SQLITE_ENABLE_CURSOR_HINTS int sqlite3ExprContainsSubquery(Expr*); #endif diff --git a/src/where.c b/src/where.c index f517150e12..527e1a3a67 100644 --- a/src/where.c +++ b/src/where.c @@ -922,7 +922,7 @@ static SQLITE_NOINLINE void constructAutomaticIndex( ** WHERE clause (or the ON clause of a LEFT join) that constrain which ** rows of the target table (pSrc) that can be used. */ if( (pTerm->wtFlags & TERM_VIRTUAL)==0 - && sqlite3ExprIsTableConstraint(pExpr, pSrc) + && sqlite3ExprIsSingleTableConstraint(pExpr, pSrc) ){ pPartial = sqlite3ExprAnd(pParse, pPartial, sqlite3ExprDup(pParse->db, pExpr, 0)); @@ -1183,7 +1183,7 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter( for(pTerm=pWInfo->sWC.a; pTermpExpr; if( (pTerm->wtFlags & TERM_VIRTUAL)==0 - && sqlite3ExprIsTableConstraint(pExpr, pItem) + && sqlite3ExprIsSingleTableConstraint(pExpr, pItem) ){ sqlite3ExprIfFalse(pParse, pTerm->pExpr, addrCont, SQLITE_JUMPIFNULL); } From 0051a56dec8c1412d622b5e758e8ec273f330324 Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 10 May 2023 13:56:32 +0000 Subject: [PATCH 21/35] Fix harmless compiler warnings from the CBMC compiler. FossilOrigin-Name: 5bc17cbccdd369486fca049be9d7457e18f162c0e2f5475809ffc8f01c5fa9d2 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/vdbeblob.c | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index beece745b5..b972a25a4c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Rename\ssqlite3IsTableConstraint()\sto\ssqlite3IsSingleTableConstraint()\sand\nimprove\sits\sheader\scomment,\sin\san\sattempt\sto\smake\sthe\scode\seasier\sto\sreason\nabout.\s\sNo\sfunctional\schanges\s-\sshould\sgenerate\sidentical\smachine\scode. -D 2023-05-10T11:05:59.149 +C Fix\sharmless\scompiler\swarnings\sfrom\sthe\sCBMC\scompiler. +D 2023-05-10T13:56:32.946 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -710,7 +710,7 @@ F src/vdbe.h 637ae853b7d42ae3951034cc63ab7c8af837861f79504cdb5399552fcd89a884 F src/vdbeInt.h a4147a4ddf613cb1bcb555ace9e9e74a9c099d65facd88155f191b1fb4d74cfb F src/vdbeapi.c b4982cde547054c4f7341198db3c3008a48e1eb028f757601bf5bf2fc026cbcf F src/vdbeaux.c 6ee48db408d4c297a363f1e31145c09793a580e7c508bb36063dd017d67117a2 -F src/vdbeblob.c 5e61ce31aca17db8fb60395407457a8c1c7fb471dde405e0cd675974611dcfcd +F src/vdbeblob.c 2516697b3ee8154eb8915f29466fb5d4f1ae39ee8b755ea909cefaf57ec5e2ce F src/vdbemem.c 1cac4028c0dabbf1f3259f107440e2780e05ac9fe419e9709e6eb4e166ba714b F src/vdbesort.c 43756031ca7430f7aec3ef904824a7883c4ede783e51f280d99b9b65c0796e35 F src/vdbetrace.c fe0bc29ebd4e02c8bc5c1945f1d2e6be5927ec12c06d89b03ef2a4def34bf823 @@ -2068,8 +2068,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 7e2c2b1cee760af68cf303ce9ec1babbaf607fe54e043893c046d2d37cd0ab46 -R 2a126fc6537ab2e89822c6a7f6e0e7f6 +P 5dae897431a0a9dbb354c4a8a48f935ea7438035d96f90b83dd81eae434c8277 +R 1467e785cae819526435dd09310bb846 U drh -Z fcf39436102b8d866db8404789c74929 +Z 2f70947bee8313ef1d318a607ced119d # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 1f17c5cde0..dc7caf6eda 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5dae897431a0a9dbb354c4a8a48f935ea7438035d96f90b83dd81eae434c8277 \ No newline at end of file +5bc17cbccdd369486fca049be9d7457e18f162c0e2f5475809ffc8f01c5fa9d2 \ No newline at end of file diff --git a/src/vdbeblob.c b/src/vdbeblob.c index a18ee05b52..32987da137 100644 --- a/src/vdbeblob.c +++ b/src/vdbeblob.c @@ -342,7 +342,7 @@ blob_open_out: if( pBlob && pBlob->pStmt ) sqlite3VdbeFinalize((Vdbe *)pBlob->pStmt); sqlite3DbFree(db, pBlob); } - sqlite3ErrorWithMsg(db, rc, (zErr ? "%s" : 0), zErr); + sqlite3ErrorWithMsg(db, rc, (zErr ? "%s" : (char*)0), zErr); sqlite3DbFree(db, zErr); sqlite3ParseObjectReset(&sParse); rc = sqlite3ApiExit(db, rc); @@ -501,7 +501,7 @@ int sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iRow){ ((Vdbe*)p->pStmt)->rc = SQLITE_OK; rc = blobSeekToRow(p, iRow, &zErr); if( rc!=SQLITE_OK ){ - sqlite3ErrorWithMsg(db, rc, (zErr ? "%s" : 0), zErr); + sqlite3ErrorWithMsg(db, rc, (zErr ? "%s" : (char*)0), zErr); sqlite3DbFree(db, zErr); } assert( rc!=SQLITE_SCHEMA ); From 28f4e7b28692de9d98b07b4ad2cdc91f78d23422 Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 10 May 2023 16:04:04 +0000 Subject: [PATCH 22/35] Enhance the split-sqlite3c.tcl script so that it uses single-character extensions on subordinate source files, even when the number of subordinates exceeds 9. This is not yet needed, but might be soon. FossilOrigin-Name: 4150e416263f24efcbfe68d5b1e15ec7e79df41dff0b6dfdc59f06ee9e205049 --- manifest | 12 ++++++------ manifest.uuid | 2 +- tool/split-sqlite3c.tcl | 9 ++++++++- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index b972a25a4c..0f222b9f65 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sharmless\scompiler\swarnings\sfrom\sthe\sCBMC\scompiler. -D 2023-05-10T13:56:32.946 +C Enhance\sthe\ssplit-sqlite3c.tcl\sscript\sso\sthat\sit\suses\ssingle-character\nextensions\son\ssubordinate\ssource\sfiles,\seven\swhen\sthe\snumber\sof\ssubordinates\nexceeds\s9.\s\sThis\sis\snot\syet\sneeded,\sbut\smight\sbe\ssoon. +D 2023-05-10T16:04:04.601 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -2031,7 +2031,7 @@ F tool/speedtest16.c ecb6542862151c3e6509bbc00509b234562ae81e F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 7ce07da76b5e745783e703a834417d725b7d45fd -F tool/split-sqlite3c.tcl 6b02bb5444cabc477c0d6eb3ecedcc827063e9ac41954831e90c72c481aa9d30 +F tool/split-sqlite3c.tcl 5aa60643afca558bc732b1444ae81a522326f91e1dc5665b369c54f09e20de60 F tool/sqldiff.c 4f967c199c5f93eec64978e3a625d6c07fb1162212b1d48f65740d9eb4607eee F tool/sqlite3_analyzer.c.in f88615bf33098945e0a42f17733f472083d150b58bdaaa5555a7129d0a51621c F tool/sqltclsh.c.in 1bcc2e9da58fadf17b0bf6a50e68c1159e602ce057210b655d50bad5aaaef898 @@ -2068,8 +2068,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 5dae897431a0a9dbb354c4a8a48f935ea7438035d96f90b83dd81eae434c8277 -R 1467e785cae819526435dd09310bb846 +P 5bc17cbccdd369486fca049be9d7457e18f162c0e2f5475809ffc8f01c5fa9d2 +R 7825f403dc8e20a9b2cba11eaedce32c U drh -Z 2f70947bee8313ef1d318a607ced119d +Z 0780e89a4d80820b94f58c1bb18accfa # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index dc7caf6eda..d70a551f8d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5bc17cbccdd369486fca049be9d7457e18f162c0e2f5475809ffc8f01c5fa9d2 \ No newline at end of file +4150e416263f24efcbfe68d5b1e15ec7e79df41dff0b6dfdc59f06ee9e205049 \ No newline at end of file diff --git a/tool/split-sqlite3c.tcl b/tool/split-sqlite3c.tcl index 9751e7de9c..0308431dab 100644 --- a/tool/split-sqlite3c.tcl +++ b/tool/split-sqlite3c.tcl @@ -48,7 +48,14 @@ set filecnt 0 proc write_one_file {content} { global filecnt incr filecnt - set out [open sqlite3-$filecnt.c w] + set label $filecnt + if {$filecnt>9} { + set label [string index ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnop \ + [expr {$filecnt-10}]] + } else { + set label $filecnt + } + set out [open sqlite3-$label.c w] fconfigure $out -translation lf puts -nonewline $out $content close $out From 418d212308b47d3b02662852accedf19366a80f3 Mon Sep 17 00:00:00 2001 From: dan Date: Thu, 11 May 2023 17:25:14 +0000 Subject: [PATCH 23/35] Fix the rbu_exclusive_checkpoint=1 option so that it works with a zipvfs database in pass-through mode. FossilOrigin-Name: caca67d30670913914335aa3edff784e1c3d26aed70ae32efb5607ccf31ad142 --- ext/rbu/sqlite3rbu.c | 11 +++++++++-- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/ext/rbu/sqlite3rbu.c b/ext/rbu/sqlite3rbu.c index f65ef83864..15b05cede1 100644 --- a/ext/rbu/sqlite3rbu.c +++ b/ext/rbu/sqlite3rbu.c @@ -3156,11 +3156,18 @@ static int rbuLockDatabase(sqlite3 *db){ sqlite3_file *fd = 0; sqlite3_file_control(db, "main", RBU_ZIPVFS_CTRL_FILE_POINTER, &fd); - if( fd==0 ){ + if( fd ){ + sqlite3_file_control(db, "main", SQLITE_FCNTL_FILE_POINTER, &fd); + rc = fd->pMethods->xLock(fd, SQLITE_LOCK_SHARED); + if( rc==SQLITE_OK ){ + rc = fd->pMethods->xUnlock(fd, SQLITE_LOCK_NONE); + } + sqlite3_file_control(db, "main", RBU_ZIPVFS_CTRL_FILE_POINTER, &fd); + }else{ sqlite3_file_control(db, "main", SQLITE_FCNTL_FILE_POINTER, &fd); } - if( fd->pMethods ){ + if( rc==SQLITE_OK && fd->pMethods ){ rc = fd->pMethods->xLock(fd, SQLITE_LOCK_SHARED); if( rc==SQLITE_OK ){ rc = fd->pMethods->xLock(fd, SQLITE_LOCK_EXCLUSIVE); diff --git a/manifest b/manifest index 0f222b9f65..777535ce40 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enhance\sthe\ssplit-sqlite3c.tcl\sscript\sso\sthat\sit\suses\ssingle-character\nextensions\son\ssubordinate\ssource\sfiles,\seven\swhen\sthe\snumber\sof\ssubordinates\nexceeds\s9.\s\sThis\sis\snot\syet\sneeded,\sbut\smight\sbe\ssoon. -D 2023-05-10T16:04:04.601 +C Fix\sthe\srbu_exclusive_checkpoint=1\soption\sso\sthat\sit\sworks\swith\sa\szipvfs\sdatabase\sin\spass-through\smode. +D 2023-05-11T17:25:14.597 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -371,7 +371,7 @@ F ext/rbu/rbuvacuum.test 542561741ff2b262e3694bc6012b44694ee62c545845319a06f3237 F ext/rbu/rbuvacuum2.test ae097d04feb041446a74fac94b24bffeb3fdd60e32b848c5611e507ab702b81b F ext/rbu/rbuvacuum3.test 3ce42695fdf21aaa3499e857d7d4253bc499ad759bcd6c9362042c13cd37d8de F ext/rbu/rbuvacuum4.test ffccd22f67e2d0b380d2889685742159dfe0d19a3880ca3d2d1d69eefaebb205 -F ext/rbu/sqlite3rbu.c 71a7f0dea3a846ff7c2499dc34a2528f5ddcbe23e2c54dc3cd1fa4d933377c6d +F ext/rbu/sqlite3rbu.c d4ddf8f0e93772556e452a6c2814063cf47efb760a0834391a9d0cd9859fa4b9 F ext/rbu/sqlite3rbu.h 9d923eb135c5d04aa6afd7c39ca47b0d1d0707c100e02f19fdde6a494e414304 F ext/rbu/test_rbu.c ee6ede75147bc081fe9bc3931e6b206277418d14d3fbceea6fdc6216d9b47055 F ext/recover/dbdata.c 31d580785cf14eb3c20ed6fbb421a10a66569858f837928e6b326088c38d4c72 @@ -2068,8 +2068,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 5bc17cbccdd369486fca049be9d7457e18f162c0e2f5475809ffc8f01c5fa9d2 -R 7825f403dc8e20a9b2cba11eaedce32c -U drh -Z 0780e89a4d80820b94f58c1bb18accfa +P 4150e416263f24efcbfe68d5b1e15ec7e79df41dff0b6dfdc59f06ee9e205049 +R abf708c32a6eaa48f7e9ca50034b97cf +U dan +Z 02eedd6b9e26cc67afc3a09e72d02f3e # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index d70a551f8d..1454769561 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4150e416263f24efcbfe68d5b1e15ec7e79df41dff0b6dfdc59f06ee9e205049 \ No newline at end of file +caca67d30670913914335aa3edff784e1c3d26aed70ae32efb5607ccf31ad142 \ No newline at end of file From 5ca40d84ad0fdb44d2c1eb9fbb855e9328dd318a Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 11 May 2023 18:03:11 +0000 Subject: [PATCH 24/35] Fix a minor typo in a comment. No code changes. FossilOrigin-Name: 607cfb5bc5c0fb8b789944c2326cfdebf0629e45fbf0a61dd5f667ed685a1bbe --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/select.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 777535ce40..aada83d7c6 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\srbu_exclusive_checkpoint=1\soption\sso\sthat\sit\sworks\swith\sa\szipvfs\sdatabase\sin\spass-through\smode. -D 2023-05-11T17:25:14.597 +C Fix\sa\sminor\stypo\sin\sa\scomment.\s\sNo\scode\schanges. +D 2023-05-11T18:03:11.662 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -635,7 +635,7 @@ F src/printf.c b9320cdbeca0b336c3f139fd36dd121e4167dd62b35fbe9ccaa9bab44c0af38d F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 3e53e02ce87c9582bd7e7d22f13f4094a271678d9dc72820fa257a2abb5e4032 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 -F src/select.c 46ff52b69d3a85cb71663e48ca2ce6fb8ca35708cb80dda0e4abc4225f2c1d88 +F src/select.c 12aa3168be4ff175702fe0ebeaf544312be22d275d378a28e7b2fad32d552d36 F src/shell.c.in 8cfc51a5711df05ea0e8a4fbbe20117eb629233f0e92ebea21c2e7dc717ec3d9 F src/sqlite.h.in 27ca1d4b2eda8feee468af5735182390e8fe4696522751eec0136d17323201ad F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -2068,8 +2068,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 4150e416263f24efcbfe68d5b1e15ec7e79df41dff0b6dfdc59f06ee9e205049 -R abf708c32a6eaa48f7e9ca50034b97cf -U dan -Z 02eedd6b9e26cc67afc3a09e72d02f3e +P caca67d30670913914335aa3edff784e1c3d26aed70ae32efb5607ccf31ad142 +R fd8d4680e1e19432e6f44d2411716e16 +U drh +Z e79912786f3f45d1ec22559d3cd92d52 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 1454769561..9649ad4ed3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -caca67d30670913914335aa3edff784e1c3d26aed70ae32efb5607ccf31ad142 \ No newline at end of file +607cfb5bc5c0fb8b789944c2326cfdebf0629e45fbf0a61dd5f667ed685a1bbe \ No newline at end of file diff --git a/src/select.c b/src/select.c index 43dec7d208..f2bf3f3030 100644 --- a/src/select.c +++ b/src/select.c @@ -7234,7 +7234,7 @@ int sqlite3Select( pTabList->a[0].fg.jointype & JT_LTORJ); } - /* No futher action if this term of the FROM clause is no a subquery */ + /* No futher action if this term of the FROM clause is not a subquery */ if( pSub==0 ) continue; /* Catch mismatch in the declared columns of a view and the number of From 78b404d9763967dbb787d8dd11c03b8494cd5097 Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 11 May 2023 21:15:55 +0000 Subject: [PATCH 25/35] Add [/info/cec6a06508239c09e363?ln=5525-5531|restriction (5)] to the omit-noop-join optimization. Fix for the issue reported by [forum/forumpost/49f2c7f690|forum post 49f2c7f690]. FossilOrigin-Name: 3e9c9bbdb59b9d500ff218db538c047c83da7ac18ebb95c3ee7629ab15e0b43a --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/where.c | 15 +++++++++++++++ test/join.test | 26 ++++++++++++++++++++++++++ 4 files changed, 49 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index aada83d7c6..d6238b1142 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sminor\stypo\sin\sa\scomment.\s\sNo\scode\schanges. -D 2023-05-11T18:03:11.662 +C Add\s[/info/cec6a06508239c09e363?ln=5525-5531|restriction\s(5)]\sto\sthe\nomit-noop-join\soptimization.\s\sFix\sfor\sthe\sissue\sreported\sby\n[forum/forumpost/49f2c7f690|forum\spost\s49f2c7f690]. +D 2023-05-11T21:15:55.618 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -720,7 +720,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 F src/wal.c 7a65f64bfe4a783c5e2df73ffb0efc383dec934dee9e3ac706b2eeb3631d17ac F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a F src/walker.c f890a3298418d7cba3b69b8803594fdc484ea241206a8dfa99db6dd36f8cbb3b -F src/where.c 324445b046167c86c6fb4c94d4be816edcbbbf6df17fd94f1def2c3dd27520d5 +F src/where.c cec6a06508239c09e3637b52a12484fc9a84dc4302d45b4a311cce2ea6e4fd47 F src/whereInt.h e25203e5bfee149f5f1225ae0166cfb4f1e65490c998a024249e98bb0647377c F src/wherecode.c b300db0bcd84ad6c2642bf3f509f92fad7b7d697b9856b64dd66d692d184d054 F src/whereexpr.c 22cf19b0ececeaf838daed1039c5231a8778784eba5ad67b991442a23473fd3f @@ -1230,7 +1230,7 @@ F test/ioerr4.test f130fe9e71008577b342b8874d52984bd04ede2c F test/ioerr5.test 2edfa4fb0f896f733071303b42224df8bedd9da4 F test/ioerr6.test a395a6ab144b26a9e3e21059a1ab6a7149cca65b F test/istrue.test e7f285bb70282625c258e866ce6337d4c762922f5a300e1b50f958aef6e7d9c9 -F test/join.test aea7a4f55b2d9eb8ef3434ea78f55b15bd688ab6136a11105c9c52f77424f199 +F test/join.test f7abfef3faeaf2800308872e33a57e5b6e4a2b44fb8c6b90c6068412e71a6cf4 F test/join2.test 8561fe82ce434ac96de91544072e578dc2cadddf2d9bc9cd802f866a9b92502e F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0 F test/join4.test 1a352e4e267114444c29266ce79e941af5885916 @@ -2068,8 +2068,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 caca67d30670913914335aa3edff784e1c3d26aed70ae32efb5607ccf31ad142 -R fd8d4680e1e19432e6f44d2411716e16 +P 607cfb5bc5c0fb8b789944c2326cfdebf0629e45fbf0a61dd5f667ed685a1bbe +R 8116201afc21cb8eec37acb602fb93db U drh -Z e79912786f3f45d1ec22559d3cd92d52 +Z 3170c3485800599271837b45b05d7827 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 9649ad4ed3..a8d9fe99ec 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -607cfb5bc5c0fb8b789944c2326cfdebf0629e45fbf0a61dd5f667ed685a1bbe \ No newline at end of file +3e9c9bbdb59b9d500ff218db538c047c83da7ac18ebb95c3ee7629ab15e0b43a \ No newline at end of file diff --git a/src/where.c b/src/where.c index 527e1a3a67..cb41f0f3a3 100644 --- a/src/where.c +++ b/src/where.c @@ -5522,6 +5522,13 @@ static void showAllWhereLoops(WhereInfo *pWInfo, WhereClause *pWC){ ** at most a single row. ** 4) The table must not be referenced by any part of the query apart ** from its own USING or ON clause. +** 5) The table must not have an inner-join ON or USING clause if there is +** a RIGHT JOIN anywhere in the query. Otherwise the ON/USING clause +** might move from the right side to the left side of the RIGHT JOIN. +** Note: Due to (2), this condition can only arise if the table is +** the right-most table of a subquery that was flattened into the +** main query and that subquery was the right-hand operand of an +** inner join that held an ON or USING clause. ** ** For example, given: ** @@ -5547,6 +5554,7 @@ static SQLITE_NOINLINE Bitmask whereOmitNoopJoin( ){ int i; Bitmask tabUsed; + int hasRightJoin; /* Preconditions checked by the caller */ assert( pWInfo->nLevel>=2 ); @@ -5561,6 +5569,7 @@ static SQLITE_NOINLINE Bitmask whereOmitNoopJoin( if( pWInfo->pOrderBy ){ tabUsed |= sqlite3WhereExprListUsage(&pWInfo->sMaskSet, pWInfo->pOrderBy); } + hasRightJoin = (pWInfo->pTabList->a[0].fg.jointype & JT_LTORJ)!=0; for(i=pWInfo->nLevel-1; i>=1; i--){ WhereTerm *pTerm, *pEnd; SrcItem *pItem; @@ -5583,6 +5592,12 @@ static SQLITE_NOINLINE Bitmask whereOmitNoopJoin( break; } } + if( hasRightJoin + && ExprHasProperty(pTerm->pExpr, EP_InnerON) + && pTerm->pExpr->w.iJoin==pItem->iCursor + ){ + break; /* restriction (5) */ + } } if( pTerm drop loop %c not used\n", pLoop->cId)); diff --git a/test/join.test b/test/join.test index 44bfb3bef2..aa526aeb29 100644 --- a/test/join.test +++ b/test/join.test @@ -1263,4 +1263,30 @@ do_execsql_test join-29.3 { SELECT * FROM t1 JOIN v2 ON false FULL OUTER JOIN t0 ON true; } {NULL NULL 1} +# 2023-05-11 https://sqlite.org/forum/forumpost/49f2c7f690 +# Verify that omit-noop-join optimization does not apply if the table +# to be omitted has an inner-join constraint and there is a RIGHT JOIN +# anywhere in the query. +# +reset_db +db null NULL +do_execsql_test join-30.1 { + CREATE TABLE t0(z INT); INSERT INTO t0 VALUES(1),(2); + CREATE TABLE t1(a INT); INSERT INTO t1 VALUES(1); + CREATE TABLE t2(b INT); INSERT INTO t2 VALUES(2); + CREATE TABLE t3(c INT, d INT); INSERT INTO t3 VALUES(3,4); + CREATE TABLE t4(e INT); INSERT INTO t4 VALUES(5); + CREATE VIEW v5(x,y) AS SELECT c, d FROM t3 LEFT JOIN t4 ON false; +} +do_execsql_test join-30.2 { + SELECT DISTINCT a, b + FROM t1 RIGHT JOIN t2 ON a=b LEFT JOIN v5 ON false + WHERE x <= y; +} {} +do_execsql_test join-30.3 { + SELECT DISTINCT a, b + FROM t0 JOIN t1 ON z=a RIGHT JOIN t2 ON a=b LEFT JOIN v5 ON false + WHERE x <= y; +} {} + finish_test From 6b429dc11bfdc02c500ff0543ebb16f5f09185df Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 12 May 2023 10:52:12 +0000 Subject: [PATCH 26/35] Ensure that all prepared statements are expired and forced to reprepare whenever the database text encoding changes. [forum:/forumpost/43cbfc4d23|Forum post 43cbfc4d23]. FossilOrigin-Name: 469718f106e1cfa7f8f4714a9e743108c361af81e0258061c2b76880a7c352ae --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/callback.c | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index d6238b1142..0d7f039fcf 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\s[/info/cec6a06508239c09e363?ln=5525-5531|restriction\s(5)]\sto\sthe\nomit-noop-join\soptimization.\s\sFix\sfor\sthe\sissue\sreported\sby\n[forum/forumpost/49f2c7f690|forum\spost\s49f2c7f690]. -D 2023-05-11T21:15:55.618 +C Ensure\sthat\sall\sprepared\sstatements\sare\sexpired\sand\sforced\sto\sreprepare\nwhenever\sthe\sdatabase\stext\sencoding\schanges.\n[forum:/forumpost/43cbfc4d23|Forum\spost\s43cbfc4d23]. +D 2023-05-12T10:52:12.727 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -578,7 +578,7 @@ F src/btree.c ecaaf8d57cd8b5f4e3167bd59cf61cef031b4b2ee606e6afa11b96a60a14f9ef F src/btree.h aa354b9bad4120af71e214666b35132712b8f2ec11869cb2315c52c81fad45cc F src/btreeInt.h a9ae91868acc4b3146d47ae2a072aac2cf41ecb7386015752160c8e1a212d9f2 F src/build.c 7a7217f75f202eff03617ca447bb9c3bc07d5af49da1d3cff2b1a88e8e394686 -F src/callback.c 4cd7225b26a97f7de5fee5ae10464bed5a78f2adefe19534cc2095b3a8ca484a +F src/callback.c db3a45e376deff6a16c0058163fe0ae2b73a2945f3f408ca32cf74960b28d490 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 20507cc0b0a6c19cd882fcd0eaeda32ae6a4229fb4b024cfdf3183043d9b703d F src/date.c aca9e0c08b400b21238b609aea7c09585396cd770985cf8f475560f69222dad3 @@ -2068,8 +2068,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 607cfb5bc5c0fb8b789944c2326cfdebf0629e45fbf0a61dd5f667ed685a1bbe -R 8116201afc21cb8eec37acb602fb93db +P 3e9c9bbdb59b9d500ff218db538c047c83da7ac18ebb95c3ee7629ab15e0b43a +R 32ad4902f78b74a8bac6032497ea2fb1 U drh -Z 3170c3485800599271837b45b05d7827 +Z a23c90278df9cc42fb79b81cf5a3b871 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index a8d9fe99ec..91b41e8981 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3e9c9bbdb59b9d500ff218db538c047c83da7ac18ebb95c3ee7629ab15e0b43a \ No newline at end of file +469718f106e1cfa7f8f4714a9e743108c361af81e0258061c2b76880a7c352ae \ No newline at end of file diff --git a/src/callback.c b/src/callback.c index 6cbe8e5847..c36d51a4ec 100644 --- a/src/callback.c +++ b/src/callback.c @@ -185,6 +185,7 @@ void sqlite3SetTextEncoding(sqlite3 *db, u8 enc){ ** strings is BINARY. */ db->pDfltColl = sqlite3FindCollSeq(db, enc, sqlite3StrBINARY, 0); + sqlite3ExpirePreparedStatements(db, 1); } /* From 61791c6f4c7188db804d4f4cd257f9e6c977415f Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 12 May 2023 12:45:56 +0000 Subject: [PATCH 27/35] Fix harmless typos in comments. FossilOrigin-Name: 607c3efbe0293d7c11a955a9f21e24fb9f7f1bb758e13e60f4ba0cc0ac8b900c --- doc/lemon.html | 2 +- manifest | 14 +++++++------- manifest.uuid | 2 +- src/btreeInt.h | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/doc/lemon.html b/doc/lemon.html index 324b3f3319..16aea8784b 100644 --- a/doc/lemon.html +++ b/doc/lemon.html @@ -322,7 +322,7 @@ These are the steps:
  • Declare a local variable of type "yyParser"
  • Initialize the variable using ParseInit() -
  • Pass a pointer to the variable in calls ot Parse() +
  • Pass a pointer to the variable in calls to Parse()
  • Deallocate substructure in the parse variable using ParseFinalize().
diff --git a/manifest b/manifest index 0d7f039fcf..abb761d81e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Ensure\sthat\sall\sprepared\sstatements\sare\sexpired\sand\sforced\sto\sreprepare\nwhenever\sthe\sdatabase\stext\sencoding\schanges.\n[forum:/forumpost/43cbfc4d23|Forum\spost\s43cbfc4d23]. -D 2023-05-12T10:52:12.727 +C Fix\sharmless\stypos\sin\scomments. +D 2023-05-12T12:45:56.781 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -38,7 +38,7 @@ F configure.ac 4654d32ac0a0d0b48f1e1e79bdc3d777b723cf2f63c33eb1d7c4ed8b435938e8 F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad F doc/F2FS.txt c1d4a0ae9711cfe0e1d8b019d154f1c29e0d3abfe820787ba1e9ed7691160fcd F doc/json-enhancements.md e356fc834781f1f1aa22ee300027a270b2c960122468499bf347bb123ce1ea4f -F doc/lemon.html efc0cd2345d66905505d98f862e1c571512def0ceb5b016cb658fd4918eb76a3 +F doc/lemon.html d2862dbef72496e87f7996f37e814b146848190a742c12161d13fd15346051b0 F doc/pager-invariants.txt 27fed9a70ddad2088750c4a2b493b63853da2710 F doc/trusted-schema.md 33625008620e879c7bcfbbfa079587612c434fa094d338b08242288d358c3e8a F doc/vdbesort-memory.md 4da2639c14cd24a31e0af694b1a8dd37eaf277aff3867e9a8cc14046bc49df56 @@ -576,7 +576,7 @@ F src/bitvec.c 7c849aac407230278445cb069bebc5f89bf2ddd87c5ed9459b070a9175707b3d F src/btmutex.c 6ffb0a22c19e2f9110be0964d0731d2ef1c67b5f7fabfbaeb7b9dabc4b7740ca F src/btree.c ecaaf8d57cd8b5f4e3167bd59cf61cef031b4b2ee606e6afa11b96a60a14f9ef F src/btree.h aa354b9bad4120af71e214666b35132712b8f2ec11869cb2315c52c81fad45cc -F src/btreeInt.h a9ae91868acc4b3146d47ae2a072aac2cf41ecb7386015752160c8e1a212d9f2 +F src/btreeInt.h b900603c8956bdeb313841f9b67bdeceef32c64d962d35477c07ec25e8cf0f9b F src/build.c 7a7217f75f202eff03617ca447bb9c3bc07d5af49da1d3cff2b1a88e8e394686 F src/callback.c db3a45e376deff6a16c0058163fe0ae2b73a2945f3f408ca32cf74960b28d490 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e @@ -2068,8 +2068,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 3e9c9bbdb59b9d500ff218db538c047c83da7ac18ebb95c3ee7629ab15e0b43a -R 32ad4902f78b74a8bac6032497ea2fb1 +P 469718f106e1cfa7f8f4714a9e743108c361af81e0258061c2b76880a7c352ae +R 8b088e730cd28a75803b13b2c2a16a8a U drh -Z a23c90278df9cc42fb79b81cf5a3b871 +Z 9e1ace85a6514136d51fb08d6c7d88e6 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 91b41e8981..e781565559 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -469718f106e1cfa7f8f4714a9e743108c361af81e0258061c2b76880a7c352ae \ No newline at end of file +607c3efbe0293d7c11a955a9f21e24fb9f7f1bb758e13e60f4ba0cc0ac8b900c \ No newline at end of file diff --git a/src/btreeInt.h b/src/btreeInt.h index 35e6b6aea8..6d3578422f 100644 --- a/src/btreeInt.h +++ b/src/btreeInt.h @@ -556,7 +556,7 @@ struct BtCursor { #define BTCF_WriteFlag 0x01 /* True if a write cursor */ #define BTCF_ValidNKey 0x02 /* True if info.nKey is valid */ #define BTCF_ValidOvfl 0x04 /* True if aOverflow is valid */ -#define BTCF_AtLast 0x08 /* Cursor is pointing ot the last entry */ +#define BTCF_AtLast 0x08 /* Cursor is pointing to the last entry */ #define BTCF_Incrblob 0x10 /* True if an incremental I/O handle */ #define BTCF_Multiple 0x20 /* Maybe another cursor on the same btree */ #define BTCF_Pinned 0x40 /* Cursor is busy and cannot be moved */ From 26a3e5664926abf2bb5cd9587256655dec2730fc Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 12 May 2023 12:57:44 +0000 Subject: [PATCH 28/35] Remove a stray CR from end of line in a source file. FossilOrigin-Name: 48139fb904de4b7b383e7f8c29bed83ad878eb22b1dd773c366a0aee74613d23 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/expr.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index abb761d81e..2fd043f352 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sharmless\stypos\sin\scomments. -D 2023-05-12T12:45:56.781 +C Remove\sa\sstray\sCR\sfrom\send\sof\sline\sin\sa\ssource\sfile. +D 2023-05-12T12:57:44.642 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -585,7 +585,7 @@ F src/date.c aca9e0c08b400b21238b609aea7c09585396cd770985cf8f475560f69222dad3 F src/dbpage.c f3eea5f7ec47e09ee7da40f42b25092ecbe961fc59566b8e5f705f34335b2387 F src/dbstat.c ec92074baa61d883de58c945162d9e666c13cd7cf3a23bc38b4d1c4d0b2c2bef F src/delete.c a9c6d3f51c0a31e9b831e0a0580a98d702904b42d216fee530940e40dec34873 -F src/expr.c 6b04cccecd6f3342673fafd56033c7e40a3ff1531a6550d0a0af36bac8e824a7 +F src/expr.c b239be118a24f1520b44efb850cd1754854606bccb1a5f9dceeb0ff48f6bad79 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 03c134cc8bffe54835f742ddea0b72ebfc8f6b32773d175c71b8afeea6cb5c83 F src/func.c 03e6b501f3056d0ba398bda17df938b2b566aa0b3ca7e1942a3cd1925d04ec36 @@ -2068,8 +2068,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 469718f106e1cfa7f8f4714a9e743108c361af81e0258061c2b76880a7c352ae -R 8b088e730cd28a75803b13b2c2a16a8a +P 607c3efbe0293d7c11a955a9f21e24fb9f7f1bb758e13e60f4ba0cc0ac8b900c +R 3bfe30c59997b7ecaaf967f6c65fb515 U drh -Z 9e1ace85a6514136d51fb08d6c7d88e6 +Z 4dfb7243a06de6c1bb7faa74afa633d4 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index e781565559..4535d4e338 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -607c3efbe0293d7c11a955a9f21e24fb9f7f1bb758e13e60f4ba0cc0ac8b900c \ No newline at end of file +48139fb904de4b7b383e7f8c29bed83ad878eb22b1dd773c366a0aee74613d23 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index acd86ac1c8..52fc791c6f 100644 --- a/src/expr.c +++ b/src/expr.c @@ -3847,7 +3847,7 @@ void sqlite3ExprCodeGeneratedColumn( int nErr = pParse->nErr; assert( v!=0 ); assert( pParse->iSelfTab!=0 ); - if( pParse->iSelfTab>0 ){ + if( pParse->iSelfTab>0 ){ iAddr = sqlite3VdbeAddOp3(v, OP_IfNullRow, pParse->iSelfTab-1, 0, regOut); }else{ iAddr = 0; From 69bc8c70f9a991cc4bd603ed17c96a6681f18e62 Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 12 May 2023 13:20:57 +0000 Subject: [PATCH 29/35] Ensure the _O_U16TEXT is defined for Windows builds of the CLI. [forum:/forumpost/c80aa942dc6bf2|Forum post c80aa942dc6bf2]. FossilOrigin-Name: 504effa89b48c0dc6cd12b3eaf6017be3f32017c601af17759a3cc185346d868 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/shell.c.in | 4 ++++ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 2fd043f352..be8887dde6 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\sa\sstray\sCR\sfrom\send\sof\sline\sin\sa\ssource\sfile. -D 2023-05-12T12:57:44.642 +C Ensure\sthe\s_O_U16TEXT\sis\sdefined\sfor\sWindows\sbuilds\sof\sthe\sCLI.\n[forum:/forumpost/c80aa942dc6bf2|Forum\spost\sc80aa942dc6bf2]. +D 2023-05-12T13:20:57.273 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -636,7 +636,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 3e53e02ce87c9582bd7e7d22f13f4094a271678d9dc72820fa257a2abb5e4032 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/select.c 12aa3168be4ff175702fe0ebeaf544312be22d275d378a28e7b2fad32d552d36 -F src/shell.c.in 8cfc51a5711df05ea0e8a4fbbe20117eb629233f0e92ebea21c2e7dc717ec3d9 +F src/shell.c.in f2878df634b9d13ef7944f0d2d516d0b1abaf69302c26b4a8f1878b8be9f8411 F src/sqlite.h.in 27ca1d4b2eda8feee468af5735182390e8fe4696522751eec0136d17323201ad F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h da473ce2b3d0ae407a6300c4a164589b9a6bfdbec9462688a8593ff16f3bb6e4 @@ -2068,8 +2068,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 607c3efbe0293d7c11a955a9f21e24fb9f7f1bb758e13e60f4ba0cc0ac8b900c -R 3bfe30c59997b7ecaaf967f6c65fb515 +P 48139fb904de4b7b383e7f8c29bed83ad878eb22b1dd773c366a0aee74613d23 +R 48448dc19b809c692b0d7c49b41acf2c U drh -Z 4dfb7243a06de6c1bb7faa74afa633d4 +Z 99702f4eff9217b484a47a30f0a1c45c # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 4535d4e338..6425bb986f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -48139fb904de4b7b383e7f8c29bed83ad878eb22b1dd773c366a0aee74613d23 \ No newline at end of file +504effa89b48c0dc6cd12b3eaf6017be3f32017c601af17759a3cc185346d868 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index 2c5c59f231..b29e402913 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -605,6 +605,10 @@ static struct ConsoleState { DWORD consoleMode; /* Console mode upon shell start */ } conState = { 0, 0, 0, 0, INVALID_HANDLE_VALUE, 0 }; +#ifndef _O_U16TEXT /* For build environments lacking this constant: */ +# define _O_U16TEXT 0x20000 +#endif + /* ** Prepare console, (if known to be a WIN32 console), for UTF-8 ** input (from either typing or suitable paste operations) and for From fb74019a143dae9d20ba408ac8da74818cea6776 Mon Sep 17 00:00:00 2001 From: larrybr Date: Fri, 12 May 2023 14:51:00 +0000 Subject: [PATCH 30/35] Fix unlikely strange result of CLI edit(). FossilOrigin-Name: ab3797e844c97fed344b36f30cfb788aca9e0d68c574fb833712219eb712db44 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/shell.c.in | 1 + 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index be8887dde6..4d51e52390 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Ensure\sthe\s_O_U16TEXT\sis\sdefined\sfor\sWindows\sbuilds\sof\sthe\sCLI.\n[forum:/forumpost/c80aa942dc6bf2|Forum\spost\sc80aa942dc6bf2]. -D 2023-05-12T13:20:57.273 +C Fix\sunlikely\sstrange\sresult\sof\sCLI\sedit(). +D 2023-05-12T14:51:00.610 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -636,7 +636,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 3e53e02ce87c9582bd7e7d22f13f4094a271678d9dc72820fa257a2abb5e4032 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/select.c 12aa3168be4ff175702fe0ebeaf544312be22d275d378a28e7b2fad32d552d36 -F src/shell.c.in f2878df634b9d13ef7944f0d2d516d0b1abaf69302c26b4a8f1878b8be9f8411 +F src/shell.c.in 1e18312f58d365042036fc9d19dcef416074f783702b168f07814332c2268ee0 F src/sqlite.h.in 27ca1d4b2eda8feee468af5735182390e8fe4696522751eec0136d17323201ad F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h da473ce2b3d0ae407a6300c4a164589b9a6bfdbec9462688a8593ff16f3bb6e4 @@ -2068,8 +2068,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 48139fb904de4b7b383e7f8c29bed83ad878eb22b1dd773c366a0aee74613d23 -R 48448dc19b809c692b0d7c49b41acf2c -U drh -Z 99702f4eff9217b484a47a30f0a1c45c +P 504effa89b48c0dc6cd12b3eaf6017be3f32017c601af17759a3cc185346d868 +R 7b322be7a0b0968d044fb9694e50e6d3 +U larrybr +Z be57394b3dc65bf45231fa83c98fd2dc # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 6425bb986f..5073c7a014 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -504effa89b48c0dc6cd12b3eaf6017be3f32017c601af17759a3cc185346d868 \ No newline at end of file +ab3797e844c97fed344b36f30cfb788aca9e0d68c574fb833712219eb712db44 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index b29e402913..ccaed896d9 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -1776,6 +1776,7 @@ static void editFunc( }else{ /* If the file did not originally contain \r\n then convert any new ** \r\n back into \n */ + p[sz] = 0; for(i=j=0; i Date: Fri, 12 May 2023 15:45:34 +0000 Subject: [PATCH 31/35] Make the regexp extension more robust against OOM errors during compilation of the recognizer engine. [forum:/forumpost/f50aecd5e8|Forum post f50aecd5e8]. FossilOrigin-Name: 0772ddf56713d013cd1bd44f9c75977ca14f852e3a8f038b0a6b9814f6519d79 --- ext/misc/regexp.c | 2 +- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ext/misc/regexp.c b/ext/misc/regexp.c index 5da80dd924..743c262e0d 100644 --- a/ext/misc/regexp.c +++ b/ext/misc/regexp.c @@ -619,7 +619,7 @@ static const char *re_subcompile_string(ReCompiled *p){ if( rePeek(p)==']' ){ p->sIn.i++; break; } } if( c==0 ) return "unclosed '['"; - p->aArg[iFirst] = p->nState - iFirst; + if( p->nState>iFirst ) p->aArg[iFirst] = p->nState - iFirst; break; } case '\\': { diff --git a/manifest b/manifest index 4d51e52390..b708b2f95c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sunlikely\sstrange\sresult\sof\sCLI\sedit(). -D 2023-05-12T14:51:00.610 +C Make\sthe\sregexp\sextension\smore\srobust\sagainst\sOOM\serrors\sduring\scompilation\nof\sthe\srecognizer\sengine.\n[forum:/forumpost/f50aecd5e8|Forum\spost\sf50aecd5e8]. +D 2023-05-12T15:45:34.949 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -303,7 +303,7 @@ F ext/misc/percentile.c b9086e223d583bdaf8cb73c98a6539d501a2fc4282654adbfea57645 F ext/misc/prefixes.c 0f4f8cff5aebc00a7e3ac4021fd59cfe1a8e17c800ceaf592859ecb9cbc38196 F ext/misc/qpvtab.c 09738419e25f603a35c0ac8bd0a04daab794f48d08a9bc07a6085b9057b99009 F ext/misc/randomjson.c 7dd13664155319d47b9facc0d8dbf45e13062966a47168e54e3f26d48240d7ea -F ext/misc/regexp.c f50ab59bfa8934b7ed98de069d2c74c187f2ef523fb09e85f8840f6459a90942 +F ext/misc/regexp.c 588b6f67b4d3d00acbe31c793d965890893fbcfe24e53e305530973961773300 F ext/misc/remember.c add730f0f7e7436cd15ea3fd6a90fd83c3f706ab44169f7f048438b7d6baa69c F ext/misc/rot13.c 51ac5f51e9d5fd811db58a9c23c628ad5f333c173f1fc53c8491a3603d38556c F ext/misc/scrub.c 2a44b0d44c69584c0580ad2553f6290a307a49df4668941d2812135bfb96a946 @@ -2068,8 +2068,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 504effa89b48c0dc6cd12b3eaf6017be3f32017c601af17759a3cc185346d868 -R 7b322be7a0b0968d044fb9694e50e6d3 -U larrybr -Z be57394b3dc65bf45231fa83c98fd2dc +P ab3797e844c97fed344b36f30cfb788aca9e0d68c574fb833712219eb712db44 +R 273fa6b9f32e4223b5b45d8fc6394dc6 +U drh +Z f78e0028467b93abd16e9ed3e77ee0f5 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 5073c7a014..0bfa56a968 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ab3797e844c97fed344b36f30cfb788aca9e0d68c574fb833712219eb712db44 \ No newline at end of file +0772ddf56713d013cd1bd44f9c75977ca14f852e3a8f038b0a6b9814f6519d79 \ No newline at end of file From 83be5586a0a0167b092604c56ba618317f6f8670 Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 12 May 2023 19:02:50 +0000 Subject: [PATCH 32/35] Add multi-threaded test for "INSERT ... RETURNING ..." and SQLITE_BUSY errors. FossilOrigin-Name: 559cb1c6de384fd14160db005acaf1858b8b018d3d40d7f786a56a49d3cdbd59 --- manifest | 13 ++++---- manifest.uuid | 2 +- test/thread3.test | 78 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 7 deletions(-) create mode 100644 test/thread3.test diff --git a/manifest b/manifest index b708b2f95c..7a8cf6f39b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Make\sthe\sregexp\sextension\smore\srobust\sagainst\sOOM\serrors\sduring\scompilation\nof\sthe\srecognizer\sengine.\n[forum:/forumpost/f50aecd5e8|Forum\spost\sf50aecd5e8]. -D 2023-05-12T15:45:34.949 +C Add\smulti-threaded\stest\sfor\s"INSERT\s...\sRETURNING\s..."\sand\sSQLITE_BUSY\serrors. +D 2023-05-12T19:02:50.042 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1595,6 +1595,7 @@ F test/thread004.test f51dfc3936184aaf73ee85f315224baad272a87f F test/thread005.test 50d10b5684399676174bd96c94ad4250b1a2c8b6 F test/thread1.test df115faa10a4ba1d456e9d4d9ec165016903eae4 F test/thread2.test f35d2106452b77523b3a2b7d1dcde2e5ee8f9e46 +F test/thread3.test 5f53b6a8e7391d8653116fd0bee4f9774efee4410e039990821de39c6b4375a9 F test/thread_common.tcl 334639cadcb9f912bf82aa73f49efd5282e6cadd F test/threadtest1.c 6029d9c5567db28e6dc908a0c63099c3ba6c383b F test/threadtest2.c a70a8e94bef23339d34226eb9521015ef99f4df8 @@ -2068,8 +2069,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 ab3797e844c97fed344b36f30cfb788aca9e0d68c574fb833712219eb712db44 -R 273fa6b9f32e4223b5b45d8fc6394dc6 -U drh -Z f78e0028467b93abd16e9ed3e77ee0f5 +P 0772ddf56713d013cd1bd44f9c75977ca14f852e3a8f038b0a6b9814f6519d79 +R e2b505b83d26427c5d1e5feebd702346 +U dan +Z c00872b8cf2e35e5cd276b5a40cad3e4 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 0bfa56a968..7fb94a8961 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0772ddf56713d013cd1bd44f9c75977ca14f852e3a8f038b0a6b9814f6519d79 \ No newline at end of file +559cb1c6de384fd14160db005acaf1858b8b018d3d40d7f786a56a49d3cdbd59 \ No newline at end of file diff --git a/test/thread3.test b/test/thread3.test new file mode 100644 index 0000000000..25699b7655 --- /dev/null +++ b/test/thread3.test @@ -0,0 +1,78 @@ +# 2023 May 13 +# +# 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 +source $testdir/lock_common.tcl +if {[run_thread_tests]==0} { finish_test ; return } + +set testprefix thread3 + +do_execsql_test 1.0 { + CREATE TABLE t1(a, b); + PRAGMA journal_mode = DELETE; +} {delete} + +proc wait_for_var {varname} { + if {0==[uplevel [list info exists $varname]]} { + uplevel [list vwait $varname] + } + uplevel [list set $varname] +} + +set nAttempt 250 + +do_test 1.1 { + for {set i 0} {$i < $nAttempt} {incr i} { + unset -nocomplain X + unset -nocomplain Y + + sqlthread spawn X { + sqlite3 dbI test.db + dbI timeout 100 + set rc 1 + set nBusy 0 + while {$rc} { + set rc [catch { + dbI eval { INSERT INTO t1 VALUES(203, 'message') RETURNING a; } + } msg] + if {$rc} { incr nBusy } + } + dbI close + set nBusy + } + + sqlthread spawn Y { + sqlite3 dbR test.db + catch { + dbR eval { SELECT count(*) FROM t1 } + } msg + dbR close + set msg + } + + wait_for_var X + wait_for_var Y + incr nTotalBusy $X + } + + execsql { SELECT count(*) FROM t1 } + set {} {} +} {} + +do_execsql_test "1.Total BUSY errors: $nTotalBusy .2" { + SELECT count(*) FROM t1; +} $nAttempt + +finish_test + From 59b6a2bcbe4c35720267c8c4fecce9ce1d5245c7 Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 12 May 2023 19:06:00 +0000 Subject: [PATCH 33/35] Fix harmless compiler warning caused by [0772ddf56713d013]. FossilOrigin-Name: f06c16a8b0e7a15ce4f7d99af3376a1bf1bfbfc0fdc048b079418ae74c619d6b --- ext/misc/regexp.c | 2 +- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ext/misc/regexp.c b/ext/misc/regexp.c index 743c262e0d..a50008ca35 100644 --- a/ext/misc/regexp.c +++ b/ext/misc/regexp.c @@ -595,7 +595,7 @@ static const char *re_subcompile_string(ReCompiled *p){ break; } case '[': { - int iFirst = p->nState; + unsigned int iFirst = p->nState; if( rePeek(p)=='^' ){ re_append(p, RE_OP_CC_EXC, 0); p->sIn.i++; diff --git a/manifest b/manifest index 7a8cf6f39b..20ce1b4b84 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\smulti-threaded\stest\sfor\s"INSERT\s...\sRETURNING\s..."\sand\sSQLITE_BUSY\serrors. -D 2023-05-12T19:02:50.042 +C Fix\sharmless\scompiler\swarning\scaused\sby\s[0772ddf56713d013]. +D 2023-05-12T19:06:00.854 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -303,7 +303,7 @@ F ext/misc/percentile.c b9086e223d583bdaf8cb73c98a6539d501a2fc4282654adbfea57645 F ext/misc/prefixes.c 0f4f8cff5aebc00a7e3ac4021fd59cfe1a8e17c800ceaf592859ecb9cbc38196 F ext/misc/qpvtab.c 09738419e25f603a35c0ac8bd0a04daab794f48d08a9bc07a6085b9057b99009 F ext/misc/randomjson.c 7dd13664155319d47b9facc0d8dbf45e13062966a47168e54e3f26d48240d7ea -F ext/misc/regexp.c 588b6f67b4d3d00acbe31c793d965890893fbcfe24e53e305530973961773300 +F ext/misc/regexp.c 4bdd0045912f81c84908bd535ec5ad3b1c8540b4287c70ab84070963624047db F ext/misc/remember.c add730f0f7e7436cd15ea3fd6a90fd83c3f706ab44169f7f048438b7d6baa69c F ext/misc/rot13.c 51ac5f51e9d5fd811db58a9c23c628ad5f333c173f1fc53c8491a3603d38556c F ext/misc/scrub.c 2a44b0d44c69584c0580ad2553f6290a307a49df4668941d2812135bfb96a946 @@ -2069,8 +2069,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 0772ddf56713d013cd1bd44f9c75977ca14f852e3a8f038b0a6b9814f6519d79 -R e2b505b83d26427c5d1e5feebd702346 -U dan -Z c00872b8cf2e35e5cd276b5a40cad3e4 +P 559cb1c6de384fd14160db005acaf1858b8b018d3d40d7f786a56a49d3cdbd59 +R 4b606a426eae6c5f8f90a511d40b128f +U drh +Z 4e1ae7be32b97c6dbec7b8961e4a74ee # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 7fb94a8961..4291b08431 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -559cb1c6de384fd14160db005acaf1858b8b018d3d40d7f786a56a49d3cdbd59 \ No newline at end of file +f06c16a8b0e7a15ce4f7d99af3376a1bf1bfbfc0fdc048b079418ae74c619d6b \ No newline at end of file From 273c2a9425c04e72c516fa283181b88ce8eb9eb9 Mon Sep 17 00:00:00 2001 From: mistachkin Date: Sat, 13 May 2023 05:13:29 +0000 Subject: [PATCH 34/35] Fix compilation issue seen with MSVC. FossilOrigin-Name: 67001887044da71ab50c07d8345bd950a0a1f9688cf9cd6966312ea163cf6e17 --- ext/misc/basexx.c | 7 +++++-- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/ext/misc/basexx.c b/ext/misc/basexx.c index c1808aa70f..0dcde54356 100644 --- a/ext/misc/basexx.c +++ b/ext/misc/basexx.c @@ -69,9 +69,12 @@ __declspec(dllexport) #endif int sqlite3_basexx_init(sqlite3 *db, char **pzErr, const sqlite3_api_routines *pApi){ + int rc1; + int rc2; + init_api_ptr(pApi); - int rc1 = BASE64_INIT(db); - int rc2 = BASE85_INIT(db); + rc1 = BASE64_INIT(db); + rc2 = BASE85_INIT(db); if( rc1==SQLITE_OK && rc2==SQLITE_OK ){ BASE64_EXPOSE(db, pzErr); diff --git a/manifest b/manifest index 20ce1b4b84..2be187c54c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sharmless\scompiler\swarning\scaused\sby\s[0772ddf56713d013]. -D 2023-05-12T19:06:00.854 +C Fix\scompilation\sissue\sseen\swith\sMSVC. +D 2023-05-13T05:13:29.183 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -274,7 +274,7 @@ F ext/misc/anycollseq.c 5ffdfde9829eeac52219136ad6aa7cd9a4edb3b15f4f2532de52f4a2 F ext/misc/appendvfs.c 9642c7a194a2a25dca7ad3e36af24a0a46d7702168c4ad7e59c9f9b0e16a3824 F ext/misc/base64.c a71b131e50300c654a66c469a25b62874481f3d1cb3beb56aca9a68edd812e0d F ext/misc/base85.c 073054111988db593ef5fdb87ab8c459df1ea0c3aaaddf0f5bfa3d72b7e6280a -F ext/misc/basexx.c 5e859e1820620aa8080fb9145eb47089de426ae808f6abb01a8e12921c3a8e67 +F ext/misc/basexx.c 89ad6b76558efbceb627afd5e2ef1d84b2e96d9aaf9b7ecb20e3d00b51be6fcf F ext/misc/blobio.c a867c4c4617f6ec223a307ebfe0eabb45e0992f74dd47722b96f3e631c0edb2a F ext/misc/btreeinfo.c d28ce349b40054eaa9473e835837bad7a71deec33ba13e39f963d50933bfa0f9 F ext/misc/carray.c 0ba03f1e6647785d4e05b51be567f5652f06941314ff9d3d3763900aa353b6b5 @@ -2069,8 +2069,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 559cb1c6de384fd14160db005acaf1858b8b018d3d40d7f786a56a49d3cdbd59 -R 4b606a426eae6c5f8f90a511d40b128f -U drh -Z 4e1ae7be32b97c6dbec7b8961e4a74ee +P f06c16a8b0e7a15ce4f7d99af3376a1bf1bfbfc0fdc048b079418ae74c619d6b +R 68bf0e0720f39d0e6119c2e069e78207 +U mistachkin +Z 12f9058013daf2741959b0b8eb6c3d0b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 4291b08431..f2491482d2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f06c16a8b0e7a15ce4f7d99af3376a1bf1bfbfc0fdc048b079418ae74c619d6b \ No newline at end of file +67001887044da71ab50c07d8345bd950a0a1f9688cf9cd6966312ea163cf6e17 \ No newline at end of file From 5b39dd45e8b40715ff81ecd36ac0cb72e6088931 Mon Sep 17 00:00:00 2001 From: drh <> Date: Sat, 13 May 2023 15:00:47 +0000 Subject: [PATCH 35/35] Merge the latest 3.42.0 beta changes into the wal2 branch. FossilOrigin-Name: 771361e19e5b7f944cd2cfecb064b39175b892148fa877b763170744bca0b0cf --- manifest | 10 +++++----- manifest.uuid | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/manifest b/manifest index fd0000778c..faaff78773 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Update\sthis\sbranch\swith\slatest\schanges\sfrom\strunk. -D 2023-05-04T14:31:17.113 +C Merge\sthe\slatest\s3.42.0\sbeta\schanges\sinto\sthe\swal2\sbranch. +D 2023-05-13T15:00:47.430 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -2082,8 +2082,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 0215dcc76d7b3a1dad10b8e6fd8b54f2ab5006a156db5cee992ab2dac98d9284 d3370d59cffb7ab982d6c620c93d22aa6a9dc786e1c4af95ca8d45ff0b9b7d6f +P 49777032f29517d23c8c7483536f8ba828e7000dc303415da6881cc458620be2 R 4c52475278c5ccef59c6ec833b8f6544 -U dan -Z f87e8c5c1721799925f2f360f33a9b2f +U drh +Z a8e26bfa96688ebb06d100956a914e43 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 2838b6d8b0..dbcd97d845 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -49777032f29517d23c8c7483536f8ba828e7000dc303415da6881cc458620be2 \ No newline at end of file +771361e19e5b7f944cd2cfecb064b39175b892148fa877b763170744bca0b0cf \ No newline at end of file