]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix the [/info/df1d6482f9e92daf|UNION ALL flattener optimization] so that it
authordrh <>
Mon, 26 Apr 2021 21:23:01 +0000 (21:23 +0000)
committerdrh <>
Mon, 26 Apr 2021 21:23:01 +0000 (21:23 +0000)
works better with recursive CTEs.
dbsqlfuzz 88ed5c66789fced139d148aed823cba7c0926dd7

FossilOrigin-Name: f80d7bb2c305c1dd4658767660b33259032c048a91f18c654a6bda7332c54a0c

manifest
manifest.uuid
src/select.c
test/unionall.test

index 96a18f995095a43105abec6db65ca43c0179ed6c..b88d6a87a5ae0579849d426e946e29444b649d38 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sALWAYS()\sto\sbranches\sthat\sare\sno\slonger\sreachable\sdue\sto\srecent\nenhancements.
-D 2021-04-26T21:00:51.168
+C Fix\sthe\s[/info/df1d6482f9e92daf|UNION\sALL\sflattener\soptimization]\sso\sthat\sit\nworks\sbetter\swith\srecursive\sCTEs.\ndbsqlfuzz\s88ed5c66789fced139d148aed823cba7c0926dd7
+D 2021-04-26T21:23:01.727
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -543,7 +543,7 @@ F src/printf.c 78fabb49b9ac9a12dd1c89d744abdc9b67fd3205e62967e158f78b965a29ec4b
 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
 F src/resolve.c c38bbb89d7ba7a8673ec4f59b63e0980eb859c39ff2acc5df8b3d0f2dcd33115
 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92
-F src/select.c bc08a79364ad2056b1b3b83142b1cc4eacabf850603166f3a72581d56c320d9c
+F src/select.c 57dbb27e0d0cb2438487c797365a4c17294d0df3c25c970ca87f123105f33ed0
 F src/shell.c.in 9320b476fde0f7c46700e5695b69b435f1e46843a1513cdd187ac426cdbee016
 F src/sqlite.h.in 372554fcd1e1ed25ba44a316e8abdaad712470b7dcfa185ece54f51b10fbde10
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
@@ -1645,7 +1645,7 @@ F test/tt3_vacuum.c 1753f45917699c9c1f66b64c717a717c9379f776
 F test/types.test bf816ce73c7dfcfe26b700c19f97ef4050d194ff
 F test/types2.test 1aeb81976841a91eef292723649b5c4fe3bc3cac
 F test/types3.test 99e009491a54f4dc02c06bdbc0c5eea56ae3e25a
-F test/unionall.test 369dac51f4e7b94442b054d3d7f2e6755cd6994274718228878e3bd47c425f6d
+F test/unionall.test fee6e6adebe5446938475432ae8b042835a286c7e2efdc1b186d2182dfb93ffb
 F test/unionall2.test 71e8fa08d5699d50dc9f9dc0c9799c2e7a6bb7931a330d369307a4df7f157fa1
 F test/unionallfault.test 652bfbb630e6c43135965dc1e8f0a9a791da83aec885d626a632fe1909c56f73
 F test/unionvtab.test e1704ab1b4c1bb3ffc9da4681f8e85a0b909fd80b937984fc94b27415ac8e5a4
@@ -1914,7 +1914,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P db032156932fb0dcae5ffb7cbdfb711079daa595713fcb254f09f8ef90c81d95
-R ffed239cd8e8956a4bed4ffe71f5ac2a
+P 63c50fbdeed831ba450d1dce67e968a7daa2b69ac1270eb271fb1e1873d4a07e
+R da5d0b0a21e7425e4176968ab9360867
 U drh
-Z 5f325b4c5576cc7e02232be8d2acb561
+Z 940b2dbbcc463a3babc791d1e318439e
index cb8994e4d3d688d64bf9a95a79fc02d03fa55ea8..652d27ecb1fdc776d2d23e0bcb34cffd5af09f47 100644 (file)
@@ -1 +1 @@
-63c50fbdeed831ba450d1dce67e968a7daa2b69ac1270eb271fb1e1873d4a07e
\ No newline at end of file
+f80d7bb2c305c1dd4658767660b33259032c048a91f18c654a6bda7332c54a0c
\ No newline at end of file
index 6a773202e07fbf2179c439eda656b8a6a93369f7..570c92b03a0a0a409498c08cbb68a620cd772bce 100644 (file)
@@ -3767,7 +3767,10 @@ static void srclistRenumberCursors(
   for(i=0, pItem=pSrc->a; i<pSrc->nSrc; i++, pItem++){
     if( i!=iExcept ){
       Select *p;
-      pItem->iCursor = aCsrMap[pItem->iCursor] = pParse->nTab++;
+      if( !pItem->fg.isRecursive || aCsrMap[pItem->iCursor]==0 ){
+        aCsrMap[pItem->iCursor] = pParse->nTab++;
+      }
+      pItem->iCursor = aCsrMap[pItem->iCursor];
       for(p=pItem->pSelect; p; p=p->pPrior){
         srclistRenumberCursors(pParse, aCsrMap, p->pSrc, -1);
       }
index 2f8027ccb7a1de00e19f79aa94eb077b56f770bc..7554a3b308ec81c99bb58f0ba6cf4a0e89162411 100644 (file)
@@ -355,4 +355,13 @@ do_execsql_test 6.1 {
   9 10 800 100      9 10 800 400
 }
 
+# 2021-04-26 dbsqlfuzz 88ed5c66789fced139d148aed823cba7c0926dd7
+reset_db
+do_execsql_test 7.1 {
+  WITH c1(x) AS (VALUES(0) UNION ALL SELECT 100+x FROM c1 WHERE x<100 UNION ALL SELECT 1+x FROM c1 WHERE x<1)
+  SELECT x, y, '|'
+    FROM c1 AS x1, (SELECT x+1 AS y FROM c1 WHERE x<1 UNION ALL SELECT 1+x FROM c1 WHERE 1<x) AS x2
+   ORDER BY x, y;
+} {0 1 | 0 101 | 0 102 | 1 1 | 1 101 | 1 102 | 100 1 | 100 101 | 100 102 | 101 1 | 101 101 | 101 102 |}
+
 finish_test