Overview
SHA1 Hash: | 18b1f6788d2b5ba4ba53f0bf3c1eb99706c5a477 |
---|---|
Date: | 2007-08-28 03:04:09 |
User: | drh |
Comment: | Make sure the same manifest never gets inserted into the metadata tables twice - resulting in duplicate timeline entries. |
Timelines: | ancestors | descendants | both | trunk |
Other Links: | files | ZIP archive | manifest |
Tags And Properties
- branch=trunk inherited from [a28c83647d]
- sym-trunk inherited from [a28c83647d]
Changes
[hide diffs]Modified src/manifest.c from [02dabff247] to [bf7dfee62a].
@@ -301,28 +301,30 @@ if( manifest_parse(&m, pContent)==0 ){ return 0; } db_begin_transaction(); - for(i=0; i<m.nParent; i++){ - int pid = uuid_to_rid(m.azParent[i], 1); - db_multi_exec("INSERT OR IGNORE INTO plink(pid, cid, isprim, mtime)" - "VALUES(%d, %d, %d, %.17g)", pid, rid, i==0, m.rDate); - if( i==0 ){ - add_mlink(pid, 0, rid, &m); + if( !db_exists("SELECT 1 FROM mlink WHERE mid=%d", rid) ){ + for(i=0; i<m.nParent; i++){ + int pid = uuid_to_rid(m.azParent[i], 1); + db_multi_exec("INSERT OR IGNORE INTO plink(pid, cid, isprim, mtime)" + "VALUES(%d, %d, %d, %.17g)", pid, rid, i==0, m.rDate); + if( i==0 ){ + add_mlink(pid, 0, rid, &m); + } + } + db_prepare(&q, "SELECT cid FROM plink WHERE pid=%d AND isprim", rid); + while( db_step(&q)==SQLITE_ROW ){ + int cid = db_column_int(&q, 0); + add_mlink(rid, &m, cid, 0); } - } - db_prepare(&q, "SELECT cid FROM plink WHERE pid=%d AND isprim", rid); - while( db_step(&q)==SQLITE_ROW ){ - int cid = db_column_int(&q, 0); - add_mlink(rid, &m, cid, 0); - } - db_finalize(&q); - db_multi_exec( - "INSERT INTO event(type,mtime,objid,user,comment)" - "VALUES('ci',%.17g,%d,%Q,%Q)", - m.rDate, rid, m.zUser, m.zComment - ); + db_finalize(&q); + db_multi_exec( + "INSERT INTO event(type,mtime,objid,user,comment)" + "VALUES('ci',%.17g,%d,%Q,%Q)", + m.rDate, rid, m.zUser, m.zComment + ); + } db_end_transaction(0); manifest_clear(&m); return 1; }