From 9f86b3bbe7d5d892620f1973ca069da67e90b568 Mon Sep 17 00:00:00 2001 From: Trumeet Date: Sun, 19 Mar 2023 15:00:05 -0700 Subject: Share stmt_global_stat --- db.c | 11 +++++++++++ db.h | 2 ++ stat.c | 18 ++++++++---------- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/db.c b/db.c index 98b35a0..0ec4e31 100644 --- a/db.c +++ b/db.c @@ -28,6 +28,8 @@ static const char *sql_upgrades[] = { sqlite3 *db = NULL; +sqlite3_stmt *stmt_global_stat = NULL; + void db_init(void) { int r; r = sqlite3_open(cmd.db_path, &db); @@ -68,11 +70,20 @@ void db_init(void) { goto sql_err; } } + + /* Prepare statements */ + if ((r = sqlite3_prepare_v2(db, "SELECT * FROM stats_global;", -1, &stmt_global_stat, NULL))) { + goto sql_err; + } } void db_close(void) { if (db == NULL) return; + if (stmt_global_stat) { + sqlite3_finalize(stmt_global_stat); + stmt_global_stat = NULL; + } sqlite3_close(db); db = NULL; } diff --git a/db.h b/db.h index 93fdb43..e121593 100644 --- a/db.h +++ b/db.h @@ -13,6 +13,8 @@ #define ULEN(X) (X == 0 ? 1 : (int)floor(log10(X)) + 1) #define LLEN(X) ((int)floor(log10(llabs(X))) + 1 + ((X < 0) ? 1 : 0)) +extern sqlite3_stmt *stmt_global_stat; + extern sqlite3 *db; void db_init(void); diff --git a/stat.c b/stat.c index 143a98d..0e5906f 100644 --- a/stat.c +++ b/stat.c @@ -19,18 +19,16 @@ static char *praises[] = { void stat(struct TdMessage *msg) { int r; char m[1024]; - sqlite3_stmt *stmt = NULL; - if ((r = sqlite3_prepare_v2(db, "SELECT * FROM stats_global;", -1, &stmt, NULL))) { + if ((r = sqlite3_step(stmt_global_stat)) != SQLITE_ROW) { goto sql_err; sql_err: { snprintf(m, 1024, "Cannot query statistics: %s.", sqlite3_errstr(r)); LOGEV("%s", m); - if (stmt) sqlite3_finalize(stmt); + sqlite3_reset(stmt_global_stat); goto send; } } - if ((r = sqlite3_step(stmt)) != SQLITE_ROW) goto sql_err; snprintf(m, sizeof(m), "%s" "TGCN 共有 %d 位 K 教授的虔诚学生卖了 %d 句菜," @@ -40,13 +38,13 @@ void stat(struct TdMessage *msg) { "共有 %d 句教授语录。\n" "Bot 已运行 %ld 秒。", praises[rand() % (sizeof(praises) / sizeof(char *))], - sqlite3_column_int(stmt, 0), - sqlite3_column_int(stmt, 1), - sqlite3_column_int(stmt, 2), - sqlite3_column_int(stmt, 3), - sqlite3_column_int(stmt, 4), + sqlite3_column_int(stmt_global_stat, 0), + sqlite3_column_int(stmt_global_stat, 1), + sqlite3_column_int(stmt_global_stat, 2), + sqlite3_column_int(stmt_global_stat, 3), + sqlite3_column_int(stmt_global_stat, 4), time(NULL) - start_time); - sqlite3_finalize(stmt); + sqlite3_reset(stmt_global_stat); goto send; send: td_send(TdCreateObjectSendMessage(msg->chat_id_, -- cgit v1.2.3