Check-in [a9a27f8aaa]
Not logged in
Overview

SHA1 Hash:a9a27f8aaab2a7ab118a6cf92fdb3b5ebd8df7c4
Date: 2009-08-27 18:56:08
User: drh
Comment:Still more speed improvements to the "rebuild" command.
Timelines: ancestors | descendants | both | trunk
Other Links: files | ZIP archive | manifest

Tags And Properties
Changes
[hide diffs]

Modified src/manifest.c from [065d6850c3] to [9476d92cd1].

@@ -700,10 +700,33 @@
   manifest_parse(&m, &b);
   manifest_clear(&m);
 }
 
 /*
+** Translate a filename into a filename-id (fnid).  Create a new fnid
+** if no previously exists.
+*/
+static int filename_to_fnid(const char *zFilename){
+  static Stmt q1, s1;
+  int fnid;
+  db_static_prepare(&q1, "SELECT fnid FROM filename WHERE name=:fn");
+  db_bind_text(&q1, ":fn", zFilename);
+  fnid = 0;
+  if( db_step(&q1)==SQLITE_ROW ){
+    fnid = db_column_int(&q1, 0);
+  }
+  db_reset(&q1);
+  if( fnid==0 ){
+    db_static_prepare(&s1, "INSERT INTO filename(name) VALUES(:fn)");
+    db_bind_text(&s1, ":fn", zFilename);
+    db_exec(&s1);
+    fnid = db_last_insert_rowid();
+  }
+  return fnid;
+}
+
+/*
 ** Add a single entry to the mlink table.  Also add the filename to
 ** the filename table if it is not there already.
 */
 static void add_one_mlink(
   int mid,                  /* The record ID of the manifest */
@@ -711,24 +734,17 @@
   const char *zToUuid,      /* UUID for the mlink.fid field */
   const char *zFilename,    /* Filename */
   const char *zPrior        /* Previous filename.  NULL if unchanged */
 ){
   int fnid, pfnid, pid, fid;
+  static Stmt s1;
 
-  fnid = db_int(0, "SELECT fnid FROM filename WHERE name=%Q", zFilename);
-  if( fnid==0 ){
-    db_multi_exec("INSERT INTO filename(name) VALUES(%Q)", zFilename);
-    fnid = db_last_insert_rowid();
-  }
+  fnid = filename_to_fnid(zFilename);
   if( zPrior==0 ){
     pfnid = 0;
   }else{
-    pfnid = db_int(0, "SELECT fnid FROM filename WHERE name=%Q", zPrior);
-    if( pfnid==0 ){
-      db_multi_exec("INSERT INTO filename(name) VALUES(%Q)", zPrior);
-      pfnid = db_last_insert_rowid();
-    }
+    pfnid = filename_to_fnid(zPrior);
   }
   if( zFromUuid==0 ){
     pid = 0;
   }else{
     pid = uuid_to_rid(zFromUuid, 1);
@@ -736,14 +752,20 @@
   if( zToUuid==0 ){
     fid = 0;
   }else{
     fid = uuid_to_rid(zToUuid, 1);
   }
-  db_multi_exec(
+  db_static_prepare(&s1,
     "INSERT INTO mlink(mid,pid,fid,fnid,pfnid)"
-    "VALUES(%d,%d,%d,%d,%d)", mid, pid, fid, fnid, pfnid
+    "VALUES(:m,:p,:f,:n,:pfn)"
   );
+  db_bind_int(&s1, ":m", mid);
+  db_bind_int(&s1, ":p", pid);
+  db_bind_int(&s1, ":f", fid);
+  db_bind_int(&s1, ":n", fnid);
+  db_bind_int(&s1, ":pfn", pfnid);
+  db_exec(&s1);
   if( pid && fid ){
     content_deltify(pid, fid, 0);
   }
 }