From 76f24775315fc849bb6125238961eb135695eeb7 Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 3 Aug 2021 18:45:41 +0000 Subject: [PATCH 01/16] Improved harmony with the reuse-schema branch. FossilOrigin-Name: cbc703f70d16de0e93b276528fc761290f30af770ceb4b4d11d6a6e6506ac67c --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/fkey.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 837fef528d..f80b8dc0a7 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Refactor\sfield\snames\sin\sthe\sColumn\sobject,\szCnName\sand\szCnColl,\sto\smake\sthem\nunique\sand\sthus\seasier\sto\sfind\samid\sall\sthe\sother\scode. -D 2021-08-02T18:03:43.555 +C Improved\sharmony\swith\sthe\sreuse-schema\sbranch. +D 2021-08-03T18:45:41.599 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -498,7 +498,7 @@ F src/dbstat.c 3aa79fc3aed7ce906e4ea6c10e85d657299e304f6049861fe300053ac57de36c F src/delete.c b43f0f4db586acf0b4078e3982485c26fbec984674df513d5ade48a08a323c5a F src/expr.c 0d541b9f9ecddf9d6d310f31922006f03509d7264ef53ac39c391b82a62383f9 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 -F src/fkey.c 7713a4e87755afbe85d1cb3e3e36b6a9989dc24a210a4e99bf2af9a9ae2851c2 +F src/fkey.c 9e2b4127463c18e6351ff3665475045f048dd2e2f72a3761721e4ff6c6a45abf F src/func.c c224240cbc97fa5e9c4fe9acb128716cb835ca045532bca6951b7c45b020c56c F src/global.c 5eba017ebbd887e2365e6e6e815e1619e41406b8946d17594e94116174787df5 F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19 @@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P bbb6759bcf6e01d36dfc787a82a610d359f50aaeac8104b73883a84906d54e1f -R 7046be8b76bab8142bfe76e50eb88e2a +P 8b781dcaf68e0cf12a844708c82eee00193e340195cbca915d077e4846983bf3 +R aec3d39b20c053360793daa87c6c0ea6 U drh -Z 5e85f685bd644cac3700fa74d443a453 +Z 2256f032a8f708c831506dd967b0c662 diff --git a/manifest.uuid b/manifest.uuid index 2028f8b686..52b26151bc 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8b781dcaf68e0cf12a844708c82eee00193e340195cbca915d077e4846983bf3 \ No newline at end of file +cbc703f70d16de0e93b276528fc761290f30af770ceb4b4d11d6a6e6506ac67c \ No newline at end of file diff --git a/src/fkey.c b/src/fkey.c index ee5aa5d98f..5105b5cc79 100644 --- a/src/fkey.c +++ b/src/fkey.c @@ -1422,8 +1422,8 @@ void sqlite3FkDelete(sqlite3 *db, Table *pTab){ FKey *pNext; /* Copy of pFKey->pNextFrom */ assert( !IsVirtual(pTab) ); - assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pTab->pSchema) ); for(pFKey=pTab->u.tab.pFKey; pFKey; pFKey=pNext){ + assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pTab->pSchema) ); /* Remove the FK from the fkeyHash hash table. */ if( !db || db->pnBytesFreed==0 ){ From 7061aa8977e36ee4f2fb1a96c9659d6f73ffca14 Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 3 Aug 2021 23:23:23 +0000 Subject: [PATCH 02/16] Fix the build for SQLITE_ENABLE_UPDATE_DELETE_LIMIT. FossilOrigin-Name: 5150d2da06ab3c7e3bea1865413cd21c64d5cefb91d3d874e9dd0bf51aea754b --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/delete.c | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index f80b8dc0a7..4331699f12 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improved\sharmony\swith\sthe\sreuse-schema\sbranch. -D 2021-08-03T18:45:41.599 +C Fix\sthe\sbuild\sfor\sSQLITE_ENABLE_UPDATE_DELETE_LIMIT. +D 2021-08-03T23:23:23.437 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -495,7 +495,7 @@ F src/ctime.c 8159d5f706551861c18ec6c8f6bdf105e15ea00367f05d9ab65d31a1077facc1 F src/date.c e0632f335952b32401482d099321bbf12716b29d6e72836b53ae49683ebae4bf F src/dbpage.c 8a01e865bf8bc6d7b1844b4314443a6436c07c3efe1d488ed89e81719047833a F src/dbstat.c 3aa79fc3aed7ce906e4ea6c10e85d657299e304f6049861fe300053ac57de36c -F src/delete.c b43f0f4db586acf0b4078e3982485c26fbec984674df513d5ade48a08a323c5a +F src/delete.c 3ce6af6b64c8b476de51ccc32da0cb3142d42e65754e1d8118addf65b8bcba15 F src/expr.c 0d541b9f9ecddf9d6d310f31922006f03509d7264ef53ac39c391b82a62383f9 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 9e2b4127463c18e6351ff3665475045f048dd2e2f72a3761721e4ff6c6a45abf @@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 8b781dcaf68e0cf12a844708c82eee00193e340195cbca915d077e4846983bf3 -R aec3d39b20c053360793daa87c6c0ea6 +P cbc703f70d16de0e93b276528fc761290f30af770ceb4b4d11d6a6e6506ac67c +R 1e80719bac43bc36079e2ba32ff8c292 U drh -Z 2256f032a8f708c831506dd967b0c662 +Z 85d3d99e61929ee3c6b49b9d18cf25d1 diff --git a/manifest.uuid b/manifest.uuid index 52b26151bc..f1c875f73b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cbc703f70d16de0e93b276528fc761290f30af770ceb4b4d11d6a6e6506ac67c \ No newline at end of file +5150d2da06ab3c7e3bea1865413cd21c64d5cefb91d3d874e9dd0bf51aea754b \ No newline at end of file diff --git a/src/delete.c b/src/delete.c index 459e932b5e..0debce3cb8 100644 --- a/src/delete.c +++ b/src/delete.c @@ -188,13 +188,13 @@ Expr *sqlite3LimitWhere( }else{ Index *pPk = sqlite3PrimaryKeyIndex(pTab); if( pPk->nKeyCol==1 ){ - const char *zName = pTab->aCol[pPk->aiColumn[0]].zName; + const char *zName = pTab->aCol[pPk->aiColumn[0]].zCnName; pLhs = sqlite3Expr(db, TK_ID, zName); pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ID, zName)); }else{ int i; for(i=0; inKeyCol; i++){ - Expr *p = sqlite3Expr(db, TK_ID, pTab->aCol[pPk->aiColumn[i]].zName); + Expr *p = sqlite3Expr(db, TK_ID, pTab->aCol[pPk->aiColumn[i]].zCnName); pEList = sqlite3ExprListAppend(pParse, pEList, p); } pLhs = sqlite3PExpr(pParse, TK_VECTOR, 0, 0); From fd779e2fa19070e3c8dc6f41b4d723fd14bc8e02 Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 4 Aug 2021 11:29:18 +0000 Subject: [PATCH 03/16] Avoid using LIKE with the target db in RBU. It is possible the user may issue "PRAGMA case_sensitive_like = 1" or override the like() user function, causing RBU to malfunction. FossilOrigin-Name: 7cbd8cd5aa768a0b72f769fa390fae1158d1dcfac5273b9d0238ecf2f52e273d --- ext/rbu/rbu10.test | 2 +- ext/rbu/sqlite3rbu.c | 4 +++- manifest | 16 ++++++++-------- manifest.uuid | 2 +- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/ext/rbu/rbu10.test b/ext/rbu/rbu10.test index a7c63cf6db..aa4db8a29f 100644 --- a/ext/rbu/rbu10.test +++ b/ext/rbu/rbu10.test @@ -50,7 +50,7 @@ do_test 1.1 { # ifcapable fts3 { do_execsql_test 2.0 { - CREATE VIRTUAL TABLE ft USING fts4(a, b, languageid='langid'); + create virtual TABLE ft USING fts4(a, b, languageid='langid'); } do_test 2.1 { apply_rbu { diff --git a/ext/rbu/sqlite3rbu.c b/ext/rbu/sqlite3rbu.c index 1a13b6c4ad..ae86f577ac 100644 --- a/ext/rbu/sqlite3rbu.c +++ b/ext/rbu/sqlite3rbu.c @@ -1194,7 +1194,9 @@ static void rbuTableType( assert( p->rc==SQLITE_OK ); p->rc = prepareFreeAndCollectError(p->dbMain, &aStmt[0], &p->zErrmsg, sqlite3_mprintf( - "SELECT (sql LIKE 'create virtual%%'), rootpage" + "SELECT " + " (sql COLLATE nocase BETWEEN 'CREATE VIRTUAL' AND 'CREATE VIRTUAM')," + " rootpage" " FROM sqlite_schema" " WHERE name=%Q", zTab )); diff --git a/manifest b/manifest index 4331699f12..01e0b657b8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\sbuild\sfor\sSQLITE_ENABLE_UPDATE_DELETE_LIMIT. -D 2021-08-03T23:23:23.437 +C Avoid\susing\sLIKE\swith\sthe\starget\sdb\sin\sRBU.\sIt\sis\spossible\sthe\suser\smay\sissue\s"PRAGMA\scase_sensitive_like\s=\s1"\sor\soverride\sthe\slike()\suser\sfunction,\scausing\sRBU\sto\smalfunction. +D 2021-08-04T11:29:18.569 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -341,7 +341,7 @@ F ext/misc/zipfile.c b7261ef6dbc2d18924ff80c40fb5d56c9ccfee3f822a7d3d43b7c87af3d F ext/misc/zorder.c b0ff58fa643afa1d846786d51ea8d5c4b6b35aa0254ab5a82617db92f3adda64 F ext/rbu/rbu.c 801450b24eaf14440d8fd20385aacc751d5c9d6123398df41b1b5aa804bf4ce8 F ext/rbu/rbu1.test c62904bd9526dcdc3496a21199aaf14ae191bbadbf67f076bf16be6b3f2115c2 -F ext/rbu/rbu10.test 0a201c32202143f23c81c0144503da339786fc20acb7a2fda11601b65659f314 +F ext/rbu/rbu10.test 06d2bc934a03a0978e750cc9c95b419d9b0bcbec1fc77128e33e377c3a73240b F ext/rbu/rbu11.test 5c834cf491086b45e071eabf71f708febc143e86a384a92de69e0b1a4cace144 F ext/rbu/rbu12.test 29f8b2118f6c96fac3755bd6d2b55c2db24f878b1f11fbfbe294f3a230a3dcdc F ext/rbu/rbu13.test 1285298e3360ec74511764841b3c174dcfe21da2f618c22febf1a20abd0365c2 @@ -379,7 +379,7 @@ F ext/rbu/rbuvacuum.test 55e101e90168c2b31df6c9638fe73dc7f7cc666b6142266d1563697 F ext/rbu/rbuvacuum2.test b8e5b51dc8b2c0153373d024c0936be3f66f9234acbd6d0baab0869d56b14e6b F ext/rbu/rbuvacuum3.test 8addd82e4b83b4c93fa47428eae4fd0dbf410f8512c186f38e348feb49ba03dc F ext/rbu/rbuvacuum4.test a78898e438a44803eb2bc897ba3323373c9f277418e2d6d76e90f2f1dbccfd10 -F ext/rbu/sqlite3rbu.c badb52388467f58e67ef104c5276d1ac68b316a30f8ccb2f74eac733625ae236 +F ext/rbu/sqlite3rbu.c 496c11fa35fbfd977171de50baccd9c73ecc9e30e4aa037ebe3a992fb9fe4288 F ext/rbu/sqlite3rbu.h 1dc88ab7bd32d0f15890ea08d23476c4198d3da3056985403991f8c9cd389812 F ext/rbu/test_rbu.c 03f6f177096a5f822d68d8e4069ad8907fe572c62ff2d19b141f59742821828a F ext/repair/README.md 92f5e8aae749a4dae14f02eea8e1bb42d4db2b6ce5e83dbcdd6b1446997e0c15 @@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P cbc703f70d16de0e93b276528fc761290f30af770ceb4b4d11d6a6e6506ac67c -R 1e80719bac43bc36079e2ba32ff8c292 -U drh -Z 85d3d99e61929ee3c6b49b9d18cf25d1 +P 5150d2da06ab3c7e3bea1865413cd21c64d5cefb91d3d874e9dd0bf51aea754b +R 21a6ad56440e9fa24f371e332d2cb49e +U dan +Z f42b49d718332edd365652069da16a7b diff --git a/manifest.uuid b/manifest.uuid index f1c875f73b..b8f57c751b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5150d2da06ab3c7e3bea1865413cd21c64d5cefb91d3d874e9dd0bf51aea754b \ No newline at end of file +7cbd8cd5aa768a0b72f769fa390fae1158d1dcfac5273b9d0238ecf2f52e273d \ No newline at end of file From 3edc927ecde7a9812c4a9ecd54b8e84ac51c439f Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 4 Aug 2021 13:42:12 +0000 Subject: [PATCH 04/16] Always prefer built-in SQL functions over app-defined SQL functions within sqlite3NestedParse(). Formerly this was the case for a few calls to sqlite3NestedParse(), but not for all of them. FossilOrigin-Name: 164662ef01ad45ca570c44631a1117cccce6e34b00dbba7f422c089e8ffaa932 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/alter.c | 9 +-------- src/build.c | 18 +++++++++++------- 4 files changed, 21 insertions(+), 24 deletions(-) diff --git a/manifest b/manifest index 01e0b657b8..fc56110403 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Avoid\susing\sLIKE\swith\sthe\starget\sdb\sin\sRBU.\sIt\sis\spossible\sthe\suser\smay\sissue\s"PRAGMA\scase_sensitive_like\s=\s1"\sor\soverride\sthe\slike()\suser\sfunction,\scausing\sRBU\sto\smalfunction. -D 2021-08-04T11:29:18.569 +C Always\sprefer\sbuilt-in\sSQL\sfunctions\sover\sapp-defined\sSQL\sfunctions\swithin\nsqlite3NestedParse().\s\sFormerly\sthis\swas\sthe\scase\sfor\sa\sfew\scalls\sto\nsqlite3NestedParse(),\sbut\snot\sfor\sall\sof\sthem. +D 2021-08-04T13:42:12.499 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -478,7 +478,7 @@ F spec.template 86a4a43b99ebb3e75e6b9a735d5fd293a24e90ca F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a -F src/alter.c 3ce23a6f06a789de05e0bfd581f9dd6367a50135def2688cfd0af78675cae676 +F src/alter.c f2a1c9eeed22a40ac88285fb393aff1a21d153d80bde1955202191430beb9e09 F src/analyze.c abbaaf7dca79d1c31c713500324fc0b55bf3eeac5b7b07001452a3d0f210de4f F src/attach.c a514e81758ba7b3a3a0501faf70af6cfc509de8810235db726cfc9f25165e929 F src/auth.c f4fa91b6a90bbc8e0d0f738aa284551739c9543a367071f55574681e0f24f8cf @@ -488,7 +488,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 F src/btree.c e204a9c8fb4fe5dbb910a863ba487f4af9b5c501254ec4ccbfcdd6b1f65b7fb4 F src/btree.h 74d64b8f28cfa4a894d14d4ed64fa432cd697b98b61708d4351482ae15913e22 F src/btreeInt.h 7bc15a24a02662409ebcd6aeaa1065522d14b7fda71573a2b0568b458f514ae0 -F src/build.c 8b1f2a80155a1e140030848fdc951ceb31c055212768d992d62d3bca1c588942 +F src/build.c 2fa4c605434bf7588ef792d83259de187c81409e057c350b99588ec544b0c77b F src/callback.c d0b853dd413255d2e337b34545e54d888ea02f20da5ad0e63585b389624c4a6c F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 8159d5f706551861c18ec6c8f6bdf105e15ea00367f05d9ab65d31a1077facc1 @@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 5150d2da06ab3c7e3bea1865413cd21c64d5cefb91d3d874e9dd0bf51aea754b -R 21a6ad56440e9fa24f371e332d2cb49e -U dan -Z f42b49d718332edd365652069da16a7b +P 7cbd8cd5aa768a0b72f769fa390fae1158d1dcfac5273b9d0238ecf2f52e273d +R 8f9e54c9a810ab73269f0d593c6345e7 +U drh +Z 3388d313189ca669bee6e10c99f7b5aa diff --git a/manifest.uuid b/manifest.uuid index b8f57c751b..18de7f85cf 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7cbd8cd5aa768a0b72f769fa390fae1158d1dcfac5273b9d0238ecf2f52e273d \ No newline at end of file +164662ef01ad45ca570c44631a1117cccce6e34b00dbba7f422c089e8ffaa932 \ No newline at end of file diff --git a/src/alter.c b/src/alter.c index 0ca68c04f5..5780d2df0c 100644 --- a/src/alter.c +++ b/src/alter.c @@ -135,9 +135,7 @@ void sqlite3AlterRenameTable( const char *zTabName; /* Original name of the table */ Vdbe *v; VTable *pVTab = 0; /* Non-zero if this is a v-tab with an xRename() */ - u32 savedDbFlags; /* Saved value of db->mDbFlags */ - savedDbFlags = db->mDbFlags; if( NEVER(db->mallocFailed) ) goto exit_rename_table; assert( pSrc->nSrc==1 ); assert( sqlite3BtreeHoldsAllMutexes(pParse->db) ); @@ -146,7 +144,6 @@ void sqlite3AlterRenameTable( if( !pTab ) goto exit_rename_table; iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); zDb = db->aDb[iDb].zDbSName; - db->mDbFlags |= DBFLAG_PreferBuiltin; /* Get a NULL terminated version of the new table name. */ zName = sqlite3NameFromToken(db, pName); @@ -287,7 +284,6 @@ void sqlite3AlterRenameTable( exit_rename_table: sqlite3SrcListDelete(db, pSrc); sqlite3DbFree(db, zName); - db->mDbFlags = savedDbFlags; } /* @@ -408,11 +404,9 @@ void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){ zCol = sqlite3DbStrNDup(db, (char*)pColDef->z, pColDef->n); if( zCol ){ char *zEnd = &zCol[pColDef->n-1]; - u32 savedDbFlags = db->mDbFlags; while( zEnd>zCol && (*zEnd==';' || sqlite3Isspace(*zEnd)) ){ *zEnd-- = '\0'; } - db->mDbFlags |= DBFLAG_PreferBuiltin; /* substr() operations on characters, but addColOffset is in bytes. So we ** have to use printf() to translate between these units: */ assert( !IsVirtual(pTab) ); @@ -425,7 +419,6 @@ void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){ zTab ); sqlite3DbFree(db, zCol); - db->mDbFlags = savedDbFlags; } v = sqlite3GetVdbe(pParse); @@ -1506,7 +1499,7 @@ static void renameColumnFunc( sqlite3WalkSelect(&sWalker, pSelect); } if( rc!=SQLITE_OK ) goto renameColumnFunc_done; - }else if( IsOrdinaryTable(sParse.pNewTable) ){ + }else if( ALWAYS(IsOrdinaryTable(sParse.pNewTable)) ){ /* A regular table */ int bFKOnly = sqlite3_stricmp(zTable, sParse.pNewTable->zName); FKey *pFKey; diff --git a/src/build.c b/src/build.c index 10a15189b0..a0d164336f 100644 --- a/src/build.c +++ b/src/build.c @@ -285,20 +285,22 @@ void sqlite3FinishCoding(Parse *pParse){ /* ** Run the parser and code generator recursively in order to generate ** code for the SQL statement given onto the end of the pParse context -** currently under construction. When the parser is run recursively -** this way, the final OP_Halt is not appended and other initialization -** and finalization steps are omitted because those are handling by the -** outermost parser. +** currently under construction. Notes: ** -** Not everything is nestable. This facility is designed to permit -** INSERT, UPDATE, and DELETE operations against the schema table. Use -** care if you decide to try to use this routine for some other purposes. +** * The final OP_Halt is not appended and other initialization +** and finalization steps are omitted because those are handling by the +** outermost parser. +** +** * Built-in SQL functions always take precedence over application-defined +** SQL functions. In other words, it is not possible to override a +** built-in function. */ void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){ va_list ap; char *zSql; char *zErrMsg = 0; sqlite3 *db = pParse->db; + u32 savedDbFlags = db->mDbFlags; char saveBuf[PARSE_TAIL_SZ]; if( pParse->nErr ) return; @@ -317,7 +319,9 @@ void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){ pParse->nested++; memcpy(saveBuf, PARSE_TAIL(pParse), PARSE_TAIL_SZ); memset(PARSE_TAIL(pParse), 0, PARSE_TAIL_SZ); + db->mDbFlags |= DBFLAG_PreferBuiltin; sqlite3RunParser(pParse, zSql, &zErrMsg); + db->mDbFlags = savedDbFlags; sqlite3DbFree(db, zErrMsg); sqlite3DbFree(db, zSql); memcpy(PARSE_TAIL(pParse), saveBuf, PARSE_TAIL_SZ); From 324f91a591ba4578917ab0436a966ff33b163a2a Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 4 Aug 2021 14:50:23 +0000 Subject: [PATCH 05/16] Add NEVER() macros on recently introduced unreachable branches. FossilOrigin-Name: 806939eb5947f9187dc9c4814b26e9f94ec0186596c7be97981dbea7c2169c26 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/build.c | 12 ++++++------ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index fc56110403..019a53ba43 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Always\sprefer\sbuilt-in\sSQL\sfunctions\sover\sapp-defined\sSQL\sfunctions\swithin\nsqlite3NestedParse().\s\sFormerly\sthis\swas\sthe\scase\sfor\sa\sfew\scalls\sto\nsqlite3NestedParse(),\sbut\snot\sfor\sall\sof\sthem. -D 2021-08-04T13:42:12.499 +C Add\sNEVER()\smacros\son\srecently\sintroduced\sunreachable\sbranches. +D 2021-08-04T14:50:23.224 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -488,7 +488,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 F src/btree.c e204a9c8fb4fe5dbb910a863ba487f4af9b5c501254ec4ccbfcdd6b1f65b7fb4 F src/btree.h 74d64b8f28cfa4a894d14d4ed64fa432cd697b98b61708d4351482ae15913e22 F src/btreeInt.h 7bc15a24a02662409ebcd6aeaa1065522d14b7fda71573a2b0568b458f514ae0 -F src/build.c 2fa4c605434bf7588ef792d83259de187c81409e057c350b99588ec544b0c77b +F src/build.c 9d607ffcaeb6120daf8fdc229b064f9de1be3cfc7188d0d4fff010ca2f05c835 F src/callback.c d0b853dd413255d2e337b34545e54d888ea02f20da5ad0e63585b389624c4a6c F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 8159d5f706551861c18ec6c8f6bdf105e15ea00367f05d9ab65d31a1077facc1 @@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 7cbd8cd5aa768a0b72f769fa390fae1158d1dcfac5273b9d0238ecf2f52e273d -R 8f9e54c9a810ab73269f0d593c6345e7 +P 164662ef01ad45ca570c44631a1117cccce6e34b00dbba7f422c089e8ffaa932 +R 4753b5d71292c9ebc3a2ba2d009a17d6 U drh -Z 3388d313189ca669bee6e10c99f7b5aa +Z 98a283af33e1b680aea1e6779f6dcf99 diff --git a/manifest.uuid b/manifest.uuid index 18de7f85cf..de16e75317 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -164662ef01ad45ca570c44631a1117cccce6e34b00dbba7f422c089e8ffaa932 \ No newline at end of file +806939eb5947f9187dc9c4814b26e9f94ec0186596c7be97981dbea7c2169c26 \ No newline at end of file diff --git a/src/build.c b/src/build.c index a0d164336f..942dc85f8b 100644 --- a/src/build.c +++ b/src/build.c @@ -686,8 +686,8 @@ void sqlite3ColumnSetExpr( assert( !IsVirtual(pTab) ); pList = pTab->u.tab.pDfltList; if( pCol->iDflt==0 - || pList==0 - || pList->nExpriDflt + || NEVER(pList==0) + || NEVER(pList->nExpriDflt) ){ pCol->iDflt = pList==0 ? 1 : pList->nExpr+1; pTab->u.tab.pDfltList = sqlite3ExprListAppend(pParse, pList, pExpr); @@ -704,9 +704,9 @@ void sqlite3ColumnSetExpr( */ Expr *sqlite3ColumnExpr(Table *pTab, Column *pCol){ if( pCol->iDflt==0 ) return 0; - if( IsVirtual(pTab) ) return 0; - if( pTab->u.tab.pDfltList==0 ) return 0; - if( pTab->u.tab.pDfltList->nExpriDflt ) return 0; + if( NEVER(IsVirtual(pTab)) ) return 0; + if( NEVER(pTab->u.tab.pDfltList==0) ) return 0; + if( NEVER(pTab->u.tab.pDfltList->nExpriDflt) ) return 0; return pTab->u.tab.pDfltList->a[pCol->iDflt-1].pExpr; } @@ -3561,7 +3561,7 @@ void sqlite3DeferForeignKey(Parse *pParse, int isDeferred){ Table *pTab; FKey *pFKey; if( (pTab = pParse->pNewTable)==0 ) return; - if( IsVirtual(pTab) ) return; + if( NEVER(IsVirtual(pTab)) ) return; if( (pFKey = pTab->u.tab.pFKey)==0 ) return; assert( isDeferred==0 || isDeferred==1 ); /* EV: R-30323-21917 */ pFKey->isDeferred = (u8)isDeferred; From 65b400931ddbaaa2059094a014ecf46c0840857c Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 5 Aug 2021 15:27:19 +0000 Subject: [PATCH 06/16] Store the collating sequence name for each column of a table as an extension to the column name, for an additional savings in the heap space needed to hold the schema. FossilOrigin-Name: 832ac4c1ee384be0de72a4bdd55ed87e0f8294e7df5eefcf6b4942db3d85a69e --- manifest | 28 +++++++++++++-------------- manifest.uuid | 2 +- src/alter.c | 1 - src/build.c | 50 ++++++++++++++++++++++++++++++++++++++++++------- src/expr.c | 2 +- src/fkey.c | 4 ++-- src/insert.c | 3 ++- src/main.c | 2 +- src/select.c | 5 +++-- src/sqliteInt.h | 12 +++++++++++- src/wherecode.c | 5 +++-- 11 files changed, 81 insertions(+), 33 deletions(-) diff --git a/manifest b/manifest index 019a53ba43..0f3d8820af 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sNEVER()\smacros\son\srecently\sintroduced\sunreachable\sbranches. -D 2021-08-04T14:50:23.224 +C Store\sthe\scollating\ssequence\sname\sfor\seach\scolumn\sof\sa\stable\sas\san\nextension\sto\sthe\scolumn\sname,\sfor\san\sadditional\ssavings\sin\sthe\sheap\sspace\nneeded\sto\shold\sthe\sschema. +D 2021-08-05T15:27:19.168 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -478,7 +478,7 @@ F spec.template 86a4a43b99ebb3e75e6b9a735d5fd293a24e90ca F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a -F src/alter.c f2a1c9eeed22a40ac88285fb393aff1a21d153d80bde1955202191430beb9e09 +F src/alter.c 38975b971a4c36dbcc8004c74b492213a851ab368d29238c531a22636508a5d4 F src/analyze.c abbaaf7dca79d1c31c713500324fc0b55bf3eeac5b7b07001452a3d0f210de4f F src/attach.c a514e81758ba7b3a3a0501faf70af6cfc509de8810235db726cfc9f25165e929 F src/auth.c f4fa91b6a90bbc8e0d0f738aa284551739c9543a367071f55574681e0f24f8cf @@ -488,7 +488,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 F src/btree.c e204a9c8fb4fe5dbb910a863ba487f4af9b5c501254ec4ccbfcdd6b1f65b7fb4 F src/btree.h 74d64b8f28cfa4a894d14d4ed64fa432cd697b98b61708d4351482ae15913e22 F src/btreeInt.h 7bc15a24a02662409ebcd6aeaa1065522d14b7fda71573a2b0568b458f514ae0 -F src/build.c 9d607ffcaeb6120daf8fdc229b064f9de1be3cfc7188d0d4fff010ca2f05c835 +F src/build.c ac4c6990ff076676bf172442c7098d2ae8370adf8c3ac6280aef23d05336ec9c F src/callback.c d0b853dd413255d2e337b34545e54d888ea02f20da5ad0e63585b389624c4a6c F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 8159d5f706551861c18ec6c8f6bdf105e15ea00367f05d9ab65d31a1077facc1 @@ -496,19 +496,19 @@ F src/date.c e0632f335952b32401482d099321bbf12716b29d6e72836b53ae49683ebae4bf F src/dbpage.c 8a01e865bf8bc6d7b1844b4314443a6436c07c3efe1d488ed89e81719047833a F src/dbstat.c 3aa79fc3aed7ce906e4ea6c10e85d657299e304f6049861fe300053ac57de36c F src/delete.c 3ce6af6b64c8b476de51ccc32da0cb3142d42e65754e1d8118addf65b8bcba15 -F src/expr.c 0d541b9f9ecddf9d6d310f31922006f03509d7264ef53ac39c391b82a62383f9 +F src/expr.c e98375fc63552cc8cdd36a41bdca3039cb603d9fe67abd9c9f40adae8405fbc5 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 -F src/fkey.c 9e2b4127463c18e6351ff3665475045f048dd2e2f72a3761721e4ff6c6a45abf +F src/fkey.c 1905af1821b88321e1bb9d6a69e704495b6844a9b6c29398d40117cc251e893c F src/func.c c224240cbc97fa5e9c4fe9acb128716cb835ca045532bca6951b7c45b020c56c F src/global.c 5eba017ebbd887e2365e6e6e815e1619e41406b8946d17594e94116174787df5 F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19 F src/hash.h 9d56a9079d523b648774c1784b74b89bd93fac7b365210157482e4319a468f38 F src/hwtime.h cb1d7e3e1ed94b7aa6fde95ae2c2daccc3df826be26fc9ed7fd90d1750ae6144 F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 -F src/insert.c c6419bc4b447f3d4cdb7b1167690baaea3b796a80cea48e7cf26da65487d430d +F src/insert.c 4ebff642574d3866316439b3dfce165f80e130e8969853c656d71b2afc5dd73c F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c 0aa9e7f08e168e3874cb54984408e3976dafdf5616d511952c425b5ac088ea3e -F src/main.c 2c17a667133d2d1666319cfef975a48aa640a3de0c57d68b362372a12ad5557b +F src/main.c 5c8c47584612a60bd05c309aadbbfa4728824df0a94148d2a4e7e97d34676a22 F src/malloc.c cbc93cdd429c4594912017d92ab656e2579aca64dbd1c6888551275bed46f25b F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de @@ -544,12 +544,12 @@ F src/printf.c 78fabb49b9ac9a12dd1c89d744abdc9b67fd3205e62967e158f78b965a29ec4b F src/random.c 097dc8b31b8fba5a9aca1697aeb9fd82078ec91be734c16bffda620ced7ab83c F src/resolve.c 42b94d37a54200707a95566eff4f7e8a380e32d080016b699f23bd79a73a5028 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 -F src/select.c 52041124629704feb24b1bc7dabf8ec03a0857c69d23f2dd0c33c9ed3d074adb +F src/select.c 63077c0243ded1432d97c90c1a4c3419b3a574b36634c674599a68bfe4c3bdc2 F src/shell.c.in 24b99dae8818d1a234732d73f4d5b49f12b510bc62735a41c04e314fafae09e3 F src/sqlite.h.in 43fcf0fe2af04081f420a906fc020bde1243851ba44b0aa567a27f94bf8c3145 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h e97f4e9b509408fea4c4e9bef5a41608dfac343b4d3c7a990dedde1e19af9510 -F src/sqliteInt.h 6f02ceb8d6b8784faf7218bd58b59580837c9e95e54a5b34d48ae93504ba67ce +F src/sqliteInt.h 3dbca904012fc663b4e8c51ad644eb99ba17bb03589de0b1358496fa73dc8039 F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657 F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 @@ -633,7 +633,7 @@ F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a F src/walker.c 7342becedf3f8a26f9817f08436bdf8b56ad69af83705f6b9320a0ad3092c2ac F src/where.c 99b6e13664a7bd9a553c554978d0e253066995dade621f44cffa8928c8b493b5 F src/whereInt.h 9248161dd004f625ce5d3841ca9b99fed3fc8d61522cf76340fc5217dbe1375b -F src/wherecode.c ef36790a797fa679f58dbd51930e3ee7ef7cb6c906ae412032e4d319a36a2eef +F src/wherecode.c 9b33f463a279feeee69622b747b0050f0b836eb8b5ac48599ba3a6bfbea798a7 F src/whereexpr.c 3a9144a9d52e110efdc012a73b1574e7b2b4df4bf98949387cb620295eba0975 F src/window.c 420167512050a0dfc0f0115b9f0c7d299da9759c9bb2ae83a61fb8d730a5707f F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 @@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 164662ef01ad45ca570c44631a1117cccce6e34b00dbba7f422c089e8ffaa932 -R 4753b5d71292c9ebc3a2ba2d009a17d6 +P 806939eb5947f9187dc9c4814b26e9f94ec0186596c7be97981dbea7c2169c26 +R c05bd2cc9216ebbd1f44d1211c54be18 U drh -Z 98a283af33e1b680aea1e6779f6dcf99 +Z 761dcef26d3489b5940c28f76fcc5ec9 diff --git a/manifest.uuid b/manifest.uuid index de16e75317..cd11bd283e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -806939eb5947f9187dc9c4814b26e9f94ec0186596c7be97981dbea7c2169c26 \ No newline at end of file +832ac4c1ee384be0de72a4bdd55ed87e0f8294e7df5eefcf6b4942db3d85a69e \ No newline at end of file diff --git a/src/alter.c b/src/alter.c index 5780d2df0c..c059a62ecd 100644 --- a/src/alter.c +++ b/src/alter.c @@ -532,7 +532,6 @@ void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){ Column *pCol = &pNew->aCol[i]; pCol->zCnName = sqlite3DbStrDup(db, pCol->zCnName); pCol->hName = sqlite3StrIHash(pCol->zCnName); - pCol->zCnColl = 0; } assert( !IsVirtual(pNew) ); pNew->u.tab.pDfltList = sqlite3ExprListDup(db, pTab->u.tab.pDfltList, 0); diff --git a/src/build.c b/src/build.c index 942dc85f8b..6343da4f58 100644 --- a/src/build.c +++ b/src/build.c @@ -710,6 +710,45 @@ Expr *sqlite3ColumnExpr(Table *pTab, Column *pCol){ return pTab->u.tab.pDfltList->a[pCol->iDflt-1].pExpr; } +/* +** Set the collating sequence name for a column. +*/ +void sqlite3ColumnSetColl( + sqlite3 *db, + Column *pCol, + const char *zColl +){ + int nColl; + int n; + char *zNew; + assert( zColl!=0 ); + n = sqlite3Strlen30(pCol->zCnName) + 1; + if( pCol->colFlags & COLFLAG_HASTYPE ){ + n += sqlite3Strlen30(pCol->zCnName+n) + 1; + } + nColl = sqlite3Strlen30(zColl) + 1; + zNew = sqlite3DbRealloc(db, pCol->zCnName, nColl+n); + if( zNew ){ + pCol->zCnName = zNew; + memcpy(pCol->zCnName + n, zColl, nColl); + pCol->colFlags |= COLFLAG_HASCOLL; + } +} + +/* +** Return the collating squence name for a column +*/ +const char *sqlite3ColumnColl(Column *pCol){ + const char *z; + if( (pCol->colFlags & COLFLAG_HASCOLL)==0 ) return 0; + z = pCol->zCnName; + while( *z ){ z++; } + if( pCol->colFlags & COLFLAG_HASTYPE ){ + do{ z++; }while( *z ); + } + return z+1; +} + /* ** Delete memory allocated for the column names of a table or view (the ** Table.aCol[] array). @@ -722,7 +761,6 @@ void sqlite3DeleteColumnNames(sqlite3 *db, Table *pTable){ for(i=0; inCol; i++, pCol++){ assert( pCol->zCnName==0 || pCol->hName==sqlite3StrIHash(pCol->zCnName) ); sqlite3DbFree(db, pCol->zCnName); - sqlite3DbFree(db, pCol->zCnColl); } sqlite3DbFree(db, pTable->aCol); if( !IsVirtual(pTable) ){ @@ -1891,8 +1929,7 @@ void sqlite3AddCollateType(Parse *pParse, Token *pToken){ if( sqlite3LocateCollSeq(pParse, zColl) ){ Index *pIdx; - sqlite3DbFree(db, p->aCol[i].zCnColl); - p->aCol[i].zCnColl = zColl; + sqlite3ColumnSetColl(db, &p->aCol[i], zColl); /* If the column is declared as " PRIMARY KEY COLLATE ", ** then an index may have been created on this column before the @@ -1901,12 +1938,11 @@ void sqlite3AddCollateType(Parse *pParse, Token *pToken){ for(pIdx=p->pIndex; pIdx; pIdx=pIdx->pNext){ assert( pIdx->nKeyCol==1 ); if( pIdx->aiColumn[0]==i ){ - pIdx->azColl[0] = p->aCol[i].zCnColl; + pIdx->azColl[0] = sqlite3ColumnColl(&p->aCol[i]); } } - }else{ - sqlite3DbFree(db, zColl); } + sqlite3DbFree(db, zColl); } /* Change the most recently parsed column to be a GENERATED ALWAYS AS @@ -4066,7 +4102,7 @@ void sqlite3CreateIndex( zExtra += nColl; nExtra -= nColl; }else if( j>=0 ){ - zColl = pTab->aCol[j].zCnColl; + zColl = sqlite3ColumnColl(&pTab->aCol[j]); } if( !zColl ) zColl = sqlite3StrBINARY; if( !db->init.busy && !sqlite3LocateCollSeq(pParse, zColl) ){ diff --git a/src/expr.c b/src/expr.c index 0f900c0c6c..34f14e3687 100644 --- a/src/expr.c +++ b/src/expr.c @@ -173,7 +173,7 @@ CollSeq *sqlite3ExprCollSeq(Parse *pParse, const Expr *pExpr){ ** a TK_COLUMN but was previously evaluated and cached in a register */ int j = p->iColumn; if( j>=0 ){ - const char *zColl = p->y.pTab->aCol[j].zCnColl; + const char *zColl = sqlite3ColumnColl(&p->y.pTab->aCol[j]); pColl = sqlite3FindCollSeq(db, ENC(db), zColl, 0); } break; diff --git a/src/fkey.c b/src/fkey.c index 5105b5cc79..5888e558fb 100644 --- a/src/fkey.c +++ b/src/fkey.c @@ -259,7 +259,7 @@ int sqlite3FkLocateIndex( /* If the index uses a collation sequence that is different from ** the default collation sequence for the column, this index is ** unusable. Bail out early in this case. */ - zDfltColl = pParent->aCol[iCol].zCnColl; + zDfltColl = sqlite3ColumnColl(&pParent->aCol[iCol]); if( !zDfltColl ) zDfltColl = sqlite3StrBINARY; if( sqlite3StrICmp(pIdx->azColl[i], zDfltColl) ) break; @@ -487,7 +487,7 @@ static Expr *exprTableRegister( pCol = &pTab->aCol[iCol]; pExpr->iTable = regBase + sqlite3TableColumnToStorage(pTab,iCol) + 1; pExpr->affExpr = pCol->affinity; - zColl = pCol->zCnColl; + zColl = sqlite3ColumnColl(pCol); if( zColl==0 ) zColl = db->pDfltColl->zName; pExpr = sqlite3ExprAddCollateString(pParse, pExpr, zColl); }else{ diff --git a/src/insert.c b/src/insert.c index 06952586b0..0692198b1e 100644 --- a/src/insert.c +++ b/src/insert.c @@ -2843,7 +2843,8 @@ static int xferOptimization( if( pDestCol->affinity!=pSrcCol->affinity ){ return 0; /* Affinity must be the same on all columns */ } - if( sqlite3_stricmp(pDestCol->zCnColl, pSrcCol->zCnColl)!=0 ){ + if( sqlite3_stricmp(sqlite3ColumnColl(pDestCol), + sqlite3ColumnColl(pSrcCol))!=0 ){ return 0; /* Collating sequence must be the same on all columns */ } if( pDestCol->notNull && !pSrcCol->notNull ){ diff --git a/src/main.c b/src/main.c index 3c1191c368..a37301a640 100644 --- a/src/main.c +++ b/src/main.c @@ -3769,7 +3769,7 @@ int sqlite3_table_column_metadata( */ if( pCol ){ zDataType = sqlite3ColumnType(pCol,0); - zCollSeq = pCol->zCnColl; + zCollSeq = sqlite3ColumnColl(pCol); notnull = pCol->notNull!=0; primarykey = (pCol->colFlags & COLFLAG_PRIMKEY)!=0; autoinc = pTab->iPKey==iCol && (pTab->tabFlags & TF_Autoincrement)!=0; diff --git a/src/select.c b/src/select.c index 064ea758d8..375050bdcd 100644 --- a/src/select.c +++ b/src/select.c @@ -2193,8 +2193,9 @@ void sqlite3SelectAddColumnTypeAndCollation( } if( pCol->affinity<=SQLITE_AFF_NONE ) pCol->affinity = aff; pColl = sqlite3ExprCollSeq(pParse, p); - if( pColl && pCol->zCnColl==0 ){ - pCol->zCnColl = sqlite3DbStrDup(db, pColl->zName); + if( pColl && (pCol->colFlags & COLFLAG_HASCOLL)==0 ){ + assert( pTab->pIndex==0 ); + sqlite3ColumnSetColl(db, pCol, pColl->zName); } } pTab->szTabRow = 1; /* Any non-zero value works */ diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 083ba5a335..9f4d211752 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -2028,10 +2028,17 @@ struct Module { ** or equal to the table column index. It is ** equal if and only if there are no VIRTUAL ** columns to the left. +** +** Notes on zCnName: +** The zCnName field stores the name of the column, the datatype of the +** column, and the collating sequence for the column, in that order, all in +** a single allocation. Each string is 0x00 terminated. The datatype +** is only included if the COLFLAG_HASTYPE bit of colFlags is set and the +** collating sequence name is only included if the COLFLAG_HASCOLL bit is +** set. */ struct Column { char *zCnName; /* Name of this column */ - char *zCnColl; /* Collating sequence. If NULL, use the default */ u8 notNull : 4; /* An OE_ code for handling a NOT NULL constraint */ u8 eType : 4; /* One of the standard types */ char affinity; /* One of the SQLITE_AFF_... values */ @@ -2072,6 +2079,7 @@ struct Column { #define COLFLAG_STORED 0x0040 /* GENERATED ALWAYS AS ... STORED */ #define COLFLAG_NOTAVAIL 0x0080 /* STORED column not yet calculated */ #define COLFLAG_BUSY 0x0100 /* Blocks recursion on GENERATED columns */ +#define COLFLAG_HASCOLL 0x0200 /* Has collating sequence name in zCnName */ #define COLFLAG_GENERATED 0x0060 /* Combo: _STORED, _VIRTUAL */ #define COLFLAG_NOINSERT 0x0062 /* Combo: _HIDDEN, _STORED, _VIRTUAL */ @@ -4398,6 +4406,8 @@ void sqlite3CollapseDatabaseArray(sqlite3*); void sqlite3CommitInternalChanges(sqlite3*); void sqlite3ColumnSetExpr(Parse*,Table*,Column*,Expr*); Expr *sqlite3ColumnExpr(Table*,Column*); +void sqlite3ColumnSetColl(sqlite3*,Column*,const char*zColl); +const char *sqlite3ColumnColl(Column*); void sqlite3DeleteColumnNames(sqlite3*,Table*); void sqlite3GenerateColumnNames(Parse *pParse, Select *pSelect); int sqlite3ColumnsFromExprList(Parse*,ExprList*,i16*,Column**); diff --git a/src/wherecode.c b/src/wherecode.c index f3589bb0ac..28b417c9ae 100644 --- a/src/wherecode.c +++ b/src/wherecode.c @@ -1241,8 +1241,9 @@ static void whereIndexExprTrans( #ifndef SQLITE_OMIT_GENERATED_COLUMNS }else if( iRef>=0 && (pTab->aCol[iRef].colFlags & COLFLAG_VIRTUAL)!=0 - && (pTab->aCol[iRef].zCnColl==0 - || sqlite3StrICmp(pTab->aCol[iRef].zCnColl, sqlite3StrBINARY)==0) + && ((pTab->aCol[iRef].colFlags & COLFLAG_HASCOLL)==0 + || sqlite3StrICmp(sqlite3ColumnColl(&pTab->aCol[iRef]), + sqlite3StrBINARY)==0) ){ /* Check to see if there are direct references to generated columns ** that are contained in the index. Pulling the generated column From 15482bc3f3a2c98a4e391865194fbab46eb4e3cf Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 6 Aug 2021 15:26:01 +0000 Subject: [PATCH 07/16] Fix harmless compiler warnings. Omit redundant copies of os_common.h and hwtime.h from the amalgamation. FossilOrigin-Name: 091427007818537bb2f860c42dad867cb19050899186d4d180d195a1c6a98798 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/sqliteInt.h | 16 ++++++++-------- src/util.c | 2 +- tool/mksqlite3c.tcl | 6 +++--- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/manifest b/manifest index 0f3d8820af..ca6fa34ada 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Store\sthe\scollating\ssequence\sname\sfor\seach\scolumn\sof\sa\stable\sas\san\nextension\sto\sthe\scolumn\sname,\sfor\san\sadditional\ssavings\sin\sthe\sheap\sspace\nneeded\sto\shold\sthe\sschema. -D 2021-08-05T15:27:19.168 +C Fix\sharmless\scompiler\swarnings.\s\sOmit\sredundant\scopies\sof\sos_common.h\sand\nhwtime.h\sfrom\sthe\samalgamation. +D 2021-08-06T15:26:01.985 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -549,7 +549,7 @@ F src/shell.c.in 24b99dae8818d1a234732d73f4d5b49f12b510bc62735a41c04e314fafae09e F src/sqlite.h.in 43fcf0fe2af04081f420a906fc020bde1243851ba44b0aa567a27f94bf8c3145 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h e97f4e9b509408fea4c4e9bef5a41608dfac343b4d3c7a990dedde1e19af9510 -F src/sqliteInt.h 3dbca904012fc663b4e8c51ad644eb99ba17bb03589de0b1358496fa73dc8039 +F src/sqliteInt.h c12ad0bda10276615f042c78317270c12502d7b301656516384c0f76d9fa8b77 F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657 F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 @@ -614,7 +614,7 @@ F src/trigger.c 3f612ce5f0858b6c23460a3c799d01f408b49b0b29d931d8b8e6fc224a8667de F src/update.c 69c4c10bc6873a80c0a77cb578f9fc60ee90003d03f9530bc3370fa24615772d F src/upsert.c 8789047a8f0a601ea42fa0256d1ba3190c13746b6ba940fe2d25643a7e991937 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0 -F src/util.c b18a971c8936e9299fecc00474269a11135989d6fe9bd91b1e52137d6f27bd8c +F src/util.c c5dd51a245d621deb98e33c9db048111e58fc3af008bdcc6197c7044af0c8b79 F src/vacuum.c 454973a59fb20bb982efc2df568a098616db6328a0491b6e84e2e07f7333db45 F src/vdbe.c b73a5ec9940185eb001ff8cff2cfd429bb438c7e89f2885e0bfdb56c3ff13386 F src/vdbe.h 25dabb25c7e157b84e59260cfb5b466c3ac103ede9f36f4db371332c47601abe @@ -1858,7 +1858,7 @@ F tool/mkshellc.tcl df5d249617f9cc94d5c48eb0401673eb3f31f383ecbc54e8a13ca3dd97e8 F tool/mksourceid.c 36aa8020014aed0836fd13c51d6dc9219b0df1761d6b5f58ff5b616211b079b9 F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97 F tool/mksqlite3c-noext.tcl 4f7cfef5152b0c91920355cbfc1d608a4ad242cb819f1aea07f6d0274f584a7f -F tool/mksqlite3c.tcl cf5686da672bc2e62cf868b7d53fc9a2aebf1b0e497164cbb9f647ec724ce0b2 +F tool/mksqlite3c.tcl bf9b40811aba68f73f2a8848fad9b1fb09fd54ab5b77e5227f18eea87ab60d92 F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf F tool/mksqlite3internalh.tcl eb994013e833359137eb53a55acdad0b5ae1049b F tool/mkvsix.tcl b9e0777a213c23156b6542842c238479e496ebf5 @@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 806939eb5947f9187dc9c4814b26e9f94ec0186596c7be97981dbea7c2169c26 -R c05bd2cc9216ebbd1f44d1211c54be18 +P 832ac4c1ee384be0de72a4bdd55ed87e0f8294e7df5eefcf6b4942db3d85a69e +R 9b8bf1cf8f9f47bbc3756297fbda6376 U drh -Z 761dcef26d3489b5940c28f76fcc5ec9 +Z 8a1bbef3e175c4d55647fe110d7234dc diff --git a/manifest.uuid b/manifest.uuid index cd11bd283e..e79fd412a2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -832ac4c1ee384be0de72a4bdd55ed87e0f8294e7df5eefcf6b4942db3d85a69e \ No newline at end of file +091427007818537bb2f860c42dad867cb19050899186d4d180d195a1c6a98798 \ No newline at end of file diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 9f4d211752..eee58d00e0 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -2038,14 +2038,14 @@ struct Module { ** set. */ struct Column { - char *zCnName; /* Name of this column */ - u8 notNull : 4; /* An OE_ code for handling a NOT NULL constraint */ - u8 eType : 4; /* One of the standard types */ - char affinity; /* One of the SQLITE_AFF_... values */ - u8 szEst; /* Estimated size of value in this column. sizeof(INT)==1 */ - u8 hName; /* Column name hash for faster lookup */ - u16 iDflt; /* 1-based index of DEFAULT. 0 means "none" */ - u16 colFlags; /* Boolean properties. See COLFLAG_ defines below */ + char *zCnName; /* Name of this column */ + unsigned notNull :4; /* An OE_ code for handling a NOT NULL constraint */ + unsigned eType :4; /* One of the standard types */ + char affinity; /* One of the SQLITE_AFF_... values */ + u8 szEst; /* Est size of value in this column. sizeof(INT)==1 */ + u8 hName; /* Column name hash for faster lookup */ + u16 iDflt; /* 1-based index of DEFAULT. 0 means "none" */ + u16 colFlags; /* Boolean properties. See COLFLAG_ defines below */ }; /* Allowed values for Column.eType. diff --git a/src/util.c b/src/util.c index 08c2949b17..fc838023c1 100644 --- a/src/util.c +++ b/src/util.c @@ -284,7 +284,7 @@ void sqlite3DequoteExpr(Expr *p){ ** is always a no-op. */ void sqlite3DequoteToken(Token *p){ - int i; + unsigned int i; if( p->n<2 ) return; if( !sqlite3Isquote(p->z[0]) ) return; for(i=1; in-1; i++){ diff --git a/tool/mksqlite3c.tcl b/tool/mksqlite3c.tcl index f9c40f6609..9d59e17b16 100644 --- a/tool/mksqlite3c.tcl +++ b/tool/mksqlite3c.tcl @@ -166,6 +166,7 @@ foreach hdr { set available_hdr($hdr) 1 } set available_hdr(sqliteInt.h) 0 +set available_hdr(os_common.h) 0 set available_hdr(sqlite3session.h) 0 # These headers should be copied into the amalgamation without modifying any @@ -223,9 +224,7 @@ proc copy_file {filename} { if {[regexp {^\s*#\s*include\s+["<]([^">]+)[">]} $line all hdr]} { if {[info exists available_hdr($hdr)]} { if {$available_hdr($hdr)} { - if {$hdr!="os_common.h" && $hdr!="hwtime.h"} { - set available_hdr($hdr) 0 - } + set available_hdr($hdr) 0 section_comment "Include $hdr in the middle of $tail" copy_file $srcdir/$hdr section_comment "Continuing where we left off in $tail" @@ -327,6 +326,7 @@ proc copy_file {filename} { # foreach file { sqliteInt.h + os_common.h ctime.c global.c From d519c036699bdc03496e214b4cbbe3fdc6015ebb Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 6 Aug 2021 19:38:23 +0000 Subject: [PATCH 08/16] Attempt to fix the showwal.c utility program so that it works on WAL files larger than 4GiB. FossilOrigin-Name: 5c0f9ea98a2b944857fe05d53a0143cb827b7d8215c37f33f1bce47ec1189952 --- manifest | 12 ++++++------ manifest.uuid | 2 +- tool/showwal.c | 19 ++++++++++--------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/manifest b/manifest index ca6fa34ada..8273441511 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sharmless\scompiler\swarnings.\s\sOmit\sredundant\scopies\sof\sos_common.h\sand\nhwtime.h\sfrom\sthe\samalgamation. -D 2021-08-06T15:26:01.985 +C Attempt\sto\sfix\sthe\sshowwal.c\sutility\sprogram\sso\sthat\sit\sworks\son\sWAL\sfiles\nlarger\sthan\s4GiB. +D 2021-08-06T19:38:23.599 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1875,7 +1875,7 @@ F tool/showjournal.c 5bad7ae8784a43d2b270d953060423b8bd480818 F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/showshm.c a0ab6ec32dd1f11218ca2a4018f8fb875b59414801ab8ceed8b2e69b7b45a809 F tool/showstat4.c 0682ebea7abf4d3657f53c4a243f2e7eab48eab344ed36a94bb75dcd19a5c2a1 -F tool/showwal.c ad9d768f96ca6199ad3a8c9562d679680bd032dd01204ea3e5ea6fb931d81847 +F tool/showwal.c 0253c187ae16fdae9cde89e63e1dfcd3bb35e5416d066415f99e2f8cac6ab03d F tool/soak1.tcl 8d407956e1a45b485a8e072470a3e629a27037fe F tool/spaceanal.tcl 1b5be34c6223cb1af06da2a10fb77863eb869b1962d055820b0a11cf2336ab45 F tool/speed-check.sh 8ba7c7c0dba37e664679974f5954f2282275271a5b92f890756e282df0bfc458 @@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 832ac4c1ee384be0de72a4bdd55ed87e0f8294e7df5eefcf6b4942db3d85a69e -R 9b8bf1cf8f9f47bbc3756297fbda6376 +P 091427007818537bb2f860c42dad867cb19050899186d4d180d195a1c6a98798 +R a7df768dc8afad426b142b0d7495573f U drh -Z 8a1bbef3e175c4d55647fe110d7234dc +Z 557b7104be9ed20145851a8d359fd9c8 diff --git a/manifest.uuid b/manifest.uuid index e79fd412a2..c0d0000553 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -091427007818537bb2f860c42dad867cb19050899186d4d180d195a1c6a98798 \ No newline at end of file +5c0f9ea98a2b944857fe05d53a0143cb827b7d8215c37f33f1bce47ec1189952 \ No newline at end of file diff --git a/tool/showwal.c b/tool/showwal.c index b214a288eb..bc7406dc1a 100644 --- a/tool/showwal.c +++ b/tool/showwal.c @@ -117,7 +117,7 @@ static void out_of_memory(void){ ** Space to hold the content is obtained from malloc() and needs to be ** freed by the caller. */ -static unsigned char *getContent(int ofst, int nByte){ +static unsigned char *getContent(i64 ofst, int nByte){ unsigned char *aData; aData = malloc(nByte); if( aData==0 ) out_of_memory(); @@ -204,10 +204,10 @@ static void print_decode_line( ** Print an entire page of content as hex */ static void print_frame(int iFrame){ - int iStart; + i64 iStart; unsigned char *aData; - iStart = 32 + (iFrame-1)*(pagesize+24); - fprintf(stdout, "Frame %d: (offsets 0x%x..0x%x)\n", + iStart = 32 + (i64)(iFrame-1)*(pagesize+24); + fprintf(stdout, "Frame %d: (offsets 0x%llx..0x%llx)\n", iFrame, iStart, iStart+pagesize+24); aData = getContent(iStart, pagesize+24); print_decode_line(aData, 0, 4, 0, "Page number"); @@ -224,10 +224,10 @@ static void print_frame(int iFrame){ ** Summarize a single frame on a single line. */ static void print_oneline_frame(int iFrame, Cksum *pCksum){ - int iStart; + i64 iStart; unsigned char *aData; unsigned int s0, s1; - iStart = 32 + (iFrame-1)*(pagesize+24); + iStart = 32 + (i64)(iFrame-1)*(pagesize+24); aData = getContent(iStart, 24); extendCksum(pCksum, aData, 8, 0); extendCksum(pCksum, getContent(iStart+24, pagesize), pagesize, 0); @@ -564,7 +564,8 @@ int main(int argc, char **argv){ }else if( zLeft && zLeft[0]=='.' && zLeft[1]=='.' ){ iEnd = strtol(&zLeft[2], 0, 0); }else if( zLeft && zLeft[0]=='b' ){ - int ofst, nByte, hdrSize; + i64 ofst; + int nByte, hdrSize; unsigned char *a; if( iStart==1 ){ hdrSize = 100; @@ -572,10 +573,10 @@ int main(int argc, char **argv){ nByte = pagesize-100; }else{ hdrSize = 0; - ofst = (iStart-1)*pagesize; + ofst = (i64)(iStart-1)*pagesize; nByte = pagesize; } - ofst = 32 + hdrSize + (iStart-1)*(pagesize+24) + 24; + ofst = 32 + hdrSize + (i64)(iStart-1)*(pagesize+24) + 24; a = getContent(ofst, nByte); decode_btree_page(a, iStart, hdrSize, zLeft+1); free(a); From b419452c7e5718d4151ed845d5b2ddd0e6ac0d05 Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 6 Aug 2021 20:17:39 +0000 Subject: [PATCH 09/16] Fix an RBU problem with restarting an update after the *-oal file is already larger than 4GiB. FossilOrigin-Name: 087b8b41c6ed76b55c11315e7e95679d67590be20ae21108b593d00bb7d1c57a --- ext/rbu/sqlite3rbu.c | 2 +- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ext/rbu/sqlite3rbu.c b/ext/rbu/sqlite3rbu.c index ae86f577ac..0299e12ce1 100644 --- a/ext/rbu/sqlite3rbu.c +++ b/ext/rbu/sqlite3rbu.c @@ -2729,7 +2729,7 @@ static RbuState *rbuLoadState(sqlite3rbu *p){ break; case RBU_STATE_OALSZ: - pRet->iOalSz = (u32)sqlite3_column_int64(pStmt, 1); + pRet->iOalSz = sqlite3_column_int64(pStmt, 1); break; case RBU_STATE_PHASEONESTEP: diff --git a/manifest b/manifest index 8273441511..3f5be19156 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Attempt\sto\sfix\sthe\sshowwal.c\sutility\sprogram\sso\sthat\sit\sworks\son\sWAL\sfiles\nlarger\sthan\s4GiB. -D 2021-08-06T19:38:23.599 +C Fix\san\sRBU\sproblem\swith\srestarting\san\supdate\safter\sthe\s*-oal\sfile\sis\salready\slarger\sthan\s4GiB. +D 2021-08-06T20:17:39.191 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -379,7 +379,7 @@ F ext/rbu/rbuvacuum.test 55e101e90168c2b31df6c9638fe73dc7f7cc666b6142266d1563697 F ext/rbu/rbuvacuum2.test b8e5b51dc8b2c0153373d024c0936be3f66f9234acbd6d0baab0869d56b14e6b F ext/rbu/rbuvacuum3.test 8addd82e4b83b4c93fa47428eae4fd0dbf410f8512c186f38e348feb49ba03dc F ext/rbu/rbuvacuum4.test a78898e438a44803eb2bc897ba3323373c9f277418e2d6d76e90f2f1dbccfd10 -F ext/rbu/sqlite3rbu.c 496c11fa35fbfd977171de50baccd9c73ecc9e30e4aa037ebe3a992fb9fe4288 +F ext/rbu/sqlite3rbu.c d020eda938e3ed1c5227a7e1425751a9870f5d143542d806f8098c8cfa2eafa0 F ext/rbu/sqlite3rbu.h 1dc88ab7bd32d0f15890ea08d23476c4198d3da3056985403991f8c9cd389812 F ext/rbu/test_rbu.c 03f6f177096a5f822d68d8e4069ad8907fe572c62ff2d19b141f59742821828a F ext/repair/README.md 92f5e8aae749a4dae14f02eea8e1bb42d4db2b6ce5e83dbcdd6b1446997e0c15 @@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 091427007818537bb2f860c42dad867cb19050899186d4d180d195a1c6a98798 -R a7df768dc8afad426b142b0d7495573f -U drh -Z 557b7104be9ed20145851a8d359fd9c8 +P 5c0f9ea98a2b944857fe05d53a0143cb827b7d8215c37f33f1bce47ec1189952 +R 031a22d26158ce5e8d5ab23ad625bcf1 +U dan +Z a43027e17c934fafb82cd4d4ece727af diff --git a/manifest.uuid b/manifest.uuid index c0d0000553..c9b436af02 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5c0f9ea98a2b944857fe05d53a0143cb827b7d8215c37f33f1bce47ec1189952 \ No newline at end of file +087b8b41c6ed76b55c11315e7e95679d67590be20ae21108b593d00bb7d1c57a \ No newline at end of file From 5f9de6ecf4402f63e700667f579cb6645f9ac7c6 Mon Sep 17 00:00:00 2001 From: drh <> Date: Sat, 7 Aug 2021 23:16:52 +0000 Subject: [PATCH 10/16] Refactor sqlite3.magic into sqlite3.eOpenState. FossilOrigin-Name: e5d6512aa1fa0016a679c6e0cb665a0c67ad16f1daa0c18a96b2ebae1beefd15 --- manifest | 22 +++++++++++----------- manifest.uuid | 2 +- src/main.c | 16 ++++++++-------- src/sqliteInt.h | 16 ++++++++-------- src/test1.c | 32 -------------------------------- src/util.c | 16 ++++++++-------- src/vtab.c | 3 ++- 7 files changed, 38 insertions(+), 69 deletions(-) diff --git a/manifest b/manifest index 3f5be19156..596fd1d686 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\san\sRBU\sproblem\swith\srestarting\san\supdate\safter\sthe\s*-oal\sfile\sis\salready\slarger\sthan\s4GiB. -D 2021-08-06T20:17:39.191 +C Refactor\ssqlite3.magic\sinto\ssqlite3.eOpenState. +D 2021-08-07T23:16:52.446 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -508,7 +508,7 @@ F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 F src/insert.c 4ebff642574d3866316439b3dfce165f80e130e8969853c656d71b2afc5dd73c F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c 0aa9e7f08e168e3874cb54984408e3976dafdf5616d511952c425b5ac088ea3e -F src/main.c 5c8c47584612a60bd05c309aadbbfa4728824df0a94148d2a4e7e97d34676a22 +F src/main.c 9abeb9f542008eca3db9eb4d863be6c9eb778a07ff48d97d0af5fe98374055f3 F src/malloc.c cbc93cdd429c4594912017d92ab656e2579aca64dbd1c6888551275bed46f25b F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de @@ -549,12 +549,12 @@ F src/shell.c.in 24b99dae8818d1a234732d73f4d5b49f12b510bc62735a41c04e314fafae09e F src/sqlite.h.in 43fcf0fe2af04081f420a906fc020bde1243851ba44b0aa567a27f94bf8c3145 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h e97f4e9b509408fea4c4e9bef5a41608dfac343b4d3c7a990dedde1e19af9510 -F src/sqliteInt.h c12ad0bda10276615f042c78317270c12502d7b301656516384c0f76d9fa8b77 +F src/sqliteInt.h 7406ab363796bfc5b3e91924dc4086a9daf3e5f427db923d0d952765e5136ec5 F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657 F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 F src/tclsqlite.c 05663f6b5010b044eac0ef22fc8fb5ea3406d2502700a898261683258042c88b -F src/test1.c 2100f4c28bae21ce83a9a0c5ec6827efd0e15d11b93b569b614daa5654b3fcf6 +F src/test1.c 63761c2be2607f1b425fde991beda48aed384f8d67f2b4ee549174c88b433009 F src/test2.c 3efb99ab7f1fc8d154933e02ae1378bac9637da5 F src/test3.c 61798bb0d38b915067a8c8e03f5a534b431181f802659a6616f9b4ff7d872644 F src/test4.c 7c4420e01c577b5c4add2cb03119743b1a357543d347773b9e717195ea967159 @@ -614,7 +614,7 @@ F src/trigger.c 3f612ce5f0858b6c23460a3c799d01f408b49b0b29d931d8b8e6fc224a8667de F src/update.c 69c4c10bc6873a80c0a77cb578f9fc60ee90003d03f9530bc3370fa24615772d F src/upsert.c 8789047a8f0a601ea42fa0256d1ba3190c13746b6ba940fe2d25643a7e991937 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0 -F src/util.c c5dd51a245d621deb98e33c9db048111e58fc3af008bdcc6197c7044af0c8b79 +F src/util.c e9fd5c474691a7c913dfc971f01cf6d3a3d5954db04e0764a6426f845505e692 F src/vacuum.c 454973a59fb20bb982efc2df568a098616db6328a0491b6e84e2e07f7333db45 F src/vdbe.c b73a5ec9940185eb001ff8cff2cfd429bb438c7e89f2885e0bfdb56c3ff13386 F src/vdbe.h 25dabb25c7e157b84e59260cfb5b466c3ac103ede9f36f4db371332c47601abe @@ -626,7 +626,7 @@ F src/vdbemem.c 53881aa0a7845922a075b3f375695588618098871a7a4120af4c297b80fa3e64 F src/vdbesort.c cd5130f683706c1a43e165a74187745fb3351cb56052cf9dc91de820634bbde2 F src/vdbetrace.c 666c6fd9f1b62be6999e072a45b913e3c2c3518bc60dfd4d54fe304130acb724 F src/vdbevtab.c f99b275366c5fc5e2d99f734729880994ab9500bdafde7fae3b02d562b9d323c -F src/vtab.c 75bdaec808be883b8bb69a1f0a479c3a359823c5a85a26497cd5d90d3c30b74b +F src/vtab.c 88404ac1517903b3eb2abe256772ee95bb09f81ac0a17e13afe5d467df4de4ee F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 F src/wal.c 2be08331d798237ad5d7ae0b252700ffb2b63189cb18d993496d009a93e2f81c F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a @@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 5c0f9ea98a2b944857fe05d53a0143cb827b7d8215c37f33f1bce47ec1189952 -R 031a22d26158ce5e8d5ab23ad625bcf1 -U dan -Z a43027e17c934fafb82cd4d4ece727af +P 087b8b41c6ed76b55c11315e7e95679d67590be20ae21108b593d00bb7d1c57a +R 56f3f3302aa9f24a162fee58d25cbe2b +U drh +Z 8ec916b30c9fee315b610a0f44e54d61 diff --git a/manifest.uuid b/manifest.uuid index c9b436af02..5013496d8d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -087b8b41c6ed76b55c11315e7e95679d67590be20ae21108b593d00bb7d1c57a \ No newline at end of file +e5d6512aa1fa0016a679c6e0cb665a0c67ad16f1daa0c18a96b2ebae1beefd15 \ No newline at end of file diff --git a/src/main.c b/src/main.c index a37301a640..c34fbcc6cf 100644 --- a/src/main.c +++ b/src/main.c @@ -1242,7 +1242,7 @@ static int sqlite3Close(sqlite3 *db, int forceZombie){ /* Convert the connection into a zombie and then close it. */ - db->magic = SQLITE_MAGIC_ZOMBIE; + db->eOpenState = SQLITE_STATE_ZOMBIE; sqlite3LeaveMutexAndCloseZombie(db); return SQLITE_OK; } @@ -1306,7 +1306,7 @@ void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){ ** or if the connection has not yet been closed by sqlite3_close_v2(), ** then just leave the mutex and return. */ - if( db->magic!=SQLITE_MAGIC_ZOMBIE || connectionIsBusy(db) ){ + if( db->eOpenState!=SQLITE_STATE_ZOMBIE || connectionIsBusy(db) ){ sqlite3_mutex_leave(db->mutex); return; } @@ -1392,7 +1392,7 @@ void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){ sqlite3_free(db->auth.zAuthPW); #endif - db->magic = SQLITE_MAGIC_ERROR; + db->eOpenState = SQLITE_STATE_ERROR; /* The temp-database schema is allocated differently from the other schema ** objects (using sqliteMalloc() directly, instead of sqlite3BtreeSchema()). @@ -1402,7 +1402,7 @@ void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){ */ sqlite3DbFree(db, db->aDb[1].pSchema); sqlite3_mutex_leave(db->mutex); - db->magic = SQLITE_MAGIC_CLOSED; + db->eOpenState = SQLITE_STATE_CLOSED; sqlite3_mutex_free(db->mutex); assert( sqlite3LookasideUsed(db,0)==0 ); if( db->lookaside.bMalloced ){ @@ -1790,7 +1790,7 @@ int sqlite3_busy_timeout(sqlite3 *db, int ms){ */ void sqlite3_interrupt(sqlite3 *db){ #ifdef SQLITE_ENABLE_API_ARMOR - if( !sqlite3SafetyCheckOk(db) && (db==0 || db->magic!=SQLITE_MAGIC_ZOMBIE) ){ + if( !sqlite3SafetyCheckOk(db) && (db==0 || db->eOpenState!=SQLITE_STATE_ZOMBIE) ){ (void)SQLITE_MISUSE_BKPT; return; } @@ -3193,7 +3193,7 @@ static int openDatabase( sqlite3_mutex_enter(db->mutex); db->errMask = 0xff; db->nDb = 2; - db->magic = SQLITE_MAGIC_BUSY; + db->eOpenState = SQLITE_STATE_BUSY; db->aDb = db->aDbStatic; db->lookaside.bDisable = 1; db->lookaside.sz = 0; @@ -3353,7 +3353,7 @@ static int openDatabase( db->aDb[1].zDbSName = "temp"; db->aDb[1].safety_level = PAGER_SYNCHRONOUS_OFF; - db->magic = SQLITE_MAGIC_OPEN; + db->eOpenState = SQLITE_STATE_OPEN; if( db->mallocFailed ){ goto opendb_out; } @@ -3420,7 +3420,7 @@ opendb_out: sqlite3_close(db); db = 0; }else if( rc!=SQLITE_OK ){ - db->magic = SQLITE_MAGIC_SICK; + db->eOpenState = SQLITE_STATE_SICK; } *ppDb = db; #ifdef SQLITE_ENABLE_SQLLOG diff --git a/src/sqliteInt.h b/src/sqliteInt.h index eee58d00e0..b2d09ff0aa 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -1533,8 +1533,8 @@ struct sqlite3 { u8 mTrace; /* zero or more SQLITE_TRACE flags */ u8 noSharedCache; /* True if no shared-cache backends */ u8 nSqlExec; /* Number of pending OP_SqlExec opcodes */ + u8 eOpenState; /* Current condition of the connection */ int nextPagesize; /* Pagesize after VACUUM if >0 */ - u32 magic; /* Magic number for detect library misuse */ i64 nChange; /* Value returned by sqlite3_changes() */ i64 nTotalChange; /* Value returned by sqlite3_total_changes() */ int aLimit[SQLITE_N_LIMIT]; /* Limits */ @@ -1762,16 +1762,16 @@ struct sqlite3 { #define ConstFactorOk(P) ((P)->okConstFactor) /* -** Possible values for the sqlite.magic field. +** Possible values for the sqlite.eOpenState field. ** The numbers are obtained at random and have no special meaning, other ** than being distinct from one another. */ -#define SQLITE_MAGIC_OPEN 0xa029a697 /* Database is open */ -#define SQLITE_MAGIC_CLOSED 0x9f3c2d33 /* Database is closed */ -#define SQLITE_MAGIC_SICK 0x4b771290 /* Error and awaiting close */ -#define SQLITE_MAGIC_BUSY 0xf03b7906 /* Database currently in use */ -#define SQLITE_MAGIC_ERROR 0xb5357930 /* An SQLITE_MISUSE error occurred */ -#define SQLITE_MAGIC_ZOMBIE 0x64cffc7f /* Close with last statement close */ +#define SQLITE_STATE_OPEN 0xa0 /* Database is open */ +#define SQLITE_STATE_CLOSED 0x9f /* Database is closed */ +#define SQLITE_STATE_SICK 0x4b /* Error and awaiting close */ +#define SQLITE_STATE_BUSY 0xf0 /* Database currently in use */ +#define SQLITE_STATE_ERROR 0xb5 /* An SQLITE_MISUSE error occurred */ +#define SQLITE_STATE_ZOMBIE 0x64 /* Close with last statement close */ /* ** Each SQL function is defined by an instance of the following diff --git a/src/test1.c b/src/test1.c index 7cb56d3be9..ceafbe5038 100644 --- a/src/test1.c +++ b/src/test1.c @@ -5348,37 +5348,6 @@ static int SQLITE_TCLAPI test_stmt_int( return TCL_OK; } -/* -** Usage: sqlite_set_magic DB MAGIC-NUMBER -** -** Set the db->magic value. This is used to test error recovery logic. -*/ -static int SQLITE_TCLAPI sqlite_set_magic( - void * clientData, - Tcl_Interp *interp, - int argc, - char **argv -){ - sqlite3 *db; - if( argc!=3 ){ - Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], - " DB MAGIC", 0); - return TCL_ERROR; - } - if( getDbPointer(interp, argv[1], &db) ) return TCL_ERROR; - if( strcmp(argv[2], "SQLITE_MAGIC_OPEN")==0 ){ - db->magic = SQLITE_MAGIC_OPEN; - }else if( strcmp(argv[2], "SQLITE_MAGIC_CLOSED")==0 ){ - db->magic = SQLITE_MAGIC_CLOSED; - }else if( strcmp(argv[2], "SQLITE_MAGIC_BUSY")==0 ){ - db->magic = SQLITE_MAGIC_BUSY; - }else if( strcmp(argv[2], "SQLITE_MAGIC_ERROR")==0 ){ - db->magic = SQLITE_MAGIC_ERROR; - }else if( Tcl_GetInt(interp, argv[2], (int*)&db->magic) ){ - return TCL_ERROR; - } - return TCL_OK; -} /* ** Usage: sqlite3_interrupt DB @@ -8319,7 +8288,6 @@ int Sqlitetest1_Init(Tcl_Interp *interp){ { "breakpoint", (Tcl_CmdProc*)test_breakpoint }, { "sqlite3_key", (Tcl_CmdProc*)test_key }, { "sqlite3_rekey", (Tcl_CmdProc*)test_rekey }, - { "sqlite_set_magic", (Tcl_CmdProc*)sqlite_set_magic }, { "sqlite3_interrupt", (Tcl_CmdProc*)test_interrupt }, { "sqlite_delete_function", (Tcl_CmdProc*)delete_function }, { "sqlite_delete_collation", (Tcl_CmdProc*)delete_collation }, diff --git a/src/util.c b/src/util.c index fc838023c1..89e3e56f1f 100644 --- a/src/util.c +++ b/src/util.c @@ -1399,13 +1399,13 @@ static void logBadConnection(const char *zType){ ** used as an argument to sqlite3_errmsg() or sqlite3_close(). */ int sqlite3SafetyCheckOk(sqlite3 *db){ - u32 magic; + u8 eOpenState; if( db==0 ){ logBadConnection("NULL"); return 0; } - magic = db->magic; - if( magic!=SQLITE_MAGIC_OPEN ){ + eOpenState = db->eOpenState; + if( eOpenState!=SQLITE_STATE_OPEN ){ if( sqlite3SafetyCheckSickOrOk(db) ){ testcase( sqlite3GlobalConfig.xLog!=0 ); logBadConnection("unopened"); @@ -1416,11 +1416,11 @@ int sqlite3SafetyCheckOk(sqlite3 *db){ } } int sqlite3SafetyCheckSickOrOk(sqlite3 *db){ - u32 magic; - magic = db->magic; - if( magic!=SQLITE_MAGIC_SICK && - magic!=SQLITE_MAGIC_OPEN && - magic!=SQLITE_MAGIC_BUSY ){ + u8 eOpenState; + eOpenState = db->eOpenState; + if( eOpenState!=SQLITE_STATE_SICK && + eOpenState!=SQLITE_STATE_OPEN && + eOpenState!=SQLITE_STATE_BUSY ){ testcase( sqlite3GlobalConfig.xLog!=0 ); logBadConnection("invalid"); return 0; diff --git a/src/vtab.c b/src/vtab.c index c66a154678..86e13d3136 100644 --- a/src/vtab.c +++ b/src/vtab.c @@ -205,7 +205,8 @@ void sqlite3VtabUnlock(VTable *pVTab){ assert( db ); assert( pVTab->nRef>0 ); - assert( db->magic==SQLITE_MAGIC_OPEN || db->magic==SQLITE_MAGIC_ZOMBIE ); + assert( db->eOpenState==SQLITE_STATE_OPEN + || db->eOpenState==SQLITE_STATE_ZOMBIE ); pVTab->nRef--; if( pVTab->nRef==0 ){ From 687d74dfcc688f5e2d4b4f28ca48953a13c8903f Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 9 Aug 2021 13:06:59 +0000 Subject: [PATCH 11/16] Fix comments associated with sqlite3.eOpenState. No logic changes. FossilOrigin-Name: fd8f498f5d5f7fcb78dd8f6f9323d20b9e2904b249ec735477a0f03cb47b8561 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/sqliteInt.h | 2 +- src/vdbeaux.c | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/manifest b/manifest index 596fd1d686..b2275510b3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Refactor\ssqlite3.magic\sinto\ssqlite3.eOpenState. -D 2021-08-07T23:16:52.446 +C Fix\scomments\sassociated\swith\ssqlite3.eOpenState.\s\sNo\slogic\schanges. +D 2021-08-09T13:06:59.509 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -549,7 +549,7 @@ F src/shell.c.in 24b99dae8818d1a234732d73f4d5b49f12b510bc62735a41c04e314fafae09e F src/sqlite.h.in 43fcf0fe2af04081f420a906fc020bde1243851ba44b0aa567a27f94bf8c3145 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h e97f4e9b509408fea4c4e9bef5a41608dfac343b4d3c7a990dedde1e19af9510 -F src/sqliteInt.h 7406ab363796bfc5b3e91924dc4086a9daf3e5f427db923d0d952765e5136ec5 +F src/sqliteInt.h 9a0fa72633b685bd391f683143755a17549a7ac6ef22c23e5d1cd6ea1097f384 F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657 F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 @@ -620,7 +620,7 @@ F src/vdbe.c b73a5ec9940185eb001ff8cff2cfd429bb438c7e89f2885e0bfdb56c3ff13386 F src/vdbe.h 25dabb25c7e157b84e59260cfb5b466c3ac103ede9f36f4db371332c47601abe F src/vdbeInt.h 38206c8dd6b60ff03d9fd4f626b1b4fd0eef7cdc44f2fc2c1973b0f932a3f26b F src/vdbeapi.c aa5aaf2c37676b83af5724c6cd8207a3064ed46a217fd180957f75ac84f7a2a5 -F src/vdbeaux.c 202dbaf7d1570cd53678f6b0bcad7b0642e88bc5d77abc1d5b8b9a202a6a19fd +F src/vdbeaux.c 2368a8888f17368d4040a05966f7d2a2276cac4eeeba50793828186d999e3c8f F src/vdbeblob.c 60a7694760e35b2bba166cf49eb6a1eb0b31581102b49de78008ca3032406065 F src/vdbemem.c 53881aa0a7845922a075b3f375695588618098871a7a4120af4c297b80fa3e64 F src/vdbesort.c cd5130f683706c1a43e165a74187745fb3351cb56052cf9dc91de820634bbde2 @@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 087b8b41c6ed76b55c11315e7e95679d67590be20ae21108b593d00bb7d1c57a -R 56f3f3302aa9f24a162fee58d25cbe2b +P e5d6512aa1fa0016a679c6e0cb665a0c67ad16f1daa0c18a96b2ebae1beefd15 +R 43c2a7d0dc9629f135a1e60c0a2a89c6 U drh -Z 8ec916b30c9fee315b610a0f44e54d61 +Z bcb0948652933ffc3bff48e453c11acf diff --git a/manifest.uuid b/manifest.uuid index 5013496d8d..22fc897873 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e5d6512aa1fa0016a679c6e0cb665a0c67ad16f1daa0c18a96b2ebae1beefd15 \ No newline at end of file +fd8f498f5d5f7fcb78dd8f6f9323d20b9e2904b249ec735477a0f03cb47b8561 \ No newline at end of file diff --git a/src/sqliteInt.h b/src/sqliteInt.h index b2d09ff0aa..cc31acdbaf 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -1762,7 +1762,7 @@ struct sqlite3 { #define ConstFactorOk(P) ((P)->okConstFactor) /* -** Possible values for the sqlite.eOpenState field. +** Possible values for the sqlite3.eOpenState field. ** The numbers are obtained at random and have no special meaning, other ** than being distinct from one another. */ diff --git a/src/vdbeaux.c b/src/vdbeaux.c index a6bb915e1c..c04bd0d379 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -3005,9 +3005,9 @@ int sqlite3VdbeCheckFk(Vdbe *p, int deferred){ ** has made changes and is in autocommit mode, then commit those ** changes. If a rollback is needed, then do the rollback. ** -** This routine is the only way to move the state of a VM from -** SQLITE_MAGIC_RUN to SQLITE_MAGIC_HALT. It is harmless to -** call this on a VM that is in the SQLITE_MAGIC_HALT state. +** This routine is the only way to move the sqlite3eOpenState of a VM from +** SQLITE_STATE_RUN to SQLITE_STATE_HALT. It is harmless to +** call this on a VM that is in the SQLITE_STATE_HALT state. ** ** Return an error code. If the commit could not complete because of ** lock contention, return SQLITE_BUSY. If SQLITE_BUSY is returned, it From c80691744113b06c33418ebd4990bb8856e66a25 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 9 Aug 2021 17:36:22 +0000 Subject: [PATCH 12/16] Improved Hamming bit-distance between the SQLITE_STATE constants. FossilOrigin-Name: 5100b0456bc91f11e4a0bcf0d426ae4d8328cd9341ee2f9c83d0fa9f73047a83 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/sqliteInt.h | 17 ++++++++--------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/manifest b/manifest index b2275510b3..5a737d2e9e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\scomments\sassociated\swith\ssqlite3.eOpenState.\s\sNo\slogic\schanges. -D 2021-08-09T13:06:59.509 +C Improved\sHamming\sbit-distance\sbetween\sthe\sSQLITE_STATE\sconstants. +D 2021-08-09T17:36:22.031 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -549,7 +549,7 @@ F src/shell.c.in 24b99dae8818d1a234732d73f4d5b49f12b510bc62735a41c04e314fafae09e F src/sqlite.h.in 43fcf0fe2af04081f420a906fc020bde1243851ba44b0aa567a27f94bf8c3145 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h e97f4e9b509408fea4c4e9bef5a41608dfac343b4d3c7a990dedde1e19af9510 -F src/sqliteInt.h 9a0fa72633b685bd391f683143755a17549a7ac6ef22c23e5d1cd6ea1097f384 +F src/sqliteInt.h 548e07437d82c9732357d5efdb2d4e0ec403dedd9dab8def66a03d3d42ee9512 F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657 F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 @@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P e5d6512aa1fa0016a679c6e0cb665a0c67ad16f1daa0c18a96b2ebae1beefd15 -R 43c2a7d0dc9629f135a1e60c0a2a89c6 +P fd8f498f5d5f7fcb78dd8f6f9323d20b9e2904b249ec735477a0f03cb47b8561 +R cc762809992152a400531309f36d3af2 U drh -Z bcb0948652933ffc3bff48e453c11acf +Z 4e81a6431fa70fd48ee7a079ec432659 diff --git a/manifest.uuid b/manifest.uuid index 22fc897873..277518bd4b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -fd8f498f5d5f7fcb78dd8f6f9323d20b9e2904b249ec735477a0f03cb47b8561 \ No newline at end of file +5100b0456bc91f11e4a0bcf0d426ae4d8328cd9341ee2f9c83d0fa9f73047a83 \ No newline at end of file diff --git a/src/sqliteInt.h b/src/sqliteInt.h index cc31acdbaf..70d44a87ac 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -1761,17 +1761,16 @@ struct sqlite3 { */ #define ConstFactorOk(P) ((P)->okConstFactor) -/* -** Possible values for the sqlite3.eOpenState field. -** The numbers are obtained at random and have no special meaning, other -** than being distinct from one another. +/* Possible values for the sqlite3.eOpenState field. +** The numbers are randomly selected such that a minimum of three bits must +** change to convert any number to another or to zero */ -#define SQLITE_STATE_OPEN 0xa0 /* Database is open */ -#define SQLITE_STATE_CLOSED 0x9f /* Database is closed */ -#define SQLITE_STATE_SICK 0x4b /* Error and awaiting close */ -#define SQLITE_STATE_BUSY 0xf0 /* Database currently in use */ +#define SQLITE_STATE_OPEN 0x3b /* Database is open */ +#define SQLITE_STATE_CLOSED 0x63 /* Database is closed */ +#define SQLITE_STATE_SICK 0x77 /* Error and awaiting close */ +#define SQLITE_STATE_BUSY 0x7d /* Database currently in use */ #define SQLITE_STATE_ERROR 0xb5 /* An SQLITE_MISUSE error occurred */ -#define SQLITE_STATE_ZOMBIE 0x64 /* Close with last statement close */ +#define SQLITE_STATE_ZOMBIE 0xe5 /* Close with last statement close */ /* ** Each SQL function is defined by an instance of the following From af6d1afd243d049f5d6407f0fb49b6f7da34409a Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 9 Aug 2021 17:37:58 +0000 Subject: [PATCH 13/16] Undocumented "--threadsafe N" option added to the CLI for testing purposes. One of SQLITE_CONFIG_SINGLETHREAD, _MULTITHREAD, or _SERIALIZED is called depending on the value of the N integer. FossilOrigin-Name: 2d8f297c115f378854c1f2198e47ac5af5f222a5de8cc7575c42154094e71b53 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/shell.c.in | 10 ++++++++++ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 5a737d2e9e..142bb7fe4a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improved\sHamming\sbit-distance\sbetween\sthe\sSQLITE_STATE\sconstants. -D 2021-08-09T17:36:22.031 +C Undocumented\s"--threadsafe\sN"\soption\sadded\sto\sthe\sCLI\sfor\stesting\spurposes.\nOne\sof\sSQLITE_CONFIG_SINGLETHREAD,\s_MULTITHREAD,\sor\s_SERIALIZED\sis\scalled\ndepending\son\sthe\svalue\sof\sthe\sN\sinteger. +D 2021-08-09T17:37:58.495 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -545,7 +545,7 @@ F src/random.c 097dc8b31b8fba5a9aca1697aeb9fd82078ec91be734c16bffda620ced7ab83c F src/resolve.c 42b94d37a54200707a95566eff4f7e8a380e32d080016b699f23bd79a73a5028 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/select.c 63077c0243ded1432d97c90c1a4c3419b3a574b36634c674599a68bfe4c3bdc2 -F src/shell.c.in 24b99dae8818d1a234732d73f4d5b49f12b510bc62735a41c04e314fafae09e3 +F src/shell.c.in 252424f28126c38be0121803609fb89fa80a0ce69f478d807eaf25e159e356ab F src/sqlite.h.in 43fcf0fe2af04081f420a906fc020bde1243851ba44b0aa567a27f94bf8c3145 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h e97f4e9b509408fea4c4e9bef5a41608dfac343b4d3c7a990dedde1e19af9510 @@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P fd8f498f5d5f7fcb78dd8f6f9323d20b9e2904b249ec735477a0f03cb47b8561 -R cc762809992152a400531309f36d3af2 +P 5100b0456bc91f11e4a0bcf0d426ae4d8328cd9341ee2f9c83d0fa9f73047a83 +R ae1a378b88ee39ab9bfc14f0f79177ed U drh -Z 4e81a6431fa70fd48ee7a079ec432659 +Z 59831b796d2f7587f569e5bae4e34533 diff --git a/manifest.uuid b/manifest.uuid index 277518bd4b..41b88907cf 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5100b0456bc91f11e4a0bcf0d426ae4d8328cd9341ee2f9c83d0fa9f73047a83 \ No newline at end of file +2d8f297c115f378854c1f2198e47ac5af5f222a5de8cc7575c42154094e71b53 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index 7e610fdeef..cd591fdfb5 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -11140,6 +11140,14 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ if( n<0 ) n = 0; sqlite3_config(SQLITE_CONFIG_LOOKASIDE, sz, n); if( sz*n==0 ) data.shellFlgs &= ~SHFLG_Lookaside; + }else if( strcmp(z,"-threadsafe")==0 ){ + int n, sz; + sz = (int)integerValue(cmdline_option_value(argc,argv,++i)); + switch( sz ){ + case 0: sqlite3_config(SQLITE_CONFIG_SINGLETHREAD); break; + case 2: sqlite3_config(SQLITE_CONFIG_MULTITHREAD); break; + default: sqlite3_config(SQLITE_CONFIG_SERIALIZED); break; + } #ifdef SQLITE_ENABLE_VFSTRACE }else if( strcmp(z,"-vfstrace")==0 ){ extern int vfstrace_register( @@ -11352,6 +11360,8 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ i+=2; }else if( strcmp(z,"-lookaside")==0 ){ i+=2; + }else if( strcmp(z,"-threadsafe")==0 ){ + i+=2; }else if( strcmp(z,"-mmap")==0 ){ i++; }else if( strcmp(z,"-memtrace")==0 ){ From 9d16fb1c09e85fab09f86a57a59d5e38bc7bc6a6 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 9 Aug 2021 17:45:00 +0000 Subject: [PATCH 14/16] Fix harmless compiler warnings and improve the presentation for the new --threadsafe option to the CLI. FossilOrigin-Name: 7929dc2f6f304b077c174d41711b49a24120adeb0b29cb6acb4d6a40852d7e00 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/shell.c.in | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 142bb7fe4a..c984a65eb2 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Undocumented\s"--threadsafe\sN"\soption\sadded\sto\sthe\sCLI\sfor\stesting\spurposes.\nOne\sof\sSQLITE_CONFIG_SINGLETHREAD,\s_MULTITHREAD,\sor\s_SERIALIZED\sis\scalled\ndepending\son\sthe\svalue\sof\sthe\sN\sinteger. -D 2021-08-09T17:37:58.495 +C Fix\sharmless\scompiler\swarnings\sand\simprove\sthe\spresentation\sfor\sthe\snew\n--threadsafe\soption\sto\sthe\sCLI. +D 2021-08-09T17:45:00.703 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -545,7 +545,7 @@ F src/random.c 097dc8b31b8fba5a9aca1697aeb9fd82078ec91be734c16bffda620ced7ab83c F src/resolve.c 42b94d37a54200707a95566eff4f7e8a380e32d080016b699f23bd79a73a5028 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/select.c 63077c0243ded1432d97c90c1a4c3419b3a574b36634c674599a68bfe4c3bdc2 -F src/shell.c.in 252424f28126c38be0121803609fb89fa80a0ce69f478d807eaf25e159e356ab +F src/shell.c.in f795a4ae3c35631f5edcfa754c7824ff1d8a75b23a07e22e664b50f82e826346 F src/sqlite.h.in 43fcf0fe2af04081f420a906fc020bde1243851ba44b0aa567a27f94bf8c3145 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h e97f4e9b509408fea4c4e9bef5a41608dfac343b4d3c7a990dedde1e19af9510 @@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 5100b0456bc91f11e4a0bcf0d426ae4d8328cd9341ee2f9c83d0fa9f73047a83 -R ae1a378b88ee39ab9bfc14f0f79177ed +P 2d8f297c115f378854c1f2198e47ac5af5f222a5de8cc7575c42154094e71b53 +R 258f399591b3b9733af56f676f73726d U drh -Z 59831b796d2f7587f569e5bae4e34533 +Z ad4908f9b36be8e4480ff9f55397f698 diff --git a/manifest.uuid b/manifest.uuid index 41b88907cf..7b7030871f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2d8f297c115f378854c1f2198e47ac5af5f222a5de8cc7575c42154094e71b53 \ No newline at end of file +7929dc2f6f304b077c174d41711b49a24120adeb0b29cb6acb4d6a40852d7e00 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index cd591fdfb5..2ca88c02bb 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -11141,9 +11141,9 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ sqlite3_config(SQLITE_CONFIG_LOOKASIDE, sz, n); if( sz*n==0 ) data.shellFlgs &= ~SHFLG_Lookaside; }else if( strcmp(z,"-threadsafe")==0 ){ - int n, sz; - sz = (int)integerValue(cmdline_option_value(argc,argv,++i)); - switch( sz ){ + int n; + n = (int)integerValue(cmdline_option_value(argc,argv,++i)); + switch( n ){ case 0: sqlite3_config(SQLITE_CONFIG_SINGLETHREAD); break; case 2: sqlite3_config(SQLITE_CONFIG_MULTITHREAD); break; default: sqlite3_config(SQLITE_CONFIG_SERIALIZED); break; From 8a72882425ae8148d94d48ebe5172cd9d6498f14 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 9 Aug 2021 18:07:06 +0000 Subject: [PATCH 15/16] Ensure that the pcache1 cache size does not get so big that it overflows the integer that is keeping track of the cache size. FossilOrigin-Name: bf9d70fc2fde06a3f132270a26d4abe321687169066aff26ad9e92757c7f9ee4 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/pcache1.c | 5 ++++- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index c984a65eb2..179c9e2568 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sharmless\scompiler\swarnings\sand\simprove\sthe\spresentation\sfor\sthe\snew\n--threadsafe\soption\sto\sthe\sCLI. -D 2021-08-09T17:45:00.703 +C Ensure\sthat\sthe\spcache1\scache\ssize\sdoes\snot\sget\sso\sbig\sthat\sit\soverflows\nthe\sinteger\sthat\sis\skeeping\strack\sof\sthe\scache\ssize. +D 2021-08-09T18:07:06.575 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -536,7 +536,7 @@ F src/pager.h 4bf9b3213a4b2bebbced5eaa8b219cf25d4a82f385d093cd64b7e93e5285f66f F src/parse.y 0ba0baec5de6921ec8ba8bbcf1018969144ef29d26112e17539d8fbb1662e3eb F src/pcache.c 385ff064bca69789d199a98e2169445dc16e4291fa807babd61d4890c3b34177 F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586 -F src/pcache1.c 388304fd2d91c39591080b5e0f3c62cfba87db20370e7e0554062bfb29740e9f +F src/pcache1.c 00541fef31d2798dc20308ee1fa46205b76ad1df2c871e9c9bfe9508e59ab54c F src/pragma.c af0f43789545622fd5377d71f6d4c0e7c9b9295a3f5d5b1242e4032d38ca12b5 F src/pragma.h a11b4798f9c49f156f130e1f7041a9fcc9d316a64f3501b6013acdd2e4c6f549 F src/prepare.c 0d53d20532aada295c1690792a125adbd6435f5ce703ff0adf1b9b3605238b67 @@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 2d8f297c115f378854c1f2198e47ac5af5f222a5de8cc7575c42154094e71b53 -R 258f399591b3b9733af56f676f73726d +P 7929dc2f6f304b077c174d41711b49a24120adeb0b29cb6acb4d6a40852d7e00 +R 5ed20c4f6f3dd0873a45a27ab6ba0f51 U drh -Z ad4908f9b36be8e4480ff9f55397f698 +Z c3f298e00599b50c24893f0a3ffdacea diff --git a/manifest.uuid b/manifest.uuid index 7b7030871f..5e0dd095a8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7929dc2f6f304b077c174d41711b49a24120adeb0b29cb6acb4d6a40852d7e00 \ No newline at end of file +bf9d70fc2fde06a3f132270a26d4abe321687169066aff26ad9e92757c7f9ee4 \ No newline at end of file diff --git a/src/pcache1.c b/src/pcache1.c index 3eae6b63cd..286a98d36a 100644 --- a/src/pcache1.c +++ b/src/pcache1.c @@ -820,6 +820,9 @@ static void pcache1Cachesize(sqlite3_pcache *p, int nMax){ if( pCache->bPurgeable ){ PGroup *pGroup = pCache->pGroup; pcache1EnterMutex(pGroup); + if( nMax > 0xffff0000 - pGroup->nMaxPage + pCache->nMax ){ + nMax = 0xffff0000 - pGroup->nMaxPage + pCache->nMax; + } pGroup->nMaxPage += (nMax - pCache->nMax); pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage; pCache->nMax = nMax; @@ -838,7 +841,7 @@ static void pcache1Shrink(sqlite3_pcache *p){ PCache1 *pCache = (PCache1*)p; if( pCache->bPurgeable ){ PGroup *pGroup = pCache->pGroup; - int savedMaxPage; + unsigned int savedMaxPage; pcache1EnterMutex(pGroup); savedMaxPage = pGroup->nMaxPage; pGroup->nMaxPage = 0; From bdf15bbd6272a26b168983f064db4124194addf6 Mon Sep 17 00:00:00 2001 From: mistachkin Date: Mon, 9 Aug 2021 18:13:38 +0000 Subject: [PATCH 16/16] Further improvements to the eOpenState bit values. FossilOrigin-Name: d44f74f14a387960ce105913526b572f4a3d1935351c6aab10cee85946488a9e --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/sqliteInt.h | 12 ++++++------ 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/manifest b/manifest index 179c9e2568..969df8ecab 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Ensure\sthat\sthe\spcache1\scache\ssize\sdoes\snot\sget\sso\sbig\sthat\sit\soverflows\nthe\sinteger\sthat\sis\skeeping\strack\sof\sthe\scache\ssize. -D 2021-08-09T18:07:06.575 +C Further\simprovements\sto\sthe\seOpenState\sbit\svalues. +D 2021-08-09T18:13:38.173 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -549,7 +549,7 @@ F src/shell.c.in f795a4ae3c35631f5edcfa754c7824ff1d8a75b23a07e22e664b50f82e82634 F src/sqlite.h.in 43fcf0fe2af04081f420a906fc020bde1243851ba44b0aa567a27f94bf8c3145 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h e97f4e9b509408fea4c4e9bef5a41608dfac343b4d3c7a990dedde1e19af9510 -F src/sqliteInt.h 548e07437d82c9732357d5efdb2d4e0ec403dedd9dab8def66a03d3d42ee9512 +F src/sqliteInt.h a7f02fb629d7657cea714446d8c285d195b0504c31ae843833e44c46f941e3b6 F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657 F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 @@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 7929dc2f6f304b077c174d41711b49a24120adeb0b29cb6acb4d6a40852d7e00 -R 5ed20c4f6f3dd0873a45a27ab6ba0f51 -U drh -Z c3f298e00599b50c24893f0a3ffdacea +P bf9d70fc2fde06a3f132270a26d4abe321687169066aff26ad9e92757c7f9ee4 +R a9151e310251de143fbd3b8abd808680 +U mistachkin +Z e0914599a10f85fbe60bdb3fef5eb7e0 diff --git a/manifest.uuid b/manifest.uuid index 5e0dd095a8..b870135606 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bf9d70fc2fde06a3f132270a26d4abe321687169066aff26ad9e92757c7f9ee4 \ No newline at end of file +d44f74f14a387960ce105913526b572f4a3d1935351c6aab10cee85946488a9e \ No newline at end of file diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 70d44a87ac..e5dd352460 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -1765,12 +1765,12 @@ struct sqlite3 { ** The numbers are randomly selected such that a minimum of three bits must ** change to convert any number to another or to zero */ -#define SQLITE_STATE_OPEN 0x3b /* Database is open */ -#define SQLITE_STATE_CLOSED 0x63 /* Database is closed */ -#define SQLITE_STATE_SICK 0x77 /* Error and awaiting close */ -#define SQLITE_STATE_BUSY 0x7d /* Database currently in use */ -#define SQLITE_STATE_ERROR 0xb5 /* An SQLITE_MISUSE error occurred */ -#define SQLITE_STATE_ZOMBIE 0xe5 /* Close with last statement close */ +#define SQLITE_STATE_OPEN 0x76 /* Database is open */ +#define SQLITE_STATE_CLOSED 0xce /* Database is closed */ +#define SQLITE_STATE_SICK 0xba /* Error and awaiting close */ +#define SQLITE_STATE_BUSY 0x6d /* Database currently in use */ +#define SQLITE_STATE_ERROR 0xd5 /* An SQLITE_MISUSE error occurred */ +#define SQLITE_STATE_ZOMBIE 0xa7 /* Close with last statement close */ /* ** Each SQL function is defined by an instance of the following