aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/trigger.c8
-rw-r--r--src/vdbeaux.c5
2 files changed, 9 insertions, 4 deletions
diff --git a/src/trigger.c b/src/trigger.c
index 452005944..baf78eb8c 100644
--- a/src/trigger.c
+++ b/src/trigger.c
@@ -567,7 +567,8 @@ TriggerStep *sqlite3TriggerDeleteStep(
** Recursively delete a Trigger structure
*/
void sqlite3DeleteTrigger(sqlite3 *db, Trigger *pTrigger){
- if( pTrigger==0 || pTrigger->bReturning ) return;
+ if( pTrigger==0 ) return;
+ assert( !pTrigger->bReturning );
sqlite3DeleteTriggerStep(db, pTrigger->step_list);
sqlite3DbFree(db, pTrigger->zName);
sqlite3DbFree(db, pTrigger->table);
@@ -739,7 +740,7 @@ Trigger *sqlite3TriggersExist(
for(p=pList; p; p=p->pNext){
if( p->op==op && checkColumnOverlap(p->pColumns, pChanges) ){
mask |= p->tr_tm;
- }else if( p->op==TK_RETURNING ){
+ }else if( p->bReturning ){
p->op = op;
mask |= TRIGGER_AFTER;
}
@@ -912,6 +913,7 @@ static int codeTriggerProgram(
pSelect->pEList =
sqlite3ExpandReturning(pParse, pList, pParse->pTriggerTab);
sqlite3SelectDestInit(&sDest, SRT_Output, 0);
+ pSelect->selFlags = 0;
sqlite3Select(pParse, pSelect, &sDest);
sqlite3ExprListDelete(db, pSelect->pEList);
pSelect->pEList = pList;
@@ -1215,7 +1217,7 @@ void sqlite3CodeRowTrigger(
|| p->pSchema==pParse->db->aDb[1].pSchema );
/* Determine whether we should code this trigger */
- if( p->op==op
+ if( (p->op==op || p->bReturning)
&& p->tr_tm==tr_tm
&& checkColumnOverlap(p->pColumns, pChanges)
){
diff --git a/src/vdbeaux.c b/src/vdbeaux.c
index 9ea20628f..c7c212575 100644
--- a/src/vdbeaux.c
+++ b/src/vdbeaux.c
@@ -2602,7 +2602,10 @@ void sqlite3VdbeSetNumCols(Vdbe *p, int nResColumn){
void sqlite3VdbeColumnInfoXfer(Vdbe *pTo, Vdbe *pFrom){
sqlite3 *db = pTo->db;
assert( db==pFrom->db );
- sqlite3DbFree(db, pTo->aColName);
+ if( pTo->nResColumn ){
+ releaseMemArray(pTo->aColName, pTo->nResColumn*COLNAME_N);
+ sqlite3DbFree(db, pTo->aColName);
+ }
pTo->aColName = pFrom->aColName;
pFrom->aColName = 0;
pTo->nResColumn = pFrom->nResColumn;