Fossil SCM

More code for the purge command. The purge command still does not work. This is just an incremental check-in.

drh 2014-11-24 20:33 UTC DBP-workflow
Commit 21113220be534b8cf71b7561ba25eeb9665cce39
1 file changed +42
+42
--- src/purge.c
+++ src/purge.c
@@ -84,10 +84,11 @@
8484
){
8585
int peid = 0; /* New purgeevent ID */
8686
Stmt q; /* General-use prepared statement */
8787
8888
assert( g.repositoryOpen ); /* Main database must already be open */
89
+ db_begin_transaction();
8990
db_multi_exec(zPurgeInit /*works-like:"%w%w"*/,
9091
db_name("repository"), db_name("repository"));
9192
db_multi_exec(
9293
"INSERT INTO purgeevent(ctime,pnotes) VALUES(now(),%Q)", zNote
9394
);
@@ -96,13 +97,54 @@
9697
while( db_step(&q)==SQLITE_ROW ){
9798
int rid = db_column_int(&q, 0);
9899
content_undelta(rid);
99100
verify_before_commit(rid);
100101
}
102
+ db_finalize(&q);
101103
db_multi_exec(
102104
"INSERT INTO purgeitem(peid,uuid,sz,data)"
103105
" SELECT %d, uuid, size, compress(content(uuid))"
104106
" FROM blob WHERE rid IN \"%w\"",
105107
peid, zTab
106108
);
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();
107148
149
+ db_end_transaction(0);
108150
}
109151
--- 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

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button