Differences From:
File
src/content.c
part of check-in
[574763bab9]
- Added revision support to diff and revert
by
jnc on
2007-09-26 03:37:12.
Also file
src/content.c
part of check-in
[8d55aa3597]
- Merged in new revision support for diff and revert commands into mainstream
by
jnc on
2007-09-26 03:38:58.
[view]
To:
File
src/content.c
part of check-in
[fb90abe5bd]
- Detect delta loops and make at least one member of the loop a phantom.
by
drh on
2007-12-03 14:42:32.
Also file
src/content.c
part of check-in
[d0305b305a]
- Merged mainline into my branch to get the newest application.
by
aku on
2007-12-05 08:07:46.
[view]
@@ -45,13 +45,25 @@
Stmt q;
Blob src;
int srcid;
int rc = 0;
+ static Bag inProcess;
assert( g.repositoryOpen );
srcid = findSrcid(rid);
blob_zero(pBlob);
if( srcid ){
+ if( bag_find(&inProcess, srcid) ){
+ db_multi_exec(
+ "UPDATE blob SET content=NULL, size=-1 WHERE rid=%d;"
+ "DELETE FROM delta WHERE rid=%d;"
+ "INSERT OR IGNORE INTO phantom VALUES(%d);",
+ srcid, srcid, srcid
+ );
+ blob_zero(pBlob);
+ return 0;
+ }
+ bag_insert(&inProcess, srcid);
if( content_get(srcid, &src) ){
db_prepare(&q, "SELECT content FROM blob WHERE rid=%d AND size>=0", rid);
if( db_step(&q)==SQLITE_ROW ){
Blob delta;
@@ -64,8 +76,9 @@
}
db_finalize(&q);
blob_reset(&src);
}
+ bag_remove(&inProcess, srcid);
}else{
db_prepare(&q, "SELECT content FROM blob WHERE rid=%d AND size>=0", rid);
if( db_step(&q)==SQLITE_ROW ){
db_ephemeral_blob(&q, 0, pBlob);