[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [gnunet] branch master updated: SQLite doesn't constant fol
From: |
gnunet |
Subject: |
[GNUnet-SVN] [gnunet] branch master updated: SQLite doesn't constant fold |
Date: |
Sun, 14 Jan 2018 08:03:41 +0100 |
This is an automated email from the git hooks/post-receive script.
david-barksdale pushed a commit to branch master
in repository gnunet.
The following commit(s) were added to refs/heads/master by this push:
new 54323fd66 SQLite doesn't constant fold
54323fd66 is described below
commit 54323fd662beaa9004bdfcf68bac78d613d90c74
Author: David Barksdale <address@hidden>
AuthorDate: Sun Jan 14 01:03:12 2018 -0600
SQLite doesn't constant fold
---
src/datastore/plugin_datastore_sqlite.c | 82 ++++++++++++++++++++++++++-------
1 file changed, 66 insertions(+), 16 deletions(-)
diff --git a/src/datastore/plugin_datastore_sqlite.c
b/src/datastore/plugin_datastore_sqlite.c
index cc56f5959..d51fd3e01 100644
--- a/src/datastore/plugin_datastore_sqlite.c
+++ b/src/datastore/plugin_datastore_sqlite.c
@@ -135,7 +135,7 @@ struct Plugin
/**
* Precompiled SQL for selection
*/
- sqlite3_stmt *get;
+ sqlite3_stmt *get[8];
/**
* Should the database be dropped on shutdown?
@@ -386,12 +386,63 @@ database_setup (const struct GNUNET_CONFIGURATION_Handle
*cfg,
(SQLITE_OK !=
sq_prepare (plugin->dbh,
"SELECT " RESULT_COLUMNS " FROM gn091 "
- "WHERE _ROWID_ >= ? AND "
- "(rvalue >= ? OR 0 = ?) AND "
- "(hash = ? OR 0 = ?) AND "
- "(type = ? OR 0 = ?) "
+ "WHERE _ROWID_ >= ?1 "
+ "ORDER BY _ROWID_ ASC LIMIT 1",
+ &plugin->get[0])) ||
+ (SQLITE_OK !=
+ sq_prepare (plugin->dbh,
+ "SELECT " RESULT_COLUMNS " FROM gn091 "
+ "WHERE _ROWID_ >= ?1 AND "
+ "type = ?4 "
+ "ORDER BY _ROWID_ ASC LIMIT 1",
+ &plugin->get[1])) ||
+ (SQLITE_OK !=
+ sq_prepare (plugin->dbh,
+ "SELECT " RESULT_COLUMNS " FROM gn091 "
+ "WHERE _ROWID_ >= ?1 AND "
+ "hash = ?3 "
+ "ORDER BY _ROWID_ ASC LIMIT 1",
+ &plugin->get[2])) ||
+ (SQLITE_OK !=
+ sq_prepare (plugin->dbh,
+ "SELECT " RESULT_COLUMNS " FROM gn091 "
+ "WHERE _ROWID_ >= ?1 AND "
+ "hash = ?3 AND "
+ "type = ?4 "
+ "ORDER BY _ROWID_ ASC LIMIT 1",
+ &plugin->get[3])) ||
+ (SQLITE_OK !=
+ sq_prepare (plugin->dbh,
+ "SELECT " RESULT_COLUMNS " FROM gn091 "
+ "WHERE _ROWID_ >= ?1 AND "
+ "rvalue >= ?2 "
+ "ORDER BY _ROWID_ ASC LIMIT 1",
+ &plugin->get[4])) ||
+ (SQLITE_OK !=
+ sq_prepare (plugin->dbh,
+ "SELECT " RESULT_COLUMNS " FROM gn091 "
+ "WHERE _ROWID_ >= ?1 AND "
+ "rvalue >= ?2 AND "
+ "type = ?4 "
"ORDER BY _ROWID_ ASC LIMIT 1",
- &plugin->get)) ||
+ &plugin->get[5])) ||
+ (SQLITE_OK !=
+ sq_prepare (plugin->dbh,
+ "SELECT " RESULT_COLUMNS " FROM gn091 "
+ "WHERE _ROWID_ >= ?1 AND "
+ "rvalue >= ?2 AND "
+ "hash = ?3 "
+ "ORDER BY _ROWID_ ASC LIMIT 1",
+ &plugin->get[6])) ||
+ (SQLITE_OK !=
+ sq_prepare (plugin->dbh,
+ "SELECT " RESULT_COLUMNS " FROM gn091 "
+ "WHERE _ROWID_ >= ?1 AND "
+ "rvalue >= ?2 AND "
+ "hash = ?3 AND "
+ "type = ?4 "
+ "ORDER BY _ROWID_ ASC LIMIT 1",
+ &plugin->get[7])) ||
(SQLITE_OK !=
sq_prepare (plugin->dbh,
"DELETE FROM gn091 WHERE _ROWID_ = ?",
@@ -445,8 +496,9 @@ database_shutdown (struct Plugin *plugin)
sqlite3_finalize (plugin->selZeroAnon);
if (NULL != plugin->insertContent)
sqlite3_finalize (plugin->insertContent);
- if (NULL != plugin->get)
- sqlite3_finalize (plugin->get);
+ for (int i = 0; i < 8; ++i)
+ if (NULL != plugin->get[i])
+ sqlite3_finalize (plugin->get[i]);
result = sqlite3_close (plugin->dbh);
#if SQLITE_VERSION_NUMBER >= 3007000
if (result == SQLITE_BUSY)
@@ -843,18 +895,16 @@ sqlite_plugin_get_key (void *cls,
{
struct Plugin *plugin = cls;
uint64_t rvalue;
- uint16_t use_rvalue = random;
+ int use_rvalue = random;
uint32_t type32 = (uint32_t) type;
- uint16_t use_type = GNUNET_BLOCK_TYPE_ANY != type;
- uint16_t use_key = NULL != key;
+ int use_type = GNUNET_BLOCK_TYPE_ANY != type;
+ int use_key = NULL != key;
+ sqlite3_stmt *stmt = plugin->get[use_rvalue * 4 + use_key * 2 + use_type];
struct GNUNET_SQ_QueryParam params[] = {
GNUNET_SQ_query_param_uint64 (&next_uid),
GNUNET_SQ_query_param_uint64 (&rvalue),
- GNUNET_SQ_query_param_uint16 (&use_rvalue),
GNUNET_SQ_query_param_auto_from_type (key),
- GNUNET_SQ_query_param_uint16 (&use_key),
GNUNET_SQ_query_param_uint32 (&type32),
- GNUNET_SQ_query_param_uint16 (&use_type),
GNUNET_SQ_query_param_end
};
@@ -868,14 +918,14 @@ sqlite_plugin_get_key (void *cls,
rvalue = 0;
if (GNUNET_OK !=
- GNUNET_SQ_bind (plugin->get,
+ GNUNET_SQ_bind (stmt,
params))
{
proc (proc_cls, NULL, 0, NULL, 0, 0, 0, 0, GNUNET_TIME_UNIT_ZERO_ABS, 0);
return;
}
execute_get (plugin,
- plugin->get,
+ stmt,
proc,
proc_cls);
}
--
To stop receiving notification emails like this one, please contact
address@hidden
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] [gnunet] branch master updated: SQLite doesn't constant fold,
gnunet <=