From 6f9c566127d0737ecd529f458dc28b7fc02e6eb9 Mon Sep 17 00:00:00 2001 From: Christophe Genevey Metat Date: Mon, 27 Jun 2016 14:39:42 +0000 Subject: adapt gnunet-regex-simulation-profiler to libgnunetmy --- src/regex/Makefile.am | 1 + src/regex/gnunet-regex-simulation-profiler.c | 131 ++++++++++++--------------- 2 files changed, 60 insertions(+), 72 deletions(-) (limited to 'src') diff --git a/src/regex/Makefile.am b/src/regex/Makefile.am index 6204a47d8..7f0fb707f 100644 --- a/src/regex/Makefile.am +++ b/src/regex/Makefile.am @@ -94,6 +94,7 @@ gnunet_regex_simulation_profiler_LDADD = \ $(top_builddir)/src/util/libgnunetutil.la \ libgnunetregex_internal.a \ $(top_builddir)/src/dht/libgnunetdht.la \ + $(top_builddir)/src/my/libgnunetmy.la \ $(top_builddir)/src/mysql/libgnunetmysql.la endif diff --git a/src/regex/gnunet-regex-simulation-profiler.c b/src/regex/gnunet-regex-simulation-profiler.c index 585d528b7..d9d02bca7 100644 --- a/src/regex/gnunet-regex-simulation-profiler.c +++ b/src/regex/gnunet-regex-simulation-profiler.c @@ -23,6 +23,7 @@ * @brief Regex profiler that dumps all DFAs into a database instead of * using the DHT (with cadet). * @author Maximilian Szengel + * @author Christophe Genevey * */ @@ -30,6 +31,7 @@ #include "gnunet_util_lib.h" #include "regex_internal_lib.h" #include "gnunet_mysql_lib.h" +#include "gnunet_my_lib.h" #include /** @@ -302,25 +304,6 @@ do_abort (void *cls) GNUNET_SCHEDULER_shutdown (); } - -/** - * Dummy function for prepared select. Always returns #GNUNET_OK. - * - * @param cls closure - * @param num_values number of values. - * @param values returned values from select stmt. - * - * @return #GNUNET_OK - */ -static int -return_ok (void *cls, - unsigned int num_values, - MYSQL_BIND * values) -{ - return GNUNET_OK; -} - - /** * Iterator over all states that inserts each state into the MySQL db. * @@ -333,44 +316,37 @@ return_ok (void *cls, */ static void regex_iterator (void *cls, - const struct GNUNET_HashCode *key, - const char *proof, + const struct GNUNET_HashCode *key, + const char *proof, int accepting, - unsigned int num_edges, + unsigned int num_edges, const struct REGEX_BLOCK_Edge *edges) { unsigned int i; int result; - unsigned long k_length; - unsigned long e_length; - unsigned long d_length; - MYSQL_BIND rbind[1]; - unsigned long long total; + + uint32_t iaccepting = (uint32_t)accepting; + uint64_t total; GNUNET_assert (NULL != mysql_ctx); for (i = 0; i < num_edges; i++) { - k_length = sizeof (struct GNUNET_HashCode); - e_length = strlen (edges[i].label); - d_length = sizeof (struct GNUNET_HashCode); - memset (rbind, 0, sizeof (rbind)); - total = -1; - rbind[0].buffer_type = MYSQL_TYPE_LONGLONG; - rbind[0].buffer = &total; - rbind[0].is_unsigned = GNUNET_YES; - - result = - GNUNET_MYSQL_statement_run_prepared_select (select_stmt_handle, 1, - rbind, &return_ok, NULL, - MYSQL_TYPE_BLOB, key, - sizeof (struct - GNUNET_HashCode), - &k_length, - MYSQL_TYPE_STRING, - edges[i].label, - strlen (edges[i].label), - &e_length, -1); + struct GNUNET_MY_QueryParam params_select[] = { + GNUNET_MY_query_param_auto_from_type (key), + GNUNET_MY_query_param_fixed_size(edges[i].label, strlen (edges[i].label)), + GNUNET_MY_query_param_end + }; + + struct GNUNET_MY_ResultSpec results_select[] = { + GNUNET_MY_result_spec_uint64 (&total), + GNUNET_MY_result_spec_end + }; + + result = + GNUNET_MY_exec_prepared (mysql_ctx, + select_stmt_handle, + params_select); if (GNUNET_SYSERR == result) { @@ -380,24 +356,36 @@ regex_iterator (void *cls, return; } + result = + GNUNET_MY_extract_result (select_stmt_handle, + results_select); + + if (GNUNET_SYSERR == result) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Error extracting result mysql select statement\n"); + GNUNET_SCHEDULER_add_now (&do_abort, NULL); + return; + } + if (-1 != total && total > 0) { GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Total: %llu (%s, %s)\n", total, GNUNET_h2s (key), edges[i].label); } - result = - GNUNET_MYSQL_statement_run_prepared (stmt_handle, NULL, - MYSQL_TYPE_BLOB, key, - sizeof (struct GNUNET_HashCode), - &k_length, MYSQL_TYPE_STRING, - edges[i].label, - strlen (edges[i].label), &e_length, - MYSQL_TYPE_BLOB, - &edges[i].destination, - sizeof (struct GNUNET_HashCode), - &d_length, MYSQL_TYPE_LONG, - &accepting, GNUNET_YES, -1); + struct GNUNET_MY_QueryParam params_stmt[] = { + GNUNET_MY_query_param_auto_from_type (&key), + GNUNET_MY_query_param_fixed_size (edges[i].label, strlen (edges[i].label)), + GNUNET_MY_query_param_auto_from_type (&edges[i].destination), + GNUNET_MY_query_param_uint32 (&iaccepting), + GNUNET_MY_query_param_end + }; + + result = + GNUNET_MY_exec_prepared (mysql_ctx, + stmt_handle, + params_stmt); if (0 == result) { @@ -426,19 +414,18 @@ regex_iterator (void *cls, if (0 == num_edges) { - k_length = sizeof (struct GNUNET_HashCode); - e_length = 0; - d_length = 0; - - result = - GNUNET_MYSQL_statement_run_prepared (stmt_handle, NULL, - MYSQL_TYPE_BLOB, key, - sizeof (struct GNUNET_HashCode), - &k_length, MYSQL_TYPE_STRING, NULL, - 0, &e_length, MYSQL_TYPE_BLOB, - NULL, 0, &d_length, - MYSQL_TYPE_LONG, &accepting, - GNUNET_YES, -1); + struct GNUNET_MY_QueryParam params_stmt[] = { + GNUNET_MY_query_param_auto_from_type (key), + GNUNET_MY_query_param_fixed_size (NULL, 0), + GNUNET_MY_query_param_auto_from_type (NULL), + GNUNET_MY_query_param_uint32 (&iaccepting), + GNUNET_MY_query_param_end + }; + + result = + GNUNET_MY_exec_prepared(mysql_ctx, + stmt_handle, + params_stmt); if (1 != result && 0 != result) { -- cgit v1.2.3