Fossil SCM

Reuse prepared statements to make clone run must faster on the server side.

drh 2011-02-24 20:00 trunk
Commit 1f41b0421d6ce36858a0f0becadb82906cf92424
1 file changed +16 -14
+16 -14
--- src/xfer.c
+++ src/xfer.c
@@ -403,45 +403,47 @@
403403
** a "cfile" card.
404404
*/
405405
static void send_compressed_file(Xfer *pXfer, int rid){
406406
const char *zContent;
407407
const char *zUuid;
408
- char *zDelta;
408
+ const char *zDelta;
409409
int szU;
410410
int szC;
411411
int rc;
412
- Stmt s;
412
+ static Stmt q1;
413413
414
- db_prepare(&s,
415
- "SELECT uuid, size, content FROM blob"
416
- " WHERE rid=%d"
414
+ db_static_prepare(&q1,
415
+ "SELECT uuid, size, content,"
416
+ " (SELECT uuid FROM delta, blob"
417
+ " WHERE delta.rid=:rid AND delta.srcid=blob.rid)"
418
+ " FROM blob"
419
+ " WHERE rid=:rid"
417420
" AND size>=0"
418421
" AND uuid NOT IN shun"
419422
" AND rid NOT IN private",
420423
rid
421424
);
422
- rc = db_step(&s);
425
+ db_bind_int(&q1, ":rid", rid);
426
+ rc = db_step(&q1);
423427
if( rc==SQLITE_ROW ){
424
- zUuid = db_column_text(&s, 0);
425
- szU = db_column_int(&s, 1);
426
- szC = db_column_bytes(&s, 2);
427
- zContent = db_column_raw(&s, 2);
428
- zDelta = db_text(0, "SELECT uuid FROM blob WHERE rid="
429
- " (SELECT srcid FROM delta WHERE rid=%d)", rid);
428
+ zUuid = db_column_text(&q1, 0);
429
+ szU = db_column_int(&q1, 1);
430
+ szC = db_column_bytes(&q1, 2);
431
+ zContent = db_column_raw(&q1, 2);
432
+ zDelta = db_column_text(&q1, 3);
430433
blob_appendf(pXfer->pOut, "cfile %s ", zUuid);
431434
if( zDelta ){
432435
blob_appendf(pXfer->pOut, "%s ", zDelta);
433
- fossil_free(zDelta);
434436
pXfer->nDeltaSent++;
435437
}else{
436438
pXfer->nFileSent++;
437439
}
438440
blob_appendf(pXfer->pOut, "%d %d\n", szU, szC);
439441
blob_append(pXfer->pOut, zContent, szC);
440442
blob_append(pXfer->pOut, "\n", 1);
441443
}
442
- db_finalize(&s);
444
+ db_reset(&q1);
443445
}
444446
445447
/*
446448
** Send a gimme message for every phantom.
447449
**
448450
--- src/xfer.c
+++ src/xfer.c
@@ -403,45 +403,47 @@
403 ** a "cfile" card.
404 */
405 static void send_compressed_file(Xfer *pXfer, int rid){
406 const char *zContent;
407 const char *zUuid;
408 char *zDelta;
409 int szU;
410 int szC;
411 int rc;
412 Stmt s;
413
414 db_prepare(&s,
415 "SELECT uuid, size, content FROM blob"
416 " WHERE rid=%d"
 
 
 
417 " AND size>=0"
418 " AND uuid NOT IN shun"
419 " AND rid NOT IN private",
420 rid
421 );
422 rc = db_step(&s);
 
423 if( rc==SQLITE_ROW ){
424 zUuid = db_column_text(&s, 0);
425 szU = db_column_int(&s, 1);
426 szC = db_column_bytes(&s, 2);
427 zContent = db_column_raw(&s, 2);
428 zDelta = db_text(0, "SELECT uuid FROM blob WHERE rid="
429 " (SELECT srcid FROM delta WHERE rid=%d)", rid);
430 blob_appendf(pXfer->pOut, "cfile %s ", zUuid);
431 if( zDelta ){
432 blob_appendf(pXfer->pOut, "%s ", zDelta);
433 fossil_free(zDelta);
434 pXfer->nDeltaSent++;
435 }else{
436 pXfer->nFileSent++;
437 }
438 blob_appendf(pXfer->pOut, "%d %d\n", szU, szC);
439 blob_append(pXfer->pOut, zContent, szC);
440 blob_append(pXfer->pOut, "\n", 1);
441 }
442 db_finalize(&s);
443 }
444
445 /*
446 ** Send a gimme message for every phantom.
447 **
448
--- src/xfer.c
+++ src/xfer.c
@@ -403,45 +403,47 @@
403 ** a "cfile" card.
404 */
405 static void send_compressed_file(Xfer *pXfer, int rid){
406 const char *zContent;
407 const char *zUuid;
408 const char *zDelta;
409 int szU;
410 int szC;
411 int rc;
412 static Stmt q1;
413
414 db_static_prepare(&q1,
415 "SELECT uuid, size, content,"
416 " (SELECT uuid FROM delta, blob"
417 " WHERE delta.rid=:rid AND delta.srcid=blob.rid)"
418 " FROM blob"
419 " WHERE rid=:rid"
420 " AND size>=0"
421 " AND uuid NOT IN shun"
422 " AND rid NOT IN private",
423 rid
424 );
425 db_bind_int(&q1, ":rid", rid);
426 rc = db_step(&q1);
427 if( rc==SQLITE_ROW ){
428 zUuid = db_column_text(&q1, 0);
429 szU = db_column_int(&q1, 1);
430 szC = db_column_bytes(&q1, 2);
431 zContent = db_column_raw(&q1, 2);
432 zDelta = db_column_text(&q1, 3);
 
433 blob_appendf(pXfer->pOut, "cfile %s ", zUuid);
434 if( zDelta ){
435 blob_appendf(pXfer->pOut, "%s ", zDelta);
 
436 pXfer->nDeltaSent++;
437 }else{
438 pXfer->nFileSent++;
439 }
440 blob_appendf(pXfer->pOut, "%d %d\n", szU, szC);
441 blob_append(pXfer->pOut, zContent, szC);
442 blob_append(pXfer->pOut, "\n", 1);
443 }
444 db_reset(&q1);
445 }
446
447 /*
448 ** Send a gimme message for every phantom.
449 **
450

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button