mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-05 15:55:57 +03:00
Remove unused parameter from sqlite3CodeRowTrigger(). Fix header comments for this function and CodeRowTriggerDirect().
FossilOrigin-Name: 0443f7c9112ca91aa45c78a3d6287e5fcf5c3b73
This commit is contained in:
@@ -915,11 +915,17 @@ static TriggerPrg *getRowTrigger(
|
||||
return pPrg;
|
||||
}
|
||||
|
||||
/*
|
||||
** Generate code for the trigger program associated with trigger p on
|
||||
** table pTab. The reg, orconf and ignoreJump parameters passed to this
|
||||
** function are the same as those described in the header function for
|
||||
** sqlite3CodeRowTrigger()
|
||||
*/
|
||||
void sqlite3CodeRowTriggerDirect(
|
||||
Parse *pParse, /* Parse context */
|
||||
Trigger *p, /* Trigger to code */
|
||||
Table *pTab, /* The table to code triggers from */
|
||||
int oldIdx, /* The indice of the "old" row to access */
|
||||
int reg, /* Reg array containing OLD.* and NEW.* values */
|
||||
int orconf, /* ON CONFLICT policy */
|
||||
int ignoreJump /* Instruction to jump to for RAISE(IGNORE) */
|
||||
){
|
||||
@@ -931,7 +937,7 @@ void sqlite3CodeRowTriggerDirect(
|
||||
/* Code the OP_Program opcode in the parent VDBE. P4 of the OP_Program
|
||||
** is a pointer to the sub-vdbe containing the trigger program. */
|
||||
if( pPrg ){
|
||||
sqlite3VdbeAddOp3(v, OP_Program, oldIdx, ignoreJump, ++pParse->nMem);
|
||||
sqlite3VdbeAddOp3(v, OP_Program, reg, ignoreJump, ++pParse->nMem);
|
||||
pPrg->pProgram->nRef++;
|
||||
sqlite3VdbeChangeP4(v, -1, (const char *)pPrg->pProgram, P4_SUBPROGRAM);
|
||||
VdbeComment(
|
||||
@@ -943,36 +949,48 @@ void sqlite3CodeRowTriggerDirect(
|
||||
** not a foreign key action, and (b) the flag to enable recursive triggers
|
||||
** is clear. */
|
||||
sqlite3VdbeChangeP5(v, p->zName && !(pParse->db->flags&SQLITE_RecTriggers));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** This is called to code FOR EACH ROW triggers.
|
||||
** This is called to code the required FOR EACH ROW triggers for an operation
|
||||
** on table pTab. The operation to code triggers for (INSERT, UPDATE or DELETE)
|
||||
** is given by the op paramater. The tr_tm parameter determines whether the
|
||||
** BEFORE or AFTER triggers are coded. If the operation is an UPDATE, then
|
||||
** parameter pChanges is passed the list of columns being modified.
|
||||
**
|
||||
** When the code that this function generates is executed, the following
|
||||
** must be true:
|
||||
** If there are no triggers that fire at the specified time for the specified
|
||||
** operation on pTab, this function is a no-op.
|
||||
**
|
||||
** 1. No cursors may be open in the main database. (But newIdx and oldIdx
|
||||
** can be indices of cursors in temporary tables. See below.)
|
||||
** The reg argument is the address of the first in an array of registers
|
||||
** that contain the values substituted for the new.* and old.* references
|
||||
** in the trigger program. If N is the number of columns in table pTab
|
||||
** (a copy of pTab->nCol), then registers are populated as follows:
|
||||
**
|
||||
** 2. If the triggers being coded are ON INSERT or ON UPDATE triggers, then
|
||||
** a temporary vdbe cursor (index newIdx) must be open and pointing at
|
||||
** a row containing values to be substituted for new.* expressions in the
|
||||
** trigger program(s).
|
||||
** Register Contains
|
||||
** ------------------------------------------------------
|
||||
** reg+0 OLD.rowid
|
||||
** reg+1 OLD.* value of left-most column of pTab
|
||||
** ... ...
|
||||
** reg+N OLD.* value of right-most column of pTab
|
||||
** reg+N+1 NEW.rowid
|
||||
** reg+N+2 OLD.* value of left-most column of pTab
|
||||
** ... ...
|
||||
** reg+N+N+1 NEW.* value of right-most column of pTab
|
||||
**
|
||||
** 3. If the triggers being coded are ON DELETE or ON UPDATE triggers, then
|
||||
** a temporary vdbe cursor (index oldIdx) must be open and pointing at
|
||||
** a row containing values to be substituted for old.* expressions in the
|
||||
** trigger program(s).
|
||||
**
|
||||
** If they are not NULL, the piOldColMask and piNewColMask output variables
|
||||
** are set to values that describe the columns used by the trigger program
|
||||
** in the OLD.* and NEW.* tables respectively. If column N of the
|
||||
** pseudo-table is read at least once, the corresponding bit of the output
|
||||
** mask is set. If a column with an index greater than 32 is read, the
|
||||
** output mask is set to the special value 0xffffffff.
|
||||
** For ON DELETE triggers, the registers containing the NEW.* values will
|
||||
** never be accessed by the trigger program, so they are not allocated or
|
||||
** populated by the caller (there is no data to populate them with anyway).
|
||||
** Similarly, for ON INSERT triggers the values stored in the OLD.* registers
|
||||
** are never accessed, and so are not allocated by the caller. So, for an
|
||||
** ON INSERT trigger, the value passed to this function as parameter reg
|
||||
** is not a readable register, although registers (reg+N) through
|
||||
** (reg+N+N+1) are.
|
||||
**
|
||||
** Parameter orconf is the default conflict resolution algorithm for the
|
||||
** trigger program to use (REPLACE, IGNORE etc.). Parameter ignoreJump
|
||||
** is the instruction that control should jump to if a trigger program
|
||||
** raises an IGNORE exception.
|
||||
*/
|
||||
void sqlite3CodeRowTrigger(
|
||||
Parse *pParse, /* Parse context */
|
||||
@@ -981,17 +999,15 @@ void sqlite3CodeRowTrigger(
|
||||
ExprList *pChanges, /* Changes list for any UPDATE OF triggers */
|
||||
int tr_tm, /* One of TRIGGER_BEFORE, TRIGGER_AFTER */
|
||||
Table *pTab, /* The table to code triggers from */
|
||||
int newIdx, /* The indice of the "new" row to access */
|
||||
int oldIdx, /* The indice of the "old" row to access */
|
||||
int reg, /* The first in an array of registers (see above) */
|
||||
int orconf, /* ON CONFLICT policy */
|
||||
int ignoreJump /* Instruction to jump to for RAISE(IGNORE) */
|
||||
){
|
||||
Trigger *p;
|
||||
Trigger *p; /* Used to iterate through pTrigger list */
|
||||
|
||||
UNUSED_PARAMETER(newIdx);
|
||||
|
||||
assert(op == TK_UPDATE || op == TK_INSERT || op == TK_DELETE);
|
||||
assert(tr_tm == TRIGGER_BEFORE || tr_tm == TRIGGER_AFTER );
|
||||
assert( op==TK_UPDATE || op==TK_INSERT || op==TK_DELETE );
|
||||
assert( tr_tm==TRIGGER_BEFORE || tr_tm==TRIGGER_AFTER );
|
||||
assert( (op==TK_UPDATE)==(pChanges!=0) );
|
||||
|
||||
for(p=pTrigger; p; p=p->pNext){
|
||||
|
||||
@@ -1006,9 +1022,9 @@ void sqlite3CodeRowTrigger(
|
||||
/* Determine whether we should code this trigger */
|
||||
if( p->op==op
|
||||
&& p->tr_tm==tr_tm
|
||||
&& checkColumnOverlap(p->pColumns,pChanges)
|
||||
&& checkColumnOverlap(p->pColumns, pChanges)
|
||||
){
|
||||
sqlite3CodeRowTriggerDirect(pParse, p, pTab, oldIdx, orconf, ignoreJump);
|
||||
sqlite3CodeRowTriggerDirect(pParse, p, pTab, reg, orconf, ignoreJump);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user