diff options
author | drh <drh@noemail.net> | 2019-08-26 14:18:28 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2019-08-26 14:18:28 +0000 |
commit | 554a9dc78ab23f3831dd689fe33fb87f2d60626d (patch) | |
tree | f1237145f8b8c4332a8b1a3b5fb2909e98c1c2b6 /src/expr.c | |
parent | d86fe44ab5a442a065935cb8b11a138b238dcf4b (diff) | |
download | sqlite-554a9dc78ab23f3831dd689fe33fb87f2d60626d.tar.gz sqlite-554a9dc78ab23f3831dd689fe33fb87f2d60626d.zip |
Improved detection of number of column mismatch for vector assignment
in UPDATE statements. Ticket [78acc9d40f0786e8]
FossilOrigin-Name: bd4bda73df3794eef424eb13e08fc7cc54347d1ac69febaeec41f6b6cb4a42bc
Diffstat (limited to 'src/expr.c')
-rw-r--r-- | src/expr.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/expr.c b/src/expr.c index 6cb2e0c34..aac706644 100644 --- a/src/expr.c +++ b/src/expr.c @@ -1632,6 +1632,10 @@ ExprList *sqlite3ExprListAppendVector( for(i=0; i<pColumns->nId; i++){ Expr *pSubExpr = sqlite3ExprForVectorField(pParse, pExpr, i); + assert( pSubExpr!=0 || db->mallocFailed ); + assert( pSubExpr==0 || pSubExpr->iTable==0 ); + if( pSubExpr==0 ) continue; + pSubExpr->iTable = pColumns->nId; pList = sqlite3ExprListAppend(pParse, pList, pSubExpr); if( pList ){ assert( pList->nExpr==iFirst+i+1 ); @@ -3906,8 +3910,8 @@ expr_code_doover: pExpr->pLeft->iTable = sqlite3CodeSubselect(pParse, pExpr->pLeft); } assert( pExpr->iTable==0 || pExpr->pLeft->op==TK_SELECT ); - if( pExpr->iTable - && pExpr->iTable!=(n = sqlite3ExprVectorSize(pExpr->pLeft)) + if( pExpr->iTable!=0 + && pExpr->iTable!=(n = sqlite3ExprVectorSize(pExpr->pLeft)) ){ sqlite3ErrorMsg(pParse, "%d columns assigned %d values", pExpr->iTable, n); |