Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Further improvements to the handling of RETURNING clauses on changes to TEMP tables with triggers. dbsqlfuzz 683913e98f54fe4f14e8dd11a48011f73bdca58d |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
ff3538ae37a02f4f36a15cddd1245171 |
User & Date: | drh 2021-04-27 17:18:10 |
Context
2021-04-28
| ||
15:43 | Adjust a VDBE coverage macros due to the enhancement at [506333742103c1f4]. (check-in: daed59b4 user: drh tags: trunk) | |
2021-04-27
| ||
17:18 | Further improvements to the handling of RETURNING clauses on changes to TEMP tables with triggers. dbsqlfuzz 683913e98f54fe4f14e8dd11a48011f73bdca58d (check-in: ff3538ae user: drh tags: trunk) | |
13:04 | RETURNING bug fix: Correctly deal with RETURNING statements on changes to TEMP tables that also have triggers. dbsqlfuzz 78b9400770ef8cc7d9427dfba26f4fcf46ea7dc2 (check-in: d0b15ecc user: drh tags: trunk) | |
Changes
Changes to src/trigger.c.
︙ | ︙ | |||
53 54 55 56 57 58 59 | HashElem *p; /* Loop variable for TEMP triggers */ if( pParse->disableTriggers ){ return 0; } pTmpSchema = pParse->db->aDb[1].pSchema; p = sqliteHashFirst(&pTmpSchema->trigHash); | < < < < < < | < > | 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | HashElem *p; /* Loop variable for TEMP triggers */ if( pParse->disableTriggers ){ return 0; } pTmpSchema = pParse->db->aDb[1].pSchema; p = sqliteHashFirst(&pTmpSchema->trigHash); pList = pTab->pTrigger; while( p ){ Trigger *pTrig = (Trigger *)sqliteHashData(p); if( pTrig->pTabSchema==pTab->pSchema && pTrig->table && 0==sqlite3StrICmp(pTrig->table, pTab->zName) && pTrig->pTabSchema!=pTmpSchema ){ pTrig->pNext = pList; pList = pTrig; }else if( pTrig->op==TK_RETURNING #ifndef SQLITE_OMIT_VIRTUALTABLE && pParse->db->pVtabCtx==0 #endif |
︙ | ︙ |
Changes to test/returning1.test.
︙ | ︙ | |||
275 276 277 278 279 280 281 282 283 | UPDATE t3 SET f=e+100 RETURNING 'U', e, f; DELETE FROM t3 WHERE f>100 RETURNING 'D', e, f; } {I 1 I 2 I 3 U 1 101 U 2 102 U 3 103 D 1 101 D 2 102 D 3 103} do_execsql_test 11.6 { SELECT * FROM log; DELETE FROM log; } {U3 1 101 U3 2 102 U3 3 103 D3 1 101 D3 2 102 D3 3 103} finish_test | > > > > > > > > > > > > > > | 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 | UPDATE t3 SET f=e+100 RETURNING 'U', e, f; DELETE FROM t3 WHERE f>100 RETURNING 'D', e, f; } {I 1 I 2 I 3 U 1 101 U 2 102 U 3 103 D 1 101 D 2 102 D 3 103} do_execsql_test 11.6 { SELECT * FROM log; DELETE FROM log; } {U3 1 101 U3 2 102 U3 3 103 D3 1 101 D3 2 102 D3 3 103} reset_db do_execsql_test 11.11 { CREATE TEMP TABLE t1(a,b); CREATE TRIGGER r1 BEFORE INSERT ON t1 BEGIN SELECT 1; END; DELETE FROM t1 RETURNING *; DROP TRIGGER r1; INSERT INTO t1 VALUES(5,30); } {} do_execsql_test 11.12 { SELECT * FROM t1; } {5 30} finish_test |