From 5ff4a5390c5658aa32d9f3f08282cc08360f42b3 Mon Sep 17 00:00:00 2001 From: drh <> Date: Sat, 22 Aug 2026 16:33:58 +0000 Subject: [PATCH] Remove some unnecessary sqlite3_test_control() optimization control flags for a small performance increase and size reduction. FossilOrigin-Name: 2a9cb1e12ab4b81875e2d08f6cdecfb08b57137a69f6eb4efd19a56347184c3b --- manifest | 24 ++++++++++++------------ manifest.uuid | 2 +- src/select.c | 4 +--- src/shell.c.in | 2 -- src/sqliteInt.h | 13 +++++++------ src/test1.c | 1 - src/where.c | 5 +---- test/tkt-80ba201079.test | 22 ---------------------- test/triggerC.test | 3 --- 9 files changed, 22 insertions(+), 54 deletions(-) diff --git a/manifest b/manifest index 487083cae3..372008ff78 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\scheck-in\s[468e730036edac22]\sso\sthat\sit\sworks\swith\sDESC\sindexes.\n[bugs:/info/2026-08-22T07:01:45Z|Bug\s2026-08-22T07:01:45Z]. -D 2026-08-22T09:33:37.424 +C Remove\ssome\sunnecessary\ssqlite3_test_control()\soptimization\scontrol\sflags\nfor\sa\ssmall\sperformance\sincrease\sand\ssize\sreduction. +D 2026-08-22T16:33:58.464 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -743,18 +743,18 @@ F src/printf.c b480176bd0aaed9d64e804cfa3ca27fc585f65a73e7c7ca2fe9b9016db2cf6d5 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 0e0990f60c93db38c735d85e5d1741130e72dd0670aec204b5a39118b53c8044 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 -F src/select.c f9da7b070c559f249d6cb7911f8467b6cb8fcb1c785c8d4bf3aaecccdd472789 -F src/shell.c.in 38548c326452780d6119e508d3c020432df042aa13a4e41bd4c1ea8ad95eb48c +F src/select.c ba33125b1a93984f702883c730002a466860a7226dd9ce811bf75246d4ed021e +F src/shell.c.in d3fc7e4318df72b5dafb93c7d0323bb26aaeea594b099dccd9e76b182d4014d2 F src/sqlite.h.in efc3f7aa00a2bb01c087435e6fa5f86103e310e6c3ea072b12cc110cf2715a75 F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479 F src/sqlite3ext.h 0efd4723bad9124ea1f581d9f1ea0254ac1c6f3e5fb29e4f3dcf36c72485a456 -F src/sqliteInt.h b3d850874673b4697d55955771a08ef7ec6d155323d2ff04855383e4c7ec2eef +F src/sqliteInt.h b4cb30785d99c6b04399a0ca35fa701d5f0b6e6df0ea8bdb7a40878cb87decc6 F src/sqliteLimit.h c433b3fdb5e52f4226bf78d7e8081dff8fd8fbb0ce0cb1a5fee282aaa8976813 F src/status.c 7565d63a79aa2f326339a24a0461a60096d0bd2bce711fefb50b5c89335f3592 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 F src/tclsqlite.c ed8f7cd15cf56e05a31270d002598f349c1c17f5a21b9f8b55688a519f633ec6 F src/tclsqlite.h 614b3780a62522bc9f8f2b9fb22689e8009958e7aa77e572d0f3149050af348a -F src/test1.c 83f56d24b5de0965af7b245dc0199690389772e3813f8bca2c88f11e524982fe +F src/test1.c 6bb9bee04156c0bead88369d24d1bc0055bb15592402592eb232ef02ffd09198 F src/test2.c a61ed01d9264a1db74ab42fbc981fc66165f85d5e3947e92be61a73e79ec4f2d F src/test3.c c959fe0c3b04157483f5a6fa1950c1f222e062d920fee0a8e70410c6b6d45522 F src/test4.c 0ac87fc13cdb334ab3a71823f99b6c32a6bebe5d603cd6a71d84c823d43a25a0 @@ -825,7 +825,7 @@ F src/vxworks.h 9d18819c5235b49c2340a8a4d48195ec5d5afb637b152406de95a9436beeaeab F src/wal.c cb28ab3a71cb73ea422a2fcc26283b65a1e5a2a65c44de86951c7d6a186381ac F src/wal.h ba252daaa94f889f4b2c17c027e823d9be47ce39da1d3799886bbd51f0490452 F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014 -F src/where.c 3c784585b64b6ab36aae8c3df9ac7b4aa81d2e4ec26c74d69536c25c5437a726 +F src/where.c ff03395a6915ff32ec867605ff2312fe4a4f80c8604ed56c0856d31c541a74ee F src/whereInt.h f039ad303bc2913de673e431821ef8db3b619d249e6e5548d90072a684e72285 F src/wherecode.c aa733a45b550c65aae0641335ddd6179a24c6bf0889bf0dda44a8dddc74d6bb0 F src/whereexpr.c 76f72a95c5cf0e8a8edb679ca4fb7afa17ba45ff4effe73c414266510109e701 @@ -1780,7 +1780,7 @@ F test/tkt-752e1646fc.test ea78d88d14fe9866bdd991c634483334639e13bf F test/tkt-78e04e52ea.test b731f2ab7d1c2482ac5152097da02ef4805a45147ba9498d3cd9da27072f34d1 F test/tkt-7a31705a7e6.test 9e9c057b6a9497c8f7ba7b16871029414ccf6550e7345d9085d6d71c9a56bb6f F test/tkt-7bbfb7d442.test e87b59e620700b5a52ecd92f05d56686c1cad9e1aa17456eada55e0bb821b698 -F test/tkt-80ba201079.test 105a721e6aad0ae3c5946d7615d1e4d03f6145b8 +F test/tkt-80ba201079.test d8c8635b72628f457ed4f68bb0f25bfeb68c9917f2abeda59f4ed55948629511 F test/tkt-80e031a00f.test 7c93af53f43527f50020983a4bcc39b077e77c7362d7af8e04a5fd155fe5e829 F test/tkt-8454a207b9.test ead80b7a01438ca1436cee029694a96c821346cf1e24f06de12f8172e139ddbb F test/tkt-868145d012.test a5f941107ece6a64410ca4755c6329b7eb57a356 @@ -1917,7 +1917,7 @@ F test/trigger8.test 30cb0530bd7c4728055420e3f739aa00412eafa4 F test/trigger9.test 1724b595661da3dd3c8d79f0ebae818132a39e65c241bad2049f66952b1dc29d F test/triggerA.test 837be862d8721f903dba3f3ceff05b32e0bee5214cf6ea3da5fadf12d3650e9d F test/triggerB.test 56780c031b454abac2340dbb3b71ac5c56c3d7fe -F test/triggerC.test 1faacf5249a7abe8bdc44aafe170f2141a72cb2abcef300dc91e3d55c4158f41 +F test/triggerC.test 02b32b66b5b08300829ce23fc0bc3d19db6559b44b520d0f4e6c98e36ed4dd70 F test/triggerD.test 8e7f3921a92a5797d472732108109e44575fa650 F test/triggerE.test 45cf42d88b6e0bf1458509e558d24da272967b69798877103f2140616967948b F test/triggerF.test 5d76f0a8c428ff87a4d5ed52da06f6096a2c787a1e21b846111dfac4123de3ad @@ -2219,8 +2219,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c -P 3a01099c45bd5965286640c23d727ef0c4a61bd97146bf01bac63e296808cba9 -R b0542f919a1a303e26fc4257e0d7830d +P d1f4fa43f30d0aaf04af1b2afe9ec488654df43444bd49fae31ba1e2ab16b985 +R 0398f6afe5debd4e1b75a99904e2dc72 U drh -Z c2d675ebb5ec9d5669a5dadef886b467 +Z f723cbcd19074f5969a9ce662c278eb1 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 4434c1b883..c0585ee18f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d1f4fa43f30d0aaf04af1b2afe9ec488654df43444bd49fae31ba1e2ab16b985 +2a9cb1e12ab4b81875e2d08f6cdecfb08b57137a69f6eb4efd19a56347184c3b diff --git a/src/select.c b/src/select.c index cdd712b8a3..be38cbf8e1 100644 --- a/src/select.c +++ b/src/select.c @@ -2525,9 +2525,7 @@ Vdbe *sqlite3GetVdbe(Parse *pParse){ if( pParse->pVdbe ){ return pParse->pVdbe; } - if( pParse->pToplevel==0 - && OptimizationEnabled(pParse->db,SQLITE_FactorOutConst) - ){ + if( pParse->pToplevel==0 ){ pParse->okConstFactor = 1; } return sqlite3VdbeCreate(pParse); diff --git a/src/shell.c.in b/src/shell.c.in index 56f366bec7..8b0bbf30b8 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -12568,7 +12568,6 @@ static int do_meta_command(const char *zLine, ShellState *p){ { 0x00000001, 0, "Flatten" }, { 0x00000002, 1, "WindowFunc" }, { 0x00000004, 1, "GroupByOrder" }, - { 0x00000008, 1, "FactorOutConst" }, { 0x00000010, 1, "DistinctOpt" }, { 0x00000020, 1, "CoverIdxScan" }, { 0x00000040, 1, "OrderByIdxJoin" }, @@ -12585,7 +12584,6 @@ static int do_meta_command(const char *zLine, ShellState *p){ { 0x00020000, 1, "SeekScan" }, { 0x00040000, 1, "OmitOrderBy" }, { 0x00080000, 1, "BloomFilter" }, - { 0x00100000, 1, "BloomPulldown" }, { 0x00200000, 1, "BalancedMerge" }, { 0x00400000, 1, "ReleaseReg" }, { 0x00800000, 1, "FlttnUnionAll" }, diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 2ad281533c..3763fbf48b 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -1936,7 +1936,7 @@ struct sqlite3 { #define SQLITE_QueryFlattener 0x00000001 /* Query flattening */ #define SQLITE_WindowFunc 0x00000002 /* Use xInverse for window functions */ #define SQLITE_GroupByOrder 0x00000004 /* GROUPBY cover of ORDERBY */ -#define SQLITE_FactorOutConst 0x00000008 /* Constant factoring */ + /* 0x00000008 -- Available for reuse */ #define SQLITE_DistinctOpt 0x00000010 /* DISTINCT using indexes */ #define SQLITE_CoverIdxScan 0x00000020 /* Covering index scans */ #define SQLITE_OrderByIdxJoin 0x00000040 /* ORDER BY of joins via index */ @@ -1945,7 +1945,7 @@ struct sqlite3 { #define SQLITE_CountOfView 0x00000200 /* The count-of-view optimization */ #define SQLITE_CursorHints 0x00000400 /* Add OP_CursorHint opcodes */ #define SQLITE_Stat4 0x00000800 /* Use STAT4 data */ - /* TH3 expects this value ^^^^^^^^^^ to be 0x0000800. Don't change it */ + /* TH3 expects this value ^^^^^^^^^^ */ #define SQLITE_PushDown 0x00001000 /* WHERE-clause push-down opt */ #define SQLITE_SimplifyJoin 0x00002000 /* Convert LEFT JOIN to JOIN */ #define SQLITE_SkipScan 0x00004000 /* Skip-scans */ @@ -1953,13 +1953,14 @@ struct sqlite3 { #define SQLITE_MinMaxOpt 0x00010000 /* The min/max optimization */ #define SQLITE_SeekScan 0x00020000 /* The OP_SeekScan optimization */ #define SQLITE_OmitOrderBy 0x00040000 /* Omit pointless ORDER BY */ - /* TH3 expects this value ^^^^^^^^^^ to be 0x40000. Coordinate any change */ -#define SQLITE_BloomFilter 0x00080000 /* Use a Bloom filter on searches */ -#define SQLITE_BloomPulldown 0x00100000 /* Run Bloom filters early */ + /* TH3 expects this value ^^^^^^^^^^ */ +#define SQLITE_BloomFilter 0x00080000 /* Use a Bloom filters */ + /* TH3 expects this value ^^^^^^^^^^ */ + /* 0x00100000 -- Available for reuse */ #define SQLITE_BalancedMerge 0x00200000 /* Balance multi-way merges */ #define SQLITE_ReleaseReg 0x00400000 /* Use OP_ReleaseReg for testing */ #define SQLITE_FlttnUnionAll 0x00800000 /* Disable the UNION ALL flattener */ - /* TH3 expects this value ^^^^^^^^^^ See flatten04.test */ + /* TH3 expects this value ^^^^^^^^^^ */ #define SQLITE_IndexedExpr 0x01000000 /* Pull exprs from index when able */ #define SQLITE_Coroutines 0x02000000 /* Co-routines for subqueries */ #define SQLITE_NullUnusedCols 0x04000000 /* NULL unused columns in subqueries */ diff --git a/src/test1.c b/src/test1.c index 00092729e6..11eac70f0b 100644 --- a/src/test1.c +++ b/src/test1.c @@ -8396,7 +8396,6 @@ static int SQLITE_TCLAPI optimization_control( { "none", 0 }, { "query-flattener", SQLITE_QueryFlattener }, { "groupby-order", SQLITE_GroupByOrder }, - { "factor-constants", SQLITE_FactorOutConst }, { "distinct-opt", SQLITE_DistinctOpt }, { "cover-idx-scan", SQLITE_CoverIdxScan }, { "order-by-idx-join", SQLITE_OrderByIdxJoin }, diff --git a/src/where.c b/src/where.c index baf69930c6..538639bf44 100644 --- a/src/where.c +++ b/src/where.c @@ -1251,9 +1251,7 @@ end_auto_index_create: ** for pLevel. ** ** If there are inner loops within pLevel that have the WHERE_BLOOMFILTER -** flag set, initialize a Bloomfilter for them as well. Except don't do -** this recursive initialization if the SQLITE_BloomPulldown optimization has -** been turned off. +** flag set, initialize a Bloomfilter for them as well. ** ** When the Bloom filter is initialized, the WHERE_BLOOMFILTER flag is cleared ** from the loop, but the regFilter value is set to a register that implements @@ -1362,7 +1360,6 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter( VdbeCoverage(v); sqlite3VdbeJumpHere(v, addrTop); pLoop->wsFlags &= ~WHERE_BLOOMFILTER; - if( OptimizationDisabled(pParse->db, SQLITE_BloomPulldown) ) break; while( ++iLevel < pWInfo->nLevel ){ const SrcItem *pTabItem; pLevel = &pWInfo->a[iLevel]; diff --git a/test/tkt-80ba201079.test b/test/tkt-80ba201079.test index ea0799b568..9dbfaba30e 100644 --- a/test/tkt-80ba201079.test +++ b/test/tkt-80ba201079.test @@ -41,7 +41,6 @@ do_test tkt-80ba2-101 { } } {A B} do_test tkt-80ba2-102 { - optimization_control db factor-constants 0 db cache flush db eval { SELECT * FROM t1, t2 @@ -49,26 +48,6 @@ do_test tkt-80ba2-102 { OR (a='A' AND EXISTS (SELECT * FROM t3 WHERE c='C')); } } {A B} -optimization_control db all 1 - -# Verify that the optimization_control command is actually working -# -do_test tkt-80ba2-150 { - optimization_control db factor-constants 1 - db cache flush - set x1 [db eval {EXPLAIN - SELECT * FROM t1, t2 - WHERE (a='A' AND b='X') - OR (a='A' AND EXISTS (SELECT * FROM t3 WHERE c='C'));}] - optimization_control db factor-constants 0 - db cache flush - set x2 [db eval {EXPLAIN - SELECT * FROM t1, t2 - WHERE (a='A' AND b='X') - OR (a='A' AND EXISTS (SELECT * FROM t3 WHERE c='C'));}] - - expr {$x1==$x2} -} {0} do_test tkt-80ba2-200 { db eval { @@ -123,7 +102,6 @@ do_test tkt-80ba2-201 { } } {300 object_change 2048} do_test tkt-80ba2-202 { - optimization_control db factor-constants 0 db cache flush db eval { SELECT entry_type, diff --git a/test/triggerC.test b/test/triggerC.test index 85dff7cd43..1bd693a751 100644 --- a/test/triggerC.test +++ b/test/triggerC.test @@ -990,9 +990,6 @@ set SQL { reset_db do_execsql_test triggerC-14.1 $SQL {1 2 3} -reset_db -optimization_control db factor-constants 0 -do_execsql_test triggerC-14.2 $SQL {1 2 3} #------------------------------------------------------------------------- # Check that table names used by trigger programs are dequoted exactly