1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-10 01:02:56 +03:00

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
This commit is contained in:
drh
2021-05-19 21:55:56 +00:00
parent 1f4f7c7a41
commit 1168f81092
4 changed files with 13 additions and 9 deletions

View File

@@ -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

View File

@@ -1 +1 @@
4e81ea3b15fb3fce5f31b77273639e748a735ab0970620e564e9a5c977b24a1a
0f0959c6f95046e8e7887716e0a7de95da18d1e926ab1f919527083a56541db5

View File

@@ -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;

View File

@@ -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;