Browse Source

Enable foreign keys in sqlite3.

tags/1.0.3
Vsevolod Stakhov 8 years ago
parent
commit
762aeb28d3
2 changed files with 15 additions and 2 deletions
  1. 7
    1
      src/libserver/fuzzy_backend.c
  2. 8
    1
      src/libutil/sqlite_utils.c

+ 7
- 1
src/libserver/fuzzy_backend.c View File

@@ -408,7 +408,8 @@ rspamd_fuzzy_backend_open (const gchar *path, GError **err)
gint fd;
struct rspamd_fuzzy_backend *backend;
static const char sqlite_wal[] = "PRAGMA journal_mode=\"wal\";",
fallback_journal[] = "PRAGMA journal_mode=\"off\";";
fallback_journal[] = "PRAGMA journal_mode=\"off\";",
foreign_keys[] = "PRAGMA foreign_keys=\"ON\";";
int rc;

if (path == NULL) {
@@ -466,6 +467,11 @@ rspamd_fuzzy_backend_open (const gchar *path, GError **err)
sqlite3_exec (backend->db, fallback_journal, NULL, NULL, NULL);
}

if ((rc = sqlite3_exec (backend->db, foreign_keys, NULL, NULL, NULL)) !=
SQLITE_OK) {
msg_warn_fuzzy_backend ("foreign keys are not supported", rc);
}

/* Cleanup database */
rspamd_fuzzy_backend_run_simple (RSPAMD_FUZZY_BACKEND_VACUUM, backend, NULL);


+ 8
- 1
src/libutil/sqlite_utils.c View File

@@ -249,7 +249,8 @@ rspamd_sqlite3_open_or_create (rspamd_mempool_t *pool, const gchar *path, const
gchar lock_path[PATH_MAX], dbdir[PATH_MAX], *pdir;
static const char sqlite_wal[] = "PRAGMA journal_mode=\"wal\";",
exclusive_lock_sql[] = "PRAGMA locking_mode=\"exclusive\";",
fsync_sql[] = "PRAGMA synchronous=1;";
fsync_sql[] = "PRAGMA synchronous=1;",
foreign_keys[] = "PRAGMA foreign_keys=\"ON\";";
gboolean create = FALSE, has_lock = FALSE;

flags = SQLITE_OPEN_READWRITE;
@@ -377,6 +378,12 @@ rspamd_sqlite3_open_or_create (rspamd_mempool_t *pool, const gchar *path, const
sqlite3_errmsg (sqlite));
}

if ((rc = sqlite3_exec (sqlite, foreign_keys, NULL, NULL, NULL)) !=
SQLITE_OK) {
msg_warn_pool ("cannot enable foreign keys: %s",
sqlite3_errmsg (sqlite));
}

if (has_lock) {
msg_debug_pool ("removing lock from %s", lock_path);
rspamd_file_unlock (lock_fd, FALSE);

Loading…
Cancel
Save