Fossil SCM
Reuse prepared statements to make clone run must faster on the server side.
Commit
1f41b0421d6ce36858a0f0becadb82906cf92424
Parent
1b4516168d1e979…
1 file changed
+16
-14
+16
-14
| --- src/xfer.c | ||
| +++ src/xfer.c | ||
| @@ -403,45 +403,47 @@ | ||
| 403 | 403 | ** a "cfile" card. |
| 404 | 404 | */ |
| 405 | 405 | static void send_compressed_file(Xfer *pXfer, int rid){ |
| 406 | 406 | const char *zContent; |
| 407 | 407 | const char *zUuid; |
| 408 | - char *zDelta; | |
| 408 | + const char *zDelta; | |
| 409 | 409 | int szU; |
| 410 | 410 | int szC; |
| 411 | 411 | int rc; |
| 412 | - Stmt s; | |
| 412 | + static Stmt q1; | |
| 413 | 413 | |
| 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" | |
| 417 | 420 | " AND size>=0" |
| 418 | 421 | " AND uuid NOT IN shun" |
| 419 | 422 | " AND rid NOT IN private", |
| 420 | 423 | rid |
| 421 | 424 | ); |
| 422 | - rc = db_step(&s); | |
| 425 | + db_bind_int(&q1, ":rid", rid); | |
| 426 | + rc = db_step(&q1); | |
| 423 | 427 | 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); | |
| 430 | 433 | blob_appendf(pXfer->pOut, "cfile %s ", zUuid); |
| 431 | 434 | if( zDelta ){ |
| 432 | 435 | blob_appendf(pXfer->pOut, "%s ", zDelta); |
| 433 | - fossil_free(zDelta); | |
| 434 | 436 | pXfer->nDeltaSent++; |
| 435 | 437 | }else{ |
| 436 | 438 | pXfer->nFileSent++; |
| 437 | 439 | } |
| 438 | 440 | blob_appendf(pXfer->pOut, "%d %d\n", szU, szC); |
| 439 | 441 | blob_append(pXfer->pOut, zContent, szC); |
| 440 | 442 | blob_append(pXfer->pOut, "\n", 1); |
| 441 | 443 | } |
| 442 | - db_finalize(&s); | |
| 444 | + db_reset(&q1); | |
| 443 | 445 | } |
| 444 | 446 | |
| 445 | 447 | /* |
| 446 | 448 | ** Send a gimme message for every phantom. |
| 447 | 449 | ** |
| 448 | 450 |
| --- 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 |