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
- branch=trunk inherited from [a28c83647d]
- sym-trunk inherited from [a28c83647d]
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); } }