Change EXPLAIN QUERY PLAN output to say "USE TEMP B-TREE FOR LAST TERM OF ORDER BY", or "LAST N TERMS OF ORDER BY", instead of "RIGHT PART OF ORDER BY".

FossilOrigin-Name: cd547c500442f3f58c05d6da8a67c3238560c5204ea62ec14afa844cc8fb94f0
This commit is contained in:
dan 2024-03-20 16:27:08 +00:00
parent daee74c3ac
commit e555bd4f02
8 changed files with 82 additions and 24 deletions

View File

@ -1,5 +1,5 @@
C Fix\sthe\sSQLITE_ALLOW_ROWID_IN_VIEW\sbug-compatibility\soption\sso\sthat\sit\sworks\nagain.\s\sAdd\sthe\sSQLITE_CONFIG_ROWID_IN_VIEW\ssqlite3_config()\svalue\nto\soptionally\sdisable\sthe\sbug-compatibility\smode\sat\sstart-time.\s\sEnable\ntesting\sof\sSQLITE_ALLOW_ROWID_IN_VIEW.
D 2024-03-20T10:45:13.735
C Change\sEXPLAIN\sQUERY\sPLAN\soutput\sto\ssay\s"USE\sTEMP\sB-TREE\sFOR\sLAST\sTERM\sOF\sORDER\sBY",\sor\s"LAST\sN\sTERMS\sOF\sORDER\sBY",\sinstead\sof\s"RIGHT\sPART\sOF\sORDER\sBY".
D 2024-03-20T16:27:08.690
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@ -750,7 +750,7 @@ F src/printf.c 87b67bba3662a0523f39ae6b084a3907109702f717c654d6cecb838af5cd57f1
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
F src/resolve.c eb1860b134fb044fd819c4347105c148d5aac7c6498032be2829e5cc95619b28
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
F src/select.c a83532bae45185f271b59babf715a31a831ac17e2b4bc061f52ee53825c688f1
F src/select.c ced6678ead94c08d58cdb65cdda00a4871a3048e7834146f2a58ce71171808f8
F src/shell.c.in 0354ca51eee5fbf6af394a7ef9f5ef6823ef45b743db65431f6777e4d5be2199
F src/sqlite.h.in 41c5febd217b1e475aae022895c60f57fbe39ff6136450110662cfad67002d43
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
@ -1022,7 +1022,7 @@ F test/corruptK.test 5b4212fe346699831c5ad559a62c54e11c0611bdde1ea8423a091f9c01a
F test/corruptL.test 504d90502d9993440226edc355d2275524b89064ea3df5ee5c27f7028ec59d07
F test/corruptM.test 7d574320e08c1b36caa3e47262061f186367d593a7e305d35f15289cc2c3e067
F test/corruptN.test 7c099d153a554001b4fb829c799b01f2ea6276cbc32479131e0db0da4efd9cc4
F test/cost.test b11cdbf9f11ffe8ef99c9881bf390e61fe92baf2182bad1dbe6de59a7295c576
F test/cost.test cc434a026b1e9d0d98137a147e24e5daf1b1ad09e9ff7da63b34c83ddd136d92
F test/count.test cd4bd531066e8d77ef8fe1e3fc8253d042072e117ccab214b290cf83f1602249
F test/countofview.test 4088e461a10ee33e69803c177a69aa1d7bba81a9ffc2df66d76465a22ca7fdfc
F test/coveridxscan.test f35c7208dedc4f98e471c569df64c0f95a49f6e072d8dc7c8f99bdee2697de1b
@ -1100,7 +1100,8 @@ F test/enc.test 9a7be5479da985381d740b15f432800f65e2c87029ee57a318f42cb2eb43763a
F test/enc2.test 848bf05f15b011719f478dddb7b5e9aea35e39e457493cba4c4eef75d849a5ec
F test/enc3.test 55ef64416d72975c66167310a51dc9fc544ba3ae4858b8d5ab22f4cb6500b087
F test/enc4.test c8f1ce3618508fd0909945beb8b8831feef2c020
F test/eqp.test f3f7548d2f3df03e2f23ecaf35c7c2cc7b89848bd7c3606d94a010521b7ea4f6
F test/eqp.test 3302598f611220a6c61e29d9b7bb62fd4a43504509b978dbabdb0b3e56ae3bc0
F test/eqp2.test 6e8996148de88f0e7670491e92e712a2920a369b4406f21a27c3c9b6a46b68dd
F test/errmsg.test eae9f091eb39ce7e20305de45d8e5d115b68fa856fba4ea6757b6ca3705ff7f9
F test/eval.test 73969a2d43a511bf44080c44485a8c4d796b6a4f038d19e491867081155692c0
F test/exclusive.test 7ff63be7503990921838d5c9f77f6e33e68e48ed1a9d48cd28745bf650bf0747
@ -1467,7 +1468,7 @@ F test/openv2.test 0d3040974bf402e19b7df4b783e447289d7ab394
F test/optfuzz-db01.c 9f2fa80b8f84ebbf1f2e8b13421a4e0477fe300f6686fbd76cac1d2db66e0fdc
F test/optfuzz-db01.txt 21f6bdeadc701cf11528276e2a55c70bfcb846ba42df327f979bd9e7b6ce7041
F test/optfuzz.c 690430a0bf0ad047d5a168bf52b05b2ee97aedaad8c14337e9eb5050faa64994
F test/orderby1.test 02cfd870127a7342170b829175c5c53e9e7405744451ac1aeb2f7e2b0c18ca76
F test/orderby1.test 7d0e4ee692a3e808c1026b3c483594ad1e468b68b50dcefa0d678a8c05274ceb
F test/orderby2.test bc11009f7cd99d96b1b11e57b199b00633eb5b04
F test/orderby3.test 8619d06a3debdcd80a27c0fdea5c40b468854b99
F test/orderby4.test 4d39bfbaaa3ae64d026ca2ff166353d2edca4ba4
@ -1578,7 +1579,7 @@ F test/select6.test 9b2fb4ffedf52e1b5703cfcae1212e7a4a063f014c0458d78d29aca3db76
F test/select7.test f659f231489349e8c5734e610803d7654207318f
F test/select8.test 8c8f5ae43894c891efc5755ed905467d1d67ad5d
F test/select9.test f7586b207ce2304ab80dc93d3146469a28fd4403621dd3a82d06644563d3c812
F test/selectA.test 6aef8b2136a4ac7a3e2e4161d2b8ca7bc6ebe2779de084f9bb66ca9e2323a937
F test/selectA.test 1da8ce3884c326e11d2855baffb76436b0d7e044404af8a2a70d1399a4ff7e29
F test/selectB.test 954e4e49cf1f896d61794e440669e03a27ceea25
F test/selectC.test 38c530b0cc5728b793c3c11f52b52c70290d39822224acd39011c89c1853bd31
F test/selectD.test 6d1909b49970bf92f45ce657505befcef5fc7cbc13544e18103a316d32189bfb
@ -2180,9 +2181,11 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P 262f8f9d80d37160e4126634b99aa48fce2073e61f6365e8bdbe1cc4fa560a96 54680d0fbec1f0575ac4be6dca866971795dab2c42b02a492d5cd485f46d153f
R 1676f1a7037df308a062e51e2c63ab1f
T +closed 54680d0fbec1f0575ac4be6dca866971795dab2c42b02a492d5cd485f46d153f
U drh
Z 8bdaec16fb58072604ac6ea406b7bf1a
P b6802565df0f63286a7ef26c92d3ed817895f244920a24909cd855090fdfa08c
R 8123b01b9bcdf105a2e2ddc317d657f0
T *branch * eqp-orderby
T *sym-eqp-orderby *
T -sym-trunk *
U dan
Z b979ee1c2ca7e0d90b1c38ab5826e1ad
# Remove this line to create a well-formed Fossil manifest.

View File

@ -1 +1 @@
b6802565df0f63286a7ef26c92d3ed817895f244920a24909cd855090fdfa08c
cd547c500442f3f58c05d6da8a67c3238560c5204ea62ec14afa844cc8fb94f0

View File

@ -1673,9 +1673,16 @@ static void generateSortTail(
int addrExplain; /* Address of OP_Explain instruction */
#endif
nKey = pOrderBy->nExpr - pSort->nOBSat;
if( pSort->nOBSat==0 || nKey==1 ){
ExplainQueryPlan2(addrExplain, (pParse, 0,
"USE TEMP B-TREE FOR %sORDER BY", pSort->nOBSat>0?"RIGHT PART OF ":"")
);
"USE TEMP B-TREE FOR %sORDER BY", pSort->nOBSat?"LAST TERM OF ":""
));
}else{
ExplainQueryPlan2(addrExplain, (pParse, 0,
"USE TEMP B-TREE FOR LAST %d TERMS OF ORDER BY", nKey
));
}
sqlite3VdbeScanStatusRange(v, addrExplain,pSort->addrPush,pSort->addrPushEnd);
sqlite3VdbeScanStatusCounters(v, addrExplain, addrExplain, pSort->addrPush);
@ -1713,7 +1720,6 @@ static void generateSortTail(
regRow = sqlite3GetTempRange(pParse, nColumn);
}
}
nKey = pOrderBy->nExpr - pSort->nOBSat;
if( pSort->sortFlags & SORTFLAG_UseSorter ){
int regSortOut = ++pParse->nMem;
iSortTab = pParse->nTab++;

View File

@ -103,7 +103,7 @@ do_eqp_test 5.2 {
} {
QUERY PLAN
|--SCAN t2 USING INDEX t2i1
`--USE TEMP B-TREE FOR RIGHT PART OF ORDER BY
`--USE TEMP B-TREE FOR LAST TERM OF ORDER BY
}
do_eqp_test 5.3 {

View File

@ -413,7 +413,7 @@ do_eqp_test 4.2.3 {
| `--USE TEMP B-TREE FOR ORDER BY
`--RIGHT
|--SCAN t2 USING INDEX t2i1
`--USE TEMP B-TREE FOR RIGHT PART OF ORDER BY
`--USE TEMP B-TREE FOR LAST 2 TERMS OF ORDER BY
}
do_eqp_test 4.2.4 {
SELECT * FROM t1 INTERSECT SELECT * FROM t2 ORDER BY 1
@ -425,7 +425,7 @@ do_eqp_test 4.2.4 {
| `--USE TEMP B-TREE FOR ORDER BY
`--RIGHT
|--SCAN t2 USING INDEX t2i1
`--USE TEMP B-TREE FOR RIGHT PART OF ORDER BY
`--USE TEMP B-TREE FOR LAST 2 TERMS OF ORDER BY
}
do_eqp_test 4.2.5 {
SELECT * FROM t1 EXCEPT SELECT * FROM t2 ORDER BY 1
@ -437,7 +437,7 @@ do_eqp_test 4.2.5 {
| `--USE TEMP B-TREE FOR ORDER BY
`--RIGHT
|--SCAN t2 USING INDEX t2i1
`--USE TEMP B-TREE FOR RIGHT PART OF ORDER BY
`--USE TEMP B-TREE FOR LAST 2 TERMS OF ORDER BY
}
do_eqp_test 4.3.1 {

49
test/eqp2.test Normal file
View File

@ -0,0 +1,49 @@
# 2024 March 20
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#***********************************************************************
#
set testdir [file dirname $argv0]
source $testdir/tester.tcl
set testprefix eqp2
do_execsql_test 1.0 {
CREATE TABLE t1(a, b, c, d);
CREATE INDEX i1 ON t1(a, b, c);
}
do_eqp_test 1.1 {
SELECT * FROM t1 ORDER BY a, b, c
} {
QUERY PLAN
`--SCAN t1 USING INDEX i1
}
do_eqp_test 1.2 {
SELECT * FROM t1 ORDER BY a, b, +c
} {
QUERY PLAN
|--SCAN t1 USING INDEX i1
`--USE TEMP B-TREE FOR LAST TERM OF ORDER BY
}
do_eqp_test 1.3 {
SELECT * FROM t1 ORDER BY a, +b, +c
} {
QUERY PLAN
|--SCAN t1 USING INDEX i1
`--USE TEMP B-TREE FOR LAST 2 TERMS OF ORDER BY
}
finish_test

View File

@ -520,7 +520,7 @@ do_eqp_test 8.1 {
} {
QUERY PLAN
|--SCAN t1 USING INDEX i1
`--USE TEMP B-TREE FOR RIGHT PART OF ORDER BY
`--USE TEMP B-TREE FOR LAST TERM OF ORDER BY
}
do_execsql_test 8.2 {

View File

@ -1340,10 +1340,10 @@ do_eqp_test 4.1.2 {
`--MERGE (UNION ALL)
|--LEFT
| |--SCAN t5 USING INDEX i2
| `--USE TEMP B-TREE FOR RIGHT PART OF ORDER BY
| `--USE TEMP B-TREE FOR LAST TERM OF ORDER BY
`--RIGHT
|--SCAN t4 USING INDEX i1
`--USE TEMP B-TREE FOR RIGHT PART OF ORDER BY
`--USE TEMP B-TREE FOR LAST TERM OF ORDER BY
}
do_execsql_test 4.1.3 {