From 1f5b0222277e27e31cfe33bc14cb2fa83e824e3b Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Thu, 25 Jun 2015 18:58:27 +0100 Subject: Fix SQL queries. --- src/libstat/backends/sqlite3_backend.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'src/libstat/backends') diff --git a/src/libstat/backends/sqlite3_backend.c b/src/libstat/backends/sqlite3_backend.c index 79198976e..206317a98 100644 --- a/src/libstat/backends/sqlite3_backend.c +++ b/src/libstat/backends/sqlite3_backend.c @@ -49,8 +49,8 @@ struct rspamd_stat_sqlite3_rt { struct rspamd_stat_sqlite3_ctx *ctx; struct rspamd_task *task; struct rspamd_stat_sqlite3_db *db; - const gchar *user; - const gchar *language; + gint64 user_id; + gint64 lang_id; }; static const char *create_tables_sql = @@ -67,8 +67,8 @@ static const char *create_tables_sql = ");" "CREATE TABLE tokens(" "token INTEGER NOT NULL," - "user INTEGER REFERENCES users(id) ON DELETE CASCADE," - "language INTEGER REFERENCES languages(id) ON DELETE CASCADE," + "user INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE," + "language INTEGER NOT NULL REFERENCES languages(id) ON DELETE CASCADE," "value INTEGER," "CONSTRAINT tid UNIQUE (token, user, language) ON CONFLICT REPLACE" ");" @@ -130,15 +130,16 @@ static struct rspamd_sqlite3_prstmt { .sql = "SELECT value FROM tokens " "LEFT JOIN languages ON tokens.language=languages.id " "LEFT JOIN users ON tokens.user=users.id " - "WHERE token=?1 AND users.name=?2 AND languages.name=?3;", + "WHERE token=?1 AND (users.id=?2 OR users.id=0) " + "AND (languages.id=?3 OR languages.id=0);", .stmt = NULL, - .args = "ITT", + .args = "III", .result = SQLITE_ROW, .ret = "I" }, { .idx = RSPAMD_STAT_BACKEND_SET_TOKEN, - .sql = "INSERT OR REPLACE INTO tokens(token, user, language, value)" + .sql = "INSERT OR REPLACE INTO tokens (token, user, language, value) " "VALUES (?1, ?2, ?3, ?4);", .stmt = NULL, .args = "IIII", @@ -234,7 +235,7 @@ rspamd_sqlite3_run_prstmt (struct rspamd_stat_sqlite3_db *db, int idx, ...) va_start (ap, idx); nargs = 1; - for (i = 0, rowid = 1; argtypes[i] != '\0'; i ++, rowid ++) { + for (i = 0, rowid = 1; argtypes[i] != '\0'; i ++) { switch (argtypes[i]) { case 'T': @@ -498,7 +499,7 @@ rspamd_sqlite3_runtime (struct rspamd_task *task, bk = g_hash_table_lookup (ctx->files, stcf); if (bk) { - rt = rspamd_mempool_alloc (task->task_pool, sizeof (*rt)); + rt = rspamd_mempool_alloc0 (task->task_pool, sizeof (*rt)); rt->ctx = ctx; rt->db = bk; rt->task = task; @@ -534,7 +535,7 @@ rspamd_sqlite3_process_token (struct rspamd_task *task, struct token_node_s *tok /* TODO: language and user support */ if (rspamd_sqlite3_run_prstmt (bk, RSPAMD_STAT_BACKEND_GET_TOKEN, - idx, SQLITE3_DEFAULT, SQLITE3_DEFAULT, &iv) == SQLITE_OK) { + idx, rt->user_id, rt->lang_id, &iv) == SQLITE_OK) { res->value = iv; } else { @@ -577,7 +578,7 @@ rspamd_sqlite3_learn_token (struct rspamd_task *task, struct token_node_s *tok, memcpy (&idx, tok->data, sizeof (idx)); if (rspamd_sqlite3_run_prstmt (bk, RSPAMD_STAT_BACKEND_SET_TOKEN, - idx, 0, 0, iv) == SQLITE_OK) { + idx, rt->user_id, rt->lang_id, iv) == SQLITE_OK) { return FALSE; } -- cgit v1.2.3