aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrh <>2025-01-19 19:14:21 +0000
committerdrh <>2025-01-19 19:14:21 +0000
commit3640785453c74c6eb8dfeb35d263e9700c594ac2 (patch)
treeb1023e2cc20736d0bdad481d259557e9b0bf1725
parentc6a39debf9f15c4163b8228f4bf7dd14e76efd97 (diff)
downloadsqlite-3640785453c74c6eb8dfeb35d263e9700c594ac2.tar.gz
sqlite-3640785453c74c6eb8dfeb35d263e9700c594ac2.zip
Add an SQLITE_TESTCTRL_OPTIMIZATION mask that can disable the query planner
heuristics that are designed to help with star queries. FossilOrigin-Name: fec4ff185a2f3f1bee8f27432206276636cf27365d2d41cd7282f8c0425f2e96
-rw-r--r--manifest18
-rw-r--r--manifest.uuid2
-rw-r--r--src/shell.c.in1
-rw-r--r--src/sqliteInt.h1
-rw-r--r--src/where.c10
5 files changed, 19 insertions, 13 deletions
diff --git a/manifest b/manifest
index 2bd590212..c926f45fe 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Further\srefactoring\sof\sauto.def\sto\ssimplify\screation\sof\svariant\sbuilds\slike\sthe\sautoconf\sbundle.
-D 2025-01-19T18:32:45.973
+C Add\san\sSQLITE_TESTCTRL_OPTIMIZATION\smask\sthat\scan\sdisable\sthe\squery\splanner\nheuristics\sthat\sare\sdesigned\sto\shelp\swith\sstar\squeries.
+D 2025-01-19T19:14:21.044
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -780,11 +780,11 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
F src/resolve.c c8a5372b97b2a2e972a280676f06ddb5b74e885d3b1f5ce383f839907b57ef68
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
F src/select.c 83e88fbb36f89b6703b348777491619554f0fd6f917c9fdf51e4c2e9cda6c04e
-F src/shell.c.in beb370609906092a6810fcd9ea76737be2c91694445061c2eb05c4c0a3753de4
+F src/shell.c.in 9ade75afa953c5c2ded38d076533eaa6c9b2ab1977ef6cce0bc773adac178c50
F src/sqlite.h.in 6afbcaae44140216704a6c82e4c4ea4118c46d5f6573d6c5fa4fc901ed9d369e
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54
-F src/sqliteInt.h 3f20dfb5ae54e787b2643edc0b5bae0cecddfb89988e28afdc3c0b05892e25cc
+F src/sqliteInt.h 953f2476f712b115ecb43f7a21183d07c88af8d3b4c32f18317724ce1ce04d56
F src/sqliteLimit.h 1bbdbf72bd0411d003267ffebc59a262f061df5653027a75627d03f48ca30523
F src/status.c cb11f8589a6912af2da3bb1ec509a94dd8ef27df4d4c1a97e0bcf2309ece972b
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
@@ -863,7 +863,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
F src/wal.c 4e6181d8780ab0af2e1388d0754cbe6f2f04593d2b1ab6c41699a89942fd8997
F src/wal.h ba252daaa94f889f4b2c17c027e823d9be47ce39da1d3799886bbd51f0490452
F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014
-F src/where.c 521472bb0c7cfdd65a9b5b92d44f921e3e0a26a1996cc0416cf53e25301820d2
+F src/where.c 5e74d76b264abcd7e6682e02853756b5d32f543c59fb47bb55a02575b73693ae
F src/whereInt.h 2b0804f300c7f65de4046a1d81c65f01b208d6c08950ccd1fa6b8c16162a8af7
F src/wherecode.c 0c3d3199a2b769a5e2bb70feb5003dc85b3d86842ecaf903a47f2b4205ca5dab
F src/whereexpr.c 0f93a29cabd3a338d09a1f5c6770620a1ac51ec1157f3229502a7e7767c60b6f
@@ -2208,8 +2208,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 01ff37584708f3f79c62c1b5ed8cceab721cf8348a69a65f0559b1ef8845e85b
-R 8c31a36a753a4b17d602415d7f01de06
-U stephan
-Z 2c8a02028d4af4395c0183d2b9aa5b8f
+P f806c563a29240c709508316846fbe0cb3ed61b68a6c1d9544eb699e30141d8d
+R a016f5b06b30e7627e9627eb42538187
+U drh
+Z 386d6c5415cb5b1ed55b033eb5e08a17
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 8ccb68a4f..72562901a 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-f806c563a29240c709508316846fbe0cb3ed61b68a6c1d9544eb699e30141d8d
+fec4ff185a2f3f1bee8f27432206276636cf27365d2d41cd7282f8c0425f2e96
diff --git a/src/shell.c.in b/src/shell.c.in
index 17054a961..d7a0bf55b 100644
--- a/src/shell.c.in
+++ b/src/shell.c.in
@@ -11475,6 +11475,7 @@ static int do_meta_command(char *zLine, ShellState *p){
{ 0x04000000, 1, "NullUnusedCols" },
{ 0x08000000, 1, "OnePass" },
{ 0x10000000, 1, "OrderBySubq" },
+ { 0x20000000, 1, "StarQuery" },
{ 0xffffffff, 0, "All" },
};
unsigned int curOpt;
diff --git a/src/sqliteInt.h b/src/sqliteInt.h
index b8c9136a5..3045d7c4a 100644
--- a/src/sqliteInt.h
+++ b/src/sqliteInt.h
@@ -1889,6 +1889,7 @@ struct sqlite3 {
#define SQLITE_NullUnusedCols 0x04000000 /* NULL unused columns in subqueries */
#define SQLITE_OnePass 0x08000000 /* Single-pass DELETE and UPDATE */
#define SQLITE_OrderBySubq 0x10000000 /* ORDER BY in subquery helps outer */
+#define SQLITE_StarQuery 0x20000000 /* Heurists for star queries */
#define SQLITE_AllOpts 0xffffffff /* All optimizations */
/*
diff --git a/src/where.c b/src/where.c
index b867e615f..0b8e5acea 100644
--- a/src/where.c
+++ b/src/where.c
@@ -5459,7 +5459,10 @@ static LogEst whereSortingCost(
*/
static int computeMxChoice(WhereInfo *pWInfo, LogEst nRowEst){
int nLoop = pWInfo->nLevel; /* Number of terms in the join */
- if( nRowEst==0 && nLoop>=5 ){
+ if( nRowEst==0
+ && nLoop>=5
+ && OptimizationEnabled(pWInfo->pParse->db, SQLITE_StarQuery)
+ ){
/* Check to see if we are dealing with a star schema and if so, reduce
** the cost of fact tables relative to dimension tables, as a heuristic
** to help keep the fact tables in outer loops.
@@ -5487,8 +5490,9 @@ static int computeMxChoice(WhereInfo *pWInfo, LogEst nRowEst){
#ifdef WHERETRACE_ENABLED /* 0x4 */
if( sqlite3WhereTrace&0x4 ){
SrcItem *pItem = pWInfo->pTabList->a + iLoop;
- sqlite3DebugPrintf("Fact-table %s: %d dimensions, cost reduced %d\n",
- pItem->zAlias ? pItem->zAlias : pItem->pSTab->zName,
+ sqlite3DebugPrintf(
+ "Fact-table %s(%d): %d dimensions, cost reduced %d\n",
+ pItem->zAlias ? pItem->zAlias : pItem->pSTab->zName, iLoop,
nDep, rDelta);
}
#endif