aboutsummaryrefslogtreecommitdiff
path: root/src/expr.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2019-08-26 14:18:28 +0000
committerdrh <drh@noemail.net>2019-08-26 14:18:28 +0000
commit554a9dc78ab23f3831dd689fe33fb87f2d60626d (patch)
treef1237145f8b8c4332a8b1a3b5fb2909e98c1c2b6 /src/expr.c
parentd86fe44ab5a442a065935cb8b11a138b238dcf4b (diff)
downloadsqlite-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.c8
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);