summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrumeet <yuuta@yuuta.moe>2023-03-19 15:00:05 -0700
committerTrumeet <yuuta@yuuta.moe>2023-03-19 15:00:05 -0700
commit9f86b3bbe7d5d892620f1973ca069da67e90b568 (patch)
treef6c30c33785e8d6e28b9c1d1eee2780bd5a8df0f
parente1a3e886bf36da6fc49b52ed5f24e8b193dadc4d (diff)
downloadksyxbot-9f86b3bbe7d5d892620f1973ca069da67e90b568.tar
ksyxbot-9f86b3bbe7d5d892620f1973ca069da67e90b568.tar.gz
ksyxbot-9f86b3bbe7d5d892620f1973ca069da67e90b568.tar.bz2
ksyxbot-9f86b3bbe7d5d892620f1973ca069da67e90b568.zip
Share stmt_global_stat
-rw-r--r--db.c11
-rw-r--r--db.h2
-rw-r--r--stat.c18
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_,