diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-04-05 14:07:10 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-04-05 14:07:10 +0000 |
commit | c0ef1c0414caf5d3f3e886df18584665026f9af8 (patch) | |
tree | bf9854a87c75cfc0d5ef375e3c07a7337ebaf0c9 /src/datastore/plugin_datastore_sqlite.c | |
parent | 887d927606be4def2e195da47e567009955fb679 (diff) | |
download | gnunet-c0ef1c0414caf5d3f3e886df18584665026f9af8.tar.gz gnunet-c0ef1c0414caf5d3f3e886df18584665026f9af8.zip |
insanity
Diffstat (limited to 'src/datastore/plugin_datastore_sqlite.c')
-rw-r--r-- | src/datastore/plugin_datastore_sqlite.c | 42 |
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)); |