1
0
mirror of https://github.com/sqlite/sqlite.git synced 2026-10-23 21:49:02 +03:00

Minor fixes. Tests are passing now.

FossilOrigin-Name: 305ae331f5e791941c12b04b727656ac8d80f7c5cb6343277b979a456eb3b834
This commit is contained in:
drh
2026-01-20 15:07:28 +00:00
parent 0af76f6caa
commit ec13fcecd2
9 changed files with 96 additions and 63 deletions

View File

@@ -1,5 +1,5 @@
C Be\smore\saggressive\sabout\susing\sa\ssort-and-merge\sto\scompute\sthe\sUNION\sof\ntwo\sSELECT\sstatements.\s\sExperimental\sbranch.\s\sThis\scheck-in\sis\sfailing\ssome\ntests.
D 2026-01-19T19:51:03.991
C Minor\sfixes.\s\sTests\sare\spassing\snow.
D 2026-01-20T15:07:28.159
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -738,12 +738,12 @@ F src/printf.c b1b29b5e58e1530d5daeee5963d3c318d8ab2d7e38437580e28755753e0c1ded
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
F src/resolve.c 47aa7fdc9ec4c19b103ac5e79d7887d30119b5675309facf5eed1118391c868b
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
F src/select.c c2c07615ec16f7040228ba80115c00c7c8639b1ac9a0a99e28f97af5ebe4300b
F src/select.c db7af5c5e3cdcbf4ce443f5540cfa782e0fd4de5481af9814c188f05aef8193c
F src/shell.c.in 3bc4c6aa962bdf950dc144c2138eb4bc734bf7e305f2ac42dbda5a83c4a4c660
F src/sqlite.h.in 476f3efeb5dd26ad94dcbce262ca7eb9d042d797a92d624059c67ef37d5b3ab4
F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
F src/sqlite3ext.h f590cd8cb4c36fc727632c9b5fbbafc85f7efe2c6890f9958d7e711dc26ec01e
F src/sqliteInt.h af67bc95fa6b66cd3c7f3d18d2d040ad386e4cbb02965ee318cc721ee9d5fa45
F src/sqliteInt.h 71a2ae85d45c6cda8571bab66a6ab86b36a439a82c8a712681e6a99c381ab79b
F src/sqliteLimit.h 904a3f520362c7065c18165aaabd504fb13cc1b76cb411f38bd41ac219e4af1e
F src/status.c 7565d63a79aa2f326339a24a0461a60096d0bd2bce711fefb50b5c89335f3592
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
@@ -973,7 +973,7 @@ F test/collate1.test 0890fa372753b59eba53832d37328af815f6b8e4b16761823180eeb62c8
F test/collate2.test 471c6f74573382b89b0f8b88a05256faa52f7964f9e4799e76708a3b1ece6ba4
F test/collate3.test 89defc49983ddfbf0a0555aca8c0521a676f56a5
F test/collate4.test c953715fb498b87163e3e73dd94356bff1f317bd
F test/collate5.test b1dfeff239ea69ee9225832553f423d37a6184eb730cee06f6846ab4e3c6dbef
F test/collate5.test 42daaf7799b04221206a219fb3c0f9efeede03e760f9562b8c0114b8df183fe3
F test/collate6.test 8be65a182abaac8011a622131486dafb8076e907
F test/collate7.test 8ec29d98f3ee4ccebce6e16ce3863fb6b8c7b868
F test/collate8.test cd9b3d3f999b8520ffaa7cc1647061fc5bab1334
@@ -1058,7 +1058,7 @@ F test/descidx2.test a0ba347037ff3b811f4c6ceca5fd0f9d5d72e74e59f2d9de346a9d2f6ad
F test/descidx3.test 953c831df7ea219c73826dfbf2f6ee02d95040725aa88ccb4fa43d1a1999b926
F test/diskfull.test 106391384780753ea6896b7b4f005d10e9866b6e
F test/distinct.test 691c9e850b0d0b56b66e7e235453198cb4cf0760e324b7403d3c5abbeab0a014
F test/distinct2.test 4d6316b6487a0aa5a90bee111575c957e2a5ba5a9be9156febe9533ce78876e8
F test/distinct2.test a6af6a90b2c1eea64c3cc87ea7f8feb832053f7276fe3c212abacf646de4762a
F test/distinctagg.test 40d7169ae5846caaf62c6e307d2ca3c333daf9b6f7cde888956a339a97afe85f
F test/e_blobbytes.test 4c01dfe4f12087b92b20705a3fdfded45dc4ed16d5a211fed4e1d2786ba68a52
F test/e_blobclose.test 692fc02a058476c2222a63d97e3f3b2b809c1842e5525ded7f854d540ac2e075
@@ -1090,7 +1090,7 @@ F test/enc.test b5503a87b31cea8a5084c6e447383f9ca08933bd2f29d97b6b6201081b2343eb
F test/enc2.test 872afe58db772e7dfa1ad8e0759f8cc820e9efc8172d460fae83023101c2e435
F test/enc3.test 55ef64416d72975c66167310a51dc9fc544ba3ae4858b8d5ab22f4cb6500b087
F test/enc4.test c8f1ce3618508fd0909945beb8b8831feef2c020
F test/eqp.test 746db9fe11629a0d00328e1721cc2a2e4726d574b677ab14de35fd914f54cc82
F test/eqp.test 1d653fe8d2612cd6764e5ea2f16dcf5f13a9f50448b9233bb1573804bccd7579
F test/eqp2.test 6e8996148de88f0e7670491e92e712a2920a369b4406f21a27c3c9b6a46b68dd
F test/errmsg.test eae9f091eb39ce7e20305de45d8e5d115b68fa856fba4ea6757b6ca3705ff7f9
F test/errofst1.test 6da78363739ba8991f498396ab331b5d64e7ab5c4172c12b5884683ef523ac53
@@ -1468,7 +1468,7 @@ F test/null.test b7ff206a1c60fe01aa2abd33ef9ea83c93727d993ca8a613de86e925c9f2bc6
F test/nulls1.test 7a5e4346ee4285034100b4cd20e6784f16a9d6c927e44ecdf10034086bbee9c9
F test/numcast.test 5d126f7f581432e86a90d1e35cac625164aec4a1
F test/numindex1.test 20a5450d4b056e48cd5db30e659f13347a099823
F test/offset1.test 72cca52482cbd5bc687cfa67aa2566c859081b5a353fd2f9da9bbd3914dea1ef
F test/offset1.test c21e67d2d5ae8ed310243fbe84fc2f0dca49e9ffed3ea89110c0d5914c0de620
F test/openv2.test 0d3040974bf402e19b7df4b783e447289d7ab394
F test/optfuzz-db01.c 9f2fa80b8f84ebbf1f2e8b13421a4e0477fe300f6686fbd76cac1d2db66e0fdc
F test/optfuzz-db01.txt 21f6bdeadc701cf11528276e2a55c70bfcb846ba42df327f979bd9e7b6ce7041
@@ -1811,7 +1811,7 @@ F test/tkt2213.test a9702175601a57b61aba095a233b001d6f362474
F test/tkt2251.test 5aab8c7898cd2df2a68fe19289cc29e8f5cf8c82
F test/tkt2285.test cca17be61cf600b397188e77e7143844d2b977e9
F test/tkt2332.test fc955609b958ca86dfa102832243370a0cc84070
F test/tkt2339.test 73bd17818924cd2ac442e5fd9916b58565739450
F test/tkt2339.test bad48bd064594aa7b4de23f6d59a72b0b0c4175fd917f4b66907584732d41652
F test/tkt2391.test ab7a11be7402da8b51a5be603425367aa0684567
F test/tkt2409.test be0d60e7d283f639dccea4b0b5e1cd3a4851fb5b
F test/tkt2450.test 77ed94863f2049c1420288ddfea2d41e5e0971d6
@@ -2193,11 +2193,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
P c1e55132410a80d37bad30e4ddecc7a98fad92a68b436880324998af1cee37ae
R 14b52d7d0f8047724839557171235a7f
T *branch * union-by-merge
T *sym-union-by-merge *
T -sym-trunk *
P e534af8a78f5458bd656f70eb9f68084c0ed3f97360f5a033fba3564849e970c
R 1d72d9705c75984ccfe6b20a584dbf44
U drh
Z f2ba17780829856e94c58b16fe623059
Z 5c48ba141145c0386883674b17f13be2
# Remove this line to create a well-formed Fossil manifest.

View File

@@ -1 +1 @@
e534af8a78f5458bd656f70eb9f68084c0ed3f97360f5a033fba3564849e970c
305ae331f5e791941c12b04b727656ac8d80f7c5cb6343277b979a456eb3b834

View File

@@ -2779,6 +2779,7 @@ static void generateWithRecursiveQuery(
/* Store the results of the setup-query in Queue. */
pSetup = pFirstRec->pPrior;
pSetup->pNext = 0;
pSetup->selFlags |= SF_NoMerge;
ExplainQueryPlan((pParse, 1, "SETUP"));
rc = sqlite3Select(pParse, pSetup, &destQueue);
pSetup->pNext = p;
@@ -2983,7 +2984,7 @@ static int multiSelect(
*/
if( p->pOrderBy ){
return multiSelectOrderBy(pParse, p, pDest);
}else if( p->op!=TK_ALL && (p->selFlags & SF_NoopOrderBy)==0 ){
}else if( p->op!=TK_ALL && (p->selFlags & SF_NoMerge)==0 ){
Expr *pOne = sqlite3ExprInt32(db, 1);
p->pOrderBy = sqlite3ExprListAppend(pParse, 0, pOne);
if( pParse->nErr ) goto multi_select_end;
@@ -2998,7 +2999,7 @@ static int multiSelect(
ExplainQueryPlan((pParse, 1, "LEFT-MOST SUBQUERY"));
}
#endif
pPrior->selFlags |= SF_NoopOrderBy;
pPrior->selFlags |= SF_NoMerge;
/* Generate code for the left and right SELECT statements.
*/
@@ -7759,7 +7760,7 @@ int sqlite3Select(
p->pOrderBy = 0;
}
p->selFlags &= ~(u32)SF_Distinct;
p->selFlags |= SF_NoopOrderBy;
p->selFlags |= SF_NoopOrderBy|SF_NoMerge;
}
sqlite3SelectPrep(pParse, p, 0);
if( pParse->nErr ){

View File

@@ -3647,7 +3647,7 @@ struct Select {
#define SF_MinMaxAgg 0x0001000 /* Aggregate containing min() or max() */
#define SF_Recursive 0x0002000 /* The recursive part of a recursive CTE */
#define SF_FixedLimit 0x0004000 /* nSelectRow set by a constant LIMIT */
#define SF_MaybeConvert 0x0008000 /* Need convertCompoundSelectToSubquery() */
#define SF_NoMerge 0x0008000 /* Don't use merge to compute compounds */
#define SF_Converted 0x0010000 /* By convertCompoundSelectToSubquery() */
#define SF_IncludeHidden 0x0020000 /* Include hidden columns in output */
#define SF_ComplexResult 0x0040000 /* Result contains subquery or function */

View File

@@ -122,9 +122,9 @@ do_test collate5-2.0 {
} {}
do_test collate5-2.1.1 {
execsql {
string toupper [execsql {
SELECT a FROM collate5t1 UNION select a FROM collate5t2;
}
}]
} {A B N}
do_test collate5-2.1.2 {
execsql {
@@ -132,10 +132,10 @@ do_test collate5-2.1.2 {
}
} {A B N a b n}
do_test collate5-2.1.3 {
execsql {
string tolower [execsql {
SELECT a, b FROM collate5t1 UNION select a, b FROM collate5t2;
}
} {A Apple A apple B Banana b banana N {}}
}]
} {a apple a apple b banana b banana n {}}
do_test collate5-2.1.4 {
execsql {
SELECT a, b FROM collate5t2 UNION select a, b FROM collate5t1;
@@ -143,9 +143,9 @@ do_test collate5-2.1.4 {
} {A Apple B banana N {} a apple b banana n {}}
do_test collate5-2.2.1 {
execsql {
string toupper [execsql {
SELECT a FROM collate5t1 EXCEPT select a FROM collate5t2;
}
}]
} {N}
do_test collate5-2.2.2 {
execsql {
@@ -153,10 +153,10 @@ do_test collate5-2.2.2 {
}
} {A a}
do_test collate5-2.2.3 {
execsql {
string tolower [execsql {
SELECT a, b FROM collate5t1 EXCEPT select a, b FROM collate5t2;
}
} {A Apple N {}}
}]
} {a apple n {}}
do_test collate5-2.2.4 {
execsql {
SELECT a, b FROM collate5t2 EXCEPT select a, b FROM collate5t1
@@ -165,9 +165,9 @@ do_test collate5-2.2.4 {
} {A apple a apple}
do_test collate5-2.3.1 {
execsql {
string toupper [execsql {
SELECT a FROM collate5t1 INTERSECT select a FROM collate5t2;
}
}]
} {A B}
do_test collate5-2.3.2 {
execsql {
@@ -175,10 +175,10 @@ do_test collate5-2.3.2 {
}
} {B b}
do_test collate5-2.3.3 {
execsql {
string tolower [execsql {
SELECT a, b FROM collate5t1 INTERSECT select a, b FROM collate5t2;
}
} {a apple B banana}
}]
} {a apple b banana}
do_test collate5-2.3.4 {
execsql {
SELECT a, b FROM collate5t2 INTERSECT select a, b FROM collate5t1;

View File

@@ -311,7 +311,7 @@ do_execsql_test 4010 {
}
do_execsql_test 4020 {
SELECT b FROM t1 UNION SELECT 1;
} {1 { }}
} {1 {}}
#-------------------------------------------------------------------------
#

View File

@@ -124,10 +124,10 @@ do_eqp_test 1.8 {
} {
QUERY PLAN
|--CO-ROUTINE (subquery-xxxxxx)
| `--COMPOUND QUERY
| |--LEFT-MOST SUBQUERY
| `--MERGE (UNION)
| |--LEFT
| | `--SCAN CONSTANT ROW
| `--UNION USING TEMP B-TREE
| `--RIGHT
| `--SCAN CONSTANT ROW
|--SCAN (subquery-xxxxxx)
`--SCAN t3
@@ -137,24 +137,26 @@ do_eqp_test 1.9 {
} {
QUERY PLAN
|--CO-ROUTINE abc
| `--COMPOUND QUERY
| |--LEFT-MOST SUBQUERY
| `--MERGE (EXCEPT)
| |--LEFT
| | `--SCAN CONSTANT ROW
| `--EXCEPT USING TEMP B-TREE
| `--SCAN t3
|--SCAN abc
`--SCAN t3
| `--RIGHT
| |--SCAN t3
| `--USE TEMP B-TREE FOR ORDER BY
|--SCAN t3
`--SCAN abc
}
do_eqp_test 1.10 {
SELECT * FROM t3 JOIN (SELECT 1 INTERSECT SELECT a FROM t3 LIMIT 17) AS abc
} {
QUERY PLAN
|--CO-ROUTINE abc
| `--COMPOUND QUERY
| |--LEFT-MOST SUBQUERY
| `--MERGE (INTERSECT)
| |--LEFT
| | `--SCAN CONSTANT ROW
| `--INTERSECT USING TEMP B-TREE
| `--SCAN t3
| `--RIGHT
| |--SCAN t3
| `--USE TEMP B-TREE FOR ORDER BY
|--SCAN abc
`--SCAN t3
}
@@ -455,10 +457,11 @@ do_eqp_test 4.3.1 {
SELECT x FROM t1 UNION SELECT x FROM t2
} {
QUERY PLAN
`--COMPOUND QUERY
|--LEFT-MOST SUBQUERY
| `--SCAN t1
`--UNION USING TEMP B-TREE
`--MERGE (UNION)
|--LEFT
| |--SCAN t1
| `--USE TEMP B-TREE FOR ORDER BY
`--RIGHT
`--SCAN t2 USING COVERING INDEX t2i1
}
@@ -466,13 +469,17 @@ do_eqp_test 4.3.2 {
SELECT x FROM t1 UNION SELECT x FROM t2 UNION SELECT x FROM t1
} {
QUERY PLAN
`--COMPOUND QUERY
|--LEFT-MOST SUBQUERY
| `--SCAN t1
|--UNION USING TEMP B-TREE
| `--SCAN t2 USING COVERING INDEX t2i1
`--UNION USING TEMP B-TREE
`--SCAN t1
`--MERGE (UNION)
|--LEFT
| `--MERGE (UNION)
| |--LEFT
| | |--SCAN t1
| | `--USE TEMP B-TREE FOR ORDER BY
| `--RIGHT
| `--SCAN t2 USING COVERING INDEX t2i1
`--RIGHT
|--SCAN t1
`--USE TEMP B-TREE FOR ORDER BY
}
do_eqp_test 4.3.3 {
SELECT x FROM t1 UNION SELECT x FROM t2 UNION SELECT x FROM t1 ORDER BY 1

View File

@@ -190,6 +190,20 @@ do_execsql_test offset1-2.0 {
ORDER BY salary asc);
} {}
do_execsql_test offset1-2.1 {
SELECT * FROM v ORDER BY +id;
} {
11 Diane London hr 70
12 Bob London hr 78
21 Emma London it 84
22 Grace Berlin it 90
23 Henry London it 104
24 Irene Berlin it 104
25 Frank Berlin it 120
31 Cindy Berlin sales 96
32 Dave London sales 96
33 Alice Berlin sales 100
}
do_execsql_test offset1-2.2 {
SELECT * FROM v LIMIT 5 OFFSET 2;
} {
22 Grace Berlin it 90
@@ -198,5 +212,19 @@ do_execsql_test offset1-2.1 {
11 Diane London hr 70
33 Alice Berlin sales 100
}
do_execsql_test offset1-2.3 {
SELECT * FROM v LIMIT 3 OFFSET 6;
} {
33 Alice Berlin sales 100
23 Henry London it 104
24 Irene Berlin it 104
}
do_execsql_test offset1-2.4 {
SELECT * FROM v LIMIT 3 OFFSET 1;
} {
32 Dave London sales 96
22 Grace Berlin it 90
21 Emma London it 84
}
finish_test

View File

@@ -47,12 +47,12 @@ do_test tkt2339.2 {
}
} {4 3 14 13}
do_test tkt2339.3 {
execsql {
lsort -integer [execsql {
SELECT * FROM (SELECT * FROM t1 ORDER BY num DESC)
UNION ALL
SELECT * FROM (SELECT * FROM t2 ORDER BY num DESC LIMIT 2)
}
} {4 3 2 1 14 13}
}]
} {1 2 3 4 13 14}
do_test tkt2339.4 {
execsql {
SELECT * FROM (SELECT * FROM t1 ORDER BY num DESC LIMIT 2)