aboutsummaryrefslogtreecommitdiff
path: root/src/datacache/plugin_datacache_sqlite.c
diff options
context:
space:
mode:
authorgrothoff <grothoff@140774ce-b5e7-0310-ab8b-a85725594a96>2012-11-12 11:00:20 +0000
committergrothoff <grothoff@140774ce-b5e7-0310-ab8b-a85725594a96>2012-11-12 11:00:20 +0000
commitc431b1460db391fdf9971337080aeafb7db38e08 (patch)
tree519caa183917783d800d87118973ca5ef4e65230 /src/datacache/plugin_datacache_sqlite.c
parenta30e8f599b70ae77745d0d9591abd5bffafc39a7 (diff)
support running purely in-memory
git-svn-id: https://gnunet.org/svn/gnunet@24908 140774ce-b5e7-0310-ab8b-a85725594a96
Diffstat (limited to 'src/datacache/plugin_datacache_sqlite.c')
-rw-r--r--src/datacache/plugin_datacache_sqlite.c48
1 files changed, 34 insertions, 14 deletions
diff --git a/src/datacache/plugin_datacache_sqlite.c b/src/datacache/plugin_datacache_sqlite.c
index 62d5445b41..74fa385441 100644
--- a/src/datacache/plugin_datacache_sqlite.c
+++ b/src/datacache/plugin_datacache_sqlite.c
@@ -364,21 +364,33 @@ libgnunet_plugin_datacache_sqlite_init (void *cls)
sqlite3 *dbh;
char *emsg;
- fn = GNUNET_DISK_mktemp ("gnunet-datacache");
- if (fn == NULL)
+ if (GNUNET_YES ==
+ GNUNET_CONFIGURATION_get_value_yesno (env->cfg,
+ "datacache-sqlite",
+ "IN_MEMORY"))
{
- GNUNET_break (0);
- return NULL;
+ if (SQLITE_OK != sqlite3_open (":memory:", &dbh))
+ return NULL;
+ fn_utf8 = NULL;
}
- /* fn should be UTF-8-encoded. If it isn't, it's a bug. */
- fn_utf8 = GNUNET_strdup (fn);
- if (SQLITE_OK != sqlite3_open (fn_utf8, &dbh))
+ else
{
+ fn = GNUNET_DISK_mktemp ("gnunet-datacache");
+ if (fn == NULL)
+ {
+ GNUNET_break (0);
+ return NULL;
+ }
+ /* fn should be UTF-8-encoded. If it isn't, it's a bug. */
+ fn_utf8 = GNUNET_strdup (fn);
+ if (SQLITE_OK != sqlite3_open (fn_utf8, &dbh))
+ {
+ GNUNET_free (fn);
+ GNUNET_free (fn_utf8);
+ return NULL;
+ }
GNUNET_free (fn);
- GNUNET_free (fn_utf8);
- return NULL;
}
- GNUNET_free (fn);
SQLITE3_EXEC (dbh, "PRAGMA temp_store=MEMORY");
SQLITE3_EXEC (dbh, "PRAGMA locking_mode=EXCLUSIVE");
@@ -386,6 +398,12 @@ libgnunet_plugin_datacache_sqlite_init (void *cls)
SQLITE3_EXEC (dbh, "PRAGMA synchronous=OFF");
SQLITE3_EXEC (dbh, "PRAGMA count_changes=OFF");
SQLITE3_EXEC (dbh, "PRAGMA page_size=4092");
+ if (GNUNET_YES ==
+ GNUNET_CONFIGURATION_get_value_yesno (env->cfg,
+ "datacache-sqlite",
+ "IN_MEMORY"))
+ SQLITE3_EXEC (dbh, "PRAGMA sqlite_temp_store=3");
+
SQLITE3_EXEC (dbh,
"CREATE TABLE ds090 (" " type INTEGER NOT NULL DEFAULT 0,"
" expire INTEGER NOT NULL DEFAULT 0,"
@@ -425,9 +443,10 @@ libgnunet_plugin_datacache_sqlite_done (void *cls)
#endif
#if !WINDOWS || defined(__CYGWIN__)
- if (0 != UNLINK (plugin->fn))
+ if ( (NULL != plugin->fn) &&
+ (0 != UNLINK (plugin->fn)) )
LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "unlink", plugin->fn);
- GNUNET_free (plugin->fn);
+ GNUNET_free_non_null (plugin->fn);
#endif
result = sqlite3_close (plugin->dbh);
#if SQLITE_VERSION_NUMBER >= 3007000
@@ -453,9 +472,10 @@ libgnunet_plugin_datacache_sqlite_done (void *cls)
LOG_SQLITE (plugin->dbh, GNUNET_ERROR_TYPE_ERROR, "sqlite3_close");
#if WINDOWS && !defined(__CYGWIN__)
- if (0 != UNLINK (plugin->fn))
+ if ( (NULL != plugin->fn) &&
+ (0 != UNLINK (plugin->fn)) )
LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "unlink", plugin->fn);
- GNUNET_free (plugin->fn);
+ GNUNET_free_non_null (plugin->fn);
#endif
GNUNET_free (plugin);
GNUNET_free (api);