commit 702366b: [Minor] Sqlite: Improve tokens retreiving

Vsevolod Stakhov vsevolod at highsecure.ru
Mon Jun 10 17:14:09 UTC 2019


Author: Vsevolod Stakhov
Date: 2019-06-10 13:41:31 +0100
URL: https://github.com/rspamd/rspamd/commit/702366b67df6efabe53fa4953d4ecc9d320ca92c

[Minor] Sqlite: Improve tokens retreiving

---
 src/libstat/backends/sqlite3_backend.c | 68 ++++++++++++++++++++++------------
 1 file changed, 45 insertions(+), 23 deletions(-)

diff --git a/src/libstat/backends/sqlite3_backend.c b/src/libstat/backends/sqlite3_backend.c
index 61bc5bbd3..626bb0988 100644
--- a/src/libstat/backends/sqlite3_backend.c
+++ b/src/libstat/backends/sqlite3_backend.c
@@ -82,7 +82,8 @@ enum rspamd_stat_sqlite3_stmt_idx {
 	RSPAMD_STAT_BACKEND_TRANSACTION_START_EXCL,
 	RSPAMD_STAT_BACKEND_TRANSACTION_COMMIT,
 	RSPAMD_STAT_BACKEND_TRANSACTION_ROLLBACK,
-	RSPAMD_STAT_BACKEND_GET_TOKEN,
+	RSPAMD_STAT_BACKEND_GET_TOKEN_FULL,
+	RSPAMD_STAT_BACKEND_GET_TOKEN_SIMPLE,
 	RSPAMD_STAT_BACKEND_SET_TOKEN,
 	RSPAMD_STAT_BACKEND_INC_LEARNS_LANG,
 	RSPAMD_STAT_BACKEND_INC_LEARNS_USER,
@@ -148,8 +149,8 @@ static struct rspamd_sqlite3_prstmt prepared_stmts[RSPAMD_STAT_BACKEND_MAX] =
 		.flags = 0,
 		.ret = ""
 	},
-	[RSPAMD_STAT_BACKEND_GET_TOKEN] = {
-		.idx = RSPAMD_STAT_BACKEND_GET_TOKEN,
+	[RSPAMD_STAT_BACKEND_GET_TOKEN_FULL] = {
+		.idx = RSPAMD_STAT_BACKEND_GET_TOKEN_FULL,
 		.sql = "SELECT value FROM tokens "
 				"LEFT JOIN languages ON tokens.language=languages.id "
 				"LEFT JOIN users ON tokens.user=users.id "
@@ -161,10 +162,19 @@ static struct rspamd_sqlite3_prstmt prepared_stmts[RSPAMD_STAT_BACKEND_MAX] =
 		.flags = 0,
 		.ret = "I"
 	},
+	[RSPAMD_STAT_BACKEND_GET_TOKEN_SIMPLE] = {
+			.idx = RSPAMD_STAT_BACKEND_GET_TOKEN_SIMPLE,
+			.sql = "SELECT value FROM tokens WHERE token=?1",
+			.stmt = NULL,
+			.args = "I",
+			.result = SQLITE_ROW,
+			.flags = 0,
+			.ret = "I"
+	},
 	[RSPAMD_STAT_BACKEND_SET_TOKEN] = {
 		.idx = RSPAMD_STAT_BACKEND_SET_TOKEN,
 		.sql = "INSERT OR REPLACE INTO tokens (token, user, language, value, modified) "
-				"VALUES (?1, ?2, ?3, ?4, strftime('%s','now'));",
+				"VALUES (?1, ?2, ?3, ?4, strftime('%s','now'))",
 		.stmt = NULL,
 		.args = "IIII",
 		.result = SQLITE_DONE,
@@ -173,7 +183,7 @@ static struct rspamd_sqlite3_prstmt prepared_stmts[RSPAMD_STAT_BACKEND_MAX] =
 	},
 	[RSPAMD_STAT_BACKEND_INC_LEARNS_LANG] = {
 		.idx = RSPAMD_STAT_BACKEND_INC_LEARNS_LANG,
-		.sql = "UPDATE languages SET learns=learns + 1 WHERE id=?1;",
+		.sql = "UPDATE languages SET learns=learns + 1 WHERE id=?1",
 		.stmt = NULL,
 		.args = "I",
 		.result = SQLITE_DONE,
@@ -182,7 +192,7 @@ static struct rspamd_sqlite3_prstmt prepared_stmts[RSPAMD_STAT_BACKEND_MAX] =
 	},
 	[RSPAMD_STAT_BACKEND_INC_LEARNS_USER] = {
 		.idx = RSPAMD_STAT_BACKEND_INC_LEARNS_USER,
-		.sql = "UPDATE users SET learns=learns + 1 WHERE id=?1;",
+		.sql = "UPDATE users SET learns=learns + 1 WHERE id=?1",
 		.stmt = NULL,
 		.args = "I",
 		.result = SQLITE_DONE,
@@ -191,7 +201,7 @@ static struct rspamd_sqlite3_prstmt prepared_stmts[RSPAMD_STAT_BACKEND_MAX] =
 	},
 	[RSPAMD_STAT_BACKEND_DEC_LEARNS_LANG] = {
 		.idx = RSPAMD_STAT_BACKEND_DEC_LEARNS_LANG,
-		.sql = "UPDATE languages SET learns=MAX(0, learns - 1) WHERE id=?1;",
+		.sql = "UPDATE languages SET learns=MAX(0, learns - 1) WHERE id=?1",
 		.stmt = NULL,
 		.args = "I",
 		.result = SQLITE_DONE,
@@ -200,7 +210,7 @@ static struct rspamd_sqlite3_prstmt prepared_stmts[RSPAMD_STAT_BACKEND_MAX] =
 	},
 	[RSPAMD_STAT_BACKEND_DEC_LEARNS_USER] = {
 		.idx = RSPAMD_STAT_BACKEND_DEC_LEARNS_USER,
-		.sql = "UPDATE users SET learns=MAX(0, learns - 1) WHERE id=?1;",
+		.sql = "UPDATE users SET learns=MAX(0, learns - 1) WHERE id=?1",
 		.stmt = NULL,
 		.args = "I",
 		.result = SQLITE_DONE,
@@ -209,7 +219,7 @@ static struct rspamd_sqlite3_prstmt prepared_stmts[RSPAMD_STAT_BACKEND_MAX] =
 	},
 	[RSPAMD_STAT_BACKEND_GET_LEARNS] = {
 		.idx = RSPAMD_STAT_BACKEND_GET_LEARNS,
-		.sql = "SELECT SUM(MAX(0, learns)) FROM languages;",
+		.sql = "SELECT SUM(MAX(0, learns)) FROM languages",
 		.stmt = NULL,
 		.args = "",
 		.result = SQLITE_ROW,
@@ -218,7 +228,7 @@ static struct rspamd_sqlite3_prstmt prepared_stmts[RSPAMD_STAT_BACKEND_MAX] =
 	},
 	[RSPAMD_STAT_BACKEND_GET_LANGUAGE] = {
 		.idx = RSPAMD_STAT_BACKEND_GET_LANGUAGE,
-		.sql = "SELECT id FROM languages WHERE name=?1;",
+		.sql = "SELECT id FROM languages WHERE name=?1",
 		.stmt = NULL,
 		.args = "T",
 		.result = SQLITE_ROW,
@@ -227,7 +237,7 @@ static struct rspamd_sqlite3_prstmt prepared_stmts[RSPAMD_STAT_BACKEND_MAX] =
 	},
 	[RSPAMD_STAT_BACKEND_GET_USER] = {
 		.idx = RSPAMD_STAT_BACKEND_GET_USER,
-		.sql = "SELECT id FROM users WHERE name=?1;",
+		.sql = "SELECT id FROM users WHERE name=?1",
 		.stmt = NULL,
 		.args = "T",
 		.result = SQLITE_ROW,
@@ -236,7 +246,7 @@ static struct rspamd_sqlite3_prstmt prepared_stmts[RSPAMD_STAT_BACKEND_MAX] =
 	},
 	[RSPAMD_STAT_BACKEND_INSERT_USER] = {
 		.idx = RSPAMD_STAT_BACKEND_INSERT_USER,
-		.sql = "INSERT INTO users (name, learns) VALUES (?1, 0);",
+		.sql = "INSERT INTO users (name, learns) VALUES (?1, 0)",
 		.stmt = NULL,
 		.args = "T",
 		.result = SQLITE_DONE,
@@ -245,7 +255,7 @@ static struct rspamd_sqlite3_prstmt prepared_stmts[RSPAMD_STAT_BACKEND_MAX] =
 	},
 	[RSPAMD_STAT_BACKEND_INSERT_LANGUAGE] = {
 		.idx = RSPAMD_STAT_BACKEND_INSERT_LANGUAGE,
-		.sql = "INSERT INTO languages (name, learns) VALUES (?1, 0);",
+		.sql = "INSERT INTO languages (name, learns) VALUES (?1, 0)",
 		.stmt = NULL,
 		.args = "T",
 		.result = SQLITE_DONE,
@@ -254,7 +264,7 @@ static struct rspamd_sqlite3_prstmt prepared_stmts[RSPAMD_STAT_BACKEND_MAX] =
 	},
 	[RSPAMD_STAT_BACKEND_SAVE_TOKENIZER] = {
 		.idx = RSPAMD_STAT_BACKEND_SAVE_TOKENIZER,
-		.sql = "INSERT INTO tokenizer(data) VALUES (?1);",
+		.sql = "INSERT INTO tokenizer(data) VALUES (?1)",
 		.stmt = NULL,
 		.args = "B",
 		.result = SQLITE_DONE,
@@ -263,7 +273,7 @@ static struct rspamd_sqlite3_prstmt prepared_stmts[RSPAMD_STAT_BACKEND_MAX] =
 	},
 	[RSPAMD_STAT_BACKEND_LOAD_TOKENIZER] = {
 		.idx = RSPAMD_STAT_BACKEND_LOAD_TOKENIZER,
-		.sql = "SELECT data FROM tokenizer;",
+		.sql = "SELECT data FROM tokenizer",
 		.stmt = NULL,
 		.args = "",
 		.result = SQLITE_ROW,
@@ -272,7 +282,7 @@ static struct rspamd_sqlite3_prstmt prepared_stmts[RSPAMD_STAT_BACKEND_MAX] =
 	},
 	[RSPAMD_STAT_BACKEND_NTOKENS] = {
 		.idx = RSPAMD_STAT_BACKEND_NTOKENS,
-		.sql = "SELECT COUNT(*) FROM tokens;",
+		.sql = "SELECT COUNT(*) FROM tokens",
 		.stmt = NULL,
 		.args = "",
 		.result = SQLITE_ROW,
@@ -281,7 +291,7 @@ static struct rspamd_sqlite3_prstmt prepared_stmts[RSPAMD_STAT_BACKEND_MAX] =
 	},
 	[RSPAMD_STAT_BACKEND_NLANGUAGES] = {
 		.idx = RSPAMD_STAT_BACKEND_NLANGUAGES,
-		.sql = "SELECT COUNT(*) FROM languages;",
+		.sql = "SELECT COUNT(*) FROM languages",
 		.stmt = NULL,
 		.args = "",
 		.result = SQLITE_ROW,
@@ -290,7 +300,7 @@ static struct rspamd_sqlite3_prstmt prepared_stmts[RSPAMD_STAT_BACKEND_MAX] =
 	},
 	[RSPAMD_STAT_BACKEND_NUSERS] = {
 		.idx = RSPAMD_STAT_BACKEND_NUSERS,
-		.sql = "SELECT COUNT(*) FROM users;",
+		.sql = "SELECT COUNT(*) FROM users",
 		.stmt = NULL,
 		.args = "",
 		.result = SQLITE_ROW,
@@ -728,13 +738,25 @@ rspamd_sqlite3_process_tokens (struct rspamd_task *task,
 			}
 		}
 
-		if (rspamd_sqlite3_run_prstmt (task->task_pool, bk->sqlite, bk->prstmt,
-				RSPAMD_STAT_BACKEND_GET_TOKEN,
-				tok->data, rt->user_id, rt->lang_id, &iv) == SQLITE_OK) {
-			tok->values[id] = iv;
+		if (bk->enable_languages || bk->enable_users) {
+			if (rspamd_sqlite3_run_prstmt (task->task_pool, bk->sqlite, bk->prstmt,
+					RSPAMD_STAT_BACKEND_GET_TOKEN_FULL,
+					tok->data, rt->user_id, rt->lang_id, &iv) == SQLITE_OK) {
+				tok->values[id] = iv;
+			}
+			else {
+				tok->values[id] = 0.0;
+			}
 		}
 		else {
-			tok->values[id] = 0.0;
+			if (rspamd_sqlite3_run_prstmt (task->task_pool, bk->sqlite, bk->prstmt,
+					RSPAMD_STAT_BACKEND_GET_TOKEN_SIMPLE,
+					tok->data, &iv) == SQLITE_OK) {
+				tok->values[id] = iv;
+			}
+			else {
+				tok->values[id] = 0.0;
+			}
 		}
 
 		if (rt->cf->is_spam) {


More information about the Commits mailing list