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: 68c24b18 user: drh tags: trunk) | |
17:05 | The rebuild command corrects any errors seen in the blob.size field. ... (check-in: 5b74febb user: drh tags: trunk) | |
16:01 | Merge in stephan's fork. ... (check-in: 81eb00de 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 ){ |
︙ | ︙ |