Fossil SCM
More code for the purge command. The purge command still does not work. This is just an incremental check-in.
Commit
21113220be534b8cf71b7561ba25eeb9665cce39
Parent
53b35da3e0d7154…
1 file changed
+42
+42
| --- src/purge.c | ||
| +++ src/purge.c | ||
| @@ -84,10 +84,11 @@ | ||
| 84 | 84 | ){ |
| 85 | 85 | int peid = 0; /* New purgeevent ID */ |
| 86 | 86 | Stmt q; /* General-use prepared statement */ |
| 87 | 87 | |
| 88 | 88 | assert( g.repositoryOpen ); /* Main database must already be open */ |
| 89 | + db_begin_transaction(); | |
| 89 | 90 | db_multi_exec(zPurgeInit /*works-like:"%w%w"*/, |
| 90 | 91 | db_name("repository"), db_name("repository")); |
| 91 | 92 | db_multi_exec( |
| 92 | 93 | "INSERT INTO purgeevent(ctime,pnotes) VALUES(now(),%Q)", zNote |
| 93 | 94 | ); |
| @@ -96,13 +97,54 @@ | ||
| 96 | 97 | while( db_step(&q)==SQLITE_ROW ){ |
| 97 | 98 | int rid = db_column_int(&q, 0); |
| 98 | 99 | content_undelta(rid); |
| 99 | 100 | verify_before_commit(rid); |
| 100 | 101 | } |
| 102 | + db_finalize(&q); | |
| 101 | 103 | db_multi_exec( |
| 102 | 104 | "INSERT INTO purgeitem(peid,uuid,sz,data)" |
| 103 | 105 | " SELECT %d, uuid, size, compress(content(uuid))" |
| 104 | 106 | " FROM blob WHERE rid IN \"%w\"", |
| 105 | 107 | peid, zTab |
| 106 | 108 | ); |
| 109 | + db_multi_exec("DELETE FROM blob WHERE rid IN \"%w\"", zTab); | |
| 110 | + db_multi_exec("DELETE FROM event WHERE objid IN \"%w\"", zTab); | |
| 111 | + db_multi_exec("DELETE FROM private WHERE rid IN \"%w\"", zTab); | |
| 112 | + db_multi_exec("DELETE FROM mlink WHERE mid IN \"%w\"", zTab); | |
| 113 | + db_multi_exec("DELETE FROM plink WHERE pid IN \"%w\"", zTab); | |
| 114 | + db_multi_exec("DELETE FROM plink WHERE cid IN \"%w\"", zTab); | |
| 115 | + db_multi_exec("DELETE FROM leaf WHERE rid IN \"%w\"", zTab); | |
| 116 | + db_multi_exec("DELETE FROM phantom WHERE rid IN \"%w\"", zTab); | |
| 117 | + db_multi_exec("DELETE FROM unclustered WHERE rid IN \"%w\"", zTab); | |
| 118 | + db_multi_exec("DELETE FROM unsent WHERE rid IN \"%w\"", zTab); | |
| 119 | + db_multi_exec("DELETE FROM tagxref" | |
| 120 | + " WHERE rid IN \"%w\"" | |
| 121 | + " OR srcid IN \"%w\"" | |
| 122 | + " OR origid IN \"%w\"", zTab, zTab, zTab); | |
| 123 | + db_multi_exec("DELETE FROM backlink WHERE srctype=0 AND srcid IN \"%w\"", | |
| 124 | + zTab); | |
| 125 | + db_multi_exec( | |
| 126 | + "CREATE TEMP TABLE \"%w_tickets\" AS" | |
| 127 | + " SELECT DISTINCT tkt_uuid FROM ticket WHERE tkt_id IN" | |
| 128 | + " (SELECT tkt_id FROM ticketchng WHERE tkt_rid IN \"%w\")", | |
| 129 | + zTab, zTab); | |
| 130 | + db_multi_exec("DELETE FROM ticketchng WHERE tkt_rid IN \"%w\"", zTab); | |
| 131 | + db_prepare(&q, "SELECT tkt_uuid FROM \"%w_tickets\"", zTab); | |
| 132 | + while( db_step(&q)==SQLITE_ROW ){ | |
| 133 | + ticket_rebuild_entry(db_column_text(&q, 0)); | |
| 134 | + } | |
| 135 | + db_finalize(&q); | |
| 136 | + db_multi_exec("DROP TABLE \"%w_tickets\"", zTab); | |
| 137 | + db_end_transaction(0); | |
| 138 | +} | |
| 139 | + | |
| 140 | +/* | |
| 141 | +** The TEMP table named zTab contains the RIDs for a set of checkin | |
| 142 | +** artifacts. Expand this set (by adding new entries to zTab) to include | |
| 143 | +** all other facts that are used exclusively by the set of checkins in | |
| 144 | +** the original list. | |
| 145 | +*/ | |
| 146 | +void purge_checkin_associates(const char *zTab){ | |
| 147 | + db_begin_transaction(); | |
| 107 | 148 | |
| 149 | + db_end_transaction(0); | |
| 108 | 150 | } |
| 109 | 151 |
| --- src/purge.c | |
| +++ src/purge.c | |
| @@ -84,10 +84,11 @@ | |
| 84 | ){ |
| 85 | int peid = 0; /* New purgeevent ID */ |
| 86 | Stmt q; /* General-use prepared statement */ |
| 87 | |
| 88 | assert( g.repositoryOpen ); /* Main database must already be open */ |
| 89 | db_multi_exec(zPurgeInit /*works-like:"%w%w"*/, |
| 90 | db_name("repository"), db_name("repository")); |
| 91 | db_multi_exec( |
| 92 | "INSERT INTO purgeevent(ctime,pnotes) VALUES(now(),%Q)", zNote |
| 93 | ); |
| @@ -96,13 +97,54 @@ | |
| 96 | while( db_step(&q)==SQLITE_ROW ){ |
| 97 | int rid = db_column_int(&q, 0); |
| 98 | content_undelta(rid); |
| 99 | verify_before_commit(rid); |
| 100 | } |
| 101 | db_multi_exec( |
| 102 | "INSERT INTO purgeitem(peid,uuid,sz,data)" |
| 103 | " SELECT %d, uuid, size, compress(content(uuid))" |
| 104 | " FROM blob WHERE rid IN \"%w\"", |
| 105 | peid, zTab |
| 106 | ); |
| 107 | |
| 108 | } |
| 109 |
| --- src/purge.c | |
| +++ src/purge.c | |
| @@ -84,10 +84,11 @@ | |
| 84 | ){ |
| 85 | int peid = 0; /* New purgeevent ID */ |
| 86 | Stmt q; /* General-use prepared statement */ |
| 87 | |
| 88 | assert( g.repositoryOpen ); /* Main database must already be open */ |
| 89 | db_begin_transaction(); |
| 90 | db_multi_exec(zPurgeInit /*works-like:"%w%w"*/, |
| 91 | db_name("repository"), db_name("repository")); |
| 92 | db_multi_exec( |
| 93 | "INSERT INTO purgeevent(ctime,pnotes) VALUES(now(),%Q)", zNote |
| 94 | ); |
| @@ -96,13 +97,54 @@ | |
| 97 | while( db_step(&q)==SQLITE_ROW ){ |
| 98 | int rid = db_column_int(&q, 0); |
| 99 | content_undelta(rid); |
| 100 | verify_before_commit(rid); |
| 101 | } |
| 102 | db_finalize(&q); |
| 103 | db_multi_exec( |
| 104 | "INSERT INTO purgeitem(peid,uuid,sz,data)" |
| 105 | " SELECT %d, uuid, size, compress(content(uuid))" |
| 106 | " FROM blob WHERE rid IN \"%w\"", |
| 107 | peid, zTab |
| 108 | ); |
| 109 | db_multi_exec("DELETE FROM blob WHERE rid IN \"%w\"", zTab); |
| 110 | db_multi_exec("DELETE FROM event WHERE objid IN \"%w\"", zTab); |
| 111 | db_multi_exec("DELETE FROM private WHERE rid IN \"%w\"", zTab); |
| 112 | db_multi_exec("DELETE FROM mlink WHERE mid IN \"%w\"", zTab); |
| 113 | db_multi_exec("DELETE FROM plink WHERE pid IN \"%w\"", zTab); |
| 114 | db_multi_exec("DELETE FROM plink WHERE cid IN \"%w\"", zTab); |
| 115 | db_multi_exec("DELETE FROM leaf WHERE rid IN \"%w\"", zTab); |
| 116 | db_multi_exec("DELETE FROM phantom WHERE rid IN \"%w\"", zTab); |
| 117 | db_multi_exec("DELETE FROM unclustered WHERE rid IN \"%w\"", zTab); |
| 118 | db_multi_exec("DELETE FROM unsent WHERE rid IN \"%w\"", zTab); |
| 119 | db_multi_exec("DELETE FROM tagxref" |
| 120 | " WHERE rid IN \"%w\"" |
| 121 | " OR srcid IN \"%w\"" |
| 122 | " OR origid IN \"%w\"", zTab, zTab, zTab); |
| 123 | db_multi_exec("DELETE FROM backlink WHERE srctype=0 AND srcid IN \"%w\"", |
| 124 | zTab); |
| 125 | db_multi_exec( |
| 126 | "CREATE TEMP TABLE \"%w_tickets\" AS" |
| 127 | " SELECT DISTINCT tkt_uuid FROM ticket WHERE tkt_id IN" |
| 128 | " (SELECT tkt_id FROM ticketchng WHERE tkt_rid IN \"%w\")", |
| 129 | zTab, zTab); |
| 130 | db_multi_exec("DELETE FROM ticketchng WHERE tkt_rid IN \"%w\"", zTab); |
| 131 | db_prepare(&q, "SELECT tkt_uuid FROM \"%w_tickets\"", zTab); |
| 132 | while( db_step(&q)==SQLITE_ROW ){ |
| 133 | ticket_rebuild_entry(db_column_text(&q, 0)); |
| 134 | } |
| 135 | db_finalize(&q); |
| 136 | db_multi_exec("DROP TABLE \"%w_tickets\"", zTab); |
| 137 | db_end_transaction(0); |
| 138 | } |
| 139 | |
| 140 | /* |
| 141 | ** The TEMP table named zTab contains the RIDs for a set of checkin |
| 142 | ** artifacts. Expand this set (by adding new entries to zTab) to include |
| 143 | ** all other facts that are used exclusively by the set of checkins in |
| 144 | ** the original list. |
| 145 | */ |
| 146 | void purge_checkin_associates(const char *zTab){ |
| 147 | db_begin_transaction(); |
| 148 | |
| 149 | db_end_transaction(0); |
| 150 | } |
| 151 |