aboutsummaryrefslogtreecommitdiff
path: root/src/datastore/plugin_datastore_sqlite.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-04-05 14:07:10 +0000
committerChristian Grothoff <christian@grothoff.org>2011-04-05 14:07:10 +0000
commitc0ef1c0414caf5d3f3e886df18584665026f9af8 (patch)
treebf9854a87c75cfc0d5ef375e3c07a7337ebaf0c9 /src/datastore/plugin_datastore_sqlite.c
parent887d927606be4def2e195da47e567009955fb679 (diff)
downloadgnunet-c0ef1c0414caf5d3f3e886df18584665026f9af8.tar.gz
gnunet-c0ef1c0414caf5d3f3e886df18584665026f9af8.zip
insanity
Diffstat (limited to 'src/datastore/plugin_datastore_sqlite.c')
-rw-r--r--src/datastore/plugin_datastore_sqlite.c42
1 files changed, 21 insertions, 21 deletions
diff --git a/src/datastore/plugin_datastore_sqlite.c b/src/datastore/plugin_datastore_sqlite.c
index eca82a6fb..216d9b7cf 100644
--- a/src/datastore/plugin_datastore_sqlite.c
+++ b/src/datastore/plugin_datastore_sqlite.c
@@ -31,7 +31,7 @@
31/** 31/**
32 * Enable or disable logging debug messages. 32 * Enable or disable logging debug messages.
33 */ 33 */
34#define DEBUG_SQLITE GNUNET_NO 34#define DEBUG_SQLITE GNUNET_YES
35 35
36/** 36/**
37 * We allocate items on the stack at times. To prevent a stack 37 * We allocate items on the stack at times. To prevent a stack
@@ -174,14 +174,14 @@ create_indices (sqlite3 * dbh)
174 /* create indices */ 174 /* create indices */
175 sqlite3_exec (dbh, 175 sqlite3_exec (dbh,
176 "CREATE INDEX idx_hash ON gn090 (hash)", NULL, NULL, NULL); 176 "CREATE INDEX idx_hash ON gn090 (hash)", NULL, NULL, NULL);
177 sqlite3_exec (dbh, "CREATE INDEX idx_prio ON gn090 (prio)", NULL, NULL,
178 NULL);
179 sqlite3_exec (dbh, "CREATE INDEX idx_expire_prio ON gn090 (expire,prio)", NULL, NULL,
180 NULL);
181 sqlite3_exec (dbh, 177 sqlite3_exec (dbh,
182 "CREATE INDEX idx_hash_vhash ON gn090 (hash,vhash)", NULL, 178 "CREATE INDEX idx_hash_vhash ON gn090 (hash,vhash)", NULL,
183 NULL, NULL); 179 NULL, NULL);
184 sqlite3_exec (dbh, "CREATE INDEX idx_comb ON gn090 (prio,expire,anonLevel,hash)", 180 sqlite3_exec (dbh, "CREATE INDEX idx_expire_repl ON gn090 (expire ASC,repl DESC)", NULL, NULL,
181 NULL);
182 sqlite3_exec (dbh, "CREATE INDEX idx_comb ON gn090 (anonLevel ASC,expire ASC,prio,type,hash)",
183 NULL, NULL, NULL);
184 sqlite3_exec (dbh, "CREATE INDEX expire ON gn090 (expire)",
185 NULL, NULL, NULL); 185 NULL, NULL, NULL);
186} 186}
187 187
@@ -265,9 +265,15 @@ database_setup (const struct GNUNET_CONFIGURATION_Handle *cfg,
265 "PRAGMA synchronous=OFF", NULL, NULL, ENULL)); 265 "PRAGMA synchronous=OFF", NULL, NULL, ENULL));
266 CHECK (SQLITE_OK == 266 CHECK (SQLITE_OK ==
267 sqlite3_exec (plugin->dbh, 267 sqlite3_exec (plugin->dbh,
268 "PRAGMA legacy_file_format=OFF", NULL, NULL, ENULL));
269 CHECK (SQLITE_OK ==
270 sqlite3_exec (plugin->dbh,
268 "PRAGMA auto_vacuum=INCREMENTAL", NULL, NULL, ENULL)); 271 "PRAGMA auto_vacuum=INCREMENTAL", NULL, NULL, ENULL));
269 CHECK (SQLITE_OK == 272 CHECK (SQLITE_OK ==
270 sqlite3_exec (plugin->dbh, 273 sqlite3_exec (plugin->dbh,
274 "PRAGMA locking_mode=EXCLUSIVE", NULL, NULL, ENULL));
275 CHECK (SQLITE_OK ==
276 sqlite3_exec (plugin->dbh,
271 "PRAGMA count_changes=OFF", NULL, NULL, ENULL)); 277 "PRAGMA count_changes=OFF", NULL, NULL, ENULL));
272 CHECK (SQLITE_OK == 278 CHECK (SQLITE_OK ==
273 sqlite3_exec (plugin->dbh, 279 sqlite3_exec (plugin->dbh,
@@ -322,26 +328,24 @@ database_setup (const struct GNUNET_CONFIGURATION_Handle *cfg,
322 sqlite3_finalize (stmt); 328 sqlite3_finalize (stmt);
323 329
324 if ((sq_prepare (plugin->dbh, 330 if ((sq_prepare (plugin->dbh,
325 "UPDATE gn090 SET prio = prio + ?, expire = MAX(expire,?) WHERE " 331 "UPDATE gn090 SET prio = prio + ?, expire = MAX(expire,?) WHERE _ROWID_ = ?",
326 "_ROWID_ = ?",
327 &plugin->updPrio) != SQLITE_OK) || 332 &plugin->updPrio) != SQLITE_OK) ||
328 (sq_prepare (plugin->dbh, 333 (sq_prepare (plugin->dbh,
329 "UPDATE gn090 SET repl = MAX (0, repl - 1) WHERE " 334 "UPDATE gn090 SET repl = MAX (0, repl - 1) WHERE _ROWID_ = ?",
330 "_ROWID_ = ?",
331 &plugin->updRepl) != SQLITE_OK) || 335 &plugin->updRepl) != SQLITE_OK) ||
332 (sq_prepare (plugin->dbh, 336 (sq_prepare (plugin->dbh,
333 "SELECT type,prio,anonLevel,expire,hash,value,_ROWID_ FROM gn090 WHERE (expire > ?1) " 337 "SELECT type,prio,anonLevel,expire,hash,value,_ROWID_ FROM gn090 WHERE expire > ?"
334 " ORDER BY repl DESC, Random() LIMIT 1", 338 " ORDER BY repl DESC, Random() LIMIT 1",
335 &plugin->selRepl) != SQLITE_OK) || 339 &plugin->selRepl) != SQLITE_OK) ||
336 (sq_prepare (plugin->dbh, 340 (sq_prepare (plugin->dbh,
337 "SELECT type,prio,anonLevel,expire,hash,value,_ROWID_ FROM gn090 WHERE (expire < ?1) " 341 "SELECT type,prio,anonLevel,expire,hash,value,_ROWID_ FROM gn090 "
338 " OR NOT EXISTS (SELECT 1 from gn090 WHERE (expire < ?1)) " 342 " WHERE NOT EXISTS (SELECT 1 FROM gn090 WHERE expire < ?1 LIMIT 1) OR expire < ?1 "
339 " ORDER BY prio ASC LIMIT 1", 343 " ORDER BY prio ASC LIMIT 1",
340 &plugin->selExpi) != SQLITE_OK) || 344 &plugin->selExpi) != SQLITE_OK) ||
341 (sq_prepare (plugin->dbh, 345 (sq_prepare (plugin->dbh,
342 "INSERT INTO gn090 (repl, type, prio, " 346 "INSERT INTO gn090 (repl, type, prio, "
343 "anonLevel, expire, hash, vhash, value) VALUES " 347 "anonLevel, expire, hash, vhash, value) "
344 "(?, ?, ?, ?, ?, ?, ?, ?)", 348 "VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
345 &plugin->insertContent) != SQLITE_OK) || 349 &plugin->insertContent) != SQLITE_OK) ||
346 (sq_prepare (plugin->dbh, 350 (sq_prepare (plugin->dbh,
347 "DELETE FROM gn090 WHERE _ROWID_ = ?", 351 "DELETE FROM gn090 WHERE _ROWID_ = ?",
@@ -1032,7 +1036,7 @@ sqlite_plugin_iter_zero_anonymity (void *cls,
1032 now = GNUNET_TIME_absolute_get (); 1036 now = GNUNET_TIME_absolute_get ();
1033 GNUNET_asprintf (&q, 1037 GNUNET_asprintf (&q,
1034 "SELECT type,prio,anonLevel,expire,hash,value,_ROWID_ FROM gn090 " 1038 "SELECT type,prio,anonLevel,expire,hash,value,_ROWID_ FROM gn090 "
1035 "WHERE (prio = ?1 AND expire > %llu AND anonLevel = 0 AND type=%d AND hash < ?2) " 1039 "WHERE (anonLevel = 0 AND expire > %llu AND prio = ?1 AND type=%d AND hash < ?2) "
1036 "ORDER BY hash DESC LIMIT 1", 1040 "ORDER BY hash DESC LIMIT 1",
1037 (unsigned long long) now.abs_value, 1041 (unsigned long long) now.abs_value,
1038 type); 1042 type);
@@ -1048,7 +1052,7 @@ sqlite_plugin_iter_zero_anonymity (void *cls,
1048 GNUNET_free (q); 1052 GNUNET_free (q);
1049 GNUNET_asprintf (&q, 1053 GNUNET_asprintf (&q,
1050 "SELECT type,prio,anonLevel,expire,hash,value,_ROWID_ FROM gn090 " 1054 "SELECT type,prio,anonLevel,expire,hash,value,_ROWID_ FROM gn090 "
1051 "WHERE (prio < ?1 AND expire > %llu AND anonLevel = 0 AND type=%d) " 1055 "WHERE (anonLevel = 0 AND expire > %llu AND prio < ?1 AND type=%d) "
1052 "ORDER BY prio DESC, hash DESC LIMIT 1", 1056 "ORDER BY prio DESC, hash DESC LIMIT 1",
1053 (unsigned long long) now.abs_value, 1057 (unsigned long long) now.abs_value,
1054 type); 1058 type);
@@ -1531,10 +1535,6 @@ sqlite_plugin_get_size (void *cls)
1531 _("sqlite version to old to determine size, assuming zero\n")); 1535 _("sqlite version to old to determine size, assuming zero\n"));
1532 return 0; 1536 return 0;
1533 } 1537 }
1534 if (SQLITE_OK !=
1535 sqlite3_exec (plugin->dbh,
1536 "VACUUM", NULL, NULL, ENULL))
1537 abort ();
1538 CHECK (SQLITE_OK == 1538 CHECK (SQLITE_OK ==
1539 sqlite3_exec (plugin->dbh, 1539 sqlite3_exec (plugin->dbh,
1540 "VACUUM", NULL, NULL, ENULL)); 1540 "VACUUM", NULL, NULL, ENULL));