From e25a267e812e918a78577c919ad426afe57b3b1f Mon Sep 17 00:00:00 2001 From: dan Date: Sat, 14 Sep 2024 20:30:14 +0000 Subject: [PATCH 01/89] Fix the fts5 xInstToken() API for prefix queries that do not use prefix-indexes. This is experimental. FossilOrigin-Name: 97c2824f471e7e622c4a166947a6e8162cae891345101539829a6fcec83373fe --- ext/fts5/fts5_expr.c | 18 +++-- ext/fts5/fts5_index.c | 19 ++++-- ext/fts5/test/fts5origintext.test | 11 +++- ext/fts5/test/fts5tokendata.test | 105 ++++++++++++++++++++++++++++++ manifest | 22 ++++--- manifest.uuid | 2 +- 6 files changed, 148 insertions(+), 29 deletions(-) create mode 100644 ext/fts5/test/fts5tokendata.test diff --git a/ext/fts5/fts5_expr.c b/ext/fts5/fts5_expr.c index cd44b96bda..0124a1cc93 100644 --- a/ext/fts5/fts5_expr.c +++ b/ext/fts5/fts5_expr.c @@ -3046,7 +3046,7 @@ static int fts5ExprPopulatePoslistsCb( int rc = sqlite3Fts5PoslistWriterAppend( &pExpr->apExprPhrase[i]->poslist, &p->aPopulator[i].writer, p->iOff ); - if( rc==SQLITE_OK && pExpr->pConfig->bTokendata && !pT->bPrefix ){ + if( rc==SQLITE_OK && (pExpr->pConfig->bTokendata || pT->bPrefix) ){ int iCol = p->iOff>>32; int iTokOff = p->iOff & 0x7FFFFFFF; rc = sqlite3Fts5IndexIterWriteTokendata( @@ -3239,15 +3239,13 @@ int sqlite3Fts5ExprInstToken( return SQLITE_RANGE; } pTerm = &pPhrase->aTerm[iToken]; - if( pTerm->bPrefix==0 ){ - if( pExpr->pConfig->bTokendata ){ - rc = sqlite3Fts5IterToken( - pTerm->pIter, iRowid, iCol, iOff+iToken, ppOut, pnOut - ); - }else{ - *ppOut = pTerm->pTerm; - *pnOut = pTerm->nFullTerm; - } + if( pExpr->pConfig->bTokendata || pTerm->bPrefix ){ + rc = sqlite3Fts5IterToken( + pTerm->pIter, iRowid, iCol, iOff+iToken, ppOut, pnOut + ); + }else{ + *ppOut = pTerm->pTerm; + *pnOut = pTerm->nFullTerm; } return rc; } diff --git a/ext/fts5/fts5_index.c b/ext/fts5/fts5_index.c index 4363305a56..ded1ec59cf 100644 --- a/ext/fts5/fts5_index.c +++ b/ext/fts5/fts5_index.c @@ -6571,12 +6571,13 @@ int sqlite3Fts5IndexWrite( static int fts5IsTokendataPrefix( Fts5Buffer *pBuf, const u8 *pToken, - int nToken + int nToken, + int bPrefix ){ return ( pBuf->n>=nToken && 0==memcmp(pBuf->p, pToken, nToken) - && (pBuf->n==nToken || pBuf->p[nToken]==0x00) + && (bPrefix || pBuf->n==nToken || pBuf->p[nToken]==0x00) ); } @@ -6879,7 +6880,8 @@ static Fts5Iter *fts5SetupTokendataIter( Fts5Index *p, /* FTS index to query */ const u8 *pToken, /* Buffer containing query term */ int nToken, /* Size of buffer pToken in bytes */ - Fts5Colset *pColset /* Colset to filter on */ + Fts5Colset *pColset, /* Colset to filter on */ + int bPrefix /* True to match any prefix */ ){ Fts5Iter *pRet = 0; Fts5TokenDataIter *pSet = 0; @@ -6961,7 +6963,7 @@ static Fts5Iter *fts5SetupTokendataIter( pSmall = 0; for(ii=0; iinSeg; ii++){ Fts5SegIter *pII = &pNew->aSeg[ii]; - if( 0==fts5IsTokendataPrefix(&pII->term, pToken, nToken) ){ + if( 0==fts5IsTokendataPrefix(&pII->term, pToken, nToken, bPrefix) ){ fts5SegIterSetEOF(pII); } if( pII->pLeaf && (!pSmall || fts5BufferCompare(pSmall, &pII->term)>0) ){ @@ -7037,6 +7039,9 @@ int sqlite3Fts5IndexQuery( int bTokendata = pConfig->bTokendata; if( nToken>0 ) memcpy(&buf.p[1], pToken, nToken); + /* The NOTOKENDATA flag is set when it is known that tokendata data will + ** not be required. e.g. for queries performed as part of an + ** integrity-check, or by the fts5vocab module. */ if( flags & (FTS5INDEX_QUERY_NOTOKENDATA|FTS5INDEX_QUERY_SCAN) ){ bTokendata = 0; } @@ -7066,9 +7071,9 @@ int sqlite3Fts5IndexQuery( } } - if( bTokendata && iIdx==0 ){ - buf.p[0] = '0'; - pRet = fts5SetupTokendataIter(p, buf.p, nToken+1, pColset); + if( (bTokendata && iIdx==0) || iIdx>pConfig->nPrefix ){ + buf.p[0] = FTS5_MAIN_PREFIX; + pRet = fts5SetupTokendataIter(p, buf.p, nToken+1, pColset, iIdx>0); }else if( iIdx<=pConfig->nPrefix ){ /* Straight index lookup */ Fts5Structure *pStruct = fts5StructureRead(p); diff --git a/ext/fts5/test/fts5origintext.test b/ext/fts5/test/fts5origintext.test index 8e975fa17c..9741f786e8 100644 --- a/ext/fts5/test/fts5origintext.test +++ b/ext/fts5/test/fts5origintext.test @@ -166,6 +166,13 @@ do_execsql_test 3.3.3 { SELECT rowid FROM ft2('HELLO') } {1 2 3} do_execsql_test 3.3.4 { SELECT rowid FROM ft2('hello*') } {1 2 3 10} +do_execsql_test 3.3.5.1 { SELECT rowid FROM ft2('HELLO') ORDER BY rowid DESC} { + 3 2 1 +} +do_execsql_test 3.3.5.2 { SELECT rowid FROM ft2('HELLO') ORDER BY +rowid DESC} { + 3 2 1 +} + #------------------------------------------------------------------------- # reset_db @@ -285,11 +292,11 @@ do_execsql_test 6.1 { do_execsql_test 6.2 { SELECT rowid, tokens(ft) FROM ft('on*'); -} {1 {{}} 2 {{} {}}} +} {1 one.One 2 {one one.One}} do_execsql_test 6.3 { SELECT rowid, tokens(ft) FROM ft('Three*'); -} {1 {{}} 2 {{}}} +} {1 three.Three 2 three.Three} fts5_aux_test_functions db do_catchsql_test 6.4 { diff --git a/ext/fts5/test/fts5tokendata.test b/ext/fts5/test/fts5tokendata.test new file mode 100644 index 0000000000..7f75f4fa8e --- /dev/null +++ b/ext/fts5/test/fts5tokendata.test @@ -0,0 +1,105 @@ +# 2014 Jan 08 +# +# 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. +# +#*********************************************************************** +# +# Tests focused on phrase queries. +# + +source [file join [file dirname [info script]] fts5_common.tcl] +set testprefix fts5tokendata + +# If SQLITE_ENABLE_FTS5 is not defined, omit this file. +ifcapable !fts5 { + finish_test + return +} + +foreach_detail_mode $testprefix { + + sqlite3_fts5_register_origintext db + fts5_aux_test_functions db + proc b {x} { string map [list "\0" "."] $x } + db func b b + + do_execsql_test 1.0 { + CREATE VIRTUAL TABLE ft USING fts5(a, b, tokendata=1, + tokenize="origintext unicode61", detail=%DETAIL% + ); + CREATE VIRTUAL TABLE vocab USING fts5vocab(ft, instance); + } + + do_execsql_test 1.1 { + INSERT INTO ft(rowid, a, b) VALUES + (1, 'Pedagog Pedal Pedant', 'Peculier Day Today'), + (2, 'Pedant pedantic pecked', 'Peck Penalize Pen'); + + INSERT INTO ft(rowid, a, b) VALUES + (3, 'Penalty Pence Penciled', 'One Two Three'), + (4, 'Pedant Pedal Pedant', 'Peculier Day Today'); + } + + do_execsql_test 1.2 { + SELECT DISTINCT b(term) FROM vocab + } { + day.Day one.One peck.Peck pecked peculier.Peculier pedagog.Pedagog + pedal.Pedal pedant.Pedant pedantic pen.Pen penalize.Penalize + penalty.Penalty pence.Pence penciled.Penciled three.Three + today.Today two.Two + } + + do_execsql_test 1.3.1 { + SELECT rowid FROM ft('pe*') + } { + 1 2 3 4 + } + + do_execsql_test 1.3.2 { + SELECT rowid FROM ft('pe*') ORDER BY rowid DESC + } { + 4 3 2 1 + } + + if {"%DETAIL%"!="none"} { + do_execsql_test 1.3.3 { + SELECT rowid FROM ft WHERE a MATCH 'pe*' ORDER BY rowid DESC + } { + 4 3 2 1 + } + } + + do_execsql_test 1.4 { + SELECT rowid, b( fts5_test_insttoken(ft, 0, 0) ) FROM ft('pedant') + } { + 1 pedant.Pedant + 2 pedant.Pedant + 4 pedant.Pedant + } + + do_execsql_test 1.5 { + SELECT rowid, b( fts5_test_insttoken(ft, 0, 0) ) FROM ft('pe*') + } { + 1 pedagog.Pedagog + 2 pedant.Pedant + 3 penalty.Penalty + 4 pedant.Pedant + } + + do_execsql_test 1.6 { + SELECT rowid, fts5_test_poslist(ft) FROM ft('pe*') + } { + 1 {0.0.0 0.0.1 0.0.2 0.1.0} + 2 {0.0.0 0.0.1 0.0.2 0.1.0 0.1.1 0.1.2} + 3 {0.0.0 0.0.1 0.0.2} + 4 {0.0.0 0.0.1 0.0.2 0.1.0} + } +} + +finish_test + diff --git a/manifest b/manifest index 3a6304a539..3fc85c61ed 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\ssubsequent\schanges\sto\ssqlite-rsync\sthat\swere\saccidentally\smissed\sby\nthe\sprior\scheck-in. -D 2024-09-14T16:52:45.740 +C Fix\sthe\sfts5\sxInstToken()\sAPI\sfor\sprefix\squeries\sthat\sdo\snot\suse\sprefix-indexes.\sThis\sis\sexperimental. +D 2024-09-14T20:30:14.441 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -97,9 +97,9 @@ F ext/fts5/fts5Int.h 93aba03ca417f403b07b2ab6f50aa0e0c1b8b031917a9026b81520e7047 F ext/fts5/fts5_aux.c 65a0468dd177d6093aa9ae1622e6d86b0136b8d267c62c0ad6493ad1e9a3d759 F ext/fts5/fts5_buffer.c 0eec58bff585f1a44ea9147eae5da2447292080ea435957f7488c70673cb6f09 F ext/fts5/fts5_config.c da21548ddbc1a457cb42545f527065221ede8ada6a734891b8c34317a7a9506b -F ext/fts5/fts5_expr.c 9a56f53700d1860f0ee2f373c2b9074eaf2a7aa0637d0e27a6476de26a3fee33 +F ext/fts5/fts5_expr.c 1f60d81aa4703435f98f46bbb41fb2a2efa898423fec070a2b3f7a02f177ac64 F ext/fts5/fts5_hash.c adda4272be401566a6e0ba1acbe70ee5cb97fce944bc2e04dc707152a0ec91b1 -F ext/fts5/fts5_index.c 571483823193f09439356741669aa8c81da838ae6f5e1bfa7517f7ee2fb3addd +F ext/fts5/fts5_index.c aadd271f3c2048418298377908dd09d496753a5c7da84161a9c86ca8c1e78e9a F ext/fts5/fts5_main.c 4503498d3453e29a3cd89dacaba029011e89cb8c481a6241611d106e7a369bd4 F ext/fts5/fts5_storage.c 3332497823c3d171cf56379f2bd8c971ce15a19aadacff961106462022c92470 F ext/fts5/fts5_tcl.c 4db9258a7882c5eac0da4433042132aaf15b87dd1e1636c7a6ca203abd2c8bfe @@ -201,7 +201,7 @@ F ext/fts5/test/fts5onepass.test f9b7d9b2c334900c6542a869760290e2ab5382af8fbd618 F ext/fts5/test/fts5optimize.test 264b9101721c17d06d1d174feb743fda3ddc89fad41dee980fef821428258e47 F ext/fts5/test/fts5optimize2.test 795d4ae5f66a7239cf8d5aef4c2ea96aeb8bcd907bd9be0cfe22064fc71a44ed F ext/fts5/test/fts5optimize3.test 1653029284e10e0715246819893ba30565c4ead0d0fc470adae92c353ea857d3 -F ext/fts5/test/fts5origintext.test 2015f69bc8abd111152a8e66211fd2d45026378001e07c054159aa4f84e6691d +F ext/fts5/test/fts5origintext.test 63d5b0dc00f0104add8960da0705a70bffd4d86b6feb6ddbb38bff21141d42f0 F ext/fts5/test/fts5origintext2.test f4505ff79bf7369f2b8b10b9cef7476049d844e20b37f29cad3a8b8d5ac6f9ba F ext/fts5/test/fts5origintext3.test 45c33cf0c91a9ca0e36d298462db3edc7c8fe45fd185649a9dbfd66bb670058b F ext/fts5/test/fts5origintext4.test 0d3ef0a8038f471dbc83001c34fe5f7ae39b571bfc209670771eb28bc0fc50e8 @@ -234,6 +234,7 @@ F ext/fts5/test/fts5synonym.test becc8cea6cfc958a50b30c572c68cbfdf7455971d0fe988 F ext/fts5/test/fts5synonym2.test 58f357b997cf2fedeeb9d0de4db9f880fa96fa2fe27a743bfe7d7b96895bdd87 F ext/fts5/test/fts5tok1.test 1f7817499f5971450d8c4a652114b3d833393c8134e32422d0af27884ffe9cef F ext/fts5/test/fts5tok2.test dcacb32d4a2a3f0dd3215d4a3987f78ae4be21a2 +F ext/fts5/test/fts5tokendata.test 7cad79af82e8e81b7a36b450087233d2fca051bb0d584421afc375d6dd26d6f6 F ext/fts5/test/fts5tokenizer.test 7937cec672b148223fff8746d21d3e7ed0965fd7caf35ccdc888a005bb452f98 F ext/fts5/test/fts5tokenizer2.test ddb8b10fbe4b84b2a75812671f127774c1d2e3e2bf82d2e0e4f0bb1cd8a2b2d6 F ext/fts5/test/fts5tokenizer3.test eea778f7bb7024c3e904e28915f9d53286141671b138722148be22a9c758bdc3 @@ -2213,8 +2214,11 @@ F vsixtest/vsixtest.tcl 6195aba1f12a5e10efc2b8c0009532167be5e301abe5b31385638080 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P b7a8ce4c8c5fc6a3b4744d412d96f99d2452eb4086ad84472511da3b4d6afec6 129aca54f6b791c222b51f3eb01569e1e569269860e153b005140eb65af378b9 -R 3fe2d7eb1050bd322cb4e381c1c28c99 -U drh -Z 5104838c8e0c55c4caf222e0f2dc7147 +P 50762ba0783a04e0dcd9456a1ae17d875b0a9272f2f09854a23d9d5253761e9f +R 7d932f341b9d462f57fdca7d1de99fb1 +T *branch * fts5-tokendata-prefix +T *sym-fts5-tokendata-prefix * +T -sym-trunk * +U dan +Z 82ecce364e38343eb4f3cc0cc45881c8 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index e011175dd4..77dd09f207 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -50762ba0783a04e0dcd9456a1ae17d875b0a9272f2f09854a23d9d5253761e9f +97c2824f471e7e622c4a166947a6e8162cae891345101539829a6fcec83373fe From 2eff8f225292c7fd17299910338e01706dba083a Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 25 Sep 2024 18:55:11 +0000 Subject: [PATCH 02/89] Change the way tokendata indexes are collected for prefix queries. FossilOrigin-Name: 204ddf4e726b695dd12ab4a945ec2461655aa0bcc38b74e970f07ed2ac43c6ff --- ext/fts5/fts5Int.h | 9 +- ext/fts5/fts5_expr.c | 3 +- ext/fts5/fts5_index.c | 246 ++++++++++++++++++++++++++++++++++++------ manifest | 16 +-- manifest.uuid | 2 +- 5 files changed, 235 insertions(+), 41 deletions(-) diff --git a/ext/fts5/fts5Int.h b/ext/fts5/fts5Int.h index b15521f163..a71fb13e06 100644 --- a/ext/fts5/fts5Int.h +++ b/ext/fts5/fts5Int.h @@ -502,7 +502,14 @@ int sqlite3Fts5StructureTest(Fts5Index*, void*); /* ** Used by xInstToken(): */ -int sqlite3Fts5IterToken(Fts5IndexIter*, i64, int, int, const char**, int*); +int sqlite3Fts5IterToken( + Fts5IndexIter *pIndexIter, + const char *pToken, int nToken, + i64 iRowid, + int iCol, + int iOff, + const char **ppOut, int *pnOut +); /* ** Insert or remove data to or from the index. Each time a document is diff --git a/ext/fts5/fts5_expr.c b/ext/fts5/fts5_expr.c index 0124a1cc93..877c3f79c5 100644 --- a/ext/fts5/fts5_expr.c +++ b/ext/fts5/fts5_expr.c @@ -3241,7 +3241,8 @@ int sqlite3Fts5ExprInstToken( pTerm = &pPhrase->aTerm[iToken]; if( pExpr->pConfig->bTokendata || pTerm->bPrefix ){ rc = sqlite3Fts5IterToken( - pTerm->pIter, iRowid, iCol, iOff+iToken, ppOut, pnOut + pTerm->pIter, pTerm->pTerm, pTerm->nQueryTerm, + iRowid, iCol, iOff+iToken, ppOut, pnOut ); }else{ *ppOut = pTerm->pTerm; diff --git a/ext/fts5/fts5_index.c b/ext/fts5/fts5_index.c index ded1ec59cf..1efbe5a7b4 100644 --- a/ext/fts5/fts5_index.c +++ b/ext/fts5/fts5_index.c @@ -6571,13 +6571,12 @@ int sqlite3Fts5IndexWrite( static int fts5IsTokendataPrefix( Fts5Buffer *pBuf, const u8 *pToken, - int nToken, - int bPrefix + int nToken ){ return ( pBuf->n>=nToken && 0==memcmp(pBuf->p, pToken, nToken) - && (bPrefix || pBuf->n==nToken || pBuf->p[nToken]==0x00) + && (pBuf->n==nToken || pBuf->p[nToken]==0x00) ); } @@ -6602,20 +6601,25 @@ static void fts5SegIterSetEOF(Fts5SegIter *pSeg){ struct Fts5TokenDataMap { i64 iRowid; /* Row this token is located in */ i64 iPos; /* Position of token */ + int iIter; /* Iterator token was read from */ + int nByte; /* Length of token in bytes (or 0) */ }; /* ** An object used to supplement Fts5Iter for tokendata=1 iterators. */ struct Fts5TokenDataIter { - int nIter; - int nIterAlloc; - int nMap; int nMapAlloc; Fts5TokenDataMap *aMap; + /* The following are used for prefix-queries only. */ + Fts5Buffer terms; + + /* The following are used for other full-token tokendata queries only. */ + int nIter; + int nIterAlloc; Fts5PoslistReader *aPoslistReader; int *aPoslistToIter; Fts5Iter *apIter[1]; @@ -6666,6 +6670,7 @@ static void fts5TokendataIterDelete(Fts5TokenDataIter *pSet){ for(ii=0; iinIter; ii++){ fts5MultiIterFree(pSet->apIter[ii]); } + fts5BufferFree(&pSet->terms); sqlite3_free(pSet->aPoslistReader); sqlite3_free(pSet->aMap); sqlite3_free(pSet); @@ -6679,6 +6684,7 @@ static void fts5TokendataIterAppendMap( Fts5Index *p, Fts5TokenDataIter *pT, int iIter, + int nByte, i64 iRowid, i64 iPos ){ @@ -6701,6 +6707,7 @@ static void fts5TokendataIterAppendMap( pT->aMap[pT->nMap].iRowid = iRowid; pT->aMap[pT->nMap].iPos = iPos; pT->aMap[pT->nMap].iIter = iIter; + pT->aMap[pT->nMap].nByte = nByte; pT->nMap++; } } @@ -6745,7 +6752,7 @@ static void fts5IterSetOutputsTokendata(Fts5Iter *pIter){ pIter->base.iRowid = iRowid; if( nHit==1 && eDetail==FTS5_DETAIL_FULL ){ - fts5TokendataIterAppendMap(pIter->pIndex, pT, iMin, iRowid, -1); + fts5TokendataIterAppendMap(pIter->pIndex, pT, iMin, 0, iRowid, -1); }else if( nHit>1 && eDetail!=FTS5_DETAIL_NONE ){ int nReader = 0; @@ -6880,8 +6887,7 @@ static Fts5Iter *fts5SetupTokendataIter( Fts5Index *p, /* FTS index to query */ const u8 *pToken, /* Buffer containing query term */ int nToken, /* Size of buffer pToken in bytes */ - Fts5Colset *pColset, /* Colset to filter on */ - int bPrefix /* True to match any prefix */ + Fts5Colset *pColset /* Colset to filter on */ ){ Fts5Iter *pRet = 0; Fts5TokenDataIter *pSet = 0; @@ -6963,7 +6969,7 @@ static Fts5Iter *fts5SetupTokendataIter( pSmall = 0; for(ii=0; iinSeg; ii++){ Fts5SegIter *pII = &pNew->aSeg[ii]; - if( 0==fts5IsTokendataPrefix(&pII->term, pToken, nToken, bPrefix) ){ + if( 0==fts5IsTokendataPrefix(&pII->term, pToken, nToken) ){ fts5SegIterSetEOF(pII); } if( pII->pLeaf && (!pSmall || fts5BufferCompare(pSmall, &pII->term)>0) ){ @@ -6999,6 +7005,7 @@ static Fts5Iter *fts5SetupTokendataIter( pRet = fts5MultiIterAlloc(p, 0); } if( pRet ){ + pRet->nSeg = 0; pRet->pTokenDataIter = pSet; if( pSet ){ fts5IterSetOutputsTokendata(pRet); @@ -7071,9 +7078,9 @@ int sqlite3Fts5IndexQuery( } } - if( (bTokendata && iIdx==0) || iIdx>pConfig->nPrefix ){ + if( bTokendata && iIdx==0 ){ buf.p[0] = FTS5_MAIN_PREFIX; - pRet = fts5SetupTokendataIter(p, buf.p, nToken+1, pColset, iIdx>0); + pRet = fts5SetupTokendataIter(p, buf.p, nToken+1, pColset); }else if( iIdx<=pConfig->nPrefix ){ /* Straight index lookup */ Fts5Structure *pStruct = fts5StructureRead(p); @@ -7121,7 +7128,8 @@ int sqlite3Fts5IndexQuery( int sqlite3Fts5IterNext(Fts5IndexIter *pIndexIter){ Fts5Iter *pIter = (Fts5Iter*)pIndexIter; assert( pIter->pIndex->rc==SQLITE_OK ); - if( pIter->pTokenDataIter ){ + if( pIter->nSeg==0 ){ + assert( pIter->pTokenDataIter ); fts5TokendataIterNext(pIter, 0, 0); }else{ fts5MultiIterNext(pIter->pIndex, pIter, 0, 0); @@ -7158,7 +7166,8 @@ int sqlite3Fts5IterNextScan(Fts5IndexIter *pIndexIter){ */ int sqlite3Fts5IterNextFrom(Fts5IndexIter *pIndexIter, i64 iMatch){ Fts5Iter *pIter = (Fts5Iter*)pIndexIter; - if( pIter->pTokenDataIter ){ + if( pIter->nSeg==0 ){ + assert( pIter->pTokenDataIter ); fts5TokendataIterNext(pIter, 1, iMatch); }else{ fts5MultiIterNextFrom(pIter->pIndex, pIter, iMatch); @@ -7177,14 +7186,161 @@ const char *sqlite3Fts5IterTerm(Fts5IndexIter *pIndexIter, int *pn){ return (z ? &z[1] : 0); } +static void fts5TokendataMerge( + Fts5TokenDataMap *a1, int n1, + Fts5TokenDataMap *a2, int n2, + Fts5TokenDataMap *aOut +){ + int i1 = 0; + int i2 = 0; + + assert( n1>=0 && n2>=0 ); + while( i1=n2 || (i1nMap * sizeof(Fts5TokenDataMap); + + aTmp = (Fts5TokenDataMap*)sqlite3Fts5MallocZero(&p->rc, nByte); + if( aTmp ){ + Fts5TokenDataMap *a1 = pT->aMap; + Fts5TokenDataMap *a2 = aTmp; + i64 nHalf; + + for(nHalf=1; nHalfnMap; nHalf=nHalf*2){ + int i1; + for(i1=0; i1nMap; i1+=(nHalf*2)){ + int n1 = MIN(nHalf, pT->nMap-i1); + int n2 = MIN(nHalf, pT->nMap-i1-n1); + fts5TokendataMerge(&a1[i1], n1, &a1[i1+n1], n2, &a2[i1]); + } + SWAPVAL(Fts5TokenDataMap*, a1, a2); + } + + if( a1!=pT->aMap ){ + memcpy(pT->aMap, a1, pT->nMap*sizeof(Fts5TokenDataMap)); + } + sqlite3_free(aTmp); + +#ifdef SQLITE_DEBUG + { + int ii; + for(ii=1; iinMap; ii++){ + Fts5TokenDataMap *p1 = &pT->aMap[ii-1]; + Fts5TokenDataMap *p2 = &pT->aMap[ii]; + assert( p1->iRowidiRowid + || (p1->iRowid==p2->iRowid && p1->iPos<=p2->iPos) + ); + } + } +#endif + } +} + +static int fts5SetupPrefixIterTokendata( + Fts5Iter *pIter, + const char *pToken, + int nToken +){ + Fts5Index *p = pIter->pIndex; + Fts5Buffer token = {0, 0, 0}; + Fts5TokenDataIter *pT = 0; + + fts5BufferGrow(&p->rc, &token, nToken+1); + pT = (Fts5TokenDataIter*)sqlite3Fts5MallocZero(&p->rc, sizeof(*pT)); + + if( p->rc==SQLITE_OK ){ + const int flags = FTS5INDEX_QUERY_SCAN + | FTS5INDEX_QUERY_SKIPEMPTY + | FTS5INDEX_QUERY_NOOUTPUT; + Fts5Structure *pStruct = 0; + Fts5Iter *p1 = 0; /* Iterator used to find tokendata */ + + int bNewTerm = 1; + int iTermOff = 0; + int nTermByte = 0; + + /* Fill in the token prefix to search for */ + token.p[0] = FTS5_MAIN_PREFIX; + memcpy(&token.p[1], pToken, nToken); + token.n = nToken+1; + + /* Grab a reference to the table structure. That will be released before + ** this function returns. */ + pStruct = fts5StructureRead(p); + + fts5MultiIterNew(p, pStruct, flags, 0, token.p, token.n, -1, 0, &p1); + fts5IterSetOutputCb(&p->rc, p1); + for( /* no-op */ ; + fts5MultiIterEof(p, p1)==0; + fts5MultiIterNext2(p, p1, &bNewTerm) + ){ + i64 iPos = 0; + int iPosOff = 0; + + Fts5SegIter *pSeg = &p1->aSeg[ p1->aFirst[1].iFirst ]; + p1->xSetOutputs(p1, pSeg); + + if( bNewTerm ){ + int nTerm = pSeg->term.n; + const u8 *pTerm = pSeg->term.p; + assert_nc( memcmp(token.p, pTerm, MIN(token.n, nTerm))<=0 ); + if( nTermterms.n; + fts5BufferAppendBlob(&p->rc, &pT->terms, nTermByte, pTerm+1); + } + + while( 0==sqlite3Fts5PoslistNext64( + p1->base.pData, p1->base.nData, &iPosOff, &iPos + ) ){ + fts5TokendataIterAppendMap( + p, pT, iTermOff, nTermByte, p1->base.iRowid, iPos + ); + } + } + + /* fts5SetupPrefixIter */ + fts5MultiIterFree(p1); + fts5StructureRelease(pStruct); + + fts5TokendataIterSortMap(p, pT); + } + + if( p->rc==SQLITE_OK ){ + pIter->pTokenDataIter = pT; + }else{ + fts5TokendataIterDelete(pT); + } + fts5BufferFree(&token); + + return fts5IndexReturn(p); +} + /* ** This is used by xInstToken() to access the token at offset iOff, column ** iCol of row iRowid. The token is returned via output variables *ppOut ** and *pnOut. The iterator passed as the first argument must be a tokendata=1 ** iterator (pIter->pTokenDataIter!=0). +** +** pToken/nToken: */ int sqlite3Fts5IterToken( Fts5IndexIter *pIndexIter, + const char *pToken, int nToken, i64 iRowid, int iCol, int iOff, @@ -7192,13 +7348,22 @@ int sqlite3Fts5IterToken( ){ Fts5Iter *pIter = (Fts5Iter*)pIndexIter; Fts5TokenDataIter *pT = pIter->pTokenDataIter; - Fts5TokenDataMap *aMap = pT->aMap; i64 iPos = (((i64)iCol)<<32) + iOff; - + Fts5TokenDataMap *aMap = 0; int i1 = 0; - int i2 = pT->nMap; + int i2 = 0; int iTest = 0; + assert( pT || (pToken && pIter->nSeg>0) ); + if( pT==0 ){ + int rc = fts5SetupPrefixIterTokendata(pIter, pToken, nToken); + if( rc!=SQLITE_OK ) return rc; + pT = pIter->pTokenDataIter; + } + + i2 = pT->nMap; + aMap = pT->aMap; + while( i2>i1 ){ iTest = (i1 + i2) / 2; @@ -7221,9 +7386,15 @@ int sqlite3Fts5IterToken( } if( i2>i1 ){ - Fts5Iter *pMap = pT->apIter[aMap[iTest].iIter]; - *ppOut = (const char*)pMap->aSeg[0].term.p+1; - *pnOut = pMap->aSeg[0].term.n-1; + if( pIter->nSeg==0 ){ + Fts5Iter *pMap = pT->apIter[aMap[iTest].iIter]; + *ppOut = (const char*)pMap->aSeg[0].term.p+1; + *pnOut = pMap->aSeg[0].term.n-1; + }else{ + Fts5TokenDataMap *p = &aMap[iTest]; + *ppOut = (const char*)&pT->terms.p[p->iIter]; + *pnOut = aMap[iTest].nByte; + } } return SQLITE_OK; @@ -7235,7 +7406,9 @@ int sqlite3Fts5IterToken( */ void sqlite3Fts5IndexIterClearTokendata(Fts5IndexIter *pIndexIter){ Fts5Iter *pIter = (Fts5Iter*)pIndexIter; - if( pIter && pIter->pTokenDataIter ){ + if( pIter && pIter->pTokenDataIter + && (pIter->nSeg==0 || pIter->pIndex->pConfig->eDetail!=FTS5_DETAIL_FULL) + ){ pIter->pTokenDataIter->nMap = 0; } } @@ -7255,17 +7428,30 @@ int sqlite3Fts5IndexIterWriteTokendata( Fts5Iter *pIter = (Fts5Iter*)pIndexIter; Fts5TokenDataIter *pT = pIter->pTokenDataIter; Fts5Index *p = pIter->pIndex; - int ii; + i64 iPos = (((i64)iCol)<<32) + iOff; assert( p->pConfig->eDetail!=FTS5_DETAIL_FULL ); - assert( pIter->pTokenDataIter ); - - for(ii=0; iinIter; ii++){ - Fts5Buffer *pTerm = &pT->apIter[ii]->aSeg[0].term; - if( nToken==pTerm->n-1 && memcmp(pToken, pTerm->p+1, nToken)==0 ) break; - } - if( iinIter ){ - fts5TokendataIterAppendMap(p, pT, ii, iRowid, (((i64)iCol)<<32) + iOff); + assert( pIter->pTokenDataIter || pIter->nSeg>0 ); + if( pIter->nSeg>0 ){ + /* This is a prefix term iterator. */ + Fts5TokenDataIter *pT = pIter->pTokenDataIter; + if( pT==0 ){ + pT = (Fts5TokenDataIter*)sqlite3Fts5MallocZero(&p->rc, sizeof(*pT)); + pIter->pTokenDataIter = pT; + } + if( pT ){ + fts5TokendataIterAppendMap(p, pT, pT->terms.n, nToken, iRowid, iPos); + fts5BufferAppendBlob(&p->rc, &pT->terms, nToken, (const u8*)pToken); + } + }else{ + int ii; + for(ii=0; iinIter; ii++){ + Fts5Buffer *pTerm = &pT->apIter[ii]->aSeg[0].term; + if( nToken==pTerm->n-1 && memcmp(pToken, pTerm->p+1, nToken)==0 ) break; + } + if( iinIter ){ + fts5TokendataIterAppendMap(p, pT, ii, 0, iRowid, iPos); + } } return fts5IndexReturn(p); } diff --git a/manifest b/manifest index 31fbff973a..91a17cd96b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\strunk\schanges\sinto\sthis\sbranch. -D 2024-09-24T15:43:52.339 +C Change\sthe\sway\stokendata\sindexes\sare\scollected\sfor\sprefix\squeries. +D 2024-09-25T18:55:11.223 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -93,13 +93,13 @@ F ext/fts3/unicode/mkunicode.tcl 63db9624ccf70d4887836c320eda93ab552f21008f3be7e F ext/fts3/unicode/parseunicode.tcl a981bd6466d12dd17967515801c3ff23f74a281be1a03cf1e6f52a6959fc77eb F ext/fts5/extract_api_docs.tcl 009cf59c77afa86d137b0cca3e3b1a5efbe2264faa2df233f9a7aa8563926d15 F ext/fts5/fts5.h efaaac0df3d3bc740383044c144b582f47921aafa21d7b10eb98f42c24c740b0 -F ext/fts5/fts5Int.h 93aba03ca417f403b07b2ab6f50aa0e0c1b8b031917a9026b81520e7047a168e +F ext/fts5/fts5Int.h 83a7af3fee07d5163bf7bf97db310544fcc143c94acb13dbced7e06ae8025a18 F ext/fts5/fts5_aux.c 65a0468dd177d6093aa9ae1622e6d86b0136b8d267c62c0ad6493ad1e9a3d759 F ext/fts5/fts5_buffer.c 0eec58bff585f1a44ea9147eae5da2447292080ea435957f7488c70673cb6f09 F ext/fts5/fts5_config.c da21548ddbc1a457cb42545f527065221ede8ada6a734891b8c34317a7a9506b -F ext/fts5/fts5_expr.c 1f60d81aa4703435f98f46bbb41fb2a2efa898423fec070a2b3f7a02f177ac64 +F ext/fts5/fts5_expr.c 69b8d976058512c07dfe86e229521b7a871768157bd1607cedf1a5038dfd72c9 F ext/fts5/fts5_hash.c adda4272be401566a6e0ba1acbe70ee5cb97fce944bc2e04dc707152a0ec91b1 -F ext/fts5/fts5_index.c aadd271f3c2048418298377908dd09d496753a5c7da84161a9c86ca8c1e78e9a +F ext/fts5/fts5_index.c 8dfb22c5e42cd56d3abbe107a5561fc3b4f731fc4c821ac049482d9dedc50acc F ext/fts5/fts5_main.c 4503498d3453e29a3cd89dacaba029011e89cb8c481a6241611d106e7a369bd4 F ext/fts5/fts5_storage.c 3332497823c3d171cf56379f2bd8c971ce15a19aadacff961106462022c92470 F ext/fts5/fts5_tcl.c 4db9258a7882c5eac0da4433042132aaf15b87dd1e1636c7a6ca203abd2c8bfe @@ -2214,8 +2214,8 @@ F vsixtest/vsixtest.tcl 6195aba1f12a5e10efc2b8c0009532167be5e301abe5b31385638080 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 97c2824f471e7e622c4a166947a6e8162cae891345101539829a6fcec83373fe 42bb941584a1ac922ee6b0b6ecadce71c9259555563cf49913a6f820f3f9b887 -R cb71c4478793484afa282b1a3cf11afa +P 9945206e6e26a48a49b9747650d299eb983cc21a3a61c621cd81f0bbc85a74d7 +R d12c6f9d3e41d3b7f32c957f52650189 U dan -Z efd6491e97a3bc8cd929e608bea6d1a9 +Z 0b9676f39cb90827333f01676ed89ac5 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index dc02877987..92e4aa62cf 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9945206e6e26a48a49b9747650d299eb983cc21a3a61c621cd81f0bbc85a74d7 +204ddf4e726b695dd12ab4a945ec2461655aa0bcc38b74e970f07ed2ac43c6ff From 7d56669bc48ba12c23713219a2e10923758b915f Mon Sep 17 00:00:00 2001 From: dan Date: Sat, 28 Sep 2024 20:45:11 +0000 Subject: [PATCH 03/89] Rationalize some of the new code on this branch. FossilOrigin-Name: 66f209ba40e7de49b304d7931ff38a4994038452aab08e9347286a234c6f7075 --- ext/fts5/fts5_index.c | 309 ++++++++++++++++++++++++------------------ manifest | 12 +- manifest.uuid | 2 +- 3 files changed, 181 insertions(+), 142 deletions(-) diff --git a/ext/fts5/fts5_index.c b/ext/fts5/fts5_index.c index 1efbe5a7b4..ede091650d 100644 --- a/ext/fts5/fts5_index.c +++ b/ext/fts5/fts5_index.c @@ -6198,6 +6198,101 @@ static void fts5MergePrefixLists( *p1 = out; } + +static int fts5VisitPrefixRange( + Fts5Index *p, + Fts5Colset *pColset, + u8 *pToken, + int nToken, + void (*xVisit)(Fts5Index*, void *pCtx, Fts5Iter *pIter, const u8*, int), + void *pCtx +){ + const int flags = FTS5INDEX_QUERY_SCAN + | FTS5INDEX_QUERY_SKIPEMPTY + | FTS5INDEX_QUERY_NOOUTPUT; + Fts5Iter *p1 = 0; /* Iterator used to gather data from index */ + int bNewTerm = 1; + Fts5Structure *pStruct = fts5StructureRead(p); + + fts5MultiIterNew(p, pStruct, flags, pColset, pToken, nToken, -1, 0, &p1); + fts5IterSetOutputCb(&p->rc, p1); + for( /* no-op */ ; + fts5MultiIterEof(p, p1)==0; + fts5MultiIterNext2(p, p1, &bNewTerm) + ){ + Fts5SegIter *pSeg = &p1->aSeg[ p1->aFirst[1].iFirst ]; + int nNew = 0; + const u8 *pNew = 0; + + p1->xSetOutputs(p1, pSeg); + + + if( bNewTerm ){ + nNew = pSeg->term.n; + pNew = pSeg->term.p; + if( nNewrc; +} + +typedef struct PrefixSetupCtx PrefixSetupCtx; +struct PrefixSetupCtx { + void (*xMerge)(Fts5Index*, Fts5Buffer*, int, Fts5Buffer*); + void (*xAppend)(Fts5Index*, u64, Fts5Iter*, Fts5Buffer*); + i64 iLastRowid; + int nMerge; + Fts5Buffer *aBuf; + int nBuf; + Fts5Buffer doclist; +}; + +static void prefixIterSetupCb( + Fts5Index *p, + void *pCtx, + Fts5Iter *p1, + const u8 *pNew, + int nNew +){ + PrefixSetupCtx *pSetup = (PrefixSetupCtx*)pCtx; + const int nMerge = pSetup->nMerge; + + if( p1->base.nData>0 ){ + if( p1->base.iRowid<=pSetup->iLastRowid && pSetup->doclist.n>0 ){ + int i; + for(i=0; p->rc==SQLITE_OK && pSetup->doclist.n; i++){ + int i1 = i*nMerge; + int iStore; + assert( i1+nMerge<=pSetup->nBuf ); + for(iStore=i1; iStoreaBuf[iStore].n==0 ){ + fts5BufferSwap(&pSetup->doclist, &pSetup->aBuf[iStore]); + fts5BufferZero(&pSetup->doclist); + break; + } + } + if( iStore==i1+nMerge ){ + pSetup->xMerge(p, &pSetup->doclist, nMerge, &pSetup->aBuf[i1]); + for(iStore=i1; iStoreaBuf[iStore]); + } + } + } + pSetup->iLastRowid = 0; + } + + pSetup->xAppend( + p, (u64)p1->base.iRowid-(u64)pSetup->iLastRowid, p1, &pSetup->doclist + ); + pSetup->iLastRowid = p1->base.iRowid; + } +} + static void fts5SetupPrefixIter( Fts5Index *p, /* Index to read from */ int bDesc, /* True for "ORDER BY rowid DESC" */ @@ -6208,38 +6303,30 @@ static void fts5SetupPrefixIter( Fts5Iter **ppIter /* OUT: New iterator */ ){ Fts5Structure *pStruct; - Fts5Buffer *aBuf; - int nBuf = 32; - int nMerge = 1; + PrefixSetupCtx s; + + memset(&s, 0, sizeof(s)); + s.nMerge = 1; + s.iLastRowid = 0; + s.nBuf = 32; - void (*xMerge)(Fts5Index*, Fts5Buffer*, int, Fts5Buffer*); - void (*xAppend)(Fts5Index*, u64, Fts5Iter*, Fts5Buffer*); if( p->pConfig->eDetail==FTS5_DETAIL_NONE ){ - xMerge = fts5MergeRowidLists; - xAppend = fts5AppendRowid; + s.xMerge = fts5MergeRowidLists; + s.xAppend = fts5AppendRowid; }else{ - nMerge = FTS5_MERGE_NLIST-1; - nBuf = nMerge*8; /* Sufficient to merge (16^8)==(2^32) lists */ - xMerge = fts5MergePrefixLists; - xAppend = fts5AppendPoslist; + s.nMerge = FTS5_MERGE_NLIST-1; + s.nBuf = s.nMerge*8; /* Sufficient to merge (16^8)==(2^32) lists */ + s.xMerge = fts5MergePrefixLists; + s.xAppend = fts5AppendPoslist; } - aBuf = (Fts5Buffer*)fts5IdxMalloc(p, sizeof(Fts5Buffer)*nBuf); + s.aBuf = (Fts5Buffer*)fts5IdxMalloc(p, sizeof(Fts5Buffer)*s.nBuf); pStruct = fts5StructureRead(p); - assert( p->rc!=SQLITE_OK || (aBuf && pStruct) ); + assert( p->rc!=SQLITE_OK || (s.aBuf && pStruct) ); if( p->rc==SQLITE_OK ){ - const int flags = FTS5INDEX_QUERY_SCAN - | FTS5INDEX_QUERY_SKIPEMPTY - | FTS5INDEX_QUERY_NOOUTPUT; int i; - i64 iLastRowid = 0; - Fts5Iter *p1 = 0; /* Iterator used to gather data from index */ Fts5Data *pData; - Fts5Buffer doclist; - int bNewTerm = 1; - - memset(&doclist, 0, sizeof(doclist)); /* If iIdx is non-zero, then it is the number of a prefix-index for ** prefixes 1 character longer than the prefix being queried for. That @@ -6247,6 +6334,7 @@ static void fts5SetupPrefixIter( ** corresponding to the prefix itself. That one is extracted from the ** main term index here. */ if( iIdx!=0 ){ + Fts5Iter *p1 = 0; /* Iterator used to gather data from index */ int dummy = 0; const int f2 = FTS5INDEX_QUERY_SKIPEMPTY|FTS5INDEX_QUERY_NOOUTPUT; pToken[0] = FTS5_MAIN_PREFIX; @@ -6259,82 +6347,41 @@ static void fts5SetupPrefixIter( Fts5SegIter *pSeg = &p1->aSeg[ p1->aFirst[1].iFirst ]; p1->xSetOutputs(p1, pSeg); if( p1->base.nData ){ - xAppend(p, (u64)p1->base.iRowid-(u64)iLastRowid, p1, &doclist); - iLastRowid = p1->base.iRowid; + s.xAppend(p, (u64)p1->base.iRowid-(u64)s.iLastRowid, p1, &s.doclist); + s.iLastRowid = p1->base.iRowid; } } fts5MultiIterFree(p1); } pToken[0] = FTS5_MAIN_PREFIX + iIdx; - fts5MultiIterNew(p, pStruct, flags, pColset, pToken, nToken, -1, 0, &p1); - fts5IterSetOutputCb(&p->rc, p1); + fts5VisitPrefixRange( + p, pColset, pToken, nToken, prefixIterSetupCb, (void*)&s + ); - for( /* no-op */ ; - fts5MultiIterEof(p, p1)==0; - fts5MultiIterNext2(p, p1, &bNewTerm) - ){ - Fts5SegIter *pSeg = &p1->aSeg[ p1->aFirst[1].iFirst ]; - int nTerm = pSeg->term.n; - const u8 *pTerm = pSeg->term.p; - p1->xSetOutputs(p1, pSeg); - - assert_nc( memcmp(pToken, pTerm, MIN(nToken, nTerm))<=0 ); - if( bNewTerm ){ - if( nTermbase.nData==0 ) continue; - if( p1->base.iRowid<=iLastRowid && doclist.n>0 ){ - for(i=0; p->rc==SQLITE_OK && doclist.n; i++){ - int i1 = i*nMerge; - int iStore; - assert( i1+nMerge<=nBuf ); - for(iStore=i1; iStorebase.iRowid-(u64)iLastRowid, p1, &doclist); - iLastRowid = p1->base.iRowid; - } - - assert( (nBuf%nMerge)==0 ); - for(i=0; irc==SQLITE_OK ){ - xMerge(p, &doclist, nMerge, &aBuf[i]); + s.xMerge(p, &s.doclist, s.nMerge, &s.aBuf[i]); } - for(iFree=i; iFreep = (u8*)&pData[1]; - pData->nn = pData->szLeaf = doclist.n; - if( doclist.n ) memcpy(pData->p, doclist.p, doclist.n); + pData->nn = pData->szLeaf = s.doclist.n; + if( s.doclist.n ) memcpy(pData->p, s.doclist.p, s.doclist.n); fts5MultiIterNew2(p, pData, bDesc, ppIter); } - fts5BufferFree(&doclist); } + fts5BufferFree(&s.doclist); fts5StructureRelease(pStruct); - sqlite3_free(aBuf); + sqlite3_free(s.aBuf); } @@ -7021,7 +7068,6 @@ static Fts5Iter *fts5SetupTokendataIter( return pRet; } - /* ** Open a new iterator to iterate though all rowid that match the ** specified token or token prefix. @@ -7046,9 +7092,11 @@ int sqlite3Fts5IndexQuery( int bTokendata = pConfig->bTokendata; if( nToken>0 ) memcpy(&buf.p[1], pToken, nToken); - /* The NOTOKENDATA flag is set when it is known that tokendata data will - ** not be required. e.g. for queries performed as part of an - ** integrity-check, or by the fts5vocab module. */ + /* The NOTOKENDATA flag is set when each token in a tokendata=1 table + ** should be treated individually, instead of merging all those with + ** a common prefix into a single entry. This is used, for example, by + ** queries performed as part of an integrity-check, or by the fts5vocab + ** module. */ if( flags & (FTS5INDEX_QUERY_NOTOKENDATA|FTS5INDEX_QUERY_SCAN) ){ bTokendata = 0; } @@ -7092,7 +7140,7 @@ int sqlite3Fts5IndexQuery( fts5StructureRelease(pStruct); } }else{ - /* Scan multiple terms in the main index */ + /* Scan multiple terms in the main index for a prefix query. */ int bDesc = (flags & FTS5INDEX_QUERY_DESC)!=0; fts5SetupPrefixIter(p, bDesc, iPrefixIdx, buf.p, nToken+1, pColset,&pRet); if( pRet==0 ){ @@ -7250,6 +7298,39 @@ static void fts5TokendataIterSortMap(Fts5Index *p, Fts5TokenDataIter *pT){ } } +typedef struct TokendataSetupCtx TokendataSetupCtx; +struct TokendataSetupCtx { + Fts5TokenDataIter *pT; + int iTermOff; + int nTermByte; +}; + +static void prefixIterSetupTokendataCb( + Fts5Index *p, + void *pCtx, + Fts5Iter *p1, + const u8 *pNew, + int nNew +){ + TokendataSetupCtx *pSetup = (TokendataSetupCtx*)pCtx; + int iPosOff = 0; + i64 iPos = 0; + + if( pNew ){ + pSetup->nTermByte = nNew-1; + pSetup->iTermOff = pSetup->pT->terms.n; + fts5BufferAppendBlob(&p->rc, &pSetup->pT->terms, nNew-1, pNew+1); + } + + while( 0==sqlite3Fts5PoslistNext64( + p1->base.pData, p1->base.nData, &iPosOff, &iPos + ) ){ + fts5TokendataIterAppendMap(p, + pSetup->pT, pSetup->iTermOff, pSetup->nTermByte, p1->base.iRowid, iPos + ); + } +} + static int fts5SetupPrefixIterTokendata( Fts5Iter *pIter, const char *pToken, @@ -7257,73 +7338,31 @@ static int fts5SetupPrefixIterTokendata( ){ Fts5Index *p = pIter->pIndex; Fts5Buffer token = {0, 0, 0}; - Fts5TokenDataIter *pT = 0; + TokendataSetupCtx ctx; + + memset(&ctx, 0, sizeof(ctx)); fts5BufferGrow(&p->rc, &token, nToken+1); - pT = (Fts5TokenDataIter*)sqlite3Fts5MallocZero(&p->rc, sizeof(*pT)); + ctx.pT = (Fts5TokenDataIter*)sqlite3Fts5MallocZero(&p->rc, sizeof(*ctx.pT)); if( p->rc==SQLITE_OK ){ - const int flags = FTS5INDEX_QUERY_SCAN - | FTS5INDEX_QUERY_SKIPEMPTY - | FTS5INDEX_QUERY_NOOUTPUT; - Fts5Structure *pStruct = 0; - Fts5Iter *p1 = 0; /* Iterator used to find tokendata */ - - int bNewTerm = 1; - int iTermOff = 0; - int nTermByte = 0; /* Fill in the token prefix to search for */ token.p[0] = FTS5_MAIN_PREFIX; memcpy(&token.p[1], pToken, nToken); token.n = nToken+1; - /* Grab a reference to the table structure. That will be released before - ** this function returns. */ - pStruct = fts5StructureRead(p); + fts5VisitPrefixRange( + p, 0, token.p, token.n, prefixIterSetupTokendataCb, (void*)&ctx + ); - fts5MultiIterNew(p, pStruct, flags, 0, token.p, token.n, -1, 0, &p1); - fts5IterSetOutputCb(&p->rc, p1); - for( /* no-op */ ; - fts5MultiIterEof(p, p1)==0; - fts5MultiIterNext2(p, p1, &bNewTerm) - ){ - i64 iPos = 0; - int iPosOff = 0; - - Fts5SegIter *pSeg = &p1->aSeg[ p1->aFirst[1].iFirst ]; - p1->xSetOutputs(p1, pSeg); - - if( bNewTerm ){ - int nTerm = pSeg->term.n; - const u8 *pTerm = pSeg->term.p; - assert_nc( memcmp(token.p, pTerm, MIN(token.n, nTerm))<=0 ); - if( nTermterms.n; - fts5BufferAppendBlob(&p->rc, &pT->terms, nTermByte, pTerm+1); - } - - while( 0==sqlite3Fts5PoslistNext64( - p1->base.pData, p1->base.nData, &iPosOff, &iPos - ) ){ - fts5TokendataIterAppendMap( - p, pT, iTermOff, nTermByte, p1->base.iRowid, iPos - ); - } - } - - /* fts5SetupPrefixIter */ - fts5MultiIterFree(p1); - fts5StructureRelease(pStruct); - - fts5TokendataIterSortMap(p, pT); + fts5TokendataIterSortMap(p, ctx.pT); } if( p->rc==SQLITE_OK ){ - pIter->pTokenDataIter = pT; + pIter->pTokenDataIter = ctx.pT; }else{ - fts5TokendataIterDelete(pT); + fts5TokendataIterDelete(ctx.pT); } fts5BufferFree(&token); diff --git a/manifest b/manifest index 91a17cd96b..0d2ad1c4fb 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Change\sthe\sway\stokendata\sindexes\sare\scollected\sfor\sprefix\squeries. -D 2024-09-25T18:55:11.223 +C Rationalize\ssome\sof\sthe\snew\scode\son\sthis\sbranch. +D 2024-09-28T20:45:11.387 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -99,7 +99,7 @@ F ext/fts5/fts5_buffer.c 0eec58bff585f1a44ea9147eae5da2447292080ea435957f7488c70 F ext/fts5/fts5_config.c da21548ddbc1a457cb42545f527065221ede8ada6a734891b8c34317a7a9506b F ext/fts5/fts5_expr.c 69b8d976058512c07dfe86e229521b7a871768157bd1607cedf1a5038dfd72c9 F ext/fts5/fts5_hash.c adda4272be401566a6e0ba1acbe70ee5cb97fce944bc2e04dc707152a0ec91b1 -F ext/fts5/fts5_index.c 8dfb22c5e42cd56d3abbe107a5561fc3b4f731fc4c821ac049482d9dedc50acc +F ext/fts5/fts5_index.c c1005920192146452a3545500761ecc8cfab84572d251e8536103a01899f67d5 F ext/fts5/fts5_main.c 4503498d3453e29a3cd89dacaba029011e89cb8c481a6241611d106e7a369bd4 F ext/fts5/fts5_storage.c 3332497823c3d171cf56379f2bd8c971ce15a19aadacff961106462022c92470 F ext/fts5/fts5_tcl.c 4db9258a7882c5eac0da4433042132aaf15b87dd1e1636c7a6ca203abd2c8bfe @@ -2214,8 +2214,8 @@ F vsixtest/vsixtest.tcl 6195aba1f12a5e10efc2b8c0009532167be5e301abe5b31385638080 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 9945206e6e26a48a49b9747650d299eb983cc21a3a61c621cd81f0bbc85a74d7 -R d12c6f9d3e41d3b7f32c957f52650189 +P 204ddf4e726b695dd12ab4a945ec2461655aa0bcc38b74e970f07ed2ac43c6ff +R da06610bae74973a44f69a92b9b60e12 U dan -Z 0b9676f39cb90827333f01676ed89ac5 +Z ca9c653ea5575a07920ac6ddffa15d1d # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 92e4aa62cf..f550314bcd 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -204ddf4e726b695dd12ab4a945ec2461655aa0bcc38b74e970f07ed2ac43c6ff +66f209ba40e7de49b304d7931ff38a4994038452aab08e9347286a234c6f7075 From d2a88e961a78582050bd56e3676bf54fef01fb3f Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 1 Oct 2024 20:38:08 +0000 Subject: [PATCH 04/89] Rationalize code further. And add tests. FossilOrigin-Name: 0ca002a4ab88f3e7ae1e6e518038157eaa20759f57888c2ed7e50cb92bd96348 --- ext/fts5/fts5_index.c | 165 +++++++++++++++++++++-------- ext/fts5/test/fts5origintext3.test | 23 ++++ manifest | 14 +-- manifest.uuid | 2 +- 4 files changed, 151 insertions(+), 53 deletions(-) diff --git a/ext/fts5/fts5_index.c b/ext/fts5/fts5_index.c index ede091650d..f6f51d7343 100644 --- a/ext/fts5/fts5_index.c +++ b/ext/fts5/fts5_index.c @@ -6199,15 +6199,45 @@ static void fts5MergePrefixLists( } -static int fts5VisitPrefixRange( - Fts5Index *p, - Fts5Colset *pColset, - u8 *pToken, - int nToken, +/* +** Iterate through a range of entries in the FTS index, invoking the xVisit +** callback for each of them. +** +** Parameter pToken points to an nToken buffer containing an FTS index term +** (i.e. a document term with the preceding 1 byte index identifier - +** FTS5_MAIN_PREFIX or similar). If bPrefix is true, then the call visits +** all entries for terms that have pToken/nToken as a prefix. If bPrefix +** is false, then only entries with pToken/nToken as the entire key are +** visited. +** +** If the current table is a tokendata=1 table, then if bPrefix is true then +** each index term is treated separately. However, if bPrefix is false, then +** all index terms corresponding to pToken/nToken are collapsed into a single +** term before the callback is invoked. +** +** The callback invoked for each entry visited is specified by paramter xVisit. +** Each time it is invoked, it is passed a pointer to the Fts5Index object, +** a copy of the 7th paramter to this function (pCtx) and a pointer to the +** iterator that indicates the current entry. If the current entry is the +** first with a new term (i.e. different from that of the previous entry, +** including the very first term), then the final two parameters are passed +** a pointer to the term and its size in bytes, respectively. If the current +** entry is not the first associated with its term, these two parameters +** are passed 0. +** +** If parameter pColset is not NULL, then it is used to filter entries before +** the callback is invoked. +*/ +static int fts5VisitEntries( + Fts5Index *p, /* Fts5 index object */ + Fts5Colset *pColset, /* Columns filter to apply, or NULL */ + u8 *pToken, /* Buffer containing token */ + int nToken, /* Size of buffer pToken in bytes */ + int bPrefix, /* True for a prefix scan */ void (*xVisit)(Fts5Index*, void *pCtx, Fts5Iter *pIter, const u8*, int), - void *pCtx + void *pCtx /* Passed as second argument to xVisit() */ ){ - const int flags = FTS5INDEX_QUERY_SCAN + const int flags = (bPrefix ? FTS5INDEX_QUERY_SCAN : 0) | FTS5INDEX_QUERY_SKIPEMPTY | FTS5INDEX_QUERY_NOOUTPUT; Fts5Iter *p1 = 0; /* Iterator used to gather data from index */ @@ -6226,7 +6256,6 @@ static int fts5VisitPrefixRange( p1->xSetOutputs(p1, pSeg); - if( bNewTerm ){ nNew = pSeg->term.n; pNew = pSeg->term.p; @@ -6241,6 +6270,9 @@ static int fts5VisitPrefixRange( return p->rc; } +/* +** Context object passed by fts5SetupPrefixIter() to fts5VisitEntries(). +*/ typedef struct PrefixSetupCtx PrefixSetupCtx; struct PrefixSetupCtx { void (*xMerge)(Fts5Index*, Fts5Buffer*, int, Fts5Buffer*); @@ -6252,6 +6284,9 @@ struct PrefixSetupCtx { Fts5Buffer doclist; }; +/* +** fts5VisitEntries() callback used by fts5SetupPrefixIter() +*/ static void prefixIterSetupCb( Fts5Index *p, void *pCtx, @@ -6325,6 +6360,7 @@ static void fts5SetupPrefixIter( assert( p->rc!=SQLITE_OK || (s.aBuf && pStruct) ); if( p->rc==SQLITE_OK ){ + void *pCtx = (void*)&s; int i; Fts5Data *pData; @@ -6334,30 +6370,12 @@ static void fts5SetupPrefixIter( ** corresponding to the prefix itself. That one is extracted from the ** main term index here. */ if( iIdx!=0 ){ - Fts5Iter *p1 = 0; /* Iterator used to gather data from index */ - int dummy = 0; - const int f2 = FTS5INDEX_QUERY_SKIPEMPTY|FTS5INDEX_QUERY_NOOUTPUT; pToken[0] = FTS5_MAIN_PREFIX; - fts5MultiIterNew(p, pStruct, f2, pColset, pToken, nToken, -1, 0, &p1); - fts5IterSetOutputCb(&p->rc, p1); - for(; - fts5MultiIterEof(p, p1)==0; - fts5MultiIterNext2(p, p1, &dummy) - ){ - Fts5SegIter *pSeg = &p1->aSeg[ p1->aFirst[1].iFirst ]; - p1->xSetOutputs(p1, pSeg); - if( p1->base.nData ){ - s.xAppend(p, (u64)p1->base.iRowid-(u64)s.iLastRowid, p1, &s.doclist); - s.iLastRowid = p1->base.iRowid; - } - } - fts5MultiIterFree(p1); + fts5VisitEntries(p, pColset, pToken, nToken, 0, prefixIterSetupCb, pCtx); } pToken[0] = FTS5_MAIN_PREFIX + iIdx; - fts5VisitPrefixRange( - p, pColset, pToken, nToken, prefixIterSetupCb, (void*)&s - ); + fts5VisitEntries(p, pColset, pToken, nToken, 1, prefixIterSetupCb, pCtx); assert( (s.nBuf%s.nMerge)==0 ); for(i=0; i0, not just a container for +** Fts5TokenDataMap structures), then this variable is an index into +** the apIter[] array. The corresponding term is that which the iterator +** at apIter[iIter] currently points to. +** +** Or, if the Fts5TokenDataIter iterator is just a container object +** (nIter==0), then iIter is an index into the term.p[] buffer where +** the term is stored. +** +** nByte: +** In the case where iIter is an index into term.p[], this variable +** is the size of the term in bytes. If iIter is an index into apIter[], +** this variable is unused. */ struct Fts5TokenDataMap { i64 iRowid; /* Row this token is located in */ i64 iPos; /* Position of token */ - int iIter; /* Iterator token was read from */ int nByte; /* Length of token in bytes (or 0) */ }; /* ** An object used to supplement Fts5Iter for tokendata=1 iterators. +** +** This object serves two purposes. The first is as a container for an array +** of Fts5TokenDataMap structures, which are used to find the token required +** when the xInstToken() API is used. This is done by the nMapAlloc, nMap and +** aMap[] variables. */ struct Fts5TokenDataIter { - int nMap; - int nMapAlloc; - Fts5TokenDataMap *aMap; + int nMapAlloc; /* Allocated size of aMap[] in entries */ + int nMap; /* Number of valid entries in aMap[] */ + Fts5TokenDataMap *aMap; /* Array of (rowid+pos -> token) mappings */ /* The following are used for prefix-queries only. */ Fts5Buffer terms; @@ -7234,10 +7280,18 @@ const char *sqlite3Fts5IterTerm(Fts5IndexIter *pIndexIter, int *pn){ return (z ? &z[1] : 0); } +/* +** The two input arrays - a1[] and a2[] - are in sorted order. This function +** merges the two arrays together and writes the result to output array +** aOut[]. aOut[] is guaranteed to be large enough to hold the result. +** +** Duplicate entries are copied into the output. So the size of the output +** array is always (n1+n2) entries. +*/ static void fts5TokendataMerge( - Fts5TokenDataMap *a1, int n1, - Fts5TokenDataMap *a2, int n2, - Fts5TokenDataMap *aOut + Fts5TokenDataMap *a1, int n1, /* Input array 1 */ + Fts5TokenDataMap *a2, int n2, /* Input array 2 */ + Fts5TokenDataMap *aOut /* Output array */ ){ int i1 = 0; int i2 = 0; @@ -7258,6 +7312,12 @@ static void fts5TokendataMerge( } } +/* +** Sort the contents of the pT->aMap[] array. +** +** The sorting algorithm requries a malloc(). If this fails, an error code +** is left in Fts5Index.rc before returning. +*/ static void fts5TokendataIterSortMap(Fts5Index *p, Fts5TokenDataIter *pT){ Fts5TokenDataMap *aTmp = 0; int nByte = pT->nMap * sizeof(Fts5TokenDataMap); @@ -7298,13 +7358,23 @@ static void fts5TokendataIterSortMap(Fts5Index *p, Fts5TokenDataIter *pT){ } } +/* +** fts5VisitEntries() context object used by fts5SetupPrefixIterTokendata() +** to pass data to prefixIterSetupTokendataCb(). +*/ typedef struct TokendataSetupCtx TokendataSetupCtx; struct TokendataSetupCtx { - Fts5TokenDataIter *pT; - int iTermOff; - int nTermByte; + Fts5TokenDataIter *pT; /* Object being populated with mappings */ + int iTermOff; /* Offset of current term in terms.p[] */ + int nTermByte; /* Size of current term in bytes */ }; +/* +** fts5VisitEntries() callback used by fts5SetupPrefixIterTokendata(). This +** callback adds an entry to the Fts5TokenDataIter.aMap[] array for each +** position in the current position-list. It doesn't matter that some of +** these may be out of order - they will be sorted later. +*/ static void prefixIterSetupTokendataCb( Fts5Index *p, void *pCtx, @@ -7331,10 +7401,15 @@ static void prefixIterSetupTokendataCb( } } +/* +** pIter is a prefix query. This function populates pIter->pTokenDataIter +** with an Fts5TokenDataIter object containing mappings for all rows +** matched by the query. +*/ static int fts5SetupPrefixIterTokendata( Fts5Iter *pIter, - const char *pToken, - int nToken + const char *pToken, /* Token prefix to search for */ + int nToken /* Size of pToken in bytes */ ){ Fts5Index *p = pIter->pIndex; Fts5Buffer token = {0, 0, 0}; @@ -7352,8 +7427,8 @@ static int fts5SetupPrefixIterTokendata( memcpy(&token.p[1], pToken, nToken); token.n = nToken+1; - fts5VisitPrefixRange( - p, 0, token.p, token.n, prefixIterSetupTokendataCb, (void*)&ctx + fts5VisitEntries( + p, 0, token.p, token.n, 1, prefixIterSetupTokendataCb, (void*)&ctx ); fts5TokendataIterSortMap(p, ctx.pT); diff --git a/ext/fts5/test/fts5origintext3.test b/ext/fts5/test/fts5origintext3.test index 9dda2a5748..a4bca0de9b 100644 --- a/ext/fts5/test/fts5origintext3.test +++ b/ext/fts5/test/fts5origintext3.test @@ -95,6 +95,29 @@ foreach_detail_mode $testprefix { do_execsql_test 1.8 { SELECT rowid FROM ft2('aaa AND bbb'); } {10 24} do_execsql_test 1.9 { SELECT rowid FROM ft2('bbb AND aaa'); } {10 24} + do_execsql_test 2.0 { + CREATE VIRTUAL TABLE ft3 USING fts5( + x, tokenize="origintext unicode61", tokendata=1, detail=%DETAIL%, + prefix=2 + ); + } + do_execsql_test 2.1 { + INSERT INTO ft3(rowid, x) VALUES(1, 'one'); + INSERT INTO ft3(rowid, x) VALUES(2, 'ONE'); + INSERT INTO ft3(rowid, x) VALUES(3, 'ONT'); + INSERT INTO ft3(rowid, x) VALUES(4, 'on'); + INSERT INTO ft3(rowid, x) VALUES(5, 'On'); + } + + do_execsql_test 2.2 { + SELECT rowid FROM ft3('on*'); + } {1 2 3 4 5} + + do_execsql_test 2.3 { + SELECT rowid, insttoken(ft3, 0, 0) FROM ft3('on*'); + } {1 one 2 one.ONE 3 ont.ONT 4 on 5 on.On} + + } finish_test diff --git a/manifest b/manifest index 0d2ad1c4fb..7b755eff5b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Rationalize\ssome\sof\sthe\snew\scode\son\sthis\sbranch. -D 2024-09-28T20:45:11.387 +C Rationalize\scode\sfurther.\sAnd\sadd\stests. +D 2024-10-01T20:38:08.239 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -99,7 +99,7 @@ F ext/fts5/fts5_buffer.c 0eec58bff585f1a44ea9147eae5da2447292080ea435957f7488c70 F ext/fts5/fts5_config.c da21548ddbc1a457cb42545f527065221ede8ada6a734891b8c34317a7a9506b F ext/fts5/fts5_expr.c 69b8d976058512c07dfe86e229521b7a871768157bd1607cedf1a5038dfd72c9 F ext/fts5/fts5_hash.c adda4272be401566a6e0ba1acbe70ee5cb97fce944bc2e04dc707152a0ec91b1 -F ext/fts5/fts5_index.c c1005920192146452a3545500761ecc8cfab84572d251e8536103a01899f67d5 +F ext/fts5/fts5_index.c 9b2b9636ccefd6140c0ad7a44c51c2ea39f377753a13f06a2e6792215b62cede F ext/fts5/fts5_main.c 4503498d3453e29a3cd89dacaba029011e89cb8c481a6241611d106e7a369bd4 F ext/fts5/fts5_storage.c 3332497823c3d171cf56379f2bd8c971ce15a19aadacff961106462022c92470 F ext/fts5/fts5_tcl.c 4db9258a7882c5eac0da4433042132aaf15b87dd1e1636c7a6ca203abd2c8bfe @@ -203,7 +203,7 @@ F ext/fts5/test/fts5optimize2.test 795d4ae5f66a7239cf8d5aef4c2ea96aeb8bcd907bd9b F ext/fts5/test/fts5optimize3.test 1653029284e10e0715246819893ba30565c4ead0d0fc470adae92c353ea857d3 F ext/fts5/test/fts5origintext.test 63d5b0dc00f0104add8960da0705a70bffd4d86b6feb6ddbb38bff21141d42f0 F ext/fts5/test/fts5origintext2.test f4505ff79bf7369f2b8b10b9cef7476049d844e20b37f29cad3a8b8d5ac6f9ba -F ext/fts5/test/fts5origintext3.test 45c33cf0c91a9ca0e36d298462db3edc7c8fe45fd185649a9dbfd66bb670058b +F ext/fts5/test/fts5origintext3.test 1f5174a9f4cf42f58f833dbfb314940793ca4723854ec2651e7530ddb35a66a6 F ext/fts5/test/fts5origintext4.test 0d3ef0a8038f471dbc83001c34fe5f7ae39b571bfc209670771eb28bc0fc50e8 F ext/fts5/test/fts5origintext5.test ee12b440ec335e5b422d1668aca0051b52ff28b6ee67073e8bbc29f509fd562b F ext/fts5/test/fts5phrase.test bb2554bb61d15f859678c96dc89a7de415cd5fc3b7b54c29b82a0d0ad138091c @@ -2214,8 +2214,8 @@ F vsixtest/vsixtest.tcl 6195aba1f12a5e10efc2b8c0009532167be5e301abe5b31385638080 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 204ddf4e726b695dd12ab4a945ec2461655aa0bcc38b74e970f07ed2ac43c6ff -R da06610bae74973a44f69a92b9b60e12 +P 66f209ba40e7de49b304d7931ff38a4994038452aab08e9347286a234c6f7075 +R 364baf490f2f60461704cce12defe7d5 U dan -Z ca9c653ea5575a07920ac6ddffa15d1d +Z 98928b751e601e5ab0ec38779c287b09 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index f550314bcd..7b4f75a7f2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -66f209ba40e7de49b304d7931ff38a4994038452aab08e9347286a234c6f7075 +0ca002a4ab88f3e7ae1e6e518038157eaa20759f57888c2ed7e50cb92bd96348 From 090b8649be3603920327a0ae45c2cf9384d8615b Mon Sep 17 00:00:00 2001 From: dan Date: Sat, 2 Nov 2024 19:10:50 +0000 Subject: [PATCH 05/89] Allow an fts5 table or query to be configured to collect xInstToken data for any prefix terms as part of the first parse of the main index, if any. FossilOrigin-Name: 46929ae92b26f02bc70de9931b21a8a7cf9a2453d5fb07f68b712f62e28e9152 --- ext/fts5/fts5Int.h | 3 +- ext/fts5/fts5_config.c | 13 + ext/fts5/fts5_index.c | 501 +++++++++++++++-------------- ext/fts5/fts5_main.c | 28 +- ext/fts5/test/fts5origintext.test | 121 ++++--- ext/fts5/test/fts5origintext3.test | 47 ++- manifest | 24 +- manifest.uuid | 2 +- 8 files changed, 430 insertions(+), 309 deletions(-) diff --git a/ext/fts5/fts5Int.h b/ext/fts5/fts5Int.h index bb72f45c7b..832f9ad477 100644 --- a/ext/fts5/fts5Int.h +++ b/ext/fts5/fts5Int.h @@ -247,7 +247,8 @@ struct Fts5Config { char *zRank; /* Name of rank function */ char *zRankArgs; /* Arguments to rank function */ int bSecureDelete; /* 'secure-delete' */ - int nDeleteMerge; /* 'deletemerge' */ + int nDeleteMerge; /* 'deletemerge' */ + int bPrefixInsttoken; /* 'prefix-insttoken' */ /* If non-NULL, points to sqlite3_vtab.base.zErrmsg. Often NULL. */ char **pzErrmsg; diff --git a/ext/fts5/fts5_config.c b/ext/fts5/fts5_config.c index a674b44d0b..eea82b046d 100644 --- a/ext/fts5/fts5_config.c +++ b/ext/fts5/fts5_config.c @@ -1026,6 +1026,19 @@ int sqlite3Fts5ConfigSetValue( }else{ pConfig->bSecureDelete = (bVal ? 1 : 0); } + } + + else if( 0==sqlite3_stricmp(zKey, "insttoken") ){ + int bVal = -1; + if( SQLITE_INTEGER==sqlite3_value_numeric_type(pVal) ){ + bVal = sqlite3_value_int(pVal); + } + if( bVal<0 ){ + *pbBadkey = 1; + }else{ + pConfig->bPrefixInsttoken = (bVal ? 1 : 0); + } + }else{ *pbBadkey = 1; } diff --git a/ext/fts5/fts5_index.c b/ext/fts5/fts5_index.c index 04f0a6740c..e7028e411c 100644 --- a/ext/fts5/fts5_index.c +++ b/ext/fts5/fts5_index.c @@ -6260,6 +6260,7 @@ static int fts5VisitEntries( const u8 *pNew = 0; p1->xSetOutputs(p1, pSeg); + if( p->rc ) break; if( bNewTerm ){ nNew = pSeg->term.n; @@ -6275,6 +6276,247 @@ static int fts5VisitEntries( return p->rc; } + +/* +** Usually, a tokendata=1 iterator (struct Fts5TokenDataIter) accumulates an +** array of these for each row it visits (so all iRowid fields are the same). +** Or, for an iterator used by an "ORDER BY rank" query, it accumulates an +** array of these for the entire query (in which case iRowid fields may take +** a variety of values). +** +** Each instance in the array indicates the iterator (and therefore term) +** associated with position iPos of rowid iRowid. This is used by the +** xInstToken() API. +** +** iRowid: +** Rowid for the current entry. +** +** iPos: +** Position of current entry within row. In the usual ((iCol<<32)+iOff) +** format (e.g. see macros FTS5_POS2COLUMN() and FTS5_POS2OFFSET()). +** +** iIter: +** If the Fts5TokenDataIter iterator that the entry is part of is +** actually an iterator (i.e. with nIter>0, not just a container for +** Fts5TokenDataMap structures), then this variable is an index into +** the apIter[] array. The corresponding term is that which the iterator +** at apIter[iIter] currently points to. +** +** Or, if the Fts5TokenDataIter iterator is just a container object +** (nIter==0), then iIter is an index into the term.p[] buffer where +** the term is stored. +** +** nByte: +** In the case where iIter is an index into term.p[], this variable +** is the size of the term in bytes. If iIter is an index into apIter[], +** this variable is unused. +*/ +struct Fts5TokenDataMap { + i64 iRowid; /* Row this token is located in */ + i64 iPos; /* Position of token */ + int iIter; /* Iterator token was read from */ + int nByte; /* Length of token in bytes (or 0) */ +}; + +/* +** An object used to supplement Fts5Iter for tokendata=1 iterators. +** +** This object serves two purposes. The first is as a container for an array +** of Fts5TokenDataMap structures, which are used to find the token required +** when the xInstToken() API is used. This is done by the nMapAlloc, nMap and +** aMap[] variables. +*/ +struct Fts5TokenDataIter { + int nMapAlloc; /* Allocated size of aMap[] in entries */ + int nMap; /* Number of valid entries in aMap[] */ + Fts5TokenDataMap *aMap; /* Array of (rowid+pos -> token) mappings */ + + /* The following are used for prefix-queries only. */ + Fts5Buffer terms; + + /* The following are used for other full-token tokendata queries only. */ + int nIter; + int nIterAlloc; + Fts5PoslistReader *aPoslistReader; + int *aPoslistToIter; + Fts5Iter *apIter[1]; +}; + +/* +** The two input arrays - a1[] and a2[] - are in sorted order. This function +** merges the two arrays together and writes the result to output array +** aOut[]. aOut[] is guaranteed to be large enough to hold the result. +** +** Duplicate entries are copied into the output. So the size of the output +** array is always (n1+n2) entries. +*/ +static void fts5TokendataMerge( + Fts5TokenDataMap *a1, int n1, /* Input array 1 */ + Fts5TokenDataMap *a2, int n2, /* Input array 2 */ + Fts5TokenDataMap *aOut /* Output array */ +){ + int i1 = 0; + int i2 = 0; + + assert( n1>=0 && n2>=0 ); + while( i1=n2 || (i1rc==SQLITE_OK ){ + if( pT->nMap==pT->nMapAlloc ){ + int nNew = pT->nMapAlloc ? pT->nMapAlloc*2 : 64; + int nByte = nNew * sizeof(Fts5TokenDataMap); + Fts5TokenDataMap *aNew; + + aNew = (Fts5TokenDataMap*)sqlite3_realloc(pT->aMap, nByte); + if( aNew==0 ){ + p->rc = SQLITE_NOMEM; + return; + } + + pT->aMap = aNew; + pT->nMapAlloc = nNew; + } + + pT->aMap[pT->nMap].iRowid = iRowid; + pT->aMap[pT->nMap].iPos = iPos; + pT->aMap[pT->nMap].iIter = iIter; + pT->aMap[pT->nMap].nByte = nByte; + pT->nMap++; + } +} + +/* +** Sort the contents of the pT->aMap[] array. +** +** The sorting algorithm requries a malloc(). If this fails, an error code +** is left in Fts5Index.rc before returning. +*/ +static void fts5TokendataIterSortMap(Fts5Index *p, Fts5TokenDataIter *pT){ + Fts5TokenDataMap *aTmp = 0; + int nByte = pT->nMap * sizeof(Fts5TokenDataMap); + + aTmp = (Fts5TokenDataMap*)sqlite3Fts5MallocZero(&p->rc, nByte); + if( aTmp ){ + Fts5TokenDataMap *a1 = pT->aMap; + Fts5TokenDataMap *a2 = aTmp; + i64 nHalf; + + for(nHalf=1; nHalfnMap; nHalf=nHalf*2){ + int i1; + for(i1=0; i1nMap; i1+=(nHalf*2)){ + int n1 = MIN(nHalf, pT->nMap-i1); + int n2 = MIN(nHalf, pT->nMap-i1-n1); + fts5TokendataMerge(&a1[i1], n1, &a1[i1+n1], n2, &a2[i1]); + } + SWAPVAL(Fts5TokenDataMap*, a1, a2); + } + + if( a1!=pT->aMap ){ + memcpy(pT->aMap, a1, pT->nMap*sizeof(Fts5TokenDataMap)); + } + sqlite3_free(aTmp); + +#ifdef SQLITE_DEBUG + { + int ii; + for(ii=1; iinMap; ii++){ + Fts5TokenDataMap *p1 = &pT->aMap[ii-1]; + Fts5TokenDataMap *p2 = &pT->aMap[ii]; + assert( p1->iRowidiRowid + || (p1->iRowid==p2->iRowid && p1->iPos<=p2->iPos) + ); + } + } +#endif + } +} + +/* +** Delete an Fts5TokenDataIter structure and its contents. +*/ +static void fts5TokendataIterDelete(Fts5TokenDataIter *pSet){ + if( pSet ){ + int ii; + for(ii=0; iinIter; ii++){ + fts5MultiIterFree(pSet->apIter[ii]); + } + fts5BufferFree(&pSet->terms); + sqlite3_free(pSet->aPoslistReader); + sqlite3_free(pSet->aMap); + sqlite3_free(pSet); + } +} + + +/* +** fts5VisitEntries() context object used by fts5SetupPrefixIterTokendata() +** to pass data to prefixIterSetupTokendataCb(). +*/ +typedef struct TokendataSetupCtx TokendataSetupCtx; +struct TokendataSetupCtx { + Fts5TokenDataIter *pT; /* Object being populated with mappings */ + int iTermOff; /* Offset of current term in terms.p[] */ + int nTermByte; /* Size of current term in bytes */ +}; + +/* +** fts5VisitEntries() callback used by fts5SetupPrefixIterTokendata(). This +** callback adds an entry to the Fts5TokenDataIter.aMap[] array for each +** position in the current position-list. It doesn't matter that some of +** these may be out of order - they will be sorted later. +*/ +static void prefixIterSetupTokendataCb( + Fts5Index *p, + void *pCtx, + Fts5Iter *p1, + const u8 *pNew, + int nNew +){ + TokendataSetupCtx *pSetup = (TokendataSetupCtx*)pCtx; + int iPosOff = 0; + i64 iPos = 0; + + if( pNew ){ + pSetup->nTermByte = nNew-1; + pSetup->iTermOff = pSetup->pT->terms.n; + fts5BufferAppendBlob(&p->rc, &pSetup->pT->terms, nNew-1, pNew+1); + } + + while( 0==sqlite3Fts5PoslistNext64( + p1->base.pData, p1->base.nData, &iPosOff, &iPos + ) ){ + fts5TokendataIterAppendMap(p, + pSetup->pT, pSetup->iTermOff, pSetup->nTermByte, p1->base.iRowid, iPos + ); + } +} + + /* ** Context object passed by fts5SetupPrefixIter() to fts5VisitEntries(). */ @@ -6287,6 +6529,7 @@ struct PrefixSetupCtx { Fts5Buffer *aBuf; int nBuf; Fts5Buffer doclist; + TokendataSetupCtx *pTokendata; }; /* @@ -6331,6 +6574,10 @@ static void prefixIterSetupCb( ); pSetup->iLastRowid = p1->base.iRowid; } + + if( pSetup->pTokendata ){ + prefixIterSetupTokendataCb(p, (void*)pSetup->pTokendata, p1, pNew, nNew); + } } static void fts5SetupPrefixIter( @@ -6344,11 +6591,21 @@ static void fts5SetupPrefixIter( ){ Fts5Structure *pStruct; PrefixSetupCtx s; + TokendataSetupCtx s2; memset(&s, 0, sizeof(s)); + memset(&s2, 0, sizeof(s2)); + s.nMerge = 1; s.iLastRowid = 0; s.nBuf = 32; + if( iIdx==0 + && p->pConfig->eDetail==FTS5_DETAIL_FULL + && p->pConfig->bPrefixInsttoken + ){ + s.pTokendata = &s2; + s2.pT = (Fts5TokenDataIter*)fts5IdxMalloc(p, sizeof(*s2.pT)); + } if( p->pConfig->eDetail==FTS5_DETAIL_NONE ){ s.xMerge = fts5MergeRowidLists; @@ -6400,8 +6657,15 @@ static void fts5SetupPrefixIter( if( s.doclist.n ) memcpy(pData->p, s.doclist.p, s.doclist.n); fts5MultiIterNew2(p, pData, bDesc, ppIter); } + + if( p->rc==SQLITE_OK && s.pTokendata ){ + fts5TokendataIterSortMap(p, s2.pT); + (*ppIter)->pTokenDataIter = s2.pT; + s2.pT = 0; + } } + fts5TokendataIterDelete(s2.pT); fts5BufferFree(&s.doclist); fts5StructureRelease(pStruct); sqlite3_free(s.aBuf); @@ -6658,71 +6922,6 @@ static void fts5SegIterSetEOF(Fts5SegIter *pSeg){ pSeg->pLeaf = 0; } -/* -** Usually, a tokendata=1 iterator (struct Fts5TokenDataIter) accumulates an -** array of these for each row it visits (so all iRowid fields are the same). -** Or, for an iterator used by an "ORDER BY rank" query, it accumulates an -** array of these for the entire query (in which case iRowid fields may take -** a variety of values). -** -** Each instance in the array indicates the iterator (and therefore term) -** associated with position iPos of rowid iRowid. This is used by the -** xInstToken() API. -** -** iRowid: -** Rowid for the current entry. -** -** iPos: -** Position of current entry within row. In the usual ((iCol<<32)+iOff) -** format (e.g. see macros FTS5_POS2COLUMN() and FTS5_POS2OFFSET()). -** -** iIter: -** If the Fts5TokenDataIter iterator that the entry is part of is -** actually an iterator (i.e. with nIter>0, not just a container for -** Fts5TokenDataMap structures), then this variable is an index into -** the apIter[] array. The corresponding term is that which the iterator -** at apIter[iIter] currently points to. -** -** Or, if the Fts5TokenDataIter iterator is just a container object -** (nIter==0), then iIter is an index into the term.p[] buffer where -** the term is stored. -** -** nByte: -** In the case where iIter is an index into term.p[], this variable -** is the size of the term in bytes. If iIter is an index into apIter[], -** this variable is unused. -*/ -struct Fts5TokenDataMap { - i64 iRowid; /* Row this token is located in */ - i64 iPos; /* Position of token */ - int iIter; /* Iterator token was read from */ - int nByte; /* Length of token in bytes (or 0) */ -}; - -/* -** An object used to supplement Fts5Iter for tokendata=1 iterators. -** -** This object serves two purposes. The first is as a container for an array -** of Fts5TokenDataMap structures, which are used to find the token required -** when the xInstToken() API is used. This is done by the nMapAlloc, nMap and -** aMap[] variables. -*/ -struct Fts5TokenDataIter { - int nMapAlloc; /* Allocated size of aMap[] in entries */ - int nMap; /* Number of valid entries in aMap[] */ - Fts5TokenDataMap *aMap; /* Array of (rowid+pos -> token) mappings */ - - /* The following are used for prefix-queries only. */ - Fts5Buffer terms; - - /* The following are used for other full-token tokendata queries only. */ - int nIter; - int nIterAlloc; - Fts5PoslistReader *aPoslistReader; - int *aPoslistToIter; - Fts5Iter *apIter[1]; -}; - /* ** This function appends iterator pAppend to Fts5TokenDataIter pIn and ** returns the result. @@ -6759,57 +6958,6 @@ static Fts5TokenDataIter *fts5AppendTokendataIter( return pRet; } -/* -** Delete an Fts5TokenDataIter structure and its contents. -*/ -static void fts5TokendataIterDelete(Fts5TokenDataIter *pSet){ - if( pSet ){ - int ii; - for(ii=0; iinIter; ii++){ - fts5MultiIterFree(pSet->apIter[ii]); - } - fts5BufferFree(&pSet->terms); - sqlite3_free(pSet->aPoslistReader); - sqlite3_free(pSet->aMap); - sqlite3_free(pSet); - } -} - -/* -** Append a mapping to the token-map belonging to object pT. -*/ -static void fts5TokendataIterAppendMap( - Fts5Index *p, - Fts5TokenDataIter *pT, - int iIter, - int nByte, - i64 iRowid, - i64 iPos -){ - if( p->rc==SQLITE_OK ){ - if( pT->nMap==pT->nMapAlloc ){ - int nNew = pT->nMapAlloc ? pT->nMapAlloc*2 : 64; - int nByte = nNew * sizeof(Fts5TokenDataMap); - Fts5TokenDataMap *aNew; - - aNew = (Fts5TokenDataMap*)sqlite3_realloc(pT->aMap, nByte); - if( aNew==0 ){ - p->rc = SQLITE_NOMEM; - return; - } - - pT->aMap = aNew; - pT->nMapAlloc = nNew; - } - - pT->aMap[pT->nMap].iRowid = iRowid; - pT->aMap[pT->nMap].iPos = iPos; - pT->aMap[pT->nMap].iIter = iIter; - pT->aMap[pT->nMap].nByte = nByte; - pT->nMap++; - } -} - /* ** The iterator passed as the only argument must be a tokendata=1 iterator ** (pIter->pTokenDataIter!=0). This function sets the iterator output @@ -7285,127 +7433,6 @@ const char *sqlite3Fts5IterTerm(Fts5IndexIter *pIndexIter, int *pn){ return (z ? &z[1] : 0); } -/* -** The two input arrays - a1[] and a2[] - are in sorted order. This function -** merges the two arrays together and writes the result to output array -** aOut[]. aOut[] is guaranteed to be large enough to hold the result. -** -** Duplicate entries are copied into the output. So the size of the output -** array is always (n1+n2) entries. -*/ -static void fts5TokendataMerge( - Fts5TokenDataMap *a1, int n1, /* Input array 1 */ - Fts5TokenDataMap *a2, int n2, /* Input array 2 */ - Fts5TokenDataMap *aOut /* Output array */ -){ - int i1 = 0; - int i2 = 0; - - assert( n1>=0 && n2>=0 ); - while( i1=n2 || (i1aMap[] array. -** -** The sorting algorithm requries a malloc(). If this fails, an error code -** is left in Fts5Index.rc before returning. -*/ -static void fts5TokendataIterSortMap(Fts5Index *p, Fts5TokenDataIter *pT){ - Fts5TokenDataMap *aTmp = 0; - int nByte = pT->nMap * sizeof(Fts5TokenDataMap); - - aTmp = (Fts5TokenDataMap*)sqlite3Fts5MallocZero(&p->rc, nByte); - if( aTmp ){ - Fts5TokenDataMap *a1 = pT->aMap; - Fts5TokenDataMap *a2 = aTmp; - i64 nHalf; - - for(nHalf=1; nHalfnMap; nHalf=nHalf*2){ - int i1; - for(i1=0; i1nMap; i1+=(nHalf*2)){ - int n1 = MIN(nHalf, pT->nMap-i1); - int n2 = MIN(nHalf, pT->nMap-i1-n1); - fts5TokendataMerge(&a1[i1], n1, &a1[i1+n1], n2, &a2[i1]); - } - SWAPVAL(Fts5TokenDataMap*, a1, a2); - } - - if( a1!=pT->aMap ){ - memcpy(pT->aMap, a1, pT->nMap*sizeof(Fts5TokenDataMap)); - } - sqlite3_free(aTmp); - -#ifdef SQLITE_DEBUG - { - int ii; - for(ii=1; iinMap; ii++){ - Fts5TokenDataMap *p1 = &pT->aMap[ii-1]; - Fts5TokenDataMap *p2 = &pT->aMap[ii]; - assert( p1->iRowidiRowid - || (p1->iRowid==p2->iRowid && p1->iPos<=p2->iPos) - ); - } - } -#endif - } -} - -/* -** fts5VisitEntries() context object used by fts5SetupPrefixIterTokendata() -** to pass data to prefixIterSetupTokendataCb(). -*/ -typedef struct TokendataSetupCtx TokendataSetupCtx; -struct TokendataSetupCtx { - Fts5TokenDataIter *pT; /* Object being populated with mappings */ - int iTermOff; /* Offset of current term in terms.p[] */ - int nTermByte; /* Size of current term in bytes */ -}; - -/* -** fts5VisitEntries() callback used by fts5SetupPrefixIterTokendata(). This -** callback adds an entry to the Fts5TokenDataIter.aMap[] array for each -** position in the current position-list. It doesn't matter that some of -** these may be out of order - they will be sorted later. -*/ -static void prefixIterSetupTokendataCb( - Fts5Index *p, - void *pCtx, - Fts5Iter *p1, - const u8 *pNew, - int nNew -){ - TokendataSetupCtx *pSetup = (TokendataSetupCtx*)pCtx; - int iPosOff = 0; - i64 iPos = 0; - - if( pNew ){ - pSetup->nTermByte = nNew-1; - pSetup->iTermOff = pSetup->pT->terms.n; - fts5BufferAppendBlob(&p->rc, &pSetup->pT->terms, nNew-1, pNew+1); - } - - while( 0==sqlite3Fts5PoslistNext64( - p1->base.pData, p1->base.nData, &iPosOff, &iPos - ) ){ - fts5TokendataIterAppendMap(p, - pSetup->pT, pSetup->iTermOff, pSetup->nTermByte, p1->base.iRowid, iPos - ); - } -} - /* ** pIter is a prefix query. This function populates pIter->pTokenDataIter ** with an Fts5TokenDataIter object containing mappings for all rows diff --git a/ext/fts5/fts5_main.c b/ext/fts5/fts5_main.c index 5713fccdd1..a65750f8e1 100644 --- a/ext/fts5/fts5_main.c +++ b/ext/fts5/fts5_main.c @@ -93,6 +93,7 @@ struct Fts5Global { #define FTS5_LOCALE_HDR_SIZE ((int)sizeof( ((Fts5Global*)0)->aLocaleHdr )) #define FTS5_LOCALE_HDR(pConfig) ((const u8*)(pConfig->pGlobal->aLocaleHdr)) +#define FTS5_INSTTOKEN_SUBTYPE 73 /* ** Each auxiliary function registered with the FTS5 module is represented @@ -1417,6 +1418,7 @@ static int fts5FilterMethod( sqlite3_value *pRowidGe = 0; /* rowid >= ? expression (or NULL) */ int iCol; /* Column on LHS of MATCH operator */ char **pzErrmsg = pConfig->pzErrmsg; + int bPrefixInsttoken = pConfig->bPrefixInsttoken; int i; int iIdxStr = 0; Fts5Expr *pExpr = 0; @@ -1452,6 +1454,9 @@ static int fts5FilterMethod( rc = fts5ExtractExprText(pConfig, apVal[i], &zText, &bFreeAndReset); if( rc!=SQLITE_OK ) goto filter_out; if( zText==0 ) zText = ""; + if( sqlite3_value_subtype(apVal[i])==FTS5_INSTTOKEN_SUBTYPE ){ + pConfig->bPrefixInsttoken = 1; + } iCol = 0; do{ @@ -1592,6 +1597,7 @@ static int fts5FilterMethod( filter_out: sqlite3Fts5ExprFree(pExpr); pConfig->pzErrmsg = pzErrmsg; + pConfig->bPrefixInsttoken = bPrefixInsttoken; return rc; } @@ -3651,6 +3657,19 @@ static void fts5LocaleFunc( } } +/* +** Implementation of fts5_insttoken() function. +*/ +static void fts5InsttokenFunc( + sqlite3_context *pCtx, /* Function call context */ + int nArg, /* Number of args */ + sqlite3_value **apArg /* Function arguments */ +){ + assert( nArg==1 ); + sqlite3_result_value(pCtx, apArg[0]); + sqlite3_result_subtype(pCtx, FTS5_INSTTOKEN_SUBTYPE); +} + /* ** Return true if zName is the extension on one of the shadow tables used ** by this module. @@ -3780,10 +3799,17 @@ static int fts5Init(sqlite3 *db){ if( rc==SQLITE_OK ){ rc = sqlite3_create_function( db, "fts5_locale", 2, - SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_RESULT_SUBTYPE, + SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_RESULT_SUBTYPE|SQLITE_SUBTYPE, p, fts5LocaleFunc, 0, 0 ); } + if( rc==SQLITE_OK ){ + rc = sqlite3_create_function( + db, "fts5_insttoken", 1, + SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_RESULT_SUBTYPE, + p, fts5InsttokenFunc, 0, 0 + ); + } } /* If SQLITE_FTS5_ENABLE_TEST_MI is defined, assume that the file diff --git a/ext/fts5/test/fts5origintext.test b/ext/fts5/test/fts5origintext.test index 9741f786e8..be77cbfca5 100644 --- a/ext/fts5/test/fts5origintext.test +++ b/ext/fts5/test/fts5origintext.test @@ -22,34 +22,40 @@ ifcapable !fts5 { } foreach_detail_mode $testprefix { +foreach {tn insttoken} { + 1 0 + 2 1 +} { +reset_db sqlite3_fts5_register_origintext db -do_execsql_test 1.0 { +do_execsql_test $tn.1.0 { CREATE VIRTUAL TABLE ft USING fts5( x, tokenize="origintext unicode61", detail=%DETAIL% ); + INSERT INTO ft(ft, rank) VALUES('insttoken', $insttoken); CREATE VIRTUAL TABLE vocab USING fts5vocab(ft, instance); } -do_execsql_test 1.1 { +do_execsql_test $tn.1.1 { INSERT INTO ft VALUES('Hello world'); } -do_execsql_test 1.2 { +do_execsql_test $tn.1.2 { INSERT INTO ft(ft) VALUES('integrity-check'); } proc b {x} { string map [list "\0" "."] $x } db func b b -do_execsql_test 1.3 { +do_execsql_test $tn.1.3 { select b(term) from vocab; } { hello.Hello world } -do_execsql_test 1.4 { +do_execsql_test $tn.1.4 { SELECT rowid FROM ft('Hello'); } {1} @@ -88,33 +94,34 @@ proc document {} { db func document document sqlite3_fts5_register_origintext db -do_execsql_test 2.0 { +do_execsql_test $tn.2.0 { CREATE VIRTUAL TABLE ft USING fts5( x, tokenize="origintext unicode61", detail=%DETAIL% ); + INSERT INTO ft(ft, rank) VALUES('insttoken', $insttoken); INSERT INTO ft(ft, rank) VALUES('pgsz', 128); CREATE VIRTUAL TABLE vocab USING fts5vocab(ft, instance); } -do_test 2.1 { +do_test $tn.2.1 { for {set ii 0} {$ii < 500} {incr ii} { execsql { INSERT INTO ft VALUES( document() ) } } } {} -do_execsql_test 2.2 { +do_execsql_test $tn.2.2 { INSERT INTO ft(ft) VALUES('integrity-check'); } -do_execsql_test 2.3 { +do_execsql_test $tn.2.3 { INSERT INTO ft(ft, rank) VALUES('merge', 16); } -do_execsql_test 2.4 { +do_execsql_test $tn.2.4 { INSERT INTO ft(ft) VALUES('integrity-check'); } -do_execsql_test 2.5 { +do_execsql_test $tn.2.5 { INSERT INTO ft(ft) VALUES('optimize'); } @@ -122,10 +129,11 @@ do_execsql_test 2.5 { reset_db sqlite3_fts5_register_origintext db -do_execsql_test 3.0 { +do_execsql_test $tn.3.0 { CREATE VIRTUAL TABLE ft USING fts5( x, tokenize="origintext unicode61", detail=%DETAIL% ); + INSERT INTO ft(ft, rank) VALUES('insttoken', $insttoken); CREATE VIRTUAL TABLE vocab USING fts5vocab(ft, instance); INSERT INTO ft(rowid, x) VALUES(1, 'hello'); @@ -137,16 +145,17 @@ do_execsql_test 3.0 { #db func b b #execsql_pp { SELECT b(term) FROM vocab } -do_execsql_test 3.1.1 { SELECT rowid FROM ft('hello') } 1 -do_execsql_test 3.1.2 { SELECT rowid FROM ft('Hello') } 2 -do_execsql_test 3.1.3 { SELECT rowid FROM ft('HELLO') } 3 +do_execsql_test $tn.3.1.1 { SELECT rowid FROM ft('hello') } 1 +do_execsql_test $tn.3.1.2 { SELECT rowid FROM ft('Hello') } 2 +do_execsql_test $tn.3.1.3 { SELECT rowid FROM ft('HELLO') } 3 -do_execsql_test 3.2 { +do_execsql_test $tn.3.2 { CREATE VIRTUAL TABLE ft2 USING fts5(x, tokenize="origintext unicode61", tokendata=1, detail=%DETAIL% ); + INSERT INTO ft2(ft2, rank) VALUES('insttoken', $insttoken); CREATE VIRTUAL TABLE vocab2 USING fts5vocab(ft2, instance); INSERT INTO ft2(rowid, x) VALUES(1, 'hello'); @@ -160,16 +169,16 @@ do_execsql_test 3.2 { #db func b b #execsql_pp { SELECT b(term) FROM vocab } -do_execsql_test 3.3.1 { SELECT rowid FROM ft2('hello') } {1 2 3} -do_execsql_test 3.3.2 { SELECT rowid FROM ft2('Hello') } {1 2 3} -do_execsql_test 3.3.3 { SELECT rowid FROM ft2('HELLO') } {1 2 3} +do_execsql_test $tn.3.3.1 { SELECT rowid FROM ft2('hello') } {1 2 3} +do_execsql_test $tn.3.3.2 { SELECT rowid FROM ft2('Hello') } {1 2 3} +do_execsql_test $tn.3.3.3 { SELECT rowid FROM ft2('HELLO') } {1 2 3} -do_execsql_test 3.3.4 { SELECT rowid FROM ft2('hello*') } {1 2 3 10} +do_execsql_test $tn.3.3.4 { SELECT rowid FROM ft2('hello*') } {1 2 3 10} -do_execsql_test 3.3.5.1 { SELECT rowid FROM ft2('HELLO') ORDER BY rowid DESC} { +do_execsql_test $tn.3.3.5.1 { SELECT rowid FROM ft2('HELLO') ORDER BY rowid DESC} { 3 2 1 } -do_execsql_test 3.3.5.2 { SELECT rowid FROM ft2('HELLO') ORDER BY +rowid DESC} { +do_execsql_test $tn.3.3.5.2 { SELECT rowid FROM ft2('HELLO') ORDER BY +rowid DESC} { 3 2 1 } @@ -183,36 +192,37 @@ proc querytoken {cmd iPhrase iToken} { } sqlite3_fts5_create_function db querytoken querytoken -do_execsql_test 4.0 { +do_execsql_test $tn.4.0 { CREATE VIRTUAL TABLE ft USING fts5( x, tokenize='origintext unicode61', tokendata=1, detail=%DETAIL% ); + INSERT INTO ft(ft, rank) VALUES('insttoken', $insttoken); INSERT INTO ft VALUES('one two three four'); } -do_execsql_test 4.1 { +do_execsql_test $tn.4.1 { SELECT rowid, querytoken(ft, 0, 0) FROM ft('TwO') } {1 two.TwO} -do_execsql_test 4.2 { +do_execsql_test $tn.4.2 { SELECT rowid, querytoken(ft, 0, 0) FROM ft('one TWO ThreE') } {1 one} -do_execsql_test 4.3 { +do_execsql_test $tn.4.3 { SELECT rowid, querytoken(ft, 1, 0) FROM ft('one TWO ThreE') } {1 two.TWO} if {"%DETAIL%"=="full"} { # Phrase queries are only supported for detail=full. # - do_execsql_test 4.4 { + do_execsql_test $tn.4.4 { SELECT rowid, querytoken(ft, 0, 2) FROM ft('"one TWO ThreE"') } {1 three.ThreE} - do_catchsql_test 4.5 { + do_catchsql_test $tn.4.5 { SELECT rowid, querytoken(ft, 0, 3) FROM ft('"one TWO ThreE"') } {1 SQLITE_RANGE} - do_catchsql_test 4.6 { + do_catchsql_test $tn.4.6 { SELECT rowid, querytoken(ft, 1, 0) FROM ft('"one TWO ThreE"') } {1 SQLITE_RANGE} - do_catchsql_test 4.7 { + do_catchsql_test $tn.4.7 { SELECT rowid, querytoken(ft, -1, 0) FROM ft('"one TWO ThreE"') } {1 SQLITE_RANGE} } @@ -228,14 +238,15 @@ proc insttoken {cmd iIdx iToken} { sqlite3_fts5_create_function db insttoken insttoken fts5_aux_test_functions db -do_execsql_test 5.0 { +do_execsql_test $tn.5.0 { CREATE VIRTUAL TABLE ft USING fts5( x, tokenize='origintext unicode61', tokendata=1, detail=%DETAIL% ); + INSERT INTO ft(ft, rank) VALUES('insttoken', $insttoken); INSERT INTO ft VALUES('one ONE One oNe oNE one'); } -do_execsql_test 5.1 { +do_execsql_test $tn.5.1 { SELECT insttoken(ft, 0, 0), insttoken(ft, 1, 0), insttoken(ft, 2, 0), @@ -247,13 +258,37 @@ do_execsql_test 5.1 { one one.ONE one.One one.oNe one.oNE one } -do_execsql_test 5.2 { +do_execsql_test $tn.5.2 { + SELECT insttoken(ft, 0, 0), + insttoken(ft, 1, 0), + insttoken(ft, 2, 0), + insttoken(ft, 3, 0), + insttoken(ft, 4, 0), + insttoken(ft, 5, 0) + FROM ft('on*'); +} { + one one.ONE one.One one.oNe one.oNE one +} + +do_execsql_test $tn.5.3 { + SELECT insttoken(ft, 0, 0), + insttoken(ft, 1, 0), + insttoken(ft, 2, 0), + insttoken(ft, 3, 0), + insttoken(ft, 4, 0), + insttoken(ft, 5, 0) + FROM ft(fts5_insttoken('on*')); +} { + one one.ONE one.One one.oNe one.oNE one +} + +do_execsql_test $tn.5.4 { SELECT insttoken(ft, 1, 0) FROM ft('one'); } { one.ONE } -do_execsql_test 5.3 { +do_execsql_test $tn.5.5 { SELECT fts5_test_poslist(ft) FROM ft('one'); } { {0.0.0 0.0.1 0.0.2 0.0.3 0.0.4 0.0.5} @@ -267,10 +302,11 @@ do_execsql_test 5.3 { # reset_db sqlite3_fts5_register_origintext db -do_execsql_test 6.0 { +do_execsql_test $tn.6.0 { CREATE VIRTUAL TABLE ft USING fts5( x, y, tokenize='origintext unicode61', detail=%DETAIL%, tokendata=0 ); + INSERT INTO ft(ft, rank) VALUES('insttoken', $insttoken); INSERT INTO ft VALUES('One Two', 'Three two'); INSERT INTO ft VALUES('three Three', 'one One'); @@ -286,34 +322,35 @@ proc tokens {cmd} { } sqlite3_fts5_create_function db tokens tokens -do_execsql_test 6.1 { +do_execsql_test $tn.6.1 { SELECT rowid, tokens(ft) FROM ft('One'); } {1 one.One 2 one.One} -do_execsql_test 6.2 { +do_execsql_test $tn.6.2 { SELECT rowid, tokens(ft) FROM ft('on*'); } {1 one.One 2 {one one.One}} -do_execsql_test 6.3 { +do_execsql_test $tn.6.3 { SELECT rowid, tokens(ft) FROM ft('Three*'); } {1 three.Three 2 three.Three} fts5_aux_test_functions db -do_catchsql_test 6.4 { +do_catchsql_test $tn.6.4 { SELECT fts5_test_insttoken(ft, -1, 0) FROM ft('one'); } {1 SQLITE_RANGE} -do_catchsql_test 6.5 { +do_catchsql_test $tn.6.5 { SELECT fts5_test_insttoken(ft, 1, 0) FROM ft('one'); } {1 SQLITE_RANGE} -do_catchsql_test 6.6 { +do_catchsql_test $tn.6.6 { CREATE VIRTUAL TABLE ft2 USING fts5(x, tokendata=2); } {1 {malformed tokendata=... directive}} -do_catchsql_test 6.7 { +do_catchsql_test $tn.6.7 { CREATE VIRTUAL TABLE ft2 USING fts5(x, content='', tokendata=11); } {1 {malformed tokendata=... directive}} +} } finish_test diff --git a/ext/fts5/test/fts5origintext3.test b/ext/fts5/test/fts5origintext3.test index a4bca0de9b..351ab1f617 100644 --- a/ext/fts5/test/fts5origintext3.test +++ b/ext/fts5/test/fts5origintext3.test @@ -22,6 +22,11 @@ ifcapable !fts5 { } foreach_detail_mode $testprefix { + foreach {tn insttoken} { + 1 0 + 2 1 + } { + reset_db sqlite3_fts5_register_origintext db @@ -32,21 +37,25 @@ foreach_detail_mode $testprefix { } sqlite3_fts5_create_function db insttoken insttoken - do_execsql_test 1.0 { + do_execsql_test $tn.1.0 { CREATE VIRTUAL TABLE ft USING fts5( x, tokenize="origintext unicode61", tokendata=1, detail=%DETAIL% ); } + + do_execsql_test $tn.1.0.1 { + INSERT INTO ft(ft, rank) VALUES('insttoken', 1); + } - do_execsql_test 1.1 { + do_execsql_test $tn.1.1 { INSERT INTO ft VALUES('Hello world HELLO WORLD hello'); } - do_execsql_test 1.2 { + do_execsql_test $tn.1.2 { SELECT fts5_test_poslist(ft) FROM ft('hello'); } {{0.0.0 0.0.2 0.0.4}} - do_execsql_test 1.3 { + do_execsql_test $tn.1.3 { SELECT insttoken(ft, 0, 0), insttoken(ft, 1, 0), @@ -54,7 +63,15 @@ foreach_detail_mode $testprefix { FROM ft('hello'); } {hello.Hello hello.HELLO hello} - do_execsql_test 1.4 { + do_execsql_test $tn.1.3.1 { + SELECT + insttoken(ft, 0, 0), + insttoken(ft, 1, 0), + insttoken(ft, 2, 0) + FROM ft('hel*'); + } {hello.Hello hello.HELLO hello} + + do_execsql_test $tn.1.4 { SELECT insttoken(ft, 0, 0), insttoken(ft, 1, 0), @@ -62,7 +79,7 @@ foreach_detail_mode $testprefix { FROM ft('hello') ORDER BY rank; } {hello.Hello hello.HELLO hello} - do_execsql_test 1.5 { + do_execsql_test $tn.1.5 { CREATE VIRTUAL TABLE ft2 USING fts5( x, tokenize="origintext unicode61", tokendata=1, detail=%DETAIL% ); @@ -71,11 +88,11 @@ foreach_detail_mode $testprefix { INSERT INTO ft2(rowid, x) VALUES(3, 'THREE one two three THREE'); } - do_execsql_test 1.6 { + do_execsql_test $tn.1.6 { SELECT insttoken(ft2, 0, 0), rowid FROM ft2('three') ORDER BY rank; } {three.THREE 3 three 1 three 2} - do_execsql_test 1.7 { + do_execsql_test $tn.1.7 { INSERT INTO ft2(rowid, x) VALUES(10, 'aaa bbb BBB'); INSERT INTO ft2(rowid, x) VALUES(12, 'bbb bbb bbb'); INSERT INTO ft2(rowid, x) VALUES(13, 'bbb bbb bbb'); @@ -92,16 +109,16 @@ foreach_detail_mode $testprefix { INSERT INTO ft2(rowid, x) VALUES(24, 'aaa bbb BBB'); } - do_execsql_test 1.8 { SELECT rowid FROM ft2('aaa AND bbb'); } {10 24} - do_execsql_test 1.9 { SELECT rowid FROM ft2('bbb AND aaa'); } {10 24} + do_execsql_test $tn.1.8 { SELECT rowid FROM ft2('aaa AND bbb'); } {10 24} + do_execsql_test $tn.1.9 { SELECT rowid FROM ft2('bbb AND aaa'); } {10 24} - do_execsql_test 2.0 { + do_execsql_test $tn.2.0 { CREATE VIRTUAL TABLE ft3 USING fts5( x, tokenize="origintext unicode61", tokendata=1, detail=%DETAIL%, prefix=2 ); } - do_execsql_test 2.1 { + do_execsql_test $tn.2.1 { INSERT INTO ft3(rowid, x) VALUES(1, 'one'); INSERT INTO ft3(rowid, x) VALUES(2, 'ONE'); INSERT INTO ft3(rowid, x) VALUES(3, 'ONT'); @@ -109,15 +126,15 @@ foreach_detail_mode $testprefix { INSERT INTO ft3(rowid, x) VALUES(5, 'On'); } - do_execsql_test 2.2 { + do_execsql_test $tn.2.2 { SELECT rowid FROM ft3('on*'); } {1 2 3 4 5} - do_execsql_test 2.3 { + do_execsql_test $tn.2.3 { SELECT rowid, insttoken(ft3, 0, 0) FROM ft3('on*'); } {1 one 2 one.ONE 3 ont.ONT 4 on 5 on.On} - + } } finish_test diff --git a/manifest b/manifest index 2bd0c9cf8d..603ced6491 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\slatest\strunk\schanges\sinto\sthis\sbranch. -D 2024-11-01T19:41:22.452 +C Allow\san\sfts5\stable\sor\squery\sto\sbe\sconfigured\sto\scollect\sxInstToken\sdata\sfor\sany\sprefix\sterms\sas\spart\sof\sthe\sfirst\sparse\sof\sthe\smain\sindex,\sif\sany. +D 2024-11-02T19:10:50.264 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md c5b4009dca54d127d2d6033c22fd9cc34f53bedb6ef12c7cbaa468381c74ab28 @@ -49,7 +49,7 @@ F autosetup/cc.tcl 7e2fe943ae9d45cf39e9f5b05b6230df8e719415edea5af06c30eb68680bd F autosetup/default.auto 5cdf016de2140e50f1db190a02039dc42fb390af1dda4cc4853e3042a9ef0e82 F autosetup/jimsh0.c 27ea5f221359ef6c58780fc6c185aadbf8d3bee9a021331a3e5de0eba0dc6de6 F autosetup/pkg-config.tcl 4e635bf39022ff65e0d5434339dd41503ea48fc53822c9c5bde88b02d3d952ba -F autosetup/proj.tcl 68362ca12e1a32fe73ece32b59a8e8e02a3983295f2dd82c9c4700507bade02c w autosetup/hwaci-common.tcl +F autosetup/proj.tcl 68362ca12e1a32fe73ece32b59a8e8e02a3983295f2dd82c9c4700507bade02c F autosetup/system.tcl 3a39d6e0b3bfba526fd39afe07c1d0d325e5a31925013a1ba7c671e1128e31bb F autosetup/tmake.auto eaebc74ad538dfdd3c817c27eefc31930c20510c4f3a3704071f6cb0629ed71f F autosetup/tmake.tcl a275793ec1b6f8708179af0acef1f6f10d46c2920739743f7a8720c6d700c7a9 @@ -106,14 +106,14 @@ F ext/fts3/unicode/mkunicode.tcl 63db9624ccf70d4887836c320eda93ab552f21008f3be7e F ext/fts3/unicode/parseunicode.tcl a981bd6466d12dd17967515801c3ff23f74a281be1a03cf1e6f52a6959fc77eb F ext/fts5/extract_api_docs.tcl 009cf59c77afa86d137b0cca3e3b1a5efbe2264faa2df233f9a7aa8563926d15 F ext/fts5/fts5.h 6b4b92df890965567360db5f1ead24fd13a72cb23b95e4ed2ff58d1d89f7aa42 -F ext/fts5/fts5Int.h a282f33a260ddce09dc2b0334d41d83aab0893b2b1656eb83c595a3d0eec2975 +F ext/fts5/fts5Int.h 6abff7dd770dc5969c994c281e6e77fc277ce414d56cc4a62c145cc7036b0b67 F ext/fts5/fts5_aux.c 65a0468dd177d6093aa9ae1622e6d86b0136b8d267c62c0ad6493ad1e9a3d759 F ext/fts5/fts5_buffer.c 0eec58bff585f1a44ea9147eae5da2447292080ea435957f7488c70673cb6f09 -F ext/fts5/fts5_config.c a6633d88596758941c625b526075b85d3d9fd1089d8d9eab5db6e8a71fd347ad +F ext/fts5/fts5_config.c e7d8dd062b44a66cd77e5a0f74f23a2354cd1f3f8575afb967b2773c3384f7f8 F ext/fts5/fts5_expr.c 69b8d976058512c07dfe86e229521b7a871768157bd1607cedf1a5038dfd72c9 F ext/fts5/fts5_hash.c adda4272be401566a6e0ba1acbe70ee5cb97fce944bc2e04dc707152a0ec91b1 -F ext/fts5/fts5_index.c ee650a838fc0591776f7582de578f414959a76cc0118851e4c1f7d13e7365379 -F ext/fts5/fts5_main.c 50eb059e51d730e8e0c77df4e568b018079e112a755c094488b0d5b1aa06afbb +F ext/fts5/fts5_index.c 2cef40d6fdd761229dd4127e0b1ddcb61dfd6a4ac7e73653b7fddbe0075e50be +F ext/fts5/fts5_main.c b2ec6bf97fc378906c0e78c61f10ca8e64f15e03237f2521f7d81736983be378 F ext/fts5/fts5_storage.c 337b05e4c66fc822d031e264d65bde807ec2fab08665ca2cc8aaf9c5fa06792c F ext/fts5/fts5_tcl.c 5b16a249962809b2aaaab964bf58838ea72f30b8b12373cafe612f8cc71e2a40 F ext/fts5/fts5_test_mi.c 08c11ec968148d4cb4119d96d819f8c1f329812c568bac3684f5464be177d3ee @@ -214,9 +214,9 @@ F ext/fts5/test/fts5onepass.test f9b7d9b2c334900c6542a869760290e2ab5382af8fbd618 F ext/fts5/test/fts5optimize.test 264b9101721c17d06d1d174feb743fda3ddc89fad41dee980fef821428258e47 F ext/fts5/test/fts5optimize2.test 795d4ae5f66a7239cf8d5aef4c2ea96aeb8bcd907bd9be0cfe22064fc71a44ed F ext/fts5/test/fts5optimize3.test 1653029284e10e0715246819893ba30565c4ead0d0fc470adae92c353ea857d3 -F ext/fts5/test/fts5origintext.test 63d5b0dc00f0104add8960da0705a70bffd4d86b6feb6ddbb38bff21141d42f0 +F ext/fts5/test/fts5origintext.test 3b73aa036ce5244bb7c5782c5441b979585bdca026accf75d16026a2a8119c09 F ext/fts5/test/fts5origintext2.test f4505ff79bf7369f2b8b10b9cef7476049d844e20b37f29cad3a8b8d5ac6f9ba -F ext/fts5/test/fts5origintext3.test 1f5174a9f4cf42f58f833dbfb314940793ca4723854ec2651e7530ddb35a66a6 +F ext/fts5/test/fts5origintext3.test 4988b6375acc3bbb0515667765f57e389caf449814af9c1095c053f7de2b4223 F ext/fts5/test/fts5origintext4.test 0d3ef0a8038f471dbc83001c34fe5f7ae39b571bfc209670771eb28bc0fc50e8 F ext/fts5/test/fts5origintext5.test ee12b440ec335e5b422d1668aca0051b52ff28b6ee67073e8bbc29f509fd562b F ext/fts5/test/fts5phrase.test bb2554bb61d15f859678c96dc89a7de415cd5fc3b7b54c29b82a0d0ad138091c @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P bce9a524de6dda87daa90395cd55713d2d3ccfc090e53a947548e434db5eef5e 2dcc465a7090811ddbc210673f37b4c3a4439c501874abefd403efe1e98f5b17 -R 86617b1841d68e4c10c087c197cdd65c +P 790c56d493c66a2136e24d349d169639809d70bfab6996975a403be568a267a5 +R 71ba4975c4c76073cda6dd2f314d94d1 U dan -Z c01ad82d76d71ffe9e5032c32219c470 +Z 95da39a03d7bb4b9bc58c6dbf7b809e5 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 05f1de1961..94e1307210 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -790c56d493c66a2136e24d349d169639809d70bfab6996975a403be568a267a5 +46929ae92b26f02bc70de9931b21a8a7cf9a2453d5fb07f68b712f62e28e9152 From 8acaa6d039199a11231f087790500c72397d791a Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 6 Nov 2024 16:20:16 +0000 Subject: [PATCH 06/89] Add tests for xInstToken() and prefix queries with various fts5 configurations. FossilOrigin-Name: 9cc04331a01760189d88697233009dbe8a60eda589792ad01b56300499e9f54d --- ext/fts5/test/fts5origintext6.test | 209 +++++++++++++++++++++++++++++ manifest | 11 +- manifest.uuid | 2 +- 3 files changed, 216 insertions(+), 6 deletions(-) create mode 100644 ext/fts5/test/fts5origintext6.test diff --git a/ext/fts5/test/fts5origintext6.test b/ext/fts5/test/fts5origintext6.test new file mode 100644 index 0000000000..7b27e310b9 --- /dev/null +++ b/ext/fts5/test/fts5origintext6.test @@ -0,0 +1,209 @@ +# 2014 Jan 08 +# +# 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. +# +#*********************************************************************** +# +# Tests focused on phrase queries. +# + +source [file join [file dirname [info script]] fts5_common.tcl] +set testprefix fts5origintext6 + +# If SQLITE_ENABLE_FTS5 is not defined, omit this file. +ifcapable !fts5 { + finish_test + return +} + +proc insert_data {tbl} { + db eval " + INSERT INTO $tbl (rowid, x, y) VALUES + (1, 'ChH BDd HhG efc BjJ BGi GBG FdD','ciJ AFf ADf fBJ fhC GFI JEH fcA'), + (2, 'deg AIG Fie jII cCd Hbf igF fEE','GeA Ija gJg EDc HFi DDI dCf aDd'), + (3, 'IJC hga deC Jfa Aeg hfh CcH dfb','ajD hgC Jaf IfH CHe jIG AjD adF'), + (4, 'FiH GJH IDA AiG bBc CGG Eih bIH','hHg JaH aii IHE Ggd gcH gji CGc'), + (5, 'ceg CAd jFI GAB BGg EeC IdH acG','bBC eIG ifH eDE Adj bjb GCj ebA'), + (6, 'Eac Fbh aFF Eea jeG EIj HCc JJH','hbd giE Gfe eiI dEF abE cJf cAb'), + (7, 'dic hAc jEC AiG FEF jHc HiD HBI','aEd ebE Gfi AJG EBA faj GiG jjE'), + (8, 'Fca iEe EgE jjJ gce ijf EGc EBi','gaI dhH bFg CFc HeC CjI Jfg ccH'), + (9, 'cfd iaa HCf iHJ HjG ffh ABb ibi','CfG bia Dai eii Ejg Jeg fCg hDb'), + (10, 'Jjf hJC IID HJj bGB EbJ cgg eBj','jci jhi JAF jIg Bei Bcd cAC AJd'), + (11, 'egG Cdi bFf fEB hfH jDH jia Efd','FAd eCg fAi aiC baC eJG acF iGE'), + (12, 'Ada Gde CJI ADG gJA Cbb ccF iAB','eAE ajC FBB ccd Jgh fJg ieg hGE'), + (13, 'gBb fDG Jdd HdD fiJ Bed Cig iGg','heC FeI iaj gdg ebB giC HaD FIe'), + (14, 'FiI iDd Ffe igI bgB EJf FHG hDF','cjC AeI abf Fah cbJ ffH jEb aib'), + (15, 'jaF hBI jIH Gdh FEc Fij hgj jFh','dGA ADH feh AAI AfJ DbC gBi hGH'), + (16, 'gjH BGg iGj aFE CAH edI idf HEH','hIf DDg fjB hGi cHF BCH FjG Bgd'), + (17, 'iaI JGH hji gcj Dda eeG jDd CBi','cHg jeh caG gIc feF ihG hgJ Abj'), + (18, 'jHI iDB eFf AiH EFB CDb IAj GbC','Ghe dEI gdI jai gib dAG BIa djb'), + (19, 'abI fHG Ccf aAc FDa fiC agF bdB','afi hde IgE bGF cfg DHD diE aca'), + (20, 'IFh eDJ jfh cDg dde JGJ GAf fIJ','IBa EfH faE aeI FIF baJ FGj EIH'), + (21, 'Dee bFC bBA dEI CEj aJI ghA dCH','hBA ddA HJh dfj egI Dij dFE bGE'), + (22, 'JFE BCj FgA afc Jda FGD iHJ HDh','eAI jHe BHD Gah bbD Bgj gbh eGB'), + (23, 'edE CJE FjG aFI edA Cea FId iFe','ABG jcA ddj EEc Dcg hAI agA biA'), + (24, 'AgE cfc eef cGh aFB DcH efJ hcH','eGF HaB diG fgi bdc iGJ FGJ fFB'), + (25, 'aCa AgI GhC DDI hGJ Hgc Gcg bbG','iID Fga jHa jIj idj DFD bAC AFJ'), + (26, 'gjC JGh Fge faa eCA iGG gHE Gai','bDi hFE BbI DHD Adb Fgi hCa Hij'), + (27, 'Eji jEI jhF DFC afH cDh AGc dHA','IDe GcA ChF DIb Bif HfH agD DGh'), + (28, 'gDD AEE Dfg ICf Cbi JdE jgH eEi','eEb dBG FDE jgf cAI FaJ jaA cDd'), + (29, 'cbe Gec hgB Egi bca dHg bAJ jBf','EFB DgD GJc fDb EeE bBA GFC Hbe'), + (30, 'Adc eHB afI hDc Bhh baE hcJ BBd','JAH deg bcF Dab Bgj Gbb JHi FIB'), + (31, 'agF dIj AJJ Hfg cCG hED Igc fHC','JEf eia dHf Ggc Agj geD bEE Gei'), + (32, 'DAd cCe cbJ FjG gJe gba dJA GCf','eAf hFc bGE ABI hHA IcE abF CCE'), + (33, 'fFh jJe DhJ cDJ EBi AfD eFI IhG','fEG GCc Bjd EFF ggg CFe EHd ciB'), + (34, 'Ejb BjI eAF HaD eEJ FaG Eda AHC','Iah hgD EJG fdD cIE Daj IFf eJh'), + (35, 'aHG eCe FjA djJ dAJ jiJ IaE GGB','Acg iEF JfB FIC Eei ggj dic Iii'), + (36, 'Fdb EDF GaF JjB ehH IgC hgi DCG','cag DHI Fah hAJ bbh egG Hia hgJ'), + (37, 'HGg icC JEC AFJ Ddh dhi hfC Ich','fEg bED Bff hCJ EiA cIf bfG cGA'), + (38, 'aEJ jGI BCi FaA ebA BHj cIJ GcC','dCH ADd bGB cFE AgF geD cbG jIc'), + (39, 'JFB bBi heA BFA hgB Ahj EIE CgI','EIJ JFG FJE GeA Hdg HeH ACh GiA'), + (40, 'agB DDC CED igC Dfc DhI eiC fHi','dAB dcg iJF cej Fcc cAc AfB Fdd'), + (41, 'BdF DHj Ege hcG DEd eFa dCf gBb','FBG ChB cej iGd Hbh fCc Ibe Abh'), + (42, 'Bgc DjI cbC jGD bdb hHB IJA IJH','heg cii abb IGf eDe hJc dii fcE'), + (43, 'fhf ECa FiA aDh Jbf CiB Jhe ajD','GFE bIF aeD gDE BIE Jea DfC BEc'), + (44, 'GjE dBj DbJ ICF aDh EEH Ejb jFb','dJj aEc IBg bEG Faf fjA hjf FAF'), + (45, 'BfA efd IIJ AHG dDF eGg dIJ Gcb','Bfj jeb Ahc dAE ACH Dfb ieb dhC'), + (46, 'Ibj ege geC dJh CIi hbD EAG fGA','DEb BFe Bjg FId Fhg HeF JAc BbE'), + (47, 'dhB afC hgG bEJ aIe Cbe iEE JCD','bdg Ajc FGA jbh Jge iAj fIA jbE'), + (48, 'egH iDi bfH iiI hGC jFF Hfd AHB','bjE Beb iCc haB gIH Dea bga dfd'), + (49, 'jgf chc jGc Baj HBb jdE hgh heI','FFB aBd iEB EIG HGf Bbj EIi JbI'), + (50, 'jhe EGi ajA fbH geh EHe FdC bij','jDE bBC gbH HeE dcH iBH IFE AHi'), + (51, 'aCb JiD cgJ Bjj iAI Hbe IAF FhH','ijf bhE Jdf FED dCH bbG HcJ ebH'); + " +} + +foreach_detail_mode $testprefix { +foreach external {0 1 2} { + reset_db + + proc tokens {cmd} { + set ret [list] + for {set iTok 0} {$iTok < [$cmd xInstCount]} {incr iTok} { + set txt [$cmd xInstToken $iTok 0] + set txt [string map [list "\0" "."] $txt] + lappend ret $txt + } + set ret + } + sqlite3_fts5_create_function db tokens tokens + sqlite3_fts5_register_origintext db + + set E(0) internal + set E(1) external + set E(2) contentless + set e $E($external) + + db eval { CREATE TABLE ex(x, y) } + switch -- $external { + 0 { + do_execsql_test 1.$e.0 { + CREATE VIRTUAL TABLE ft USING fts5( + x, y, tokenize="origintext unicode61", tokendata=1, detail=%DETAIL% + ); + } + } + + 1 { + do_execsql_test 1.$e.0 { + CREATE VIRTUAL TABLE ft USING fts5( + x, y, tokenize="origintext unicode61", tokendata=1, detail=%DETAIL%, + content=ex + ); + } + } + + 2 { + do_execsql_test 1.$e.0 { + CREATE VIRTUAL TABLE ft USING fts5( + x, y, tokenize="origintext unicode61", tokendata=1, detail=%DETAIL%, + content= + ); + } + } + } + insert_data ex + insert_data ft + + proc prefixquery {prefix bInst bYOnly} { + set ret [list] + db eval { SELECT rowid, x, y FROM ex ORDER BY rowid } { + set row [list] + set bSeen 0 + + set T [concat $x $y] + if {$bYOnly} { set T $y } + + foreach w $T { + if {[string match -nocase $prefix $w]} { + set bSeen 1 + if {$bInst} { + set v [string tolower $w] + if {$w != $v} { append v ".$w" } + lappend row $v + } + } + } + + if {$bSeen} { + lappend ret $rowid + lappend ret $row + } + } + + set ret + } + + proc do_prefixquery_test {tn prefix} { + set bInst [expr {$::e!="contentless" || "%DETAIL%"=="full"}] + set expect [prefixquery $prefix $bInst 0] + set expect2 [prefixquery $prefix $bInst 1] + + uplevel [list do_execsql_test $tn.1 " + SELECT rowid, tokens(ft) FROM ft('$prefix') + " $expect] + uplevel [list do_execsql_test $tn.2 " + SELECT rowid, tokens(ft) FROM ft(fts5_insttoken('$prefix')) + " $expect] + db eval { INSERT INTO ft(ft, rank) VALUES('insttoken', 1) } + uplevel [list do_execsql_test $tn.3 " + SELECT rowid, tokens(ft) FROM ft('$prefix') + " $expect] + db eval { INSERT INTO ft(ft, rank) VALUES('insttoken', 0) } + + if {"%DETAIL%"!="none"} { + uplevel [list do_execsql_test $tn.4 " + SELECT rowid, tokens(ft) FROM ft('y: $prefix') + " $expect2] + uplevel [list do_execsql_test $tn.5 " + SELECT rowid, tokens(ft) FROM ft(fts5_insttoken('y: $prefix')) + " $expect2] + db eval { INSERT INTO ft(ft, rank) VALUES('insttoken', 1) } + uplevel [list do_execsql_test $tn.6 " + SELECT rowid, tokens(ft) FROM ft('y: $prefix') + " $expect2] + db eval { INSERT INTO ft(ft, rank) VALUES('insttoken', 0) } + } + } + + do_prefixquery_test 1.$e.1 a* + do_prefixquery_test 1.$e.2 b* + do_prefixquery_test 1.$e.3 c* + do_prefixquery_test 1.$e.4 d* + do_prefixquery_test 1.$e.5 e* + do_prefixquery_test 1.$e.6 f* + do_prefixquery_test 1.$e.7 g* + do_prefixquery_test 1.$e.8 h* + do_prefixquery_test 1.$e.9 i* + do_prefixquery_test 1.$e.10 j* +}} + + + +finish_test + diff --git a/manifest b/manifest index 603ced6491..d34164b757 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Allow\san\sfts5\stable\sor\squery\sto\sbe\sconfigured\sto\scollect\sxInstToken\sdata\sfor\sany\sprefix\sterms\sas\spart\sof\sthe\sfirst\sparse\sof\sthe\smain\sindex,\sif\sany. -D 2024-11-02T19:10:50.264 +C Add\stests\sfor\sxInstToken()\sand\sprefix\squeries\swith\svarious\sfts5\sconfigurations. +D 2024-11-06T16:20:16.715 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md c5b4009dca54d127d2d6033c22fd9cc34f53bedb6ef12c7cbaa468381c74ab28 @@ -219,6 +219,7 @@ F ext/fts5/test/fts5origintext2.test f4505ff79bf7369f2b8b10b9cef7476049d844e20b3 F ext/fts5/test/fts5origintext3.test 4988b6375acc3bbb0515667765f57e389caf449814af9c1095c053f7de2b4223 F ext/fts5/test/fts5origintext4.test 0d3ef0a8038f471dbc83001c34fe5f7ae39b571bfc209670771eb28bc0fc50e8 F ext/fts5/test/fts5origintext5.test ee12b440ec335e5b422d1668aca0051b52ff28b6ee67073e8bbc29f509fd562b +F ext/fts5/test/fts5origintext6.test 09eb1347cb0dceaebbebf3d3e6bd5d24c7c1006efddc2984540450324bbdafa4 F ext/fts5/test/fts5phrase.test bb2554bb61d15f859678c96dc89a7de415cd5fc3b7b54c29b82a0d0ad138091c F ext/fts5/test/fts5plan.test f8b0d752a818059a934cdc96c0f77de058a67a0a57bb3a8181d28307ab5b1626 F ext/fts5/test/fts5porter.test 15b514fac8690b58e99c330efe5bf5615bc43f2fae4a3cca3f923dbaff55a0c0 @@ -2199,8 +2200,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 790c56d493c66a2136e24d349d169639809d70bfab6996975a403be568a267a5 -R 71ba4975c4c76073cda6dd2f314d94d1 +P 46929ae92b26f02bc70de9931b21a8a7cf9a2453d5fb07f68b712f62e28e9152 +R a22fb948708e266e2094d3645362e84e U dan -Z 95da39a03d7bb4b9bc58c6dbf7b809e5 +Z 3041da3c7f9ea1d87e0998786f60280f # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 94e1307210..20c99b7fae 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -46929ae92b26f02bc70de9931b21a8a7cf9a2453d5fb07f68b712f62e28e9152 +9cc04331a01760189d88697233009dbe8a60eda589792ad01b56300499e9f54d From fefc7b1bf77b9dda26266205a93adf496b36f454 Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 19 Nov 2024 11:58:32 +0000 Subject: [PATCH 07/89] Fix a problem handling OOM errors in fts3 that could occur when parsing multi-token strings. FossilOrigin-Name: 4c4d1db00bd2c522165876dcf1606116a72525d9ffc891b266213704e25cde55 --- ext/fts3/fts3_expr.c | 33 ++++++++++++++++----------------- manifest | 16 ++++++++-------- manifest.uuid | 2 +- test/fts3fault.test | 8 ++++++++ 4 files changed, 33 insertions(+), 26 deletions(-) diff --git a/ext/fts3/fts3_expr.c b/ext/fts3/fts3_expr.c index ea8167c595..9e201b1684 100644 --- a/ext/fts3/fts3_expr.c +++ b/ext/fts3/fts3_expr.c @@ -319,10 +319,11 @@ static int getNextString( Fts3PhraseToken *pToken; p = fts3ReallocOrFree(p, nSpace + ii*sizeof(Fts3PhraseToken)); - if( !p ) goto no_mem; - zTemp = fts3ReallocOrFree(zTemp, nTemp + nByte); - if( !zTemp ) goto no_mem; + if( !zTemp || !p ){ + rc = SQLITE_NOMEM; + goto getnextstring_out; + } assert( nToken==ii ); pToken = &((Fts3Phrase *)(&p[1]))->aToken[ii]; @@ -337,9 +338,6 @@ static int getNextString( nToken = ii+1; } } - - pModule->xClose(pCursor); - pCursor = 0; } if( rc==SQLITE_DONE ){ @@ -347,7 +345,10 @@ static int getNextString( char *zBuf = 0; p = fts3ReallocOrFree(p, nSpace + nToken*sizeof(Fts3PhraseToken) + nTemp); - if( !p ) goto no_mem; + if( !p ){ + rc = SQLITE_NOMEM; + goto getnextstring_out; + } memset(p, 0, (char *)&(((Fts3Phrase *)&p[1])->aToken[0])-(char *)p); p->eType = FTSQUERY_PHRASE; p->pPhrase = (Fts3Phrase *)&p[1]; @@ -355,11 +356,9 @@ static int getNextString( p->pPhrase->nToken = nToken; zBuf = (char *)&p->pPhrase->aToken[nToken]; + assert( nTemp==0 || zTemp ); if( zTemp ){ memcpy(zBuf, zTemp, nTemp); - sqlite3_free(zTemp); - }else{ - assert( nTemp==0 ); } for(jj=0; jjpPhrase->nToken; jj++){ @@ -369,17 +368,17 @@ static int getNextString( rc = SQLITE_OK; } - *ppExpr = p; - return rc; -no_mem: - + getnextstring_out: if( pCursor ){ pModule->xClose(pCursor); } sqlite3_free(zTemp); - sqlite3_free(p); - *ppExpr = 0; - return SQLITE_NOMEM; + if( rc!=SQLITE_OK ){ + sqlite3_free(p); + p = 0; + } + *ppExpr = p; + return rc; } /* diff --git a/manifest b/manifest index 42c69a71fa..0ed54a2c71 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Reduce\sdivergence\sfrom\sbegin-concurrent. -D 2024-11-18T18:45:31.904 +C Fix\sa\sproblem\shandling\sOOM\serrors\sin\sfts3\sthat\scould\soccur\swhen\sparsing\smulti-token\sstrings. +D 2024-11-19T11:58:32.252 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -80,7 +80,7 @@ F ext/fts3/fts3.c 9f8ce82bbf4ec0636e6170e58f17b04817fa4c39b2d5126ac06f005d485f6d F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe F ext/fts3/fts3Int.h 968f7d7cae541a6926146e9fd3fb2b2ccbd3845b7890a8ed03de0c06ac776682 F ext/fts3/fts3_aux.c 7eab82a9cf0830f6551ba3abfdbe73ed39e322a4d3940ee82fbf723674ecd9f3 -F ext/fts3/fts3_expr.c 903bfb9433109fffb10e910d7066c49cbf8eeae316adc93f0499c4da7dfc932a +F ext/fts3/fts3_expr.c 365849a2a1185e19028a9db2d9f1ea63efe909a3a6aca7ec86fc26a13a60bd58 F ext/fts3/fts3_hash.c 8b6e31bfb0844c27dc6092c2620bdb1fca17ed613072db057d96952c6bdb48b7 F ext/fts3/fts3_hash.h 39cf6874dc239d6b4e30479b1975fe5b22a3caaf F ext/fts3/fts3_icu.c 305ce7fb6036484085b5556a9c8e62acdc7763f0f4cdf5fd538212a9f3720116 @@ -1204,7 +1204,7 @@ F test/fts3expr3.test c4d4a7d6327418428c96e0a3a1137c251b8dfbf8 F test/fts3expr4.test 6c7675bbdbffe6ffc95e9e861500b8ac3f739c4d004ffda812f138eeb1b45529 F test/fts3expr5.test a5b9a053becbdb8e973fbf4d6d3abaabeb42d511d1848bd57931f3e0a1cf983e F test/fts3f.test 8c438d5e1cab526b0021988fb1dc70cf3597b006a33ffd6c955ee89929077fe3 -F test/fts3fault.test f4e1342acfe6d216a001490e8cd52afac1f9ffe4a11bbcdcb296129a45c5df45 +F test/fts3fault.test 9228f00cd69e2a5d2ed0f06c181981f4f90bd36da9f86b73f3a58b4b23451fd4 F test/fts3fault2.test 7b2741e5095367238380b0fcdb837f36c24484c7a5f353659b387df63cf039ec F test/fts3fault3.test ccdd2292dd2d4e21e30fc5f4c8e064f79e516087eec5ff57ab6bc4f6a7714097 F test/fts3first.test dbdedd20914c8d539aa3206c9b34a23775644641 @@ -2198,8 +2198,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P e0d8f9916c2d899094b71af74f44e089a97db6d80f09eb80a5d8be733c1bf942 -R 15b624443bf22191f7b1a220224ff1ba -U drh -Z e17d5ca17fa701911504cdcf5a540396 +P 84d41e9d04c62601e84621e8edb3b81abbacc366a6b5e7059f8b6796fade7ffa +R 15d5c68f2ffe8e979f466eec5e117ba3 +U dan +Z 7f81f47d67e456b494dfb3b575661f30 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 125d18f312..dea58b2d92 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -84d41e9d04c62601e84621e8edb3b81abbacc366a6b5e7059f8b6796fade7ffa +4c4d1db00bd2c522165876dcf1606116a72525d9ffc891b266213704e25cde55 diff --git a/test/fts3fault.test b/test/fts3fault.test index 21defd282f..20e5f25de5 100644 --- a/test/fts3fault.test +++ b/test/fts3fault.test @@ -216,6 +216,14 @@ do_faultsim_test 8.4 -prep { } -test { faultsim_test_result {0 3} } +do_faultsim_test 8.5 -prep { + faultsim_restore_and_reopen + db func mit mit +} -body { + execsql { SELECT mit(matchinfo(t8, 'l')) FROM t8 WHERE t8 MATCH '"a b c"' } +} -test { + faultsim_test_result {0 3} +} do_test 9.0 { faultsim_delete_and_reopen From fbd9de1830209ec810ef1bac614c2c57031728bf Mon Sep 17 00:00:00 2001 From: stephan Date: Tue, 19 Nov 2024 15:20:47 +0000 Subject: [PATCH 08/89] Initial configure support for linking certain binaries to libsqlite3.so instead of embedding it dynamically (which they typically do). This currently applies only to sqldiff, but support for adding the same for other tools is planned. This requires disabling the soname because setting it causes the build to link to whatever libsqlite3.so.0 is installed system-wide, so the soname now defaults to off. FossilOrigin-Name: 9192c146e2898456a6b8ea43a6f02c0227ddce5b584374fbeb2d63bd2ecd5d8c --- Makefile.in | 1 + auto.def | 8 ++++++-- main.mk | 15 +++++++++++++-- manifest | 21 ++++++++++++--------- manifest.uuid | 2 +- 5 files changed, 33 insertions(+), 14 deletions(-) diff --git a/Makefile.in b/Makefile.in index b374bd4838..219347c301 100644 --- a/Makefile.in +++ b/Makefile.in @@ -287,6 +287,7 @@ AS_AUTO_DEF = $(TOP)/auto.def AS_AUTORECONFIG = @SQLITE_AUTORECONFIG@ USE_AMALGAMATION ?= @USE_AMALGAMATION@ +LINK_TOOLS_DYNAMICALLY ?= @LINK_TOOLS_DYNAMICALLY@ AMALGAMATION_GEN_FLAGS ?= --linemacros=@AMALGAMATION_LINE_MACROS@ # diff --git a/auto.def b/auto.def index 919df0101f..addaf408e3 100644 --- a/auto.def +++ b/auto.def @@ -198,7 +198,9 @@ set flags { linemacros => {Enable #line macros in the amalgamation} dev => {Enable dev-mode build: automatically enables certain other flags} dump-defines=0 => {Dump autosetup defines to $DUMP_DEFINES_TXT (for build debugging)} - soname:=legacy => {SONAME for libsqlite3.so. Must be one of: none, auto, legacy} + link-tools-dynamically => {Dynamically link libsqlite3 to certain tools which normally statically embed it.} + soname:=none => {SONAME for libsqlite3.so. Must be one of: none, auto, legacy} + # --soname has a long story behind it, as well as no small amount of uncertainty. # } if {"" ne $DUMP_DEFINES_JSON} { @@ -327,6 +329,8 @@ proj-if-opt-truthy dev { define CFLAGS [get-env CFLAGS {-O0 -g}] } +define LINK_TOOLS_DYNAMICALLY [proj-opt-was-provided link-tools-dynamically] + ######################################################################## # Handle --with-wasi-sdk=DIR # @@ -468,7 +472,7 @@ apply {{} { if {[proj-opt-was-provided soname]} { set soname [opt-val soname] } else { - set soname legacy + set soname none; # enabling soname breaks linking for the --link-tools-dynamically feature } switch -exact -- $soname { none { return 0 } diff --git a/main.mk b/main.mk index a22c0fe775..20a54adfc3 100644 --- a/main.mk +++ b/main.mk @@ -205,6 +205,14 @@ ENABLE_STATIC ?= 1 # USE_AMALGAMATION ?= 1 # +# $(LINK_TOOLS_DYNAMICALLY) +# +# If true, certain binaries which typically statically link against +# libsqlite3 or its component object files will instead link against +# the DLL. +# +LINK_TOOLS_DYNAMICALLY ?= 0 +# # $(AMALGAMATION_GEN_FLAGS) = # # Optional flags for the amalgamation generator. @@ -1950,8 +1958,11 @@ install-shell-0: sqlite3$(T.exe) $(install-dir.bin) install-shell-1 install-shell-: install: install-shell-$(HAVE_WASI_SDK) -sqldiff$(T.exe): $(TOP)/tool/sqldiff.c $(TOP)/ext/misc/sqlite3_stdio.h sqlite3.o sqlite3.h - $(T.link) -o $@ $(TOP)/tool/sqldiff.c sqlite3.o $(LDFLAGS.libsqlite3) +sqldiff$(T.exe): sqldiff.$(LINK_TOOLS_DYNAMICALLY) +sqldiff.0: $(TOP)/tool/sqldiff.c $(TOP)/ext/misc/sqlite3_stdio.h sqlite3.o sqlite3.h + $(T.link) -o sqldiff$(T.exe) $(TOP)/tool/sqldiff.c sqlite3.o $(LDFLAGS.libsqlite3) +sqldiff.1: $(TOP)/tool/sqldiff.c $(TOP)/ext/misc/sqlite3_stdio.h $(libsqlite3.SO) + $(T.link) -o sqldiff$(T.exe) $(TOP)/tool/sqldiff.c -L. -lsqlite3 $(LDFLAGS.configure) install-diff: sqldiff$(T.exe) $(install-dir.bin) $(INSTALL) -s sqldiff$(T.exe) "$(install-dir.bin)" diff --git a/manifest b/manifest index 0ed54a2c71..5d62160222 100644 --- a/manifest +++ b/manifest @@ -1,9 +1,9 @@ -C Fix\sa\sproblem\shandling\sOOM\serrors\sin\sfts3\sthat\scould\soccur\swhen\sparsing\smulti-token\sstrings. -D 2024-11-19T11:58:32.252 +C Initial\sconfigure\ssupport\sfor\slinking\scertain\sbinaries\sto\slibsqlite3.so\sinstead\sof\sembedding\sit\sdynamically\s(which\sthey\stypically\sdo).\sThis\scurrently\sapplies\sonly\sto\ssqldiff,\sbut\ssupport\sfor\sadding\sthe\ssame\sfor\sother\stools\sis\splanned.\sThis\srequires\sdisabling\sthe\ssoname\sbecause\ssetting\sit\scauses\sthe\sbuild\sto\slink\sto\swhatever\slibsqlite3.so.0\sis\sinstalled\ssystem-wide,\sso\sthe\ssoname\snow\sdefaults\sto\soff. +D 2024-11-19T15:20:47.506 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d -F Makefile.in c3a01e98bd2ae6a4631df02f11249ac07ffa3d540d3034e2675f66cc259f2ea7 +F Makefile.in 5461b1125a3039fef49f4896519d164ebe22ee394d20d69913ab0fdc8c464b63 F Makefile.linux-generic bd3e3cacd369821a6241d4ea1967395c962dfe3057e38cb0a435cee0e8b789d0 F Makefile.msc a92237976eb92c5efaa0dd2524746aec12c196e12df8d4dbff9543a4648c3312 F README.md c3c0f19532ce28f6297a71870f3c7b424729f0e6d9ab889616d3587dd2332159 @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F auto.def 94f0f4a697e8221d5c7ca561771a3afabb0e707922daad89b60908b87a8e399b +F auto.def 6aa362ceeeaaf2521b0c781a44489d6f5bd6c7a147e9a6e8e6ae68a928158357 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -696,7 +696,7 @@ F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65a F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b503bef35 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 -F main.mk c4e37e3015f9c2d8fd20fa3071ba86e7396959c8d5960e37e95aa85421e2b739 +F main.mk d82de0fbdb6b7521c55e47feced1e76204058a19d860266a7c77b194cb298321 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421 @@ -2198,8 +2198,11 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 84d41e9d04c62601e84621e8edb3b81abbacc366a6b5e7059f8b6796fade7ffa -R 15d5c68f2ffe8e979f466eec5e117ba3 -U dan -Z 7f81f47d67e456b494dfb3b575661f30 +P 4c4d1db00bd2c522165876dcf1606116a72525d9ffc891b266213704e25cde55 +R 4e525e0050af78dd77407fe8fd687f7e +T *branch * link-tools-dynamically +T *sym-link-tools-dynamically * +T -sym-trunk * Cancelled\sby\sbranch. +U stephan +Z 39424480882931664661450c95279514 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index dea58b2d92..d1e075f2be 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4c4d1db00bd2c522165876dcf1606116a72525d9ffc891b266213704e25cde55 +9192c146e2898456a6b8ea43a6f02c0227ddce5b584374fbeb2d63bd2ecd5d8c From 5ef61df185a26ea826aa79c94d6eee9329048f91 Mon Sep 17 00:00:00 2001 From: stephan Date: Tue, 19 Nov 2024 16:40:49 +0000 Subject: [PATCH 09/89] Reformulate sqldiff deps and rules so that the target matches the resulting file name, to avoid rebuilding it on every make invocation. Apply the same treatment to the sqlite3 CLI shell. FossilOrigin-Name: 9a17b83f859ef14629cb78d8c9af1b3f2493b0c8756bc2ebcf92f0872fb507c3 --- auto.def | 2 +- main.mk | 48 +++++++++++++++++++++++++++++------------------- manifest | 17 +++++++---------- manifest.uuid | 2 +- 4 files changed, 38 insertions(+), 31 deletions(-) diff --git a/auto.def b/auto.def index addaf408e3..1e388ac20e 100644 --- a/auto.def +++ b/auto.def @@ -199,7 +199,7 @@ set flags { dev => {Enable dev-mode build: automatically enables certain other flags} dump-defines=0 => {Dump autosetup defines to $DUMP_DEFINES_TXT (for build debugging)} link-tools-dynamically => {Dynamically link libsqlite3 to certain tools which normally statically embed it.} - soname:=none => {SONAME for libsqlite3.so. Must be one of: none, auto, legacy} + soname:=legacy => {SONAME for libsqlite3.so. Must be one of: none, auto, legacy} # --soname has a long story behind it, as well as no small amount of uncertainty. # } diff --git a/main.mk b/main.mk index 20a54adfc3..af616086be 100644 --- a/main.mk +++ b/main.mk @@ -1930,11 +1930,26 @@ xbin: threadtest5 # special compile-time options that are interpreted by individual # source files within the amalgamation. # -sqlite3$(T.exe): shell.c sqlite3.c - $(T.link) -o $@ \ - shell.c sqlite3.c \ - $(CFLAGS.readline) $(SHELL_OPT) $(CFLAGS.icu) \ - $(LDFLAGS.libsqlite3) $(LDFLAGS.readline) +# How/whether we build sqlite3$(T.exe) depends on both +# $(HAVE_WASI_SDK) and $(LINK_TOOLS_DYNAMICALLY), thus there are +# several targets here, only one of which the sqlite3$(T.exe) target +# indirectly resolves to. +# +sqlite3-shell.0.0.deps = shell.c sqlite3.c +sqlite3-shell.0.0.rules = \ + $(T.link) -o $@ \ + shell.c sqlite3.c \ + $(CFLAGS.readline) $(SHELL_OPT) $(CFLAGS.icu) \ + $(LDFLAGS.libsqlite3) $(LDFLAGS.readline) +sqlite3-shell.0.1.deps = shell.c $(libsqlite3.SO) +sqlite3-shell.0.1.rules = \ + $(T.link) -o $@ \ + shell.c -L. -lsqlite3 \ + $(CFLAGS.readline) $(SHELL_OPT) $(CFLAGS.icu) \ + $(LDFLAGS.configure) $(LDFLAGS.readline) $(LDFLAGS.zlib) +sqlite3$(T.exe): $(sqlite3-shell.$(HAVE_WASI_SDK).$(LINK_TOOLS_DYNAMICALLY).deps) + $(sqlite3-shell.$(HAVE_WASI_SDK).$(LINK_TOOLS_DYNAMICALLY).rules) +all: sqlite3$(T.exe) # The "sqlite3d" CLI is build using separate source files. This # is useful during development and debugging. @@ -1945,24 +1960,19 @@ sqlite3d$(T.exe): shell.c $(LIBOBJS0) $(CFLAGS.readline) $(SHELL_OPT) \ $(LDFLAGS.libsqlite3) $(LDFLAGS.readline) -# -# Build sqlite3$(T.exe) by default except in wasi-sdk builds. Yes, the -# semantics of 0 and 1 are confusingly swapped here. -# -sqlite3$(T.exe)-1: -sqlite3$(T.exe)-0 sqlite3$(T.exe)-: sqlite3$(T.exe) -all: sqlite3$(T.exe)-$(HAVE_WASI_SDK) - install-shell-0: sqlite3$(T.exe) $(install-dir.bin) $(INSTALL) -s sqlite3$(T.exe) "$(install-dir.bin)" -install-shell-1 install-shell-: +install-shell-1: install: install-shell-$(HAVE_WASI_SDK) -sqldiff$(T.exe): sqldiff.$(LINK_TOOLS_DYNAMICALLY) -sqldiff.0: $(TOP)/tool/sqldiff.c $(TOP)/ext/misc/sqlite3_stdio.h sqlite3.o sqlite3.h - $(T.link) -o sqldiff$(T.exe) $(TOP)/tool/sqldiff.c sqlite3.o $(LDFLAGS.libsqlite3) -sqldiff.1: $(TOP)/tool/sqldiff.c $(TOP)/ext/misc/sqlite3_stdio.h $(libsqlite3.SO) - $(T.link) -o sqldiff$(T.exe) $(TOP)/tool/sqldiff.c -L. -lsqlite3 $(LDFLAGS.configure) +# How to build sqldiff$(T.exe) depends on $(LINK_TOOLS_DYNAMICALLY) +# +sqldiff.0.deps = $(TOP)/tool/sqldiff.c $(TOP)/ext/misc/sqlite3_stdio.h sqlite3.o sqlite3.h +sqldiff.0.rules = $(T.link) -o $@ $(TOP)/tool/sqldiff.c sqlite3.o $(LDFLAGS.libsqlite3) +sqldiff.1.deps = $(TOP)/tool/sqldiff.c $(TOP)/ext/misc/sqlite3_stdio.h $(libsqlite3.SO) +sqldiff.1.rules = $(T.link) -o $@ $(TOP)/tool/sqldiff.c -L. -lsqlite3 $(LDFLAGS.configure) +sqldiff$(T.exe): $(sqldiff.$(LINK_TOOLS_DYNAMICALLY).deps) + $(sqldiff.$(LINK_TOOLS_DYNAMICALLY).rules) install-diff: sqldiff$(T.exe) $(install-dir.bin) $(INSTALL) -s sqldiff$(T.exe) "$(install-dir.bin)" diff --git a/manifest b/manifest index 5d62160222..3cfb99819a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Initial\sconfigure\ssupport\sfor\slinking\scertain\sbinaries\sto\slibsqlite3.so\sinstead\sof\sembedding\sit\sdynamically\s(which\sthey\stypically\sdo).\sThis\scurrently\sapplies\sonly\sto\ssqldiff,\sbut\ssupport\sfor\sadding\sthe\ssame\sfor\sother\stools\sis\splanned.\sThis\srequires\sdisabling\sthe\ssoname\sbecause\ssetting\sit\scauses\sthe\sbuild\sto\slink\sto\swhatever\slibsqlite3.so.0\sis\sinstalled\ssystem-wide,\sso\sthe\ssoname\snow\sdefaults\sto\soff. -D 2024-11-19T15:20:47.506 +C Reformulate\ssqldiff\sdeps\sand\srules\sso\sthat\sthe\starget\smatches\sthe\sresulting\sfile\sname,\sto\savoid\srebuilding\sit\son\severy\smake\sinvocation.\sApply\sthe\ssame\streatment\sto\sthe\ssqlite3\sCLI\sshell. +D 2024-11-19T16:40:49.154 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F auto.def 6aa362ceeeaaf2521b0c781a44489d6f5bd6c7a147e9a6e8e6ae68a928158357 +F auto.def b6fc55bf238320b58d06d6e5364374722aae3b8320c4f928e0e6c208405f2cfd F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -696,7 +696,7 @@ F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65a F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b503bef35 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 -F main.mk d82de0fbdb6b7521c55e47feced1e76204058a19d860266a7c77b194cb298321 +F main.mk 8ef1c08eb0e644df88978d2b1db4e2af9efc430a0fe3dd152d00fa21593fee41 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421 @@ -2198,11 +2198,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 4c4d1db00bd2c522165876dcf1606116a72525d9ffc891b266213704e25cde55 -R 4e525e0050af78dd77407fe8fd687f7e -T *branch * link-tools-dynamically -T *sym-link-tools-dynamically * -T -sym-trunk * Cancelled\sby\sbranch. +P 9192c146e2898456a6b8ea43a6f02c0227ddce5b584374fbeb2d63bd2ecd5d8c +R 9e3125f578c182d0fd3f116bcadb353b U stephan -Z 39424480882931664661450c95279514 +Z c9c941efe50c477f477a1622a4a0493c # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index d1e075f2be..5cd2262fb1 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9192c146e2898456a6b8ea43a6f02c0227ddce5b584374fbeb2d63bd2ecd5d8c +9a17b83f859ef14629cb78d8c9af1b3f2493b0c8756bc2ebcf92f0872fb507c3 From 3cd93a0b67ccd688864782c2a2148d987f1c3001 Mon Sep 17 00:00:00 2001 From: stephan Date: Tue, 19 Nov 2024 17:41:13 +0000 Subject: [PATCH 10/89] Revert linking the shell to the dll for reasons explained in new makefile comments. Move the --with-debug configure flag into the developer options set and add commentary about why it should never be used for production builds. FossilOrigin-Name: 7b14309be42be4204c4d30e9741d56d75ab8ec34686791d032612337fe1c4dcf --- auto.def | 9 +++++++-- autosetup/proj.tcl | 10 +++++----- main.mk | 44 ++++++++++++++++++++++---------------------- manifest | 16 ++++++++-------- manifest.uuid | 2 +- 5 files changed, 43 insertions(+), 38 deletions(-) diff --git a/auto.def b/auto.def index 1e388ac20e..eee8c5aeff 100644 --- a/auto.def +++ b/auto.def @@ -123,7 +123,6 @@ set DUMP_DEFINES_JSON ""; #./config.defines.json ######################################################################## set flags { # - with-debug:=1 => {Enable debug build flags} shared=1 => {Disable build of shared libary} static=1 => {Disable build of static library (mostly)} amalgamation=1 => {Disable the amalgamation and instead build all files separately.} @@ -193,10 +192,16 @@ set flags { with-emsdk:=auto => {Top-most dir of the Emscripten SDK installation. Default = EMSDK env var.} # # + + # --with-debug does more than simply builds with a -g compilation + # flag and will impact performance by as much as 4x, as it includes + # large numbers of assert()s in performance-critical loops. Never + # use --with-debug for production builds. + with-debug:=1 => {Enable debug build flags} + dev => {Enable dev-mode build: automatically enables certain other flags} test-status => {Enable status of tests} gcov=0 => {Enable coverage testing using gcov} linemacros => {Enable #line macros in the amalgamation} - dev => {Enable dev-mode build: automatically enables certain other flags} dump-defines=0 => {Dump autosetup defines to $DUMP_DEFINES_TXT (for build debugging)} link-tools-dynamically => {Dynamically link libsqlite3 to certain tools which normally statically embed it.} soname:=legacy => {SONAME for libsqlite3.so. Must be one of: none, auto, legacy} diff --git a/autosetup/proj.tcl b/autosetup/proj.tcl index 863962c2f8..7da0b0fa35 100644 --- a/autosetup/proj.tcl +++ b/autosetup/proj.tcl @@ -311,11 +311,11 @@ proc proj-first-bin-of {args} { ######################################################################## # @proj-opt-was-provided key # -# Returns 1 if the user specifically provided the given configure -# flag, else 0. This can be used to distinguish between options which -# have a default value and those which were explicitly provided by the -# user, even if the latter is done in a way which uses the default -# value. +# Returns 1 if the user specifically provided the given configure flag +# or if it was specifically set using proj-opt-set, else 0. This can +# be used to distinguish between options which have a default value +# and those which were explicitly provided by the user, even if the +# latter is done in a way which uses the default value. # # For example, with a configure flag defined like: # diff --git a/main.mk b/main.mk index af616086be..3193e531d1 100644 --- a/main.mk +++ b/main.mk @@ -901,6 +901,9 @@ TESTOPTS = --verbose=file --output=test-out.txt # # Extra compiler options for various shell tools # +# Note that some of these will only apply when embedding sqlite3.c +# into the shell, as these flags are not otherwise passed on to the +# library. SHELL_OPT += -DSQLITE_DQS=0 SHELL_OPT += -DSQLITE_ENABLE_FTS4 #SHELL_OPT += -DSQLITE_ENABLE_FTS5 @@ -1926,30 +1929,27 @@ threadtest5: sqlite3.c $(TOP)/test/threadtest5.c $(T.link) $(TOP)/test/threadtest5.c sqlite3.c -o $@ $(LDFLAGS.libsqlite3) xbin: threadtest5 -# The standard CLI is built using the amalgamation since it uses -# special compile-time options that are interpreted by individual -# source files within the amalgamation. # -# How/whether we build sqlite3$(T.exe) depends on both -# $(HAVE_WASI_SDK) and $(LINK_TOOLS_DYNAMICALLY), thus there are -# several targets here, only one of which the sqlite3$(T.exe) target -# indirectly resolves to. +# When building sqlite3$(T.exe) we specifically embed a copy of +# sqlite3.c, and not link to libsqlite3.so or libsqlite3.a, because +# the shell needs to be able to enable arbitrary library features, +# some of which have significant performance impacts. For example,, +# SQLITE_ENABLE_EXPLAIN_COMMENTS has been measured as having a 5.2% +# runtime performance hit, which is fine for use in the shell but is +# not appropriate for the canonical library build. # -sqlite3-shell.0.0.deps = shell.c sqlite3.c -sqlite3-shell.0.0.rules = \ - $(T.link) -o $@ \ - shell.c sqlite3.c \ - $(CFLAGS.readline) $(SHELL_OPT) $(CFLAGS.icu) \ - $(LDFLAGS.libsqlite3) $(LDFLAGS.readline) -sqlite3-shell.0.1.deps = shell.c $(libsqlite3.SO) -sqlite3-shell.0.1.rules = \ - $(T.link) -o $@ \ - shell.c -L. -lsqlite3 \ - $(CFLAGS.readline) $(SHELL_OPT) $(CFLAGS.icu) \ - $(LDFLAGS.configure) $(LDFLAGS.readline) $(LDFLAGS.zlib) -sqlite3$(T.exe): $(sqlite3-shell.$(HAVE_WASI_SDK).$(LINK_TOOLS_DYNAMICALLY).deps) - $(sqlite3-shell.$(HAVE_WASI_SDK).$(LINK_TOOLS_DYNAMICALLY).rules) -all: sqlite3$(T.exe) +sqlite3$(T.exe): shell.c sqlite3.c + $(T.link) -o $@ \ + shell.c sqlite3.c \ + $(CFLAGS.readline) $(SHELL_OPT) $(CFLAGS.icu) \ + $(LDFLAGS.libsqlite3) $(LDFLAGS.readline) +# +# Build sqlite3$(T.exe) by default except in wasi-sdk builds. Yes, the +# semantics of 0 and 1 are confusingly swapped here. +# +sqlite3$(T.exe)-1: +sqlite3$(T.exe)-0: sqlite3$(T.exe) +all: sqlite3$(T.exe)-$(HAVE_WASI_SDK) # The "sqlite3d" CLI is build using separate source files. This # is useful during development and debugging. diff --git a/manifest b/manifest index 3cfb99819a..e7c415ad2b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Reformulate\ssqldiff\sdeps\sand\srules\sso\sthat\sthe\starget\smatches\sthe\sresulting\sfile\sname,\sto\savoid\srebuilding\sit\son\severy\smake\sinvocation.\sApply\sthe\ssame\streatment\sto\sthe\ssqlite3\sCLI\sshell. -D 2024-11-19T16:40:49.154 +C Revert\slinking\sthe\sshell\sto\sthe\sdll\sfor\sreasons\sexplained\sin\snew\smakefile\scomments.\sMove\sthe\s--with-debug\sconfigure\sflag\sinto\sthe\sdeveloper\soptions\sset\sand\sadd\scommentary\sabout\swhy\sit\sshould\snever\sbe\sused\sfor\sproduction\sbuilds. +D 2024-11-19T17:41:13.115 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F auto.def b6fc55bf238320b58d06d6e5364374722aae3b8320c4f928e0e6c208405f2cfd +F auto.def 4f5ae3ed11bb110b1eda2a6b7ee46489b7371bc8f7c19f0ed944613c170e4951 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -49,7 +49,7 @@ F autosetup/cc-shared.tcl 4f024e94a47f427ba61de1739f6381ef0080210f9fae89112d5c1d F autosetup/cc.tcl c0fcc50ca91deff8741e449ddad05bcd08268bc31177e613a6343bbd1fd3e45f F autosetup/jimsh0.c d40e381ea4526a067590e7b91bd4b2efa6d4980d286f908054c647b3df4aee14 F autosetup/pkg-config.tcl 4e635bf39022ff65e0d5434339dd41503ea48fc53822c9c5bde88b02d3d952ba -F autosetup/proj.tcl 96fe16b87c9feb9c1cf2682280f678c659bc52c09fca5de02afc2f7ec5bfb154 +F autosetup/proj.tcl 22556a325c964aa5377d4d881722385f41fcd7c1b60102ba8965f7814c83e9ce F autosetup/system.tcl 51d4be76cd9a9074704b584e5c9cbba616202c8468cf9ba8a4f8294a7ab1dba9 F configure 9a00b21dfd13757bbfb8d89b30660a89ec1f8f3a79402b8f9f9b6fc475c3303a x F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad @@ -696,7 +696,7 @@ F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65a F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b503bef35 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 -F main.mk 8ef1c08eb0e644df88978d2b1db4e2af9efc430a0fe3dd152d00fa21593fee41 +F main.mk 7cb02ba61e74ccab3ad6775b9207b12c6a26bbe3b2dd280039bc0cd532a52ceb F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421 @@ -2198,8 +2198,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 9192c146e2898456a6b8ea43a6f02c0227ddce5b584374fbeb2d63bd2ecd5d8c -R 9e3125f578c182d0fd3f116bcadb353b +P 9a17b83f859ef14629cb78d8c9af1b3f2493b0c8756bc2ebcf92f0872fb507c3 +R 0effbfea81177717d860b06a74ce79d8 U stephan -Z c9c941efe50c477f477a1622a4a0493c +Z aa386346708361b0b61a6d6560bd2986 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 5cd2262fb1..2cf57950de 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9a17b83f859ef14629cb78d8c9af1b3f2493b0c8756bc2ebcf92f0872fb507c3 +7b14309be42be4204c4d30e9741d56d75ab8ec34686791d032612337fe1c4dcf From 5608fb36ec84f1378cbfcc32e004b0343fd26070 Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 19 Nov 2024 18:26:47 +0000 Subject: [PATCH 11/89] Enhancements to tool/mkccode.tcl such that it recognizes -D command line arguments and can use them in internal IFDEF and IFNDEF macros. Update the tool/sqlite3_analyzer.c.in script such that it omits the SQLite amalgamation if -DSQLITE_ENABLE_DBSTAT_VTAB is defined. FossilOrigin-Name: 7fec209290aa1a6dbbca8de154edaac5d8d0ce042bc0617d27fb2095c8d580f1 --- manifest | 16 ++++---- manifest.uuid | 2 +- tool/mkccode.tcl | 79 +++++++++++++++++++++++++++++++++++--- tool/sqlite3_analyzer.c.in | 6 ++- 4 files changed, 86 insertions(+), 17 deletions(-) diff --git a/manifest b/manifest index 0ed54a2c71..87bdfbdd5f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sproblem\shandling\sOOM\serrors\sin\sfts3\sthat\scould\soccur\swhen\sparsing\smulti-token\sstrings. -D 2024-11-19T11:58:32.252 +C Enhancements\sto\stool/mkccode.tcl\ssuch\sthat\sit\srecognizes\s-D\scommand\sline\narguments\sand\scan\suse\sthem\sin\sinternal\sIFDEF\sand\sIFNDEF\smacros.\s\sUpdate\nthe\stool/sqlite3_analyzer.c.in\sscript\ssuch\sthat\sit\somits\sthe\sSQLite\samalgamation\nif\s-DSQLITE_ENABLE_DBSTAT_VTAB\sis\sdefined. +D 2024-11-19T18:26:47.422 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -2135,7 +2135,7 @@ F tool/logest.c c34e5944318415de513d29a6098df247a9618c96d83c38d4abd88641fe46e669 F tool/max-limits.c cbb635fbb37ae4d05f240bfb5b5270bb63c54439 F tool/merge-test.tcl de76b62f2de2a92d4c1ca4f976bce0aea6899e0229e250479b229b2a1914b176 F tool/mkautoconfamal.sh cbdcf993fa83dccbef7fb77b39cdeb31ef9f77d9d88c9e343b58d35ca3898a6a -F tool/mkccode.tcl 4cb8ad7e7330aaed052b0657a1bfacbc67103c400e41860aff643a482cfc2d3e x +F tool/mkccode.tcl b0ddad168362ba6225c9372856ba0db90145734e882a9a5bb8951ef0d5bc6331 x F tool/mkctimec.tcl ef6a67ec82e5b6fc19152a4c79f237227b18bf67ff16d155bac7adb94355d9cf x F tool/mkkeywordhash.c 6b0be901c47f9ad42215fc995eb2f4384ac49213b1fba395102ec3e999acf559 F tool/mkmsvcmin.tcl d76c45efda1cce2d4005bcea7b8a22bb752e3256009f331120fb4fecb14ebb7a @@ -2178,7 +2178,7 @@ F tool/speedtest8inst1.c 7ce07da76b5e745783e703a834417d725b7d45fd F tool/spellsift.tcl 52b4b04dc4333c7ab024f09d9d66ed6b6f7c6eb00b38497a09f338fa55d40618 x F tool/split-sqlite3c.tcl 5aa60643afca558bc732b1444ae81a522326f91e1dc5665b369c54f09e20de60 F tool/sqldiff.c 2a0987d183027c795ced13d6749061c1d2f38e24eddb428f56fa64c3a8f51e4b -F tool/sqlite3_analyzer.c.in 348ba349bbdc93c9866439f9f935d7284866a2a4e6898bc906ae1204ade56918 +F tool/sqlite3_analyzer.c.in 39690af454d2866e87e2b475ec5eabee366f211f2307e90b918345f35bb1a643 F tool/sqlite3_rsync.c 9a1cca2ab1271c59b37a6493c15dc1bcd0ab9149197a9125926bc08dd26b83fb F tool/sqltclsh.c.in 1bcc2e9da58fadf17b0bf6a50e68c1159e602ce057210b655d50bad5aaaef898 F tool/sqltclsh.tcl 862f4cf1418df5e1315b5db3b5ebe88969e2a784525af5fbf9596592f14ed848 @@ -2198,8 +2198,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 84d41e9d04c62601e84621e8edb3b81abbacc366a6b5e7059f8b6796fade7ffa -R 15d5c68f2ffe8e979f466eec5e117ba3 -U dan -Z 7f81f47d67e456b494dfb3b575661f30 +P 4c4d1db00bd2c522165876dcf1606116a72525d9ffc891b266213704e25cde55 +R cdb63603c9c3a16b29feb4bae93e8b25 +U drh +Z 2a605008d2464811e071ed45a95c8ad5 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index dea58b2d92..643a526325 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4c4d1db00bd2c522165876dcf1606116a72525d9ffc891b266213704e25cde55 +7fec209290aa1a6dbbca8de154edaac5d8d0ce042bc0617d27fb2095c8d580f1 diff --git a/tool/mkccode.tcl b/tool/mkccode.tcl index e847c8d3b8..457865b66f 100755 --- a/tool/mkccode.tcl +++ b/tool/mkccode.tcl @@ -6,7 +6,7 @@ # # Usage example: # -# tclsh mkccode.tcl demoapp.c.in >demoapp.c +# tclsh mkccode.tcl -DENABLE_FEATURE_XYZ demoapp.c.in >demoapp.c # # The demoapp.c.in file contains a mixture of C code, TCL script, and # processing directives used by mktclsqliteprog.tcl to build the final C-code @@ -33,29 +33,63 @@ # then all of the text in the input file is converted into C-language # string literals. # +# IFDEF macro +# IFNDEF macro +# ELSE +# ENDIF +# +# The text from "IFDEF macro" down to the next ELSE or ENDIF is +# included only if -Dmacro appears as a command-line argument. +# The "IFNDEF macro" simply inverts the initial test. +# # None of the control directives described above will nest. Only the # top-level input file ("demoapp.c.in" in the example) is interpreted. # referenced files are copied verbatim. # -if {[llength $argv]!=1} { - puts stderr "Usage: $argv0 TEMPLATE >OUTPUT" +proc usage {} { + puts stderr "Usage: $::argv0 \[OPTIONS\] TEMPLATE >OUTPUT" exit 1 } -set infile [lindex $argv 0] +set infile {} +foreach ax $argv { + if {[string match -D* $ax]} { + if {[string match *=* $ax]} { + regexp {-D([^=]+)=(.*)} ax all name value + set DEF($name) $value + } else { + set DEF([string range $ax 2 end]) 1 + } + continue + } + if {[string match -* $ax]} { + puts stderr "$::argv0: Unknown option \"$ax\"" + usage + } + if {$infile!=""} { + puts stderr "$::argv0: Surplus argument: \"$ax\"" + usage + } + set infile $ax +} set ROOT [file normalize [file dir $argv0]/..] set HOME [file normalize [file dir $infile]] set in [open $infile rb] puts [subst {/* DO NOT EDIT ** -** This file was generated by \"$argv0 $infile\". +** This file was generated by \"$argv0 $argv\". ** To make changes, edit $infile then rerun the generator ** command. */}] set instr 0 +set omit {} +set nomit 0 +set ln 0 while {1} { set line [gets $in] + incr ln if {[eof $in]} break if {[regexp {^INCLUDE (.*)} $line all path]} { + if {$nomit>0 && [string match *1* $omit]} continue if {0} { # https://github.com/msteveb/jimtcl/issues/320 regsub {^\$ROOT\y} $path $ROOT path @@ -91,10 +125,43 @@ while {1} { puts "/* END_STRING */" continue } - if {$instr} { + if {[regexp {^IFNDEF +([A-Za-z_]+)} $line all name]} { + set omit $omit[info exists DEF($name)] + incr nomit + continue + } + if {[regexp {^IFDEF +([A-Za-z_]+)} $line all name]} { + set omit $omit[expr {![info exists DEF($name)]}] + incr nomit + continue + } + if {[regexp {^ELSE} $line]} { + if {!$nomit} { + puts stderr "$infile:$ln: ELSE without a prior IFDEF" + exit 1 + } + set omit [string range $omit 0 end-1][expr {![string index $omit end]}] + continue + } + if {[regexp {^ENDIF} $line]} { + if {!$nomit} { + puts stderr "$infile:$ln: ENDIF without a prior IFDEF" + exit 1 + } + incr nomit -1 + set omit [string range $omit 0 [expr {$nomit-1}]] + continue + } + if {$nomit>0 && [string match *1* $omit]} { + # noop + } elseif {$instr} { set x [string map "\\\\ \\\\\\\\ \\\" \\\\\"" $line] puts "\"$x\\n\"" } else { puts $line } } +if {$nomit} { + puts stderr "$infile:$ln: One or more unterminated IFDEFs" + exit 1 +} diff --git a/tool/sqlite3_analyzer.c.in b/tool/sqlite3_analyzer.c.in index 1c9fc836a1..a934f05700 100644 --- a/tool/sqlite3_analyzer.c.in +++ b/tool/sqlite3_analyzer.c.in @@ -3,6 +3,7 @@ ** text on standard output. */ #define TCLSH_INIT_PROC sqlite3_analyzer_init_proc +IFNDEF SQLITE_ENABLE_DBSTAT_VTAB #define SQLITE_ENABLE_DBSTAT_VTAB 1 #undef SQLITE_THREADSAFE #define SQLITE_THREADSAFE 0 @@ -14,9 +15,10 @@ #define SQLITE_DEFAULT_MEMSTATUS 0 #define SQLITE_MAX_EXPR_DEPTH 0 #define SQLITE_OMIT_LOAD_EXTENSION 1 -#if !defined(SQLITE_AMALGAMATION) && !defined(USE_EXTERNAL_SQLITE) INCLUDE sqlite3.c -#endif +ELSE +#include "sqlite3.h" +ENDIF INCLUDE $ROOT/src/tclsqlite.c #if defined(_WIN32) From c73b85c156b93911ceb62a435b1566b0b6f41bcb Mon Sep 17 00:00:00 2001 From: stephan Date: Tue, 19 Nov 2024 19:47:51 +0000 Subject: [PATCH 12/89] Get sqlite3_analyzer optionally linking against libsqlite3.so instead of embedding sqlite3.c. Patch mkccode.tcl to accept digits in its IFDEF/IFNDEF checks and sqlite3_analyzer.c.in to only include sqlite3.c if -DINCLUDE_SQLITE3_C is passed to mkccode.tcl. FossilOrigin-Name: 80f3bf8c2ee31ba1ab9187d64d5dcbbf97a61845a21b036f89ea9133153575c0 --- main.mk | 31 ++++++++++++++++++++++++++----- manifest | 16 ++++++++-------- manifest.uuid | 2 +- tool/mkccode.tcl | 4 ++-- tool/sqlite3_analyzer.c.in | 3 ++- 5 files changed, 39 insertions(+), 17 deletions(-) diff --git a/main.mk b/main.mk index 3193e531d1..878be92ae6 100644 --- a/main.mk +++ b/main.mk @@ -1741,13 +1741,34 @@ smoketest: $(TESTPROGS) fuzzcheck$(T.exe) shelltest: $(TCLSH_CMD) $(TOP)/test/testrunner.tcl release shell +# +# sqlite3_analyzer.c build depends on $(LINK_TOOLS_DYNAMICALLY). +# +sqlite3_analyzer.c.flags.0 = -DINCLUDE_SQLITE3_C=1 +sqlite3_analyzer.c.flags.1 = sqlite3_analyzer.c: sqlite3.c $(TOP)/src/tclsqlite.c $(TOP)/tool/spaceanal.tcl \ - $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqlite3_analyzer.c.in has_tclsh85 - $(B.tclsh) $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqlite3_analyzer.c.in >sqlite3_analyzer.c + $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqlite3_analyzer.c.in + $(B.tclsh) $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqlite3_analyzer.c.in \ + $(sqlite3_analyzer.c.flags.$(LINK_TOOLS_DYNAMICALLY)) \ + $(OPT_FEATURE_FLAGS) \ + > $@ -sqlite3_analyzer$(T.exe): $(T.tcl.env.sh) sqlite3_analyzer.c - $(T.link.tcl) sqlite3_analyzer.c -o $@ $$TCL_LIB_SPEC $$TCL_INCLUDE_SPEC \ - $(LDFLAGS.libsqlite3) +# +# sqlite3_analyzer's build mode depends on $(LINK_TOOLS_DYNAMICALLY). +# +sqlite3_analyzer.flags.1 = -L. -lsqlite3 $(LDFLAGS.math) +sqlite3_analyzer.flags.0 = $(LDFLAGS.libsqlite3) +sqlite3_analyzer.deps.1 = $(libsqlite3.SO) +sqlite3_analyzer.deps.0 = +sqlite3_analyzer$(T.exe): $(T.tcl.env.sh) sqlite3_analyzer.c \ + $(sqlite3_analyzer.deps.$(LINK_TOOLS_DYNAMICALLY)) + $(T.link.tcl) sqlite3_analyzer.c -o $@ \ + $(sqlite3_analyzer.flags.$(LINK_TOOLS_DYNAMICALLY)) \ + $$TCL_LIB_SPEC $$TCL_INCLUDE_SPEC +# ^^^^ the order of those flags is relevant for +# $(sqlite3_analyzer.flags.1): if the $$TCL_... flags come first they +# can cause the $@ to link to an out-of-tree libsqlite3.so, which may +# or may not fail or otherwise cause confusion. sqltclsh.c: sqlite3.c $(TOP)/src/tclsqlite.c $(TOP)/tool/sqltclsh.tcl \ $(TOP)/ext/misc/appendvfs.c $(TOP)/tool/mkccode.tcl \ diff --git a/manifest b/manifest index efd82a70ad..8c13ab27c3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\strunk\sinto\sthis\sbranch.\sFix\sa\ssmall\sjimtcl/tclsh\sregex\sincompatibility\sin\smkccode.tcl. -D 2024-11-19T19:16:58.734 +C Get\ssqlite3_analyzer\soptionally\slinking\sagainst\slibsqlite3.so\sinstead\sof\sembedding\ssqlite3.c.\sPatch\smkccode.tcl\sto\saccept\sdigits\sin\sits\sIFDEF/IFNDEF\schecks\sand\ssqlite3_analyzer.c.in\sto\sonly\sinclude\ssqlite3.c\sif\s-DINCLUDE_SQLITE3_C\sis\spassed\sto\smkccode.tcl. +D 2024-11-19T19:47:51.323 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -696,7 +696,7 @@ F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65a F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b503bef35 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 -F main.mk 7cb02ba61e74ccab3ad6775b9207b12c6a26bbe3b2dd280039bc0cd532a52ceb +F main.mk b1f78ccd8b6db3fbc6a7e9952fc3e60433ad8d25798eb0b55632b1eb502ab30a F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421 @@ -2135,7 +2135,7 @@ F tool/logest.c c34e5944318415de513d29a6098df247a9618c96d83c38d4abd88641fe46e669 F tool/max-limits.c cbb635fbb37ae4d05f240bfb5b5270bb63c54439 F tool/merge-test.tcl de76b62f2de2a92d4c1ca4f976bce0aea6899e0229e250479b229b2a1914b176 F tool/mkautoconfamal.sh cbdcf993fa83dccbef7fb77b39cdeb31ef9f77d9d88c9e343b58d35ca3898a6a -F tool/mkccode.tcl 0e7488b7218128271b93a4b16e60a169097b6cb555446ce4d6a131be039bb536 x +F tool/mkccode.tcl 210159febe0ef0ecbc53c79833500663ceaba0115b2b374405818dc835b5f84b x F tool/mkctimec.tcl ef6a67ec82e5b6fc19152a4c79f237227b18bf67ff16d155bac7adb94355d9cf x F tool/mkkeywordhash.c 6b0be901c47f9ad42215fc995eb2f4384ac49213b1fba395102ec3e999acf559 F tool/mkmsvcmin.tcl d76c45efda1cce2d4005bcea7b8a22bb752e3256009f331120fb4fecb14ebb7a @@ -2178,7 +2178,7 @@ F tool/speedtest8inst1.c 7ce07da76b5e745783e703a834417d725b7d45fd F tool/spellsift.tcl 52b4b04dc4333c7ab024f09d9d66ed6b6f7c6eb00b38497a09f338fa55d40618 x F tool/split-sqlite3c.tcl 5aa60643afca558bc732b1444ae81a522326f91e1dc5665b369c54f09e20de60 F tool/sqldiff.c 2a0987d183027c795ced13d6749061c1d2f38e24eddb428f56fa64c3a8f51e4b -F tool/sqlite3_analyzer.c.in 39690af454d2866e87e2b475ec5eabee366f211f2307e90b918345f35bb1a643 +F tool/sqlite3_analyzer.c.in fc7735c499d226a49d843d8209b2543e4e5229eeb71a674c331323a2217b65b4 F tool/sqlite3_rsync.c 9a1cca2ab1271c59b37a6493c15dc1bcd0ab9149197a9125926bc08dd26b83fb F tool/sqltclsh.c.in 1bcc2e9da58fadf17b0bf6a50e68c1159e602ce057210b655d50bad5aaaef898 F tool/sqltclsh.tcl 862f4cf1418df5e1315b5db3b5ebe88969e2a784525af5fbf9596592f14ed848 @@ -2198,8 +2198,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 7b14309be42be4204c4d30e9741d56d75ab8ec34686791d032612337fe1c4dcf 7fec209290aa1a6dbbca8de154edaac5d8d0ce042bc0617d27fb2095c8d580f1 -R 0da2647f2e208e5fa5304d40f71239b4 +P 7fb3ebfec634e0508267049fddb2b513201dbefce4d378ca3ec261c5d8336d7f +R 631735400a3a45c7eca237a47c49e579 U stephan -Z bed720f65fe4f336de4e69b585a4a039 +Z b91791961d3936264eb9b5de6178a0fb # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index d9f567ad70..22db0ea473 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7fb3ebfec634e0508267049fddb2b513201dbefce4d378ca3ec261c5d8336d7f +80f3bf8c2ee31ba1ab9187d64d5dcbbf97a61845a21b036f89ea9133153575c0 diff --git a/tool/mkccode.tcl b/tool/mkccode.tcl index b95f0c679d..ecafbdadb9 100755 --- a/tool/mkccode.tcl +++ b/tool/mkccode.tcl @@ -125,12 +125,12 @@ while {1} { puts "/* END_STRING */" continue } - if {[regexp {^IFNDEF +([A-Za-z_]+)} $line all name]} { + if {[regexp {^IFNDEF +([A-Za-z_0-9]+)} $line all name]} { set omit $omit[info exists DEF($name)] incr nomit continue } - if {[regexp {^IFDEF +([A-Za-z_]+)} $line all name]} { + if {[regexp {^IFDEF +([A-Za-z_0-9]+)} $line all name]} { set omit $omit[expr {![info exists DEF($name)]}] incr nomit continue diff --git a/tool/sqlite3_analyzer.c.in b/tool/sqlite3_analyzer.c.in index a934f05700..9c11752b81 100644 --- a/tool/sqlite3_analyzer.c.in +++ b/tool/sqlite3_analyzer.c.in @@ -3,7 +3,8 @@ ** text on standard output. */ #define TCLSH_INIT_PROC sqlite3_analyzer_init_proc -IFNDEF SQLITE_ENABLE_DBSTAT_VTAB +IFDEF INCLUDE_SQLITE3_C +#undef SQLITE_ENABLE_DBSTAT_VTAB #define SQLITE_ENABLE_DBSTAT_VTAB 1 #undef SQLITE_THREADSAFE #define SQLITE_THREADSAFE 0 From b81e11b25ba63403b26f5ed54d221861af730d8c Mon Sep 17 00:00:00 2001 From: stephan Date: Tue, 19 Nov 2024 20:14:31 +0000 Subject: [PATCH 13/89] Move the in-comment-code commentary about --with-debug, from [7b14309be4], into the --help text for that flag, where it's readily visible. FossilOrigin-Name: c938e5d783b3f015b2a1b9f3711664b13497c4b71e4a890c65d6665539522ff8 --- auto.def | 11 +++++------ manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/auto.def b/auto.def index eee8c5aeff..d5f1b694f9 100644 --- a/auto.def +++ b/auto.def @@ -192,12 +192,11 @@ set flags { with-emsdk:=auto => {Top-most dir of the Emscripten SDK installation. Default = EMSDK env var.} # # - - # --with-debug does more than simply builds with a -g compilation - # flag and will impact performance by as much as 4x, as it includes - # large numbers of assert()s in performance-critical loops. Never - # use --with-debug for production builds. - with-debug:=1 => {Enable debug build flags} + with-debug:=1 => {Enable debug build flags. --with-debug does more + than simply builds with a -g compilation flag and will impact + performance by as much as 4x, as it includes large numbers of + assert()s in performance-critical loops. Never use --with-debug + for production builds.} dev => {Enable dev-mode build: automatically enables certain other flags} test-status => {Enable status of tests} gcov=0 => {Enable coverage testing using gcov} diff --git a/manifest b/manifest index 8c13ab27c3..4cb68a5e80 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Get\ssqlite3_analyzer\soptionally\slinking\sagainst\slibsqlite3.so\sinstead\sof\sembedding\ssqlite3.c.\sPatch\smkccode.tcl\sto\saccept\sdigits\sin\sits\sIFDEF/IFNDEF\schecks\sand\ssqlite3_analyzer.c.in\sto\sonly\sinclude\ssqlite3.c\sif\s-DINCLUDE_SQLITE3_C\sis\spassed\sto\smkccode.tcl. -D 2024-11-19T19:47:51.323 +C Move\sthe\sin-comment-code\scommentary\sabout\s--with-debug,\sfrom\s[7b14309be4],\sinto\sthe\s--help\stext\sfor\sthat\sflag,\swhere\sit's\sreadily\svisible. +D 2024-11-19T20:14:31.784 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F auto.def 4f5ae3ed11bb110b1eda2a6b7ee46489b7371bc8f7c19f0ed944613c170e4951 +F auto.def 87c3d42428225c89dba75d399ea83c756f4a21b5c6ed591436d6c930c8d6c73a F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -2198,8 +2198,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 7fb3ebfec634e0508267049fddb2b513201dbefce4d378ca3ec261c5d8336d7f -R 631735400a3a45c7eca237a47c49e579 +P 80f3bf8c2ee31ba1ab9187d64d5dcbbf97a61845a21b036f89ea9133153575c0 +R 07c8458360fbc34333a873b33b8ca43f U stephan -Z b91791961d3936264eb9b5de6178a0fb +Z 3761f0fd6432507d765cfeef5912a493 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 22db0ea473..53fbd282cc 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -80f3bf8c2ee31ba1ab9187d64d5dcbbf97a61845a21b036f89ea9133153575c0 +c938e5d783b3f015b2a1b9f3711664b13497c4b71e4a890c65d6665539522ff8 From 457d9384a22d943abb9239a4043466feb2f88005 Mon Sep 17 00:00:00 2001 From: stephan Date: Tue, 19 Nov 2024 20:21:40 +0000 Subject: [PATCH 14/89] Rename --link-tools-dynamically to --dynlink-tools, per discussion. FossilOrigin-Name: 50b9f6fde44f9afda27e47badde6115ab6d9ccd5e22b446a8d8127499848815f --- auto.def | 6 +++--- main.mk | 5 ++++- manifest | 14 +++++++------- manifest.uuid | 2 +- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/auto.def b/auto.def index d5f1b694f9..e6c6dfc00a 100644 --- a/auto.def +++ b/auto.def @@ -202,7 +202,7 @@ set flags { gcov=0 => {Enable coverage testing using gcov} linemacros => {Enable #line macros in the amalgamation} dump-defines=0 => {Dump autosetup defines to $DUMP_DEFINES_TXT (for build debugging)} - link-tools-dynamically => {Dynamically link libsqlite3 to certain tools which normally statically embed it.} + dynlink-tools => {Dynamically link libsqlite3 to certain tools which normally statically embed it.} soname:=legacy => {SONAME for libsqlite3.so. Must be one of: none, auto, legacy} # --soname has a long story behind it, as well as no small amount of uncertainty. # @@ -333,7 +333,7 @@ proj-if-opt-truthy dev { define CFLAGS [get-env CFLAGS {-O0 -g}] } -define LINK_TOOLS_DYNAMICALLY [proj-opt-was-provided link-tools-dynamically] +define LINK_TOOLS_DYNAMICALLY [proj-opt-was-provided dynlink-tools] ######################################################################## # Handle --with-wasi-sdk=DIR @@ -476,7 +476,7 @@ apply {{} { if {[proj-opt-was-provided soname]} { set soname [opt-val soname] } else { - set soname none; # enabling soname breaks linking for the --link-tools-dynamically feature + set soname none; # enabling soname breaks linking for the --dynlink-tools feature } switch -exact -- $soname { none { return 0 } diff --git a/main.mk b/main.mk index 878be92ae6..f1c36b3575 100644 --- a/main.mk +++ b/main.mk @@ -209,7 +209,10 @@ USE_AMALGAMATION ?= 1 # # If true, certain binaries which typically statically link against # libsqlite3 or its component object files will instead link against -# the DLL. +# the DLL. The caveat is that running such builds from the source tree +# may require that the user specifically prepend "." to their +# $LD_LIBRARY_PATH so that the dynamic linker does not pick up a +# libsqlite3.so from outside the source tree. # LINK_TOOLS_DYNAMICALLY ?= 0 # diff --git a/manifest b/manifest index 4cb68a5e80..52a4d101ec 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Move\sthe\sin-comment-code\scommentary\sabout\s--with-debug,\sfrom\s[7b14309be4],\sinto\sthe\s--help\stext\sfor\sthat\sflag,\swhere\sit's\sreadily\svisible. -D 2024-11-19T20:14:31.784 +C Rename\s--link-tools-dynamically\sto\s--dynlink-tools,\sper\sdiscussion. +D 2024-11-19T20:21:40.498 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F auto.def 87c3d42428225c89dba75d399ea83c756f4a21b5c6ed591436d6c930c8d6c73a +F auto.def b81388775c7596c22d19ce7c5e0692d8cb6beb89ae591e2684a238084acabf61 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -696,7 +696,7 @@ F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65a F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b503bef35 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 -F main.mk b1f78ccd8b6db3fbc6a7e9952fc3e60433ad8d25798eb0b55632b1eb502ab30a +F main.mk de4824958a997377f0b661329699eb0b58e81c3076d68bf45898305d074fd3ee F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421 @@ -2198,8 +2198,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 80f3bf8c2ee31ba1ab9187d64d5dcbbf97a61845a21b036f89ea9133153575c0 -R 07c8458360fbc34333a873b33b8ca43f +P c938e5d783b3f015b2a1b9f3711664b13497c4b71e4a890c65d6665539522ff8 +R 2438fd2896d39f35fc299b3fd744f13f U stephan -Z 3761f0fd6432507d765cfeef5912a493 +Z e384122113bfcbb2fa4bae830787db35 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 53fbd282cc..ae727ec259 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c938e5d783b3f015b2a1b9f3711664b13497c4b71e4a890c65d6665539522ff8 +50b9f6fde44f9afda27e47badde6115ab6d9ccd5e22b446a8d8127499848815f From 18c9e2638eed17bb3ed35581d0054c7404e56f33 Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 19 Nov 2024 21:14:48 +0000 Subject: [PATCH 15/89] Add missing $TCL_LIBS to the link for sqlite3_analyzer. FossilOrigin-Name: bfab759611b0562837d8733ce56591854db08c122956524799dc1d5b3e2d0279 --- main.mk | 2 +- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/main.mk b/main.mk index f1c36b3575..144c1e2b58 100644 --- a/main.mk +++ b/main.mk @@ -1767,7 +1767,7 @@ sqlite3_analyzer$(T.exe): $(T.tcl.env.sh) sqlite3_analyzer.c \ $(sqlite3_analyzer.deps.$(LINK_TOOLS_DYNAMICALLY)) $(T.link.tcl) sqlite3_analyzer.c -o $@ \ $(sqlite3_analyzer.flags.$(LINK_TOOLS_DYNAMICALLY)) \ - $$TCL_LIB_SPEC $$TCL_INCLUDE_SPEC + $$TCL_LIB_SPEC $$TCL_INCLUDE_SPEC $$TCL_LIBS # ^^^^ the order of those flags is relevant for # $(sqlite3_analyzer.flags.1): if the $$TCL_... flags come first they # can cause the $@ to link to an out-of-tree libsqlite3.so, which may diff --git a/manifest b/manifest index 52a4d101ec..fa0500c459 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Rename\s--link-tools-dynamically\sto\s--dynlink-tools,\sper\sdiscussion. -D 2024-11-19T20:21:40.498 +C Add\smissing\s$TCL_LIBS\sto\sthe\slink\sfor\ssqlite3_analyzer. +D 2024-11-19T21:14:48.228 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -696,7 +696,7 @@ F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65a F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b503bef35 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 -F main.mk de4824958a997377f0b661329699eb0b58e81c3076d68bf45898305d074fd3ee +F main.mk 4e437d2c9cd67db9c1a0715b70e3c9f6b20f54cd97bd21b1b1a40a6181dfe874 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421 @@ -2198,8 +2198,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P c938e5d783b3f015b2a1b9f3711664b13497c4b71e4a890c65d6665539522ff8 -R 2438fd2896d39f35fc299b3fd744f13f -U stephan -Z e384122113bfcbb2fa4bae830787db35 +P 50b9f6fde44f9afda27e47badde6115ab6d9ccd5e22b446a8d8127499848815f +R 550a68b5ea9d3db22b4d7e049a260626 +U drh +Z 02a349b181e8372ee68443f7fc5c2aa7 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index ae727ec259..a1aef6a738 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -50b9f6fde44f9afda27e47badde6115ab6d9ccd5e22b446a8d8127499848815f +bfab759611b0562837d8733ce56591854db08c122956524799dc1d5b3e2d0279 From a34fbd1b9b1817a9fc26b6231c1d5f8b9cb5601b Mon Sep 17 00:00:00 2001 From: stephan Date: Tue, 19 Nov 2024 21:19:12 +0000 Subject: [PATCH 16/89] Add fix from [bfab759611b0] to sqltclsh. Remove some now-unneeded has_tclsh84/5 checks in cases where jimsh can be used. FossilOrigin-Name: 9d389b998317c5006876f2f40d56cd763d1555bbeaf48b2bca9bd46dcd02b80e --- main.mk | 30 +++++++++++++++--------------- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/main.mk b/main.mk index 144c1e2b58..e2458c5481 100644 --- a/main.mk +++ b/main.mk @@ -1031,7 +1031,7 @@ T.link.tcl = $(T.tcl.env.source); $(T.link) # all that automatic generation. # .target_source: $(MAKE_SANITY_CHECK) $(SRC) $(TOP)/tool/vdbe-compress.tcl \ - fts5.c $(B.tclsh) # has_tclsh84 + fts5.c $(B.tclsh) rm -rf tsrc mkdir tsrc cp -f $(SRC) tsrc @@ -1057,19 +1057,19 @@ mksourceid$(B.exe): $(MAKE_SANITY_CHECK) $(TOP)/tool/mksourceid.c sqlite3.h: $(MAKE_SANITY_CHECK) $(TOP)/src/sqlite.h.in \ $(TOP)/manifest mksourceid$(B.exe) \ - $(TOP)/VERSION $(B.tclsh) # has_tclsh84 + $(TOP)/VERSION $(B.tclsh) $(B.tclsh) $(TOP)/tool/mksqlite3h.tcl $(TOP) >sqlite3.h sqlite3.c: .target_source sqlite3.h $(TOP)/tool/mksqlite3c.tcl src-verify$(B.exe) \ - $(B.tclsh) # has_tclsh84 + $(B.tclsh) $(B.tclsh) $(TOP)/tool/mksqlite3c.tcl $(AMALGAMATION_GEN_FLAGS) $(EXTRA_SRC) cp tsrc/sqlite3ext.h . cp $(TOP)/ext/session/sqlite3session.h . -sqlite3r.h: sqlite3.h $(B.tclsh) # has_tclsh84 +sqlite3r.h: sqlite3.h $(B.tclsh) $(B.tclsh) $(TOP)/tool/mksqlite3h.tcl $(TOP) --enable-recover >sqlite3r.h -sqlite3r.c: sqlite3.c sqlite3r.h $(B.tclsh) # has_tclsh84 +sqlite3r.c: sqlite3.c sqlite3r.h $(B.tclsh) cp $(TOP)/ext/recover/sqlite3recover.c tsrc/ cp $(TOP)/ext/recover/sqlite3recover.h tsrc/ cp $(TOP)/ext/recover/dbdata.c tsrc/ @@ -1356,11 +1356,11 @@ tcl: tclsqlite3$(T.exe)-$(HAVE_TCL) # Rules to build opcodes.c and opcodes.h # -opcodes.c: opcodes.h $(TOP)/tool/mkopcodec.tcl $(B.tclsh) # has_tclsh84 +opcodes.c: opcodes.h $(TOP)/tool/mkopcodec.tcl $(B.tclsh) $(B.tclsh) $(TOP)/tool/mkopcodec.tcl opcodes.h >opcodes.c opcodes.h: parse.h $(TOP)/src/vdbe.c \ - $(TOP)/tool/mkopcodeh.tcl $(B.tclsh) # has_tclsh84 + $(TOP)/tool/mkopcodeh.tcl $(B.tclsh) cat parse.h $(TOP)/src/vdbe.c | $(B.tclsh) $(TOP)/tool/mkopcodeh.tcl >opcodes.h # Rules to build parse.c and parse.h - the outputs of lemon. @@ -1371,7 +1371,7 @@ parse.c: $(TOP)/src/parse.y lemon$(B.exe) cp $(TOP)/src/parse.y . ./lemon$(B.exe) $(OPT_FEATURE_FLAGS) $(OPTS) -S parse.y -sqlite3rc.h: $(TOP)/src/sqlite3.rc $(TOP)/VERSION $(B.tclsh) # has_tclsh84 +sqlite3rc.h: $(TOP)/src/sqlite3.rc $(TOP)/VERSION $(B.tclsh) echo '#ifndef SQLITE_RESOURCE_VERSION' >$@ echo -n '#define SQLITE_RESOURCE_VERSION ' >>$@ cat $(TOP)/VERSION | $(B.tclsh) $(TOP)/tool/replace.tcl exact . , >>$@ @@ -1385,7 +1385,7 @@ keywordhash.h: mkkeywordhash$(B.exe) # # sqlite3.c split into many smaller files. # -sqlite3-all.c: sqlite3.c $(TOP)/tool/split-sqlite3c.tcl $(B.tclsh) # has_tclsh84 +sqlite3-all.c: sqlite3.c $(TOP)/tool/split-sqlite3c.tcl $(B.tclsh) $(B.tclsh) $(TOP)/tool/split-sqlite3c.tcl # @@ -1591,7 +1591,7 @@ fts5parse.c: $(TOP)/ext/fts5/fts5parse.y lemon$(B.exe) fts5parse.h: fts5parse.c -fts5.c: $(FTS5_SRC) $(B.tclsh) # has_tclsh84 +fts5.c: $(FTS5_SRC) $(B.tclsh) $(B.tclsh) $(TOP)/ext/fts5/tool/mkfts5c.tcl cp $(TOP)/ext/fts5/fts5.h . @@ -1759,7 +1759,7 @@ sqlite3_analyzer.c: sqlite3.c $(TOP)/src/tclsqlite.c $(TOP)/tool/spaceanal.tcl \ # # sqlite3_analyzer's build mode depends on $(LINK_TOOLS_DYNAMICALLY). # -sqlite3_analyzer.flags.1 = -L. -lsqlite3 $(LDFLAGS.math) +sqlite3_analyzer.flags.1 = -L. -lsqlite3 sqlite3_analyzer.flags.0 = $(LDFLAGS.libsqlite3) sqlite3_analyzer.deps.1 = $(libsqlite3.SO) sqlite3_analyzer.deps.0 = @@ -1775,12 +1775,12 @@ sqlite3_analyzer$(T.exe): $(T.tcl.env.sh) sqlite3_analyzer.c \ sqltclsh.c: sqlite3.c $(TOP)/src/tclsqlite.c $(TOP)/tool/sqltclsh.tcl \ $(TOP)/ext/misc/appendvfs.c $(TOP)/tool/mkccode.tcl \ - $(TOP)/tool/sqltclsh.c.in has_tclsh85 + $(TOP)/tool/sqltclsh.c.in $(B.tclsh) $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqltclsh.c.in >sqltclsh.c sqltclsh$(T.exe): $(T.tcl.env.sh) sqltclsh.c $(T.link.tcl) sqltclsh.c -o $@ $$TCL_INCLUDE_SPEC $(CFLAGS.libsqlite3) \ - $$TCL_LIB_SPEC $(LDFLAGS.libsqlite3) + $(LDFLAGS.libsqlite3) $$TCL_LIB_SPEC $$TCL_LIBS # xbin: target for generic binaries which aren't usually built. It is # used primarily for testing the build process. xbin: sqltclsh$(T.exe) sqlite3_analyzer$(T.exe) @@ -1801,7 +1801,7 @@ CHECKER_DEPS =\ $(TOP)/ext/misc/btreeinfo.c \ $(TOP)/ext/repair/sqlite3_checker.c.in -sqlite3_checker.c: $(CHECKER_DEPS) has_tclsh85 +sqlite3_checker.c: $(CHECKER_DEPS) $(B.tclsh) $(TOP)/tool/mkccode.tcl $(TOP)/ext/repair/sqlite3_checker.c.in >$@ sqlite3_checker$(T.exe): $(T.tcl.env.sh) sqlite3_checker.c @@ -2177,7 +2177,7 @@ SHELL_DEP = \ $(TOP)/src/test_windirent.c \ $(TOP)/src/test_windirent.h -shell.c: $(SHELL_DEP) $(TOP)/tool/mkshellc.tcl $(B.tclsh) # has_tclsh84 +shell.c: $(SHELL_DEP) $(TOP)/tool/mkshellc.tcl $(B.tclsh) $(B.tclsh) $(TOP)/tool/mkshellc.tcl >shell.c # diff --git a/manifest b/manifest index fa0500c459..3c0334288c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\smissing\s$TCL_LIBS\sto\sthe\slink\sfor\ssqlite3_analyzer. -D 2024-11-19T21:14:48.228 +C Add\sfix\sfrom\s[bfab759611b0]\sto\ssqltclsh.\sRemove\ssome\snow-unneeded\shas_tclsh84/5\schecks\sin\scases\swhere\sjimsh\scan\sbe\sused. +D 2024-11-19T21:19:12.706 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -696,7 +696,7 @@ F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65a F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b503bef35 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 -F main.mk 4e437d2c9cd67db9c1a0715b70e3c9f6b20f54cd97bd21b1b1a40a6181dfe874 +F main.mk 87ce967497ff2fc81406fc91c290b1faf3dfa8bb7724e3980be297381369b4f8 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421 @@ -2198,8 +2198,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 50b9f6fde44f9afda27e47badde6115ab6d9ccd5e22b446a8d8127499848815f -R 550a68b5ea9d3db22b4d7e049a260626 -U drh -Z 02a349b181e8372ee68443f7fc5c2aa7 +P bfab759611b0562837d8733ce56591854db08c122956524799dc1d5b3e2d0279 +R 0f52e38972daef31ec132c6a8f286547 +U stephan +Z 58d6b35becabf99bb64f154abaacc201 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index a1aef6a738..b0f59a8497 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bfab759611b0562837d8733ce56591854db08c122956524799dc1d5b3e2d0279 +9d389b998317c5006876f2f40d56cd763d1555bbeaf48b2bca9bd46dcd02b80e From 95669823282326526772ae51289f26aa1753e57c Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 20 Nov 2024 11:34:16 +0000 Subject: [PATCH 17/89] Do not report an sqlite3_error_offset() for errors that occur inside of views or triggers, since the text of those elements is not part of the original query. FossilOrigin-Name: bf66c6dfc25c2562a4e6a5b24dd1660213a8fefbb5763e7583b87fb06dbaaf43 --- manifest | 13 +++++++------ manifest.uuid | 2 +- src/printf.c | 1 + test/errofst1.test | 31 +++++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 test/errofst1.test diff --git a/manifest b/manifest index 87bdfbdd5f..09bf32dd9b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enhancements\sto\stool/mkccode.tcl\ssuch\sthat\sit\srecognizes\s-D\scommand\sline\narguments\sand\scan\suse\sthem\sin\sinternal\sIFDEF\sand\sIFNDEF\smacros.\s\sUpdate\nthe\stool/sqlite3_analyzer.c.in\sscript\ssuch\sthat\sit\somits\sthe\sSQLite\samalgamation\nif\s-DSQLITE_ENABLE_DBSTAT_VTAB\sis\sdefined. -D 2024-11-19T18:26:47.422 +C Do\snot\sreport\san\ssqlite3_error_offset()\sfor\serrors\sthat\soccur\sinside\sof\nviews\sor\striggers,\ssince\sthe\stext\sof\sthose\selements\sis\snot\spart\sof\sthe\noriginal\squery. +D 2024-11-20T11:34:16.309 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -770,7 +770,7 @@ F src/pcache1.c 49516ad7718a3626f28f710fa7448ef1fce3c07fd169acbb4817341950264319 F src/pragma.c a2ec3657a953fa7dea7c1e680e4358b6ce6ae570b6c5234e0f5ef219d308d223 F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7 F src/prepare.c 1832be043fce7d489959aae6f994c452d023914714c4d5457beaed51c0f3d126 -F src/printf.c 6a87534ebfb9e5346011191b1f3a7ebc457f5938c7e4feeea478ecf53f6a41b2 +F src/printf.c 96f7f8baeedc7639da94e4e7a4a2c200e2537c4eec9e5e1c2ffc821f40eb3105 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c c8a5372b97b2a2e972a280676f06ddb5b74e885d3b1f5ce383f839907b57ef68 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 @@ -1124,6 +1124,7 @@ F test/enc4.test c8f1ce3618508fd0909945beb8b8831feef2c020 F test/eqp.test 82f221e8cd588434d7f3bba9a0f4c78cbe7a541615a41632e12f50608bfb4a99 F test/eqp2.test 6e8996148de88f0e7670491e92e712a2920a369b4406f21a27c3c9b6a46b68dd F test/errmsg.test eae9f091eb39ce7e20305de45d8e5d115b68fa856fba4ea6757b6ca3705ff7f9 +F test/errofst1.test 6da78363739ba8991f498396ab331b5d64e7ab5c4172c12b5884683ef523ac53 F test/eval.test 73969a2d43a511bf44080c44485a8c4d796b6a4f038d19e491867081155692c0 F test/exclusive.test 7ff63be7503990921838d5c9f77f6e33e68e48ed1a9d48cd28745bf650bf0747 F test/exclusive2.test cd70b1d9c6fffd336f9795b711dcc5d9ceba133ad3f7001da3fda63615bdc91e @@ -2198,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 4c4d1db00bd2c522165876dcf1606116a72525d9ffc891b266213704e25cde55 -R cdb63603c9c3a16b29feb4bae93e8b25 +P 7fec209290aa1a6dbbca8de154edaac5d8d0ce042bc0617d27fb2095c8d580f1 +R 9836fa6ecc3ea6cb30fb659606cd39d3 U drh -Z 2a605008d2464811e071ed45a95c8ad5 +Z 6d36dcf7e943a68e08518adf95cc789e # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 643a526325..0e8a1efe30 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7fec209290aa1a6dbbca8de154edaac5d8d0ce042bc0617d27fb2095c8d580f1 +bf66c6dfc25c2562a4e6a5b24dd1660213a8fefbb5763e7583b87fb06dbaaf43 diff --git a/src/printf.c b/src/printf.c index a140565146..71363f91b4 100644 --- a/src/printf.c +++ b/src/printf.c @@ -938,6 +938,7 @@ void sqlite3RecordErrorOffsetOfExpr(sqlite3 *db, const Expr *pExpr){ pExpr = pExpr->pLeft; } if( pExpr==0 ) return; + if( ExprHasProperty(pExpr, EP_FromDDL) ) return; db->errByteOffset = pExpr->w.iOfst; } diff --git a/test/errofst1.test b/test/errofst1.test new file mode 100644 index 0000000000..f8876316e5 --- /dev/null +++ b/test/errofst1.test @@ -0,0 +1,31 @@ +# 2024-11-20 +# +# 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. +# +#*********************************************************************** +# +# Test cases for sqlite3_error_offset() +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl + +do_execsql_test errofst1-1.1 { + CREATE TABLE t1 as select 1 as aa; + CREATE VIEW t2 AS + WITH t3 AS (SELECT 1 FROM t1 AS bb, t1 AS cc WHERE cc.aa <= sts.aa) + SELECT 1 FROM t3 AS dd; +} +do_catchsql_test errofst1-1.2 { + SELECT * FROM t2; +} {1 {no such column: sts.aa}} +do_test errofst1-1.3 { + sqlite3_error_offset db +} {-1} + +finish_test From d4a65cfc51c5dffebc23d29a91cd369c36943f4c Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 20 Nov 2024 14:19:44 +0000 Subject: [PATCH 18/89] Provide the sqlite3ShowWhereTerm() interface callable interactively from a debugger, when compiling with SQLITE_DEBUG. FossilOrigin-Name: c77a4a42f2e3d16427a69295436efe36335e56e97abd0efba814092498a8dea8 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/treeview.c | 4 ++++ src/where.c | 5 ++++- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 09bf32dd9b..624360ce4e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Do\snot\sreport\san\ssqlite3_error_offset()\sfor\serrors\sthat\soccur\sinside\sof\nviews\sor\striggers,\ssince\sthe\stext\sof\sthose\selements\sis\snot\spart\sof\sthe\noriginal\squery. -D 2024-11-20T11:34:16.309 +C Provide\sthe\ssqlite3ShowWhereTerm()\sinterface\scallable\sinteractively\sfrom\na\sdebugger,\swhen\scompiling\swith\sSQLITE_DEBUG. +D 2024-11-20T14:19:44.523 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -836,7 +836,7 @@ F src/test_window.c 6d80e11fba89a1796525e6f0048ff0c7789aa2c6b0b11c80827dc1437bd8 F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c F src/tokenize.c 3f703cacdab728d7741e5a6ac242006d74fe1c2754d4f03ed889d7253259bd68 -F src/treeview.c 88aa39b754f5ef7214385c1bbbdd2f3dc20efafeed0cf590e8d1199b9c6e44aa +F src/treeview.c 4eeb155abefd88a60d0c37cc00bcfac38a8dd566970f019e4af7e02672ee2599 F src/trigger.c 0bb986a5b96047fd597c6aac28588853df56064e576e6b81ba777ef2ccaac461 F src/update.c 0e01aa6a3edf9ec112b33eb714b9016a81241497b1fb7c3e74332f4f71756508 F src/upsert.c 215328c3f91623c520ec8672c44323553f12caeb4f01b1090ebdca99fdf7b4f1 @@ -858,7 +858,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 F src/wal.c 8b7e309a8012659ac9275ad8cdcc6acaf73fa04b1090e38a01335f230fd10681 F src/wal.h ba252daaa94f889f4b2c17c027e823d9be47ce39da1d3799886bbd51f0490452 F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014 -F src/where.c 4de9e7ca5f49e4a21c1d733e2b2fbbc8b62b1a157a58a562c569da84cfcb005b +F src/where.c 504d72098437ab97dfd3a71cea85e554381650f9dffde277c66603f3e34daddc F src/whereInt.h 1e36ec50392f7cc3d93d1152d4338064cd522b87156a0739388b7e273735f0ca F src/wherecode.c 81b9af89f4f85c8097d0da6a31499f015eabc4d3584963d30ba7b7b782e26514 F src/whereexpr.c 0f93a29cabd3a338d09a1f5c6770620a1ac51ec1157f3229502a7e7767c60b6f @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 7fec209290aa1a6dbbca8de154edaac5d8d0ce042bc0617d27fb2095c8d580f1 -R 9836fa6ecc3ea6cb30fb659606cd39d3 +P bf66c6dfc25c2562a4e6a5b24dd1660213a8fefbb5763e7583b87fb06dbaaf43 +R 0752d1ca03189356b3058d9f9278a405 U drh -Z 6d36dcf7e943a68e08518adf95cc789e +Z 314628466d5a8713bca43ea5e20a45da # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 0e8a1efe30..b84bf19c0e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bf66c6dfc25c2562a4e6a5b24dd1660213a8fefbb5763e7583b87fb06dbaaf43 +c77a4a42f2e3d16427a69295436efe36335e56e97abd0efba814092498a8dea8 diff --git a/src/treeview.c b/src/treeview.c index de67161229..865de9991c 100644 --- a/src/treeview.c +++ b/src/treeview.c @@ -1302,6 +1302,10 @@ void sqlite3TreeViewTrigger( ** accessible to the debugging, and to avoid warnings about unused ** functions. But these routines only exist in debugging builds, so they ** do not contaminate the interface. +** +** See Also: +** +** sqlite3ShowWhereTerm() in where.c */ void sqlite3ShowExpr(const Expr *p){ sqlite3TreeViewExpr(0,p,0); } void sqlite3ShowExprList(const ExprList *p){ sqlite3TreeViewExprList(0,p,0,0);} diff --git a/src/where.c b/src/where.c index f24cf7f769..1315a8cc37 100644 --- a/src/where.c +++ b/src/where.c @@ -2332,7 +2332,7 @@ static int whereInScanEst( #endif /* SQLITE_ENABLE_STAT4 */ -#ifdef WHERETRACE_ENABLED +#if defined(WHERETRACE_ENABLED) || defined(SQLITE_DEBUG) /* ** Print the content of a WhereTerm object */ @@ -2376,6 +2376,9 @@ void sqlite3WhereTermPrint(WhereTerm *pTerm, int iTerm){ sqlite3TreeViewExpr(0, pTerm->pExpr, 0); } } +void sqlite3ShowWhereTerm(WhereTerm *pTerm){ + sqlite3WhereTermPrint(pTerm, 0); +} #endif #ifdef WHERETRACE_ENABLED From 2722e2e822a26eb62cdf0e12683de1c5f61bf2b9 Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 20 Nov 2024 14:59:32 +0000 Subject: [PATCH 19/89] Bug fix in the SubrtnSig logic from [c9a3498113074bbc], if a subquery is copied and then changes are made to the copy, be sure to give the copy a unique Select.selId value so that the original will not be substituted in place of the modified copy. [forum:/forumpost/0b9ded2f8428ac00|Forum post 0b9ded2f8428ac00]. FossilOrigin-Name: 19d1bede5654bcfa9f7a151b9b2616a3d10873b8e3f8cf54a3a7e810da08f844 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/wherecode.c | 1 + test/in7.test | 27 ++++++++++++++++++++++++++- 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 624360ce4e..6e59cc7243 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Provide\sthe\ssqlite3ShowWhereTerm()\sinterface\scallable\sinteractively\sfrom\na\sdebugger,\swhen\scompiling\swith\sSQLITE_DEBUG. -D 2024-11-20T14:19:44.523 +C Bug\sfix\sin\sthe\sSubrtnSig\slogic\sfrom\s[c9a3498113074bbc],\sif\sa\ssubquery\sis\ncopied\sand\sthen\schanges\sare\smade\sto\sthe\scopy,\sbe\ssure\sto\sgive\sthe\scopy\na\sunique\sSelect.selId\svalue\sso\sthat\sthe\soriginal\swill\snot\sbe\ssubstituted\nin\splace\sof\sthe\smodified\scopy.\n[forum:/forumpost/0b9ded2f8428ac00|Forum\spost\s0b9ded2f8428ac00]. +D 2024-11-20T14:59:32.102 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -860,7 +860,7 @@ F src/wal.h ba252daaa94f889f4b2c17c027e823d9be47ce39da1d3799886bbd51f0490452 F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014 F src/where.c 504d72098437ab97dfd3a71cea85e554381650f9dffde277c66603f3e34daddc F src/whereInt.h 1e36ec50392f7cc3d93d1152d4338064cd522b87156a0739388b7e273735f0ca -F src/wherecode.c 81b9af89f4f85c8097d0da6a31499f015eabc4d3584963d30ba7b7b782e26514 +F src/wherecode.c 0c3d3199a2b769a5e2bb70feb5003dc85b3d86842ecaf903a47f2b4205ca5dab F src/whereexpr.c 0f93a29cabd3a338d09a1f5c6770620a1ac51ec1157f3229502a7e7767c60b6f F src/window.c 6c386af5972a58f9a9847bba9d7ca70c4c682391ab8478d94a6e046b22a0dbb3 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 @@ -1301,7 +1301,7 @@ F test/in3.test 3cbf58c87f4052cee3a58b37b6389777505aa0c0 F test/in4.test bb767ec1cfd1730256f0a83219f0acda36bc251b63f8b8bb7d8c7cff17875a4f F test/in5.test 4fd79c70dfa0681313e8cdca07f5ff0400bdc0e20f808a5c59eaef1e4b48082a F test/in6.test f5f40d6816a8bb7c784424b58a10ac38efb76ab29127a2c17399e0cbeeda0e4b -F test/in7.test 9256cdb30dc487f2078bb4bb30f43f2c1ff4d277a9c7c9a14bd1c9510c9c8cae +F test/in7.test 5050b648510d88bd27ff6b40991a45e1cc277c20e258162e81650e01069a56bb F test/incrblob.test c9b96afc292aeff43d6687bcb09b0280aa599822 F test/incrblob2.test a494c9e848560039a23974b9119cfc2cf3ad3bd15cc2694ee6367ae537ef8f1f F test/incrblob3.test 67621a04b3084113bf38ce03797d70eca012d9d8f948193b8f655df577b0da6f @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P bf66c6dfc25c2562a4e6a5b24dd1660213a8fefbb5763e7583b87fb06dbaaf43 -R 0752d1ca03189356b3058d9f9278a405 +P c77a4a42f2e3d16427a69295436efe36335e56e97abd0efba814092498a8dea8 +R 334ca864785a19dfa280dbef32e35002 U drh -Z 314628466d5a8713bca43ea5e20a45da +Z af9f774053d8dc7c5fd09306a426c7d8 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index b84bf19c0e..507330bbf4 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c77a4a42f2e3d16427a69295436efe36335e56e97abd0efba814092498a8dea8 +19d1bede5654bcfa9f7a151b9b2616a3d10873b8e3f8cf54a3a7e810da08f844 diff --git a/src/wherecode.c b/src/wherecode.c index 0bd1733b76..045653aac8 100644 --- a/src/wherecode.c +++ b/src/wherecode.c @@ -615,6 +615,7 @@ static Expr *removeUnindexableInClauseTerms( pNew->pLeft->x.pList = pLhs; } pSelect->pEList = pRhs; + pSelect->selId = ++pParse->nSelect; /* Req'd for SubrtnSig validity */ if( pLhs && pLhs->nExpr==1 ){ /* Take care here not to generate a TK_VECTOR containing only a ** single value. Since the parser never creates such a vector, some diff --git a/test/in7.test b/test/in7.test index 29013ff593..4dc0821d18 100644 --- a/test/in7.test +++ b/test/in7.test @@ -192,6 +192,31 @@ do_execsql_test 3.4 { 1 2 3 4 5 6 } - +# 2024-11-20 https://sqlite.org/forum/forumpost/0b9ded2f8428ac00 +# +# Bug in SubrtnSig logic. If a SELECT statement is copied and the copy +# is subsequently modified, we need to change the Select.selId on the +# copy so that when the copy is used to generate code, the SubrtnSig +# logic won't try to substitute the original SELECT in place of the +# copy which is now different. +# +do_execsql_test 3.5 { + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1 (a int UNIQUE); + CREATE TABLE t2 (b int UNIQUE); + INSERT INTO t1 VALUES (1); + INSERT INTO t2 VALUES (1), (2); + SELECT t1.a, t2.b FROM t1, t2 WHERE (t1.a, t2.b) = (1, 1); +} {1 1} +do_execsql_test 3.6 { + SELECT t1.a, t2.b FROM t1, t2 WHERE (t1.a, t2.b) IN ((1, 1)); +} {1 1} +do_execsql_test 3.7 { + SELECT t1.a, t2.b FROM t1, t2 WHERE (t1.a, t2.b) = (1, 2); +} {1 2} +do_execsql_test 3.8 { + SELECT t1.a, t2.b FROM t1, t2 WHERE (t1.a, t2.b) IN ((1, 2)); +} {1 2} finish_test From 914e32f24a4304c3d37766624f39912af10e898e Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 20 Nov 2024 16:17:01 +0000 Subject: [PATCH 20/89] Use shared-library flags, not shared-object flags, to create shared libraries. This makes no difference on Linux, but is required for Mac. FossilOrigin-Name: bfaa3ee7588b6f6be9799882c6ed6472357d988fac31512d5e92fe28f57029c6 --- Makefile.in | 2 +- main.mk | 6 +++--- manifest | 16 ++++++++-------- manifest.uuid | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Makefile.in b/Makefile.in index 219347c301..3d2e736fd1 100644 --- a/Makefile.in +++ b/Makefile.in @@ -143,7 +143,7 @@ LDFLAGS.configure = @LDFLAGS@ # CFLAGS.core is documented in main.mk. # CFLAGS.core = @SH_CFLAGS@ -LDFLAGS.shobj = @SHOBJ_LDFLAGS@ +LDFLAGS.shlib = @SH_LDFLAGS@ LDFLAGS.zlib = @LDFLAGS_ZLIB@ LDFLAGS.math = @LDFLAGS_MATH@ LDFLAGS.rpath = @LDFLAGS_RPATH@ diff --git a/main.mk b/main.mk index e2458c5481..b1f1635980 100644 --- a/main.mk +++ b/main.mk @@ -159,7 +159,7 @@ LDFLAGS.math ?= -lm LDFLAGS.rpath ?= -Wl,-rpath -Wl,$(prefix)/lib LDFLAGS.pthread ?= -lpthread LDFLAGS.dlopen ?= -ldl -LDFLAGS.shobj ?= -shared +LDFLAGS.shlib ?= -shared LDFLAGS.icu ?= # -licui18n -licuuc -licudata CFLAGS.icu ?= LDFLAGS.soname.libsqlite3 ?= @@ -385,7 +385,7 @@ T.link = $(T.cc.sqlite) $(T.link.extras) # # $(T.link.shared) = $(T.link) invocation specifically for shared libraries # -T.link.shared = $(T.link) $(LDFLAGS.shobj) +T.link.shared = $(T.link) $(LDFLAGS.shlib) # # $(LDFLAGS.libsqlite3) should be used with any deliverable for which @@ -2245,7 +2245,7 @@ sqlite3.def: $(LIBOBJ) | sed 's/^.* _//' >>sqlite3.def sqlite3.dll: $(LIBOBJ) sqlite3.def - $(T.cc.sqlite) $(LDFLAGS.shobj) -o $@ sqlite3.def \ + $(T.cc.sqlite) $(LDFLAGS.shlib) -o $@ sqlite3.def \ -Wl,"--strip-all" $(LIBOBJ) $(LDFLAGS.configure) # diff --git a/manifest b/manifest index 3c0334288c..f1118f4bfd 100644 --- a/manifest +++ b/manifest @@ -1,9 +1,9 @@ -C Add\sfix\sfrom\s[bfab759611b0]\sto\ssqltclsh.\sRemove\ssome\snow-unneeded\shas_tclsh84/5\schecks\sin\scases\swhere\sjimsh\scan\sbe\sused. -D 2024-11-19T21:19:12.706 +C Use\sshared-library\sflags,\snot\sshared-object\sflags,\sto\screate\sshared\slibraries.\nThis\smakes\sno\sdifference\son\sLinux,\sbut\sis\srequired\sfor\sMac. +D 2024-11-20T16:17:01.857 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d -F Makefile.in 5461b1125a3039fef49f4896519d164ebe22ee394d20d69913ab0fdc8c464b63 +F Makefile.in b22a52dc08b8a727c298af4f93171b2862df1d6fce4c255b15f6ce1011a9ee7d F Makefile.linux-generic bd3e3cacd369821a6241d4ea1967395c962dfe3057e38cb0a435cee0e8b789d0 F Makefile.msc a92237976eb92c5efaa0dd2524746aec12c196e12df8d4dbff9543a4648c3312 F README.md c3c0f19532ce28f6297a71870f3c7b424729f0e6d9ab889616d3587dd2332159 @@ -696,7 +696,7 @@ F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65a F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b503bef35 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 -F main.mk 87ce967497ff2fc81406fc91c290b1faf3dfa8bb7724e3980be297381369b4f8 +F main.mk e3873a2363bef0fb8e3a65a21e548ce1aa9aeeb3795362c3e78346e655d501a4 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421 @@ -2198,8 +2198,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P bfab759611b0562837d8733ce56591854db08c122956524799dc1d5b3e2d0279 -R 0f52e38972daef31ec132c6a8f286547 -U stephan -Z 58d6b35becabf99bb64f154abaacc201 +P 9d389b998317c5006876f2f40d56cd763d1555bbeaf48b2bca9bd46dcd02b80e +R 8bdca5a71a238d4249a2b123157a4e29 +U drh +Z 1e9ca84e1d99022a8171dd65daab42e8 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index b0f59a8497..a58ebcec98 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9d389b998317c5006876f2f40d56cd763d1555bbeaf48b2bca9bd46dcd02b80e +bfaa3ee7588b6f6be9799882c6ed6472357d988fac31512d5e92fe28f57029c6 From 032bcf72fb8768a4bd995c4bb874e5c2e25165bb Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 20 Nov 2024 20:39:18 +0000 Subject: [PATCH 21/89] Fix compiler warnings caused by variable shadowing. FossilOrigin-Name: 211b305791980b24c4192ffc57a0471473de3fca32bfc146c0eeacedef7a88aa --- ext/fts5/fts5_index.c | 5 ++--- main.mk | 1 - manifest | 14 +++++++------- manifest.uuid | 2 +- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/ext/fts5/fts5_index.c b/ext/fts5/fts5_index.c index e7028e411c..8730b69509 100644 --- a/ext/fts5/fts5_index.c +++ b/ext/fts5/fts5_index.c @@ -6389,10 +6389,10 @@ static void fts5TokendataIterAppendMap( if( p->rc==SQLITE_OK ){ if( pT->nMap==pT->nMapAlloc ){ int nNew = pT->nMapAlloc ? pT->nMapAlloc*2 : 64; - int nByte = nNew * sizeof(Fts5TokenDataMap); + int nAlloc = nNew * sizeof(Fts5TokenDataMap); Fts5TokenDataMap *aNew; - aNew = (Fts5TokenDataMap*)sqlite3_realloc(pT->aMap, nByte); + aNew = (Fts5TokenDataMap*)sqlite3_realloc(pT->aMap, nAlloc); if( aNew==0 ){ p->rc = SQLITE_NOMEM; return; @@ -7580,7 +7580,6 @@ int sqlite3Fts5IndexIterWriteTokendata( assert( pIter->pTokenDataIter || pIter->nSeg>0 ); if( pIter->nSeg>0 ){ /* This is a prefix term iterator. */ - Fts5TokenDataIter *pT = pIter->pTokenDataIter; if( pT==0 ){ pT = (Fts5TokenDataIter*)sqlite3Fts5MallocZero(&p->rc, sizeof(*pT)); pIter->pTokenDataIter = pT; diff --git a/main.mk b/main.mk index d4cfb3b5e7..71b730c0bf 100644 --- a/main.mk +++ b/main.mk @@ -778,7 +778,6 @@ TESTSRC2 = \ $(TOP)/ext/fts3/fts3.c \ $(TOP)/ext/fts3/fts3_aux.c \ $(TOP)/ext/fts3/fts3_expr.c \ - $(TOP)/ext/fts3/fts3_term.c \ $(TOP)/ext/fts3/fts3_tokenizer.c \ $(TOP)/ext/fts3/fts3_write.c \ $(TOP)/ext/session/sqlite3session.c \ diff --git a/manifest b/manifest index 69261eb226..75828653be 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\slatest\strunk\schanges\sinto\sthis\sbranch. -D 2024-11-06T17:31:48.766 +C Fix\scompiler\swarnings\scaused\sby\svariable\sshadowing. +D 2024-11-20T20:39:18.431 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -113,7 +113,7 @@ F ext/fts5/fts5_buffer.c 0eec58bff585f1a44ea9147eae5da2447292080ea435957f7488c70 F ext/fts5/fts5_config.c e7d8dd062b44a66cd77e5a0f74f23a2354cd1f3f8575afb967b2773c3384f7f8 F ext/fts5/fts5_expr.c 69b8d976058512c07dfe86e229521b7a871768157bd1607cedf1a5038dfd72c9 F ext/fts5/fts5_hash.c adda4272be401566a6e0ba1acbe70ee5cb97fce944bc2e04dc707152a0ec91b1 -F ext/fts5/fts5_index.c 2cef40d6fdd761229dd4127e0b1ddcb61dfd6a4ac7e73653b7fddbe0075e50be +F ext/fts5/fts5_index.c cef6791bd9f9db4305494292d6dd5d24a7379aabf370a4d6b559e16b740fa88e F ext/fts5/fts5_main.c b2ec6bf97fc378906c0e78c61f10ca8e64f15e03237f2521f7d81736983be378 F ext/fts5/fts5_storage.c 337b05e4c66fc822d031e264d65bde807ec2fab08665ca2cc8aaf9c5fa06792c F ext/fts5/fts5_tcl.c aee6ae6d0c6968564c392bf0d09aaabb4d8bea9ca69fd224dc9b44243324acbf @@ -701,7 +701,7 @@ F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65a F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b503bef35 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 -F main.mk c1a91dc50ffc1cb828b85d767d02d80d9eabeb0ef47e77e57bd72617749c5dbf +F main.mk 3dbee6d7e7678b79531b78048fea187146cb7e0352047ed774003ba4df1fb93a F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 9cc04331a01760189d88697233009dbe8a60eda589792ad01b56300499e9f54d 5495b12569c318d5020b4b5a625a392ef8e777b81c0200624fbbc2a6b5eddef9 -R 43b03038eb634e877d13ab18dcd80180 +P edb842349320eda9550bdfcd5a327949c5512e02f4b993782587b2131a425746 +R 87e3d58f4f7440e00e0a55bcb770c2ab U dan -Z 70a74ef30cc348badfc60dd108f53b23 +Z e1bc2b76da9d8c387af12aec8bd8d459 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index b5f3f21ebe..259f7f2dfa 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -edb842349320eda9550bdfcd5a327949c5512e02f4b993782587b2131a425746 +211b305791980b24c4192ffc57a0471473de3fca32bfc146c0eeacedef7a88aa From 9bf5bea60709d4afa37a085b86de3651b0ddd5c9 Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 21 Nov 2024 01:50:01 +0000 Subject: [PATCH 22/89] Document that -nofollow does not work on Windows. Fix Windows symlink test cases for when the test suite is run as administrator. FossilOrigin-Name: 4de8a75ec5a2e3655a2d0c5a9333b58f8b48b681255f0a01866b610ae6249bc2 --- manifest | 15 +++++++-------- manifest.uuid | 2 +- src/os_win.c | 2 +- test/symlink2.test | 4 +++- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index fc192ad2f9..2e1cc07290 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C New\sconfiguration\soption\s--dynlink-tools\scauses\ssome\scommand-line\stools\slike\nsqldiff\sand\ssqlite3_analyzer\sto\slink\sagainst\sthe\slibsqlite3.so\ssystem\slibrary\nrather\sthan\sbeing\sbuilt-in.\s\sCaution:\s\ssqlite3_analyzer\srequires\sthe\nSQLITE_ENABLE_DBSTAT_VTAB\scompile-time\soption\son\sits\sSQLite\slibrary\sin\sorder\nto\swork,\sso\sdo\snot\suse\s--dynlink-tools\sto\sbuild\ssqlite3_analyzer\swithout\sit. -D 2024-11-20T16:21:34.531 +C Document\sthat\s-nofollow\sdoes\snot\swork\son\sWindows.\s\sFix\sWindows\ssymlink\ntest\scases\sfor\swhen\sthe\stest\ssuite\sis\srun\sas\sadministrator. +D 2024-11-21T01:50:01.790 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -759,7 +759,7 @@ F src/os_common.h 6c0eb8dd40ef3e12fe585a13e709710267a258e2c8dd1c40b1948a1d14582e F src/os_kv.c 4d39e1f1c180b11162c6dc4aa8ad34053873a639bac6baae23272fc03349986a F src/os_setup.h 6011ad7af5db4e05155f385eb3a9b4470688de6f65d6166b8956e58a3d872107 F src/os_unix.c d2edbd92b07a3f778c2defa8a2e9d75acceb6267bda56948c41e8cdda65224d6 -F src/os_win.c db4baa8f62bbfe3967c71b008cea31a8f2ff337c1667ff4d8a677e697315ff0d +F src/os_win.c 49c7725b500f5867e8360e75eeb30f9d70b62fa1f05c8a101da627210578df32 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a F src/pager.c 9656ad4e8331efb8a4f94f7a0c6440b98caea073950a367ea0c728a53b8e62c9 F src/pager.h 4b1140d691860de0be1347474c51fee07d5420bd7f802d38cbab8ea4ab9f538a @@ -1702,7 +1702,7 @@ F test/swarmvtab2.test c948cb2fdfc5b01d85e8f6d6504854202dc1a0782ab2a0ed61538f27c F test/swarmvtab3.test 41a3ab47cb7a834d4e5336425103b617410a67bb95d335ef536f887587ece073 F test/swarmvtabfault.test 8a67a9f27c61073a47990829e92bc0c64420a807cb642b15a25f6c788210ed95 F test/symlink.test 4368af0e213dd6e726a6240a16f2bb96a5a58f83f2d5d60652f27547b28cbf06 -F test/symlink2.test 9531f475a53d8781c4f81373f87faf2e2aff4f5fb2102ec6386e0c827916a670 +F test/symlink2.test bf932ff7fe95c9dbb39d2a990df9098b0ea943233c97e40098e0a8d6b559a96f F test/sync.test 89539f4973c010eda5638407e71ca7fddbcd8e0594f4c9980229f804d4333092 F test/sync2.test 8f9f7d4f6d5be8ca8941a8dadcc4299e558cb6a1ff653a9469146c7a76ef2039 F test/syscall.test a067468b43b8cb2305e9f9fe414e5f40c875bb5d2cba5f00b8154396e95fcf37 @@ -2199,9 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 19d1bede5654bcfa9f7a151b9b2616a3d10873b8e3f8cf54a3a7e810da08f844 bfaa3ee7588b6f6be9799882c6ed6472357d988fac31512d5e92fe28f57029c6 -R 4149ca832938d8cc469625636a536cf9 -T +closed bfaa3ee7588b6f6be9799882c6ed6472357d988fac31512d5e92fe28f57029c6 +P 314c606dd36e03d2ded899c536585ea21250af56b553fa4c96dc714cb5099522 +R a9c1137cb0a1880ef7ace69df297b1fe U drh -Z 353d2b1e26c72a6c71622b8679ecfa79 +Z f9b2b2148aa55df305d649103f2dcab2 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 8022a04f68..fa803e8c76 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -314c606dd36e03d2ded899c536585ea21250af56b553fa4c96dc714cb5099522 +4de8a75ec5a2e3655a2d0c5a9333b58f8b48b681255f0a01866b610ae6249bc2 diff --git a/src/os_win.c b/src/os_win.c index 4d245263fe..8ce1647f60 100644 --- a/src/os_win.c +++ b/src/os_win.c @@ -5053,7 +5053,7 @@ static int winOpen( int rc = SQLITE_OK; /* Function Return Code */ #if !defined(NDEBUG) || SQLITE_OS_WINCE - int eType = flags&0xFFFFFF00; /* Type of file to open */ + int eType = flags&0x0FFF00; /* Type of file to open */ #endif int isExclusive = (flags & SQLITE_OPEN_EXCLUSIVE); diff --git a/test/symlink2.test b/test/symlink2.test index 4123092deb..9a2237e4c0 100644 --- a/test/symlink2.test +++ b/test/symlink2.test @@ -57,6 +57,7 @@ do_execsql_test 1.0 { INSERT INTO t1 VALUES(1,9999); } +forcedelete link.db do_test 2.0 { createWin32Symlink link.db test.db } {} @@ -87,12 +88,13 @@ do_test 3.4 { db3 close } {} +# The -nofollow option does not work on Windows do_test 3.5 { list [catch { sqlite3 db4 link.db -nofollow true execsql { SELECT x, y FROM t1; } db4 } res] $res -} {1 {unable to open database file}} +} {0 {1 9999}} catch {db4 close} From 2f70d5838ac764f2ece98d0231f46459cf533ce6 Mon Sep 17 00:00:00 2001 From: stephan Date: Thu, 21 Nov 2024 15:53:31 +0000 Subject: [PATCH 23/89] Fix a JS test which was broken when OMIT_PROGRESS_CALLBACK was _not_ used. FossilOrigin-Name: fba23150b5b57980f8ed2656a2325f95215ca1e13fc3449b5eec804831dd65c8 --- ext/wasm/tester1.c-pp.js | 7 +++++-- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/ext/wasm/tester1.c-pp.js b/ext/wasm/tester1.c-pp.js index 4347c8fd79..7ed2780201 100644 --- a/ext/wasm/tester1.c-pp.js +++ b/ext/wasm/tester1.c-pp.js @@ -1248,8 +1248,11 @@ globalThis.sqlite3InitModule = sqlite3InitModule; let st = this.db.prepare( new TextEncoder('utf-8').encode("select 3 as a") ); - //debug("statement =",st); - T.assert( !this.progressHandlerCount ); + if( wasm.compileOptionUsed('OMIT_PROGRESS_CALLBACK') ) { + T.assert( !this.progressHandlerCount ); + }else{ + T.assert( 1===this.progressHandlerCount, "Checking this.progressHandlerCount" ); + } let rc; try { T.assert(wasm.isPtr(st.pointer)) diff --git a/manifest b/manifest index 2e1cc07290..6e481129f4 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Document\sthat\s-nofollow\sdoes\snot\swork\son\sWindows.\s\sFix\sWindows\ssymlink\ntest\scases\sfor\swhen\sthe\stest\ssuite\sis\srun\sas\sadministrator. -D 2024-11-21T01:50:01.790 +C Fix\sa\sJS\stest\swhich\swas\sbroken\swhen\sOMIT_PROGRESS_CALLBACK\swas\s_not_\sused. +D 2024-11-21T15:53:31.229 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -690,7 +690,7 @@ F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555 F ext/wasm/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c F ext/wasm/tester1-worker.html ebc4b820a128963afce328ecf63ab200bd923309eb939f4110510ab449e9814c F ext/wasm/tester1.c-pp.html 1c1bc78b858af2019e663b1a31e76657b73dc24bede28ca92fbe917c3a972af2 -F ext/wasm/tester1.c-pp.js b683e64f776e03dc7cb81cf4737b991c644b0a59e3ca52dcdc606d851a95475e +F ext/wasm/tester1.c-pp.js f255a7c6730b341e2633d54b7edb27b91cd35744c011ddd321418a0735b0e44b F ext/wasm/tests/opfs/concurrency/index.html 657578a6e9ce1e9b8be951549ed93a6a471f4520a99e5b545928668f4285fb5e F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65ad09f510589c779b7cc6a803a88 F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 314c606dd36e03d2ded899c536585ea21250af56b553fa4c96dc714cb5099522 -R a9c1137cb0a1880ef7ace69df297b1fe -U drh -Z f9b2b2148aa55df305d649103f2dcab2 +P 4de8a75ec5a2e3655a2d0c5a9333b58f8b48b681255f0a01866b610ae6249bc2 +R 203ec458b356478f1ca21979ec7c6063 +U stephan +Z 17a966985bd13abb0d145bb10bf4f3d0 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index fa803e8c76..06b7f898c1 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4de8a75ec5a2e3655a2d0c5a9333b58f8b48b681255f0a01866b610ae6249bc2 +fba23150b5b57980f8ed2656a2325f95215ca1e13fc3449b5eec804831dd65c8 From d204a83c9b5d3db971263a2922e80daf1d1539fa Mon Sep 17 00:00:00 2001 From: stephan Date: Thu, 21 Nov 2024 20:07:01 +0000 Subject: [PATCH 24/89] Add the --scanstatus configure flag to set -DSQLITE_ENABLE_STMT_SCANSTATUS. FossilOrigin-Name: b6bd25bd769e4286ad0b8ca5059bc9da52188cefe92525d8994aa921768aa750 --- auto.def | 2 ++ manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/auto.def b/auto.def index e6c6dfc00a..33c7a99c24 100644 --- a/auto.def +++ b/auto.def @@ -197,6 +197,7 @@ set flags { performance by as much as 4x, as it includes large numbers of assert()s in performance-critical loops. Never use --with-debug for production builds.} + scanstatus => {Enable the SQLITE_ENABLE_STMT_SCANSTATUS feature flag} dev => {Enable dev-mode build: automatically enables certain other flags} test-status => {Enable status of tests} gcov=0 => {Enable coverage testing using gcov} @@ -1290,6 +1291,7 @@ foreach {boolFlag featureFlag ifSetEvalThis} { sqlite-add-feature-flag -DSQLITE_ENABLE_MEMSYS3 } } + scanstatus -DSQLITE_ENABLE_STMT_SCANSTATUS } { proj-if-opt-truthy $boolFlag { sqlite-add-feature-flag $featureFlag diff --git a/manifest b/manifest index 6e481129f4..a4a2d9b680 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sJS\stest\swhich\swas\sbroken\swhen\sOMIT_PROGRESS_CALLBACK\swas\s_not_\sused. -D 2024-11-21T15:53:31.229 +C Add\sthe\s--scanstatus\sconfigure\sflag\sto\sset\s-DSQLITE_ENABLE_STMT_SCANSTATUS. +D 2024-11-21T20:07:01.993 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F auto.def b81388775c7596c22d19ce7c5e0692d8cb6beb89ae591e2684a238084acabf61 +F auto.def 56e4bfbbcfabb3517cb451585f7532c7f680bed2a73e1b44731ac467e24d479f F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 4de8a75ec5a2e3655a2d0c5a9333b58f8b48b681255f0a01866b610ae6249bc2 -R 203ec458b356478f1ca21979ec7c6063 +P fba23150b5b57980f8ed2656a2325f95215ca1e13fc3449b5eec804831dd65c8 +R 192be6085076aabb2381038d83a37d79 U stephan -Z 17a966985bd13abb0d145bb10bf4f3d0 +Z 4588e899db9b63f72b64cfa46e88a4c7 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 06b7f898c1..425a609497 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -fba23150b5b57980f8ed2656a2325f95215ca1e13fc3449b5eec804831dd65c8 +b6bd25bd769e4286ad0b8ca5059bc9da52188cefe92525d8994aa921768aa750 From a8c68e551d4b93b8ff52b6fb907405b0ea95eed2 Mon Sep 17 00:00:00 2001 From: stephan Date: Thu, 21 Nov 2024 20:10:38 +0000 Subject: [PATCH 25/89] Fix a bug-in-waiting (one too few list elements) in [b6bd25bd769e]. FossilOrigin-Name: e527dcd016fbeb55b0e613a0b3b95350bbc8b3ee601bbadfedaf6bd5458b3570 --- auto.def | 2 +- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/auto.def b/auto.def index 33c7a99c24..9c214ec39c 100644 --- a/auto.def +++ b/auto.def @@ -1291,7 +1291,7 @@ foreach {boolFlag featureFlag ifSetEvalThis} { sqlite-add-feature-flag -DSQLITE_ENABLE_MEMSYS3 } } - scanstatus -DSQLITE_ENABLE_STMT_SCANSTATUS + scanstatus -DSQLITE_ENABLE_STMT_SCANSTATUS {} } { proj-if-opt-truthy $boolFlag { sqlite-add-feature-flag $featureFlag diff --git a/manifest b/manifest index a4a2d9b680..59cebdd625 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\s--scanstatus\sconfigure\sflag\sto\sset\s-DSQLITE_ENABLE_STMT_SCANSTATUS. -D 2024-11-21T20:07:01.993 +C Fix\sa\sbug-in-waiting\s(one\stoo\sfew\slist\selements)\sin\s[b6bd25bd769e]. +D 2024-11-21T20:10:38.627 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F auto.def 56e4bfbbcfabb3517cb451585f7532c7f680bed2a73e1b44731ac467e24d479f +F auto.def c71f141cbeca906b157827959ca556eb19f762428fa7f5001161e5d21093178f F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P fba23150b5b57980f8ed2656a2325f95215ca1e13fc3449b5eec804831dd65c8 -R 192be6085076aabb2381038d83a37d79 +P b6bd25bd769e4286ad0b8ca5059bc9da52188cefe92525d8994aa921768aa750 +R c656a51c47db56b0a493f0f6df484148 U stephan -Z 4588e899db9b63f72b64cfa46e88a4c7 +Z 67a0f0d45e736ce179484669cd424a17 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 425a609497..b5bdb2b91a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b6bd25bd769e4286ad0b8ca5059bc9da52188cefe92525d8994aa921768aa750 +e527dcd016fbeb55b0e613a0b3b95350bbc8b3ee601bbadfedaf6bd5458b3570 From 9edb535bddec61d9cdf7cf72457e57a991b18fca Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 21 Nov 2024 20:57:11 +0000 Subject: [PATCH 26/89] Make ".scanstatus" an undocumented alternative name for ".scanstats" in the CLI. FossilOrigin-Name: f20688efc2bc54648618b0aa2593a771f455ee8cc703b52273452d15e680b67c --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/shell.c.in | 5 ++++- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 59cebdd625..2a42e16fea 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sbug-in-waiting\s(one\stoo\sfew\slist\selements)\sin\s[b6bd25bd769e]. -D 2024-11-21T20:10:38.627 +C Make\s".scanstatus"\san\sundocumented\salternative\sname\sfor\s".scanstats"\sin\sthe\sCLI. +D 2024-11-21T20:57:11.560 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -775,7 +775,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c c8a5372b97b2a2e972a280676f06ddb5b74e885d3b1f5ce383f839907b57ef68 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 4b14337a2742f0c0beeba490e9a05507e9b4b12184b9cd12773501d08d48e3fe -F src/shell.c.in 9a0011ee9650818782ee746e0e8747568a6f02fb3ae323dc6e27fa1a61457523 +F src/shell.c.in d8719347d467bc026ac43efdf5213cd9bab56503450a4b970fd09e4d4dab5409 F src/sqlite.h.in 4d93768709c53b7c653a63817a82d5a8625264ca0d8cdf99967ba147bdcf2aa6 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54 @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P b6bd25bd769e4286ad0b8ca5059bc9da52188cefe92525d8994aa921768aa750 -R c656a51c47db56b0a493f0f6df484148 -U stephan -Z 67a0f0d45e736ce179484669cd424a17 +P e527dcd016fbeb55b0e613a0b3b95350bbc8b3ee601bbadfedaf6bd5458b3570 +R de7a1058dc7d9edb28df5fa9d0ef82bc +U drh +Z d8274e63f396ef1ba4c0c2282830a6d5 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index b5bdb2b91a..86d326f1e5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e527dcd016fbeb55b0e613a0b3b95350bbc8b3ee601bbadfedaf6bd5458b3570 +f20688efc2bc54648618b0aa2593a771f455ee8cc703b52273452d15e680b67c diff --git a/src/shell.c.in b/src/shell.c.in index a6700eb83a..22a5976d3f 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -10411,7 +10411,10 @@ static int do_meta_command(char *zLine, ShellState *p){ }else #endif /* !defined(SQLITE_SHELL_FIDDLE) */ - if( c=='s' && cli_strncmp(azArg[0], "scanstats", n)==0 ){ + if( c=='s' && + (cli_strncmp(azArg[0], "scanstats", n)==0 || + cli_strncmp(azArg[0], "scanstatus", n)==0) + ){ if( nArg==2 ){ if( cli_strcmp(azArg[1], "vm")==0 ){ p->scanstatsOn = 3; From f0a9af433a0a6dcae7e7a0159c92e8c9b85b2462 Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 22 Nov 2024 12:00:31 +0000 Subject: [PATCH 27/89] Fix harmless compiler warning caused by [c77a4a42f2e3d164]. FossilOrigin-Name: 063690d2c5cc2a887055b9141d3fcdb4fd2fa35d069c9a39b81903c531c73fcf --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/main.c | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 2a42e16fea..46a6cbe7da 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Make\s".scanstatus"\san\sundocumented\salternative\sname\sfor\s".scanstats"\sin\sthe\sCLI. -D 2024-11-21T20:57:11.560 +C Fix\sharmless\scompiler\swarning\scaused\sby\s[c77a4a42f2e3d164]. +D 2024-11-22T12:00:31.024 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -737,7 +737,7 @@ F src/insert.c f8d1a0f8ee258411009c6b7f2d93170e351bd19f5ad89d57e1180644297cbe70 F src/json.c 68a98c020c22127f2d65f08855f7fc7460ff352a6ce0b543d8931dde83319c22 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c 7432c944ff197046d67a1207790a1b13eec4548c85a9457eb0896bb3641dfb36 -F src/main.c 9f4286302727f58fddc03a820d24cb7618a1e27473501792fbe979726f846d1f +F src/main.c efacea3a809ba236233c4bc7648e623c28cb5fd1e1a343e74fe772005f142d8c F src/malloc.c 410e570b30c26cc36e3372577df50f7a96ee3eed5b2b161c6b6b48773c650c5e F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c 3bb59158c38e05f6270e761a9f435bf19827a264c13d1631c58b84bdc96d73b2 @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P e527dcd016fbeb55b0e613a0b3b95350bbc8b3ee601bbadfedaf6bd5458b3570 -R de7a1058dc7d9edb28df5fa9d0ef82bc +P f20688efc2bc54648618b0aa2593a771f455ee8cc703b52273452d15e680b67c +R 2bcc1bc731850fcd4834b7042e1e5235 U drh -Z d8274e63f396ef1ba4c0c2282830a6d5 +Z 694866e50c564ff1bf4fd8cdd52185ff # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 86d326f1e5..f2455a0a70 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f20688efc2bc54648618b0aa2593a771f455ee8cc703b52273452d15e680b67c +063690d2c5cc2a887055b9141d3fcdb4fd2fa35d069c9a39b81903c531c73fcf diff --git a/src/main.c b/src/main.c index ff2a408d77..3a535e3cde 100644 --- a/src/main.c +++ b/src/main.c @@ -4288,6 +4288,7 @@ int sqlite3_test_control(int op, ...){ sqlite3ShowWinFunc(0); #endif sqlite3ShowSelect(0); + sqlite3ShowWhereTerm(0); } #endif break; From 38fdb2a857a476a862811d5e40952cab5d25f96f Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 22 Nov 2024 12:07:21 +0000 Subject: [PATCH 28/89] Fix some harmless scanbuild warnings in the shell. FossilOrigin-Name: 9ba1c9b505d459366274043c1c5327f1a9d4e15d3564d99f8a15926af1d6d247 --- ext/expert/sqlite3expert.c | 2 +- manifest | 14 +++++++------- manifest.uuid | 2 +- src/shell.c.in | 3 --- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/ext/expert/sqlite3expert.c b/ext/expert/sqlite3expert.c index 84b4793ddd..93693cfae9 100644 --- a/ext/expert/sqlite3expert.c +++ b/ext/expert/sqlite3expert.c @@ -1491,7 +1491,7 @@ static int idxCreateVtabSchema(sqlite3expert *p, char **pzErrmsg){ }else{ IdxTable *pTab; rc = idxGetTableInfo(p->db, zName, &pTab, pzErrmsg); - if( rc==SQLITE_OK ){ + if( rc==SQLITE_OK && ALWAYS(pTab!=0) ){ int i; char *zInner = 0; char *zOuter = 0; diff --git a/manifest b/manifest index 46a6cbe7da..fceac6cb5c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sharmless\scompiler\swarning\scaused\sby\s[c77a4a42f2e3d164]. -D 2024-11-22T12:00:31.024 +C Fix\ssome\sharmless\sscanbuild\swarnings\sin\sthe\sshell. +D 2024-11-22T12:07:21.302 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -69,7 +69,7 @@ F ext/README.md fd5f78013b0a2bc6f0067afb19e6ad040e89a10179b4f6f03eee58fac5f169bd F ext/expert/README.md b321c2762bb93c18ea102d5a5f7753a4b8bac646cb392b3b437f633caf2020c3 F ext/expert/expert.c d548d603a4cc9e61f446cc179c120c6713511c413f82a4a32b1e1e69d3f086a4 F ext/expert/expert1.test 1d2da6606623b57bb47064e02140823ce1daecd4cacbf402c73ad3473d7f000c -F ext/expert/sqlite3expert.c 9d87c5eeb86707e4dbf140ca20a32935f88cfb5d8da94a406b7e0f0cdb815af6 +F ext/expert/sqlite3expert.c 494a6b7d4e0ead6dec6a50109dd78fcc054bb1a3fcc29c6f25e06a3685ed557e F ext/expert/sqlite3expert.h ca81efc2679a92373a13a3e76a6138d0310e32be53d6c3bfaedabd158ea8969b F ext/expert/test_expert.c b767b2039a0df707eb3147e86bcf68b252d8455d9a41774b1a836cd052ceca70 F ext/fts3/README.content b9078d0843a094d86af0d48dffbff13c906702b4c3558012e67b9c7cc3bf59ee @@ -775,7 +775,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c c8a5372b97b2a2e972a280676f06ddb5b74e885d3b1f5ce383f839907b57ef68 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 4b14337a2742f0c0beeba490e9a05507e9b4b12184b9cd12773501d08d48e3fe -F src/shell.c.in d8719347d467bc026ac43efdf5213cd9bab56503450a4b970fd09e4d4dab5409 +F src/shell.c.in f75bc23ace1ab3ee7ab05a1c09f8733deb6b3885f6c0c83b506e021c03be95ce F src/sqlite.h.in 4d93768709c53b7c653a63817a82d5a8625264ca0d8cdf99967ba147bdcf2aa6 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54 @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P f20688efc2bc54648618b0aa2593a771f455ee8cc703b52273452d15e680b67c -R 2bcc1bc731850fcd4834b7042e1e5235 +P 063690d2c5cc2a887055b9141d3fcdb4fd2fa35d069c9a39b81903c531c73fcf +R 13b3d4e078b262611ab19f5afe7794a7 U drh -Z 694866e50c564ff1bf4fd8cdd52185ff +Z dd389eddd9f1b1e329be94b3f99fecab # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index f2455a0a70..5209cb273a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -063690d2c5cc2a887055b9141d3fcdb4fd2fa35d069c9a39b81903c531c73fcf +9ba1c9b505d459366274043c1c5327f1a9d4e15d3564d99f8a15926af1d6d247 diff --git a/src/shell.c.in b/src/shell.c.in index 22a5976d3f..730957bc25 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -11988,7 +11988,6 @@ static QuickScanState quickscan(char *zLine, QuickScanState qss, char cWait = (char)qss; /* intentional narrowing loss */ if( cWait==0 ){ PlainScan: - assert( cWait==0 ); while( (cin = *zLine++)!=0 ){ if( IsSpace(cin) ) continue; @@ -12040,7 +12039,6 @@ static QuickScanState quickscan(char *zLine, QuickScanState qss, if( *zLine != '/' ) continue; ++zLine; - cWait = 0; CONTINUE_PROMPT_AWAITC(pst, 0); qss = QSS_SETV(qss, 0); goto PlainScan; @@ -12052,7 +12050,6 @@ static QuickScanState quickscan(char *zLine, QuickScanState qss, } deliberate_fall_through; case ']': - cWait = 0; CONTINUE_PROMPT_AWAITC(pst, 0); qss = QSS_SETV(qss, 0); goto PlainScan; From ed271dc7ea87ae7e7950b917c00fb02f1afaf141 Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 22 Nov 2024 12:29:35 +0000 Subject: [PATCH 29/89] Fix harmless scanbuild warnings caused by the introduction of the ".dbtotxt" command into the CLI by check-in [b43acf5a8cd4a5ef]. FossilOrigin-Name: 554d8fbd865436ace900859874b6c8c7e1b782184158a86b7788644e27bd1997 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/shell.c.in | 8 ++------ 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index fceac6cb5c..0120709f77 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\ssome\sharmless\sscanbuild\swarnings\sin\sthe\sshell. -D 2024-11-22T12:07:21.302 +C Fix\sharmless\sscanbuild\swarnings\scaused\sby\sthe\sintroduction\sof\sthe\n".dbtotxt"\scommand\sinto\sthe\sCLI\sby\scheck-in\s[b43acf5a8cd4a5ef]. +D 2024-11-22T12:29:35.356 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -775,7 +775,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c c8a5372b97b2a2e972a280676f06ddb5b74e885d3b1f5ce383f839907b57ef68 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 4b14337a2742f0c0beeba490e9a05507e9b4b12184b9cd12773501d08d48e3fe -F src/shell.c.in f75bc23ace1ab3ee7ab05a1c09f8733deb6b3885f6c0c83b506e021c03be95ce +F src/shell.c.in 7aa68b305246391984c48f10725416079394a64bf0349fa4087d835c41ef733d F src/sqlite.h.in 4d93768709c53b7c653a63817a82d5a8625264ca0d8cdf99967ba147bdcf2aa6 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54 @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 063690d2c5cc2a887055b9141d3fcdb4fd2fa35d069c9a39b81903c531c73fcf -R 13b3d4e078b262611ab19f5afe7794a7 +P 9ba1c9b505d459366274043c1c5327f1a9d4e15d3564d99f8a15926af1d6d247 +R 0f0539622ac4b0da7137e3fd709352f4 U drh -Z dd389eddd9f1b1e329be94b3f99fecab +Z 816c51d5e78086444b5f5aa51a7c35b5 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 5209cb273a..53dbfc820e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9ba1c9b505d459366274043c1c5327f1a9d4e15d3564d99f8a15926af1d6d247 +554d8fbd865436ace900859874b6c8c7e1b782184158a86b7788644e27bd1997 diff --git a/src/shell.c.in b/src/shell.c.in index 730957bc25..b4d7fc287f 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -6632,7 +6632,6 @@ static int shell_dbtotxt_command(ShellState *p, int nArg, char **azArg){ sqlite3_stmt *pStmt = 0; sqlite3_int64 nPage = 0; int pgSz = 0; - const char *zFilename; const char *zTail; char *zName = 0; int rc, i, j; @@ -6660,17 +6659,15 @@ static int shell_dbtotxt_command(ShellState *p, int nArg, char **azArg){ if( nPage<1 ) goto dbtotxt_error; rc = sqlite3_prepare_v2(p->db, "PRAGMA databases", -1, &pStmt, 0); if( rc ) goto dbtotxt_error; - rc = 0; if( sqlite3_step(pStmt)!=SQLITE_ROW ){ - zTail = zFilename = "unk.db"; + zTail = "unk.db"; }else{ - zFilename = (const char*)sqlite3_column_text(pStmt, 2); + const char *zFilename = (const char*)sqlite3_column_text(pStmt, 2); if( zFilename==0 || zFilename[0]==0 ) zFilename = "unk.db"; zTail = strrchr(zFilename, '/'); #if defined(_WIN32) if( zTail==0 ) zTail = strrchr(zFilename, '\\'); #endif - if( zTail ) zFilename = zTail; } zName = strdup(zTail); shell_check_oom(zName); @@ -6681,7 +6678,6 @@ static int shell_dbtotxt_command(ShellState *p, int nArg, char **azArg){ rc = sqlite3_prepare_v2(p->db, "SELECT pgno, data FROM sqlite_dbpage ORDER BY pgno", -1, &pStmt, 0); if( rc ) goto dbtotxt_error; - rc = 0; while( sqlite3_step(pStmt)==SQLITE_ROW ){ sqlite3_int64 pgno = sqlite3_column_int64(pStmt, 0); const u8 *aData = sqlite3_column_blob(pStmt, 1); From 0cf7131555377eb53087484bf12cb4cb44cfce0f Mon Sep 17 00:00:00 2001 From: stephan Date: Fri, 22 Nov 2024 13:22:25 +0000 Subject: [PATCH 30/89] Add links to [/forumpost/5a3b44f510df8ded|the SONAME discussion] at relevant places in auto.def and the makefiles. No functional changes. FossilOrigin-Name: c78dcc318a36af123676e54d85fc7f980c21b0ea366d164a96e2d998286d3813 --- Makefile.in | 1 + auto.def | 2 +- main.mk | 2 +- manifest | 18 +++++++++--------- manifest.uuid | 2 +- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/Makefile.in b/Makefile.in index 3d2e736fd1..483ca35d94 100644 --- a/Makefile.in +++ b/Makefile.in @@ -154,6 +154,7 @@ CFLAGS.readline = @CFLAGS_READLINE@ LDFLAGS.icu = @LDFLAGS_ICU@ CFLAGS.icu = @CFLAGS_ICU@ LDFLAGS.libsqlite3.soname = @LDFLAGS_LIBSQLITE3_SONAME@ +# soname: see https://sqlite.org/src/forumpost/5a3b44f510df8ded ENABLE_SHARED = @ENABLE_SHARED@ ENABLE_STATIC = @ENABLE_STATIC@ HAVE_WASI_SDK = @HAVE_WASI_SDK@ diff --git a/auto.def b/auto.def index 9c214ec39c..086d8e1e3c 100644 --- a/auto.def +++ b/auto.def @@ -205,7 +205,7 @@ set flags { dump-defines=0 => {Dump autosetup defines to $DUMP_DEFINES_TXT (for build debugging)} dynlink-tools => {Dynamically link libsqlite3 to certain tools which normally statically embed it.} soname:=legacy => {SONAME for libsqlite3.so. Must be one of: none, auto, legacy} - # --soname has a long story behind it, as well as no small amount of uncertainty. + # --soname has a long story behind it: https://sqlite.org/src/forumpost/5a3b44f510df8ded # } if {"" ne $DUMP_DEFINES_JSON} { diff --git a/main.mk b/main.mk index b1f1635980..9c1ecd2800 100644 --- a/main.mk +++ b/main.mk @@ -162,7 +162,7 @@ LDFLAGS.dlopen ?= -ldl LDFLAGS.shlib ?= -shared LDFLAGS.icu ?= # -licui18n -licuuc -licudata CFLAGS.icu ?= -LDFLAGS.soname.libsqlite3 ?= +LDFLAGS.soname.libsqlite3 ?= # see https://sqlite.org/src/forumpost/5a3b44f510df8ded # libreadline (or a workalike): # To activate readline in the shell: SHELL_OPT = -DHAVE_READLINE=1 LDFLAGS.readline ?= -lreadline # these vary across platforms diff --git a/manifest b/manifest index 0120709f77..0aff53498b 100644 --- a/manifest +++ b/manifest @@ -1,9 +1,9 @@ -C Fix\sharmless\sscanbuild\swarnings\scaused\sby\sthe\sintroduction\sof\sthe\n".dbtotxt"\scommand\sinto\sthe\sCLI\sby\scheck-in\s[b43acf5a8cd4a5ef]. -D 2024-11-22T12:29:35.356 +C Add\slinks\sto\s[/forumpost/5a3b44f510df8ded|the\sSONAME\sdiscussion]\sat\srelevant\splaces\sin\sauto.def\sand\sthe\smakefiles.\sNo\sfunctional\schanges. +D 2024-11-22T13:22:25.012 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d -F Makefile.in b22a52dc08b8a727c298af4f93171b2862df1d6fce4c255b15f6ce1011a9ee7d +F Makefile.in d0ad8cdcb5a0492eee78b7ae74ace1213294649a547ba90d15e9c39cc08fdbb4 F Makefile.linux-generic bd3e3cacd369821a6241d4ea1967395c962dfe3057e38cb0a435cee0e8b789d0 F Makefile.msc a92237976eb92c5efaa0dd2524746aec12c196e12df8d4dbff9543a4648c3312 F README.md c3c0f19532ce28f6297a71870f3c7b424729f0e6d9ab889616d3587dd2332159 @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F auto.def c71f141cbeca906b157827959ca556eb19f762428fa7f5001161e5d21093178f +F auto.def 7cc8f9f228a234db7955ce9061bef85b74162cd890afaaf6338ebc49fa04b2de F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -696,7 +696,7 @@ F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65a F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b503bef35 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 -F main.mk e3873a2363bef0fb8e3a65a21e548ce1aa9aeeb3795362c3e78346e655d501a4 +F main.mk b917f0d5e6aecc035a91132dd476a7a377af493a8e57e44b852a8b9581566800 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421 @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 9ba1c9b505d459366274043c1c5327f1a9d4e15d3564d99f8a15926af1d6d247 -R 0f0539622ac4b0da7137e3fd709352f4 -U drh -Z 816c51d5e78086444b5f5aa51a7c35b5 +P 554d8fbd865436ace900859874b6c8c7e1b782184158a86b7788644e27bd1997 +R 98e9659ab220b4d9f62564eeb9669425 +U stephan +Z 498e6bdf598b32247f18c53c3d6f4d47 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 53dbfc820e..fa5a606748 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -554d8fbd865436ace900859874b6c8c7e1b782184158a86b7788644e27bd1997 +c78dcc318a36af123676e54d85fc7f980c21b0ea366d164a96e2d998286d3813 From 7a13effa20aff6864926c849669ff92e4a90383c Mon Sep 17 00:00:00 2001 From: stephan Date: Fri, 22 Nov 2024 13:47:12 +0000 Subject: [PATCH 31/89] Remove the libsqlite3.so.3 link from the installation process, as it now serves no functional purpose. We retain libsqlite3.so.0 (A) for compatibility with clients linked against legacy builds and (B) 0 is still valid as the library's ABI version. FossilOrigin-Name: 91bd9813e04e34e088d5e73bfe2a4f338513363d9a99095a232b811c6b616354 --- main.mk | 18 ++++++++++-------- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/main.mk b/main.mk index 9c1ecd2800..1f7c9bafd3 100644 --- a/main.mk +++ b/main.mk @@ -1414,9 +1414,12 @@ all: so # and create symlinks which point to it: # # - libsqlite3.so.$(PACKAGE_VERSION) -# - libsqlite3.so.3 =symlink-> libsqlite3.so.$(PACKAGE_VERSION) -# - libsqlite3.so.0 =symlink-> libsqlite3.so.$(PACKAGE_VERSION) (see below) -# - libsqlite3.so =symlink-> libsqlite3.so.3 +# - libsqlite3.so.0 =symlink-> libsqlite3.so.$(PACKAGE_VERSION) (see below) +# - libsqlite3.so =symlink-> libsqlite3.so.3 +# +# N.B. we initially had a link named libsqlite3.so.3 but it's +# unnecessary unless we want to set SONAME to libsqlite3.so.3, which +# is also unnecessary. # # The link named libsqlite3.so.0 is provided in an attempt to reduce # downstream disruption when performing upgrades from pre-3.48 to a @@ -1442,7 +1445,7 @@ all: so # down-side of this is that it may upset packaging tools when we # replace libsqlite3.so (from a legacy package) with a new symlink. # -# 2) If INSTALL_SO_086_LINKS=1 and point (1) does not apply then links +# 2) If INSTALL_SO_086_LINK=1 and point (1) does not apply then links # to the legacy-style names are created. The primary intent of this # is to enable chains of operations such as the hypothetical (apt # remove sqlite3-3.47.0 && apt install sqlite3-3.48.0). In such @@ -1456,10 +1459,9 @@ install-so-1: $(install-dir.lib) $(libsqlite3.SO) $(INSTALL) $(libsqlite3.SO) "$(install-dir.lib)" @echo "Setting up $(libsqlite3.SO) symlinks..."; \ cd "$(install-dir.lib)" || exit $$?; \ - rm -f $(libsqlite3.SO).3 $(libsqlite3.SO).0 $(libsqlite3.SO).$(PACKAGE_VERSION) || exit $$?; \ + rm -f $(libsqlite3.SO).0 $(libsqlite3.SO).$(PACKAGE_VERSION) || exit $$?; \ mv $(libsqlite3.SO) $(libsqlite3.SO).$(PACKAGE_VERSION) || exit $$?; \ ln -s $(libsqlite3.SO).$(PACKAGE_VERSION) $(libsqlite3.SO) || exit $$?; \ - ln -s $(libsqlite3.SO).$(PACKAGE_VERSION) $(libsqlite3.SO).3 || exit $$?; \ ln -s $(libsqlite3.SO).$(PACKAGE_VERSION) $(libsqlite3.SO).0 || exit $$?; \ ls -la $(libsqlite3.SO) $(libsqlite3.SO).[03]*; \ if [ -e $(libsqlite3.SO).0.8.6 ]; then \ @@ -1467,8 +1469,8 @@ install-so-1: $(install-dir.lib) $(libsqlite3.SO) rm -f libsqlite3.la $(libsqlite3.SO).0.8.6 || exit $$?; \ ln -s $(libsqlite3.SO).$(PACKAGE_VERSION) $(libsqlite3.SO).0.8.6 || exit $$?; \ ls -la $(libsqlite3.SO).0.8.6; \ - elif [ x1 = "x$(INSTALL_SO_086_LINKS)" ]; then \ - echo "ACHTUNG: installing legacy libtool-style links because INSTALL_SO_086_LINKS=1"; \ + elif [ x1 = "x$(INSTALL_SO_086_LINK)" ]; then \ + echo "ACHTUNG: installing legacy libtool-style links because INSTALL_SO_086_LINK=1"; \ rm -f libsqlite3.la $(libsqlite3.SO).0.8.6 || exit $$?; \ ln -s $(libsqlite3.SO).$(PACKAGE_VERSION) $(libsqlite3.SO).0.8.6 || exit $$?; \ ls -la $(libsqlite3.SO).0.8.6; \ diff --git a/manifest b/manifest index 0aff53498b..325c9fd9cc 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\slinks\sto\s[/forumpost/5a3b44f510df8ded|the\sSONAME\sdiscussion]\sat\srelevant\splaces\sin\sauto.def\sand\sthe\smakefiles.\sNo\sfunctional\schanges. -D 2024-11-22T13:22:25.012 +C Remove\sthe\slibsqlite3.so.3\slink\sfrom\sthe\sinstallation\sprocess,\sas\sit\snow\sserves\sno\sfunctional\spurpose.\sWe\sretain\slibsqlite3.so.0\s(A)\sfor\scompatibility\swith\sclients\slinked\sagainst\slegacy\sbuilds\sand\s(B)\s0\sis\sstill\svalid\sas\sthe\slibrary's\sABI\sversion. +D 2024-11-22T13:47:12.667 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -696,7 +696,7 @@ F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65a F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b503bef35 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 -F main.mk b917f0d5e6aecc035a91132dd476a7a377af493a8e57e44b852a8b9581566800 +F main.mk 9c6c9473eb83a72a4cd80aab95c7dd64bb59286c151d5745091a5a178d111c84 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421 @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 554d8fbd865436ace900859874b6c8c7e1b782184158a86b7788644e27bd1997 -R 98e9659ab220b4d9f62564eeb9669425 +P c78dcc318a36af123676e54d85fc7f980c21b0ea366d164a96e2d998286d3813 +R c696fe78d3d189a1b874e36c608737fb U stephan -Z 498e6bdf598b32247f18c53c3d6f4d47 +Z 044fe3be3927265c623f70a401222db0 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index fa5a606748..66959ba790 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c78dcc318a36af123676e54d85fc7f980c21b0ea366d164a96e2d998286d3813 +91bd9813e04e34e088d5e73bfe2a4f338513363d9a99095a232b811c6b616354 From dcaf03fccf9beecce47c405647cb3febc716d38d Mon Sep 17 00:00:00 2001 From: stephan Date: Fri, 22 Nov 2024 14:12:18 +0000 Subject: [PATCH 32/89] Makefile doc cleanups. No functional changes. FossilOrigin-Name: 64add0ac706101c53e2d2877fdc0d1ccd071814cae969768d2741cee05f23c01 --- main.mk | 58 ++++++++++++++++++++++++++++++++------------------- manifest | 12 +++++------ manifest.uuid | 2 +- 3 files changed, 43 insertions(+), 29 deletions(-) diff --git a/main.mk b/main.mk index 1f7c9bafd3..9a706d1078 100644 --- a/main.mk +++ b/main.mk @@ -105,6 +105,9 @@ TCLSH_CMD ?= tclsh # JIMSH requires a leading path component, even if it's ./, so that it # can be used as a shell command. # +# On Windows platforms, if -DHAVE_REALPATH does not work then try +# -DHAVE__FULLPATH (note the double-underscore). +# CFLAGS.jimsh ?= -DHAVE_REALPATH JIMSH ?= ./jimsh$(T.exe) # @@ -119,12 +122,12 @@ B.tclsh ?= $(JIMSH) # # Autotools-conventional vars which are (in this tree) used only by -# package installation rules. +# package installation rules and for generating sqlite3.pc (pkg-config +# data file). # # The following ${XYZdir} vars are provided for the sake of clients # who expect to be able to override these using autotools-conventional -# dir name vars. In this build they apply only to installation-related -# rules. +# dir name vars. # prefix ?= /usr/local datadir ?= $(prefix)/share @@ -202,17 +205,22 @@ ENABLE_STATIC ?= 1 # # 1 if the amalgamation (sqlite3.c/h) should be built/used, otherwise # the library is built from all of its original source files. +# Certaint tools, like sqlite3$(T.exe), require the amalgamation and +# will ignore this preference. # USE_AMALGAMATION ?= 1 # # $(LINK_TOOLS_DYNAMICALLY) # -# If true, certain binaries which typically statically link against +# If 1, certain binaries which typically statically link against # libsqlite3 or its component object files will instead link against # the DLL. The caveat is that running such builds from the source tree # may require that the user specifically prepend "." to their # $LD_LIBRARY_PATH so that the dynamic linker does not pick up a -# libsqlite3.so from outside the source tree. +# libsqlite3.so from outside the source tree. Alternately, symlinking +# the in-build-tree $(libsqlite3.SO) to some dir in the system's +# library path will work for giving the apps access to the in-tree +# DLL. # LINK_TOOLS_DYNAMICALLY ?= 0 # @@ -227,16 +235,21 @@ AMALGAMATION_GEN_FLAGS ?= --linemacros=0 # Preprocessor flags for enabling and disabling specific libsqlite3 # features (-DSQLITE_OMIT*, -DSQLITE_ENABLE*). The same set of OMIT # and ENABLE flags must be passed to the LEMON parser generator and -# the mkkeywordhash tool as well. +# the mkkeywordhash tool as well. This is normally set by the +# configure process, and passing a custom value to a +# coonfigure-filtered Makefile may not work. # -# Add OPTIONS=... on the make command line to append additional options -# to the OPT_FEATURE_FLAGS. Note that some flags only work if the -# build is specifically configured to account for them. Adding them -# later, when compiling the amalgamation, may or may not work. +# When using the canonical makefile, add $(OPTIONS)=... on the make +# command line to append additional options to the +# $(OPT_FEATURE_FLAGS). Note that some flags, because they influence +# generation of the SQL parser, only work if the build is specifically +# configured to account for them. Adding them later, when compiling +# the amalgamation separately, may or may not work. # -# TO CLARIFY: OPTS=... has historically been expected in some -# contexts, and is distinctly different from OPTIONS and -# OPT_FEATURE_FLAGS, but its name is confusingly close to $(OPTIONS). +# $(OPTS)=... is another way of influencing C compilation. It is +# distinctly separate from $(OPTIONS) and $(OPT_FEATURE_FLAGS) but, +# like those, $(OPTS) applies to all invocations of $(T.cc). The +# configure process does not set either of $(OPTIONS) or $(OPTS). # OPT_FEATURE_FLAGS ?= # @@ -248,15 +261,17 @@ SHELL_OPT ?= # # TCL_CONFIG_SH must, for some of the build targets, refer to a valid # tclConfig.sh. That script will be used to populate most of the other -# TCL-related vars the build needs. +# TCL-related vars the build needs. The core library does not require +# TCL, but TCL is needed for running tests and certain tools, e.g. +# sqlite3_analyzer. # TCL_CONFIG_SH ?= # # $(HAVE_WASI_SDK) = # -# 1 when building with the WASI SDK. This disables certain build -# targets. It is expected that the invoker assigns CC to the wasi-sdk -# CC. +# Set to 1 when building with the WASI SDK. This disables certain +# build targets. It is expected that the invoker sets $(CC), $(LD), +# and $(AR) to their counterparts from the wasi-sdk. # HAVE_WASI_SDK ?= 0 # @@ -312,22 +327,21 @@ T.cc += $(CFLAGS.core) $(CFLAGS.env) # The legacy build applied such LDFLAGS to all link operations for all # deliverables. The 3.48+ build applies them (as of this writing) more # selectively: search this file LDFLAGS.configure to see where they're -# set. As of this writing, they only affect targets which use -# $(LDFLAGS.libsqlite3) - see that var's docs for details. +# set. # LDFLAGS.configure ?= # # The difference between $(OPT_FEATURE_FLAGS) and $(OPTS) is that the -# former is historically provided by the configure script, whereas the -# latter is intended to be provided as arguments to the make +# former is historically provided by the configure script, whereas +# $(OPTS) is intended to be provided as arguments to the make # invocation. # T.cc += $(OPT_FEATURE_FLAGS) # # Add in any optional global compilation flags on the make command -# line ie. make "OPTS=-DSQLITE_ENABLE_FOO=1 -DSQLITE_OMIT_FOO=1". +# line i.e. make "OPTS=-DSQLITE_ENABLE_FOO=1 -DSQLITE_OMIT_FOO=1". # T.cc += $(OPTS) diff --git a/manifest b/manifest index 325c9fd9cc..a2a0993d19 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\sthe\slibsqlite3.so.3\slink\sfrom\sthe\sinstallation\sprocess,\sas\sit\snow\sserves\sno\sfunctional\spurpose.\sWe\sretain\slibsqlite3.so.0\s(A)\sfor\scompatibility\swith\sclients\slinked\sagainst\slegacy\sbuilds\sand\s(B)\s0\sis\sstill\svalid\sas\sthe\slibrary's\sABI\sversion. -D 2024-11-22T13:47:12.667 +C Makefile\sdoc\scleanups.\sNo\sfunctional\schanges. +D 2024-11-22T14:12:18.841 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -696,7 +696,7 @@ F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65a F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b503bef35 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 -F main.mk 9c6c9473eb83a72a4cd80aab95c7dd64bb59286c151d5745091a5a178d111c84 +F main.mk b19ce37b58d9378b89e868d9ef9546c0068e5e6b49b02e44e600b752519e888f F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421 @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P c78dcc318a36af123676e54d85fc7f980c21b0ea366d164a96e2d998286d3813 -R c696fe78d3d189a1b874e36c608737fb +P 91bd9813e04e34e088d5e73bfe2a4f338513363d9a99095a232b811c6b616354 +R 0e0e7948374fb4ea8d89262652e0cc24 U stephan -Z 044fe3be3927265c623f70a401222db0 +Z c67cb4da7f21bbdaef588069bb0cb4d5 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 66959ba790..da30cd0938 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -91bd9813e04e34e088d5e73bfe2a4f338513363d9a99095a232b811c6b616354 +64add0ac706101c53e2d2877fdc0d1ccd071814cae969768d2741cee05f23c01 From 5c945264b0dd500f2d301b2fb82394d20af5bb85 Mon Sep 17 00:00:00 2001 From: stephan Date: Fri, 22 Nov 2024 14:18:23 +0000 Subject: [PATCH 33/89] Move handling of the tempstore feature flag into the OPT_FEATURE_FLAGS list and remove the CFLAGS.libsqlite3 makefile var which exists solely to account for the tempstore being tracked separately from the other feature flags. FossilOrigin-Name: 2df5065d118ca4abcb4f285d07819e73c5e32f7e470d30eabc7e3d999ec8d0f2 --- Makefile.in | 5 -- auto.def | 2 +- main.mk | 178 ++++++++++++++++++++++++-------------------------- manifest | 16 ++--- manifest.uuid | 2 +- 5 files changed, 96 insertions(+), 107 deletions(-) diff --git a/Makefile.in b/Makefile.in index 483ca35d94..59963f3ced 100644 --- a/Makefile.in +++ b/Makefile.in @@ -184,11 +184,6 @@ JIMSH = ./jimsh$(TEXE) B.tclsh = @BTCLSH@ $(B.tclsh): -# -# $(CFLAGS.libsqlite3) is documented in main.mk. -# -CFLAGS.libsqlite3 = -DSQLITE_TEMP_STORE=@TEMP_STORE@ - # # $(OPT_FEATURE_FLAGS) is documented in main.mk. # diff --git a/auto.def b/auto.def index 086d8e1e3c..c49e7b949b 100644 --- a/auto.def +++ b/auto.def @@ -866,7 +866,7 @@ apply {{} { } } msg-result $ts - define TEMP_STORE $tsn + sqlite-add-feature-flag -DSQLITE_TEMP_STORE=$tsn }} ######################################################################## diff --git a/main.mk b/main.mk index 9a706d1078..3e1169368a 100644 --- a/main.mk +++ b/main.mk @@ -358,12 +358,6 @@ INSTALL.noexec = $(INSTALL) -m 0644 # T.compile = $(T.cc) $(T.compile.extras) -# -# $(CFLAGS.libsqlite3) must contain any CFLAGS which are relevant for -# compiling the library's own sources, including (sometimes) when -# compiling sqlite3.c directly in to another app. -# -CFLAGS.libsqlite3 ?= # # $(T.cc.sqlite) is $(T.cc) plus any flags which are desired for the # library as a whole, but not necessarily needed for every binary. It @@ -1100,255 +1094,255 @@ sqlite3ext.h: .target_source # DEPS_OBJ_COMMON = $(MAKE_SANITY_CHECK) $(HDR) parse.o: parse.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c parse.c + $(T.cc.sqlite) -c parse.c opcodes.o: opcodes.c - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c opcodes.c + $(T.cc.sqlite) -c opcodes.c # Rules to build individual *.o files from files in the src directory. # alter.o: $(TOP)/src/alter.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/alter.c + $(T.cc.sqlite) -c $(TOP)/src/alter.c analyze.o: $(TOP)/src/analyze.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/analyze.c + $(T.cc.sqlite) -c $(TOP)/src/analyze.c attach.o: $(TOP)/src/attach.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/attach.c + $(T.cc.sqlite) -c $(TOP)/src/attach.c auth.o: $(TOP)/src/auth.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/auth.c + $(T.cc.sqlite) -c $(TOP)/src/auth.c backup.o: $(TOP)/src/backup.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/backup.c + $(T.cc.sqlite) -c $(TOP)/src/backup.c bitvec.o: $(TOP)/src/bitvec.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/bitvec.c + $(T.cc.sqlite) -c $(TOP)/src/bitvec.c btmutex.o: $(TOP)/src/btmutex.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/btmutex.c + $(T.cc.sqlite) -c $(TOP)/src/btmutex.c btree.o: $(TOP)/src/btree.c $(DEPS_OBJ_COMMON) $(TOP)/src/pager.h - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/btree.c + $(T.cc.sqlite) -c $(TOP)/src/btree.c build.o: $(TOP)/src/build.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/build.c + $(T.cc.sqlite) -c $(TOP)/src/build.c callback.o: $(TOP)/src/callback.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/callback.c + $(T.cc.sqlite) -c $(TOP)/src/callback.c complete.o: $(TOP)/src/complete.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/complete.c + $(T.cc.sqlite) -c $(TOP)/src/complete.c ctime.o: $(TOP)/src/ctime.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/ctime.c + $(T.cc.sqlite) -c $(TOP)/src/ctime.c date.o: $(TOP)/src/date.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/date.c + $(T.cc.sqlite) -c $(TOP)/src/date.c dbpage.o: $(TOP)/src/dbpage.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/dbpage.c + $(T.cc.sqlite) -c $(TOP)/src/dbpage.c dbstat.o: $(TOP)/src/dbstat.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/dbstat.c + $(T.cc.sqlite) -c $(TOP)/src/dbstat.c delete.o: $(TOP)/src/delete.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/delete.c + $(T.cc.sqlite) -c $(TOP)/src/delete.c expr.o: $(TOP)/src/expr.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/expr.c + $(T.cc.sqlite) -c $(TOP)/src/expr.c fault.o: $(TOP)/src/fault.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/fault.c + $(T.cc.sqlite) -c $(TOP)/src/fault.c fkey.o: $(TOP)/src/fkey.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/fkey.c + $(T.cc.sqlite) -c $(TOP)/src/fkey.c func.o: $(TOP)/src/func.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/func.c + $(T.cc.sqlite) -c $(TOP)/src/func.c global.o: $(TOP)/src/global.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/global.c + $(T.cc.sqlite) -c $(TOP)/src/global.c hash.o: $(TOP)/src/hash.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/hash.c + $(T.cc.sqlite) -c $(TOP)/src/hash.c insert.o: $(TOP)/src/insert.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/insert.c + $(T.cc.sqlite) -c $(TOP)/src/insert.c json.o: $(TOP)/src/json.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/json.c + $(T.cc.sqlite) -c $(TOP)/src/json.c legacy.o: $(TOP)/src/legacy.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/legacy.c + $(T.cc.sqlite) -c $(TOP)/src/legacy.c loadext.o: $(TOP)/src/loadext.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/loadext.c + $(T.cc.sqlite) -c $(TOP)/src/loadext.c main.o: $(TOP)/src/main.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/main.c + $(T.cc.sqlite) -c $(TOP)/src/main.c malloc.o: $(TOP)/src/malloc.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/malloc.c + $(T.cc.sqlite) -c $(TOP)/src/malloc.c mem0.o: $(TOP)/src/mem0.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/mem0.c + $(T.cc.sqlite) -c $(TOP)/src/mem0.c mem1.o: $(TOP)/src/mem1.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/mem1.c + $(T.cc.sqlite) -c $(TOP)/src/mem1.c mem2.o: $(TOP)/src/mem2.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/mem2.c + $(T.cc.sqlite) -c $(TOP)/src/mem2.c mem3.o: $(TOP)/src/mem3.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/mem3.c + $(T.cc.sqlite) -c $(TOP)/src/mem3.c mem5.o: $(TOP)/src/mem5.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/mem5.c + $(T.cc.sqlite) -c $(TOP)/src/mem5.c memdb.o: $(TOP)/src/memdb.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/memdb.c + $(T.cc.sqlite) -c $(TOP)/src/memdb.c memjournal.o: $(TOP)/src/memjournal.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/memjournal.c + $(T.cc.sqlite) -c $(TOP)/src/memjournal.c mutex.o: $(TOP)/src/mutex.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/mutex.c + $(T.cc.sqlite) -c $(TOP)/src/mutex.c mutex_noop.o: $(TOP)/src/mutex_noop.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/mutex_noop.c + $(T.cc.sqlite) -c $(TOP)/src/mutex_noop.c mutex_unix.o: $(TOP)/src/mutex_unix.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/mutex_unix.c + $(T.cc.sqlite) -c $(TOP)/src/mutex_unix.c mutex_w32.o: $(TOP)/src/mutex_w32.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/mutex_w32.c + $(T.cc.sqlite) -c $(TOP)/src/mutex_w32.c notify.o: $(TOP)/src/notify.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/notify.c + $(T.cc.sqlite) -c $(TOP)/src/notify.c pager.o: $(TOP)/src/pager.c $(DEPS_OBJ_COMMON) $(TOP)/src/pager.h - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/pager.c + $(T.cc.sqlite) -c $(TOP)/src/pager.c pcache.o: $(TOP)/src/pcache.c $(DEPS_OBJ_COMMON) $(TOP)/src/pcache.h - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/pcache.c + $(T.cc.sqlite) -c $(TOP)/src/pcache.c pcache1.o: $(TOP)/src/pcache1.c $(DEPS_OBJ_COMMON) $(TOP)/src/pcache.h - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/pcache1.c + $(T.cc.sqlite) -c $(TOP)/src/pcache1.c os.o: $(TOP)/src/os.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/os.c + $(T.cc.sqlite) -c $(TOP)/src/os.c os_kv.o: $(TOP)/src/os_kv.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/os_kv.c + $(T.cc.sqlite) -c $(TOP)/src/os_kv.c os_unix.o: $(TOP)/src/os_unix.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/os_unix.c + $(T.cc.sqlite) -c $(TOP)/src/os_unix.c os_win.o: $(TOP)/src/os_win.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/os_win.c + $(T.cc.sqlite) -c $(TOP)/src/os_win.c pragma.o: $(TOP)/src/pragma.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/pragma.c + $(T.cc.sqlite) -c $(TOP)/src/pragma.c prepare.o: $(TOP)/src/prepare.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/prepare.c + $(T.cc.sqlite) -c $(TOP)/src/prepare.c printf.o: $(TOP)/src/printf.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/printf.c + $(T.cc.sqlite) -c $(TOP)/src/printf.c random.o: $(TOP)/src/random.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/random.c + $(T.cc.sqlite) -c $(TOP)/src/random.c resolve.o: $(TOP)/src/resolve.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/resolve.c + $(T.cc.sqlite) -c $(TOP)/src/resolve.c rowset.o: $(TOP)/src/rowset.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/rowset.c + $(T.cc.sqlite) -c $(TOP)/src/rowset.c select.o: $(TOP)/src/select.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/select.c + $(T.cc.sqlite) -c $(TOP)/src/select.c status.o: $(TOP)/src/status.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/status.c + $(T.cc.sqlite) -c $(TOP)/src/status.c sqlite3.o: sqlite3.h sqlite3.c - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c sqlite3.c + $(T.cc.sqlite) -c sqlite3.c table.o: $(TOP)/src/table.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/table.c + $(T.cc.sqlite) -c $(TOP)/src/table.c threads.o: $(TOP)/src/threads.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/threads.c + $(T.cc.sqlite) -c $(TOP)/src/threads.c tokenize.o: $(TOP)/src/tokenize.c keywordhash.h $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/tokenize.c + $(T.cc.sqlite) -c $(TOP)/src/tokenize.c treeview.o: $(TOP)/src/treeview.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/treeview.c + $(T.cc.sqlite) -c $(TOP)/src/treeview.c trigger.o: $(TOP)/src/trigger.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/trigger.c + $(T.cc.sqlite) -c $(TOP)/src/trigger.c update.o: $(TOP)/src/update.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/update.c + $(T.cc.sqlite) -c $(TOP)/src/update.c upsert.o: $(TOP)/src/upsert.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/upsert.c + $(T.cc.sqlite) -c $(TOP)/src/upsert.c utf.o: $(TOP)/src/utf.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/utf.c + $(T.cc.sqlite) -c $(TOP)/src/utf.c util.o: $(TOP)/src/util.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/util.c + $(T.cc.sqlite) -c $(TOP)/src/util.c vacuum.o: $(TOP)/src/vacuum.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/vacuum.c + $(T.cc.sqlite) -c $(TOP)/src/vacuum.c vdbe.o: $(TOP)/src/vdbe.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/vdbe.c + $(T.cc.sqlite) -c $(TOP)/src/vdbe.c vdbeapi.o: $(TOP)/src/vdbeapi.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/vdbeapi.c + $(T.cc.sqlite) -c $(TOP)/src/vdbeapi.c vdbeaux.o: $(TOP)/src/vdbeaux.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/vdbeaux.c + $(T.cc.sqlite) -c $(TOP)/src/vdbeaux.c vdbeblob.o: $(TOP)/src/vdbeblob.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/vdbeblob.c + $(T.cc.sqlite) -c $(TOP)/src/vdbeblob.c vdbemem.o: $(TOP)/src/vdbemem.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/vdbemem.c + $(T.cc.sqlite) -c $(TOP)/src/vdbemem.c vdbesort.o: $(TOP)/src/vdbesort.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/vdbesort.c + $(T.cc.sqlite) -c $(TOP)/src/vdbesort.c vdbetrace.o: $(TOP)/src/vdbetrace.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/vdbetrace.c + $(T.cc.sqlite) -c $(TOP)/src/vdbetrace.c vdbevtab.o: $(TOP)/src/vdbevtab.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/vdbevtab.c + $(T.cc.sqlite) -c $(TOP)/src/vdbevtab.c vtab.o: $(TOP)/src/vtab.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/vtab.c + $(T.cc.sqlite) -c $(TOP)/src/vtab.c wal.o: $(TOP)/src/wal.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/wal.c + $(T.cc.sqlite) -c $(TOP)/src/wal.c walker.o: $(TOP)/src/walker.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/walker.c + $(T.cc.sqlite) -c $(TOP)/src/walker.c where.o: $(TOP)/src/where.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/where.c + $(T.cc.sqlite) -c $(TOP)/src/where.c wherecode.o: $(TOP)/src/wherecode.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/wherecode.c + $(T.cc.sqlite) -c $(TOP)/src/wherecode.c whereexpr.o: $(TOP)/src/whereexpr.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/whereexpr.c + $(T.cc.sqlite) -c $(TOP)/src/whereexpr.c window.o: $(TOP)/src/window.c $(DEPS_OBJ_COMMON) - $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/window.c + $(T.cc.sqlite) -c $(TOP)/src/window.c tclsqlite.o: $(T.tcl.env.sh) $(TOP)/src/tclsqlite.c $(DEPS_OBJ_COMMON) $(T.compile.tcl) -DUSE_TCL_STUBS=1 $$TCL_INCLUDE_SPEC \ @@ -1648,7 +1642,7 @@ testfixture$(T.exe): $(T.tcl.env.sh) has_tclsh85 $(TESTFIXTURE_SRC) $(T.link.tcl) -DSQLITE_NO_SYNC=1 $(TESTFIXTURE_FLAGS) \ -o $@ $(TESTFIXTURE_SRC) \ $$TCL_LIB_SPEC $$TCL_INCLUDE_SPEC \ - $(CFLAGS.libsqlite3) $(LDFLAGS.libsqlite3) + $(LDFLAGS.libsqlite3) coretestprogs: testfixture$(B.exe) sqlite3$(B.exe) @@ -1795,7 +1789,7 @@ sqltclsh.c: sqlite3.c $(TOP)/src/tclsqlite.c $(TOP)/tool/sqltclsh.tcl \ $(B.tclsh) $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqltclsh.c.in >sqltclsh.c sqltclsh$(T.exe): $(T.tcl.env.sh) sqltclsh.c - $(T.link.tcl) sqltclsh.c -o $@ $$TCL_INCLUDE_SPEC $(CFLAGS.libsqlite3) \ + $(T.link.tcl) sqltclsh.c -o $@ $$TCL_INCLUDE_SPEC \ $(LDFLAGS.libsqlite3) $$TCL_LIB_SPEC $$TCL_LIBS # xbin: target for generic binaries which aren't usually built. It is # used primarily for testing the build process. @@ -1822,7 +1816,7 @@ sqlite3_checker.c: $(CHECKER_DEPS) sqlite3_checker$(T.exe): $(T.tcl.env.sh) sqlite3_checker.c $(T.link.tcl) sqlite3_checker.c -o $@ $$TCL_INCLUDE_SPEC \ - $(CFLAGS.libsqlite3) $$TCL_LIB_SPEC $(LDFLAGS.libsqlite3) + $$TCL_LIB_SPEC $(LDFLAGS.libsqlite3) xbin: sqlite3_checker$(T.exe) dbdump$(T.exe): $(TOP)/ext/misc/dbdump.c sqlite3.o diff --git a/manifest b/manifest index a2a0993d19..83f3b6f2c0 100644 --- a/manifest +++ b/manifest @@ -1,9 +1,9 @@ -C Makefile\sdoc\scleanups.\sNo\sfunctional\schanges. -D 2024-11-22T14:12:18.841 +C Move\shandling\sof\sthe\stempstore\sfeature\sflag\sinto\sthe\sOPT_FEATURE_FLAGS\slist\sand\sremove\sthe\sCFLAGS.libsqlite3\smakefile\svar\swhich\sexists\ssolely\sto\saccount\sfor\sthe\stempstore\sbeing\stracked\sseparately\sfrom\sthe\sother\sfeature\sflags. +D 2024-11-22T14:18:23.840 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d -F Makefile.in d0ad8cdcb5a0492eee78b7ae74ace1213294649a547ba90d15e9c39cc08fdbb4 +F Makefile.in 85f2c740cadf969abbd9a6210b8b76636dbf231b9d3efe977b060c3055fac5b9 F Makefile.linux-generic bd3e3cacd369821a6241d4ea1967395c962dfe3057e38cb0a435cee0e8b789d0 F Makefile.msc a92237976eb92c5efaa0dd2524746aec12c196e12df8d4dbff9543a4648c3312 F README.md c3c0f19532ce28f6297a71870f3c7b424729f0e6d9ab889616d3587dd2332159 @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F auto.def 7cc8f9f228a234db7955ce9061bef85b74162cd890afaaf6338ebc49fa04b2de +F auto.def 1674fbca9580feb23fe4ecc710e39b0fbfadf6190231490424ac2b2bbde5de67 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -696,7 +696,7 @@ F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65a F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b503bef35 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 -F main.mk b19ce37b58d9378b89e868d9ef9546c0068e5e6b49b02e44e600b752519e888f +F main.mk 01e9b77600f8551df7f970075c09ad9e1898bf2adf512cb861d24b30fb1e6f52 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421 @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 91bd9813e04e34e088d5e73bfe2a4f338513363d9a99095a232b811c6b616354 -R 0e0e7948374fb4ea8d89262652e0cc24 +P 64add0ac706101c53e2d2877fdc0d1ccd071814cae969768d2741cee05f23c01 +R 9816c1b559fff5885cdaa7805e52b14e U stephan -Z c67cb4da7f21bbdaef588069bb0cb4d5 +Z 4bea40264480222fb7de358654df9b7c # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index da30cd0938..a332296066 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -64add0ac706101c53e2d2877fdc0d1ccd071814cae969768d2741cee05f23c01 +2df5065d118ca4abcb4f285d07819e73c5e32f7e470d30eabc7e3d999ec8d0f2 From de7e2b178d97363ef8e46901c465ace38f117281 Mon Sep 17 00:00:00 2001 From: stephan Date: Fri, 22 Nov 2024 16:24:55 +0000 Subject: [PATCH 34/89] In order to support package builds, like OpenBSD's, which set a custom soname on libsqlite3.so, extend the --soname configure flag to allow arbitrary soname values. FossilOrigin-Name: 9c1c1b99837efe3704778c594a65e0cd4cd0a8ec492044d3bb07f1b37a692c6a --- auto.def | 26 +++++++++++++++++++------- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/auto.def b/auto.def index c49e7b949b..8fa2584611 100644 --- a/auto.def +++ b/auto.def @@ -204,7 +204,14 @@ set flags { linemacros => {Enable #line macros in the amalgamation} dump-defines=0 => {Dump autosetup defines to $DUMP_DEFINES_TXT (for build debugging)} dynlink-tools => {Dynamically link libsqlite3 to certain tools which normally statically embed it.} - soname:=legacy => {SONAME for libsqlite3.so. Must be one of: none, auto, legacy} + soname:=legacy => + {SONAME for libsqlite3.so. "none", or not using this flag, sets no + soname. "legacy" sets it to its historical value of + libsqlite3.so.0. A value matching the glob "libsqlite3.*" sets + it to that literal value. Any other value is assumed to be a + suffix which gets applied to "libsqlite3.so.", + e.g. --soname=9.10 equates to "libsqlite3.so.9.10". + } # --soname has a long story behind it: https://sqlite.org/src/forumpost/5a3b44f510df8ded # } @@ -475,22 +482,27 @@ proj-check-rpath ; # Determine proper rpath-handling flag apply {{} { define LDFLAGS_LIBSQLITE3_SONAME "" if {[proj-opt-was-provided soname]} { - set soname [opt-val soname] + set soname [join [opt-val soname] ""] } else { set soname none; # enabling soname breaks linking for the --dynlink-tools feature } switch -exact -- $soname { - none { return 0 } - auto { set soname libsqlite3.so.3 } - legacy { set soname libsqlite3.so.0 } + none - "" { return 0 } + auto { set soname libsqlite3.so.3 } + legacy { set soname libsqlite3.so.0 } default { - proj-fatal "Invalid value for --soname. Use one of (none, auto, legacy)." + if {[string match libsqlite3.* $soname]} { + # use it as-is + } else { + # Assume it's a suffix + set soname "libsqlite3.so.${soname}" + } } } msg-debug "soname=$soname" if {[proj-check-soname $soname]} { define LDFLAGS_LIBSQLITE3_SONAME [get-define LDFLAGS_SONAME_PREFIX]$soname - msg-result "Setting SONAME: [get-define LDFLAGS_LIBSQLITE3_SONAME]" + msg-result "Setting SONAME using: [get-define LDFLAGS_LIBSQLITE3_SONAME]" } elseif {[proj-opt-was-provided soname]} { # --soname was explicitly requested but not available, so fail fatally proj-fatal "This environment does not support SONAME." diff --git a/manifest b/manifest index 83f3b6f2c0..927edd7b24 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Move\shandling\sof\sthe\stempstore\sfeature\sflag\sinto\sthe\sOPT_FEATURE_FLAGS\slist\sand\sremove\sthe\sCFLAGS.libsqlite3\smakefile\svar\swhich\sexists\ssolely\sto\saccount\sfor\sthe\stempstore\sbeing\stracked\sseparately\sfrom\sthe\sother\sfeature\sflags. -D 2024-11-22T14:18:23.840 +C In\sorder\sto\ssupport\spackage\sbuilds,\slike\sOpenBSD's,\swhich\sset\sa\scustom\ssoname\son\slibsqlite3.so,\sextend\sthe\s--soname\sconfigure\sflag\sto\sallow\sarbitrary\ssoname\svalues. +D 2024-11-22T16:24:55.926 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F auto.def 1674fbca9580feb23fe4ecc710e39b0fbfadf6190231490424ac2b2bbde5de67 +F auto.def 62eaab1eb8bad47950bcb604f2861a498e31e7d536656de67555d83b33bc9b6e F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 64add0ac706101c53e2d2877fdc0d1ccd071814cae969768d2741cee05f23c01 -R 9816c1b559fff5885cdaa7805e52b14e +P 2df5065d118ca4abcb4f285d07819e73c5e32f7e470d30eabc7e3d999ec8d0f2 +R c80d0be5b601602377ee64fea6d1d93b U stephan -Z 4bea40264480222fb7de358654df9b7c +Z 7d4e6781a8e821513a5e1b50822d0be1 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index a332296066..b7b4e236d4 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2df5065d118ca4abcb4f285d07819e73c5e32f7e470d30eabc7e3d999ec8d0f2 +9c1c1b99837efe3704778c594a65e0cd4cd0a8ec492044d3bb07f1b37a692c6a From 7398e279a711a1fea3ca4db08a02e8b421304f7c Mon Sep 17 00:00:00 2001 From: stephan Date: Fri, 22 Nov 2024 16:45:43 +0000 Subject: [PATCH 35/89] Remove a flaky JS test which has a result depending on unrepredictable context. That same feature is more reliably tested at a later point in the same script. FossilOrigin-Name: 3d6ae13805bdba4c73b7443f20073264cdd157299cb911228600e1528a136bb1 --- ext/wasm/tester1.c-pp.js | 5 ----- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/ext/wasm/tester1.c-pp.js b/ext/wasm/tester1.c-pp.js index 7ed2780201..a21a1c330e 100644 --- a/ext/wasm/tester1.c-pp.js +++ b/ext/wasm/tester1.c-pp.js @@ -1248,11 +1248,6 @@ globalThis.sqlite3InitModule = sqlite3InitModule; let st = this.db.prepare( new TextEncoder('utf-8').encode("select 3 as a") ); - if( wasm.compileOptionUsed('OMIT_PROGRESS_CALLBACK') ) { - T.assert( !this.progressHandlerCount ); - }else{ - T.assert( 1===this.progressHandlerCount, "Checking this.progressHandlerCount" ); - } let rc; try { T.assert(wasm.isPtr(st.pointer)) diff --git a/manifest b/manifest index 927edd7b24..5be12c1b31 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C In\sorder\sto\ssupport\spackage\sbuilds,\slike\sOpenBSD's,\swhich\sset\sa\scustom\ssoname\son\slibsqlite3.so,\sextend\sthe\s--soname\sconfigure\sflag\sto\sallow\sarbitrary\ssoname\svalues. -D 2024-11-22T16:24:55.926 +C Remove\sa\sflaky\sJS\stest\swhich\shas\sa\sresult\sdepending\son\sunrepredictable\scontext.\sThat\ssame\sfeature\sis\smore\sreliably\stested\sat\sa\slater\spoint\sin\sthe\ssame\sscript. +D 2024-11-22T16:45:43.035 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -690,7 +690,7 @@ F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555 F ext/wasm/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c F ext/wasm/tester1-worker.html ebc4b820a128963afce328ecf63ab200bd923309eb939f4110510ab449e9814c F ext/wasm/tester1.c-pp.html 1c1bc78b858af2019e663b1a31e76657b73dc24bede28ca92fbe917c3a972af2 -F ext/wasm/tester1.c-pp.js f255a7c6730b341e2633d54b7edb27b91cd35744c011ddd321418a0735b0e44b +F ext/wasm/tester1.c-pp.js 228101c290003423f0bfb66a6ebbfc6904fa7b1b69466e700c135f74ee83d62a F ext/wasm/tests/opfs/concurrency/index.html 657578a6e9ce1e9b8be951549ed93a6a471f4520a99e5b545928668f4285fb5e F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65ad09f510589c779b7cc6a803a88 F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 2df5065d118ca4abcb4f285d07819e73c5e32f7e470d30eabc7e3d999ec8d0f2 -R c80d0be5b601602377ee64fea6d1d93b +P 9c1c1b99837efe3704778c594a65e0cd4cd0a8ec492044d3bb07f1b37a692c6a +R 4aa6d28b53812054d01714f0a5a04f4b U stephan -Z 7d4e6781a8e821513a5e1b50822d0be1 +Z 6393d24f8f80b84fe0e1080e07e0ef37 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index b7b4e236d4..7f5c9109b5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9c1c1b99837efe3704778c594a65e0cd4cd0a8ec492044d3bb07f1b37a692c6a +3d6ae13805bdba4c73b7443f20073264cdd157299cb911228600e1528a136bb1 From 8ff67df7ac451fe0e8e42b5088aa866fc20f5ebf Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 22 Nov 2024 17:41:00 +0000 Subject: [PATCH 36/89] Fix another issue in argument expansion on Windows for tclsqlite3.c in interpreter mode. Problem introduced by check-in [9b87ea219bce5689] and unfixed by [cd942dce148c9d8f]. FossilOrigin-Name: 0fe1622cec95b7ebecc127ee57a08113d3da1dadbe72c03a13d6751b3043e50f --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/tclsqlite.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 5be12c1b31..a1f3f97ae3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\sa\sflaky\sJS\stest\swhich\shas\sa\sresult\sdepending\son\sunrepredictable\scontext.\sThat\ssame\sfeature\sis\smore\sreliably\stested\sat\sa\slater\spoint\sin\sthe\ssame\sscript. -D 2024-11-22T16:45:43.035 +C Fix\sanother\sissue\sin\sargument\sexpansion\son\sWindows\sfor\stclsqlite3.c\sin\ninterpreter\smode.\s\sProblem\sintroduced\sby\scheck-in\s[9b87ea219bce5689]\sand\nunfixed\sby\s[cd942dce148c9d8f]. +D 2024-11-22T17:41:00.227 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -783,7 +783,7 @@ F src/sqliteInt.h 77be043f8694f4a8702d0ee882022b2e5a6489a0493e77c5d9a73f1efc5a2c F src/sqliteLimit.h 6993c9cfe3af5b8169ae0e5f15627fc15596726d4f1dc90a221309f79715ce88 F src/status.c cb11f8589a6912af2da3bb1ec509a94dd8ef27df4d4c1a97e0bcf2309ece972b F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 -F src/tclsqlite.c c4b0b27b0ad34e4af085040a1ebe94a35ad5161663cd905d1b947f7884691bff +F src/tclsqlite.c 1c2f697cb12a1d49f5e0b448327f7cf614809423bb43753b2d97f87354298113 F src/tclsqlite.h 65e2c761446e1c9fa0342b7d2612a703483643c8b6a316d12a65b745a4727395 F src/test1.c 2d507751bfb4aa254dc22588ef1e3c5c5cfcb2e636d0e6e1fa0bbd307669c2a8 F src/test2.c 7ebc518e6735939d8979273a6f7b1d9b5702babf059f6ad62499f7f60a9eb9a3 @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 9c1c1b99837efe3704778c594a65e0cd4cd0a8ec492044d3bb07f1b37a692c6a -R 4aa6d28b53812054d01714f0a5a04f4b -U stephan -Z 6393d24f8f80b84fe0e1080e07e0ef37 +P 3d6ae13805bdba4c73b7443f20073264cdd157299cb911228600e1528a136bb1 +R f112fd2beffd3eb814301c3676676b3e +U drh +Z 113c5b5aab1719624bc6c7ebe0ae9b2d # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 7f5c9109b5..8cd2bbe8d4 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3d6ae13805bdba4c73b7443f20073264cdd157299cb911228600e1528a136bb1 +0fe1622cec95b7ebecc127ee57a08113d3da1dadbe72c03a13d6751b3043e50f diff --git a/src/tclsqlite.c b/src/tclsqlite.c index 36459e4a94..4406ceef67 100644 --- a/src/tclsqlite.c +++ b/src/tclsqlite.c @@ -4034,7 +4034,7 @@ static const char *tclsh_main_loop(void){ #ifdef WIN32 "set new [list]\n" "foreach arg $argv {\n" - "if {[file exists $arg]} {\n" + "if {[string match -* $arg] || [file exists $arg]} {\n" "lappend new $arg\n" "} else {\n" "set once 0\n" From b56f179e45293735513a28b61f71068104adb6a0 Mon Sep 17 00:00:00 2001 From: stephan Date: Mon, 25 Nov 2024 17:07:58 +0000 Subject: [PATCH 37/89] Correct duplicated soname linker flags, one of them mis-named. FossilOrigin-Name: 87dfd92d3a5a6a09c32c70e724a3f341bc63b9c6dfa0aa94fbbbdd45cc9c29f3 --- main.mk | 6 +++--- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/main.mk b/main.mk index 3e1169368a..f98850731e 100644 --- a/main.mk +++ b/main.mk @@ -165,7 +165,7 @@ LDFLAGS.dlopen ?= -ldl LDFLAGS.shlib ?= -shared LDFLAGS.icu ?= # -licui18n -licuuc -licudata CFLAGS.icu ?= -LDFLAGS.soname.libsqlite3 ?= # see https://sqlite.org/src/forumpost/5a3b44f510df8ded +LDFLAGS.libsqlite3.soname ?= # see https://sqlite.org/src/forumpost/5a3b44f510df8ded # libreadline (or a workalike): # To activate readline in the shell: SHELL_OPT = -DHAVE_READLINE=1 LDFLAGS.readline ?= -lreadline # these vary across platforms @@ -1410,8 +1410,8 @@ all: lib # Dynamic libsqlite3 # $(libsqlite3.SO): $(LIBOBJ) - $(T.link.shared) -o $@ $(LIBOBJ) $(LDFLAGS.soname.libsqlite3) \ - $(LDFLAGS.libsqlite3) $(LDFLAGS.libsqlite3.soname) + $(T.link.shared) -o $@ $(LIBOBJ) $(LDFLAGS.libsqlite3) \ + $(LDFLAGS.libsqlite3.soname) $(libsqlite3.SO)-1: $(libsqlite3.SO) $(libsqlite3.SO)-0 $(libsqlite3.SO)-: so: $(libsqlite3.SO)-$(ENABLE_SHARED) diff --git a/manifest b/manifest index a1f3f97ae3..2232f78938 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sanother\sissue\sin\sargument\sexpansion\son\sWindows\sfor\stclsqlite3.c\sin\ninterpreter\smode.\s\sProblem\sintroduced\sby\scheck-in\s[9b87ea219bce5689]\sand\nunfixed\sby\s[cd942dce148c9d8f]. -D 2024-11-22T17:41:00.227 +C Correct\sduplicated\ssoname\slinker\sflags,\sone\sof\sthem\smis-named. +D 2024-11-25T17:07:58.248 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -696,7 +696,7 @@ F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65a F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b503bef35 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 -F main.mk 01e9b77600f8551df7f970075c09ad9e1898bf2adf512cb861d24b30fb1e6f52 +F main.mk 1ec3c7a81198397b14bf75c9304f01e891a5d464797cd402d4f3781feadd3331 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421 @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 3d6ae13805bdba4c73b7443f20073264cdd157299cb911228600e1528a136bb1 -R f112fd2beffd3eb814301c3676676b3e -U drh -Z 113c5b5aab1719624bc6c7ebe0ae9b2d +P 0fe1622cec95b7ebecc127ee57a08113d3da1dadbe72c03a13d6751b3043e50f +R 24cbca38f84059cbe901864cddc225cb +U stephan +Z 31635988b0bdb23e0fcab35446e8136f # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 8cd2bbe8d4..7f2309db58 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0fe1622cec95b7ebecc127ee57a08113d3da1dadbe72c03a13d6751b3043e50f +87dfd92d3a5a6a09c32c70e724a3f341bc63b9c6dfa0aa94fbbbdd45cc9c29f3 From f2d56bc57867ea8135e51d847b27e3221d99fd62 Mon Sep 17 00:00:00 2001 From: stephan Date: Tue, 26 Nov 2024 03:15:34 +0000 Subject: [PATCH 38/89] Replace some outdated docs re. soname with a link to the soname forum post. FossilOrigin-Name: 9225701cb88cb4629a12b45de5743378448b1d2ddb351916b77cfde638698070 --- auto.def | 22 ++-------------------- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 27 deletions(-) diff --git a/auto.def b/auto.def index 8fa2584611..b37bcb7f95 100644 --- a/auto.def +++ b/auto.def @@ -460,25 +460,8 @@ if {[cc-check-includes zlib.h] && [proj-check-function-in-lib deflate z]} { proj-check-rpath ; # Determine proper rpath-handling flag ######################################################################## -# It's not yet clear whether we gain anything from setting -soname, -# but not having it has been a source of anxiety for some users. -# Setting it to any value other than its historical value of -# libsqlite3.so.0 may break dynamic linking of clients which initially -# linked against a legacy build (with its SONAME of libsqlite3.so.0). -# -# To be clear: the ABI has not changed between pre-3.48 and post-3.47 -# builds, but version number 0 (pre-3.48) was a historical remnant -# from libtool which "should" have always been version number 3 but -# was not, for reasons lost to history. -# -# If the goal is to reduce downstream disruption then we need to -# retain the SONAME libsqlite3.so.0. If the goal is to "pull the -# bandaid off" then switching libsqlite3.so.3 is arguably the right -# thing to do (at the very real risk of causing a fair amount of -# downstream disruption for package maintainers). -# -# See discussion in/around: -# https://sqlite.org/forum/forumpost/0c6fc6f46b2cb3 +# "soname" for libsqlite3.so. See discussion at: +# https://sqlite.org/src/forumpost/5a3b44f510df8ded apply {{} { define LDFLAGS_LIBSQLITE3_SONAME "" if {[proj-opt-was-provided soname]} { @@ -511,7 +494,6 @@ apply {{} { } }} - proj-define-for-opt shared ENABLE_SHARED "Build shared library?" if {![proj-define-for-opt static ENABLE_STATIC \ diff --git a/manifest b/manifest index 2232f78938..5b41e95747 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Correct\sduplicated\ssoname\slinker\sflags,\sone\sof\sthem\smis-named. -D 2024-11-25T17:07:58.248 +C Replace\ssome\soutdated\sdocs\sre.\ssoname\swith\sa\slink\sto\sthe\ssoname\sforum\spost. +D 2024-11-26T03:15:34.735 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F auto.def 62eaab1eb8bad47950bcb604f2861a498e31e7d536656de67555d83b33bc9b6e +F auto.def 80085dd211b6a71b7d1cc23d182e8a0cce1c5219240b4b1433f86218ca1735ed F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 0fe1622cec95b7ebecc127ee57a08113d3da1dadbe72c03a13d6751b3043e50f -R 24cbca38f84059cbe901864cddc225cb +P 87dfd92d3a5a6a09c32c70e724a3f341bc63b9c6dfa0aa94fbbbdd45cc9c29f3 +R f92d2e5c227f7cb85aa09c937d9a97c7 U stephan -Z 31635988b0bdb23e0fcab35446e8136f +Z 7ab9f4332ba4301187d6dc14d812546d # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 7f2309db58..7cbd49f00c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -87dfd92d3a5a6a09c32c70e724a3f341bc63b9c6dfa0aa94fbbbdd45cc9c29f3 +9225701cb88cb4629a12b45de5743378448b1d2ddb351916b77cfde638698070 From 0dd542f79e7452689312f4e69a1d88befba38a90 Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 26 Nov 2024 16:04:02 +0000 Subject: [PATCH 39/89] Minor tweak to ./configure --help output. FossilOrigin-Name: 7e634d0569667ce1e17f4a611039cbb726078dc2e6be1f1b19655dc569170ce5 --- auto.def | 2 +- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/auto.def b/auto.def index b37bcb7f95..efdac7036a 100644 --- a/auto.def +++ b/auto.def @@ -149,7 +149,7 @@ set flags { # --with-tcl=DIR may be either a dir containing tclConfig.sh or a # dir one level up from that from which we can derive a dir # containing tclConfig.sh. - with-tcl: => {Root of path containing tclConfig.sh} + with-tcl:DIR => {Directory containing tclConfig.sh} # If --with-tclsh=X given, it is used for (A) trying to find # tclConfig.sh and (B) all TCL-based code generation. Warning: if # its containing dir has multiple tclsh versions, it may select the diff --git a/manifest b/manifest index 5b41e95747..0bfa840b55 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Replace\ssome\soutdated\sdocs\sre.\ssoname\swith\sa\slink\sto\sthe\ssoname\sforum\spost. -D 2024-11-26T03:15:34.735 +C Minor\stweak\sto\s./configure\s--help\soutput. +D 2024-11-26T16:04:02.500 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F auto.def 80085dd211b6a71b7d1cc23d182e8a0cce1c5219240b4b1433f86218ca1735ed +F auto.def 4fa9375aac42aa422e1852ccd8218a275212db6ef3182bb666eb2874d8af3898 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 87dfd92d3a5a6a09c32c70e724a3f341bc63b9c6dfa0aa94fbbbdd45cc9c29f3 -R f92d2e5c227f7cb85aa09c937d9a97c7 -U stephan -Z 7ab9f4332ba4301187d6dc14d812546d +P 9225701cb88cb4629a12b45de5743378448b1d2ddb351916b77cfde638698070 +R 1fd1cba45dac3cc717428822f5c6efda +U drh +Z a193b2ce84a7cd5ee03073da19cb5fbf # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 7cbd49f00c..3d8eca1a44 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9225701cb88cb4629a12b45de5743378448b1d2ddb351916b77cfde638698070 +7e634d0569667ce1e17f4a611039cbb726078dc2e6be1f1b19655dc569170ce5 From 04a556acf2807ed97c93a3bccc6eb71f2c7a7d5e Mon Sep 17 00:00:00 2001 From: stephan Date: Tue, 26 Nov 2024 16:12:05 +0000 Subject: [PATCH 40/89] Move some of the in-comment configure script help text into the --help text. No functional changes. FossilOrigin-Name: ee8449c482b6f9cfb82fa2417da194fc9aa56f54ef3ac83d368537181634ab1c --- auto.def | 41 ++++++++++++++++++++++------------------- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 30 insertions(+), 27 deletions(-) diff --git a/auto.def b/auto.def index efdac7036a..6b315f27f2 100644 --- a/auto.def +++ b/auto.def @@ -122,6 +122,10 @@ set DUMP_DEFINES_JSON ""; #./config.defines.json # ######################################################################## set flags { + # When writing {help text blocks}, be aware that autosetup formats + # them differently (left-aligned, under the --flag, if the block + # starts with a newline. + # shared=1 => {Disable build of shared libary} static=1 => {Disable build of static library (mostly)} @@ -146,20 +150,19 @@ set flags { all => {Enable FTS4, FTS5, Geopoly, RTree, Sessions} # # - # --with-tcl=DIR may be either a dir containing tclConfig.sh or a - # dir one level up from that from which we can derive a dir - # containing tclConfig.sh. - with-tcl:DIR => {Directory containing tclConfig.sh} - # If --with-tclsh=X given, it is used for (A) trying to find - # tclConfig.sh and (B) all TCL-based code generation. Warning: if - # its containing dir has multiple tclsh versions, it may select the - # wrong tclConfig.sh! - with-tclsh:PATH => {Full pathname of tclsh to use} - # --disable-tcl disables building of components which require TCL, - # including tests. This tree requires TCL for code generation but - # can use the in-tree copy of autosetup/jimsh0.c for that. The - # SQLite TCL extension and the test code require a canonical tclsh. - tcl=1 => {Disable components which require TCL} + with-tcl:DIR => + {Directory containing tclConfig.sh or a directory one level up from + that, from which we can derive a directory containing tclConfig.sh.} + with-tclsh:PATH => + {Full pathname of tclsh to use. It is used for (A) trying to find + tclConfig.sh and (B) all TCL-based code generation. Warning: if + its containing dir has multiple tclsh versions, it may select the + wrong tclConfig.sh!} + tcl=1 => + {Disable components which require TCL, including all tests. + This tree requires TCL for code generation but can use the in-tree + copy of autosetup/jimsh0.c for that. The SQLite TCL extension and the + test code require a canonical tclsh.} # # readline=1 => {Disable readline support} @@ -192,11 +195,11 @@ set flags { with-emsdk:=auto => {Top-most dir of the Emscripten SDK installation. Default = EMSDK env var.} # # - with-debug:=1 => {Enable debug build flags. --with-debug does more - than simply builds with a -g compilation flag and will impact - performance by as much as 4x, as it includes large numbers of - assert()s in performance-critical loops. Never use --with-debug - for production builds.} + with-debug:=1 => + {Enable debug build flags. This option will impact performance by + as much as 4x, as it includes large numbers of assert()s in + performance-critical loops. Never use --with-debug for production + builds.} scanstatus => {Enable the SQLITE_ENABLE_STMT_SCANSTATUS feature flag} dev => {Enable dev-mode build: automatically enables certain other flags} test-status => {Enable status of tests} diff --git a/manifest b/manifest index 0bfa840b55..3f8f3a7d8d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Minor\stweak\sto\s./configure\s--help\soutput. -D 2024-11-26T16:04:02.500 +C Move\ssome\sof\sthe\sin-comment\sconfigure\sscript\shelp\stext\sinto\sthe\s--help\stext.\sNo\sfunctional\schanges. +D 2024-11-26T16:12:05.631 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F auto.def 4fa9375aac42aa422e1852ccd8218a275212db6ef3182bb666eb2874d8af3898 +F auto.def cb4d2a6a3809c3c015ad1d1e5a06836697f78e31b38f154cc20a7b0cb350e0d1 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 9225701cb88cb4629a12b45de5743378448b1d2ddb351916b77cfde638698070 -R 1fd1cba45dac3cc717428822f5c6efda -U drh -Z a193b2ce84a7cd5ee03073da19cb5fbf +P 7e634d0569667ce1e17f4a611039cbb726078dc2e6be1f1b19655dc569170ce5 +R b03ff8f40892202b2bfdeabe2bfe4328 +U stephan +Z e952930a3cd549b7813b14b13b6d132c # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 3d8eca1a44..baa37c3050 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7e634d0569667ce1e17f4a611039cbb726078dc2e6be1f1b19655dc569170ce5 +ee8449c482b6f9cfb82fa2417da194fc9aa56f54ef3ac83d368537181634ab1c From 58cb5644bc0ee5a705085328db29416010634cad Mon Sep 17 00:00:00 2001 From: stephan Date: Tue, 26 Nov 2024 19:02:16 +0000 Subject: [PATCH 41/89] Patch autosetup to rename --debug to --autosetup-debug so we can use --debug/--enable-debug for its historical purpose. --with-debug is now an alias for --enable-debug but can be removed entirely if all scripts which have been adjusted for the autosetup build are edited to (re)use the older flag name. FossilOrigin-Name: 3296c8d30559eafa20f4748339177149172ecf79b019c42ed0d5ee9cf62a666a --- auto.def | 15 ++++++++++----- autosetup/autosetup | 8 ++++---- manifest | 17 ++++++++++------- manifest.uuid | 2 +- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/auto.def b/auto.def index 6b315f27f2..fc86c58bed 100644 --- a/auto.def +++ b/auto.def @@ -36,7 +36,8 @@ set DUMP_DEFINES_JSON ""; #./config.defines.json # # 1) --debug is used by autosetup itself, so we have to rename it to # --with-debug. We cannot use --enable-debug because that is, for -# autosetup, and alias for --debug=1. +# autosetup, and alias for --debug=1. Alternately, we can patch +# autosetup to use --autosetup-debug for its own purposes instead. # # 2) In autosetup, all flags starting with (--enable, --disable) are # forced to be booleans and receive special handling in how they're @@ -195,10 +196,13 @@ set flags { with-emsdk:=auto => {Top-most dir of the Emscripten SDK installation. Default = EMSDK env var.} # # - with-debug:=1 => + # Note that using the --debug/--enable-debug flag here requires patching + # autosetup/autosetup to rename the --debug to --autosetup-debug. + with-debug=0 + debug=0 => {Enable debug build flags. This option will impact performance by as much as 4x, as it includes large numbers of assert()s in - performance-critical loops. Never use --with-debug for production + performance-critical loops. Never use --debug for production builds.} scanstatus => {Enable the SQLITE_ENABLE_STMT_SCANSTATUS feature flag} dev => {Enable dev-mode build: automatically enables certain other flags} @@ -234,6 +238,7 @@ unset flags proj-xfer-options-aliases { with-readline-inc => with-readline-cflags with-readline-lib => with-readline-ldflags + with-debug => debug } set srcdir $::autosetup(srcdir) @@ -339,7 +344,7 @@ proj-if-opt-truthy dev { # which check for these flags will show the user their updated # state. proj-opt-set all 1 - proj-opt-set with-debug 1 + proj-opt-set debug 1 proj-opt-set amalgamation 0 define CFLAGS [get-env CFLAGS {-O0 -g}] } @@ -515,7 +520,7 @@ proj-define-for-opt linemacros AMALGAMATION_LINE_MACROS \ "Use #line macros in the amalgamation:" msg-checking "SQLITE_DEBUG build? " -proj-if-opt-truthy with-debug { +proj-if-opt-truthy debug { define SQLITE_DEBUG 1 define TARGET_DEBUG {-g -DSQLITE_DEBUG=1 -DSQLITE_ENABLE_SELECTTRACE -DSQLITE_ENABLE_WHERETRACE -O0 -Wall} msg-result yes diff --git a/autosetup/autosetup b/autosetup/autosetup index 90f5454b5f..1479fca407 100755 --- a/autosetup/autosetup +++ b/autosetup/autosetup @@ -9,7 +9,7 @@ dir=`dirname "$0"`; exec "`$dir/autosetup-find-tclsh`" "$0" "$@" set autosetup(version) 0.7.2 # Can be set to 1 to debug early-init problems -set autosetup(debug) [expr {"--debug" in $argv}] +set autosetup(debug) [expr {"--autosetup-debug" in $argv}] ################################################################## # @@ -98,7 +98,7 @@ proc main {argv} { version => "display the version of autosetup" ref:=text manual:=text reference:=text => "display the autosetup command reference. 'text', 'wiki', 'asciidoc' or 'markdown'" - debug => "display debugging output as autosetup runs" + autosetup-debug => "display debugging output as autosetup runs" install:=. => "install autosetup to the current or given directory" } if {$autosetup(installed)} { @@ -132,7 +132,7 @@ proc main {argv} { } # Debugging output (set this early) - incr autosetup(debug) [opt-bool debug] + incr autosetup(debug) [opt-bool autosetup-debug] incr autosetup(force) [opt-bool force] incr autosetup(msg-quiet) [opt-bool quiet] incr autosetup(msg-timing) [opt-bool timing] @@ -2530,7 +2530,7 @@ if {[catch {main $argv} msg opts] == 1} { show-notices autosetup-full-error [error-dump $msg $opts $autosetup(debug)] if {!$autosetup(debug)} { - puts stderr "Try: '[file tail $autosetup(exe)] --debug' for a full stack trace" + puts stderr "Try: '[file tail $autosetup(exe)] --autosetup-debug' for a full stack trace" } exit 1 } diff --git a/manifest b/manifest index 3f8f3a7d8d..c94527c6e2 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Move\ssome\sof\sthe\sin-comment\sconfigure\sscript\shelp\stext\sinto\sthe\s--help\stext.\sNo\sfunctional\schanges. -D 2024-11-26T16:12:05.631 +C Patch\sautosetup\sto\srename\s--debug\sto\s--autosetup-debug\sso\swe\scan\suse\s--debug/--enable-debug\sfor\sits\shistorical\spurpose.\s--with-debug\sis\snow\san\salias\sfor\s--enable-debug\sbut\scan\sbe\sremoved\sentirely\sif\sall\sscripts\swhich\shave\sbeen\sadjusted\sfor\sthe\sautosetup\sbuild\sare\sedited\sto\s(re)use\sthe\solder\sflag\sname. +D 2024-11-26T19:02:16.005 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F auto.def cb4d2a6a3809c3c015ad1d1e5a06836697f78e31b38f154cc20a7b0cb350e0d1 +F auto.def 961d2cf22b65d31f9eb97470b50cbbdca34b999cf86f438811c1ec214b296b8b F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -38,7 +38,7 @@ F autoconf/tea/win/targets.vc 96a25a1fa6e9e9cfb348fd3760a5395b4ce8acafc8ed10f041 F autosetup/LICENSE 41a26aebdd2cd185d1e2b210f71b7ce234496979f6b35aef2cbf6b80cbed4ce4 F autosetup/README.autosetup a78ff8c4a3d2636a4268736672a74bf14a82f42687fcf0631a70c516075c031e F autosetup/README.md f12fd1556b50ff33ebf5c1476f4640c6010b3093ba8d75ba12b5417884011d5e -F autosetup/autosetup 9416ffdcdd6e2dbf7f6d1e5c890078518930f8af7722a950eacc28c7f151d2d6 x +F autosetup/autosetup df8b53928b1fe3c67db5bc77c8e1eb8160c1b6a26c370e9a06c68748f803b7e4 x F autosetup/autosetup-config.guess dfa101c5e8220e864d5e9c72a85e87110df60260d36cb951ad0a85d6d9eaa463 x F autosetup/autosetup-config.sub a38fb074d0dece01cf919e9fb534a26011608aa8fa606490864295328526cd73 x F autosetup/autosetup-find-tclsh 25905f6c302959db80c2951aa267b4411c5645b598ce761cfc24a166141e2c4c x @@ -2199,8 +2199,11 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 7e634d0569667ce1e17f4a611039cbb726078dc2e6be1f1b19655dc569170ce5 -R b03ff8f40892202b2bfdeabe2bfe4328 +P ee8449c482b6f9cfb82fa2417da194fc9aa56f54ef3ac83d368537181634ab1c +R c2ee4fc9d127d16a71ba8ab0982dbb79 +T *branch * autosetup-debug-flag +T *sym-autosetup-debug-flag * +T -sym-trunk * Cancelled\sby\sbranch. U stephan -Z e952930a3cd549b7813b14b13b6d132c +Z 4f1cf71b215a7b4b77a2398c83036d85 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index baa37c3050..9aee3d801f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ee8449c482b6f9cfb82fa2417da194fc9aa56f54ef3ac83d368537181634ab1c +3296c8d30559eafa20f4748339177149172ecf79b019c42ed0d5ee9cf62a666a From e2a3c7232b061e03b05ac4d891737d57a77dd030 Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 26 Nov 2024 20:16:34 +0000 Subject: [PATCH 42/89] Update documentation in fts5.h. FossilOrigin-Name: f1e44f703acb415e2ff7d7f87fa05fc874ef1c432095bb3ccb45c6ad2fd085a9 --- ext/fts5/fts5.h | 19 ++++++++++++++++++- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/ext/fts5/fts5.h b/ext/fts5/fts5.h index 5305a6915d..6c4d238959 100644 --- a/ext/fts5/fts5.h +++ b/ext/fts5/fts5.h @@ -306,8 +306,25 @@ struct Fts5PhraseIter { ** It is the output of the tokenizer module. For tokendata=1 tables, this ** includes any embedded 0x00 and trailing data. ** +** This API may be slow in some cases if the token identified by parameters +** iIdx and iToken matched a prefix token in the query. In most cases, the +** first call to this API for each prefix token in the query is forced +** to scan the portion of the full-text index that matches the prefix +** token to collect the extra data required by this API. If the prefix +** token matches a large number of token instances in the document set, +** this may be a performance problem. +** +** If the user knows in advance that a query may use this API for a +** prefix token, FTS5 may be configured to collect all required data as part +** of the initial querying of the full-text index, avoiding the second scan +** entirely. This also causes prefix queries that do not use this API to +** run more slowly and use more memory. FTS5 may be configured in this way +** either on a per-table basis using the [FTS5 insttoken | 'insttoken'] +** option, or on a per-query basis using the +** [fts5_insttoken | fts5_insttoken()] user function. +** ** This API can be quite slow if used with an FTS5 table created with the -** "detail=none" or "detail=column" option. +** "detail=none" or "detail=column" option. ** ** xColumnLocale(pFts5, iIdx, pzLocale, pnLocale) ** If parameter iCol is less than zero, or greater than or equal to the diff --git a/manifest b/manifest index 75828653be..8dfeec1334 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\scompiler\swarnings\scaused\sby\svariable\sshadowing. -D 2024-11-20T20:39:18.431 +C Update\sdocumentation\sin\sfts5.h. +D 2024-11-26T20:16:34.989 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -106,7 +106,7 @@ F ext/fts3/unicode/UnicodeData.txt cd07314edb62d49fde34debdaf92fa2aa69011e7 F ext/fts3/unicode/mkunicode.tcl 63db9624ccf70d4887836c320eda93ab552f21008f3be7ede551eac3ead62baa F ext/fts3/unicode/parseunicode.tcl a981bd6466d12dd17967515801c3ff23f74a281be1a03cf1e6f52a6959fc77eb F ext/fts5/extract_api_docs.tcl 009cf59c77afa86d137b0cca3e3b1a5efbe2264faa2df233f9a7aa8563926d15 -F ext/fts5/fts5.h 6b4b92df890965567360db5f1ead24fd13a72cb23b95e4ed2ff58d1d89f7aa42 +F ext/fts5/fts5.h df1741b4dbf8446f663ba30ce6eca51ef1cef0dbc481806273fc8a0cc159f4b8 F ext/fts5/fts5Int.h 6abff7dd770dc5969c994c281e6e77fc277ce414d56cc4a62c145cc7036b0b67 F ext/fts5/fts5_aux.c 65a0468dd177d6093aa9ae1622e6d86b0136b8d267c62c0ad6493ad1e9a3d759 F ext/fts5/fts5_buffer.c 0eec58bff585f1a44ea9147eae5da2447292080ea435957f7488c70673cb6f09 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P edb842349320eda9550bdfcd5a327949c5512e02f4b993782587b2131a425746 -R 87e3d58f4f7440e00e0a55bcb770c2ab +P 211b305791980b24c4192ffc57a0471473de3fca32bfc146c0eeacedef7a88aa +R ce521c664e19e9b02f777e0b20a87e4f U dan -Z e1bc2b76da9d8c387af12aec8bd8d459 +Z 1b49bcb3c99dc54eba71f1872e2bcc4a # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 259f7f2dfa..5bd79817a5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -211b305791980b24c4192ffc57a0471473de3fca32bfc146c0eeacedef7a88aa +f1e44f703acb415e2ff7d7f87fa05fc874ef1c432095bb3ccb45c6ad2fd085a9 From f12e5d1a0f8376289a2e6447b91a07bd7a4850da Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 26 Nov 2024 20:56:03 +0000 Subject: [PATCH 43/89] Provide a two-argument version of the iif() function, plus an alternative spelling that only requires a single "i". FossilOrigin-Name: a251ee645e11e24b67473d8a5bd3f8b72fde1ac9d5fda074f5da2297deb2faa8 --- manifest | 20 +++++++++++--------- manifest.uuid | 2 +- src/func.c | 3 +++ test/e_expr.test | 15 ++++++++++++--- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index 229dfdc3aa..5b9a043667 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Update\sfts5\sso\sthat\sthe\sxInstToken()\sextension\sAPI\sworks\swith\sprefix\squeries. -D 2024-11-26T20:46:18.270 +C Provide\sa\stwo-argument\sversion\sof\sthe\siif()\sfunction,\splus\san\salternative\nspelling\sthat\sonly\srequires\sa\ssingle\s"i". +D 2024-11-26T20:56:03.273 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -729,7 +729,7 @@ F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42 F src/expr.c a9d9f5fdfbdd3b2c94d7af1b11f181464b8a641736cf32cb92fa3c5e7ecb30df F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 928ed2517e8732113d2b9821aa37af639688d752f4ea9ac6e0e393d713eeb76f -F src/func.c fa138d44348e189817542f6efa6232420b3e0081c835ced65883adc7fd777d65 +F src/func.c 49489dcce46d2d491cedb451e974264150c473e5f5bba448498a9aa4c1993537 F src/global.c a19e4b1ca1335f560e9560e590fc13081e21f670643367f99cb9e8f9dc7d615b F src/hash.c 9ee4269fb1d6632a6fecfb9479c93a1f29271bddbbaf215dd60420bcb80c7220 F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51 @@ -1102,7 +1102,7 @@ F test/e_createtable.test 31b9bcb6ac8876bc7ec342d86d9c231a84c62b442093a6651dfd0f F test/e_delete.test ab39084f26ae1f033c940b70ebdbbd523dc4962e F test/e_droptrigger.test 235c610f8bf8ec44513e222b9085c7e49fad65ad0c1975ac2577109dd06fd8fa F test/e_dropview.test 74e405df7fa0f762e0c9445b166fe03955856532e2bb234c372f7c51228d75e7 -F test/e_expr.test b950818a48269506d75a41c819003bd77a0893bc4a4f2fdee191bc74109c1a87 +F test/e_expr.test 4faef475076f676e2a009270dbd3a7658db30d12dc3d21e4b85cab5f50be18c5 F test/e_fkey.test feeba6238aeff9d809fb6236b351da8df4ae9bda89e088e54526b31a0cbfeec5 F test/e_fts3.test 17ba7c373aba4d4f5696ba147ee23fd1a1ef70782af050e03e262ca187c5ee07 F test/e_insert.test f02f7f17852b2163732c6611d193f84fc67bc641fb4882c77a464076e5eba80e @@ -2201,9 +2201,11 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 00dffd10f0c77fed53bdbf1536f6ef9b6076775f1b9a10794b87e3ace33ca1d9 f1e44f703acb415e2ff7d7f87fa05fc874ef1c432095bb3ccb45c6ad2fd085a9 -R 602e6f17d656c7098c104c9738f971e9 -T +closed f1e44f703acb415e2ff7d7f87fa05fc874ef1c432095bb3ccb45c6ad2fd085a9 -U dan -Z 2fe59ff619562212dac3a249eb517d01 +P 41b79bde4a4b6510b41cc9175ff2527fbd3ca9209812361783754f24cf67ef9e +R 95cdbd2d905cbccddf7c07f68d5125cd +T *branch * two-argument-iif +T *sym-two-argument-iif * +T -sym-trunk * +U drh +Z 4fbc11636a3ec850ec89d3d2892ea5e5 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 60ed7fd51d..cd297ba8a5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -41b79bde4a4b6510b41cc9175ff2527fbd3ca9209812361783754f24cf67ef9e +a251ee645e11e24b67473d8a5bd3f8b72fde1ac9d5fda074f5da2297deb2faa8 diff --git a/src/func.c b/src/func.c index 419ce24c62..2d25803e0d 100644 --- a/src/func.c +++ b/src/func.c @@ -2814,7 +2814,10 @@ void sqlite3RegisterBuiltinFunctions(void){ #endif /* SQLITE_ENABLE_MATH_FUNCTIONS */ FUNCTION(sign, 1, 0, 0, signFunc ), INLINE_FUNC(coalesce, -1, INLINEFUNC_coalesce, 0 ), + INLINE_FUNC(iif, 2, INLINEFUNC_iif, 0 ), INLINE_FUNC(iif, 3, INLINEFUNC_iif, 0 ), + INLINE_FUNC(if, 2, INLINEFUNC_iif, 0 ), + INLINE_FUNC(if, 3, INLINEFUNC_iif, 0 ), }; #ifndef SQLITE_OMIT_ALTERTABLE sqlite3AlterFunctions(); diff --git a/test/e_expr.test b/test/e_expr.test index 0db63a8ac4..6e2b649796 100644 --- a/test/e_expr.test +++ b/test/e_expr.test @@ -1232,12 +1232,18 @@ db nullvalue {} # EVIDENCE-OF: R-13943-13592 A NULL result is considered untrue when # evaluating WHEN terms. # -do_execsql_test e_expr-21.4.1 { +do_execsql_test e_expr-21.4.1a { SELECT CASE WHEN NULL THEN 'A' WHEN 1 THEN 'B' END, iif(NULL,8,99); } {B 99} -do_execsql_test e_expr-21.4.2 { +do_execsql_test e_expr-21.4.1b { + SELECT CASE WHEN NULL THEN 'A' WHEN 1 THEN 'B' END, if(NULL,8,99); +} {B 99} +do_execsql_test e_expr-21.4.2a { SELECT CASE WHEN 0 THEN 'A' WHEN NULL THEN 'B' ELSE 'C' END, iif(0,8,99); } {C 99} +do_execsql_test e_expr-21.4.2b { + SELECT CASE WHEN 0 THEN 'A' WHEN NULL THEN 'B' ELSE 'C' END, if(0,8,99); +} {C 99} # EVIDENCE-OF: R-38620-19499 In a CASE with a base expression, the base # expression is evaluated just once and the result is compared against @@ -1969,9 +1975,12 @@ do_execsql_test e_expr-37.5 { # EVIDENCE-OF: R-55532-10108 Values 1, 1.0, 0.1, -0.1 and '1english' are # considered to be true. # -do_execsql_test e_expr-37.6 { +do_execsql_test e_expr-37.6a { SELECT CASE WHEN 1 THEN 'true' ELSE 'false' END, iif(1,'true','false'); } {true true} +do_execsql_test e_expr-37.6b { + SELECT CASE WHEN 1 THEN 'true' ELSE 'false' END, if(1,'true'); +} {true true} do_execsql_test e_expr-37.7 { SELECT CASE WHEN 1.0 THEN 'true' ELSE 'false' END, iif(1.0,'true','false'); } {true true} From 966a158831cbfc3f5451736959fbbcf91b960c2b Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 26 Nov 2024 23:30:49 +0000 Subject: [PATCH 44/89] New test cases. FossilOrigin-Name: f1cb1a815a09d71eb52d5c7f2f4e5c7689535232dee365e46ac41cce7fd86c01 --- manifest | 17 +++++++---------- manifest.uuid | 2 +- test/json102.test | 24 ++++++++++++++++++++++++ test/subtype1.test | 10 ++++++++++ 4 files changed, 42 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 5b9a043667..39768dacac 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Provide\sa\stwo-argument\sversion\sof\sthe\siif()\sfunction,\splus\san\salternative\nspelling\sthat\sonly\srequires\sa\ssingle\s"i". -D 2024-11-26T20:56:03.273 +C New\stest\scases. +D 2024-11-26T23:30:49.285 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -1380,7 +1380,7 @@ F test/json/json-q1.txt 65f9d1cdcc4cffa9823fb73ed936aae5658700cd001fde448f68bfb9 F test/json/json-speed-check.sh 912ee03e700a65c827ee0c7b4752c21ec5ef69cf7679d2f482ca817042bead52 x F test/json/jsonb-q1.txt 1e180fe6491efab307e318b22879e3a736ac9a96539bbde7911a13ee5b33abc7 F test/json101.test 30db5b055b103ccabc53a29cfe6cda3345d07e171aeb25403dafa04f19e98b19 -F test/json102.test 4b3a0f94535f033239b67c13dbee8b47d2b5ee467e0f2fdab5eadf370bbe5fd3 +F test/json102.test 9b2e5ada10845ff84853b3feaae2ce51ce7145ae458f74c6a6cecc6ef6ee3ae1 F test/json103.test 53df87f83a4e5fa0c0a56eb29ff6c94055c6eb919f33316d62161a8880112dbe F test/json104.test 1b844a70cddcfa2e4cd81a5db0657b2e61e7f00868310f24f56a9ba0114348c1 F test/json105.test 043838b56e68f3252a0dcf5be1689016f6f3f05056f8dcfcdc9d074f4d932988 @@ -1697,7 +1697,7 @@ F test/subquery.test 903abf41049f8404256f7be24b3151328304a5b25162e17ab0079460237 F test/subquery2.test 90cf944b9de8204569cf656028391e4af1ccc8c0cc02d4ef38ee3be8de1ffb12 F test/subselect.test 0966aa8e720224dbd6a5e769a3ec2a723e332303 F test/substr.test a673e3763e247e9b5e497a6cacbaf3da2bd8ec8921c0677145c109f2e633f36b -F test/subtype1.test 7a9c55ed84d4ce551203d18046f925e293d75f69da81bff71aaf2696e4a2a748 +F test/subtype1.test 96fd2a59bfc845c955b5f339d23b37ef4d50de5f8a04acd1450a68605fa2e3e7 F test/superlock.test 85256830339a6871ce36a2ef591c3f67716a701b5497788fb2068b90159c2442 F test/swarmvtab.test 250231404fcac88f61a6c147bb0e3a118ed879278cd3ccb0ae2d3a729e1e8e26 F test/swarmvtab2.test c948cb2fdfc5b01d85e8f6d6504854202dc1a0782ab2a0ed61538f27cbd0aa5c @@ -2201,11 +2201,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 41b79bde4a4b6510b41cc9175ff2527fbd3ca9209812361783754f24cf67ef9e -R 95cdbd2d905cbccddf7c07f68d5125cd -T *branch * two-argument-iif -T *sym-two-argument-iif * -T -sym-trunk * +P a251ee645e11e24b67473d8a5bd3f8b72fde1ac9d5fda074f5da2297deb2faa8 +R 824c1bcdb1f9c6fee7135023d460cb90 U drh -Z 4fbc11636a3ec850ec89d3d2892ea5e5 +Z ccd3808eb790ff48c86b29439b672954 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index cd297ba8a5..fb01172fbb 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a251ee645e11e24b67473d8a5bd3f8b72fde1ac9d5fda074f5da2297deb2faa8 +f1cb1a815a09d71eb52d5c7f2f4e5c7689535232dee365e46ac41cce7fd86c01 diff --git a/test/json102.test b/test/json102.test index 1a00cb67ae..54a0e1e0e0 100644 --- a/test/json102.test +++ b/test/json102.test @@ -745,6 +745,30 @@ do_execsql_test json102-1610 { 5 {{"b":9}} json {{"b":9}} text {{"b":9}} json \ 6 {} null {} null {} null ] +do_execsql_test json102-1620 { + DELETE FROM t1; + INSERT INTO t1(x) VALUES('[null,123,4.5,"six",[7,8],{"b":9}]'); + WITH c(y) AS (VALUES(0),(1),(2),(3),(4),(5),(6)) + SELECT + y, + x->y AS '->', + CASE WHEN subtype(if(json_valid(x),x->y)) THEN 'json' + ELSE typeof(x->y) END AS 'type', + x->>y AS '->>', + CASE WHEN subtype(x->>y) THEN 'json' ELSE typeof(x->>y) END AS 'type', + json_extract(x,format('$[%d]',y)) AS 'json_extract', + CASE WHEN subtype(json_extract(x,format('$[%d]',y))) + THEN 'json' ELSE typeof(json_extract(x,format('$[%d]',y))) END AS 'type' + FROM c, t1 ORDER BY y; +} [list \ + 0 null json {} null {} null \ + 1 123 json 123 integer 123 integer \ + 2 4.5 json 4.5 real 4.5 real \ + 3 {"six"} json six text six text \ + 4 {[7,8]} json {[7,8]} text {[7,8]} json \ + 5 {{"b":9}} json {{"b":9}} text {{"b":9}} json \ + 6 {} null {} null {} null +] reset_db do_execsql_test json102-1700 { diff --git a/test/subtype1.test b/test/subtype1.test index 4d8e68e6af..6d0df4fa6b 100644 --- a/test/subtype1.test +++ b/test/subtype1.test @@ -73,5 +73,15 @@ do_execsql_test subtype1-320 { WHERE json_quote(y)='"1"'; } {1 {"1"}} +# 2024-11-26 +# subtype survives if() +# +do_execsql_test subtype1-400 { + WITH t400(id,j) AS (VALUES + (1,'{a:{x:1,y:2},b:{x:3,y:4}}'), + (2,'not json') + ) + SELECT id, subtype(if(json_valid(j,6),j->'a')) FROM t400; +} {1 74 2 0} finish_test From 0bce1d6c9fa87c5bdcbe1779deef0692ff629e4e Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 27 Nov 2024 18:01:25 +0000 Subject: [PATCH 45/89] Fix an inaccuracy in the documentation in fts5.h. FossilOrigin-Name: ec3ca6f17972a9624018ae352e5a4be8dc34602a4569c80e827e09cd7fbed7f7 --- ext/fts5/fts5.h | 4 +--- manifest | 15 +++++++-------- manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/ext/fts5/fts5.h b/ext/fts5/fts5.h index 6c4d238959..907ea232a4 100644 --- a/ext/fts5/fts5.h +++ b/ext/fts5/fts5.h @@ -298,9 +298,7 @@ struct Fts5PhraseIter { ** value returned by xInstCount(), SQLITE_RANGE is returned. Otherwise, ** output variable (*ppToken) is set to point to a buffer containing the ** matching document token, and (*pnToken) to the size of that buffer in -** bytes. This API is not available if the specified token matches a -** prefix query term. In that case both output variables are always set -** to 0. +** bytes. ** ** The output text is not a copy of the document text that was tokenized. ** It is the output of the tokenizer module. For tokendata=1 tables, this diff --git a/manifest b/manifest index b0e612caa9..2c47dca7a7 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Allow\sthe\siif()\sfunction\sto\swork\swith\stwo\sarguments.\s\sThe\sthird\sargument\sis\nthen\sassumed\sto\sbe\sNULL.\s\sAlso\sallow\sif()\sas\san\salternative\sspelling\sfor\siif(). -D 2024-11-26T23:40:54.327 +C Fix\san\sinaccuracy\sin\sthe\sdocumentation\sin\sfts5.h. +D 2024-11-27T18:01:25.186 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -103,7 +103,7 @@ F ext/fts3/unicode/UnicodeData.txt cd07314edb62d49fde34debdaf92fa2aa69011e7 F ext/fts3/unicode/mkunicode.tcl 63db9624ccf70d4887836c320eda93ab552f21008f3be7ede551eac3ead62baa F ext/fts3/unicode/parseunicode.tcl a981bd6466d12dd17967515801c3ff23f74a281be1a03cf1e6f52a6959fc77eb F ext/fts5/extract_api_docs.tcl 009cf59c77afa86d137b0cca3e3b1a5efbe2264faa2df233f9a7aa8563926d15 -F ext/fts5/fts5.h df1741b4dbf8446f663ba30ce6eca51ef1cef0dbc481806273fc8a0cc159f4b8 +F ext/fts5/fts5.h ff5d3cc88b29e41612bfb29eb723e29e38973de62ca75ba3e8f94ccb67f5b5f2 F ext/fts5/fts5Int.h 6abff7dd770dc5969c994c281e6e77fc277ce414d56cc4a62c145cc7036b0b67 F ext/fts5/fts5_aux.c 65a0468dd177d6093aa9ae1622e6d86b0136b8d267c62c0ad6493ad1e9a3d759 F ext/fts5/fts5_buffer.c 0eec58bff585f1a44ea9147eae5da2447292080ea435957f7488c70673cb6f09 @@ -2201,9 +2201,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 41b79bde4a4b6510b41cc9175ff2527fbd3ca9209812361783754f24cf67ef9e f1cb1a815a09d71eb52d5c7f2f4e5c7689535232dee365e46ac41cce7fd86c01 -R 824c1bcdb1f9c6fee7135023d460cb90 -T +closed f1cb1a815a09d71eb52d5c7f2f4e5c7689535232dee365e46ac41cce7fd86c01 -U drh -Z f391a3d677bdf348a89a60afcfdaaa8e +P 1e405c39a8405e2081ce061559d1aacc70055fc74ab86d886b973076a3fb124b +R 306a37bedf7a72c95bbfd16141af1dca +U dan +Z 0f8994542e0c6b090d32b7bcc99e7877 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 6f170f7b2f..2abc82dd83 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1e405c39a8405e2081ce061559d1aacc70055fc74ab86d886b973076a3fb124b +ec3ca6f17972a9624018ae352e5a4be8dc34602a4569c80e827e09cd7fbed7f7 From 60ad5266394ae6b5fe879618eaf81a42df081188 Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 28 Nov 2024 00:34:20 +0000 Subject: [PATCH 46/89] Enhancements to sqlite3ExprImpliesExpr() so that it realizes that "iif(A,B)" implies "A". FossilOrigin-Name: d96ecbee59b50eca25447456dfff2c168e8eade7a68e542932d5829f97debb31 --- manifest | 19 ++++++----- manifest.uuid | 2 +- src/expr.c | 90 ++++++++++++++++++++++++++++++++++++++++----------- src/where.c | 1 - 4 files changed, 83 insertions(+), 29 deletions(-) diff --git a/manifest b/manifest index 2c47dca7a7..a34db27f4e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\san\sinaccuracy\sin\sthe\sdocumentation\sin\sfts5.h. -D 2024-11-27T18:01:25.186 +C Enhancements\sto\ssqlite3ExprImpliesExpr()\sso\sthat\sit\srealizes\sthat\n"iif(A,B)"\simplies\s"A". +D 2024-11-28T00:34:20.169 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -726,7 +726,7 @@ F src/date.c 89ce1ff20512a7fa5070ba6e7dd5c171148ca7d580955795bf97c79c2456144a F src/dbpage.c db1be8adaf1f839ad733c08baeac5c22aa912f7b535865c0c061382602081360 F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42 -F src/expr.c a9d9f5fdfbdd3b2c94d7af1b11f181464b8a641736cf32cb92fa3c5e7ecb30df +F src/expr.c bc1e0266dfd88c996e509550220b74b46c7654b0818909adba8ba8227452cd3e F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 928ed2517e8732113d2b9821aa37af639688d752f4ea9ac6e0e393d713eeb76f F src/func.c 49489dcce46d2d491cedb451e974264150c473e5f5bba448498a9aa4c1993537 @@ -860,7 +860,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 F src/wal.c 8b7e309a8012659ac9275ad8cdcc6acaf73fa04b1090e38a01335f230fd10681 F src/wal.h ba252daaa94f889f4b2c17c027e823d9be47ce39da1d3799886bbd51f0490452 F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014 -F src/where.c 504d72098437ab97dfd3a71cea85e554381650f9dffde277c66603f3e34daddc +F src/where.c b34adb09fdb2a4f57a0bafd4194b501047ef383976fef9f0ac3f395f4881694d F src/whereInt.h 1e36ec50392f7cc3d93d1152d4338064cd522b87156a0739388b7e273735f0ca F src/wherecode.c 0c3d3199a2b769a5e2bb70feb5003dc85b3d86842ecaf903a47f2b4205ca5dab F src/whereexpr.c 0f93a29cabd3a338d09a1f5c6770620a1ac51ec1157f3229502a7e7767c60b6f @@ -2201,8 +2201,11 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 1e405c39a8405e2081ce061559d1aacc70055fc74ab86d886b973076a3fb124b -R 306a37bedf7a72c95bbfd16141af1dca -U dan -Z 0f8994542e0c6b090d32b7bcc99e7877 +P ec3ca6f17972a9624018ae352e5a4be8dc34602a4569c80e827e09cd7fbed7f7 +R 7e7059a06e37f0bd3101b74065b6331a +T *branch * expr-implies-expr +T *sym-expr-implies-expr * +T -sym-trunk * +U drh +Z 9da80189eab742fa7806914a5f17a037 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 2abc82dd83..f8884a526d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ec3ca6f17972a9624018ae352e5a4be8dc34602a4569c80e827e09cd7fbed7f7 +d96ecbee59b50eca25447456dfff2c168e8eade7a68e542932d5829f97debb31 diff --git a/src/expr.c b/src/expr.c index cc915987dd..68cb60012d 100644 --- a/src/expr.c +++ b/src/expr.c @@ -6180,16 +6180,20 @@ void sqlite3ExprIfFalseDup(Parse *pParse, Expr *pExpr, int dest,int jumpIfNull){ ** same as that currently bound to variable pVar, non-zero is returned. ** Otherwise, if the values are not the same or if pExpr is not a simple ** SQL value, zero is returned. +** +** If the SQLITE_EnableQPSG flag is set on the database connection, then +** this routine always returns false. */ -static int exprCompareVariable( +static SQLITE_NOINLINE int exprCompareVariable( const Parse *pParse, const Expr *pVar, const Expr *pExpr ){ - int res = 0; + int res = 2; int iVar; sqlite3_value *pL, *pR = 0; + if( (pParse->db->flags & SQLITE_EnableQPSG)!=0 ) return 2; sqlite3ValueFromExpr(pParse->db, pExpr, SQLITE_UTF8, SQLITE_AFF_BLOB, &pR); if( pR ){ iVar = pVar->iColumn; @@ -6199,12 +6203,11 @@ static int exprCompareVariable( if( sqlite3_value_type(pL)==SQLITE_TEXT ){ sqlite3_value_text(pL); /* Make sure the encoding is UTF-8 */ } - res = 0==sqlite3MemCompare(pL, pR, 0); + res = sqlite3MemCompare(pL, pR, 0) ? 2 : 0; } sqlite3ValueFree(pR); sqlite3ValueFree(pL); } - return res; } @@ -6230,12 +6233,10 @@ static int exprCompareVariable( ** just might result in some slightly slower code. But returning ** an incorrect 0 or 1 could lead to a malfunction. ** -** If pParse is not NULL then TK_VARIABLE terms in pA with bindings in -** pParse->pReprepare can be matched against literals in pB. The -** pParse->pVdbe->expmask bitmask is updated for each variable referenced. -** If pParse is NULL (the normal case) then any TK_VARIABLE term in -** Argument pParse should normally be NULL. If it is not NULL and pA or -** pB causes a return value of 2. +** If pParse is not NULL and SQLITE_EnableQPSG is off then TK_VARIABLE +** terms in pA with bindings in pParse->pReprepare can be matched against +** literals in pB. The pParse->pVdbe->expmask bitmask is updated for +** each variable referenced. */ int sqlite3ExprCompare( const Parse *pParse, @@ -6247,8 +6248,8 @@ int sqlite3ExprCompare( if( pA==0 || pB==0 ){ return pB==pA ? 0 : 2; } - if( pParse && pA->op==TK_VARIABLE && exprCompareVariable(pParse, pA, pB) ){ - return 0; + if( pParse && pA->op==TK_VARIABLE ){ + return exprCompareVariable(pParse, pA, pB); } combinedFlags = pA->flags | pB->flags; if( combinedFlags & EP_IntValue ){ @@ -6443,18 +6444,66 @@ static int exprImpliesNotNull( return 0; } +/* +** Return true if the boolean value of the expression is always either +** FALSE or NULL. +*/ +static int sqlite3ExprIsNotTrue(Expr *pExpr){ + int v; + if( pExpr->op==TK_NULL ) return 1; + if( pExpr->op==TK_TRUEFALSE && sqlite3ExprTruthValue(pExpr)==0 ) return 1; + v = 1; + if( sqlite3ExprIsInteger(pExpr, &v, 0) && v==0 ) return 1; + return 0; +} + +/* +** Return true if the expression is one of the following: +** +** CASE WHEN x THEN y END +** CASE WHEN x THEN y ELSE NULL END +** CASE WHEN x THEN y ELSE false END +** iif(x,y) +** iif(x,y,NULL) +** iif(x,y,false) +*/ +static int sqlite3ExprIsIIF(sqlite3 *db, const Expr *pExpr){ + ExprList *pList; + if( pExpr->op==TK_FUNCTION ){ + const char *z = pExpr->u.zToken; + FuncDef *pDef; + if( (z[0]!='i' && z[0]!='I') ) return 0; + if( pExpr->x.pList==0 ) return 0; + pDef = sqlite3FindFunction(db, z, pExpr->x.pList->nExpr, ENC(db), 0); + if( pDef==0 ) return 0; + if( (pDef->funcFlags & SQLITE_FUNC_INLINE)==0 ) return 0; + if( SQLITE_PTR_TO_INT(pDef->pUserData)!=INLINEFUNC_iif ) return 0; + }else if( pExpr->op==TK_CASE ){ + if( pExpr->pLeft!=0 ) return 0; + }else{ + return 0; + } + pList = pExpr->x.pList; + assert( pList!=0 ); + if( pList->nExpr==2 ) return 1; + if( pList->nExpr==3 && sqlite3ExprIsNotTrue(pList->a[2].pExpr) ) return 1; + return 0; +} + /* ** Return true if we can prove the pE2 will always be true if pE1 is ** true. Return false if we cannot complete the proof or if pE2 might ** be false. Examples: ** -** pE1: x==5 pE2: x==5 Result: true -** pE1: x>0 pE2: x==5 Result: false -** pE1: x=21 pE2: x=21 OR y=43 Result: true -** pE1: x!=123 pE2: x IS NOT NULL Result: true -** pE1: x!=?1 pE2: x IS NOT NULL Result: true -** pE1: x IS NULL pE2: x IS NOT NULL Result: false -** pE1: x IS ?2 pE2: x IS NOT NULL Result: false +** pE1: x==5 pE2: x==5 Result: true +** pE1: x>0 pE2: x==5 Result: false +** pE1: x=21 pE2: x=21 OR y=43 Result: true +** pE1: x!=123 pE2: x IS NOT NULL Result: true +** pE1: x!=?1 pE2: x IS NOT NULL Result: true +** pE1: x IS NULL pE2: x IS NOT NULL Result: false +** pE1: x IS ?2 pE2: x IS NOT NULL Result: false +** pE1: iif(x,y) pE2: x Result: true +** PE1: iif(x,y,0) pE2: x Result: true ** ** When comparing TK_COLUMN nodes between pE1 and pE2, if pE2 has ** Expr.iTable<0 then assume a table number given by iTab. @@ -6488,6 +6537,9 @@ int sqlite3ExprImpliesExpr( ){ return 1; } + if( sqlite3ExprIsIIF(pParse->db, pE1) ){ + return sqlite3ExprImpliesExpr(pParse,pE1->x.pList->a[0].pExpr,pE2,iTab); + } return 0; } diff --git a/src/where.c b/src/where.c index 1315a8cc37..5abb40eced 100644 --- a/src/where.c +++ b/src/where.c @@ -3564,7 +3564,6 @@ static int whereUsablePartialIndex( if( !whereUsablePartialIndex(iTab,jointype,pWC,pWhere->pLeft) ) return 0; pWhere = pWhere->pRight; } - if( pParse->db->flags & SQLITE_EnableQPSG ) pParse = 0; for(i=0, pTerm=pWC->a; inTerm; i++, pTerm++){ Expr *pExpr; pExpr = pTerm->pExpr; From bfb7f77a8cbad0958abd2e436431d46b345609bb Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 28 Nov 2024 00:58:37 +0000 Subject: [PATCH 47/89] Add two NEVER() conditions. FossilOrigin-Name: 4f358ad20dc8a45e7aaa1a1996b40abd39caf34be6556ed54e1e0c80572b7ac0 --- manifest | 15 ++++++--------- manifest.uuid | 2 +- src/expr.c | 4 ++-- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/manifest b/manifest index a34db27f4e..142c278cbf 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enhancements\sto\ssqlite3ExprImpliesExpr()\sso\sthat\sit\srealizes\sthat\n"iif(A,B)"\simplies\s"A". -D 2024-11-28T00:34:20.169 +C Add\stwo\sNEVER()\sconditions. +D 2024-11-28T00:58:37.403 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -726,7 +726,7 @@ F src/date.c 89ce1ff20512a7fa5070ba6e7dd5c171148ca7d580955795bf97c79c2456144a F src/dbpage.c db1be8adaf1f839ad733c08baeac5c22aa912f7b535865c0c061382602081360 F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42 -F src/expr.c bc1e0266dfd88c996e509550220b74b46c7654b0818909adba8ba8227452cd3e +F src/expr.c 9084ade243ef14259986230a5f3599459eaf7cf200b87b5fe8dc29187cdcde2c F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 928ed2517e8732113d2b9821aa37af639688d752f4ea9ac6e0e393d713eeb76f F src/func.c 49489dcce46d2d491cedb451e974264150c473e5f5bba448498a9aa4c1993537 @@ -2201,11 +2201,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P ec3ca6f17972a9624018ae352e5a4be8dc34602a4569c80e827e09cd7fbed7f7 -R 7e7059a06e37f0bd3101b74065b6331a -T *branch * expr-implies-expr -T *sym-expr-implies-expr * -T -sym-trunk * +P d96ecbee59b50eca25447456dfff2c168e8eade7a68e542932d5829f97debb31 +R c1720db3ecd4ced84ca8ae6628cd5f49 U drh -Z 9da80189eab742fa7806914a5f17a037 +Z c947295bb77ac6e7f18a91b6b404684e # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index f8884a526d..59b628059b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d96ecbee59b50eca25447456dfff2c168e8eade7a68e542932d5829f97debb31 +4f358ad20dc8a45e7aaa1a1996b40abd39caf34be6556ed54e1e0c80572b7ac0 diff --git a/src/expr.c b/src/expr.c index 68cb60012d..6c7a93118e 100644 --- a/src/expr.c +++ b/src/expr.c @@ -6475,9 +6475,9 @@ static int sqlite3ExprIsIIF(sqlite3 *db, const Expr *pExpr){ if( (z[0]!='i' && z[0]!='I') ) return 0; if( pExpr->x.pList==0 ) return 0; pDef = sqlite3FindFunction(db, z, pExpr->x.pList->nExpr, ENC(db), 0); - if( pDef==0 ) return 0; + if( NEVER(pDef==0) ) return 0; if( (pDef->funcFlags & SQLITE_FUNC_INLINE)==0 ) return 0; - if( SQLITE_PTR_TO_INT(pDef->pUserData)!=INLINEFUNC_iif ) return 0; + if( NEVER(SQLITE_PTR_TO_INT(pDef->pUserData)!=INLINEFUNC_iif) ) return 0; }else if( pExpr->op==TK_CASE ){ if( pExpr->pLeft!=0 ) return 0; }else{ From 3ff6aa6e3999a0e9fadbc80926e69e3f2b91ad68 Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 28 Nov 2024 01:47:44 +0000 Subject: [PATCH 48/89] The sqlite3ExprCompare() routine should always compare the same variables as equal to one another, regardless of whether or not QPSG is set. FossilOrigin-Name: df95d5209a77c0302e08ea7b1f248646fb2a062ba5beca898678aee0a1d03a3a --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/expr.c | 9 +++++++++ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 142c278cbf..24769f2a3d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\stwo\sNEVER()\sconditions. -D 2024-11-28T00:58:37.403 +C The\ssqlite3ExprCompare()\sroutine\sshould\salways\scompare\sthe\ssame\svariables\nas\sequal\sto\sone\sanother,\sregardless\sof\swhether\sor\snot\sQPSG\sis\sset. +D 2024-11-28T01:47:44.201 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -726,7 +726,7 @@ F src/date.c 89ce1ff20512a7fa5070ba6e7dd5c171148ca7d580955795bf97c79c2456144a F src/dbpage.c db1be8adaf1f839ad733c08baeac5c22aa912f7b535865c0c061382602081360 F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42 -F src/expr.c 9084ade243ef14259986230a5f3599459eaf7cf200b87b5fe8dc29187cdcde2c +F src/expr.c 4c63e54936581c817ae8016206d166d80984767dcbe8260335d30a3a949b46b8 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 928ed2517e8732113d2b9821aa37af639688d752f4ea9ac6e0e393d713eeb76f F src/func.c 49489dcce46d2d491cedb451e974264150c473e5f5bba448498a9aa4c1993537 @@ -2201,8 +2201,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P d96ecbee59b50eca25447456dfff2c168e8eade7a68e542932d5829f97debb31 -R c1720db3ecd4ced84ca8ae6628cd5f49 +P 4f358ad20dc8a45e7aaa1a1996b40abd39caf34be6556ed54e1e0c80572b7ac0 +R bf789819bbc729d8b5b556765482541d U drh -Z c947295bb77ac6e7f18a91b6b404684e +Z cce72d62fb16414e1a59b528ee955fa0 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 59b628059b..f688f406bf 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4f358ad20dc8a45e7aaa1a1996b40abd39caf34be6556ed54e1e0c80572b7ac0 +df95d5209a77c0302e08ea7b1f248646fb2a062ba5beca898678aee0a1d03a3a diff --git a/src/expr.c b/src/expr.c index 6c7a93118e..709d90fad4 100644 --- a/src/expr.c +++ b/src/expr.c @@ -6193,6 +6193,15 @@ static SQLITE_NOINLINE int exprCompareVariable( int iVar; sqlite3_value *pL, *pR = 0; + if( pExpr->op==TK_VARIABLE ){ + assert( pVar->u.zToken!=0 ); + assert( pExpr->u.zToken!=0 ); + if( pVar->iColumn==pExpr->iColumn + && strcmp(pVar->u.zToken,pExpr->u.zToken)==0 + ){ + return 0; + } + } if( (pParse->db->flags & SQLITE_EnableQPSG)!=0 ) return 2; sqlite3ValueFromExpr(pParse->db, pExpr, SQLITE_UTF8, SQLITE_AFF_BLOB, &pR); if( pR ){ From dc7b94e63f682db6ccda6ae41bf105ce8bbb0a5c Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 28 Nov 2024 02:09:27 +0000 Subject: [PATCH 49/89] Simplification to the fix in the prior check-in. FossilOrigin-Name: f79cb748c9447ca4d2184a24219feb19571eb79870e0bedf14704743a3d5f8b9 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/expr.c | 10 ++-------- 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/manifest b/manifest index 24769f2a3d..08329b81dc 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C The\ssqlite3ExprCompare()\sroutine\sshould\salways\scompare\sthe\ssame\svariables\nas\sequal\sto\sone\sanother,\sregardless\sof\swhether\sor\snot\sQPSG\sis\sset. -D 2024-11-28T01:47:44.201 +C Simplification\sto\sthe\sfix\sin\sthe\sprior\scheck-in. +D 2024-11-28T02:09:27.502 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -726,7 +726,7 @@ F src/date.c 89ce1ff20512a7fa5070ba6e7dd5c171148ca7d580955795bf97c79c2456144a F src/dbpage.c db1be8adaf1f839ad733c08baeac5c22aa912f7b535865c0c061382602081360 F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42 -F src/expr.c 4c63e54936581c817ae8016206d166d80984767dcbe8260335d30a3a949b46b8 +F src/expr.c b838969c58a38dfedabec18c432204895c7333d7a509a20fa63c39bf92001f0e F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 928ed2517e8732113d2b9821aa37af639688d752f4ea9ac6e0e393d713eeb76f F src/func.c 49489dcce46d2d491cedb451e974264150c473e5f5bba448498a9aa4c1993537 @@ -2201,8 +2201,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 4f358ad20dc8a45e7aaa1a1996b40abd39caf34be6556ed54e1e0c80572b7ac0 -R bf789819bbc729d8b5b556765482541d +P df95d5209a77c0302e08ea7b1f248646fb2a062ba5beca898678aee0a1d03a3a +R 2a463ba8c7e54a6e85c2163c1e1ce03b U drh -Z cce72d62fb16414e1a59b528ee955fa0 +Z 5b8128e8d052469f340725fed84274b9 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index f688f406bf..d656caede7 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -df95d5209a77c0302e08ea7b1f248646fb2a062ba5beca898678aee0a1d03a3a +f79cb748c9447ca4d2184a24219feb19571eb79870e0bedf14704743a3d5f8b9 diff --git a/src/expr.c b/src/expr.c index 709d90fad4..d0282f7147 100644 --- a/src/expr.c +++ b/src/expr.c @@ -6193,14 +6193,8 @@ static SQLITE_NOINLINE int exprCompareVariable( int iVar; sqlite3_value *pL, *pR = 0; - if( pExpr->op==TK_VARIABLE ){ - assert( pVar->u.zToken!=0 ); - assert( pExpr->u.zToken!=0 ); - if( pVar->iColumn==pExpr->iColumn - && strcmp(pVar->u.zToken,pExpr->u.zToken)==0 - ){ - return 0; - } + if( pExpr->op==TK_VARIABLE && pVar->iColumn==pExpr->iColumn ){ + return 0; } if( (pParse->db->flags & SQLITE_EnableQPSG)!=0 ) return 2; sqlite3ValueFromExpr(pParse->db, pExpr, SQLITE_UTF8, SQLITE_AFF_BLOB, &pR); From fed5234fb324d7b91db24227f844f979f6815ea7 Mon Sep 17 00:00:00 2001 From: stephan Date: Thu, 28 Nov 2024 15:52:21 +0000 Subject: [PATCH 50/89] ext/icu/README.txt: clean up EOL whitespace and add a mention of the --with-icu-... configure flags available as of version 3.48. FossilOrigin-Name: 4976ac717bec2f2c89d94ac1d9b96afd1da573ba34e3c78637c3937287635e72 --- ext/icu/README.txt | 36 ++++++++++++++++++++---------------- manifest | 15 +++++++-------- manifest.uuid | 2 +- 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/ext/icu/README.txt b/ext/icu/README.txt index c3c35a2c6f..40def24662 100644 --- a/ext/icu/README.txt +++ b/ext/icu/README.txt @@ -1,19 +1,18 @@ - This directory contains source code for the SQLite "ICU" extension, an integration of the "International Components for Unicode" library with SQLite. Documentation follows. 1. Features - + 1.1 SQL Scalars upper() and lower() 1.2 Unicode Aware LIKE Operator 1.3 ICU Collation Sequences 1.4 SQL REGEXP Operator - + 2. Compilation and Usage - + 3. Bugs, Problems and Security Issues - + 3.1 The "case_sensitive_like" Pragma 3.2 The SQLITE_MAX_LIKE_PATTERN_LENGTH Macro 3.3 Collation Sequence Security Issue @@ -23,10 +22,10 @@ SQLite. Documentation follows. 1.1 SQL Scalars upper() and lower() - SQLite's built-in implementations of these two functions only + SQLite's built-in implementations of these two functions only provide case mapping for the 26 letters used in the English language. The ICU based functions provided by this extension - provide case mapping, where defined, for the full range of + provide case mapping, where defined, for the full range of unicode characters. ICU provides two types of case mapping, "general" case mapping and @@ -36,7 +35,7 @@ SQLite. Documentation follows. http://www.icu-project.org/userguide/caseMappings.html http://www.icu-project.org/userguide/posix.html#case_mappings - To utilise "general" case mapping, the upper() or lower() scalar + To utilise "general" case mapping, the upper() or lower() scalar functions are invoked with one argument: upper('abc') -> 'ABC' @@ -57,7 +56,7 @@ SQLite. Documentation follows. operator understands case equivalence for the 26 letters of the English language alphabet. The implementation of LIKE included in this extension uses the ICU function u_foldCase() to provide case - independent comparisons for the full range of unicode characters. + independent comparisons for the full range of unicode characters. The U_FOLD_CASE_DEFAULT flag is passed to u_foldCase(), meaning the dotless 'I' character used in the Turkish language is considered @@ -66,9 +65,9 @@ SQLite. Documentation follows. 1.3 ICU Collation Sequences - A special SQL scalar function, icu_load_collation() is provided that + A special SQL scalar function, icu_load_collation() is provided that may be used to register ICU collation sequences with SQLite. It - is always called with exactly two arguments, the ICU locale + is always called with exactly two arguments, the ICU locale identifying the collation sequence to ICU, and the name of the SQLite collation sequence to create. For example, to create an SQLite collation sequence named "turkish" using Turkish language @@ -87,7 +86,7 @@ SQLite. Documentation follows. australian_penpal_name TEXT COLLATE australian, turkish_penpal_name TEXT COLLATE turkish ); - + 1.4 SQL REGEXP Operator This extension provides an implementation of the SQL binary @@ -116,7 +115,7 @@ SQLite. Documentation follows. and use it as a dynamically loadable SQLite extension. To do this using gcc on *nix: - gcc -fPIC -shared icu.c `pkg-config --libs --cflags icu-uc icu-io` \ + gcc -fPIC -shared icu.c `pkg-config --libs --cflags icu-io` \ -o libSqliteIcu.so You may need to add "-I" flags so that gcc can find sqlite3ext.h @@ -124,6 +123,11 @@ SQLite. Documentation follows. loaded into sqlite in the same way as any other dynamically loadable extension. + As of version 3.48, it can be enabled in the canonical build process + by passing one of --with-icu-config or --with-icu-ldflags to the + configure script, optionally together with --enable-icu-collations. + See the configure --help for more details. + 3 BUGS, PROBLEMS AND SECURITY ISSUES @@ -144,13 +148,13 @@ SQLite. Documentation follows. SQLITE_MAX_LIKE_PATTERN_LENGTH macro as the maximum length of a pattern in bytes (irrespective of encoding). The default value is defined in internal header file "limits.h". - - The ICU extension LIKE implementation suffers from the same + + The ICU extension LIKE implementation suffers from the same problem and uses the same solution. However, since the ICU extension code does not include the SQLite file "limits.h", modifying the default value therein does not affect the ICU extension. The default value of SQLITE_MAX_LIKE_PATTERN_LENGTH used by - the ICU extension LIKE operator is 50000, defined in source + the ICU extension LIKE operator is 50000, defined in source file "icu.c". 3.3 Collation Sequence Security diff --git a/manifest b/manifest index 6acd2d5b11..b7f9c03141 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improvements\sto\ssqlite3ExprImpliesExpr()\sso\sthat\sit\srecognizes\sthat\sexpressions\slike\s"iif(X,Y)"\sand\s"CASE\sWHEN\sX\sTHEN\sY\sEND"\simply\sX. -D 2024-11-28T11:52:18.714 +C ext/icu/README.txt:\sclean\sup\sEOL\swhitespace\sand\sadd\sa\smention\sof\sthe\s--with-icu-...\sconfigure\sflags\savailable\sas\sof\sversion\s3.48. +D 2024-11-28T15:52:21.879 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -270,7 +270,7 @@ F ext/fts5/tool/fts5txt2db.tcl c0d43c8590656f8240e622b00957b3a0facc49482411a9fdc F ext/fts5/tool/loadfts5.tcl 95b03429ee6b138645703c6ca192c3ac96eaf093 F ext/fts5/tool/mkfts5c.tcl 135b9e160f8e10211c10c5873d5e8c3eaebd3da9ec56a12ae4db157d4738ffe4 F ext/fts5/tool/showfts5.tcl d54da0e067306663e2d5d523965ca487698e722c -F ext/icu/README.txt 7ab7ced8ae78e3a645b57e78570ff589d4c672b71370f5aa9e1cd7024f400fc9 +F ext/icu/README.txt 1f8d76e10d2385fc77914a14ccd99acfbaf68111dfcf26a360ad9063787f57fb F ext/icu/icu.c 9837f4611915baad1edbe38222f3ee7d1b5e118ab16fec9ba603720f72c78b2a F ext/icu/sqliteicu.h fa373836ed5a1ee7478bdf8a1650689294e41d0c89c1daab26e9ae78a32075a8 F ext/intck/intck1.test f3a3cba14b6aeff145ffa5515546dd22f7510dad91512e519f43b92b56514012 @@ -2201,9 +2201,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P ec3ca6f17972a9624018ae352e5a4be8dc34602a4569c80e827e09cd7fbed7f7 f79cb748c9447ca4d2184a24219feb19571eb79870e0bedf14704743a3d5f8b9 -R 2a463ba8c7e54a6e85c2163c1e1ce03b -T +closed f79cb748c9447ca4d2184a24219feb19571eb79870e0bedf14704743a3d5f8b9 -U drh -Z d7886908d3bdbdc117a1626da09a8266 +P eb5ac9e5b9a4f9c85a2203107697da14c07c1667037dff672f9d786cea964a37 +R 78a02244626590a5fbc0925d20e4f240 +U stephan +Z fdab33deaf1f469df2a1f2ef0d0eef73 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 2b2172d181..cd1048f863 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -eb5ac9e5b9a4f9c85a2203107697da14c07c1667037dff672f9d786cea964a37 +4976ac717bec2f2c89d94ac1d9b96afd1da573ba34e3c78637c3937287635e72 From 187c115a692aad44703d1ebd6bf6d242d4c4ff53 Mon Sep 17 00:00:00 2001 From: stephan Date: Thu, 28 Nov 2024 16:14:19 +0000 Subject: [PATCH 51/89] Configure script doc updates and cleanups. Skip check for EMSDK when doing an out-of-tree build, as ext/wasm does not support that build mode. FossilOrigin-Name: 9d2f4148db1641e9bf2989c2b1adf5b9dcb2b123526ecacd063bca208b3c36cf --- auto.def | 207 +++++++++++++++++++++++---------------------- autosetup/proj.tcl | 7 +- manifest | 14 +-- manifest.uuid | 2 +- 4 files changed, 119 insertions(+), 111 deletions(-) diff --git a/auto.def b/auto.def index fc86c58bed..9cea6a3dc1 100644 --- a/auto.def +++ b/auto.def @@ -36,14 +36,15 @@ set DUMP_DEFINES_JSON ""; #./config.defines.json # # 1) --debug is used by autosetup itself, so we have to rename it to # --with-debug. We cannot use --enable-debug because that is, for -# autosetup, and alias for --debug=1. Alternately, we can patch +# autosetup, an alias for --debug=1. Alternately, we can patch # autosetup to use --autosetup-debug for its own purposes instead. # # 2) In autosetup, all flags starting with (--enable, --disable) are # forced to be booleans and receive special handling in how they're # resolved. Because of that we have to rename: # -# 2.1) --enable-tempstore[=no] to --with-tempstore[=no]. +# 2.1) --enable-tempstore[=no] to --with-tempstore[=no], noting that +# it has four legal values, not two. # ######################################################################## # A gentle introduction to flags handling in autosetup @@ -65,17 +66,16 @@ set DUMP_DEFINES_JSON ""; #./config.defines.json # # Autosetup does no small amount of specialized handling for flags, # especially booleans. Each bool-type --FLAG implicitly gets -# --enable-FLAG and --disable-FLAG forms, and explicitly adding flags -# with those prefixes will force them to be boolean flags. e.g. we -# define a flag "readline", which will be interpreted in one of two -# ways, depending on how it's invoked and how its default is defined: +# --enable-FLAG and --disable-FLAG forms. e.g. we define a flag +# "readline", which will be interpreted in one of two ways, depending +# on how it's invoked and how its default is defined: # # --enable-readline ==> boolean true # --disable-readline ==> boolean false # -# Trying to pass --readline or --readline=1 or --readline=0 will -# result in an "unrecognized option" error, despite the the [options] -# call listing the flag as "readline". +# Passing --readline or --readline=1 is equivalent to passing +# --enable-readline, and --readline=0 is equivalent to +# --disable-readline. # # The behavior described above can lead lead to some confusion when # writing help text. For example: @@ -83,7 +83,7 @@ set DUMP_DEFINES_JSON ""; #./config.defines.json # options { json=1 {Disable JSON functions} } # # The reason the help text says "disable" is because a boolean option -# defaulting to true is, in the --help text, rendered as: +# which defaults to true is, in the --help text, rendered as: # # --disable-json Disable JSON functions # @@ -93,22 +93,7 @@ set DUMP_DEFINES_JSON ""; #./config.defines.json # # Non-boolean flags, in contrast, use the names specifically given to # them in the [options] invocation. e.g. "with-tcl" is the --with-tcl -# flag. Autosetup may, however, choose to automatically alter the help -# text, as demonstrated here: -# -# options { -# readline=1 => {Disable readline support} -# with-readline-lib: => {Readline library} -# with-readline-inc: => {Readline include paths} -# } -# -# $ ./configure --help | grep readline -# --disable-readline disable readline support -# --with-readline-lib specify readline library -# --with-readline-inc specify readline include paths -# -# Note that it prefixed and lower-case the help message. Whether -# that's a feature or a bug can be debated. +# flag. # # Fetching values for flags: # @@ -120,12 +105,15 @@ set DUMP_DEFINES_JSON ""; #./config.defines.json # # Non-boolean (i.e. string) flags: # - [opt-val FLAG ?default?] +# - [opt-str ...] - see the docs in ./autosetup/autosetup # ######################################################################## set flags { # When writing {help text blocks}, be aware that autosetup formats - # them differently (left-aligned, under the --flag, if the block - # starts with a newline. + # them differently (left-aligned, directly under the --flag) if the + # block starts with a newline. It does NOT expand vars and commands, + # but we use a [subst] call below which will replace (only) var + # refs. # shared=1 => {Disable build of shared libary} @@ -153,7 +141,9 @@ set flags { # with-tcl:DIR => {Directory containing tclConfig.sh or a directory one level up from - that, from which we can derive a directory containing tclConfig.sh.} + that, from which we can derive a directory containing tclConfig.sh. + A dir name of "prefix" is equivalent to the directory specified by + the --prefix flag.} with-tclsh:PATH => {Full pathname of tclsh to use. It is used for (A) trying to find tclConfig.sh and (B) all TCL-based code generation. Warning: if @@ -315,18 +305,17 @@ proj-file-extensions if {".exe" eq [get-define TARGET_EXEEXT]} { define SQLITE_OS_UNIX 0 define SQLITE_OS_WIN 1 - # todo? add -DSQLITE_OS_WIN=1 to CFLAGS or CFLAGS_sqlite3_os? } else { define SQLITE_OS_UNIX 1 define SQLITE_OS_WIN 0 - # todo? add -DSQLITE_OS_UNIX=1 to CFLAGS or CFLAGS_sqlite3_os } ######### # Programs needed -cc-check-tools ld ar ; # must come before sqlite-check-wasi-sdk +cc-check-tools ld ar ; # must come before [sqlite-check-wasi-sdk] if {"" eq [proj-bin-define install]} { proj-warn "Cannot find install binary, so 'make install' will not work." + define BIN_INSTALL false } ######################################################################## @@ -341,21 +330,18 @@ define BUILD_CFLAGS [proj-get-env BUILD_CFLAGS {-g}] proj-if-opt-truthy dev { # --enable-dev needs to come early so that the downstream tests - # which check for these flags will show the user their updated - # state. + # which check for the following flags use their updated state. proj-opt-set all 1 proj-opt-set debug 1 proj-opt-set amalgamation 0 define CFLAGS [get-env CFLAGS {-O0 -g}] } -define LINK_TOOLS_DYNAMICALLY [proj-opt-was-provided dynlink-tools] - ######################################################################## # Handle --with-wasi-sdk=DIR # -# This must be run early on because it may change the toolchain and -# disable a number of config options. +# This must be run relatively early on because it may change the +# toolchain and disable a number of config options. proc sqlite-check-wasi-sdk {} { set wasiSdkDir [opt-val with-wasi-sdk] ; # ??? [lindex [opt-val with-wasi-sdk] end] define HAVE_WASI_SDK 0 @@ -374,6 +360,7 @@ proc sqlite-check-wasi-sdk {} { msg-result "Using wasi-sdk clang. Disabling CLI shell modifying config flags:" # Boolean (--enable-/--disable-) flags which must be switched off: foreach opt { + dynlink-tools editline gcov icu-collations @@ -425,6 +412,11 @@ proc sqlite-check-wasi-sdk {} { }; # sqlite-check-wasi-sdk sqlite-check-wasi-sdk +######################################################################## +# --dynlink-tools tells the build to dynamically link certain binaries +# to libsqlite3.so instead of embedding a copy of the amalgamation. +define LINK_TOOLS_DYNAMICALLY [proj-opt-was-provided dynlink-tools] + # # Enable large file support (if special flags are necessary) define HAVE_LFS 0 @@ -475,7 +467,11 @@ apply {{} { if {[proj-opt-was-provided soname]} { set soname [join [opt-val soname] ""] } else { - set soname none; # enabling soname breaks linking for the --dynlink-tools feature + # Enabling soname breaks linking for the --dynlink-tools feature, + # and this project has no direct use for soname, so default to + # none. Package maintainers, on the other hand, like to have an + # soname. + set soname none } switch -exact -- $soname { none - "" { return 0 } @@ -498,6 +494,7 @@ apply {{} { # --soname was explicitly requested but not available, so fail fatally proj-fatal "This environment does not support SONAME." } else { + # --soname was not explicitly requested but not available, so just warn msg-result "This environment does not support SONAME." } }} @@ -560,6 +557,7 @@ proj-if-opt-truthy debug { # failure to find TCL is not fatal but a loud warning will be emitted. # proc sqlite-check-tcl {} { + rename sqlite-check-tcl "" define TCLSH_CMD false ; # Significant is that it exits with non-0 define HAVE_TCL 0 ; # Will be enabled via --tcl or a successful search define TCLLIBDIR "" ; # Installation dir for TCL extension lib @@ -568,8 +566,8 @@ proc sqlite-check-tcl {} { if {![opt-bool tcl]} { proj-indented-notice { NOTE: TCL is disabled via --disable-tcl. This means that none - of the TCL-based components, including tests and sqlite3_analyzer, - will be built. + of the TCL-based components will be built, including tests + and sqlite3_analyzer. } return } @@ -687,8 +685,8 @@ proc sqlite-check-tcl {} { # in main.mk (search it for T.tcl.env.sh) so that # static/hand-written makefiles which import main.mk do not have # to define that before importing main.mk. Even so, we export - # TCLLIBDIR from here, which will cause the makefile to use this - # one rather than to re-calculate it at make-time. + # TCLLIBDIR from here, which will cause the canonical makefile to + # use this one rather than to re-calculate it at make-time. set tcllibdir [get-env TCLLIBDIR ""] if {"" eq $tcllibdir} { # Attempt to extract TCLLIBDIR from TCL's $auto_path @@ -743,7 +741,7 @@ sqlite-check-tcl # sqlite-determine-codegen-tcl checks which TCL to use as a code # generator. By default, prefer jimsh simply because we have it # in-tree (it's part of autosetup) unless --with-tclsh=X is used, in -# which case prefix X. +# which case prefer X. # # Returns the human-readable name of the TCL it selects. Fails fatally # if it cannot detect a TCL appropriate for code generation. @@ -759,9 +757,16 @@ sqlite-check-tcl set useJimForCodeGen 0 ; # Set to 1 when using jimsh for code generation. # May affect later decisions. proc sqlite-determine-codegen-tcl {} { + rename sqlite-determine-codegen-tcl "" msg-result "Checking for TCL to use for code generation... " define CFLAGS_JIMSH [proj-get-env CFLAGS_JIMSH {-O1}] set cgtcl [opt-val with-tclsh jimsh] + if {"jimsh" ne $cgtcl} { + # When --with-tclsh=X is used, use that for all TCL purposes, + # including in-tree code generation, per developer request. + define BTCLSH "\$(TCLSH_CMD)" + return $cgtcl + } set flagsToRestore {CC CFLAGS AS_CFLAGS CPPFLAGS AS_CPPFLAGS LDFLAGS LINKFLAGS LIBS CROSS} define-push $flagsToRestore { # We have to swap CC to CC_FOR_BUILD for purposes of the various @@ -775,56 +780,50 @@ proc sqlite-determine-codegen-tcl {} { # block. foreach flag $flagsToRestore {define $flag ""} define CC [get-define CC_FOR_BUILD] - if {"jimsh" ne $cgtcl} { - # When --with-tclsh=X is used, use that for all TCL purposes, - # including in-tree code generation, per developer request. + # These headers are technically optional for JimTCL but necessary if + # we want to use it for code generation: + set sysh [cc-check-includes dirent.h sys/time.h] + # jimsh0.c hard-codes #define's for HAVE_DIRENT_H and + # HAVE_SYS_TIME_H on the platforms it supports, so we do not + # need to add -D... flags for those. We check for them here only + # so that we can avoid the situation that we later, at + # make-time, try to compile jimsh but it then fails due to + # missing headers (i.e. fail earlier rather than later). + if {$sysh && [cc-check-functions realpath]} { + define-append CFLAGS_JIMSH -DHAVE_REALPATH + define BTCLSH "\$(JIMSH)" + set ::useJimForCodeGen 1 + } elseif {$sysh && [cc-check-functions _fullpath]} { + # _fullpath() is a Windows API. It's not entirely clear + # whether we need to add {-DHAVE_SYS_TIME_H -DHAVE_DIRENT_H} + # to CFLAGS_JIMSH in this case. On MinGW32 we definitely do + # not want to because it already hard-codes them. On _MSC_VER + # builds it does not. + define-append CFLAGS_JIMSH -DHAVE__FULLPATH + define BTCLSH "\$(JIMSH)" + set ::useJimForCodeGen 1 + } elseif {[file-isexec [get-define TCLSH_CMD]]} { + set cgtcl [get-define TCLSH_CMD] define BTCLSH "\$(TCLSH_CMD)" } else { - # These headers are technically optional for JimTCL but necessary if - # we want to use it for code generation: - set sysh [cc-check-includes dirent.h sys/time.h] - # jimsh0.c hard-codes #define's for HAVE_DIRENT_H and - # HAVE_SYS_TIME_H on the platforms it supports, so we do not - # need to add -D... flags for those. We check for them here only - # so that we can avoid the situation that we later, at - # make-time, try to compile jimsh but it then fails due to - # missing headers (i.e. fail earlier rather than later). - if {$sysh && [cc-check-functions realpath]} { - define-append CFLAGS_JIMSH -DHAVE_REALPATH - define BTCLSH "\$(JIMSH)" - set ::useJimForCodeGen 1 - } elseif {$sysh && [cc-check-functions _fullpath]} { - # _fullpath() is a Windows API. It's not entirely clear - # whether we need to add {-DHAVE_SYS_TIME_H -DHAVE_DIRENT_H} - # to CFLAGS_JIMSH in this case. On MinGW32 we definitely do - # not want to because it already hard-codes them. On _MSC_VER - # builds it does not. - define-append CFLAGS_JIMSH -DHAVE__FULLPATH - define BTCLSH "\$(JIMSH)" - set ::useJimForCodeGen 1 - } elseif {[file-isexec [get-define TCLSH_CMD]]} { - set cgtcl [get-define TCLSH_CMD] - define BTCLSH "\$(TCLSH_CMD)" - } else { - # One last-ditch effort to find TCLSH_CMD: use info from - # tclConfig.sh to try to find a tclsh - if {"" eq [get-define TCLSH_CMD]} { - set tpre [get-define TCL_EXEC_PREFIX] - if {"" ne $tpre} { - set tv [get-define TCL_VERSION] - if {[file-isexec "${tpre}/bin/tclsh${tv}"]} { - define TCLSH_CMD "${tpre}/bin/tclsh${tv}" - } elseif {[file-isexec "${tpre}/bin/tclsh"]} { - define TCLSH_CMD "${tpre}/bin/tclsh" - } + # One last-ditch effort to find TCLSH_CMD: use info from + # tclConfig.sh to try to find a tclsh + if {"" eq [get-define TCLSH_CMD]} { + set tpre [get-define TCL_EXEC_PREFIX] + if {"" ne $tpre} { + set tv [get-define TCL_VERSION] + if {[file-isexec "${tpre}/bin/tclsh${tv}"]} { + define TCLSH_CMD "${tpre}/bin/tclsh${tv}" + } elseif {[file-isexec "${tpre}/bin/tclsh"]} { + define TCLSH_CMD "${tpre}/bin/tclsh" } } - set cgtcl [get-define TCLSH_CMD] - if {![file-isexec $cgtcl]} { - proj-fatal "Cannot find a tclsh to use for code generation." - } - define BTCLSH "\$(TCLSH_CMD)" } + set cgtcl [get-define TCLSH_CMD] + if {![file-isexec $cgtcl]} { + proj-fatal "Cannot find a tclsh to use for code generation." + } + define BTCLSH "\$(TCLSH_CMD)" } }; # CC swap-out return $cgtcl @@ -845,6 +844,8 @@ proj-if-opt-truthy threadsafe { } define LDFLAGS_PTHREAD [get-define lib_pthread_create] undefine lib_pthread_create + # Recall that LDFLAGS_PTHREAD might be empty even if pthreads if + # found because it's in -lc on some platforms. } { msg-result no sqlite-add-feature-flag -DSQLITE_THREADSAFE=0 @@ -858,7 +859,7 @@ apply {{} { set ts [opt-val with-tempstore no] set tsn 1 msg-checking "Use an in-RAM database for temporary tables? " - switch -- $ts { + switch -exact -- $ts { never { set tsn 0 } no { set tsn 1 } yes { set tsn 2 } @@ -908,6 +909,7 @@ apply {{} { # corresponding --FEATURE flag was explicitly given, fail fatally, # else fail silently. proc sqlite-check-line-editing {} { + rename sqlite-check-line-editing "" msg-result "Checking for line-editing capability..." define HAVE_READLINE 0 define HAVE_LINENOISE 0 @@ -1161,22 +1163,13 @@ proj-if-opt-truthy math { # are cumulative. If neither are provided, icu-collations is not # honored and a warning is emitted if it is provided. # -# Design note: though we can automatically enable ICU if the +# Design note: though we could automatically enable ICU if the # icu-config binary or (pkg-config icu-io) are found, we specifically # do not. ICU is always an opt-in feature. -# -# Maintenance reminder: check-in 09caa94c9e84 added pkg-config support -# to this but the result fails to link on both Linux and OpenBSD -# (other systems were untested) because the pkg-config results are -# missing a required library. proc sqlite-check-icu {} { + rename sqlite-check-icu "" define LDFLAGS_ICU [join [opt-val with-icu-ldflags ""]] define CFLAGS_ICU [join [opt-val with-icu-cflags ""]] - # Flags sets seen in the wild for ICU: - # - -licui18n -licuuc -licudata - # - -licui18n -licuuc - # - /usr/local/bin/icu-config --ldflags - # if {[proj-opt-was-provided with-icu-config]} { set icuConfigBin [opt-val with-icu-config] set tryIcuConfigBin 1; # set to 0 if we end up using pkg-config @@ -1237,8 +1230,18 @@ sqlite-check-icu ######################################################################## # Check for the Emscripten SDK for building the web-based wasm -# components. +# components. The core lib and tools do not require this but ext/wasm +# does. apply {{} { + if {$::autosetup(srcdir) ne $::autosetup(builddir)} { + # The EMSDK pieces require writing to the original source tree + # even when doing an out-of-tree build. The ext/wasm pieces do not + # support an out-of-tree build so we catch that case and treat it + # as if EMSDK were not found. + msg-result "Out-of tree build: not checking for EMSDK." + define EMCC_WRAPPER "" + return + } set emccsh $::srcdir/tool/emcc.sh if {![get-define HAVE_WASI_SDK] && [proj-check-emsdk]} { define EMCC_WRAPPER $emccsh diff --git a/autosetup/proj.tcl b/autosetup/proj.tcl index 7da0b0fa35..a469c898de 100644 --- a/autosetup/proj.tcl +++ b/autosetup/proj.tcl @@ -138,7 +138,12 @@ proc proj-indented-notice {args} { } set lines [split [join $args] \n] foreach line $lines { - $outFunc " [string trimleft $line]" + set line [string trimleft $line] + if {"" eq $line} { + $outFunc $line + } else { + $outFunc " $line" + } } if {"" ne $fErr} { show-notices diff --git a/manifest b/manifest index b7f9c03141..bb43461239 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C ext/icu/README.txt:\sclean\sup\sEOL\swhitespace\sand\sadd\sa\smention\sof\sthe\s--with-icu-...\sconfigure\sflags\savailable\sas\sof\sversion\s3.48. -D 2024-11-28T15:52:21.879 +C Configure\sscript\sdoc\supdates\sand\scleanups.\sSkip\scheck\sfor\sEMSDK\swhen\sdoing\san\sout-of-tree\sbuild,\sas\sext/wasm\sdoes\snot\ssupport\sthat\sbuild\smode. +D 2024-11-28T16:14:19.067 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F auto.def 961d2cf22b65d31f9eb97470b50cbbdca34b999cf86f438811c1ec214b296b8b +F auto.def a82198f9ab1db4b54a5e134196bb0256d414789f747bbed6bacb67805c4bc0db F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -49,7 +49,7 @@ F autosetup/cc-shared.tcl 4f024e94a47f427ba61de1739f6381ef0080210f9fae89112d5c1d F autosetup/cc.tcl c0fcc50ca91deff8741e449ddad05bcd08268bc31177e613a6343bbd1fd3e45f F autosetup/jimsh0.c d40e381ea4526a067590e7b91bd4b2efa6d4980d286f908054c647b3df4aee14 F autosetup/pkg-config.tcl 4e635bf39022ff65e0d5434339dd41503ea48fc53822c9c5bde88b02d3d952ba -F autosetup/proj.tcl 22556a325c964aa5377d4d881722385f41fcd7c1b60102ba8965f7814c83e9ce +F autosetup/proj.tcl 2e817159b997077cb79bd871f6255276b787558f386dfc0830b0f825f6a53767 F autosetup/system.tcl 51d4be76cd9a9074704b584e5c9cbba616202c8468cf9ba8a4f8294a7ab1dba9 F configure 9a00b21dfd13757bbfb8d89b30660a89ec1f8f3a79402b8f9f9b6fc475c3303a x F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad @@ -2201,8 +2201,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P eb5ac9e5b9a4f9c85a2203107697da14c07c1667037dff672f9d786cea964a37 -R 78a02244626590a5fbc0925d20e4f240 +P 4976ac717bec2f2c89d94ac1d9b96afd1da573ba34e3c78637c3937287635e72 +R dfe7e573ed6abcbcf47ed2c31d6d6772 U stephan -Z fdab33deaf1f469df2a1f2ef0d0eef73 +Z 69e72e81037eeb2ecac489de03503f03 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index cd1048f863..a75e9a5e27 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4976ac717bec2f2c89d94ac1d9b96afd1da573ba34e3c78637c3937287635e72 +9d2f4148db1641e9bf2989c2b1adf5b9dcb2b123526ecacd063bca208b3c36cf From 25e042c0b0a30c79cbe330bc4c1317b29263b1ad Mon Sep 17 00:00:00 2001 From: stephan Date: Thu, 28 Nov 2024 20:46:51 +0000 Subject: [PATCH 52/89] Typo fixes and cleanups in autosetup/README.md. FossilOrigin-Name: 7f366565f41fa4eb532cfaf83074106e235436bfc377116e3bf823ac08fd01a5 --- autosetup/README.md | 53 +++++++++++++++++++++++++-------------------- manifest | 12 +++++----- manifest.uuid | 2 +- 3 files changed, 36 insertions(+), 31 deletions(-) diff --git a/autosetup/README.md b/autosetup/README.md index 4e15d750f6..fd426d56d9 100644 --- a/autosetup/README.md +++ b/autosetup/README.md @@ -56,14 +56,13 @@ In (mostly) alphabetical order: - **`file-isexec filename`**\ Should be used in place of `[file executable]`, as it will also check for `${filename}.exe` on Windows platforms. However, on such - platforms is also assumes that _any_ existing file is executable. + platforms it also assumes that _any_ existing file is executable. - **`get-env VAR ?default?`**\ - Will fetch an "environment variable" - from the first of either: (1) a KEY=VALUE passed to the configure - script or (2) the system's environment variables. Not to be confused - with `getenv`, which only does the latter and is rarely, if ever, - useful in this tree. + Will fetch an "environment variable" from the first of either: (1) a + KEY=VALUE passed to the configure script or (2) the system's + environment variables. Not to be confused with `getenv`, which only + does the latter and is rarely, if ever, useful in this tree. - **`proj-get-env VAR ?default?`**\ Works like `get-env` but will, if that function finds no match, look for a file named `./.env-$VAR` and, if found, return its @@ -73,8 +72,8 @@ In (mostly) alphabetical order: - **`define-for-opt flag defineName ?checkingMsg? ?yesVal=1? ?noVal=0?`**\ `[define $defineName]` to either `$yesVal` or `$noVal`, depending on whether `--$flag` is truthy or not. `$checkingMsg` is a - human-readable description of the check being made, e.g. "enable foo - bar baz?" If no `checkingMsg` is provided, the operation is silent.\ + human-readable description of the check being made, e.g. "enable foo?" + If no `checkingMsg` is provided, the operation is silent.\ Potential TODO: change the final two args to `-yes` and `-no` flags. They're rarely needed, though: search [auto.def][] for `TSTRNNR_OPTS` for an example of where they are used. @@ -113,14 +112,16 @@ In (mostly) alphabetical order: (described below). - **`sqlite-add-feature-flag ?-shell? FLAG...`**\ - Adds the given feature flag to the CFLAGS which are specific to building - the library. It's intended to be passed one or more `-DSQLITE_ENABLE_...`, - or similar, flags. If the `-shell` flag is used then it also passes - its arguments to `sqlite-add-shell-opt`. This is a no-op if `FLAG` - is not provided or is empty. + Adds the given feature flag to the CFLAGS which are specific to + building libsqlite3. It's intended to be passed one or more + `-DSQLITE_ENABLE_...`, or similar, flags. If the `-shell` flag is + used then it also passes its arguments to + `sqlite-add-shell-opt`. This is a no-op if `FLAG` is not provided or + is empty. - **`sqlite-add-shell-opt FLAG...`**\ - The shell-specific counterpart of `sqlite-add-feature-flag`. + The shell-specific counterpart of `sqlite-add-feature-flag` which + only adds the given flag(s) to the CLI-shell-specific CFLAGS. - **`user-notice msg`**\ Queues `$msg` to be sent to stderr, but does not emit it until @@ -130,6 +131,7 @@ In (mostly) alphabetical order: its resulting "yes/no/whatever" message in such a way as to not spoil the layout of such messages. + Ensuring TCL Compatibility ======================================================================== @@ -169,14 +171,14 @@ compatibility across TCL implementations: before looking for a system-level `tclsh`. Be aware, though, that `make distclean` will remove that file. -**Note that `jimsh0` is distinctly different** from the `jimsh` which -gets built for code-generation purposes. The latter requires +**Note that `jimsh0` is distinctly different from the `jimsh`** which +gets built for code-generation purposes. The latter requires non-default build flags to enable features which are platform-dependent, most notably to make its `[file normalize]` work. This means, for example, that the configure script and its utility -APIs must not use `[file normalize]`, but autosetup provides a TCL -implementation of `[file-normalize]` (note the dash) for portable use -in the configure script. +APIs must not use `[file normalize]`, but autosetup provides a +TCL-only implementation of `[file-normalize]` (note the dash) for +portable use in the configure script. @@ -193,7 +195,7 @@ Symbolic Names of Feature Flags Historically, the project's makefile has exclusively used `UPPER_UNDERSCORE` form for makefile variables. This build, however, primarily uses `X.y` format, where `X` is often a category label, -e.g. `CFLAGS` and `y` is the specific instance of that category, +e.g. `CFLAGS`, and `y` is the specific instance of that category, e.g. `CFLAGS.readline`. When the configure script exports flags for consumption by filtered @@ -244,7 +246,7 @@ that approach include: _after_ the test for zlib because the results of the `-rpath` test implicitly modified global state which broke the zlib feature test. Because the feature tests no longer (intentionally) modify - global state, that is not an issue.) + shared global state, that is not an issue.) In this build, cases where feature tests modify global state in such a way that it may impact later feature tests are either (A) very @@ -305,9 +307,9 @@ $ fossil status # show the modified files ``` Unless the upgrade made any incompatible changes (which is exceedingly -rare), that's all there is to it. Then **apply a patch for the change -described in the following section**, test the configure process, and -check it in. +rare), that's all there is to it. After that's done, **apply a patch +for the change described in the following section**, test the +configure process, and check it in. Patching Autosetup for Project-local Changes @@ -322,6 +324,9 @@ requires (as of this writing) four small edits in [](/file/autosetup/autosetup), as demonstrated in [check-in 3296c8d3](/info/3296c8d3). +If autosetup is upgraded and this patch is _not_ applied the invoking +`./configure` will fail loudly because of the declaration of the +`debug` flag in `auto.def` - duplicated flags are not permitted. [Autosetup]: https://msteveb.github.io/autosetup/ diff --git a/manifest b/manifest index bb43461239..3aec50dc71 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Configure\sscript\sdoc\supdates\sand\scleanups.\sSkip\scheck\sfor\sEMSDK\swhen\sdoing\san\sout-of-tree\sbuild,\sas\sext/wasm\sdoes\snot\ssupport\sthat\sbuild\smode. -D 2024-11-28T16:14:19.067 +C Typo\sfixes\sand\scleanups\sin\sautosetup/README.md. +D 2024-11-28T20:46:51.863 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -37,7 +37,7 @@ F autoconf/tea/win/rules.vc 94a18c3e453535459b4a643983acca52fb8756e79055bd2ad4b0 F autoconf/tea/win/targets.vc 96a25a1fa6e9e9cfb348fd3760a5395b4ce8acafc8ed10f0412937ec200d5dbd F autosetup/LICENSE 41a26aebdd2cd185d1e2b210f71b7ce234496979f6b35aef2cbf6b80cbed4ce4 F autosetup/README.autosetup a78ff8c4a3d2636a4268736672a74bf14a82f42687fcf0631a70c516075c031e -F autosetup/README.md 083b4417637f134875709dfa8ca149ce9b3634725b65e0f7d9b96f2bf56caa3a +F autosetup/README.md 1a02f5a94fd460eb7ffc8dea5d6f1657e38ddf8ffa2d6c5dce9a630b97021a69 F autosetup/autosetup df8b53928b1fe3c67db5bc77c8e1eb8160c1b6a26c370e9a06c68748f803b7e4 x F autosetup/autosetup-config.guess dfa101c5e8220e864d5e9c72a85e87110df60260d36cb951ad0a85d6d9eaa463 x F autosetup/autosetup-config.sub a38fb074d0dece01cf919e9fb534a26011608aa8fa606490864295328526cd73 x @@ -2201,8 +2201,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 4976ac717bec2f2c89d94ac1d9b96afd1da573ba34e3c78637c3937287635e72 -R dfe7e573ed6abcbcf47ed2c31d6d6772 +P 9d2f4148db1641e9bf2989c2b1adf5b9dcb2b123526ecacd063bca208b3c36cf +R 51f81e989696c60babea027477d55ce3 U stephan -Z 69e72e81037eeb2ecac489de03503f03 +Z b5c978735ffc965433e9d3c2347bdbb9 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index a75e9a5e27..6a5ab7063d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9d2f4148db1641e9bf2989c2b1adf5b9dcb2b123526ecacd063bca208b3c36cf +7f366565f41fa4eb532cfaf83074106e235436bfc377116e3bf823ac08fd01a5 From 2aac89661170be2d0a0ad91baa83d11e13df4bea Mon Sep 17 00:00:00 2001 From: stephan Date: Thu, 28 Nov 2024 23:55:35 +0000 Subject: [PATCH 53/89] Remove some outdated docs from Makefile.in. FossilOrigin-Name: cc2c5fc98b2d1957bd26f41f0b646921ecabe2ffe544b3c3565965ba8850b2ff --- Makefile.in | 46 ++++++---------------------------------------- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 13 insertions(+), 47 deletions(-) diff --git a/Makefile.in b/Makefile.in index 59963f3ced..75c1f47dcf 100644 --- a/Makefile.in +++ b/Makefile.in @@ -41,45 +41,13 @@ all: # that contains this "Makefile.in" and the "configure" script. # TOP = @abs_top_srcdir@ -# -# Just testing some default dir expansions... -# srcdir = @srcdir@ -# builddir = @builddir@ -# top_srcdir = @top_srcdir@ -# abs_top_srcdir = @abs_top_srcdir@ -# abs_top_builddir = @abs_top_builddir@ -# # # Autotools-conventional vars which are used by package installation -# rules in main.mk. -# -# Autosetup allows the various XYZdir vars to be overridden at -# configure-time with, e.g. --libdir=X and --mandir=Y. However, -# defining them at configure-time, instead of at make-time, leads to -# later awkwardness: -# -# $ ./configure --prefix=/usr -# $ make prefix=/bar -# -# In that invocation, libdir will be /usr/foo, not /bar/foo as it -# normally should, unless the user _also_ passes libdir=... to make. -# -# In 99%+ of use cases, setting prefix=X has the desired effect of -# calculating conventional defaults for various other dirs, like -# $prefix/lib, $prefix/include, etc. If, however, we export those at -# configure-time, the passing prefix=... to make will update only -# $prefix and none of its derived dirs. -# -# Because it is more important (for our use cases) that these vars be -# overridable via a make invocation than a configure invocation, and -# they conventionally derive from $(prefix) in all but the most exotic -# of use cases, we do not export the configure-defined overrides of -# those vars to this makefile. Instead, we export only $prefix and -# its derived vars are set to their conventional default values in -# main.mk, which users can then override at make-time as needed. -# Overriding $prefix via make will also calculate any derived vars, as -# one would expect, unless each is specifically overridden. +# rules in main.mk. To get sane handling when a user overrides only +# a subset of these, we perform some acrobatics with these vars +# in the configure script: see [proj-remap-autoconf-dir-vars] for +# full details. # # For completeness's sake, the aforementioned conventional vars which # are relevant to our installation rules are: @@ -128,9 +96,7 @@ T.cc = $(CC) # are, in that build, no uses of CPPFLAGS in the configure-expanded # Makefile. Ergo: if a client configures with CPPFLAGS=... and then # explicitly passes CFLAGS=... to make, the CPPFLAGS will be -# lost. That behavior is retained in 3.48+ because also honoring -# CPPFLAGS at make-time may have undesired side effects on any number -# of builds. +# lost. That behavior is retained in 3.48+. # CFLAGS = @CFLAGS@ @CPPFLAGS@ # @@ -248,7 +214,7 @@ TCLLIBDIR = @TCLLIBDIR@ # # Additional options when running tests using testrunner.tcl -# This is usually either blank, or else --status +# This is usually either blank or --status. # TSTRNNR_OPTS = @TSTRNNR_OPTS@ diff --git a/manifest b/manifest index 3aec50dc71..39e9e9043b 100644 --- a/manifest +++ b/manifest @@ -1,9 +1,9 @@ -C Typo\sfixes\sand\scleanups\sin\sautosetup/README.md. -D 2024-11-28T20:46:51.863 +C Remove\ssome\soutdated\sdocs\sfrom\sMakefile.in. +D 2024-11-28T23:55:35.415 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d -F Makefile.in 85f2c740cadf969abbd9a6210b8b76636dbf231b9d3efe977b060c3055fac5b9 +F Makefile.in 86e81bdb118bf332a27865090b7dce96ddde93c2f1586e1b911569acaa228f19 F Makefile.linux-generic bd3e3cacd369821a6241d4ea1967395c962dfe3057e38cb0a435cee0e8b789d0 F Makefile.msc a92237976eb92c5efaa0dd2524746aec12c196e12df8d4dbff9543a4648c3312 F README.md c3c0f19532ce28f6297a71870f3c7b424729f0e6d9ab889616d3587dd2332159 @@ -2201,8 +2201,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 9d2f4148db1641e9bf2989c2b1adf5b9dcb2b123526ecacd063bca208b3c36cf -R 51f81e989696c60babea027477d55ce3 +P 7f366565f41fa4eb532cfaf83074106e235436bfc377116e3bf823ac08fd01a5 +R d7c111a7470180e499663f2f26933967 U stephan -Z b5c978735ffc965433e9d3c2347bdbb9 +Z f66a560c68c0b33c3bb1d4fe2506daed # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 6a5ab7063d..7d063ea487 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7f366565f41fa4eb532cfaf83074106e235436bfc377116e3bf823ac08fd01a5 +cc2c5fc98b2d1957bd26f41f0b646921ecabe2ffe544b3c3565965ba8850b2ff From 5c208f36a453c821cfcb021d643872e5ebfadbff Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 29 Nov 2024 11:49:05 +0000 Subject: [PATCH 54/89] Fix a NEVER() in the iif() logic that can be true if compiled with SQLITE_ENABLE_UNKNOWN_SQL_FUNCTIONS. Problem introduced by [eb5ac9e5b9a4f9c8]. FossilOrigin-Name: 3ec2df5a6c731b59b0ab132ee59c74d107f9c4bd32cf47d9776887858b9c0dea --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/expr.c | 4 ++++ 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 39e9e9043b..dcb89335c8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\ssome\soutdated\sdocs\sfrom\sMakefile.in. -D 2024-11-28T23:55:35.415 +C Fix\sa\sNEVER()\sin\sthe\siif()\slogic\sthat\scan\sbe\strue\sif\scompiled\swith\nSQLITE_ENABLE_UNKNOWN_SQL_FUNCTIONS.\s\sProblem\sintroduced\sby\s[eb5ac9e5b9a4f9c8]. +D 2024-11-29T11:49:05.152 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -726,7 +726,7 @@ F src/date.c 89ce1ff20512a7fa5070ba6e7dd5c171148ca7d580955795bf97c79c2456144a F src/dbpage.c db1be8adaf1f839ad733c08baeac5c22aa912f7b535865c0c061382602081360 F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42 -F src/expr.c b838969c58a38dfedabec18c432204895c7333d7a509a20fa63c39bf92001f0e +F src/expr.c 954fe794e30c5b692c7c32da2b6df6ee57259c0220da571fc79922c8d07ad41f F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 928ed2517e8732113d2b9821aa37af639688d752f4ea9ac6e0e393d713eeb76f F src/func.c 49489dcce46d2d491cedb451e974264150c473e5f5bba448498a9aa4c1993537 @@ -2201,8 +2201,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 7f366565f41fa4eb532cfaf83074106e235436bfc377116e3bf823ac08fd01a5 -R d7c111a7470180e499663f2f26933967 -U stephan -Z f66a560c68c0b33c3bb1d4fe2506daed +P cc2c5fc98b2d1957bd26f41f0b646921ecabe2ffe544b3c3565965ba8850b2ff +R e3074278b35f54a5f11f21d9d8c2e74e +U drh +Z 8d6d5519eaac914fe913f5864cf877bd # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 7d063ea487..9a5fc8625e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cc2c5fc98b2d1957bd26f41f0b646921ecabe2ffe544b3c3565965ba8850b2ff +3ec2df5a6c731b59b0ab132ee59c74d107f9c4bd32cf47d9776887858b9c0dea diff --git a/src/expr.c b/src/expr.c index d0282f7147..afa9ba00f5 100644 --- a/src/expr.c +++ b/src/expr.c @@ -6478,7 +6478,11 @@ static int sqlite3ExprIsIIF(sqlite3 *db, const Expr *pExpr){ if( (z[0]!='i' && z[0]!='I') ) return 0; if( pExpr->x.pList==0 ) return 0; pDef = sqlite3FindFunction(db, z, pExpr->x.pList->nExpr, ENC(db), 0); +#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION + if( pDef==0 ) return 0; +#else if( NEVER(pDef==0) ) return 0; +#endif if( (pDef->funcFlags & SQLITE_FUNC_INLINE)==0 ) return 0; if( NEVER(SQLITE_PTR_TO_INT(pDef->pUserData)!=INLINEFUNC_iif) ) return 0; }else if( pExpr->op==TK_CASE ){ From 03e306b3a19091906a563794b6659ca463f8d7cc Mon Sep 17 00:00:00 2001 From: drh <> Date: Sat, 30 Nov 2024 12:00:38 +0000 Subject: [PATCH 55/89] A NEVER() that was added by [eb5ac9e5b9a4f9c8] is violated by the ifnull() in-line function. This check-in fixes that problem. FossilOrigin-Name: 2220ccf4d6fea2413015c72fd318003b4b5afeae7cb7586b714fce36212d8c49 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/expr.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index dcb89335c8..02e95f2475 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sNEVER()\sin\sthe\siif()\slogic\sthat\scan\sbe\strue\sif\scompiled\swith\nSQLITE_ENABLE_UNKNOWN_SQL_FUNCTIONS.\s\sProblem\sintroduced\sby\s[eb5ac9e5b9a4f9c8]. -D 2024-11-29T11:49:05.152 +C A\sNEVER()\sthat\swas\sadded\sby\s[eb5ac9e5b9a4f9c8]\sis\sviolated\sby\sthe\sifnull()\nin-line\sfunction.\s\sThis\scheck-in\sfixes\sthat\sproblem. +D 2024-11-30T12:00:38.558 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -726,7 +726,7 @@ F src/date.c 89ce1ff20512a7fa5070ba6e7dd5c171148ca7d580955795bf97c79c2456144a F src/dbpage.c db1be8adaf1f839ad733c08baeac5c22aa912f7b535865c0c061382602081360 F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42 -F src/expr.c 954fe794e30c5b692c7c32da2b6df6ee57259c0220da571fc79922c8d07ad41f +F src/expr.c cd85c48b408f67ce077155ad17b2822214b040afc2269cfcbe6510d945cc6986 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 928ed2517e8732113d2b9821aa37af639688d752f4ea9ac6e0e393d713eeb76f F src/func.c 49489dcce46d2d491cedb451e974264150c473e5f5bba448498a9aa4c1993537 @@ -2201,8 +2201,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P cc2c5fc98b2d1957bd26f41f0b646921ecabe2ffe544b3c3565965ba8850b2ff -R e3074278b35f54a5f11f21d9d8c2e74e +P 3ec2df5a6c731b59b0ab132ee59c74d107f9c4bd32cf47d9776887858b9c0dea +R bbde09ca9109487c159b50c815e366a3 U drh -Z 8d6d5519eaac914fe913f5864cf877bd +Z d347c790e4473436a571b458a4266fa7 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 9a5fc8625e..35fa364846 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3ec2df5a6c731b59b0ab132ee59c74d107f9c4bd32cf47d9776887858b9c0dea +2220ccf4d6fea2413015c72fd318003b4b5afeae7cb7586b714fce36212d8c49 diff --git a/src/expr.c b/src/expr.c index afa9ba00f5..435ec9d780 100644 --- a/src/expr.c +++ b/src/expr.c @@ -6484,7 +6484,7 @@ static int sqlite3ExprIsIIF(sqlite3 *db, const Expr *pExpr){ if( NEVER(pDef==0) ) return 0; #endif if( (pDef->funcFlags & SQLITE_FUNC_INLINE)==0 ) return 0; - if( NEVER(SQLITE_PTR_TO_INT(pDef->pUserData)!=INLINEFUNC_iif) ) return 0; + if( SQLITE_PTR_TO_INT(pDef->pUserData)!=INLINEFUNC_iif ) return 0; }else if( pExpr->op==TK_CASE ){ if( pExpr->pLeft!=0 ) return 0; }else{ From c5b9da34f2bc23fe9382ff07196dfbfb3e2f467d Mon Sep 17 00:00:00 2001 From: drh <> Date: Sat, 30 Nov 2024 14:13:35 +0000 Subject: [PATCH 56/89] In sqlite_dbpage, cancel any pending truncate operation if there an error occurs later in the transaction. FossilOrigin-Name: 1abab10f85a4dba5ffe51a30eeef30853c120e5566ed97b3af1526fff597c647 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/dbpage.c | 2 ++ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 02e95f2475..3061fed911 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C A\sNEVER()\sthat\swas\sadded\sby\s[eb5ac9e5b9a4f9c8]\sis\sviolated\sby\sthe\sifnull()\nin-line\sfunction.\s\sThis\scheck-in\sfixes\sthat\sproblem. -D 2024-11-30T12:00:38.558 +C In\ssqlite_dbpage,\scancel\sany\spending\struncate\soperation\sif\sthere\san\serror\noccurs\slater\sin\sthe\stransaction. +D 2024-11-30T14:13:35.669 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -723,7 +723,7 @@ F src/callback.c db3a45e376deff6a16c0058163fe0ae2b73a2945f3f408ca32cf74960b28d49 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c d35723024b963edce9c0fad5b3303e8bb9266083784844baed10a6dedfe26f3b F src/date.c 89ce1ff20512a7fa5070ba6e7dd5c171148ca7d580955795bf97c79c2456144a -F src/dbpage.c db1be8adaf1f839ad733c08baeac5c22aa912f7b535865c0c061382602081360 +F src/dbpage.c 6c52074b0edb914d526c85541ca0f1fd23822b5dac39b6ee9b7f375d9fa592e9 F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42 F src/expr.c cd85c48b408f67ce077155ad17b2822214b040afc2269cfcbe6510d945cc6986 @@ -2201,8 +2201,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 3ec2df5a6c731b59b0ab132ee59c74d107f9c4bd32cf47d9776887858b9c0dea -R bbde09ca9109487c159b50c815e366a3 +P 2220ccf4d6fea2413015c72fd318003b4b5afeae7cb7586b714fce36212d8c49 +R f154a3e6dd4944fdbd4f1ae39e54884f U drh -Z d347c790e4473436a571b458a4266fa7 +Z a3278a97e32db442096a47b4ce1a54d9 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 35fa364846..b31bc4e555 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2220ccf4d6fea2413015c72fd318003b4b5afeae7cb7586b714fce36212d8c49 +1abab10f85a4dba5ffe51a30eeef30853c120e5566ed97b3af1526fff597c647 diff --git a/src/dbpage.c b/src/dbpage.c index a0ee9246dc..124952456c 100644 --- a/src/dbpage.c +++ b/src/dbpage.c @@ -393,6 +393,8 @@ static int dbpageUpdate( memcpy(aPage, pData, szPage); pTab->pgnoTrunc = 0; } + }else{ + pTab->pgnoTrunc = 0; } sqlite3PagerUnref(pDbPage); return rc; From d6d9c54bb20e2df6dbceaaff5f106b4679a8f0ef Mon Sep 17 00:00:00 2001 From: stephan Date: Sat, 30 Nov 2024 17:48:31 +0000 Subject: [PATCH 57/89] At the end of the configure script ensure that none of the files which are filtered for @VARS@ contain any unresolved @VAR@ placeholders, failing fatally if any do. FossilOrigin-Name: 301df5c2beb08e8e2944f7a9e46a10114603518385c05a9c30a838ab436369d4 --- auto.def | 23 +++++++++++++++++++++++ manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/auto.def b/auto.def index 9cea6a3dc1..c39dc55bc8 100644 --- a/auto.def +++ b/auto.def @@ -1400,3 +1400,26 @@ proj-if-opt-truthy dump-defines { undefine OPT_SHELL.list } } + +######################################################################## +# Perform some high-level validation on the generated files... +# +# 1) Ensure that no unresolved @VAR@ placeholders are in files which +# use those. +# +# 2) TBD +apply {{} { + # Check #1: ensure that files which get filtered for @VAR@ do not + # contain any unresolved @VAR@ refs. That may indicate an + # unexported/unused var or a typo. + foreach f "Makefile sqlite3.pc $::srcdir/tool/emcc.sh" { + if {![file exists $f]} continue + set lnno 1 + foreach line [proj-file-content-list $f] { + if {[regexp {(@[A-Za-z_]+@)} $line match]} { + error "Unresolved reference to $match at line $lnno of $f" + } + incr lnno + } + } +}} diff --git a/manifest b/manifest index 3061fed911..a6b58921cd 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C In\ssqlite_dbpage,\scancel\sany\spending\struncate\soperation\sif\sthere\san\serror\noccurs\slater\sin\sthe\stransaction. -D 2024-11-30T14:13:35.669 +C At\sthe\send\sof\sthe\sconfigure\sscript\sensure\sthat\snone\sof\sthe\sfiles\swhich\sare\sfiltered\sfor\s@VARS@\scontain\sany\sunresolved\s@VAR@\splaceholders,\sfailing\sfatally\sif\sany\sdo. +D 2024-11-30T17:48:31.521 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F auto.def a82198f9ab1db4b54a5e134196bb0256d414789f747bbed6bacb67805c4bc0db +F auto.def a0e22c70e043c860dce809d436dad667c29981d9b98342b47e25747df08aaf28 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -2201,8 +2201,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 2220ccf4d6fea2413015c72fd318003b4b5afeae7cb7586b714fce36212d8c49 -R f154a3e6dd4944fdbd4f1ae39e54884f -U drh -Z a3278a97e32db442096a47b4ce1a54d9 +P 1abab10f85a4dba5ffe51a30eeef30853c120e5566ed97b3af1526fff597c647 +R e64febb3fe4e77d46b80ded354868cd5 +U stephan +Z c8dd07770a4ac68eb48e0cf5cc49ca34 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index b31bc4e555..559f3d7c89 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1abab10f85a4dba5ffe51a30eeef30853c120e5566ed97b3af1526fff597c647 +301df5c2beb08e8e2944f7a9e46a10114603518385c05a9c30a838ab436369d4 From 9bc351b3c7b073f10301bc077322752ff1ca0c32 Mon Sep 17 00:00:00 2001 From: stephan Date: Sun, 1 Dec 2024 14:02:19 +0000 Subject: [PATCH 58/89] Export a clipped copy of sqlite370.eps as sqlite370.svg, based on discussion in [forum:1bbd6d17ca|forum post 1bbd6d17ca]. FossilOrigin-Name: dd3a13c1209d0bac3d6eb105826429ef29b36682c347995dc266bf42e46a2193 --- art/sqlite370.svg | 107 ++++++++++++++++++++++++++++++++++++++++++++++ manifest | 11 ++--- manifest.uuid | 2 +- 3 files changed, 114 insertions(+), 6 deletions(-) create mode 100644 art/sqlite370.svg diff --git a/art/sqlite370.svg b/art/sqlite370.svg new file mode 100644 index 0000000000..f780a397c1 --- /dev/null +++ b/art/sqlite370.svg @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/manifest b/manifest index a6b58921cd..03fbe9fa17 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C At\sthe\send\sof\sthe\sconfigure\sscript\sensure\sthat\snone\sof\sthe\sfiles\swhich\sare\sfiltered\sfor\s@VARS@\scontain\sany\sunresolved\s@VAR@\splaceholders,\sfailing\sfatally\sif\sany\sdo. -D 2024-11-30T17:48:31.521 +C Export\sa\sclipped\scopy\sof\ssqlite370.eps\sas\ssqlite370.svg,\sbased\son\sdiscussion\sin\s[forum:1bbd6d17ca|forum\spost\s1bbd6d17ca]. +D 2024-12-01T14:02:19.835 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -13,6 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 +F art/sqlite370.svg ed79b61a056ca722027f18cd63395d5bc324f925e7b8be76cdc5458a1addc77a F auto.def a0e22c70e043c860dce809d436dad667c29981d9b98342b47e25747df08aaf28 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 @@ -2201,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 1abab10f85a4dba5ffe51a30eeef30853c120e5566ed97b3af1526fff597c647 -R e64febb3fe4e77d46b80ded354868cd5 +P 301df5c2beb08e8e2944f7a9e46a10114603518385c05a9c30a838ab436369d4 +R 773c9906e32101746f3856fce79cbd87 U stephan -Z c8dd07770a4ac68eb48e0cf5cc49ca34 +Z 2cfac5616be613d3912055ea36a00d71 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 559f3d7c89..ab7993438f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -301df5c2beb08e8e2944f7a9e46a10114603518385c05a9c30a838ab436369d4 +dd3a13c1209d0bac3d6eb105826429ef29b36682c347995dc266bf42e46a2193 From a13a645cdfbfe7bdf677cdeed1c6cc1bb70a8a24 Mon Sep 17 00:00:00 2001 From: stephan Date: Sun, 1 Dec 2024 14:14:50 +0000 Subject: [PATCH 59/89] Re-export sqlite370.svg to retain the gradient part and clip the size using the cutting guides in sqlite370.eps. FossilOrigin-Name: 12017b01c8e6c12fdd8de3c3c325e56b5be80343a1a392538b6e6ed066e46cee --- art/sqlite370.svg | 147 +++++++++++++++++++++++----------------------- manifest | 12 ++-- manifest.uuid | 2 +- 3 files changed, 81 insertions(+), 80 deletions(-) diff --git a/art/sqlite370.svg b/art/sqlite370.svg index f780a397c1..9356f721c3 100644 --- a/art/sqlite370.svg +++ b/art/sqlite370.svg @@ -2,106 +2,107 @@ + id="defs467"> + + + + id="linearGradient51"> + id="stop43" /> + id="stop45" /> + id="stop47" /> + id="stop49" /> - - - - - - + id="layer1" + transform="translate(-30.325426,-80.061905)"> - - - - - - - - - + id="g614"> + + + + + + + + + + + + + + diff --git a/manifest b/manifest index 03fbe9fa17..17638ac1aa 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Export\sa\sclipped\scopy\sof\ssqlite370.eps\sas\ssqlite370.svg,\sbased\son\sdiscussion\sin\s[forum:1bbd6d17ca|forum\spost\s1bbd6d17ca]. -D 2024-12-01T14:02:19.835 +C Re-export\ssqlite370.svg\sto\sretain\sthe\sgradient\spart\sand\sclip\sthe\ssize\susing\sthe\scutting\sguides\sin\ssqlite370.eps. +D 2024-12-01T14:14:50.481 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F art/sqlite370.svg ed79b61a056ca722027f18cd63395d5bc324f925e7b8be76cdc5458a1addc77a +F art/sqlite370.svg e2bf2fe17f602cc08db00cc6b48c31a25fcfdd3fce2b99441b0d22a6b1d4bbbf F auto.def a0e22c70e043c860dce809d436dad667c29981d9b98342b47e25747df08aaf28 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 301df5c2beb08e8e2944f7a9e46a10114603518385c05a9c30a838ab436369d4 -R 773c9906e32101746f3856fce79cbd87 +P dd3a13c1209d0bac3d6eb105826429ef29b36682c347995dc266bf42e46a2193 +R e66632f480fa9889a528b2ea980ca4b7 U stephan -Z 2cfac5616be613d3912055ea36a00d71 +Z 9fd04893b998b4cf42cad44ece8528fb # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index ab7993438f..c3a3279179 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -dd3a13c1209d0bac3d6eb105826429ef29b36682c347995dc266bf42e46a2193 +12017b01c8e6c12fdd8de3c3c325e56b5be80343a1a392538b6e6ed066e46cee From fd66549cb693073f323573a6d36453970bf6740c Mon Sep 17 00:00:00 2001 From: stephan Date: Sun, 1 Dec 2024 14:20:19 +0000 Subject: [PATCH 60/89] Correct the fill color for the background of sqlite370.svg - it was slightly darker than it should have been. FossilOrigin-Name: 732132407b3881aaa7fee151baafb6569664f1d2b82ef7743d89bd0a86cf0a09 --- art/sqlite370.svg | 2 +- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/art/sqlite370.svg b/art/sqlite370.svg index 9356f721c3..46b0045aeb 100644 --- a/art/sqlite370.svg +++ b/art/sqlite370.svg @@ -51,7 +51,7 @@ Date: Sun, 1 Dec 2024 15:23:40 +0000 Subject: [PATCH 61/89] Trim a bit more from the sqlite370.svg border to get it closer in scaled size to the logo currently on the docsrc site. FossilOrigin-Name: 81c7277fc59af833365f0ee5af603db49c19a6ba87bd5f252ecdfe72df252d4e --- art/sqlite370.svg | 108 ++++++++++++++++++++++------------------------ manifest | 12 +++--- manifest.uuid | 2 +- 3 files changed, 59 insertions(+), 63 deletions(-) diff --git a/art/sqlite370.svg b/art/sqlite370.svg index 46b0045aeb..9a050b593d 100644 --- a/art/sqlite370.svg +++ b/art/sqlite370.svg @@ -2,9 +2,9 @@ + id="g337"> + - + id="g465" + transform="translate(-56.57816,-61.353828)"> + + + + + + + + id="g37" + clip-path="url(#clipPath41)" + transform="matrix(0.03527778,0,0,-0.03527778,42.828565,121.98722)"> - - - - - - - - - - + d="m 994.055,997.609 c 6.725,-11.629 35.115,-61.371 40.815,-77.398 6.42,-18.121 7.77,-23.313 7.77,-23.313 0,0 -15.57,80.114 -41.12,126.862 5.6,18.9 12.29,39.79 19.86,62.12 8.85,-15.53 28.96,-51.2 36.23,-68.1 0.27,3.19 0.54,6.38 0.82,9.54 -6.44,24.75 -16.22,57.15 -28.74,82.54 32.14,167.25 135.59,386.25 247.04,504.48 H 509.602 c -37.883,0 -68.711,-30.82 -68.711,-68.71 V 731.789 c 173.738,66.68 383.23,127.633 563.529,125.02 -6.693,25.812 -14.315,49.152 -22.318,62.679 -4.122,6.981 0.449,35.653 11.953,78.121" + style="fill:url(#linearGradient51);fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path53" /> + diff --git a/manifest b/manifest index 042485a162..1529ee3021 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Correct\sthe\sfill\scolor\sfor\sthe\sbackground\sof\ssqlite370.svg\s-\sit\swas\sslightly\sdarker\sthan\sit\sshould\shave\sbeen. -D 2024-12-01T14:20:19.627 +C Trim\sa\sbit\smore\sfrom\sthe\ssqlite370.svg\sborder\sto\sget\sit\scloser\sin\sscaled\ssize\sto\sthe\slogo\scurrently\son\sthe\sdocsrc\ssite. +D 2024-12-01T15:23:40.866 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F art/sqlite370.svg dba5c47cc680aa38041ca4756cc91f82ae7b4bc05e39bfd23adf355af8280262 +F art/sqlite370.svg 40b7e2fe8aac3add5d56dd86ab8d427a4eca5bcb3fe4f8946cb3794e1821d531 F auto.def a0e22c70e043c860dce809d436dad667c29981d9b98342b47e25747df08aaf28 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 12017b01c8e6c12fdd8de3c3c325e56b5be80343a1a392538b6e6ed066e46cee -R 4fe8c345587f741b6f487d0e07c2ea64 +P 732132407b3881aaa7fee151baafb6569664f1d2b82ef7743d89bd0a86cf0a09 +R a8b303cba2f0568fafb9e7b313f76e76 U stephan -Z d56d01cf37eb6543db3618f85182577e +Z 8571445bebcabe4056fe395c6d20e2a7 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 9681846435..8193539bb8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -732132407b3881aaa7fee151baafb6569664f1d2b82ef7743d89bd0a86cf0a09 +81c7277fc59af833365f0ee5af603db49c19a6ba87bd5f252ecdfe72df252d4e From 224e356081182c5690d44f1c5df49c40c796981b Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 2 Dec 2024 13:29:29 +0000 Subject: [PATCH 62/89] Slighly less confusing output from treeview during debugging. FossilOrigin-Name: 7aef0b93050cdb79cae68361e84047cea2e8e7251d0581ce917da03352bb1f16 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/treeview.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 1529ee3021..d8adcc4005 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Trim\sa\sbit\smore\sfrom\sthe\ssqlite370.svg\sborder\sto\sget\sit\scloser\sin\sscaled\ssize\sto\sthe\slogo\scurrently\son\sthe\sdocsrc\ssite. -D 2024-12-01T15:23:40.866 +C Slighly\sless\sconfusing\soutput\sfrom\streeview\sduring\sdebugging. +D 2024-12-02T13:29:29.510 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -839,7 +839,7 @@ F src/test_window.c 6d80e11fba89a1796525e6f0048ff0c7789aa2c6b0b11c80827dc1437bd8 F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c F src/tokenize.c 3f703cacdab728d7741e5a6ac242006d74fe1c2754d4f03ed889d7253259bd68 -F src/treeview.c 4eeb155abefd88a60d0c37cc00bcfac38a8dd566970f019e4af7e02672ee2599 +F src/treeview.c 921392561385e05ef5703f20a7a72f0a0a45c1fb749558d7467fae2c3f525006 F src/trigger.c 0bb986a5b96047fd597c6aac28588853df56064e576e6b81ba777ef2ccaac461 F src/update.c 0e01aa6a3edf9ec112b33eb714b9016a81241497b1fb7c3e74332f4f71756508 F src/upsert.c 215328c3f91623c520ec8672c44323553f12caeb4f01b1090ebdca99fdf7b4f1 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 732132407b3881aaa7fee151baafb6569664f1d2b82ef7743d89bd0a86cf0a09 -R a8b303cba2f0568fafb9e7b313f76e76 -U stephan -Z 8571445bebcabe4056fe395c6d20e2a7 +P 81c7277fc59af833365f0ee5af603db49c19a6ba87bd5f252ecdfe72df252d4e +R e1b4d376f6d1b8ae5226a7733e409232 +U drh +Z fd572b187ecdf020733ce40c075270b8 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 8193539bb8..55eb9ee7ec 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -81c7277fc59af833365f0ee5af603db49c19a6ba87bd5f252ecdfe72df252d4e +7aef0b93050cdb79cae68361e84047cea2e8e7251d0581ce917da03352bb1f16 diff --git a/src/treeview.c b/src/treeview.c index 865de9991c..30592d35b2 100644 --- a/src/treeview.c +++ b/src/treeview.c @@ -218,7 +218,7 @@ void sqlite3TreeViewSrcList(TreeView *pView, const SrcList *pSrc){ sqlite3_str_appendf(&x, " CteUse=0x%p", pItem->u2.pCteUse); } if( pItem->fg.isOn || (pItem->fg.isUsing==0 && pItem->u3.pOn!=0) ){ - sqlite3_str_appendf(&x, " ON"); + sqlite3_str_appendf(&x, " isOn"); } if( pItem->fg.isTabFunc ) sqlite3_str_appendf(&x, " isTabFunc"); if( pItem->fg.isCorrelated ) sqlite3_str_appendf(&x, " isCorrelated"); From 3e1f302dbe3f5c108bcc1eaeed304cc80fc2a147 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 2 Dec 2024 13:47:53 +0000 Subject: [PATCH 63/89] Enable MEMSYS5 with the --dev configure option. FossilOrigin-Name: 9e09d5d60ac91423e1dec1169e9eb60a531f84261b48490c550cf4529540e6dc --- auto.def | 2 +- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/auto.def b/auto.def index c39dc55bc8..ba8b1adbf7 100644 --- a/auto.def +++ b/auto.def @@ -519,7 +519,7 @@ proj-define-for-opt linemacros AMALGAMATION_LINE_MACROS \ msg-checking "SQLITE_DEBUG build? " proj-if-opt-truthy debug { define SQLITE_DEBUG 1 - define TARGET_DEBUG {-g -DSQLITE_DEBUG=1 -DSQLITE_ENABLE_SELECTTRACE -DSQLITE_ENABLE_WHERETRACE -O0 -Wall} + define TARGET_DEBUG {-g -DSQLITE_DEBUG=1 -DSQLITE_ENABLE_SELECTTRACE -DSQLITE_ENABLE_WHERETRACE -DSQLITE_ENABLE_MEMSYS5 -O0 -Wall} msg-result yes } { define TARGET_DEBUG {-DNDEBUG} diff --git a/manifest b/manifest index d8adcc4005..2bfdd7a1e1 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Slighly\sless\sconfusing\soutput\sfrom\streeview\sduring\sdebugging. -D 2024-12-02T13:29:29.510 +C Enable\sMEMSYS5\swith\sthe\s--dev\sconfigure\soption. +D 2024-12-02T13:47:53.444 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -14,7 +14,7 @@ F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 F art/sqlite370.svg 40b7e2fe8aac3add5d56dd86ab8d427a4eca5bcb3fe4f8946cb3794e1821d531 -F auto.def a0e22c70e043c860dce809d436dad667c29981d9b98342b47e25747df08aaf28 +F auto.def 411c5b5538d4890c601eb0bf3aa0e401e507209c3aaacde063977b6f0dafe69f F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 81c7277fc59af833365f0ee5af603db49c19a6ba87bd5f252ecdfe72df252d4e -R e1b4d376f6d1b8ae5226a7733e409232 +P 7aef0b93050cdb79cae68361e84047cea2e8e7251d0581ce917da03352bb1f16 +R e48a17285a227782715f071b22aa748e U drh -Z fd572b187ecdf020733ce40c075270b8 +Z afc76fb7a8a09f7eb558217a5434a8b5 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 55eb9ee7ec..ce0f809bc6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7aef0b93050cdb79cae68361e84047cea2e8e7251d0581ce917da03352bb1f16 +9e09d5d60ac91423e1dec1169e9eb60a531f84261b48490c550cf4529540e6dc From ed7fe45c7c035e9b5c97d67885c73ee8409f6273 Mon Sep 17 00:00:00 2001 From: stephan Date: Mon, 2 Dec 2024 14:14:30 +0000 Subject: [PATCH 64/89] Reformulate [9e09d5d6] so that memsys5 shows up in the late-config summary as being enabled and does the right thing if both --debug and --memsys3 are used. FossilOrigin-Name: 447db1cd0a6575432996e9735e78bbb09c83827c5e3080339b34df176ab86af0 --- auto.def | 3 ++- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/auto.def b/auto.def index ba8b1adbf7..e4ddbbd46f 100644 --- a/auto.def +++ b/auto.def @@ -519,7 +519,8 @@ proj-define-for-opt linemacros AMALGAMATION_LINE_MACROS \ msg-checking "SQLITE_DEBUG build? " proj-if-opt-truthy debug { define SQLITE_DEBUG 1 - define TARGET_DEBUG {-g -DSQLITE_DEBUG=1 -DSQLITE_ENABLE_SELECTTRACE -DSQLITE_ENABLE_WHERETRACE -DSQLITE_ENABLE_MEMSYS5 -O0 -Wall} + define TARGET_DEBUG {-g -DSQLITE_DEBUG=1 -DSQLITE_ENABLE_SELECTTRACE -DSQLITE_ENABLE_WHERETRACE -O0 -Wall} + proj-opt-set memsys5 msg-result yes } { define TARGET_DEBUG {-DNDEBUG} diff --git a/manifest b/manifest index 2bfdd7a1e1..a00285bf1b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enable\sMEMSYS5\swith\sthe\s--dev\sconfigure\soption. -D 2024-12-02T13:47:53.444 +C Reformulate\s[9e09d5d6]\sso\sthat\smemsys5\sshows\sup\sin\sthe\slate-config\ssummary\sas\sbeing\senabled\sand\sdoes\sthe\sright\sthing\sif\sboth\s--debug\sand\s--memsys3\sare\sused. +D 2024-12-02T14:14:30.676 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -14,7 +14,7 @@ F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 F art/sqlite370.svg 40b7e2fe8aac3add5d56dd86ab8d427a4eca5bcb3fe4f8946cb3794e1821d531 -F auto.def 411c5b5538d4890c601eb0bf3aa0e401e507209c3aaacde063977b6f0dafe69f +F auto.def 6de760c0b88ace5550403544a2eb83eb6834be99997c845d824c19774e056dc5 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 7aef0b93050cdb79cae68361e84047cea2e8e7251d0581ce917da03352bb1f16 -R e48a17285a227782715f071b22aa748e -U drh -Z afc76fb7a8a09f7eb558217a5434a8b5 +P 9e09d5d60ac91423e1dec1169e9eb60a531f84261b48490c550cf4529540e6dc +R d9d8b14ef1a08757ec20208f0b613d4c +U stephan +Z 4b6795ed2210994cf6151e4f8f333a77 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index ce0f809bc6..0d8e1c2577 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9e09d5d60ac91423e1dec1169e9eb60a531f84261b48490c550cf4529540e6dc +447db1cd0a6575432996e9735e78bbb09c83827c5e3080339b34df176ab86af0 From bfdeb1f6d561f5a9ea53a662810704b6fcb4e213 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 2 Dec 2024 16:07:38 +0000 Subject: [PATCH 65/89] Fix a harmless typo in debugging output. FossilOrigin-Name: 578f76cfb2e298fe6bfd278b545091fe682d01feb0be56ef57b6c9f2c179ac61 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/select.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index a00285bf1b..ceb4442469 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Reformulate\s[9e09d5d6]\sso\sthat\smemsys5\sshows\sup\sin\sthe\slate-config\ssummary\sas\sbeing\senabled\sand\sdoes\sthe\sright\sthing\sif\sboth\s--debug\sand\s--memsys3\sare\sused. -D 2024-12-02T14:14:30.676 +C Fix\sa\sharmless\stypo\sin\sdebugging\soutput. +D 2024-12-02T16:07:38.007 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -777,7 +777,7 @@ F src/printf.c 96f7f8baeedc7639da94e4e7a4a2c200e2537c4eec9e5e1c2ffc821f40eb3105 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c c8a5372b97b2a2e972a280676f06ddb5b74e885d3b1f5ce383f839907b57ef68 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 -F src/select.c 4b14337a2742f0c0beeba490e9a05507e9b4b12184b9cd12773501d08d48e3fe +F src/select.c c8165a8dff9c7b0f038b566f02a1ea983f4e0fdf8a3308e357727f4c9d8b07a5 F src/shell.c.in 7aa68b305246391984c48f10725416079394a64bf0349fa4087d835c41ef733d F src/sqlite.h.in 4d93768709c53b7c653a63817a82d5a8625264ca0d8cdf99967ba147bdcf2aa6 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 9e09d5d60ac91423e1dec1169e9eb60a531f84261b48490c550cf4529540e6dc -R d9d8b14ef1a08757ec20208f0b613d4c -U stephan -Z 4b6795ed2210994cf6151e4f8f333a77 +P 447db1cd0a6575432996e9735e78bbb09c83827c5e3080339b34df176ab86af0 +R 251b3cd2cc3712f9285159fa5af5f855 +U drh +Z cb8855e74c77702fc96adfcd8b429854 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 0d8e1c2577..d98737fa2d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -447db1cd0a6575432996e9735e78bbb09c83827c5e3080339b34df176ab86af0 +578f76cfb2e298fe6bfd278b545091fe682d01feb0be56ef57b6c9f2c179ac61 diff --git a/src/select.c b/src/select.c index 9fcf30ff4a..916bd831e5 100644 --- a/src/select.c +++ b/src/select.c @@ -7821,7 +7821,7 @@ int sqlite3Select( #endif assert( pSubq->pSelect && (pSub->selFlags & SF_PushDown)!=0 ); }else{ - TREETRACE(0x4000,pParse,p,("WHERE-lcause push-down not possible\n")); + TREETRACE(0x4000,pParse,p,("WHERE-clause push-down not possible\n")); } /* Convert unused result columns of the subquery into simple NULL From c9ac238b92a5d1af3e91b3bb38e182b2a472c287 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 2 Dec 2024 16:24:47 +0000 Subject: [PATCH 66/89] Fix a comment typo on the sqlite3ExprIsSingleTableConstraint() routine. FossilOrigin-Name: 346a845bf1cd1c7e542f7bf763d86c197d9a3b4f3ea38ade416790a1cf80e6f2 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/expr.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index ceb4442469..8855823756 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sharmless\stypo\sin\sdebugging\soutput. -D 2024-12-02T16:07:38.007 +C Fix\sa\scomment\stypo\son\sthe\ssqlite3ExprIsSingleTableConstraint()\sroutine. +D 2024-12-02T16:24:47.122 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -727,7 +727,7 @@ F src/date.c 89ce1ff20512a7fa5070ba6e7dd5c171148ca7d580955795bf97c79c2456144a F src/dbpage.c 6c52074b0edb914d526c85541ca0f1fd23822b5dac39b6ee9b7f375d9fa592e9 F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42 -F src/expr.c cd85c48b408f67ce077155ad17b2822214b040afc2269cfcbe6510d945cc6986 +F src/expr.c ae41eb87e73a7b2e8748b0cf1e8e1d6b2e57fcb9abd093ef3da78f16fed36f33 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 928ed2517e8732113d2b9821aa37af639688d752f4ea9ac6e0e393d713eeb76f F src/func.c 49489dcce46d2d491cedb451e974264150c473e5f5bba448498a9aa4c1993537 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 447db1cd0a6575432996e9735e78bbb09c83827c5e3080339b34df176ab86af0 -R 251b3cd2cc3712f9285159fa5af5f855 +P 578f76cfb2e298fe6bfd278b545091fe682d01feb0be56ef57b6c9f2c179ac61 +R 4f8aa96fb5dc4e807fa23513f1b51f86 U drh -Z cb8855e74c77702fc96adfcd8b429854 +Z d928f2574431a0b1dc02438a266e7594 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index d98737fa2d..f585aba157 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -578f76cfb2e298fe6bfd278b545091fe682d01feb0be56ef57b6c9f2c179ac61 +346a845bf1cd1c7e542f7bf763d86c197d9a3b4f3ea38ade416790a1cf80e6f2 diff --git a/src/expr.c b/src/expr.c index 435ec9d780..37923bc84a 100644 --- a/src/expr.c +++ b/src/expr.c @@ -2646,7 +2646,7 @@ static int sqlite3ExprIsTableConstant(Expr *p, int iCur, int bAllowSubq){ ** (4a) pExpr must come from an ON clause.. ** (4b) and specifically the ON clause associated with the LEFT JOIN. ** -** (5) If pSrc is not the right operand of a LEFT JOIN or the left +** (5) If pSrc is the right operand of a LEFT JOIN or the left ** operand of a RIGHT JOIN, then pExpr must be from the WHERE ** clause, not an ON clause. ** From 4b491d85650f4a47a4869d9b1f805e97ad343d6e Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 2 Dec 2024 17:21:52 +0000 Subject: [PATCH 67/89] Ensure that the query flattener does not change an ON clause term to a WHERE clause term. FossilOrigin-Name: bdd408a2557ff05c9ea962a94b442f7c078d8e1ec27035aa95bc23d4d2bd5606 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/select.c | 40 ++++++++++++++++++++-------------------- test/pushdown.test | 31 +++++++++++++++++++++++++++++++ 4 files changed, 60 insertions(+), 29 deletions(-) diff --git a/manifest b/manifest index 8855823756..6acd483d76 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\scomment\stypo\son\sthe\ssqlite3ExprIsSingleTableConstraint()\sroutine. -D 2024-12-02T16:24:47.122 +C Ensure\sthat\sthe\squery\sflattener\sdoes\snot\schange\san\sON\sclause\sterm\sto\sa\sWHERE\sclause\sterm. +D 2024-12-02T17:21:52.631 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -777,7 +777,7 @@ F src/printf.c 96f7f8baeedc7639da94e4e7a4a2c200e2537c4eec9e5e1c2ffc821f40eb3105 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c c8a5372b97b2a2e972a280676f06ddb5b74e885d3b1f5ce383f839907b57ef68 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 -F src/select.c c8165a8dff9c7b0f038b566f02a1ea983f4e0fdf8a3308e357727f4c9d8b07a5 +F src/select.c 1334b0606dbdc753c8333f41bff441c97f77ef8ad9e33f3701e8adfe3b587c28 F src/shell.c.in 7aa68b305246391984c48f10725416079394a64bf0349fa4087d835c41ef733d F src/sqlite.h.in 4d93768709c53b7c653a63817a82d5a8625264ca0d8cdf99967ba147bdcf2aa6 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -1541,7 +1541,7 @@ F test/printf.test 685fec5a0c5af2490ab0632775a301554361d674211d690f5bee0a97b0533 F test/printf2.test 3f55c1871a5a65507416076f6eb97e738d5210aeda7595a74ee895f2224cce60 F test/progress.test ebab27f670bd0d4eb9d20d49cef96e68141d92fb F test/ptrchng.test ef1aa72d6cf35a2bbd0869a649b744e9d84977fc -F test/pushdown.test 84b525767442b3695d671f9df59dd91cf0ed8fb24cbbcdc55959f0dadeee8b39 +F test/pushdown.test 46a626ef1c0ca79b85296ff2e078b9da20a50e9b804b38f441590c3987580ddd F test/queryonly.test 5f653159e0f552f0552d43259890c1089391dcca F test/quick.test 1681febc928d686362d50057c642f77a02c62e57 F test/quickcheck.test a4b7e878cd97e46108291c409b0bf8214f29e18fddd68a42bc5c1375ad1fb80a @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 578f76cfb2e298fe6bfd278b545091fe682d01feb0be56ef57b6c9f2c179ac61 -R 4f8aa96fb5dc4e807fa23513f1b51f86 -U drh -Z d928f2574431a0b1dc02438a266e7594 +P 346a845bf1cd1c7e542f7bf763d86c197d9a3b4f3ea38ade416790a1cf80e6f2 +R 3d9ca48b4ce75be7e80d82495e9e7ffe +U dan +Z f342386cec8099c31eae45b11308d89c # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index f585aba157..8518415b4d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -346a845bf1cd1c7e542f7bf763d86c197d9a3b4f3ea38ade416790a1cf80e6f2 +bdd408a2557ff05c9ea962a94b442f7c078d8e1ec27035aa95bc23d4d2bd5606 diff --git a/src/select.c b/src/select.c index 916bd831e5..285e9133e7 100644 --- a/src/select.c +++ b/src/select.c @@ -3911,32 +3911,32 @@ static Expr *substExpr( if( pSubst->isOuterJoin ){ ExprSetProperty(pNew, EP_CanBeNull); } + if( pNew->op==TK_TRUEFALSE ){ + pNew->u.iValue = sqlite3ExprTruthValue(pNew); + pNew->op = TK_INTEGER; + ExprSetProperty(pNew, EP_IntValue); + } + + /* Ensure that the expression now has an implicit collation sequence, + ** just as it did when it was a column of a view or sub-query. */ + { + CollSeq *pNat = sqlite3ExprCollSeq(pSubst->pParse, pNew); + CollSeq *pColl = sqlite3ExprCollSeq(pSubst->pParse, + pSubst->pCList->a[iColumn].pExpr + ); + if( pNat!=pColl || (pNew->op!=TK_COLUMN && pNew->op!=TK_COLLATE) ){ + pNew = sqlite3ExprAddCollateString(pSubst->pParse, pNew, + (pColl ? pColl->zName : "BINARY") + ); + } + } + ExprClearProperty(pNew, EP_Collate); if( ExprHasProperty(pExpr,EP_OuterON|EP_InnerON) ){ sqlite3SetJoinExpr(pNew, pExpr->w.iJoin, pExpr->flags & (EP_OuterON|EP_InnerON)); } sqlite3ExprDelete(db, pExpr); pExpr = pNew; - if( pExpr->op==TK_TRUEFALSE ){ - pExpr->u.iValue = sqlite3ExprTruthValue(pExpr); - pExpr->op = TK_INTEGER; - ExprSetProperty(pExpr, EP_IntValue); - } - - /* Ensure that the expression now has an implicit collation sequence, - ** just as it did when it was a column of a view or sub-query. */ - { - CollSeq *pNat = sqlite3ExprCollSeq(pSubst->pParse, pExpr); - CollSeq *pColl = sqlite3ExprCollSeq(pSubst->pParse, - pSubst->pCList->a[iColumn].pExpr - ); - if( pNat!=pColl || (pExpr->op!=TK_COLUMN && pExpr->op!=TK_COLLATE) ){ - pExpr = sqlite3ExprAddCollateString(pSubst->pParse, pExpr, - (pColl ? pColl->zName : "BINARY") - ); - } - } - ExprClearProperty(pExpr, EP_Collate); } } }else{ diff --git a/test/pushdown.test b/test/pushdown.test index 271d412e7e..cb9042d258 100644 --- a/test/pushdown.test +++ b/test/pushdown.test @@ -325,4 +325,35 @@ do_eqp_test 6.3 { `--REUSE LIST SUBQUERY xxxxxx } +#------------------------------------------------------------------------- +reset_db +do_execsql_test 7.0 { + CREATE TABLE t0_1(a INT , b INT, c INT); + CREATE TABLE t0_2(a INT , b INT, c INT); + + INSERT INTO t0_1 (a, b, c) VALUES (1, 0, 1); + INSERT INTO t0_2 (a, b, c) VALUES (1, 0, 1); + + CREATE TABLE empty1(x); + CREATE TABLE empty2(y); +} + +do_execsql_test 7.1 { + SELECT t0_2.c + FROM (SELECT '0000' AS c0 FROM empty2 RIGHT JOIN t0_1 ON 1) AS v0 + LEFT JOIN empty1 ON v0.c0, t0_2 + RIGHT JOIN ( + SELECT 5678 AS col0 FROM (SELECT 0) + ) AS sub1 ON 1; +} {1} + +do_execsql_test 7.2 { + SELECT t0_2.c + FROM (SELECT '0000' AS c0 FROM empty2 RIGHT JOIN t0_1 ON 1) AS v0 + LEFT JOIN empty1 ON v0.c0, t0_2 + RIGHT JOIN ( + SELECT 5678 AS col0 FROM (SELECT 0) + ) AS sub1 ON 1 WHERE +t0_2.c; +} {1} + finish_test From 33c120f9b7de84fb0dd2625efe11097015c0e116 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 2 Dec 2024 19:55:39 +0000 Subject: [PATCH 68/89] Improve the output from the ".testctrl opt" command in the CLI. FossilOrigin-Name: de7064d118c33aab0fff39d072593b287c291870b843d093045300bde464420f --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/shell.c.in | 32 +++++++++++++++++++------------- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/manifest b/manifest index 6acd483d76..72a90586a4 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Ensure\sthat\sthe\squery\sflattener\sdoes\snot\schange\san\sON\sclause\sterm\sto\sa\sWHERE\sclause\sterm. -D 2024-12-02T17:21:52.631 +C Improve\sthe\soutput\sfrom\sthe\s".testctrl\sopt"\scommand\sin\sthe\sCLI. +D 2024-12-02T19:55:39.686 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -778,7 +778,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c c8a5372b97b2a2e972a280676f06ddb5b74e885d3b1f5ce383f839907b57ef68 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 1334b0606dbdc753c8333f41bff441c97f77ef8ad9e33f3701e8adfe3b587c28 -F src/shell.c.in 7aa68b305246391984c48f10725416079394a64bf0349fa4087d835c41ef733d +F src/shell.c.in 660da73720fc0783a00317568aa098ff1887a0a5cbc0c49138d348d9fc890961 F src/sqlite.h.in 4d93768709c53b7c653a63817a82d5a8625264ca0d8cdf99967ba147bdcf2aa6 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 346a845bf1cd1c7e542f7bf763d86c197d9a3b4f3ea38ade416790a1cf80e6f2 -R 3d9ca48b4ce75be7e80d82495e9e7ffe -U dan -Z f342386cec8099c31eae45b11308d89c +P bdd408a2557ff05c9ea962a94b442f7c078d8e1ec27035aa95bc23d4d2bd5606 +R 3b9b24c843f161d7a50bbe824bc3a3d8 +U drh +Z 5d7beb581213ea354b6d427078135558 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 8518415b4d..85c6e4778b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bdd408a2557ff05c9ea962a94b442f7c078d8e1ec27035aa95bc23d4d2bd5606 +de7064d118c33aab0fff39d072593b287c291870b843d093045300bde464420f diff --git a/src/shell.c.in b/src/shell.c.in index b4d7fc287f..2df54d5b3a 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -11465,7 +11465,9 @@ static int do_meta_command(char *zLine, ShellState *p){ }; unsigned int curOpt; unsigned int newOpt; + unsigned int m; int ii; + int nOff; sqlite3_test_control(SQLITE_TESTCTRL_GETOPT, p->db, &curOpt); newOpt = curOpt; for(ii=2; iidb,newOpt); - }else if( nArg<3 ){ - curOpt = ~newOpt; } - if( newOpt==0 ){ - sqlite3_fputs("+All\n", p->out); - }else if( newOpt==0xffffffff ){ - sqlite3_fputs("-All\n", p->out); + for(ii=nOff=0, m=1; ii<32; ii++, m <<= 1){ + if( m & newOpt ) nOff++; + } + if( nOff<12 ){ + sqlite3_fputs("+All", p->out); + for(ii=0; iiout, " -%s", aLabel[ii].zLabel); + } + } }else{ - int jj; - for(jj=0; jjout, "%c%s\n", (newOpt & m)==0 ? '+' : '-', - aLabel[jj].zLabel); + sqlite3_fputs("-All", p->out); + for(ii=0; iiout, " +%s", aLabel[ii].zLabel); } } } + sqlite3_fputs("\n", p->out); rc2 = isOk = 3; break; } From 76412af157c2af07c9b3dde98326cffeab51577d Mon Sep 17 00:00:00 2001 From: stephan Date: Wed, 4 Dec 2024 16:01:25 +0000 Subject: [PATCH 69/89] Minor doc correction in ext/misc/shathree.c, as reported in the forum. No functional changes. FossilOrigin-Name: 3b82d2c6b732617b9be205efadd07326057c93b71c47ffd42de63fc05093667b --- ext/misc/shathree.c | 2 +- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ext/misc/shathree.c b/ext/misc/shathree.c index 72ca7278ca..fc05a3b73a 100644 --- a/ext/misc/shathree.c +++ b/ext/misc/shathree.c @@ -12,7 +12,7 @@ ** ** This SQLite extension implements functions that compute SHA3 hashes ** in the way described by the (U.S.) NIST FIPS 202 SHA-3 Standard. -** Two SQL functions are implemented: +** Three SQL functions are implemented: ** ** sha3(X,SIZE) ** sha3_agg(Y,SIZE) diff --git a/manifest b/manifest index 72a90586a4..21ebd8c453 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improve\sthe\soutput\sfrom\sthe\s".testctrl\sopt"\scommand\sin\sthe\sCLI. -D 2024-12-02T19:55:39.686 +C Minor\sdoc\scorrection\sin\sext/misc/shathree.c,\sas\sreported\sin\sthe\sforum.\sNo\sfunctional\schanges. +D 2024-12-04T16:01:25.587 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -437,7 +437,7 @@ F ext/misc/rot13.c 51ac5f51e9d5fd811db58a9c23c628ad5f333c173f1fc53c8491a3603d385 F ext/misc/scrub.c 2a44b0d44c69584c0580ad2553f6290a307a49df4668941d2812135bfb96a946 F ext/misc/series.c cbdda2e2eb8159a1331974d246984c6e2693c6ea93930e6165046c8dbb8db0e9 F ext/misc/sha1.c cb5002148c2661b5946f34561701e9105e9d339b713ec8ac057fd888b196dcb9 -F ext/misc/shathree.c 1821d90a0040c9accdbe3e3527d378d30569475d758aa70f6848924c0b430e8c +F ext/misc/shathree.c f3a778f27bf3e71b666a77f28e463a3b931c4dbe4219447e61bb678b4bc121c3 F ext/misc/showauth.c 732578f0fe4ce42d577e1c86dc89dd14a006ab52 F ext/misc/spellfix.c bcc42ef3fd29429bc01a83e751332b8d4690e65d45008449bdffe7656371487f F ext/misc/sqlar.c a6175790482328171da47095f87608b48a476d4fac78d8a9ff18b03a2454f634 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P bdd408a2557ff05c9ea962a94b442f7c078d8e1ec27035aa95bc23d4d2bd5606 -R 3b9b24c843f161d7a50bbe824bc3a3d8 -U drh -Z 5d7beb581213ea354b6d427078135558 +P de7064d118c33aab0fff39d072593b287c291870b843d093045300bde464420f +R 86e86c5653d7da9aeabbd5fff5f5fa8b +U stephan +Z 756ded1a59123f8adfff343351124b4b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 85c6e4778b..2f657db6ca 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -de7064d118c33aab0fff39d072593b287c291870b843d093045300bde464420f +3b82d2c6b732617b9be205efadd07326057c93b71c47ffd42de63fc05093667b From eed134c4d3080dc03303ff2c21affcc94c3bba80 Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 5 Dec 2024 23:53:16 +0000 Subject: [PATCH 70/89] Fix the build of sqlite3_analyzer.exe on Windows that was broken by check-in [80f3bf8c2ee31ba1]. FossilOrigin-Name: 223f47b2db8d80629d60a642942eb8b288611e3e466cf904964285229a5809fc --- Makefile.msc | 2 +- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Makefile.msc b/Makefile.msc index 32b8143768..6da1e399d2 100644 --- a/Makefile.msc +++ b/Makefile.msc @@ -2669,7 +2669,7 @@ shelltest: $(TESTPROGS) .\testfixture.exe $(TOP)\test\permutations.test shell sqlite3_analyzer.c: $(SQLITE3C) $(SQLITE3H) $(TOP)\src\tclsqlite.c $(TOP)\tool\spaceanal.tcl $(TOP)\tool\mkccode.tcl $(TOP)\tool\sqlite3_analyzer.c.in $(TOP)\ext\misc\sqlite3_stdio.h $(TOP)\ext\misc\sqlite3_stdio.c $(SQLITE_TCL_DEP) - $(TCLSH_CMD) $(TOP)\tool\mkccode.tcl $(TOP)\tool\sqlite3_analyzer.c.in > $@ + $(TCLSH_CMD) $(TOP)\tool\mkccode.tcl -DINCLUDE_SQLITE3_C $(TOP)\tool\sqlite3_analyzer.c.in > $@ sqlite3_analyzer.exe: sqlite3_analyzer.c $(LIBRESOBJS) $(LTLINK) $(NO_WARN) -DBUILD_sqlite -I$(TCLINCDIR) sqlite3_analyzer.c \ diff --git a/manifest b/manifest index 21ebd8c453..53e511b0a1 100644 --- a/manifest +++ b/manifest @@ -1,11 +1,11 @@ -C Minor\sdoc\scorrection\sin\sext/misc/shathree.c,\sas\sreported\sin\sthe\sforum.\sNo\sfunctional\schanges. -D 2024-12-04T16:01:25.587 +C Fix\sthe\sbuild\sof\ssqlite3_analyzer.exe\son\sWindows\sthat\swas\sbroken\sby\ncheck-in\s[80f3bf8c2ee31ba1]. +D 2024-12-05T23:53:16.868 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d F Makefile.in 86e81bdb118bf332a27865090b7dce96ddde93c2f1586e1b911569acaa228f19 F Makefile.linux-generic bd3e3cacd369821a6241d4ea1967395c962dfe3057e38cb0a435cee0e8b789d0 -F Makefile.msc a92237976eb92c5efaa0dd2524746aec12c196e12df8d4dbff9543a4648c3312 +F Makefile.msc f8b4097dd93bd19df8fda39ca8b530904c2e7134a28094f490c0dc11abd47ce2 F README.md c3c0f19532ce28f6297a71870f3c7b424729f0e6d9ab889616d3587dd2332159 F VERSION 8dc0c3df15fd5ff0622f88fc483533fce990b1cbb2f5fb9fdfb4dbd71eef2889 F art/icon-243x273.gif 9750b734f82fdb3dc43127753d5e6fbf3b62c9f4e136c2fbf573b2f57ea87af5 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P de7064d118c33aab0fff39d072593b287c291870b843d093045300bde464420f -R 86e86c5653d7da9aeabbd5fff5f5fa8b -U stephan -Z 756ded1a59123f8adfff343351124b4b +P 3b82d2c6b732617b9be205efadd07326057c93b71c47ffd42de63fc05093667b +R 24123a0459182d20f8acb8c7b97c6d23 +U drh +Z 4aebafa1987ff29c0a240fdab74f1ca1 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 2f657db6ca..1009c8aa46 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3b82d2c6b732617b9be205efadd07326057c93b71c47ffd42de63fc05093667b +223f47b2db8d80629d60a642942eb8b288611e3e466cf904964285229a5809fc From 0448e00aaf727a8120ae0a2f3a455ac2eb162e1c Mon Sep 17 00:00:00 2001 From: stephan Date: Fri, 6 Dec 2024 00:09:05 +0000 Subject: [PATCH 71/89] Ensure that the post-config checks for @UNEXPANDED_VARS@ pass even if --disable-tcl is used, as reported in [forum:74ef8059fc|forum post 74ef8059fc]. FossilOrigin-Name: a38606bf44a1b5d0f684f67174c33f8c88c7927e23fc6a715e8d3ae7a6614bbd --- auto.def | 7 +++++++ manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/auto.def b/auto.def index e4ddbbd46f..ffc10ab54c 100644 --- a/auto.def +++ b/auto.def @@ -563,6 +563,13 @@ proc sqlite-check-tcl {} { define HAVE_TCL 0 ; # Will be enabled via --tcl or a successful search define TCLLIBDIR "" ; # Installation dir for TCL extension lib define TCL_CONFIG_SH ""; # full path to tclConfig.sh + + # Clear out all vars which would be set by tclConfigToAutoDef.sh, so that the late-config + # validation of @VARS@ works... + foreach k {TCL_INCLUDE_SPEC TCL_LIB_SPEC TCL_STUB_LIB_SPEC TCL_EXEC_PREFIX TCL_VERSION} { + define $k "" + } + file delete -force ".tclenv.sh"; # ensure no stale state from previous configures. if {![opt-bool tcl]} { proj-indented-notice { diff --git a/manifest b/manifest index 53e511b0a1..5374b6c218 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\sbuild\sof\ssqlite3_analyzer.exe\son\sWindows\sthat\swas\sbroken\sby\ncheck-in\s[80f3bf8c2ee31ba1]. -D 2024-12-05T23:53:16.868 +C Ensure\sthat\sthe\spost-config\schecks\sfor\s@UNEXPANDED_VARS@\spass\seven\sif\s--disable-tcl\sis\sused,\sas\sreported\sin\s[forum:74ef8059fc|forum\spost\s74ef8059fc]. +D 2024-12-06T00:09:05.046 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -14,7 +14,7 @@ F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 F art/sqlite370.svg 40b7e2fe8aac3add5d56dd86ab8d427a4eca5bcb3fe4f8946cb3794e1821d531 -F auto.def 6de760c0b88ace5550403544a2eb83eb6834be99997c845d824c19774e056dc5 +F auto.def 9f72325769bb436b895e59830754420bbcf511e97cad46d3d02b8238c74fb2de F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 3b82d2c6b732617b9be205efadd07326057c93b71c47ffd42de63fc05093667b -R 24123a0459182d20f8acb8c7b97c6d23 -U drh -Z 4aebafa1987ff29c0a240fdab74f1ca1 +P 223f47b2db8d80629d60a642942eb8b288611e3e466cf904964285229a5809fc +R 5615d7d2067b25d2e740958008f1a1e0 +U stephan +Z d55afe31ff3364c8edd502e77c937df9 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 1009c8aa46..7afeea1703 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -223f47b2db8d80629d60a642942eb8b288611e3e466cf904964285229a5809fc +a38606bf44a1b5d0f684f67174c33f8c88c7927e23fc6a715e8d3ae7a6614bbd From c40329c9bf497896c3b58bf8918840a574f64b86 Mon Sep 17 00:00:00 2001 From: stephan Date: Fri, 6 Dec 2024 00:12:43 +0000 Subject: [PATCH 72/89] Minor doc update in auto.def. No functional changes. FossilOrigin-Name: d324be296de443bd2853c732b10960178bf3ba9f18c80c509f6b41e2cfb2f3af --- auto.def | 5 +++-- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/auto.def b/auto.def index ffc10ab54c..7b57e9599b 100644 --- a/auto.def +++ b/auto.def @@ -564,8 +564,9 @@ proc sqlite-check-tcl {} { define TCLLIBDIR "" ; # Installation dir for TCL extension lib define TCL_CONFIG_SH ""; # full path to tclConfig.sh - # Clear out all vars which would be set by tclConfigToAutoDef.sh, so that the late-config - # validation of @VARS@ works... + # Clear out all vars which would be set by tclConfigToAutoDef.sh, so + # that the late-config validation of @VARS@ works even if + # --disable-tcl is used. foreach k {TCL_INCLUDE_SPEC TCL_LIB_SPEC TCL_STUB_LIB_SPEC TCL_EXEC_PREFIX TCL_VERSION} { define $k "" } diff --git a/manifest b/manifest index 5374b6c218..150300a272 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Ensure\sthat\sthe\spost-config\schecks\sfor\s@UNEXPANDED_VARS@\spass\seven\sif\s--disable-tcl\sis\sused,\sas\sreported\sin\s[forum:74ef8059fc|forum\spost\s74ef8059fc]. -D 2024-12-06T00:09:05.046 +C Minor\sdoc\supdate\sin\sauto.def.\sNo\sfunctional\schanges. +D 2024-12-06T00:12:43.147 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -14,7 +14,7 @@ F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 F art/sqlite370.svg 40b7e2fe8aac3add5d56dd86ab8d427a4eca5bcb3fe4f8946cb3794e1821d531 -F auto.def 9f72325769bb436b895e59830754420bbcf511e97cad46d3d02b8238c74fb2de +F auto.def 8f15c373e88c4c5296d6100e3d35893bd6edb57cebcb6a8c1e827e6faaef52e4 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 223f47b2db8d80629d60a642942eb8b288611e3e466cf904964285229a5809fc -R 5615d7d2067b25d2e740958008f1a1e0 +P a38606bf44a1b5d0f684f67174c33f8c88c7927e23fc6a715e8d3ae7a6614bbd +R 33caa7144247a27ce977090c08431529 U stephan -Z d55afe31ff3364c8edd502e77c937df9 +Z 799ae7852d1959c2ef269cb9b60fc9dd # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 7afeea1703..cbe3ae4ef5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a38606bf44a1b5d0f684f67174c33f8c88c7927e23fc6a715e8d3ae7a6614bbd +d324be296de443bd2853c732b10960178bf3ba9f18c80c509f6b41e2cfb2f3af From ef636cc3cd72b2a7f5803777b95419b279baacab Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 6 Dec 2024 18:35:16 +0000 Subject: [PATCH 73/89] Add the SQLITE_PREPARE_DONT_LOG option for sqlite3_prepare_v3(), that prevents errors in the compilation of the SQL from being sent to sqlite3_log(). FossilOrigin-Name: 870403425493866232cf9e8fa62288861b7d0a4091b15d75727f8bb31da46f94 --- manifest | 22 +++++++++++----------- manifest.uuid | 2 +- src/pragma.c | 3 ++- src/sqlite.h.in | 11 +++++++++++ src/tokenize.c | 4 +++- src/vdbe.h | 2 +- test/pragma4.test | 21 +++++++++++++++++++++ 7 files changed, 50 insertions(+), 15 deletions(-) diff --git a/manifest b/manifest index 150300a272..d179789cb4 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Minor\sdoc\supdate\sin\sauto.def.\sNo\sfunctional\schanges. -D 2024-12-06T00:12:43.147 +C Add\sthe\sSQLITE_PREPARE_DONT_LOG\soption\sfor\ssqlite3_prepare_v3(),\sthat\sprevents\nerrors\sin\sthe\scompilation\sof\sthe\sSQL\sfrom\sbeing\ssent\sto\ssqlite3_log(). +D 2024-12-06T18:35:16.856 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -770,7 +770,7 @@ F src/parse.y dcf45a81b61223ac93e61fdfe9b22d635dd371c446e8222634d90aa37e25e5f6 F src/pcache.c 588cc3c5ccaaadde689ed35ce5c5c891a1f7b1f4d1f56f6cf0143b74d8ee6484 F src/pcache.h 1497ce1b823cf00094bb0cf3bac37b345937e6f910890c626b16512316d3abf5 F src/pcache1.c 49516ad7718a3626f28f710fa7448ef1fce3c07fd169acbb4817341950264319 -F src/pragma.c a2ec3657a953fa7dea7c1e680e4358b6ce6ae570b6c5234e0f5ef219d308d223 +F src/pragma.c 767accbbbe53f6bacd05d35cfe2b3e6b830b01719010e8c684cb8b126dbad46e F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7 F src/prepare.c 1832be043fce7d489959aae6f994c452d023914714c4d5457beaed51c0f3d126 F src/printf.c 96f7f8baeedc7639da94e4e7a4a2c200e2537c4eec9e5e1c2ffc821f40eb3105 @@ -779,7 +779,7 @@ F src/resolve.c c8a5372b97b2a2e972a280676f06ddb5b74e885d3b1f5ce383f839907b57ef68 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 1334b0606dbdc753c8333f41bff441c97f77ef8ad9e33f3701e8adfe3b587c28 F src/shell.c.in 660da73720fc0783a00317568aa098ff1887a0a5cbc0c49138d348d9fc890961 -F src/sqlite.h.in 4d93768709c53b7c653a63817a82d5a8625264ca0d8cdf99967ba147bdcf2aa6 +F src/sqlite.h.in 6afbcaae44140216704a6c82e4c4ea4118c46d5f6573d6c5fa4fc901ed9d369e F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54 F src/sqliteInt.h 77be043f8694f4a8702d0ee882022b2e5a6489a0493e77c5d9a73f1efc5a2cc1 @@ -838,7 +838,7 @@ F src/test_windirent.h da2e5b73c32d09905fbdd00f27cd802212a32a58ead882736fe4f5eb7 F src/test_window.c 6d80e11fba89a1796525e6f0048ff0c7789aa2c6b0b11c80827dc1437bd8ea72 F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c -F src/tokenize.c 3f703cacdab728d7741e5a6ac242006d74fe1c2754d4f03ed889d7253259bd68 +F src/tokenize.c fe17e03175cae35b6694d0f879e7bc3d1ddea2fd4ab148cba9bbd025b7a7bb12 F src/treeview.c 921392561385e05ef5703f20a7a72f0a0a45c1fb749558d7467fae2c3f525006 F src/trigger.c 0bb986a5b96047fd597c6aac28588853df56064e576e6b81ba777ef2ccaac461 F src/update.c 0e01aa6a3edf9ec112b33eb714b9016a81241497b1fb7c3e74332f4f71756508 @@ -847,7 +847,7 @@ F src/utf.c 8b29d9a5956569ea2700f869669b8ef67a9662ee5e724ff77ab3c387e27094ba F src/util.c ceebf912f673247e305f16f97f0bb7285fca1d37413b79680714a553a9021d33 F src/vacuum.c b763b6457bd058d2072ef9364832351fd8d11e8abf70cbb349657360f7d55c40 F src/vdbe.c 8a6eb02823b424b273614bae41579392a5c495424592b60423dd2c443a583df0 -F src/vdbe.h c2549a215898a390de6669cfa32adba56f0d7e17ba5a7f7b14506d6fd5f0c36a +F src/vdbe.h 9676348d342bd04e21e384c63b57224171ce84fac77853357334ef94c4d33cf4 F src/vdbeInt.h 2da01c73e8e3736a9015d5b04aa04d209bc9023d279d237d4d409205e921ea1e F src/vdbeapi.c 6353de05e8e78e497ccb33381ba5662ccc11c0339e5b1455faff01b6dacc3075 F src/vdbeaux.c f0706ad786b8a6c5bc7ea622f3916c2ba2b883abc872d0b4911c4f021945c0e5 @@ -1532,7 +1532,7 @@ F test/pg_common.tcl 3b27542224db1e713ae387459b5d117c836a5f6e328846922993b6d2b76 F test/pragma.test 11cb9310c42f921918f7f563e3c0b6e70f9f9c3a6a1cf12af8fccb6c574f3882 F test/pragma2.test e5d5c176360c321344249354c0c16aec46214c9f F test/pragma3.test 92a46bbea12322dd94a404f49edcfbfc913a2c98115f0d030a7459bb4712ef31 -F test/pragma4.test f93f317693e90ece4ed0f5505d9035cae03f9fc684b718278433f2e48703f693 +F test/pragma4.test 336b99c2a9fd35af3cc6da94f794b4cba09bbdb18f0ecbd3f734bb6bb8e1c15c F test/pragma5.test 7b33fc43e2e41abf17f35fb73f71b49671a380ea92a6c94b6ce530a25f8d9102 F test/pragma6.test c5ec577ba087954b4dfa619a3cbe97b155b60a0af487527abe89b10fc17e6512 F test/pragmafault.test 275edaf3161771d37de60e5c2b412627ac94cef11739236bec12ed1258b240f8 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P a38606bf44a1b5d0f684f67174c33f8c88c7927e23fc6a715e8d3ae7a6614bbd -R 33caa7144247a27ce977090c08431529 -U stephan -Z 799ae7852d1959c2ef269cb9b60fc9dd +P d324be296de443bd2853c732b10960178bf3ba9f18c80c509f6b41e2cfb2f3af +R ec11279f510ab644cd4a136e6f39dd62 +U drh +Z 8980c884368db10cb1cda65aa0a82ff3 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index cbe3ae4ef5..ab7dd98ed5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d324be296de443bd2853c732b10960178bf3ba9f18c80c509f6b41e2cfb2f3af +870403425493866232cf9e8fa62288861b7d0a4091b15d75727f8bb31da46f94 diff --git a/src/pragma.c b/src/pragma.c index 785676e04e..ae0c86f039 100644 --- a/src/pragma.c +++ b/src/pragma.c @@ -1279,7 +1279,8 @@ void sqlite3Pragma( char *zSql = sqlite3MPrintf(db, "SELECT*FROM\"%w\"", pTab->zName); if( zSql ){ sqlite3_stmt *pDummy = 0; - (void)sqlite3_prepare(db, zSql, -1, &pDummy, 0); + (void)sqlite3_prepare_v3(db, zSql, -1, SQLITE_PREPARE_DONT_LOG, + &pDummy, 0); (void)sqlite3_finalize(pDummy); sqlite3DbFree(db, zSql); } diff --git a/src/sqlite.h.in b/src/sqlite.h.in index b84938b45c..9a117fa54e 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -4204,11 +4204,22 @@ int sqlite3_limit(sqlite3*, int id, int newVal); **
The SQLITE_PREPARE_NO_VTAB flag causes the SQL compiler ** to return an error (error code SQLITE_ERROR) if the statement uses ** any virtual tables. +** +** [[SQLITE_PREPARE_DONT_LOG]]
SQLITE_PREPARE_DONT_LOG
+**
The SQLITE_PREPARE_DONT_LOG flag prevents SQL compiler +** errors from being sent to the error log defined by +** [SQLITE_CONFIG_LOG]. This can be used, for example, to do test +** compiles to see if some SQL syntax is well-formed, without generating +** messages on the global error log when it is not. If the test compile +** fails, the sqlite3_prepare_v3() call returns the same error indications +** with or without this flag; it just omits the call to [sqlite3_log()] that +** logs the error. ** */ #define SQLITE_PREPARE_PERSISTENT 0x01 #define SQLITE_PREPARE_NORMALIZE 0x02 #define SQLITE_PREPARE_NO_VTAB 0x04 +#define SQLITE_PREPARE_DONT_LOG 0x10 /* ** CAPI3REF: Compiling An SQL Statement diff --git a/src/tokenize.c b/src/tokenize.c index 65d1fbf350..b49b2aa16e 100644 --- a/src/tokenize.c +++ b/src/tokenize.c @@ -728,7 +728,9 @@ int sqlite3RunParser(Parse *pParse, const char *zSql){ if( pParse->zErrMsg==0 ){ pParse->zErrMsg = sqlite3MPrintf(db, "%s", sqlite3ErrStr(pParse->rc)); } - sqlite3_log(pParse->rc, "%s in \"%s\"", pParse->zErrMsg, pParse->zTail); + if( (pParse->prepFlags & SQLITE_PREPARE_DONT_LOG)==0 ){ + sqlite3_log(pParse->rc, "%s in \"%s\"", pParse->zErrMsg, pParse->zTail); + } nErr++; } pParse->zTail = zSql; diff --git a/src/vdbe.h b/src/vdbe.h index f40f68d24b..71aae29a08 100644 --- a/src/vdbe.h +++ b/src/vdbe.h @@ -185,7 +185,7 @@ typedef struct VdbeOpList VdbeOpList; ** Additional non-public SQLITE_PREPARE_* flags */ #define SQLITE_PREPARE_SAVESQL 0x80 /* Preserve SQL text */ -#define SQLITE_PREPARE_MASK 0x0f /* Mask of public flags */ +#define SQLITE_PREPARE_MASK 0x1f /* Mask of public flags */ /* ** Prototypes for the VDBE interface. See comments on the implementation diff --git a/test/pragma4.test b/test/pragma4.test index 5360fbac40..0466960cab 100644 --- a/test/pragma4.test +++ b/test/pragma4.test @@ -281,6 +281,27 @@ ifcapable vtab { JOIN pragma_table_info(f."table", t.schema) AS i WHERE i.pk; } {t2 t1 d a 1} + + # With a corrupt VIEW in the schema, the PRAGMA table_list command + # will generate internal errors. Confirm that these internal errors + # do not appears on the log. https://sqlite.org/src/forumpost/00ee467e + test_sqlite3_log [list lappend ::log] + set ::log {} + do_execsql_test 6.1 { + CREATE VIEW v1 AS SELECT abs(a) FROM t1; + PRAGMA writable_schema=ON; + UPDATE sqlite_schema + SET sql=replace(sql,'abs(a)','nosuchfunc(a)') + WHERE name='v1'; + PRAGMA writable_schema=RESET; + } {} + do_execsql_test 6.2 { + PRAGMA table_list; + } {main v1 view 0 0 0 main t2 table 2 0 0 main t1 table 2 0 0 main sqlite_schema table 5 0 0 temp sqlite_temp_schema table 5 0 0} + do_test 6.3 { + set ::log + } {} + test_sqlite3_log {} } # 2024-05-08 https://sqlite.org/forum/forumpost/cf29a33e94 From 1a4b2117f11fba43ca892936df22681a7c496d46 Mon Sep 17 00:00:00 2001 From: drh <> Date: Sat, 7 Dec 2024 14:48:55 +0000 Subject: [PATCH 74/89] On x64 hardware, round-trip uint64_t→double→uint64_t conversions fail for values greater than UINT64_MAX-2047. This caused the SQLite text-to-float converter routine to give incorrect results for values between '1.8446744073709550592eNNN' and '1.8446744073709551609eNNN' for any exponent NNN. This problem was introduced by check-in [761d8fd18b0ee868] and first appeared in version 3.47.0 and was reported by [forum:/forumpost/569a7209179a7f5e|forum post 569a7209179a7f5e]. Fixed by this check-in. FossilOrigin-Name: 81342fa6dd03fffbe7d4d699ff049dcef4d30344578bb6f91cb58a4e5a4f6036 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/util.c | 14 ++++++++++---- test/atof1.test | 38 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+), 12 deletions(-) diff --git a/manifest b/manifest index d179789cb4..20304efaa2 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\sSQLITE_PREPARE_DONT_LOG\soption\sfor\ssqlite3_prepare_v3(),\sthat\sprevents\nerrors\sin\sthe\scompilation\sof\sthe\sSQL\sfrom\sbeing\ssent\sto\ssqlite3_log(). -D 2024-12-06T18:35:16.856 +C On\sx64\shardware,\sround-trip\suint64_t→double→uint64_t\sconversions\nfail\sfor\svalues\sgreater\sthan\sUINT64_MAX-2047.\s\sThis\scaused\sthe\sSQLite\ntext-to-float\sconverter\sroutine\sto\sgive\sincorrect\sresults\sfor\svalues\nbetween\s'1.8446744073709550592eNNN'\sand\s'1.8446744073709551609eNNN'\sfor\sany\nexponent\sNNN.\s\sThis\sproblem\swas\sintroduced\sby\scheck-in\s[761d8fd18b0ee868]\nand\sfirst\sappeared\sin\sversion\s3.47.0\sand\swas\sreported\sby\n[forum:/forumpost/569a7209179a7f5e|forum\spost\s569a7209179a7f5e].\s\sFixed\nby\sthis\scheck-in. +D 2024-12-07T14:48:55.778 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -844,7 +844,7 @@ F src/trigger.c 0bb986a5b96047fd597c6aac28588853df56064e576e6b81ba777ef2ccaac461 F src/update.c 0e01aa6a3edf9ec112b33eb714b9016a81241497b1fb7c3e74332f4f71756508 F src/upsert.c 215328c3f91623c520ec8672c44323553f12caeb4f01b1090ebdca99fdf7b4f1 F src/utf.c 8b29d9a5956569ea2700f869669b8ef67a9662ee5e724ff77ab3c387e27094ba -F src/util.c ceebf912f673247e305f16f97f0bb7285fca1d37413b79680714a553a9021d33 +F src/util.c fde9ad9ce18841a844ce277b4eb4ace4ada7ca4110f9bed5d1d5ce89dabaf957 F src/vacuum.c b763b6457bd058d2072ef9364832351fd8d11e8abf70cbb349657360f7d55c40 F src/vdbe.c 8a6eb02823b424b273614bae41579392a5c495424592b60423dd2c443a583df0 F src/vdbe.h 9676348d342bd04e21e384c63b57224171ce84fac77853357334ef94c4d33cf4 @@ -910,7 +910,7 @@ F test/analyzeE.test d2ec7921c162cdc33ac8e7eb01f9ebf78100610af7c94c8552bbf551de1 F test/analyzeF.test 40b5cc3ad7b10e81020d7ca86f1417647ecfae7477cfd88acc5aa7ae1068f949 F test/analyzeG.test 623be33038c49648872746c8dd8b23b5792c08fef173c55e82f1b12fca259852 F test/analyzer1.test 459fa02c445ddbf0101a3bad47b34290a35f2e49 -F test/atof1.test 7ec56debc04b32e8f9dc87239f4bbb07d84550fb83dd7475b0ead9e83beb35da +F test/atof1.test bd21c4a0e718ab1470de07a2a79f2544d7903be34feebcc80de04beee4807b00 F test/atomic.test 065a453dde33c77ff586d91ccaa6ed419829d492dbb1a5694b8a09f3f9d7d061 F test/atomic2.test b6863b4aa552543874f80b42fb3063f1c8c2e3d8e56b6562f00a3cc347b5c1da F test/atrc.c c388fac43dbba05c804432a7135ae688b32e8f25818e9994ffba4b64cf60c27c @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P d324be296de443bd2853c732b10960178bf3ba9f18c80c509f6b41e2cfb2f3af -R ec11279f510ab644cd4a136e6f39dd62 +P 870403425493866232cf9e8fa62288861b7d0a4091b15d75727f8bb31da46f94 +R 2d1ae3d1053fb61b1868786464dea794 U drh -Z 8980c884368db10cb1cda65aa0a82ff3 +Z 8f0bbc8ae68469d8947e1d3fa193444c # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index ab7dd98ed5..78b1357e6c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -870403425493866232cf9e8fa62288861b7d0a4091b15d75727f8bb31da46f94 +81342fa6dd03fffbe7d4d699ff049dcef4d30344578bb6f91cb58a4e5a4f6036 diff --git a/src/util.c b/src/util.c index 52c2a744ca..31b05666a0 100644 --- a/src/util.c +++ b/src/util.c @@ -643,7 +643,7 @@ do_atof_calc: e = (e*esign) + d; /* Try to adjust the exponent to make it smaller */ - while( e>0 && s<(LARGEST_UINT64/10) ){ + while( e>0 && s<((LARGEST_UINT64-0x7ff)/10) ){ s *= 10; e--; } @@ -653,11 +653,17 @@ do_atof_calc: } rr[0] = (double)s; - s2 = (u64)rr[0]; + if( s<(LARGEST_UINT64-0x7ff) ){ + s2 = (u64)rr[0]; #if defined(_MSC_VER) && _MSC_VER<1700 - if( s2==0x8000000000000000LL ){ s2 = 2*(u64)(0.5*rr[0]); } + if( s2==0x8000000000000000LL ){ s2 = 2*(u64)(0.5*rr[0]); } #endif - rr[1] = s>=s2 ? (double)(s - s2) : -(double)(s2 - s); + rr[1] = s>=s2 ? (double)(s - s2) : -(double)(s2 - s); + }else{ + s2 = s; + rr[1] = 0.0; + } + if( e>0 ){ while( e>=100 ){ e -= 100; diff --git a/test/atof1.test b/test/atof1.test index 1a5db2cc79..39747e5da5 100644 --- a/test/atof1.test +++ b/test/atof1.test @@ -82,5 +82,43 @@ do_execsql_test atof1-2.40 { SELECT randomblob(0) - 1; } {-1} +# 2024-12-07 https://sqlite.org/forum/forumpost/569a7209179a7f5e +# Incorrect conversion of floating point or integer literals that +# have significant digits that begin with 1844674407370955 followed +# by more digits in the range 0592 throgh 1609. +# +do_execsql_test atof-3.1 { + WITH RECURSIVE bigval(i,vtxt) AS ( + SELECT 0, '18446744073709550000' + UNION ALL + SELECT i+1, format('1844674407370955%04d',i+1) FROM bigval + WHERE i+1<=9999 + ) + SELECT vtxt, CAST(vtxt AS REAL) FROM bigval + WHERE CAST(vtxt AS REAL) NOT GLOB '1.8446744073709[56]*'; +} {} +do_execsql_test atof-3.2 { + WITH RECURSIVE bigval(i,vtxt) AS ( + SELECT 0, '18.446744073709550000' + UNION ALL + SELECT i+1, format('18.44674407370955%04d',i+1) FROM bigval + WHERE i+1<=9999 + ) + SELECT vtxt, CAST(vtxt AS REAL) FROM bigval + WHERE CAST(vtxt AS REAL) NOT GLOB '18.446744073709*'; +} {} +do_execsql_test atof-3.3 { + WITH RECURSIVE exp(n,v1,v2) AS ( + SELECT -200, '1.8446744073709550592e-200', '1.8446744073709551609e-200' + UNION ALL + SELECT n+1, ('1.8446744073709550592e'||n),('1.8446744073709551609e'||n) + FROM exp WHERE n<200 + ) + SELECT n, v1, v2 + FROM exp + WHERE format('%.10e',CAST(v1 AS REAL)) NOT GLOB '1.8446*' + OR format('%.10e',CAST(v2 AS REAL)) NOT GLOB '1.8446*'; +} {} + finish_test From 45978701089cd4e143aa7b72843390417c4e43be Mon Sep 17 00:00:00 2001 From: drh <> Date: Sat, 7 Dec 2024 16:53:42 +0000 Subject: [PATCH 75/89] Fix harmless compiler warning caused by the previous check-in. FossilOrigin-Name: 462700aeb7c183d739ead4d726ce5384b3297bcf7929abd010987fa3a5f64807 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/util.c | 4 +--- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 20304efaa2..9b7583d7cd 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C On\sx64\shardware,\sround-trip\suint64_t→double→uint64_t\sconversions\nfail\sfor\svalues\sgreater\sthan\sUINT64_MAX-2047.\s\sThis\scaused\sthe\sSQLite\ntext-to-float\sconverter\sroutine\sto\sgive\sincorrect\sresults\sfor\svalues\nbetween\s'1.8446744073709550592eNNN'\sand\s'1.8446744073709551609eNNN'\sfor\sany\nexponent\sNNN.\s\sThis\sproblem\swas\sintroduced\sby\scheck-in\s[761d8fd18b0ee868]\nand\sfirst\sappeared\sin\sversion\s3.47.0\sand\swas\sreported\sby\n[forum:/forumpost/569a7209179a7f5e|forum\spost\s569a7209179a7f5e].\s\sFixed\nby\sthis\scheck-in. -D 2024-12-07T14:48:55.778 +C Fix\sharmless\scompiler\swarning\scaused\sby\sthe\sprevious\scheck-in. +D 2024-12-07T16:53:42.327 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -844,7 +844,7 @@ F src/trigger.c 0bb986a5b96047fd597c6aac28588853df56064e576e6b81ba777ef2ccaac461 F src/update.c 0e01aa6a3edf9ec112b33eb714b9016a81241497b1fb7c3e74332f4f71756508 F src/upsert.c 215328c3f91623c520ec8672c44323553f12caeb4f01b1090ebdca99fdf7b4f1 F src/utf.c 8b29d9a5956569ea2700f869669b8ef67a9662ee5e724ff77ab3c387e27094ba -F src/util.c fde9ad9ce18841a844ce277b4eb4ace4ada7ca4110f9bed5d1d5ce89dabaf957 +F src/util.c 196a1498ed9ab5d3cca55db73ba10348c058c840b0a534e9d5d90db1862a50a1 F src/vacuum.c b763b6457bd058d2072ef9364832351fd8d11e8abf70cbb349657360f7d55c40 F src/vdbe.c 8a6eb02823b424b273614bae41579392a5c495424592b60423dd2c443a583df0 F src/vdbe.h 9676348d342bd04e21e384c63b57224171ce84fac77853357334ef94c4d33cf4 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 870403425493866232cf9e8fa62288861b7d0a4091b15d75727f8bb31da46f94 -R 2d1ae3d1053fb61b1868786464dea794 +P 81342fa6dd03fffbe7d4d699ff049dcef4d30344578bb6f91cb58a4e5a4f6036 +R e75637f5d04864b72a3d36ee13db9474 U drh -Z 8f0bbc8ae68469d8947e1d3fa193444c +Z f6c4d3a013c59065246d07d8eff3b3d4 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 78b1357e6c..c622ec5bdf 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -81342fa6dd03fffbe7d4d699ff049dcef4d30344578bb6f91cb58a4e5a4f6036 +462700aeb7c183d739ead4d726ce5384b3297bcf7929abd010987fa3a5f64807 diff --git a/src/util.c b/src/util.c index 31b05666a0..bb676c5fbb 100644 --- a/src/util.c +++ b/src/util.c @@ -540,7 +540,6 @@ int sqlite3AtoF(const char *z, double *pResult, int length, u8 enc){ int nDigit = 0; /* Number of digits processed */ int eType = 1; /* 1: pure integer, 2+: fractional -1 or less: bad UTF16 */ double rr[2]; - u64 s2; assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE ); *pResult = 0.0; /* Default return value, in case of an error */ @@ -654,13 +653,12 @@ do_atof_calc: rr[0] = (double)s; if( s<(LARGEST_UINT64-0x7ff) ){ - s2 = (u64)rr[0]; + u64 s2 = (u64)rr[0]; #if defined(_MSC_VER) && _MSC_VER<1700 if( s2==0x8000000000000000LL ){ s2 = 2*(u64)(0.5*rr[0]); } #endif rr[1] = s>=s2 ? (double)(s - s2) : -(double)(s2 - s); }else{ - s2 = s; rr[1] = 0.0; } From 92d252e06db3fcfb06e5d3f45f4aa6f5e0c7cedc Mon Sep 17 00:00:00 2001 From: drh <> Date: Sat, 7 Dec 2024 17:08:13 +0000 Subject: [PATCH 76/89] Fix more harmless compiler warnings. FossilOrigin-Name: f5b8fd77635e5e6d2d88a1ce74e1bd6c4311260a2b695e5055b898b880bf5718 --- ext/fts5/fts5_main.c | 1 + ext/misc/vfstrace.c | 4 ++-- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/shell.c.in | 2 ++ 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/ext/fts5/fts5_main.c b/ext/fts5/fts5_main.c index d1a45e4e26..876420f24d 100644 --- a/ext/fts5/fts5_main.c +++ b/ext/fts5/fts5_main.c @@ -3667,6 +3667,7 @@ static void fts5InsttokenFunc( sqlite3_value **apArg /* Function arguments */ ){ assert( nArg==1 ); + (void)nArg; sqlite3_result_value(pCtx, apArg[0]); sqlite3_result_subtype(pCtx, FTS5_INSTTOKEN_SUBTYPE); } diff --git a/ext/misc/vfstrace.c b/ext/misc/vfstrace.c index 3ca32dbd17..e8b51cdd03 100644 --- a/ext/misc/vfstrace.c +++ b/ext/misc/vfstrace.c @@ -637,7 +637,7 @@ static int vfstraceFileControl(sqlite3_file *pFile, int op, void *pArg){ } if( zArg[0]=='x' && isalpha(zArg[1]) ) zArg++; for(n=0; isalpha(zArg[n]); n++){} - for(jj=0; jjmTrace |= aKw[jj].m; @@ -796,7 +796,7 @@ static int vfstraceShmLock(sqlite3_file *pFile, int ofst, int n, int flags){ if( flags & ~(0xf) ){ sqlite3_snprintf(sizeof(zLck)-i, &zLck[i], "|0x%x", flags); } - if( ofst>=0 && ofst=0 && ofst<(int)(sizeof(azLockName)/sizeof(azLockName[0])) ){ vfstrace_printf(pInfo, "%s.xShmLock(%s,ofst=%d(%s),n=%d,%s)", pInfo->zVfsName, p->zFName, ofst, azLockName[ofst], n, &zLck[1]); diff --git a/manifest b/manifest index 9b7583d7cd..1442a766fd 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sharmless\scompiler\swarning\scaused\sby\sthe\sprevious\scheck-in. -D 2024-12-07T16:53:42.327 +C Fix\smore\sharmless\scompiler\swarnings. +D 2024-12-07T17:08:13.773 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -112,7 +112,7 @@ F ext/fts5/fts5_config.c e7d8dd062b44a66cd77e5a0f74f23a2354cd1f3f8575afb967b2773 F ext/fts5/fts5_expr.c 69b8d976058512c07dfe86e229521b7a871768157bd1607cedf1a5038dfd72c9 F ext/fts5/fts5_hash.c adda4272be401566a6e0ba1acbe70ee5cb97fce944bc2e04dc707152a0ec91b1 F ext/fts5/fts5_index.c cef6791bd9f9db4305494292d6dd5d24a7379aabf370a4d6b559e16b740fa88e -F ext/fts5/fts5_main.c a4f6a46e5ede02d40fc23655d3de37e55f75210ae3856b2b518a2295d3331543 +F ext/fts5/fts5_main.c 72527efa1d634054b93a21eafe854763cbc5c270e8a4ab99bbb589557b818482 F ext/fts5/fts5_storage.c 337b05e4c66fc822d031e264d65bde807ec2fab08665ca2cc8aaf9c5fa06792c F ext/fts5/fts5_tcl.c 7fb5a3d3404099075aaa2457307cb459bbc257c0de3dbd52b1e80a5b503e0329 F ext/fts5/fts5_test_mi.c 08c11ec968148d4cb4119d96d819f8c1f329812c568bac3684f5464be177d3ee @@ -453,7 +453,7 @@ F ext/misc/urifuncs.c f71360d14fa9e7626b563f1f781c6148109462741c5235ac63ae0f8917 F ext/misc/uuid.c 5bb2264c1b64d163efa46509544fd7500cb8769cb7c16dd52052da8d961505cf F ext/misc/vfslog.c 3932ab932eeb2601dbc4447cb14d445aaa9fbe43b863ef5f014401c3420afd20 F ext/misc/vfsstat.c a85df08654743922a19410d7b1e3111de41bb7cd07d20dd16eda4e2b808d269d -F ext/misc/vfstrace.c 2f68da859f87be350ede0e8eb94f754219d406161c1595250fc0ca55907460f6 +F ext/misc/vfstrace.c 4d8b39570cbede1a05928c77e2142f8a744468443bf649cf86da3924e5e60fca F ext/misc/vtablog.c 1100250ce8782db37c833e3a9a5c9a3ecf1af5e15b8325572b82e6e0a138ffb5 F ext/misc/vtshim.c 1976e6dd68dd0d64508c91a6dfab8e75f8aaf6cd F ext/misc/wholenumber.c 0fa0c082676b7868bf2fa918e911133f2b349bcdceabd1198bba5f65b4fc0668 @@ -778,7 +778,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c c8a5372b97b2a2e972a280676f06ddb5b74e885d3b1f5ce383f839907b57ef68 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 1334b0606dbdc753c8333f41bff441c97f77ef8ad9e33f3701e8adfe3b587c28 -F src/shell.c.in 660da73720fc0783a00317568aa098ff1887a0a5cbc0c49138d348d9fc890961 +F src/shell.c.in 883d1470893d15b65724a42a865a25f12e02ee865ab252480d04d467881f87e4 F src/sqlite.h.in 6afbcaae44140216704a6c82e4c4ea4118c46d5f6573d6c5fa4fc901ed9d369e F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 81342fa6dd03fffbe7d4d699ff049dcef4d30344578bb6f91cb58a4e5a4f6036 -R e75637f5d04864b72a3d36ee13db9474 +P 462700aeb7c183d739ead4d726ce5384b3297bcf7929abd010987fa3a5f64807 +R 9ca7022ab896402e14e56ef4a0122fef U drh -Z f6c4d3a013c59065246d07d8eff3b3d4 +Z 5b81dd5db542d45ebbd1ee1a952722cd # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index c622ec5bdf..db4908810c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -462700aeb7c183d739ead4d726ce5384b3297bcf7929abd010987fa3a5f64807 +f5b8fd77635e5e6d2d88a1ce74e1bd6c4311260a2b695e5055b898b880bf5718 diff --git a/src/shell.c.in b/src/shell.c.in index 2df54d5b3a..e5276258d2 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -6637,6 +6637,8 @@ static int shell_dbtotxt_command(ShellState *p, int nArg, char **azArg){ int rc, i, j; unsigned char bShow[256]; /* Characters ok to display */ + UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(azArg); memset(bShow, '.', sizeof(bShow)); for(i=' '; i<='~'; i++){ if( i!='{' && i!='}' && i!='"' && i!='\\' ) bShow[i] = (unsigned char)i; From 8703642803df6dc3920239ed85654e92b4cc5451 Mon Sep 17 00:00:00 2001 From: drh <> Date: Sat, 7 Dec 2024 19:06:25 +0000 Subject: [PATCH 77/89] A cleaner and more robust solution to the floating-point conversion problem originally fixed by [81342fa6dd03fffb]. FossilOrigin-Name: 351de57f80b73045448c71d3402d877ff5d72418b1f5fc34c8147a04f7c5cb78 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/util.c | 17 +++++++++-------- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/manifest b/manifest index 1442a766fd..8c3849164d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\smore\sharmless\scompiler\swarnings. -D 2024-12-07T17:08:13.773 +C A\scleaner\sand\smore\srobust\ssolution\sto\sthe\sfloating-point\sconversion\sproblem\noriginally\sfixed\sby\s[81342fa6dd03fffb]. +D 2024-12-07T19:06:25.786 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -844,7 +844,7 @@ F src/trigger.c 0bb986a5b96047fd597c6aac28588853df56064e576e6b81ba777ef2ccaac461 F src/update.c 0e01aa6a3edf9ec112b33eb714b9016a81241497b1fb7c3e74332f4f71756508 F src/upsert.c 215328c3f91623c520ec8672c44323553f12caeb4f01b1090ebdca99fdf7b4f1 F src/utf.c 8b29d9a5956569ea2700f869669b8ef67a9662ee5e724ff77ab3c387e27094ba -F src/util.c 196a1498ed9ab5d3cca55db73ba10348c058c840b0a534e9d5d90db1862a50a1 +F src/util.c bf4e641c1e2d5cf40501f5f6990df412d2b6c301880a74750e7eefc4315f72bc F src/vacuum.c b763b6457bd058d2072ef9364832351fd8d11e8abf70cbb349657360f7d55c40 F src/vdbe.c 8a6eb02823b424b273614bae41579392a5c495424592b60423dd2c443a583df0 F src/vdbe.h 9676348d342bd04e21e384c63b57224171ce84fac77853357334ef94c4d33cf4 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 462700aeb7c183d739ead4d726ce5384b3297bcf7929abd010987fa3a5f64807 -R 9ca7022ab896402e14e56ef4a0122fef +P f5b8fd77635e5e6d2d88a1ce74e1bd6c4311260a2b695e5055b898b880bf5718 +R 8f59f36dbcd9cf41cdce9fb59aaabbba U drh -Z 5b81dd5db542d45ebbd1ee1a952722cd +Z 7774bee9e6cea167bb38890889846afb # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index db4908810c..24849f9a8a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f5b8fd77635e5e6d2d88a1ce74e1bd6c4311260a2b695e5055b898b880bf5718 +351de57f80b73045448c71d3402d877ff5d72418b1f5fc34c8147a04f7c5cb78 diff --git a/src/util.c b/src/util.c index bb676c5fbb..e134f7a7d8 100644 --- a/src/util.c +++ b/src/util.c @@ -539,6 +539,7 @@ int sqlite3AtoF(const char *z, double *pResult, int length, u8 enc){ int eValid = 1; /* True exponent is either not used or is well-formed */ int nDigit = 0; /* Number of digits processed */ int eType = 1; /* 1: pure integer, 2+: fractional -1 or less: bad UTF16 */ + u64 s2; /* round-tripped significand */ double rr[2]; assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE ); @@ -652,16 +653,16 @@ do_atof_calc: } rr[0] = (double)s; - if( s<(LARGEST_UINT64-0x7ff) ){ - u64 s2 = (u64)rr[0]; -#if defined(_MSC_VER) && _MSC_VER<1700 - if( s2==0x8000000000000000LL ){ s2 = 2*(u64)(0.5*rr[0]); } -#endif - rr[1] = s>=s2 ? (double)(s - s2) : -(double)(s2 - s); - }else{ + s2 = (u64)rr[0]; + rr[1] = s>=s2 ? (double)(s - s2) : -(double)(s2 - s); + if( rr[1]>1e-10*rr[0] ){ + /* On some floating-point processing units, doing the round + ** trip from u64 to double back to u64 can give a wonky value + ** when the original u64 is close to LARGEST_UINT64. If we + ** did get an overly large error value, just set it to zero. */ rr[1] = 0.0; } - + if( e>0 ){ while( e>=100 ){ e -= 100; From 9f53d0c8179a3b69f788bd31749fc7c15092be87 Mon Sep 17 00:00:00 2001 From: drh <> Date: Sat, 7 Dec 2024 19:57:30 +0000 Subject: [PATCH 78/89] Yet another iteration of the solution to the floating-point conversion problem - this what avoids complaints about oversize double values from -fsanitize. FossilOrigin-Name: fc6904a508eb732b1cb5cc12321a0d637d97e1e066a022a2c93cb50595f3a86a --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/util.c | 14 +++++++------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/manifest b/manifest index 8c3849164d..37a1d128b2 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C A\scleaner\sand\smore\srobust\ssolution\sto\sthe\sfloating-point\sconversion\sproblem\noriginally\sfixed\sby\s[81342fa6dd03fffb]. -D 2024-12-07T19:06:25.786 +C Yet\sanother\siteration\sof\sthe\ssolution\sto\sthe\sfloating-point\sconversion\nproblem\s-\sthis\swhat\savoids\scomplaints\sabout\soversize\sdouble\svalues\nfrom\s-fsanitize. +D 2024-12-07T19:57:30.181 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -844,7 +844,7 @@ F src/trigger.c 0bb986a5b96047fd597c6aac28588853df56064e576e6b81ba777ef2ccaac461 F src/update.c 0e01aa6a3edf9ec112b33eb714b9016a81241497b1fb7c3e74332f4f71756508 F src/upsert.c 215328c3f91623c520ec8672c44323553f12caeb4f01b1090ebdca99fdf7b4f1 F src/utf.c 8b29d9a5956569ea2700f869669b8ef67a9662ee5e724ff77ab3c387e27094ba -F src/util.c bf4e641c1e2d5cf40501f5f6990df412d2b6c301880a74750e7eefc4315f72bc +F src/util.c aaafeaa62045ad6bc7c62a91d462800fd68f1e441ad944b4350c90930d2b26e4 F src/vacuum.c b763b6457bd058d2072ef9364832351fd8d11e8abf70cbb349657360f7d55c40 F src/vdbe.c 8a6eb02823b424b273614bae41579392a5c495424592b60423dd2c443a583df0 F src/vdbe.h 9676348d342bd04e21e384c63b57224171ce84fac77853357334ef94c4d33cf4 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P f5b8fd77635e5e6d2d88a1ce74e1bd6c4311260a2b695e5055b898b880bf5718 -R 8f59f36dbcd9cf41cdce9fb59aaabbba +P 351de57f80b73045448c71d3402d877ff5d72418b1f5fc34c8147a04f7c5cb78 +R 9235bc27c60f84c2f272e364b7977ec9 U drh -Z 7774bee9e6cea167bb38890889846afb +Z 7dbec0e81d7a36c7e20ad06b81edda4b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 24849f9a8a..cde712b675 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -351de57f80b73045448c71d3402d877ff5d72418b1f5fc34c8147a04f7c5cb78 +fc6904a508eb732b1cb5cc12321a0d637d97e1e066a022a2c93cb50595f3a86a diff --git a/src/util.c b/src/util.c index e134f7a7d8..ab8249c8d5 100644 --- a/src/util.c +++ b/src/util.c @@ -653,15 +653,15 @@ do_atof_calc: } rr[0] = (double)s; - s2 = (u64)rr[0]; - rr[1] = s>=s2 ? (double)(s - s2) : -(double)(s2 - s); - if( rr[1]>1e-10*rr[0] ){ - /* On some floating-point processing units, doing the round - ** trip from u64 to double back to u64 can give a wonky value - ** when the original u64 is close to LARGEST_UINT64. If we - ** did get an overly large error value, just set it to zero. */ + assert( sizeof(s2)==sizeof(rr[0]) ); + memcpy(&s2, &rr[0], sizeof(s2)); + if( s2<=0x43efffffffffffffLL ){ + s2 = (u64)rr[0]; + rr[1] = s>=s2 ? (double)(s - s2) : -(double)(s2 - s); + }else{ rr[1] = 0.0; } + assert( rr[1]<=1.0e-10*rr[0] ); /* Equal only when rr[0]==0.0 */ if( e>0 ){ while( e>=100 ){ From 29d1d91502daa2b35a3cd816cb7357ca89991aaa Mon Sep 17 00:00:00 2001 From: stephan Date: Sun, 8 Dec 2024 18:38:40 +0000 Subject: [PATCH 79/89] Add a note in Makefile.msc about EXTRA_SRC files possibly requiring manual editing, as discussed in [forum:903f721f3e7c0d25|forum thread 903f721f3e7c0d25]. FossilOrigin-Name: 229c2f013c171bc220148c78f7db5396578f2c6aac28ad6ff9b687c9fa4998ac --- Makefile.msc | 4 +++- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Makefile.msc b/Makefile.msc index 6da1e399d2..14f2ab8c67 100644 --- a/Makefile.msc +++ b/Makefile.msc @@ -19,7 +19,9 @@ USE_AMALGAMATION = 1 # <> # Optionally set EXTRA_SRC to a list of C files to append to -# the generated sqlite3.c. +# the generated sqlite3.c. Any sqlite3 extensions added this +# way may require manual editing, as described in +# https://sqlite.org/forum/forumpost/903f721f3e7c0d25 # !IFNDEF EXTRA_SRC EXTRA_SRC = diff --git a/manifest b/manifest index 37a1d128b2..8409fd7ac5 100644 --- a/manifest +++ b/manifest @@ -1,11 +1,11 @@ -C Yet\sanother\siteration\sof\sthe\ssolution\sto\sthe\sfloating-point\sconversion\nproblem\s-\sthis\swhat\savoids\scomplaints\sabout\soversize\sdouble\svalues\nfrom\s-fsanitize. -D 2024-12-07T19:57:30.181 +C Add\sa\snote\sin\sMakefile.msc\sabout\sEXTRA_SRC\sfiles\spossibly\srequiring\smanual\sediting,\sas\sdiscussed\sin\s[forum:903f721f3e7c0d25|forum\sthread\s903f721f3e7c0d25]. +D 2024-12-08T18:38:40.817 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d F Makefile.in 86e81bdb118bf332a27865090b7dce96ddde93c2f1586e1b911569acaa228f19 F Makefile.linux-generic bd3e3cacd369821a6241d4ea1967395c962dfe3057e38cb0a435cee0e8b789d0 -F Makefile.msc f8b4097dd93bd19df8fda39ca8b530904c2e7134a28094f490c0dc11abd47ce2 +F Makefile.msc f402bb6ea63b44f5143aa3c637aa3f69794cf14b1cc964eb97c4f53124198561 F README.md c3c0f19532ce28f6297a71870f3c7b424729f0e6d9ab889616d3587dd2332159 F VERSION 8dc0c3df15fd5ff0622f88fc483533fce990b1cbb2f5fb9fdfb4dbd71eef2889 F art/icon-243x273.gif 9750b734f82fdb3dc43127753d5e6fbf3b62c9f4e136c2fbf573b2f57ea87af5 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 351de57f80b73045448c71d3402d877ff5d72418b1f5fc34c8147a04f7c5cb78 -R 9235bc27c60f84c2f272e364b7977ec9 -U drh -Z 7dbec0e81d7a36c7e20ad06b81edda4b +P fc6904a508eb732b1cb5cc12321a0d637d97e1e066a022a2c93cb50595f3a86a +R 3e289435836b044f0b3a05a6e7cf9761 +U stephan +Z ff68f775396c11772c2696190687380e # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index cde712b675..d416251529 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -fc6904a508eb732b1cb5cc12321a0d637d97e1e066a022a2c93cb50595f3a86a +229c2f013c171bc220148c78f7db5396578f2c6aac28ad6ff9b687c9fa4998ac From fd360c39437e05a7e8bf5388152b12ed186b1dd8 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 9 Dec 2024 10:52:28 +0000 Subject: [PATCH 80/89] Resynchronize autoconf/Makefile.msc FossilOrigin-Name: 8f9c640818871c451e69f186224bf276f8a03c8d31a76806d81f34922a169f82 --- autoconf/Makefile.msc | 4 +++- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/autoconf/Makefile.msc b/autoconf/Makefile.msc index 29bb7174fb..c23bbf494a 100644 --- a/autoconf/Makefile.msc +++ b/autoconf/Makefile.msc @@ -19,7 +19,9 @@ TOP = . # Optionally set EXTRA_SRC to a list of C files to append to -# the generated sqlite3.c. +# the generated sqlite3.c. Any sqlite3 extensions added this +# way may require manual editing, as described in +# https://sqlite.org/forum/forumpost/903f721f3e7c0d25 # !IFNDEF EXTRA_SRC EXTRA_SRC = diff --git a/manifest b/manifest index 8409fd7ac5..91254c4f46 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sa\snote\sin\sMakefile.msc\sabout\sEXTRA_SRC\sfiles\spossibly\srequiring\smanual\sediting,\sas\sdiscussed\sin\s[forum:903f721f3e7c0d25|forum\sthread\s903f721f3e7c0d25]. -D 2024-12-08T18:38:40.817 +C Resynchronize\sautoconf/Makefile.msc +D 2024-12-09T10:52:28.934 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -18,7 +18,7 @@ F auto.def 8f15c373e88c4c5296d6100e3d35893bd6edb57cebcb6a8c1e827e6faaef52e4 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac -F autoconf/Makefile.msc 1162ef7b7937ba6927b038f824b050855784d417e785fe35ab71d20afd18022b +F autoconf/Makefile.msc 0735351f6002f0bf78b73b3b7a6a120cff38573dd37c37005b682ecc44c25bc2 F autoconf/README.first 6c4f34fe115ff55d4e8dbfa3cecf04a0188292f7 F autoconf/README.txt 5e946ffb6fbdbb114c81e1bdc862df27fce8beab557d7b0421820b0fe8fc048f F autoconf/configure.ac ec7fa914c5e74ff212fe879f9bb6918e1234497e05facfb641f30c4d5893b277 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P fc6904a508eb732b1cb5cc12321a0d637d97e1e066a022a2c93cb50595f3a86a -R 3e289435836b044f0b3a05a6e7cf9761 -U stephan -Z ff68f775396c11772c2696190687380e +P 229c2f013c171bc220148c78f7db5396578f2c6aac28ad6ff9b687c9fa4998ac +R 50045aa0a973371ebf0a05224448e665 +U drh +Z 15c9820ccf429ada5e7694a1bec9cb28 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index d416251529..603d2bc368 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -229c2f013c171bc220148c78f7db5396578f2c6aac28ad6ff9b687c9fa4998ac +8f9c640818871c451e69f186224bf276f8a03c8d31a76806d81f34922a169f82 From 4f5ae3fc4ec70b440d11154d5072961977264765 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 9 Dec 2024 11:12:12 +0000 Subject: [PATCH 81/89] Fix an obscure problem with multiple outer joins, ON clauses and query flattening. Forum [forum:5c8a069d23|thread 5c8a069d23]. FossilOrigin-Name: 289daf6cee39625e8f068179cd58efcc1d28242f46064e58ec4175a019cf48ad --- manifest | 19 +++++++++++-------- manifest.uuid | 2 +- src/select.c | 3 ++- test/select6.test | 39 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 20304efaa2..482a6c0e87 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C On\sx64\shardware,\sround-trip\suint64_t→double→uint64_t\sconversions\nfail\sfor\svalues\sgreater\sthan\sUINT64_MAX-2047.\s\sThis\scaused\sthe\sSQLite\ntext-to-float\sconverter\sroutine\sto\sgive\sincorrect\sresults\sfor\svalues\nbetween\s'1.8446744073709550592eNNN'\sand\s'1.8446744073709551609eNNN'\sfor\sany\nexponent\sNNN.\s\sThis\sproblem\swas\sintroduced\sby\scheck-in\s[761d8fd18b0ee868]\nand\sfirst\sappeared\sin\sversion\s3.47.0\sand\swas\sreported\sby\n[forum:/forumpost/569a7209179a7f5e|forum\spost\s569a7209179a7f5e].\s\sFixed\nby\sthis\scheck-in. -D 2024-12-07T14:48:55.778 +C Fix\san\sobscure\sproblem\swith\smultiple\souter\sjoins,\sON\sclauses\sand\squery\sflattening.\sForum\s[forum:5c8a069d23|thread\s5c8a069d23]. +D 2024-12-09T11:12:12.968 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -777,7 +777,7 @@ F src/printf.c 96f7f8baeedc7639da94e4e7a4a2c200e2537c4eec9e5e1c2ffc821f40eb3105 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c c8a5372b97b2a2e972a280676f06ddb5b74e885d3b1f5ce383f839907b57ef68 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 -F src/select.c 1334b0606dbdc753c8333f41bff441c97f77ef8ad9e33f3701e8adfe3b587c28 +F src/select.c 1c2b2321e1658e02f96da96d3071abcaa6839a1d75edd960a75a0ab11b6041bb F src/shell.c.in 660da73720fc0783a00317568aa098ff1887a0a5cbc0c49138d348d9fc890961 F src/sqlite.h.in 6afbcaae44140216704a6c82e4c4ea4118c46d5f6573d6c5fa4fc901ed9d369e F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -1607,7 +1607,7 @@ F test/select2.test 352480e0e9c66eda9c3044e412abdf5be0215b56 F test/select3.test 180223af31e1ca5537dd395ef9708ae18e651a233777fd366fd0d75469fc19c6 F test/select4.test f0684d3da3bccacbe2a1ebadf6fb49d9df6f53acb4c6ebc228a88d0d6054cc7b F test/select5.test 8afc5e5dcdebc2be54472e73ebd9cd1adef1225fd15d37a1c62f969159f390ae -F test/select6.test 9b2fb4ffedf52e1b5703cfcae1212e7a4a063f014c0458d78d29aca3db766d1f +F test/select6.test d455cc36cb5658ba7002ccbf23d3d392801403e64ac6516190266a8ce167ad39 F test/select7.test b825420da8a0b5722fdb77f3369f6396a3d198c46e8787eb26ff9425d4ac9d27 F test/select8.test 8c8f5ae43894c891efc5755ed905467d1d67ad5d F test/select9.test f7586b207ce2304ab80dc93d3146469a28fd4403621dd3a82d06644563d3c812 @@ -2202,8 +2202,11 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 870403425493866232cf9e8fa62288861b7d0a4091b15d75727f8bb31da46f94 -R 2d1ae3d1053fb61b1868786464dea794 -U drh -Z 8f0bbc8ae68469d8947e1d3fa193444c +P 81342fa6dd03fffbe7d4d699ff049dcef4d30344578bb6f91cb58a4e5a4f6036 +R 3188b2c87a9e8a8a9fb6e913f7cbbec8 +T *branch * forum-5c8a069d23-fix +T *sym-forum-5c8a069d23-fix * +T -sym-trunk * +U dan +Z 0a776cf65bcb8516c8a437501b7f2ac9 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 78b1357e6c..ab418d5284 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -81342fa6dd03fffbe7d4d699ff049dcef4d30344578bb6f91cb58a4e5a4f6036 +289daf6cee39625e8f068179cd58efcc1d28242f46064e58ec4175a019cf48ad diff --git a/src/select.c b/src/select.c index 285e9133e7..9d35e1832c 100644 --- a/src/select.c +++ b/src/select.c @@ -4673,6 +4673,7 @@ static int flattenSubquery( /* Transfer the FROM clause terms from the subquery into the ** outer query. */ + iNewParent = pSubSrc->a[0].iCursor; for(i=0; ia[i+iFrom]; assert( pItem->fg.isTabFunc==0 ); @@ -4682,7 +4683,6 @@ static int flattenSubquery( if( pItem->fg.isUsing ) sqlite3IdListDelete(db, pItem->u3.pUsing); *pItem = pSubSrc->a[i]; pItem->fg.jointype |= ltorj; - iNewParent = pSubSrc->a[i].iCursor; memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i])); } pSrc->a[iFrom].fg.jointype &= JT_LTORJ; @@ -4722,6 +4722,7 @@ static int flattenSubquery( pWhere = pSub->pWhere; pSub->pWhere = 0; if( isOuterJoin>0 ){ + assert( pSubSrc->nSrc==1 ); sqlite3SetJoinExpr(pWhere, iNewParent, EP_OuterON); } if( pWhere ){ diff --git a/test/select6.test b/test/select6.test index 612afefa6f..f748ab47a4 100644 --- a/test/select6.test +++ b/test/select6.test @@ -628,4 +628,43 @@ do_execsql_test 12.100 { SELECT * from t2); } {1 3} +#------------------------------------------------------------------------- +reset_db +do_execsql_test 13.100 { + + CREATE TABLE t1(y INT); + INSERT INTO t1 (y) VALUES (1); + + CREATE TABLE t2(x INTEGER); + INSERT INTO t2 VALUES(0); + + CREATE TABLE empty1(z); +} + +do_execsql_test 13.110 { + SELECT t1.y + FROM ( SELECT 'AAA' ) + INNER JOIN ( + SELECT 1 AS abc FROM ( + SELECT 1 FROM t2 LEFT JOIN empty1 + ) + ) AS sub0 ON sub0.abc + , t1 + RIGHT JOIN (SELECT 'BBB' FROM ( SELECT 'CCC' )) +} {1} + +do_execsql_test 13.120 { + SELECT t1.y + FROM ( SELECT 'AAA' ) + INNER JOIN ( + SELECT 1 AS abc FROM ( + SELECT 1 FROM t2 LEFT JOIN empty1 + ) + ) AS sub0 ON sub0.abc + , t1 + RIGHT JOIN (SELECT 'BBB' FROM ( SELECT 'CCC' )) + WHERE t1.y +} {1} + + finish_test From 54f96dc50e8e9cf97e83284a4291a6016083a9e1 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 9 Dec 2024 11:47:28 +0000 Subject: [PATCH 82/89] Further improvements to the decimal-to-float conversion for values close to LARGEST_UINT64. FossilOrigin-Name: 453c949914770e8f7b9b9dd882db492bf8756c212c816f87bb2e3ed98bcd64e3 --- manifest | 15 +++++++-------- manifest.uuid | 2 +- src/util.c | 10 ++++++++-- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index b8a72d15c7..d9a39bf5b8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\san\sobscure\sproblem\swith\smultiple\souter\sjoins,\sON\sclauses\sand\squery\sflattening.\sForum\s[forum:5c8a069d23|thread\s5c8a069d23]. -D 2024-12-09T11:37:37.074 +C Further\simprovements\sto\sthe\sdecimal-to-float\sconversion\sfor\svalues\sclose\nto\sLARGEST_UINT64. +D 2024-12-09T11:47:28.504 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -844,7 +844,7 @@ F src/trigger.c 0bb986a5b96047fd597c6aac28588853df56064e576e6b81ba777ef2ccaac461 F src/update.c 0e01aa6a3edf9ec112b33eb714b9016a81241497b1fb7c3e74332f4f71756508 F src/upsert.c 215328c3f91623c520ec8672c44323553f12caeb4f01b1090ebdca99fdf7b4f1 F src/utf.c 8b29d9a5956569ea2700f869669b8ef67a9662ee5e724ff77ab3c387e27094ba -F src/util.c aaafeaa62045ad6bc7c62a91d462800fd68f1e441ad944b4350c90930d2b26e4 +F src/util.c e5f6a5eeaa26b69054a43bbd0048cfe3d2851f6961052b35aed8f695df922850 F src/vacuum.c b763b6457bd058d2072ef9364832351fd8d11e8abf70cbb349657360f7d55c40 F src/vdbe.c 8a6eb02823b424b273614bae41579392a5c495424592b60423dd2c443a583df0 F src/vdbe.h 9676348d342bd04e21e384c63b57224171ce84fac77853357334ef94c4d33cf4 @@ -2202,9 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P a0a36bad454fab55ff39cbada68bf9ec6494d48dc4fc88496c0f637ab100734c 289daf6cee39625e8f068179cd58efcc1d28242f46064e58ec4175a019cf48ad -R 28fa23921e04e393ea4b0633ec5e0abc -T +closed 289daf6cee39625e8f068179cd58efcc1d28242f46064e58ec4175a019cf48ad -U dan -Z 5885f8e9d357b34718ed1f6864ffaf31 +P a350ea7c6b89725ba1a0058c77fc8e918f5cb78e868d100f5425cdee114d1320 +R 9484d813df6a2b3aa12236684aa7bcae +U drh +Z f68f61b73a99f8ed300b60501f5b051a # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index e16bbd3a34..a0cb8c5331 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a350ea7c6b89725ba1a0058c77fc8e918f5cb78e868d100f5425cdee114d1320 +453c949914770e8f7b9b9dd882db492bf8756c212c816f87bb2e3ed98bcd64e3 diff --git a/src/util.c b/src/util.c index ab8249c8d5..ecce460e01 100644 --- a/src/util.c +++ b/src/util.c @@ -654,8 +654,14 @@ do_atof_calc: rr[0] = (double)s; assert( sizeof(s2)==sizeof(rr[0]) ); - memcpy(&s2, &rr[0], sizeof(s2)); - if( s2<=0x43efffffffffffffLL ){ +#ifdef SQLITE_DEBUG + rr[1] = 18446744073709549568.0; + memcpy(&s2, &rr[1], sizeof(s2)); + assert( s2==0x43efffffffffffffLL ); +#endif + /* Largest double that can be safely converted to u64 + ** vvvvvvvvvvvvvvvvvvvvvv */ + if( rr[0]<=18446744073709549568.0 ){ s2 = (u64)rr[0]; rr[1] = s>=s2 ? (double)(s - s2) : -(double)(s2 - s); }else{ From c29bc733beaff046e231db7681197df726657acc Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 9 Dec 2024 13:02:13 +0000 Subject: [PATCH 83/89] Add NEVER() around branches that seems to have been made obsolete by [a350ea7c6b89725b]. FossilOrigin-Name: cb5bad5c748b7435c43f3ec051736c1cf91ced2be317b0519e5e22523c137290 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/where.c | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index d9a39bf5b8..8da7413b69 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Further\simprovements\sto\sthe\sdecimal-to-float\sconversion\sfor\svalues\sclose\nto\sLARGEST_UINT64. -D 2024-12-09T11:47:28.504 +C Add\sNEVER()\saround\sbranches\sthat\sseems\sto\shave\sbeen\smade\sobsolete\sby\n[a350ea7c6b89725b]. +D 2024-12-09T13:02:13.294 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -861,7 +861,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 F src/wal.c 8b7e309a8012659ac9275ad8cdcc6acaf73fa04b1090e38a01335f230fd10681 F src/wal.h ba252daaa94f889f4b2c17c027e823d9be47ce39da1d3799886bbd51f0490452 F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014 -F src/where.c b34adb09fdb2a4f57a0bafd4194b501047ef383976fef9f0ac3f395f4881694d +F src/where.c 377f3363983251ec6b23aad5a3963822199d9bff2ad4072a5e006959ee5a2abb F src/whereInt.h 1e36ec50392f7cc3d93d1152d4338064cd522b87156a0739388b7e273735f0ca F src/wherecode.c 0c3d3199a2b769a5e2bb70feb5003dc85b3d86842ecaf903a47f2b4205ca5dab F src/whereexpr.c 0f93a29cabd3a338d09a1f5c6770620a1ac51ec1157f3229502a7e7767c60b6f @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P a350ea7c6b89725ba1a0058c77fc8e918f5cb78e868d100f5425cdee114d1320 -R 9484d813df6a2b3aa12236684aa7bcae +P 453c949914770e8f7b9b9dd882db492bf8756c212c816f87bb2e3ed98bcd64e3 +R 0384aceb4a3c9ceb2d3aa9887b35dede U drh -Z f68f61b73a99f8ed300b60501f5b051a +Z 41154152da333de7653292dbe9c04f92 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index a0cb8c5331..d9834fbaf7 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -453c949914770e8f7b9b9dd882db492bf8756c212c816f87bb2e3ed98bcd64e3 +cb5bad5c748b7435c43f3ec051736c1cf91ced2be317b0519e5e22523c137290 diff --git a/src/where.c b/src/where.c index 5abb40eced..20ebaa8cd9 100644 --- a/src/where.c +++ b/src/where.c @@ -839,7 +839,7 @@ static int constraintCompatibleWithOuterJoin( return 0; } if( (pSrc->fg.jointype & (JT_LEFT|JT_RIGHT))!=0 - && ExprHasProperty(pTerm->pExpr, EP_InnerON) + && NEVER(ExprHasProperty(pTerm->pExpr, EP_InnerON)) ){ return 0; } @@ -6224,7 +6224,7 @@ static SQLITE_NOINLINE Bitmask whereOmitNoopJoin( } if( hasRightJoin && ExprHasProperty(pTerm->pExpr, EP_InnerON) - && pTerm->pExpr->w.iJoin==pItem->iCursor + && NEVER(pTerm->pExpr->w.iJoin==pItem->iCursor) ){ break; /* restriction (5) */ } From e85e33d39c502f16c30f697f5c591a67615b155d Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 9 Dec 2024 20:37:18 +0000 Subject: [PATCH 84/89] Enhance the ".import" command of the CLI so that it is able to insert into a view that has an instead-of trigger. [forum:/info/3e03c73150f8b9f8|Forum post 3e03c73150f8b9f8]. FossilOrigin-Name: 7dcc3731a9057a91f1b173fbab2841d8a666a945d9bc61d4c20f8a2a279d5ff1 --- manifest | 13 +++++++------ manifest.uuid | 2 +- src/shell.c.in | 26 +++++++++++++++++--------- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/manifest b/manifest index 8da7413b69..9924c0fa36 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sNEVER()\saround\sbranches\sthat\sseems\sto\shave\sbeen\smade\sobsolete\sby\n[a350ea7c6b89725b]. -D 2024-12-09T13:02:13.294 +C Enhance\sthe\s".import"\scommand\sof\sthe\sCLI\sso\sthat\sit\sis\sable\sto\sinsert\sinto\sa\nview\sthat\shas\san\sinstead-of\strigger.\n[forum:/info/3e03c73150f8b9f8|Forum\spost\s3e03c73150f8b9f8]. +D 2024-12-09T20:37:18.846 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -778,7 +778,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c c8a5372b97b2a2e972a280676f06ddb5b74e885d3b1f5ce383f839907b57ef68 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 1c2b2321e1658e02f96da96d3071abcaa6839a1d75edd960a75a0ab11b6041bb -F src/shell.c.in 883d1470893d15b65724a42a865a25f12e02ee865ab252480d04d467881f87e4 +F src/shell.c.in ee54de10e9bd5572f689a6bc0c8e6fa58a8870e1670978ded44412d2715fd908 F src/sqlite.h.in 6afbcaae44140216704a6c82e4c4ea4118c46d5f6573d6c5fa4fc901ed9d369e F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54 @@ -2202,8 +2202,9 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 453c949914770e8f7b9b9dd882db492bf8756c212c816f87bb2e3ed98bcd64e3 -R 0384aceb4a3c9ceb2d3aa9887b35dede +P cb5bad5c748b7435c43f3ec051736c1cf91ced2be317b0519e5e22523c137290 +Q +c71acee1cf45abf0429e8b1668315c75b155d7c300d53833aeacd92c9bb3395d +R 8d63ad55d843d7344792036678b73c10 U drh -Z 41154152da333de7653292dbe9c04f92 +Z 4eb938e60b80d29845130c936d5be640 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index d9834fbaf7..57f04dbeef 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cb5bad5c748b7435c43f3ec051736c1cf91ced2be317b0519e5e22523c137290 +7dcc3731a9057a91f1b173fbab2841d8a666a945d9bc61d4c20f8a2a279d5ff1 diff --git a/src/shell.c.in b/src/shell.c.in index e5276258d2..cad8c92c57 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -6501,14 +6501,20 @@ static void output_reset(ShellState *p){ /* ** Run an SQL command and return the single integer result. */ -static int db_int(sqlite3 *db, const char *zSql){ +static int db_int(sqlite3 *db, const char *zSql, ...){ sqlite3_stmt *pStmt; int res = 0; - sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); + char *z; + va_list ap; + va_start(ap, zSql); + z = sqlite3_vmprintf(zSql, ap); + va_end(ap); + sqlite3_prepare_v2(db, z, -1, &pStmt, 0); if( pStmt && sqlite3_step(pStmt)==SQLITE_ROW ){ res = sqlite3_column_int(pStmt,0); } sqlite3_finalize(pStmt); + sqlite3_free(z); return res; } @@ -6611,9 +6617,7 @@ static int shell_dbinfo_command(ShellState *p, int nArg, char **azArg){ zSchemaTab = sqlite3_mprintf("\"%w\".sqlite_schema", zDb); } for(i=0; idb, zSql); - sqlite3_free(zSql); + int val = db_int(p->db, aQuery[i].zSql, zSchemaTab); sqlite3_fprintf(p->out, "%-20s %d\n", aQuery[i].zName, val); } sqlite3_free(zSchemaTab); @@ -8271,8 +8275,8 @@ FROM (\ }else{ /* Formulate the columns spec, close the DB, zero *pDb. */ char *zColsSpec = 0; - int hasDupes = db_int(*pDb, zHasDupes); - int nDigits = (hasDupes)? db_int(*pDb, zColDigits) : 0; + int hasDupes = db_int(*pDb, "%s", zHasDupes); + int nDigits = (hasDupes)? db_int(*pDb, "%s", zColDigits) : 0; if( hasDupes ){ #ifdef SHELL_COLUMN_RENAME_CLEAN rc = sqlite3_exec(*pDb, zDedoctor, 0, 0, 0); @@ -8287,7 +8291,7 @@ FROM (\ sqlite3_finalize(pStmt); if( rc!=SQLITE_DONE ) rc_err_oom_die(SQLITE_NOMEM); } - assert(db_int(*pDb, zHasDupes)==0); /* Consider: remove this */ + assert(db_int(*pDb, "%s", zHasDupes)==0); /* Consider: remove this */ rc = sqlite3_prepare_v2(*pDb, zCollectVar, -1, &pStmt, 0); rc_err_oom_die(rc); rc = sqlite3_step(pStmt); @@ -9337,7 +9341,11 @@ static int do_meta_command(char *zLine, ShellState *p){ while( xRead(&sCtx) && sCtx.cTerm==sCtx.cColSep ){} } import_append_char(&sCtx, 0); /* To ensure sCtx.z is allocated */ - if( sqlite3_table_column_metadata(p->db, zSchema, zTable,0,0,0,0,0,0) ){ + if( sqlite3_table_column_metadata(p->db, zSchema, zTable,0,0,0,0,0,0) + && 0==db_int(p->db, "SELECT count(*) FROM \"%w\".sqlite_schema" + " WHERE name=%Q AND type='view'", + zSchema ? zSchema : "main", zTable) + ){ /* Table does not exist. Create it. */ sqlite3 *dbCols = 0; char *zRenames = 0; From e57527c14f7b7cfa6e32eeab5c549d50c4fa3674 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 9 Dec 2024 20:46:36 +0000 Subject: [PATCH 85/89] Make the TCL interface more rebust against very large strings coming out of TCL9. FossilOrigin-Name: e2bae4143afd07de1ae55a6d2606a3b541a5b94568aa41f6a96e5d1245471653 --- manifest | 13 ++++++------- manifest.uuid | 2 +- src/tclsqlite.c | 8 +++++--- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 9924c0fa36..9f8827e138 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enhance\sthe\s".import"\scommand\sof\sthe\sCLI\sso\sthat\sit\sis\sable\sto\sinsert\sinto\sa\nview\sthat\shas\san\sinstead-of\strigger.\n[forum:/info/3e03c73150f8b9f8|Forum\spost\s3e03c73150f8b9f8]. -D 2024-12-09T20:37:18.846 +C Make\sthe\sTCL\sinterface\smore\srebust\sagainst\svery\slarge\sstrings\scoming\nout\sof\sTCL9. +D 2024-12-09T20:46:36.165 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -786,7 +786,7 @@ F src/sqliteInt.h 77be043f8694f4a8702d0ee882022b2e5a6489a0493e77c5d9a73f1efc5a2c F src/sqliteLimit.h 6993c9cfe3af5b8169ae0e5f15627fc15596726d4f1dc90a221309f79715ce88 F src/status.c cb11f8589a6912af2da3bb1ec509a94dd8ef27df4d4c1a97e0bcf2309ece972b F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 -F src/tclsqlite.c 1c2f697cb12a1d49f5e0b448327f7cf614809423bb43753b2d97f87354298113 +F src/tclsqlite.c 90441d3cc16f966a23499d9096a3d2d971e5e8fddb4d1413b096b79c2b2cff07 F src/tclsqlite.h 65e2c761446e1c9fa0342b7d2612a703483643c8b6a316d12a65b745a4727395 F src/test1.c 2d507751bfb4aa254dc22588ef1e3c5c5cfcb2e636d0e6e1fa0bbd307669c2a8 F src/test2.c 7ebc518e6735939d8979273a6f7b1d9b5702babf059f6ad62499f7f60a9eb9a3 @@ -2202,9 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P cb5bad5c748b7435c43f3ec051736c1cf91ced2be317b0519e5e22523c137290 -Q +c71acee1cf45abf0429e8b1668315c75b155d7c300d53833aeacd92c9bb3395d -R 8d63ad55d843d7344792036678b73c10 +P 7dcc3731a9057a91f1b173fbab2841d8a666a945d9bc61d4c20f8a2a279d5ff1 +R e19f4142a15244f80b542d1a07f443fa U drh -Z 4eb938e60b80d29845130c936d5be640 +Z 5bb7b8fb1e527b79d5e286156e101c7f # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 57f04dbeef..cc189860b1 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7dcc3731a9057a91f1b173fbab2841d8a666a945d9bc61d4c20f8a2a279d5ff1 +e2bae4143afd07de1ae55a6d2606a3b541a5b94568aa41f6a96e5d1245471653 diff --git a/src/tclsqlite.c b/src/tclsqlite.c index 4406ceef67..f0b5c3e814 100644 --- a/src/tclsqlite.c +++ b/src/tclsqlite.c @@ -1133,7 +1133,8 @@ static void tclSqlFunc(sqlite3_context *context, int argc, sqlite3_value**argv){ } default: { data = (unsigned char *)Tcl_GetStringFromObj(pVar, &n); - sqlite3_result_text(context, (char *)data, n, SQLITE_TRANSIENT); + sqlite3_result_text64(context, (char *)data, n, SQLITE_TRANSIENT, + SQLITE_UTF8); break; } } @@ -1519,7 +1520,8 @@ static int dbPrepareAndBind( sqlite3_bind_int64(pStmt, i, v); }else{ data = (unsigned char *)Tcl_GetStringFromObj(pVar, &n); - sqlite3_bind_text(pStmt, i, (char *)data, n, SQLITE_STATIC); + sqlite3_bind_text64(pStmt, i, (char *)data, n, SQLITE_STATIC, + SQLITE_UTF8); Tcl_IncrRefCount(pVar); pPreStmt->apParm[iParm++] = pVar; } @@ -3422,7 +3424,7 @@ deserialize_error: enum TTYPE_enum { TTYPE_STMT, TTYPE_PROFILE, TTYPE_ROW, TTYPE_CLOSE }; - int i; + Tcl_Size i; if( TCL_OK!=Tcl_ListObjLength(interp, objv[3], &len) ){ return TCL_ERROR; } From 6e53f67c63771b72d5419265038f428c34fa99d5 Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 10 Dec 2024 12:32:34 +0000 Subject: [PATCH 86/89] Fix harmless typo in a comment describing the columnMallocFailure() function. FossilOrigin-Name: 0f3b484fd71fd77947a1de7c24f35f8eed2911d0565d03edb7970b8f3092a5da --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/vdbeapi.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 9f8827e138..b00387a4af 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Make\sthe\sTCL\sinterface\smore\srebust\sagainst\svery\slarge\sstrings\scoming\nout\sof\sTCL9. -D 2024-12-09T20:46:36.165 +C Fix\sharmless\stypo\sin\sa\scomment\sdescribing\sthe\scolumnMallocFailure()\sfunction. +D 2024-12-10T12:32:34.191 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -849,7 +849,7 @@ F src/vacuum.c b763b6457bd058d2072ef9364832351fd8d11e8abf70cbb349657360f7d55c40 F src/vdbe.c 8a6eb02823b424b273614bae41579392a5c495424592b60423dd2c443a583df0 F src/vdbe.h 9676348d342bd04e21e384c63b57224171ce84fac77853357334ef94c4d33cf4 F src/vdbeInt.h 2da01c73e8e3736a9015d5b04aa04d209bc9023d279d237d4d409205e921ea1e -F src/vdbeapi.c 6353de05e8e78e497ccb33381ba5662ccc11c0339e5b1455faff01b6dacc3075 +F src/vdbeapi.c 38c252a202d70b56cfb734460bc888ddbd581afec1a10cd4d6c894c9e0b5baea F src/vdbeaux.c f0706ad786b8a6c5bc7ea622f3916c2ba2b883abc872d0b4911c4f021945c0e5 F src/vdbeblob.c 255be187436da38b01f276c02e6a08103489bbe2a7c6c21537b7aecbe0e1f797 F src/vdbemem.c df568ef0187e4be2788c35174f6d9b8566ab9475f9aff2d73907ed05aa5684b2 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 7dcc3731a9057a91f1b173fbab2841d8a666a945d9bc61d4c20f8a2a279d5ff1 -R e19f4142a15244f80b542d1a07f443fa +P e2bae4143afd07de1ae55a6d2606a3b541a5b94568aa41f6a96e5d1245471653 +R 2598afb576d42f15287920900e8ec8ce U drh -Z 5bb7b8fb1e527b79d5e286156e101c7f +Z 1b0b57ce5dbae36a7c77d0612b9489d6 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index cc189860b1..fd05a4c44e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e2bae4143afd07de1ae55a6d2606a3b541a5b94568aa41f6a96e5d1245471653 +0f3b484fd71fd77947a1de7c24f35f8eed2911d0565d03edb7970b8f3092a5da diff --git a/src/vdbeapi.c b/src/vdbeapi.c index 014ad95393..e33cb2e4d3 100644 --- a/src/vdbeapi.c +++ b/src/vdbeapi.c @@ -1335,7 +1335,7 @@ static Mem *columnMem(sqlite3_stmt *pStmt, int i){ ** sqlite3_column_int64() ** sqlite3_column_text() ** sqlite3_column_text16() -** sqlite3_column_real() +** sqlite3_column_double() ** sqlite3_column_bytes() ** sqlite3_column_bytes16() ** sqlite3_column_blob() From 35d302ccb1d79b801d0b8c6a564ab6c1e492df43 Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 12 Dec 2024 15:11:27 +0000 Subject: [PATCH 87/89] Increase the maximum number of arguments on an SQL function to 1000 with the capability to increase it further up to 32767 using a compile-time option. FossilOrigin-Name: e8d7d68ba0bb0bc2f948db5d9966990a5d23597fc3658b7cd0bc99d53c7353a9 --- manifest | 32 ++++++++++++++++---------------- manifest.uuid | 2 +- src/expr.c | 2 +- src/main.c | 4 ++-- src/pragma.c | 2 +- src/select.c | 4 ++-- src/sqliteInt.h | 2 +- src/sqliteLimit.h | 6 +++++- src/test_func.c | 4 ++-- src/trigger.c | 2 +- src/vdbeInt.h | 2 +- src/window.c | 2 +- test/func.test | 10 +++++++--- 13 files changed, 41 insertions(+), 33 deletions(-) diff --git a/manifest b/manifest index b00387a4af..b23d66dd8b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sharmless\stypo\sin\sa\scomment\sdescribing\sthe\scolumnMallocFailure()\sfunction. -D 2024-12-10T12:32:34.191 +C Increase\sthe\smaximum\snumber\sof\sarguments\son\san\sSQL\sfunction\sto\s1000\swith\sthe\ncapability\sto\sincrease\sit\sfurther\sup\sto\s32767\susing\sa\scompile-time\soption. +D 2024-12-12T15:11:27.591 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -727,7 +727,7 @@ F src/date.c 89ce1ff20512a7fa5070ba6e7dd5c171148ca7d580955795bf97c79c2456144a F src/dbpage.c 6c52074b0edb914d526c85541ca0f1fd23822b5dac39b6ee9b7f375d9fa592e9 F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42 -F src/expr.c ae41eb87e73a7b2e8748b0cf1e8e1d6b2e57fcb9abd093ef3da78f16fed36f33 +F src/expr.c 3329173aacc6c37da3971b6253827799b32e301673be00126df8271bf018e15f F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 928ed2517e8732113d2b9821aa37af639688d752f4ea9ac6e0e393d713eeb76f F src/func.c 49489dcce46d2d491cedb451e974264150c473e5f5bba448498a9aa4c1993537 @@ -740,7 +740,7 @@ F src/insert.c f8d1a0f8ee258411009c6b7f2d93170e351bd19f5ad89d57e1180644297cbe70 F src/json.c 68a98c020c22127f2d65f08855f7fc7460ff352a6ce0b543d8931dde83319c22 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c 7432c944ff197046d67a1207790a1b13eec4548c85a9457eb0896bb3641dfb36 -F src/main.c efacea3a809ba236233c4bc7648e623c28cb5fd1e1a343e74fe772005f142d8c +F src/main.c 13d20512d7be9c8c316a85b24d0fd0f377a046c4830eb87da08598bd3f49b10f F src/malloc.c 410e570b30c26cc36e3372577df50f7a96ee3eed5b2b161c6b6b48773c650c5e F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c 3bb59158c38e05f6270e761a9f435bf19827a264c13d1631c58b84bdc96d73b2 @@ -770,20 +770,20 @@ F src/parse.y dcf45a81b61223ac93e61fdfe9b22d635dd371c446e8222634d90aa37e25e5f6 F src/pcache.c 588cc3c5ccaaadde689ed35ce5c5c891a1f7b1f4d1f56f6cf0143b74d8ee6484 F src/pcache.h 1497ce1b823cf00094bb0cf3bac37b345937e6f910890c626b16512316d3abf5 F src/pcache1.c 49516ad7718a3626f28f710fa7448ef1fce3c07fd169acbb4817341950264319 -F src/pragma.c 767accbbbe53f6bacd05d35cfe2b3e6b830b01719010e8c684cb8b126dbad46e +F src/pragma.c ce1182217aa540e034c6da2f17515e3706bf52c837e8222361be9ccd7a9d495a F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7 F src/prepare.c 1832be043fce7d489959aae6f994c452d023914714c4d5457beaed51c0f3d126 F src/printf.c 96f7f8baeedc7639da94e4e7a4a2c200e2537c4eec9e5e1c2ffc821f40eb3105 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c c8a5372b97b2a2e972a280676f06ddb5b74e885d3b1f5ce383f839907b57ef68 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 -F src/select.c 1c2b2321e1658e02f96da96d3071abcaa6839a1d75edd960a75a0ab11b6041bb +F src/select.c 83e88fbb36f89b6703b348777491619554f0fd6f917c9fdf51e4c2e9cda6c04e F src/shell.c.in ee54de10e9bd5572f689a6bc0c8e6fa58a8870e1670978ded44412d2715fd908 F src/sqlite.h.in 6afbcaae44140216704a6c82e4c4ea4118c46d5f6573d6c5fa4fc901ed9d369e F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54 -F src/sqliteInt.h 77be043f8694f4a8702d0ee882022b2e5a6489a0493e77c5d9a73f1efc5a2cc1 -F src/sqliteLimit.h 6993c9cfe3af5b8169ae0e5f15627fc15596726d4f1dc90a221309f79715ce88 +F src/sqliteInt.h 3f20dfb5ae54e787b2643edc0b5bae0cecddfb89988e28afdc3c0b05892e25cc +F src/sqliteLimit.h 1bbdbf72bd0411d003267ffebc59a262f061df5653027a75627d03f48ca30523 F src/status.c cb11f8589a6912af2da3bb1ec509a94dd8ef27df4d4c1a97e0bcf2309ece972b F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 F src/tclsqlite.c 90441d3cc16f966a23499d9096a3d2d971e5e8fddb4d1413b096b79c2b2cff07 @@ -806,7 +806,7 @@ F src/test_delete.c e2fe07646dff6300b48d49b2fee2fe192ed389e834dd635e3b3bac0ce0bf F src/test_demovfs.c 3efa2adf4f21e10d95521721687d5ca047aea91fa62dd8cc22ac9e5a9c942383 F src/test_devsym.c 649434ed34d0b03fbd5a6b42df80f0f9a7e53f94dd1710aad5dd8831e91c4e86 F src/test_fs.c c411c40baba679536fc34e2679349f59d8225570aed3488b5b3ef1908525a3d5 -F src/test_func.c 8c0e89192f70fac307822d1ac2911ee51751288780b3db0c5ab5ca75fa0fe851 +F src/test_func.c 858d4dddb7acf88222ebcba7cffb585f6dde83e4a15b838c0d05ccdf8d5219b9 F src/test_hexio.c 7449504e4bde876ba91b202617a9228c7c8c2e7bd8b957302f3803ac0e9e353c F src/test_init.c 17313332d58e90defc527129d5eda4a08bd6b6e8de7207a231523c8d98fb445e F src/test_intarray.c e4216aadee9df2de7d1aee7e70f6b22c80ee79ece72a63d57105db74217639e5 @@ -840,7 +840,7 @@ F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c F src/tokenize.c fe17e03175cae35b6694d0f879e7bc3d1ddea2fd4ab148cba9bbd025b7a7bb12 F src/treeview.c 921392561385e05ef5703f20a7a72f0a0a45c1fb749558d7467fae2c3f525006 -F src/trigger.c 0bb986a5b96047fd597c6aac28588853df56064e576e6b81ba777ef2ccaac461 +F src/trigger.c 247e2d712d5edc6021d52a169f6ac9a9c10d7144bc4ac7ea06c1ed2aa414659f F src/update.c 0e01aa6a3edf9ec112b33eb714b9016a81241497b1fb7c3e74332f4f71756508 F src/upsert.c 215328c3f91623c520ec8672c44323553f12caeb4f01b1090ebdca99fdf7b4f1 F src/utf.c 8b29d9a5956569ea2700f869669b8ef67a9662ee5e724ff77ab3c387e27094ba @@ -848,7 +848,7 @@ F src/util.c e5f6a5eeaa26b69054a43bbd0048cfe3d2851f6961052b35aed8f695df922850 F src/vacuum.c b763b6457bd058d2072ef9364832351fd8d11e8abf70cbb349657360f7d55c40 F src/vdbe.c 8a6eb02823b424b273614bae41579392a5c495424592b60423dd2c443a583df0 F src/vdbe.h 9676348d342bd04e21e384c63b57224171ce84fac77853357334ef94c4d33cf4 -F src/vdbeInt.h 2da01c73e8e3736a9015d5b04aa04d209bc9023d279d237d4d409205e921ea1e +F src/vdbeInt.h bf294a0c8fc4cc80779e74b04b8bd82c6e1197b3137cefe0b16cdf002fc7dfd6 F src/vdbeapi.c 38c252a202d70b56cfb734460bc888ddbd581afec1a10cd4d6c894c9e0b5baea F src/vdbeaux.c f0706ad786b8a6c5bc7ea622f3916c2ba2b883abc872d0b4911c4f021945c0e5 F src/vdbeblob.c 255be187436da38b01f276c02e6a08103489bbe2a7c6c21537b7aecbe0e1f797 @@ -865,7 +865,7 @@ F src/where.c 377f3363983251ec6b23aad5a3963822199d9bff2ad4072a5e006959ee5a2abb F src/whereInt.h 1e36ec50392f7cc3d93d1152d4338064cd522b87156a0739388b7e273735f0ca F src/wherecode.c 0c3d3199a2b769a5e2bb70feb5003dc85b3d86842ecaf903a47f2b4205ca5dab F src/whereexpr.c 0f93a29cabd3a338d09a1f5c6770620a1ac51ec1157f3229502a7e7767c60b6f -F src/window.c 6c386af5972a58f9a9847bba9d7ca70c4c682391ab8478d94a6e046b22a0dbb3 +F src/window.c 2bf01f9941a64fbcead61a0e3cb5db3fca5094b30d2ff0d23274c2a81d2e2385 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 F test/affinity2.test ce1aafc86e110685b324e9a763eab4f2a73f737842ec3b687bd965867de90627 F test/affinity3.test f094773025eddf31135c7ad4cde722b7696f8eb07b97511f98585addf2a510a9 @@ -1258,7 +1258,7 @@ F test/fts4umlaut.test fcaca4471de7e78c9d1f7e8976e3e8704d7d8ad979d57a739d00f3f75 F test/fts4unicode.test 82a9c16b68ba2f358a856226bb2ee02f81583797bc4744061c54401bf1a0f4c9 F test/fts4upfrom.test f25835162c989dffd5e2ef91ec24c4848cc9973093e2d492d1c7b32afac1b49d F test/full.test 6b3c8fb43c6beab6b95438c1675374b95fab245d -F test/func.test 098d28ecd1284e0625797a981c9dbf7c1664763af2900f96b9716af80e6cbe40 +F test/func.test e643522c6c67e18b14ac6453f28b39daa7e01d4cdf3b17bee6ec544804be85af F test/func2.test 69f6ae3751b4ec765bdc3b803c0a255aa0f693f28f44805bef03e6b4a3fd242f F test/func3.test 600a632c305a88f3946d38f9a51efe145c989b2e13bd2b2a488db47fe76bab6a F test/func4.test a02e695f62beb31cb092dccf6873ff97543407fff97a5f3ec4da70b5b337bc84 @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P e2bae4143afd07de1ae55a6d2606a3b541a5b94568aa41f6a96e5d1245471653 -R 2598afb576d42f15287920900e8ec8ce +P 0f3b484fd71fd77947a1de7c24f35f8eed2911d0565d03edb7970b8f3092a5da +R d2087c5724f1e2048a55b1212074add0 U drh -Z 1b0b57ce5dbae36a7c77d0612b9489d6 +Z 41468182a628258b57cf14eaed6c922f # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index fd05a4c44e..dc27bf4513 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0f3b484fd71fd77947a1de7c24f35f8eed2911d0565d03edb7970b8f3092a5da +e8d7d68ba0bb0bc2f948db5d9966990a5d23597fc3658b7cd0bc99d53c7353a9 diff --git a/src/expr.c b/src/expr.c index 37923bc84a..86c966683c 100644 --- a/src/expr.c +++ b/src/expr.c @@ -479,7 +479,7 @@ static int codeCompare( p5 = binaryCompareP5(pLeft, pRight, jumpIfNull); addr = sqlite3VdbeAddOp4(pParse->pVdbe, opcode, in2, dest, in1, (void*)p4, P4_COLLSEQ); - sqlite3VdbeChangeP5(pParse->pVdbe, (u8)p5); + sqlite3VdbeChangeP5(pParse->pVdbe, (u16)p5); return addr; } diff --git a/src/main.c b/src/main.c index 3a535e3cde..5e9a03a474 100644 --- a/src/main.c +++ b/src/main.c @@ -2857,8 +2857,8 @@ static const int aHardLimit[] = { #if SQLITE_MAX_VDBE_OP<40 # error SQLITE_MAX_VDBE_OP must be at least 40 #endif -#if SQLITE_MAX_FUNCTION_ARG<0 || SQLITE_MAX_FUNCTION_ARG>127 -# error SQLITE_MAX_FUNCTION_ARG must be between 0 and 127 +#if SQLITE_MAX_FUNCTION_ARG<0 || SQLITE_MAX_FUNCTION_ARG>32767 +# error SQLITE_MAX_FUNCTION_ARG must be between 0 and 32767 #endif #if SQLITE_MAX_ATTACHED<0 || SQLITE_MAX_ATTACHED>125 # error SQLITE_MAX_ATTACHED must be between 0 and 125 diff --git a/src/pragma.c b/src/pragma.c index ae0c86f039..291ccf7af1 100644 --- a/src/pragma.c +++ b/src/pragma.c @@ -1761,7 +1761,7 @@ void sqlite3Pragma( /* Do the b-tree integrity checks */ sqlite3VdbeAddOp4(v, OP_IntegrityCk, 1, cnt, 8, (char*)aRoot,P4_INTARRAY); - sqlite3VdbeChangeP5(v, (u8)i); + sqlite3VdbeChangeP5(v, (u16)i); addr = sqlite3VdbeAddOp1(v, OP_IsNull, 2); VdbeCoverage(v); sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, sqlite3MPrintf(db, "*** in database %s ***\n", db->aDb[i].zDbSName), diff --git a/src/select.c b/src/select.c index 9d35e1832c..cf25c8e678 100644 --- a/src/select.c +++ b/src/select.c @@ -6826,7 +6826,7 @@ static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){ } sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, AggInfoFuncReg(pAggInfo,i)); sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF); - sqlite3VdbeChangeP5(v, (u8)nArg); + sqlite3VdbeChangeP5(v, (u16)nArg); sqlite3VdbeAddOp2(v, OP_Next, pF->iOBTab, iTop+1); VdbeCoverage(v); sqlite3VdbeJumpHere(v, iTop); sqlite3ReleaseTempRange(pParse, regAgg, nArg); @@ -6989,7 +6989,7 @@ static void updateAccumulator( } sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, AggInfoFuncReg(pAggInfo,i)); sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF); - sqlite3VdbeChangeP5(v, (u8)nArg); + sqlite3VdbeChangeP5(v, (u16)nArg); sqlite3ReleaseTempRange(pParse, regAgg, nArg); } if( addrNext ){ diff --git a/src/sqliteInt.h b/src/sqliteInt.h index dbdf36200d..b8c9136a59 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -1925,7 +1925,7 @@ struct sqlite3 { ** field is used by per-connection app-def functions. */ struct FuncDef { - i8 nArg; /* Number of arguments. -1 means unlimited */ + i16 nArg; /* Number of arguments. -1 means unlimited */ u32 funcFlags; /* Some combination of SQLITE_FUNC_* */ void *pUserData; /* User data parameter */ FuncDef *pNext; /* Next function with same name */ diff --git a/src/sqliteLimit.h b/src/sqliteLimit.h index c7185b1c52..620b0f8e5a 100644 --- a/src/sqliteLimit.h +++ b/src/sqliteLimit.h @@ -89,9 +89,13 @@ /* ** The maximum number of arguments to an SQL function. +** +** This value has a hard upper limit of 32767 due to storage +** constraints (it needs to fit inside a i16). We keep it +** lower than that to prevent abuse. */ #ifndef SQLITE_MAX_FUNCTION_ARG -# define SQLITE_MAX_FUNCTION_ARG 127 +# define SQLITE_MAX_FUNCTION_ARG 1000 #endif /* diff --git a/src/test_func.c b/src/test_func.c index 8c06705ae4..82f7b3d9ca 100644 --- a/src/test_func.c +++ b/src/test_func.c @@ -773,7 +773,7 @@ static int SQLITE_TCLAPI abuse_create_function( rc = sqlite3_create_function(db, "tx", -2, SQLITE_UTF8, 0, tStep, 0, 0); if( rc!=SQLITE_MISUSE ) goto abuse_err; - rc = sqlite3_create_function(db, "tx", 128, SQLITE_UTF8, 0, tStep, 0, 0); + rc = sqlite3_create_function(db, "tx", 32768, SQLITE_UTF8, 0, tStep, 0, 0); if( rc!=SQLITE_MISUSE ) goto abuse_err; rc = sqlite3_create_function(db, "funcxx" @@ -789,7 +789,7 @@ static int SQLITE_TCLAPI abuse_create_function( ** a no-op function (that always returns NULL) and which has the ** maximum-length function name and the maximum number of parameters. */ - sqlite3_limit(db, SQLITE_LIMIT_FUNCTION_ARG, 10000); + sqlite3_limit(db, SQLITE_LIMIT_FUNCTION_ARG, 1000000); mxArg = sqlite3_limit(db, SQLITE_LIMIT_FUNCTION_ARG, -1); rc = sqlite3_create_function(db, "nullx" "_123456789_123456789_123456789_123456789_123456789" diff --git a/src/trigger.c b/src/trigger.c index ff2df82cbc..e306a2e664 100644 --- a/src/trigger.c +++ b/src/trigger.c @@ -1409,7 +1409,7 @@ void sqlite3CodeRowTriggerDirect( ** invocation is disallowed if (a) the sub-program is really a trigger, ** not a foreign key action, and (b) the flag to enable recursive triggers ** is clear. */ - sqlite3VdbeChangeP5(v, (u8)bRecursive); + sqlite3VdbeChangeP5(v, (u16)bRecursive); } } diff --git a/src/vdbeInt.h b/src/vdbeInt.h index 467f488905..2cb4f8c2a1 100644 --- a/src/vdbeInt.h +++ b/src/vdbeInt.h @@ -393,7 +393,7 @@ struct sqlite3_context { int isError; /* Error code returned by the function. */ u8 enc; /* Encoding to use for results */ u8 skipFlag; /* Skip accumulator loading if true */ - u8 argc; /* Number of arguments */ + u16 argc; /* Number of arguments */ sqlite3_value *argv[1]; /* Argument set */ }; diff --git a/src/window.c b/src/window.c index acc6ea8546..8373e36413 100644 --- a/src/window.c +++ b/src/window.c @@ -1751,7 +1751,7 @@ static void windowAggStep( sqlite3VdbeAddOp3(v, bInverse? OP_AggInverse : OP_AggStep, bInverse, regArg, pWin->regAccum); sqlite3VdbeAppendP4(v, pFunc, P4_FUNCDEF); - sqlite3VdbeChangeP5(v, (u8)nArg); + sqlite3VdbeChangeP5(v, (u16)nArg); if( pWin->bExprArgs ){ sqlite3ReleaseTempRange(pParse, regArg, nArg); } diff --git a/test/func.test b/test/func.test index 228adcc2d6..73ff2b7355 100644 --- a/test/func.test +++ b/test/func.test @@ -1183,7 +1183,9 @@ set midargs {} unset -nocomplain midres set midres {} unset -nocomplain result -for {set i 1} {$i<[sqlite3_limit db SQLITE_LIMIT_FUNCTION_ARG -1]} {incr i} { +set limit [sqlite3_limit db SQLITE_LIMIT_FUNCTION_ARG -1] +if {$limit>400} {set limit 400} +for {set i 1} {$i<$limit} {incr i} { append midargs ,'/$i' append midres /$i set result [md5 \ @@ -1261,7 +1263,8 @@ do_test func-26.1 { # do_test func-26.2 { set a {} - for {set i 1} {$i<=$::SQLITE_MAX_FUNCTION_ARG} {incr i} { + set limit $::SQLITE_MAX_FUNCTION_ARG + for {set i 1} {$i<=$limit} {incr i} { lappend a $i } db eval " @@ -1279,7 +1282,8 @@ do_test func-26.3 { } {1 {too many arguments on function nullx_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789}} do_test func-26.4 { set a {} - for {set i 1} {$i<=$::SQLITE_MAX_FUNCTION_ARG-1} {incr i} { + set limit [expr {$::SQLITE_MAX_FUNCTION_ARG-1}] + for {set i 1} {$i<=$limit} {incr i} { lappend a $i } catchsql " From 9ee02515c45b8de7586e01024221cd9eb4d9b40b Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 13 Dec 2024 01:29:22 +0000 Subject: [PATCH 88/89] Fix a harmless compiler warning that comes up when using SQLITE_DEBUG in separate compilation mode. FossilOrigin-Name: 52e0f8cab9852538da0778d5f57dd85b0774e764157692111a007aecd963f10a --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/main.c | 2 -- src/where.c | 1 + 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index b23d66dd8b..37a5ca6607 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Increase\sthe\smaximum\snumber\sof\sarguments\son\san\sSQL\sfunction\sto\s1000\swith\sthe\ncapability\sto\sincrease\sit\sfurther\sup\sto\s32767\susing\sa\scompile-time\soption. -D 2024-12-12T15:11:27.591 +C Fix\sa\sharmless\scompiler\swarning\sthat\scomes\sup\swhen\susing\sSQLITE_DEBUG\sin\nseparate\scompilation\smode. +D 2024-12-13T01:29:22.397 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -740,7 +740,7 @@ F src/insert.c f8d1a0f8ee258411009c6b7f2d93170e351bd19f5ad89d57e1180644297cbe70 F src/json.c 68a98c020c22127f2d65f08855f7fc7460ff352a6ce0b543d8931dde83319c22 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c 7432c944ff197046d67a1207790a1b13eec4548c85a9457eb0896bb3641dfb36 -F src/main.c 13d20512d7be9c8c316a85b24d0fd0f377a046c4830eb87da08598bd3f49b10f +F src/main.c a19dc8b47760ed95f3fbb255cfa8d3f7146b33c263eb4af05ab05e0115d161b9 F src/malloc.c 410e570b30c26cc36e3372577df50f7a96ee3eed5b2b161c6b6b48773c650c5e F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c 3bb59158c38e05f6270e761a9f435bf19827a264c13d1631c58b84bdc96d73b2 @@ -861,7 +861,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 F src/wal.c 8b7e309a8012659ac9275ad8cdcc6acaf73fa04b1090e38a01335f230fd10681 F src/wal.h ba252daaa94f889f4b2c17c027e823d9be47ce39da1d3799886bbd51f0490452 F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014 -F src/where.c 377f3363983251ec6b23aad5a3963822199d9bff2ad4072a5e006959ee5a2abb +F src/where.c 9ad3dea8003a8913da6a4ca8322e2fe30773f46e88a0d4fbf9db13bdb999efa2 F src/whereInt.h 1e36ec50392f7cc3d93d1152d4338064cd522b87156a0739388b7e273735f0ca F src/wherecode.c 0c3d3199a2b769a5e2bb70feb5003dc85b3d86842ecaf903a47f2b4205ca5dab F src/whereexpr.c 0f93a29cabd3a338d09a1f5c6770620a1ac51ec1157f3229502a7e7767c60b6f @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 0f3b484fd71fd77947a1de7c24f35f8eed2911d0565d03edb7970b8f3092a5da -R d2087c5724f1e2048a55b1212074add0 +P e8d7d68ba0bb0bc2f948db5d9966990a5d23597fc3658b7cd0bc99d53c7353a9 +R 5cbe0e5d51e97ea31f8e1a24559f27b0 U drh -Z 41468182a628258b57cf14eaed6c922f +Z 0752bc133a053f7fece0328823dfa9c8 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index dc27bf4513..4e1eaec06a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e8d7d68ba0bb0bc2f948db5d9966990a5d23597fc3658b7cd0bc99d53c7353a9 +52e0f8cab9852538da0778d5f57dd85b0774e764157692111a007aecd963f10a diff --git a/src/main.c b/src/main.c index 5e9a03a474..1163deb6e3 100644 --- a/src/main.c +++ b/src/main.c @@ -4270,7 +4270,6 @@ int sqlite3_test_control(int op, ...){ /* Invoke these debugging routines so that the compiler does not ** issue "defined but not used" warnings. */ if( x==9999 ){ - sqlite3ShowExpr(0); sqlite3ShowExpr(0); sqlite3ShowExprList(0); sqlite3ShowIdList(0); @@ -4288,7 +4287,6 @@ int sqlite3_test_control(int op, ...){ sqlite3ShowWinFunc(0); #endif sqlite3ShowSelect(0); - sqlite3ShowWhereTerm(0); } #endif break; diff --git a/src/where.c b/src/where.c index 20ebaa8cd9..c9698699b3 100644 --- a/src/where.c +++ b/src/where.c @@ -7144,6 +7144,7 @@ whereBeginError: ){ if( (db->flags & SQLITE_VdbeAddopTrace)==0 ) return; sqlite3VdbePrintOp(0, pc, pOp); + sqlite3ShowWhereTerm(0); /* So compiler won't complain about unused func */ } #endif From bba19534264983f79c3027cd964940e24a76eaed Mon Sep 17 00:00:00 2001 From: stephan Date: Mon, 16 Dec 2024 07:03:12 +0000 Subject: [PATCH 89/89] Tiny makefile/configure script doc tweaks. No functional changes. FossilOrigin-Name: ed5e912622839dce76dfb7352b56bb6fc698ecffde195f48db8d3339e9628cb5 --- Makefile.in | 4 ++-- auto.def | 2 +- manifest | 16 ++++++++-------- manifest.uuid | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Makefile.in b/Makefile.in index 75c1f47dcf..5b17c0e426 100644 --- a/Makefile.in +++ b/Makefile.in @@ -207,8 +207,8 @@ TCL_CONFIG_SH = @TCL_CONFIG_SH@ # $(TCLLIBDIR) = where to install the tcl plugin. If this is empty, it # is calculated at make-time by the targets which need it but we # export it here so that it can be set at configure-time, so that -# clients are not required to pass it at make-time, or set it in their -# environment, to override it. +# clients are not required to pass it at make-time, or may set it in +# their environment to override it. # TCLLIBDIR = @TCLLIBDIR@ diff --git a/auto.def b/auto.def index 7b57e9599b..c52ce44986 100644 --- a/auto.def +++ b/auto.def @@ -1358,7 +1358,7 @@ apply {{} { # # We do this late in the config process, immediately before we export # the Makefile and other generated files, so that configure tests -# which may make use of the autotools-conventional flags +# which make make use of the autotools-conventional flags # (e.g. [proj-check-rpath]) may do so before we "mangle" them here. proj-remap-autoconf-dir-vars diff --git a/manifest b/manifest index 37a5ca6607..706d45185b 100644 --- a/manifest +++ b/manifest @@ -1,9 +1,9 @@ -C Fix\sa\sharmless\scompiler\swarning\sthat\scomes\sup\swhen\susing\sSQLITE_DEBUG\sin\nseparate\scompilation\smode. -D 2024-12-13T01:29:22.397 +C Tiny\smakefile/configure\sscript\sdoc\stweaks.\sNo\sfunctional\schanges. +D 2024-12-16T07:03:12.241 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d -F Makefile.in 86e81bdb118bf332a27865090b7dce96ddde93c2f1586e1b911569acaa228f19 +F Makefile.in ad349acf91b3569033439fe498fa197aa530cafaa01362eb7daad2f84e43d265 F Makefile.linux-generic bd3e3cacd369821a6241d4ea1967395c962dfe3057e38cb0a435cee0e8b789d0 F Makefile.msc f402bb6ea63b44f5143aa3c637aa3f69794cf14b1cc964eb97c4f53124198561 F README.md c3c0f19532ce28f6297a71870f3c7b424729f0e6d9ab889616d3587dd2332159 @@ -14,7 +14,7 @@ F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 F art/sqlite370.svg 40b7e2fe8aac3add5d56dd86ab8d427a4eca5bcb3fe4f8946cb3794e1821d531 -F auto.def 8f15c373e88c4c5296d6100e3d35893bd6edb57cebcb6a8c1e827e6faaef52e4 +F auto.def f2876c94403be1055db47273dde33e8fea0998b1c1d36a386f76698919ea36ad F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P e8d7d68ba0bb0bc2f948db5d9966990a5d23597fc3658b7cd0bc99d53c7353a9 -R 5cbe0e5d51e97ea31f8e1a24559f27b0 -U drh -Z 0752bc133a053f7fece0328823dfa9c8 +P 52e0f8cab9852538da0778d5f57dd85b0774e764157692111a007aecd963f10a +R 89eec167649f7e56f45710cfe9ae12c6 +U stephan +Z da9c21e8a76fc0e0ce1fc5f35c3f13d0 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 4e1eaec06a..284e95940f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -52e0f8cab9852538da0778d5f57dd85b0774e764157692111a007aecd963f10a +ed5e912622839dce76dfb7352b56bb6fc698ecffde195f48db8d3339e9628cb5