aboutsummaryrefslogtreecommitdiff
path: root/src/trigger.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2015-12-09 16:26:38 +0000
committerdrh <drh@noemail.net>2015-12-09 16:26:38 +0000
commit8c8dddc90411eef6d23bf6b40bcb05eb65d240bf (patch)
treec2bf3f0f01c3f9ce4ce0d779bc818ae64b1b5d5e /src/trigger.c
parent72ea29d7ae7395c66869f6848d3af94c20843a72 (diff)
downloadsqlite-8c8dddc90411eef6d23bf6b40bcb05eb65d240bf.tar.gz
sqlite-8c8dddc90411eef6d23bf6b40bcb05eb65d240bf.zip
Simplification of the DROP TRIGGER logic using sqlite3NestedParse() instead
of hand-coded VDBE code. This is a manual cherry-pick of the key change from check-in [c80bbf14b365d]. FossilOrigin-Name: 8021b4c8139ba56d6b1e2e26aeec4f9bf77f37c9
Diffstat (limited to 'src/trigger.c')
-rw-r--r--src/trigger.c27
1 files changed, 4 insertions, 23 deletions
diff --git a/src/trigger.c b/src/trigger.c
index 2eba0cf92..be490e923 100644
--- a/src/trigger.c
+++ b/src/trigger.c
@@ -559,31 +559,12 @@ void sqlite3DropTriggerPtr(Parse *pParse, Trigger *pTrigger){
*/
assert( pTable!=0 );
if( (v = sqlite3GetVdbe(pParse))!=0 ){
- int base;
- static const int iLn = VDBE_OFFSET_LINENO(2);
- static const VdbeOpList dropTrigger[] = {
- { OP_Rewind, 0, ADDR(9), 0},
- { OP_String8, 0, 1, 0}, /* 1 */
- { OP_Column, 0, 1, 2},
- { OP_Ne, 2, ADDR(8), 1},
- { OP_String8, 0, 1, 0}, /* 4: "trigger" */
- { OP_Column, 0, 0, 2},
- { OP_Ne, 2, ADDR(8), 1},
- { OP_Delete, 0, 0, 0},
- { OP_Next, 0, ADDR(1), 0}, /* 8 */
- };
-
- sqlite3BeginWriteOperation(pParse, 0, iDb);
- sqlite3OpenMasterTable(pParse, iDb);
- base = sqlite3VdbeAddOpList(v, ArraySize(dropTrigger), dropTrigger, iLn);
- sqlite3VdbeChangeP4(v, base+1, pTrigger->zName, P4_TRANSIENT);
- sqlite3VdbeChangeP4(v, base+4, "trigger", P4_STATIC);
+ sqlite3NestedParse(pParse,
+ "DELETE FROM %Q.%s WHERE name=%Q AND type='trigger'",
+ db->aDb[iDb].zName, SCHEMA_TABLE(iDb), pTrigger->zName
+ );
sqlite3ChangeCookie(pParse, iDb);
- sqlite3VdbeAddOp2(v, OP_Close, 0, 0);
sqlite3VdbeAddOp4(v, OP_DropTrigger, iDb, 0, 0, pTrigger->zName, 0);
- if( pParse->nMem<3 ){
- pParse->nMem = 3;
- }
}
}