]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Minor fixes. Tests are passing now.
authordrh <>
Tue, 20 Jan 2026 15:07:28 +0000 (15:07 +0000)
committerdrh <>
Tue, 20 Jan 2026 15:07:28 +0000 (15:07 +0000)
FossilOrigin-Name: 305ae331f5e791941c12b04b727656ac8d80f7c5cb6343277b979a456eb3b834

manifest
manifest.uuid
src/select.c
src/sqliteInt.h
test/collate5.test
test/distinct2.test
test/eqp.test
test/offset1.test
test/tkt2339.test

index 2abbce762e03aeeb6e67e47772cd48dbef44f18b..8fc284e9378666c077c37ea4c80f6272f97a1bb0 100644 (file)
--- a/manifest
+++ b/manifest
@@ -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.
index 47de41919669379d1f7f34f2d41590acb47062fd..63e12e7d4ed044324f10355ab781f2e43ad2d554 100644 (file)
@@ -1 +1 @@
-e534af8a78f5458bd656f70eb9f68084c0ed3f97360f5a033fba3564849e970c
+305ae331f5e791941c12b04b727656ac8d80f7c5cb6343277b979a456eb3b834
index 355ba957cf33ca9e24f756bf72ac12c80be93300..abd0fee8a50109fe4a40f98d66908f5f1accbe82 100644 (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 ){
index 185b36fd4ca35189713b82cbfcb41fae50f91da1..924925ff669380a51af8510eb41759776e87bdc9 100644 (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 */
index 71d4efe2559b0cb414b6990a8afeb9ac6f15cf03..b474c39d53f223d9ed6cbacc336fc24e1404e07e 100644 (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;
index 980b0b1e3a8ebd0edf1ff60f812783695af169ac..5de4d30940dca543012deff0128ac551a9195e05 100644 (file)
@@ -311,7 +311,7 @@ do_execsql_test 4010 {
 }
 do_execsql_test 4020 {
   SELECT b FROM t1 UNION SELECT 1;
-} {1 {  }}
+} {1 {}}
 
 #-------------------------------------------------------------------------
 #
index 147b5ceafe3612270ffcc12e0a2f820ef46ada21..d2bdc49e3b42a0a47b7a94fa4a235a4c7d13302c 100644 (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
index 5b04bd836c5db8970df565f440ca1e6f7cb81f64..fb68f0d029cc06957a35b9693bfc141742b3f812 100644 (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
index 41acd377ce64d9df855ccc75dd3fc9c22690dc75..4bbedb82884403738da5429570a2ec15d150e1a7 100644 (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)