diff options
Diffstat (limited to 'src/delete.c')
-rw-r--r-- | src/delete.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/delete.c b/src/delete.c index f741b5a3a..fefa45431 100644 --- a/src/delete.c +++ b/src/delete.c @@ -12,7 +12,7 @@ ** This file contains C code routines that are called by the parser ** to handle DELETE FROM statements. ** -** $Id: delete.c,v 1.80 2004/09/06 17:24:13 drh Exp $ +** $Id: delete.c,v 1.81 2004/09/19 02:15:25 drh Exp $ */ #include "sqliteInt.h" @@ -50,6 +50,21 @@ int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){ } /* +** Generate code that will open a table for reading. +*/ +void sqlite3OpenTableForReading( + Vdbe *v, /* Generate code into this VDBE */ + int iCur, /* The cursor number of the table */ + Table *pTab /* The table to be opened */ +){ + sqlite3VdbeAddOp(v, OP_Integer, pTab->iDb, 0); + sqlite3VdbeAddOp(v, OP_OpenRead, iCur, pTab->tnum); + VdbeComment((v, "# %s", pTab->zName)); + sqlite3VdbeAddOp(v, OP_SetNumColumns, iCur, pTab->nCol); +} + + +/* ** Process a DELETE FROM statement. */ void sqlite3DeleteFrom( @@ -166,9 +181,7 @@ void sqlite3DeleteFrom( int endOfLoop = sqlite3VdbeMakeLabel(v); int addr; if( !isView ){ - sqlite3VdbeAddOp(v, OP_Integer, pTab->iDb, 0); - sqlite3VdbeAddOp(v, OP_OpenRead, iCur, pTab->tnum); - sqlite3VdbeAddOp(v, OP_SetNumColumns, iCur, pTab->nCol); + sqlite3OpenTableForReading(v, iCur, pTab); } sqlite3VdbeAddOp(v, OP_Rewind, iCur, sqlite3VdbeCurrentAddr(v)+2); addr = sqlite3VdbeAddOp(v, OP_AddImm, 1, 0); @@ -232,9 +245,7 @@ void sqlite3DeleteFrom( addr = sqlite3VdbeAddOp(v, OP_ListRead, 0, end); sqlite3VdbeAddOp(v, OP_Dup, 0, 0); if( !isView ){ - sqlite3VdbeAddOp(v, OP_Integer, pTab->iDb, 0); - sqlite3VdbeAddOp(v, OP_OpenRead, iCur, pTab->tnum); - sqlite3VdbeAddOp(v, OP_SetNumColumns, iCur, pTab->nCol); + sqlite3OpenTableForReading(v, iCur, pTab); } sqlite3VdbeAddOp(v, OP_MoveGe, iCur, 0); sqlite3VdbeAddOp(v, OP_Recno, iCur, 0); |