From e076d6bc149f60dc0471a3aa2151124d00ee6e3c Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 16 Feb 2021 19:29:44 +0000 Subject: [PATCH] Remove unnecessarily complexity from sqlite3WithReleaseByParse(). Improved TreeView output for the enhanced CTE structures. This code still does not work 100%. I'm saving my place in order to (maybe) come back to it later. FossilOrigin-Name: 30bb18b45013bf2ac214863c97f64544511cae62029b9762c97cbb69ca658887 --- manifest | 17 +++++++---------- manifest.uuid | 2 +- src/build.c | 9 +++------ src/treeview.c | 11 +++++++++-- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/manifest b/manifest index 5908541c17..ad6ff01d05 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Trying\sto\sget\sthe\snew\sAS\sMATERIALIZE\ssyntax\sof\sCTEs\sto\swork.\s\sThere\sare\nstill\sperformance\sand\smemory\smanagement\sissues.\s\sThis\sis\sa\sWIP\scheck-in. -D 2021-02-16T16:32:07.810 +C Remove\sunnecessarily\scomplexity\sfrom\ssqlite3WithReleaseByParse().\s\sImproved\nTreeView\soutput\sfor\sthe\senhanced\sCTE\sstructures.\s\sThis\scode\sstill\sdoes\snot\nwork\s100%.\s\sI'm\ssaving\smy\splace\sin\sorder\sto\s(maybe)\scome\sback\sto\sit\slater. +D 2021-02-16T19:29:44.683 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -485,7 +485,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 F src/btree.c 694020ad8a3af3d79b09f74c8f1421272a419cdea42a13401e3b0f7dea6e9c3e F src/btree.h 285f8377aa1353185a32bf455faafa9ff9a0d40d074d60509534d14990c7829e F src/btreeInt.h 7614cae30f95b6aed0c7cac7718276a55cfe2c77058cbfd8bef5b75329757331 -F src/build.c 9d51da4a93227beb389ec6f6f97d4153ec59ffcbdf415f508de8fdf7ac48c0b9 +F src/build.c 224b8d5d6f206903dbcad3b365ce2c33b9e36456689be7ca593655cd3a649189 F src/callback.c d0b853dd413255d2e337b34545e54d888ea02f20da5ad0e63585b389624c4a6c F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 2a322b9a3d75771fb4d99e0702851f4f68dda982507a0f798eefb0712969a410 @@ -606,7 +606,7 @@ F src/test_window.c cdae419fdcea5bad6dcd9368c685abdad6deb59e9fc8b84b153de513d394 F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c F src/tokenize.c c64c49d7c2ec4490c2fef1f24350167ba16b03b0c6cee58ad1a1d70a4325d4e9 -F src/treeview.c 4b92992176fb2caefbe06ba5bd06e0e0ebcde3d5564758da672631f17aa51cda +F src/treeview.c 734a65babc2a0bb725a5af33cf3e677f7a8b20ad5be6dc04e07c2ff6081c16e6 F src/trigger.c 983c7c8464c46840dac1ffe0461a6c447ac12c965746975c108eb5f4283e8801 F src/update.c 0f5a61f0787199983530a33f6fffe4f52742f35fcdf6ccfad1078b1a8bc17723 F src/upsert.c df8f1727d62b5987c4fd302cd4d7c0c84ae57cd65683c5a34a740dfe24039235 @@ -1900,10 +1900,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 78dcddd9697d95629c18131ab0842aa4d08bc3c7451cd0e7a8d83e4dde277bda -R 3e33372448628596b79c8e4959bb7ced -T *branch * using-materialize -T *sym-using-materialize * -T -sym-with-generated-as * +P bf0fd9b23a77a8fc1be5f8f8f9f7dce62b924d2f4eecaf13f0b21cc58bfd3a61 +R e3228d2a0a1955d5b3e8f76b5179bb19 U drh -Z 4d1724c077b98d0e6366cdc6b7fd4796 +Z b496c3d5115f8ebebdee583ef890099a diff --git a/manifest.uuid b/manifest.uuid index a88a2b68de..b01838fa6f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bf0fd9b23a77a8fc1be5f8f8f9f7dce62b924d2f4eecaf13f0b21cc58bfd3a61 \ No newline at end of file +30bb18b45013bf2ac214863c97f64544511cae62029b9762c97cbb69ca658887 \ No newline at end of file diff --git a/src/build.c b/src/build.c index c888894d11..5ca9ff7632 100644 --- a/src/build.c +++ b/src/build.c @@ -5363,12 +5363,9 @@ void sqlite3WithReleaseBySelect(sqlite3 *db, With *pWith){ } void sqlite3WithReleaseByParse(sqlite3 *db, With *pWith){ if( pWith==0 ) return; - if( db && db->pnBytesFreed ){ - sqlite3WithDelete(db, pWith); - }else{ - pWith->mOwner &= ~WithOwnedByParse; - if( pWith->mOwner==0 ) sqlite3WithDelete(db, pWith); - } + assert( db==0 || db->pnBytesFreed==0 ); + pWith->mOwner &= ~WithOwnedByParse; + if( pWith->mOwner==0 ) sqlite3WithDelete(db, pWith); } /* diff --git a/src/treeview.c b/src/treeview.c index 187f1a07d1..a2c0e9b3b8 100644 --- a/src/treeview.c +++ b/src/treeview.c @@ -90,7 +90,8 @@ void sqlite3TreeViewWith(TreeView *pView, const With *pWith, u8 moreToFollow){ if( pWith==0 ) return; if( pWith->nCte==0 ) return; if( pWith->pOuter ){ - sqlite3TreeViewLine(pView, "WITH (0x%p, pOuter=0x%p)",pWith,pWith->pOuter); + sqlite3TreeViewLine(pView, "WITH (0x%p, pOuter=0x%p)", + pWith,pWith->pOuter); }else{ sqlite3TreeViewLine(pView, "WITH (0x%p)", pWith); } @@ -101,7 +102,10 @@ void sqlite3TreeViewWith(TreeView *pView, const With *pWith, u8 moreToFollow){ char zLine[1000]; const struct Cte *pCte = &pWith->a[i]; sqlite3StrAccumInit(&x, 0, zLine, sizeof(zLine), 0); - sqlite3_str_appendf(&x, "%s", pCte->zName); + sqlite3_str_appendf(&x, "%s%s (0x%p, n=%d)", pCte->zName, + pCte->eMaterialize==Materialize_Any ? "" : + pCte->eMaterialize==Materialize_Yes ? " MATERIALIZED" : + " NOT MATERIALIZED", pCte, pCte->nRefCte); if( pCte->pCols && pCte->pCols->nExpr>0 ){ char cSep = '('; int j; @@ -150,6 +154,9 @@ void sqlite3TreeViewSrcList(TreeView *pView, const SrcList *pSrc){ if( pItem->fg.fromDDL ){ sqlite3_str_appendf(&x, " DDL"); } + if( pItem->fg.isCte && pItem->u2.pCteSrc ){ + sqlite3_str_appendf(&x, " CTE=0x%p", pItem->u2.pCteSrc); + } sqlite3StrAccumFinish(&x); sqlite3TreeViewItem(pView, zLine, inSrc-1); if( pItem->pSelect ){ -- 2.47.2