mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-07 02:42:48 +03:00
Remove unused parameter from sqlite3CodeRowTrigger(). Fix header comments for this function and CodeRowTriggerDirect().
FossilOrigin-Name: 0443f7c9112ca91aa45c78a3d6287e5fcf5c3b73
This commit is contained in:
32
manifest
32
manifest
@@ -1,8 +1,5 @@
|
|||||||
-----BEGIN PGP SIGNED MESSAGE-----
|
C Remove\sunused\sparameter\sfrom\ssqlite3CodeRowTrigger().\sFix\sheader\scomments\sfor\sthis\sfunction\sand\sCodeRowTriggerDirect().
|
||||||
Hash: SHA1
|
D 2009-09-24T09:05:50
|
||||||
|
|
||||||
C Make\ssure\sa\stransaction\sis\savailable\sfor\srollback\swhenever\sa\sREDUCE\sconflict\nresolution\soccurs\sand\sthere\sis\sthe\spossibility\sto\sABORT.\nTicket\s[4a03edc4c8c]
|
|
||||||
D 2009-09-24T00:09:58
|
|
||||||
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
|
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
|
||||||
F Makefile.in 4ca3f1dd6efa2075bcb27f4dc43eef749877740d
|
F Makefile.in 4ca3f1dd6efa2075bcb27f4dc43eef749877740d
|
||||||
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
|
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
|
||||||
@@ -116,7 +113,7 @@ F src/build.c c6c8d4ce8c0a464bb25d0c3bfdb27834ad16d902
|
|||||||
F src/callback.c 10d237171472865f58fb07d515737238c9e06688
|
F src/callback.c 10d237171472865f58fb07d515737238c9e06688
|
||||||
F src/complete.c 5ad5c6cd4548211867c204c41a126d73a9fbcea0
|
F src/complete.c 5ad5c6cd4548211867c204c41a126d73a9fbcea0
|
||||||
F src/date.c 657ff12ca0f1195b531561afacbb38b772d16638
|
F src/date.c 657ff12ca0f1195b531561afacbb38b772d16638
|
||||||
F src/delete.c 15499f5d10047d38e68ce991b3f88cbddb6e0931
|
F src/delete.c bf701123de11d3fcd9a1a5051a989a2571e936f7
|
||||||
F src/expr.c c7f3f718bd5c392344ec8694a41c1824f30cf375
|
F src/expr.c c7f3f718bd5c392344ec8694a41c1824f30cf375
|
||||||
F src/fault.c dc88c821842157460750d2d61a8a8b4197d047ff
|
F src/fault.c dc88c821842157460750d2d61a8a8b4197d047ff
|
||||||
F src/fkey.c a1c293cca23700bae7924396055c8d6a14f711c2
|
F src/fkey.c a1c293cca23700bae7924396055c8d6a14f711c2
|
||||||
@@ -125,7 +122,7 @@ F src/global.c 271952d199a8cc59d4ce840b3bbbfd2f30c8ba32
|
|||||||
F src/hash.c ebcaa921ffd9d86f7ea5ae16a0a29d1c871130a7
|
F src/hash.c ebcaa921ffd9d86f7ea5ae16a0a29d1c871130a7
|
||||||
F src/hash.h 35b216c13343d0b4f87d9f21969ac55ad72174e1
|
F src/hash.h 35b216c13343d0b4f87d9f21969ac55ad72174e1
|
||||||
F src/hwtime.h 4a1d45f4cae1f402ea19686acf24acf4f0cb53cb
|
F src/hwtime.h 4a1d45f4cae1f402ea19686acf24acf4f0cb53cb
|
||||||
F src/insert.c 3ff8f07ad36f5b3b2affb8e3fa99c24772b08fc4
|
F src/insert.c 6043444766653e6388dbd11ba370aacbc3c39ded
|
||||||
F src/journal.c e00df0c0da8413ab6e1bb7d7cab5665d4a9000d0
|
F src/journal.c e00df0c0da8413ab6e1bb7d7cab5665d4a9000d0
|
||||||
F src/legacy.c 303b4ffcf1ae652fcf5ef635846c563c254564f6
|
F src/legacy.c 303b4ffcf1ae652fcf5ef635846c563c254564f6
|
||||||
F src/lempar.c 0c4d1ab0a5ef2b0381eb81a732c54f68f27a574d
|
F src/lempar.c 0c4d1ab0a5ef2b0381eb81a732c54f68f27a574d
|
||||||
@@ -167,7 +164,7 @@ F src/select.c 1d0a13137532321b4364f964e46f057d271691e3
|
|||||||
F src/shell.c d6e64471aafb81f355262533393169a70529847a
|
F src/shell.c d6e64471aafb81f355262533393169a70529847a
|
||||||
F src/sqlite.h.in 5af8181f815831a8672c3834c60e6b4418448bcc
|
F src/sqlite.h.in 5af8181f815831a8672c3834c60e6b4418448bcc
|
||||||
F src/sqlite3ext.h 1db7d63ab5de4b3e6b83dd03d1a4e64fef6d2a17
|
F src/sqlite3ext.h 1db7d63ab5de4b3e6b83dd03d1a4e64fef6d2a17
|
||||||
F src/sqliteInt.h 6b1fef0ef9aa6bf22e846d96cd3927cf7f55057d
|
F src/sqliteInt.h f1ab717f3ea62629faca73bba9a229a96e6a6a5b
|
||||||
F src/sqliteLimit.h 504a3161886d2938cbd163054ad620b8356df758
|
F src/sqliteLimit.h 504a3161886d2938cbd163054ad620b8356df758
|
||||||
F src/status.c 237b193efae0cf6ac3f0817a208de6c6c6ef6d76
|
F src/status.c 237b193efae0cf6ac3f0817a208de6c6c6ef6d76
|
||||||
F src/table.c cc86ad3d6ad54df7c63a3e807b5783c90411a08d
|
F src/table.c cc86ad3d6ad54df7c63a3e807b5783c90411a08d
|
||||||
@@ -204,8 +201,8 @@ F src/test_tclvar.c 9e42fa59d3d2f064b7ab8628e7ab2dc8a9fe93d4
|
|||||||
F src/test_thread.c b8a1ab7ca1a632f18e8a361880d5d65eeea08eac
|
F src/test_thread.c b8a1ab7ca1a632f18e8a361880d5d65eeea08eac
|
||||||
F src/test_wsd.c 3ae5101de6cbfda2720152ab659ea84079719241
|
F src/test_wsd.c 3ae5101de6cbfda2720152ab659ea84079719241
|
||||||
F src/tokenize.c af8a56e6a50c5042fc305bfa796275e9bf26ff2b
|
F src/tokenize.c af8a56e6a50c5042fc305bfa796275e9bf26ff2b
|
||||||
F src/trigger.c c0d99c2529ab88535fc2856e7729cd05180b9636
|
F src/trigger.c d2f31617a1852f7365aca54c5c85743b9114d462
|
||||||
F src/update.c 4fac66ecaea13c9c13e7d3de8da66aae3cce90e2
|
F src/update.c 5df5c39dbe427d6cd5e87c78ae8c1b1d1cb5e304
|
||||||
F src/utf.c 99cf927eabb104621ba889ac0dd075fc1657ad30
|
F src/utf.c 99cf927eabb104621ba889ac0dd075fc1657ad30
|
||||||
F src/util.c 59d4e9456bf1fe581f415a783fa0cee6115c8f35
|
F src/util.c 59d4e9456bf1fe581f415a783fa0cee6115c8f35
|
||||||
F src/vacuum.c 869d08eaab64e2a4eaf4ef9ea34b851892b65a75
|
F src/vacuum.c 869d08eaab64e2a4eaf4ef9ea34b851892b65a75
|
||||||
@@ -758,14 +755,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
|
|||||||
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
||||||
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
||||||
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
||||||
P 2d544bd53d0fb9633aca40841529aec8e7df61f8
|
P f0c56fa90dc95aff6fe6764b5ab75a90199247b0
|
||||||
R 3842168b1b7758c2297668effb3e745f
|
R 3c7a8aab5d0340b30cd3467ee24fad54
|
||||||
U drh
|
U dan
|
||||||
Z 3a3c7d1ce176416e380730f2a219861d
|
Z 48453b478adafba355c75f89420399d3
|
||||||
-----BEGIN PGP SIGNATURE-----
|
|
||||||
Version: GnuPG v1.4.6 (GNU/Linux)
|
|
||||||
|
|
||||||
iD8DBQFKurjZoxKgR168RlERArl8AJ0WnGHXqijj8D2EisZs22gnQG5PdQCffs5H
|
|
||||||
7Kh3yhpsQRwB0Gtl6moTZKc=
|
|
||||||
=J9+X
|
|
||||||
-----END PGP SIGNATURE-----
|
|
||||||
|
@@ -1 +1 @@
|
|||||||
f0c56fa90dc95aff6fe6764b5ab75a90199247b0
|
0443f7c9112ca91aa45c78a3d6287e5fcf5c3b73
|
@@ -515,7 +515,7 @@ void sqlite3GenerateRowDelete(
|
|||||||
|
|
||||||
/* Invoke BEFORE DELETE trigger programs. */
|
/* Invoke BEFORE DELETE trigger programs. */
|
||||||
sqlite3CodeRowTrigger(pParse, pTrigger,
|
sqlite3CodeRowTrigger(pParse, pTrigger,
|
||||||
TK_DELETE, 0, TRIGGER_BEFORE, pTab, -1, iOld, onconf, iLabel
|
TK_DELETE, 0, TRIGGER_BEFORE, pTab, iOld, onconf, iLabel
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Seek the cursor to the row to be deleted again. It may be that
|
/* Seek the cursor to the row to be deleted again. It may be that
|
||||||
@@ -548,7 +548,7 @@ void sqlite3GenerateRowDelete(
|
|||||||
|
|
||||||
/* Invoke AFTER DELETE trigger programs. */
|
/* Invoke AFTER DELETE trigger programs. */
|
||||||
sqlite3CodeRowTrigger(pParse, pTrigger,
|
sqlite3CodeRowTrigger(pParse, pTrigger,
|
||||||
TK_DELETE, 0, TRIGGER_AFTER, pTab, -1, iOld, onconf, iLabel
|
TK_DELETE, 0, TRIGGER_AFTER, pTab, iOld, onconf, iLabel
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Jump here if the row had already been deleted before any BEFORE
|
/* Jump here if the row had already been deleted before any BEFORE
|
||||||
|
@@ -870,7 +870,7 @@ void sqlite3Insert(
|
|||||||
|
|
||||||
/* Fire BEFORE or INSTEAD OF triggers */
|
/* Fire BEFORE or INSTEAD OF triggers */
|
||||||
sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_BEFORE,
|
sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_BEFORE,
|
||||||
pTab, -1, regCols-pTab->nCol-1, onError, endOfLoop);
|
pTab, regCols-pTab->nCol-1, onError, endOfLoop);
|
||||||
|
|
||||||
sqlite3ReleaseTempRange(pParse, regCols, pTab->nCol+1);
|
sqlite3ReleaseTempRange(pParse, regCols, pTab->nCol+1);
|
||||||
}
|
}
|
||||||
@@ -995,7 +995,7 @@ void sqlite3Insert(
|
|||||||
if( pTrigger ){
|
if( pTrigger ){
|
||||||
/* Code AFTER triggers */
|
/* Code AFTER triggers */
|
||||||
sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_AFTER,
|
sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_AFTER,
|
||||||
pTab, -1, regData-2-pTab->nCol, onError, endOfLoop);
|
pTab, regData-2-pTab->nCol, onError, endOfLoop);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The bottom of the main insertion loop, if the data source
|
/* The bottom of the main insertion loop, if the data source
|
||||||
|
@@ -2700,7 +2700,7 @@ void sqlite3MaterializeView(Parse*, Table*, Expr*, int);
|
|||||||
Trigger *sqlite3TriggersExist(Parse *, Table*, int, ExprList*, int *pMask);
|
Trigger *sqlite3TriggersExist(Parse *, Table*, int, ExprList*, int *pMask);
|
||||||
Trigger *sqlite3TriggerList(Parse *, Table *);
|
Trigger *sqlite3TriggerList(Parse *, Table *);
|
||||||
void sqlite3CodeRowTrigger(Parse*, Trigger *, int, ExprList*, int, Table *,
|
void sqlite3CodeRowTrigger(Parse*, Trigger *, int, ExprList*, int, Table *,
|
||||||
int, int, int, int);
|
int, int, int);
|
||||||
void sqlite3CodeRowTriggerDirect(Parse *, Trigger *, Table *, int, int, int);
|
void sqlite3CodeRowTriggerDirect(Parse *, Trigger *, Table *, int, int, int);
|
||||||
void sqliteViewTriggers(Parse*, Table*, Expr*, int, ExprList*);
|
void sqliteViewTriggers(Parse*, Table*, Expr*, int, ExprList*);
|
||||||
void sqlite3DeleteTriggerStep(sqlite3*, TriggerStep*);
|
void sqlite3DeleteTriggerStep(sqlite3*, TriggerStep*);
|
||||||
@@ -2718,7 +2718,7 @@ void sqlite3MaterializeView(Parse*, Table*, Expr*, int);
|
|||||||
# define sqlite3DeleteTrigger(A,B)
|
# define sqlite3DeleteTrigger(A,B)
|
||||||
# define sqlite3DropTriggerPtr(A,B)
|
# define sqlite3DropTriggerPtr(A,B)
|
||||||
# define sqlite3UnlinkAndDeleteTrigger(A,B,C)
|
# define sqlite3UnlinkAndDeleteTrigger(A,B,C)
|
||||||
# define sqlite3CodeRowTrigger(A,B,C,D,E,F,G,H,I,J)
|
# define sqlite3CodeRowTrigger(A,B,C,D,E,F,G,H,I)
|
||||||
# define sqlite3CodeRowTriggerDirect(A,B,C,D,E,F)
|
# define sqlite3CodeRowTriggerDirect(A,B,C,D,E,F)
|
||||||
# define sqlite3TriggerList(X, Y) 0
|
# define sqlite3TriggerList(X, Y) 0
|
||||||
# define sqlite3ParseToplevel(p) p
|
# define sqlite3ParseToplevel(p) p
|
||||||
|
@@ -915,11 +915,17 @@ static TriggerPrg *getRowTrigger(
|
|||||||
return pPrg;
|
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(
|
void sqlite3CodeRowTriggerDirect(
|
||||||
Parse *pParse, /* Parse context */
|
Parse *pParse, /* Parse context */
|
||||||
Trigger *p, /* Trigger to code */
|
Trigger *p, /* Trigger to code */
|
||||||
Table *pTab, /* The table to code triggers from */
|
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 orconf, /* ON CONFLICT policy */
|
||||||
int ignoreJump /* Instruction to jump to for RAISE(IGNORE) */
|
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
|
/* 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. */
|
** is a pointer to the sub-vdbe containing the trigger program. */
|
||||||
if( pPrg ){
|
if( pPrg ){
|
||||||
sqlite3VdbeAddOp3(v, OP_Program, oldIdx, ignoreJump, ++pParse->nMem);
|
sqlite3VdbeAddOp3(v, OP_Program, reg, ignoreJump, ++pParse->nMem);
|
||||||
pPrg->pProgram->nRef++;
|
pPrg->pProgram->nRef++;
|
||||||
sqlite3VdbeChangeP4(v, -1, (const char *)pPrg->pProgram, P4_SUBPROGRAM);
|
sqlite3VdbeChangeP4(v, -1, (const char *)pPrg->pProgram, P4_SUBPROGRAM);
|
||||||
VdbeComment(
|
VdbeComment(
|
||||||
@@ -943,36 +949,48 @@ void sqlite3CodeRowTriggerDirect(
|
|||||||
** not a foreign key action, and (b) the flag to enable recursive triggers
|
** not a foreign key action, and (b) the flag to enable recursive triggers
|
||||||
** is clear. */
|
** is clear. */
|
||||||
sqlite3VdbeChangeP5(v, p->zName && !(pParse->db->flags&SQLITE_RecTriggers));
|
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
|
** If there are no triggers that fire at the specified time for the specified
|
||||||
** must be true:
|
** operation on pTab, this function is a no-op.
|
||||||
**
|
**
|
||||||
** 1. No cursors may be open in the main database. (But newIdx and oldIdx
|
** The reg argument is the address of the first in an array of registers
|
||||||
** can be indices of cursors in temporary tables. See below.)
|
** 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
|
** Register Contains
|
||||||
** a temporary vdbe cursor (index newIdx) must be open and pointing at
|
** ------------------------------------------------------
|
||||||
** a row containing values to be substituted for new.* expressions in the
|
** reg+0 OLD.rowid
|
||||||
** trigger program(s).
|
** 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
|
** For ON DELETE triggers, the registers containing the NEW.* values will
|
||||||
** a temporary vdbe cursor (index oldIdx) must be open and pointing at
|
** never be accessed by the trigger program, so they are not allocated or
|
||||||
** a row containing values to be substituted for old.* expressions in the
|
** populated by the caller (there is no data to populate them with anyway).
|
||||||
** trigger program(s).
|
** 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
|
||||||
** If they are not NULL, the piOldColMask and piNewColMask output variables
|
** ON INSERT trigger, the value passed to this function as parameter reg
|
||||||
** are set to values that describe the columns used by the trigger program
|
** is not a readable register, although registers (reg+N) through
|
||||||
** in the OLD.* and NEW.* tables respectively. If column N of the
|
** (reg+N+N+1) are.
|
||||||
** 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.
|
|
||||||
**
|
**
|
||||||
|
** 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(
|
void sqlite3CodeRowTrigger(
|
||||||
Parse *pParse, /* Parse context */
|
Parse *pParse, /* Parse context */
|
||||||
@@ -981,17 +999,15 @@ void sqlite3CodeRowTrigger(
|
|||||||
ExprList *pChanges, /* Changes list for any UPDATE OF triggers */
|
ExprList *pChanges, /* Changes list for any UPDATE OF triggers */
|
||||||
int tr_tm, /* One of TRIGGER_BEFORE, TRIGGER_AFTER */
|
int tr_tm, /* One of TRIGGER_BEFORE, TRIGGER_AFTER */
|
||||||
Table *pTab, /* The table to code triggers from */
|
Table *pTab, /* The table to code triggers from */
|
||||||
int newIdx, /* The indice of the "new" row to access */
|
int reg, /* The first in an array of registers (see above) */
|
||||||
int oldIdx, /* The indice of the "old" row to access */
|
|
||||||
int orconf, /* ON CONFLICT policy */
|
int orconf, /* ON CONFLICT policy */
|
||||||
int ignoreJump /* Instruction to jump to for RAISE(IGNORE) */
|
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( (op==TK_UPDATE)==(pChanges!=0) );
|
||||||
assert(tr_tm == TRIGGER_BEFORE || tr_tm == TRIGGER_AFTER );
|
|
||||||
|
|
||||||
for(p=pTrigger; p; p=p->pNext){
|
for(p=pTrigger; p; p=p->pNext){
|
||||||
|
|
||||||
@@ -1006,9 +1022,9 @@ void sqlite3CodeRowTrigger(
|
|||||||
/* Determine whether we should code this trigger */
|
/* Determine whether we should code this trigger */
|
||||||
if( p->op==op
|
if( p->op==op
|
||||||
&& p->tr_tm==tr_tm
|
&& 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -428,7 +428,7 @@ void sqlite3Update(
|
|||||||
sqlite3VdbeAddOp2(v, OP_Affinity, regNew, pTab->nCol);
|
sqlite3VdbeAddOp2(v, OP_Affinity, regNew, pTab->nCol);
|
||||||
sqlite3TableAffinityStr(v, pTab);
|
sqlite3TableAffinityStr(v, pTab);
|
||||||
sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges,
|
sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges,
|
||||||
TRIGGER_BEFORE, pTab, -1, regOldRowid, onError, addr);
|
TRIGGER_BEFORE, pTab, regOldRowid, onError, addr);
|
||||||
|
|
||||||
/* The row-trigger may have deleted the row being updated. In this
|
/* The row-trigger may have deleted the row being updated. In this
|
||||||
** case, jump to the next row. No updates or AFTER triggers are
|
** case, jump to the next row. No updates or AFTER triggers are
|
||||||
@@ -473,7 +473,7 @@ void sqlite3Update(
|
|||||||
}
|
}
|
||||||
|
|
||||||
sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges,
|
sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges,
|
||||||
TRIGGER_AFTER, pTab, -1, regOldRowid, onError, addr);
|
TRIGGER_AFTER, pTab, regOldRowid, onError, addr);
|
||||||
|
|
||||||
/* Repeat the above with the next record to be updated, until
|
/* Repeat the above with the next record to be updated, until
|
||||||
** all record selected by the WHERE clause have been updated.
|
** all record selected by the WHERE clause have been updated.
|
||||||
|
Reference in New Issue
Block a user