From: drh <> Date: Wed, 19 May 2021 21:55:56 +0000 (+0000) Subject: When constructing the synthensized SELECT statement that is used to choose X-Git-Tag: version-3.36.0~84 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1168f810929ede4d8d323a6acf721ff9cd89de90;p=thirdparty%2Fsqlite.git When constructing the synthensized SELECT statement that is used to choose the rows in an UPDATE FROM, make sure the first table is really the table being updated, and not some common-table expression that happens to have the same name. [forum:/forumpost/a274248080|forum post a274248080]. More changes associated with CTE name resolution are pending. FossilOrigin-Name: 0f0959c6f95046e8e7887716e0a7de95da18d1e926ab1f919527083a56541db5 --- diff --git a/manifest b/manifest index cf9dcdfb71..c85abefeec 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sa\scomment\swith\suseful\sinformation\sabout\sSHM\slocking.\s\sNo\schanges\sto\ndeliverable\scode. -D 2021-05-19T19:28:48.372 +C When\sconstructing\sthe\ssynthensized\sSELECT\sstatement\sthat\sis\sused\sto\schoose\nthe\srows\sin\san\sUPDATE\sFROM,\smake\ssure\sthe\sfirst\stable\sis\sreally\sthe\stable\nbeing\supdated,\sand\snot\ssome\scommon-table\sexpression\sthat\shappens\sto\shave\sthe\nsame\sname.\s\s[forum:/forumpost/a274248080|forum\spost\sa274248080].\s\sMore\nchanges\sassociated\swith\sCTE\sname\sresolution\sare\spending. +D 2021-05-19T21:55:56.327 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -487,7 +487,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 F src/btree.c 51ba86095316fceb3e25bc61617d673d84627e79f4ace83f8722910f33eedef3 F src/btree.h 096cc53baa58be22b02c896d1cf933c38cfc6d65f9253c1367ece8cc88a24de5 F src/btreeInt.h 7bc15a24a02662409ebcd6aeaa1065522d14b7fda71573a2b0568b458f514ae0 -F src/build.c 4e13b92f77d3f6dc1285c3636a2ba7c6af5cbb793e52075a762fbcebcd36e968 +F src/build.c 65b87a05331914cf90bde90ae3d4797c0a18642bd13bb4ea1553a6238fd771ec F src/callback.c d0b853dd413255d2e337b34545e54d888ea02f20da5ad0e63585b389624c4a6c F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 2a322b9a3d75771fb4d99e0702851f4f68dda982507a0f798eefb0712969a410 @@ -610,7 +610,7 @@ F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c F src/tokenize.c bae853ad129d1129c063de8630a3e99e306283bc40146f359b1bb91be2c08f1e F src/treeview.c e483aeedf6f207000db1f90eb6abd816350493314c30e8749d319bdb9ab3b08c F src/trigger.c e0fd347b2571a2d956318cdc6d011ccca7ce862d10a0ca04188a37920ef5440c -F src/update.c b3abdaf4a314bbed238da69a6ca54c0f21262119389b412ee5778fffe62dd3cc +F src/update.c 5902d1830e99fcc6d1d03f9bf93ec08b7830cc7569e0e75b4a2ba7849e8261ba F src/upsert.c df8f1727d62b5987c4fd302cd4d7c0c84ae57cd65683c5a34a740dfe24039235 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0 F src/util.c 41c7a72da1df47864faa378a1c720b38adb288c6838cb6be5594511b6287a048 @@ -1913,7 +1913,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 3daab94977af5e8a95690acc555540311403d890a3261a9757c633fcaaf428a9 6f2fb60e499fc758bea6ffec030fef8ab5f97d08d31450f0b3ffafc20e652891 -R 51a5c10eeb74e980a28bc317ddd05223 +P 4e81ea3b15fb3fce5f31b77273639e748a735ab0970620e564e9a5c977b24a1a +R 2b48977b646d45167b0995ab8c8e71a0 U drh -Z b7fe08aae0b2fc89ef00be04a5d5c5af +Z f25d248421de35ee2c36028d331f7af7 diff --git a/manifest.uuid b/manifest.uuid index ad72fd93f7..c93104f1c8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4e81ea3b15fb3fce5f31b77273639e748a735ab0970620e564e9a5c977b24a1a \ No newline at end of file +0f0959c6f95046e8e7887716e0a7de95da18d1e926ab1f919527083a56541db5 \ No newline at end of file diff --git a/src/build.c b/src/build.c index 25954b4d44..cf952ce091 100644 --- a/src/build.c +++ b/src/build.c @@ -492,7 +492,7 @@ Table *sqlite3LocateTableItem( SrcItem *p ){ const char *zDb; - assert( p->pSchema==0 || p->zDatabase==0 ); + /* assert( p->pSchema==0 || p->zDatabase==0 ); FIX-ME */ if( p->pSchema ){ int iDb = sqlite3SchemaToIndex(pParse->db, p->pSchema); zDb = pParse->db->aDb[iDb].zDbSName; diff --git a/src/update.c b/src/update.c index 6751bba016..a72c02a52f 100644 --- a/src/update.c +++ b/src/update.c @@ -220,6 +220,10 @@ static void updateFromSelect( assert( pTabList->nSrc>1 ); if( pSrc ){ + if( pSrc->a[0].zDatabase==0 ){ + int iSchema = sqlite3SchemaToIndex(db, pTab->pSchema); + pSrc->a[0].zDatabase = sqlite3DbStrDup(db, db->aDb[iSchema].zDbSName); + } pSrc->a[0].iCursor = -1; pSrc->a[0].pTab->nTabRef--; pSrc->a[0].pTab = 0;