summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-01-21 23:56:16 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-01-21 23:56:16 +0800
commit72804a46e573272fbbea6fb61cc146ddb98ef0c2 (patch)
treeb804f410eabce8c883491e164a095d9a8d3bd8e2
parent5011bd5e92d5f83e6369d115f515d47589780af8 (diff)
downloadpttbbs-72804a46e573272fbbea6fb61cc146ddb98ef0c2.tar
pttbbs-72804a46e573272fbbea6fb61cc146ddb98ef0c2.tar.gz
pttbbs-72804a46e573272fbbea6fb61cc146ddb98ef0c2.tar.bz2
pttbbs-72804a46e573272fbbea6fb61cc146ddb98ef0c2.tar.lz
pttbbs-72804a46e573272fbbea6fb61cc146ddb98ef0c2.tar.xz
pttbbs-72804a46e573272fbbea6fb61cc146ddb98ef0c2.tar.zst
pttbbs-72804a46e573272fbbea6fb61cc146ddb98ef0c2.zip
- emaildb(init): speed up by transaction
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3852 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--mbbsd/emaildb.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/mbbsd/emaildb.c b/mbbsd/emaildb.c
index 21fdd954..92aa6b05 100644
--- a/mbbsd/emaildb.c
+++ b/mbbsd/emaildb.c
@@ -92,14 +92,17 @@ end:
}
#ifdef INIT_MAIN
+
// standalone initialize builder
+
+#define TRANSCATION_PERIOD (4096)
int main()
{
int fd = 0;
userec_t xuser;
off_t sz = 0, i = 0, valids = 0;
sqlite3 *Db = NULL;
- sqlite3_stmt *Stmt = NULL;
+ sqlite3_stmt *Stmt = NULL, *tranStart = NULL, *tranEnd = NULL;
// init passwd
sz = dashs(FN_PASSWD);
@@ -119,12 +122,16 @@ int main()
}
if (sqlite3_prepare(Db, "REPLACE INTO emaildb (userid, email) VALUES (lower(?),lower(?));",
- -1, &Stmt, NULL) != SQLITE_OK)
+ -1, &Stmt, NULL) != SQLITE_OK ||
+ sqlite3_prepare(Db, "BEGIN TRANSACTION;", -1, &tranStart, NULL) != SQLITE_OK ||
+ sqlite3_prepare(Db, "COMMIT;", -1, &tranEnd, NULL) != SQLITE_OK)
{
fprintf(stderr, "SQLite 3 internal error.\n");
return 0;
}
+ sqlite3_step(tranStart);
+ sqlite3_reset(tranStart);
while (read(fd, &xuser, sizeof(xuser)) == sizeof(xuser))
{
i++;
@@ -155,10 +162,21 @@ int main()
sqlite3_reset(Stmt);
valids ++;
- fprintf(stderr, "%d/%d (valid: %d)\r",
- (int)i, (int)sz, (int)valids);
+ if (valids % 10 == 0)
+ fprintf(stderr, "%d/%d (valid: %d)\r",
+ (int)i, (int)sz, (int)valids);
+ if (valids % TRANSCATION_PERIOD == 0)
+ {
+ sqlite3_step(tranEnd);
+ sqlite3_step(tranStart);
+ sqlite3_reset(tranEnd);
+ sqlite3_reset(tranStart);
+ }
}
+ if (valids % TRANSCATION_PERIOD)
+ sqlite3_step(tranEnd);
+
if (Stmt != NULL)
sqlite3_finalize(Stmt);