]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Be more aggressive about using a sort-and-merge to compute the UNION of
authordrh <>
Mon, 19 Jan 2026 19:51:03 +0000 (19:51 +0000)
committerdrh <>
Mon, 19 Jan 2026 19:51:03 +0000 (19:51 +0000)
two SELECT statements.  Experimental branch.  This check-in is failing some
tests.

FossilOrigin-Name: e534af8a78f5458bd656f70eb9f68084c0ed3f97360f5a033fba3564849e970c

manifest
manifest.tags
manifest.uuid
src/select.c

index 4b8a365f59669f0f5614e991fa3daa6c1f668598..2abbce762e03aeeb6e67e47772cd48dbef44f18b 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\stwo\snew\sJSON\sfunctions:\sjson_array_insert()\sand\sjsonb_array_insert().\nPatterned\safter\sthe\sjson_array_insert()\sfunction\sof\sMySQL.\n[forum:/forumpost/2026-01-17T10:40:39z|Forum\sthread\s2026-01-17T10:40:39z].
-D 2026-01-19T11:44:59.928
+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
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -738,7 +738,7 @@ F src/printf.c b1b29b5e58e1530d5daeee5963d3c318d8ab2d7e38437580e28755753e0c1ded
 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
 F src/resolve.c 47aa7fdc9ec4c19b103ac5e79d7887d30119b5675309facf5eed1118391c868b
 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
-F src/select.c 4d45a04431db072040d6625ee21c1dc483c9b2b64a5ab419f4a4e05aabed1204
+F src/select.c c2c07615ec16f7040228ba80115c00c7c8639b1ac9a0a99e28f97af5ebe4300b
 F src/shell.c.in 3bc4c6aa962bdf950dc144c2138eb4bc734bf7e305f2ac42dbda5a83c4a4c660
 F src/sqlite.h.in 476f3efeb5dd26ad94dcbce262ca7eb9d042d797a92d624059c67ef37d5b3ab4
 F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
@@ -2193,9 +2193,11 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P f8f89d2e10f06b54acf58a3b0543aef749c3d2b65670d4cc71530dea7997651e 96b7d2c60a3f8a9f9d69313bad599a3a5ad335cb382263e4254e2d20929d5e55
-R 767eeb44449b6ebf81d3929fe2071be1
-T +closed 96b7d2c60a3f8a9f9d69313bad599a3a5ad335cb382263e4254e2d20929d5e55
+P c1e55132410a80d37bad30e4ddecc7a98fad92a68b436880324998af1cee37ae
+R 14b52d7d0f8047724839557171235a7f
+T *branch * union-by-merge
+T *sym-union-by-merge *
+T -sym-trunk *
 U drh
-Z 7f5ed360d76676550283f8041ff9aae7
+Z f2ba17780829856e94c58b16fe623059
 # Remove this line to create a well-formed Fossil manifest.
index bec971799ff1b8ee641c166c7aeb22d12c785393..d0a5d234e79732967eebf149ae3b4aacbad72bfa 100644 (file)
@@ -1,2 +1,2 @@
-branch trunk
-tag trunk
+branch union-by-merge
+tag union-by-merge
index 8c51781a4ebd6c00a9013a77bb51bccf49ec1960..47de41919669379d1f7f34f2d41590acb47062fd 100644 (file)
@@ -1 +1 @@
-c1e55132410a80d37bad30e4ddecc7a98fad92a68b436880324998af1cee37ae
+e534af8a78f5458bd656f70eb9f68084c0ed3f97360f5a033fba3564849e970c
index 8fff983901a6ff5c0f0e7fbc721f5738dff550e1..355ba957cf33ca9e24f756bf72ac12c80be93300 100644 (file)
@@ -2983,6 +2983,13 @@ static int multiSelect(
   */
   if( p->pOrderBy ){
     return multiSelectOrderBy(pParse, p, pDest);
+  }else if( p->op!=TK_ALL && (p->selFlags & SF_NoopOrderBy)==0 ){
+    Expr *pOne = sqlite3ExprInt32(db, 1);
+    p->pOrderBy = sqlite3ExprListAppend(pParse, 0, pOne);
+    if( pParse->nErr ) goto multi_select_end;
+    assert( p->pOrderBy!=0 );
+    p->pOrderBy->a[0].u.x.iOrderByCol = 1;
+    return multiSelectOrderBy(pParse, p, pDest);
   }else{
 
 #ifndef SQLITE_OMIT_EXPLAIN
@@ -2991,6 +2998,7 @@ static int multiSelect(
       ExplainQueryPlan((pParse, 1, "LEFT-MOST SUBQUERY"));
     }
 #endif
+    pPrior->selFlags |= SF_NoopOrderBy;
 
     /* Generate code for the left and right SELECT statements.
     */