diff options
Diffstat (limited to 'ext/sqlite/libsqlite/src/where.c')
-rw-r--r-- | ext/sqlite/libsqlite/src/where.c | 26 |
1 files changed, 10 insertions, 16 deletions
diff --git a/ext/sqlite/libsqlite/src/where.c b/ext/sqlite/libsqlite/src/where.c index 11358e413c..a3a31a2e84 100644 --- a/ext/sqlite/libsqlite/src/where.c +++ b/ext/sqlite/libsqlite/src/where.c @@ -380,11 +380,8 @@ WhereInfo *sqliteWhereBegin( memset(aExpr, 0, sizeof(aExpr)); nExpr = exprSplit(ARRAYSIZE(aExpr), aExpr, pWhere); if( nExpr==ARRAYSIZE(aExpr) ){ - char zBuf[50]; - sprintf(zBuf, "%d", (int)ARRAYSIZE(aExpr)-1); - sqliteSetString(&pParse->zErrMsg, "WHERE clause too complex - no more " - "than ", zBuf, " terms allowed", (char*)0); - pParse->nErr++; + sqliteErrorMsg(pParse, "WHERE clause too complex - no more " + "than %d terms allowed", (int)ARRAYSIZE(aExpr)-1); return 0; } @@ -672,18 +669,17 @@ WhereInfo *sqliteWhereBegin( */ for(i=0; i<pTabList->nSrc; i++){ Table *pTab; + Index *pIx; pTab = pTabList->a[i].pTab; if( pTab->isTransient || pTab->pSelect ) continue; sqliteVdbeAddOp(v, OP_Integer, pTab->iDb, 0); - sqliteVdbeAddOp(v, OP_OpenRead, pTabList->a[i].iCursor, pTab->tnum); - sqliteVdbeChangeP3(v, -1, pTab->zName, P3_STATIC); + sqliteVdbeOp3(v, OP_OpenRead, pTabList->a[i].iCursor, pTab->tnum, + pTab->zName, P3_STATIC); sqliteCodeVerifySchema(pParse, pTab->iDb); - if( pWInfo->a[i].pIdx!=0 ){ - sqliteVdbeAddOp(v, OP_Integer, pWInfo->a[i].pIdx->iDb, 0); - sqliteVdbeAddOp(v, OP_OpenRead, - pWInfo->a[i].iCur, pWInfo->a[i].pIdx->tnum); - sqliteVdbeChangeP3(v, -1, pWInfo->a[i].pIdx->zName, P3_STATIC); + if( (pIx = pWInfo->a[i].pIdx)!=0 ){ + sqliteVdbeAddOp(v, OP_Integer, pIx->iDb, 0); + sqliteVdbeOp3(v, OP_OpenRead, pWInfo->a[i].iCur, pIx->tnum, pIx->zName,0); } } @@ -855,10 +851,8 @@ WhereInfo *sqliteWhereBegin( }else{ sqliteExprCode(pParse, aExpr[k].p->pLeft); } - sqliteVdbeAddOp(v, OP_IsNumeric, 1, brk); - if( aExpr[k].p->op==TK_LT || aExpr[k].p->op==TK_GT ){ - sqliteVdbeAddOp(v, OP_AddImm, 1, 0); - } + sqliteVdbeAddOp(v, OP_ForceInt, + aExpr[k].p->op==TK_LT || aExpr[k].p->op==TK_GT, brk); sqliteVdbeAddOp(v, OP_MoveTo, iCur, brk); aExpr[k].p = 0; }else{ |