diff options
author | dan <dan@noemail.net> | 2016-11-11 18:45:55 +0000 |
---|---|---|
committer | dan <dan@noemail.net> | 2016-11-11 18:45:55 +0000 |
commit | 04cd7aa373d0218a766aa24987a99d16bcdcbac2 (patch) | |
tree | f44e1af007c5bd8eb814cac3bec1bea0476ec781 /src/resolve.c | |
parent | 9af90b7231660b5c5670e41ad58c755d95d0fbaa (diff) | |
parent | 4a5bad572ae669f2c6da3299303840bf3852d5b3 (diff) | |
download | sqlite-04cd7aa373d0218a766aa24987a99d16bcdcbac2.tar.gz sqlite-04cd7aa373d0218a766aa24987a99d16bcdcbac2.zip |
Merge trunk with this branch.
FossilOrigin-Name: dd62d2de6eb12dc1902d6df050c395b1dcac01b4
Diffstat (limited to 'src/resolve.c')
-rw-r--r-- | src/resolve.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/resolve.c b/src/resolve.c index f464b657f..dac73e5fa 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -400,6 +400,10 @@ static int lookupName( sqlite3ErrorMsg(pParse, "misuse of aliased aggregate %s", zAs); return WRC_Abort; } + if( sqlite3ExprVectorSize(pOrig)!=1 ){ + sqlite3ErrorMsg(pParse, "row value misused"); + return WRC_Abort; + } resolveAlias(pParse, pEList, j, pExpr, "", nSubquery); cnt = 1; pMatch = 0; @@ -776,6 +780,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ notValid(pParse, pNC, "parameters", NC_IsCheck|NC_PartIdx|NC_IdxExpr); break; } + case TK_BETWEEN: case TK_EQ: case TK_NE: case TK_LT: @@ -786,10 +791,17 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ case TK_ISNOT: { int nLeft, nRight; if( pParse->db->mallocFailed ) break; - assert( pExpr->pRight!=0 ); assert( pExpr->pLeft!=0 ); nLeft = sqlite3ExprVectorSize(pExpr->pLeft); - nRight = sqlite3ExprVectorSize(pExpr->pRight); + if( pExpr->op==TK_BETWEEN ){ + nRight = sqlite3ExprVectorSize(pExpr->x.pList->a[0].pExpr); + if( nRight==nLeft ){ + nRight = sqlite3ExprVectorSize(pExpr->x.pList->a[1].pExpr); + } + }else{ + assert( pExpr->pRight!=0 ); + nRight = sqlite3ExprVectorSize(pExpr->pRight); + } if( nLeft!=nRight ){ testcase( pExpr->op==TK_EQ ); testcase( pExpr->op==TK_NE ); @@ -799,6 +811,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ testcase( pExpr->op==TK_GE ); testcase( pExpr->op==TK_IS ); testcase( pExpr->op==TK_ISNOT ); + testcase( pExpr->op==TK_BETWEEN ); sqlite3ErrorMsg(pParse, "row value misused"); } break; |