Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | The rebuild command corrects any errors seen in the blob.size field. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
5b74febbccab50c65bb9d38a61928349 |
| User & Date: | drh 2008-05-16 17:05:05.000 |
Context
|
2008-05-16
| ||
| 18:11 | Progress toward getting ticket handling to work. ... (check-in: 68c24b1857 user: drh tags: trunk) | |
| 17:05 | The rebuild command corrects any errors seen in the blob.size field. ... (check-in: 5b74febbcc user: drh tags: trunk) | |
| 16:01 | Merge in stephan's fork. ... (check-in: 81eb00def7 user: drh tags: trunk) | |
Changes
Changes to src/rebuild.c.
| ︙ | ︙ | |||
48 49 50 51 52 53 54 55 56 57 58 59 60 61 | @ CREATE TABLE IF NOT EXISTS reportfmt( @ rn integer primary key, -- Report number @ owner text, -- Owner of this report format (not used) @ title text, -- Title of this report @ cols text, -- A color-key specification @ sqlcode text -- An SQL SELECT statement for this report @ ); ; /* ** Variables used for progress information */ static int totalSize; /* Total number of artifacts to process */ static int processCnt; /* Number processed so far */ | > > > > > > > > > > | 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | @ CREATE TABLE IF NOT EXISTS reportfmt( @ rn integer primary key, -- Report number @ owner text, -- Owner of this report format (not used) @ title text, -- Title of this report @ cols text, -- A color-key specification @ sqlcode text -- An SQL SELECT statement for this report @ ); @ @ -- A cache for mapping baseline artifact ID + filename into file @ -- artifact ID. Used by the /doc method. @ -- @ CREATE TABLE IF NOT EXISTS vcache( @ vid integer, -- Baseline artifact ID @ fname text, -- Filename @ rid integer, -- File artifact ID @ UNIQUE(vid,fname,rid) @ ); ; /* ** Variables used for progress information */ static int totalSize; /* Total number of artifacts to process */ static int processCnt; /* Number processed so far */ |
| ︙ | ︙ | |||
73 74 75 76 77 78 79 | } /* ** Rebuild cross-referencing information for the artifact ** rid with content pBase and all of its descendants. This ** routine clears the content buffer before returning. */ | | > > > > > > > | 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
}
/*
** Rebuild cross-referencing information for the artifact
** rid with content pBase and all of its descendants. This
** routine clears the content buffer before returning.
*/
static void rebuild_step(int rid, int size, Blob *pBase){
Stmt q1;
Bag children;
Blob copy;
Blob *pUse;
int nChild, i, cid;
/* Fix up the "blob.size" field if needed. */
if( size!=blob_size(pBase) ){
db_multi_exec(
"UPDATE blob SET size=%d WHERE rid=%d", blob_size(pBase), rid
);
}
/* Find all children of artifact rid */
db_prepare(&q1, "SELECT rid FROM delta WHERE srcid=%d", rid);
bag_init(&children);
while( db_step(&q1)==SQLITE_ROW ){
bag_insert(&children, db_column_int(&q1, 0));
}
|
| ︙ | ︙ | |||
117 118 119 120 121 122 123 |
if( db_step(&q2)==SQLITE_ROW && (sz = db_column_int(&q2,1))>=0 ){
Blob delta;
db_ephemeral_blob(&q2, 0, &delta);
blob_uncompress(&delta, &delta);
blob_delta_apply(pUse, &delta, pUse);
blob_reset(&delta);
db_finalize(&q2);
| | | 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
if( db_step(&q2)==SQLITE_ROW && (sz = db_column_int(&q2,1))>=0 ){
Blob delta;
db_ephemeral_blob(&q2, 0, &delta);
blob_uncompress(&delta, &delta);
blob_delta_apply(pUse, &delta, pUse);
blob_reset(&delta);
db_finalize(&q2);
rebuild_step(cid, sz, pUse);
}else{
db_finalize(&q2);
blob_reset(pUse);
}
}
bag_clear(&children);
rebuild_step_done();
|
| ︙ | ︙ | |||
179 180 181 182 183 184 185 |
);
while( db_step(&s)==SQLITE_ROW ){
int rid = db_column_int(&s, 0);
int size = db_column_int(&s, 1);
if( size>=0 ){
Blob content;
content_get(rid, &content);
| | | 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
);
while( db_step(&s)==SQLITE_ROW ){
int rid = db_column_int(&s, 0);
int size = db_column_int(&s, 1);
if( size>=0 ){
Blob content;
content_get(rid, &content);
rebuild_step(rid, size, &content);
}else{
db_multi_exec("INSERT OR IGNORE INTO phantom VALUES(%d)", rid);
rebuild_step_done();
}
}
db_finalize(&s);
if( ttyOutput ){
|
| ︙ | ︙ |