Diff
Not logged in

Differences From:

File src/xfer.c part of check-in [8010bb41e1] - Speed enhancement in the findSrcid() routine of content.c. Allow 5 digit numbers on counts while syncing. by drh on 2008-03-08 18:59:00. [view]

To:

File src/xfer.c part of check-in [043d63d4aa] - Additional speed improvements for clone and rebuild. by drh on 2008-03-08 19:42:53. [view]

@@ -57,11 +57,21 @@
 ** Compare to uuid_to_rid().  This routine takes a blob argument
 ** and does less error checking.
 */
 static int rid_from_uuid(Blob *pUuid, int phantomize){
-  int rid = db_int(0, "SELECT rid FROM blob WHERE uuid='%b'", pUuid);
+  static Stmt q;
+  int rid;
+
+  db_static_prepare(&q, "SELECT rid FROM blob WHERE uuid=:uuid");
+  db_bind_str(&q, ":uuid", pUuid);
+  if( db_step(&q)==SQLITE_ROW ){
+    rid = db_column_int(&q, 0);
+  }else{
+    rid = 0;
+  }
+  db_reset(&q);
   if( rid==0 && phantomize ){
-    rid = content_put(0, blob_str(pUuid), 0);
+    rid = content_new(blob_str(pUuid));
   }
   return rid;
 }
 
@@ -841,18 +851,12 @@
       if( xfer.nToken==2
        && blob_eq(&xfer.aToken[0], "igot")
        && blob_is_uuid(&xfer.aToken[1])
       ){
-        int rid = 0;
-        if( pullFlag || cloneFlag ){
-          if( !db_exists("SELECT 1 FROM blob WHERE uuid='%b' AND size>=0",
-                &xfer.aToken[1]) ){
-            rid = content_put(0, blob_str(&xfer.aToken[1]), 0);
-            newPhantom = 1;
-          }
-        }
-        if( rid==0 ){
-          rid = rid_from_uuid(&xfer.aToken[1], 0);
+        int rid = rid_from_uuid(&xfer.aToken[1], 0);
+        if( rid==0 && (pullFlag || cloneFlag) ){
+          rid = content_new(blob_str(&xfer.aToken[1]));
+          newPhantom = 1;
         }
         remote_has(rid);
       }else