1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-11 01:42:22 +03:00

Avoid spurious "no such table" errors in statements of the form "INSERT INTO tbl WITH xxx AS (...) SELECT * FROM xxx".

FossilOrigin-Name: cccff8a0b427feb05cc8952a765b829e731394fd
This commit is contained in:
dan
2014-01-18 08:27:02 +00:00
parent 7c82932723
commit ebbf08a012
4 changed files with 50 additions and 10 deletions

View File

@@ -667,8 +667,7 @@ void sqlite3Insert(
**
** This is the 2nd template.
*/
if( pColumn==0 && pParse->pWith==0
&& xferOptimization(pParse, pTab, pSelect, onError, iDb) ){
if( pColumn==0 && xferOptimization(pParse, pTab, pSelect, onError, iDb) ){
assert( !pTrigger );
assert( pList==0 );
goto insert_end;
@@ -1859,6 +1858,12 @@ static int xferOptimization(
if( pSelect==0 ){
return 0; /* Must be of the form INSERT INTO ... SELECT ... */
}
if( pParse->pWith || pSelect->pWith ){
/* Do not attempt to process this query if there are an WITH clauses
** attached to it. Proceeding may generate a false "no such table: xxx"
** error if pSelect reads from a CTE named "xxx". */
return 0;
}
if( sqlite3TriggerList(pParse, pDest) ){
return 0; /* tab1 must not have triggers */
}