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

Disable the flattening optimization if the sub-query is a recursive CTE.

FossilOrigin-Name: 9472f6d820a7fb233936d9b8f7a39c9d4c4d6d73
This commit is contained in:
dan
2014-01-15 14:17:31 +00:00
parent f9db522fee
commit bfe31e7f80
6 changed files with 68 additions and 14 deletions

View File

@@ -895,7 +895,12 @@ static Expr *exprDup(sqlite3 *db, Expr *p, int flags, u8 **pzBuffer){
return pNew;
}
With *withDup(sqlite3 *db, With *p){
/*
** Create and return a deep copy of the object passed as the second
** argument. If an OOM condition is encountered, NULL is returned
** and the db->mallocFailed flag set.
*/
static With *withDup(sqlite3 *db, With *p){
With *pRet = 0;
if( p ){
int nByte = sizeof(*p) + sizeof(p->a[0]) * (p->nCte-1);
@@ -1055,7 +1060,8 @@ Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
pNew->addrOpenEphm[1] = -1;
pNew->addrOpenEphm[2] = -1;
pNew->pWith = withDup(db, p->pWith);
pNew->pRecurse = p->pRecurse;
assert( p->pRecurse==0 );
pNew->pRecurse = 0;
return pNew;
}
#else