mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-19 21:43:15 +03:00
Test cases added. RETURNING works with UPSERT as does PG.
FossilOrigin-Name: f5698f96e27c9b8669ec6016bb9920ef7580c4146eb61d628a0f62be5135ce94
This commit is contained in:
@@ -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)
|
||||
){
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user