if (mysql_stmt_bind_param (stmt,
qbind))
{
- GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "mysql",
+ GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR,
+ "my",
_("`%s' failed at %s:%d with error: %s\n"),
- "mysql_stmt_bind_param", __FILE__, __LINE__,
+ "mysql_stmt_bind_param",
+ __FILE__, __LINE__,
mysql_stmt_error (stmt));
GNUNET_MYSQL_statements_invalidate (mc);
return GNUNET_SYSERR;
if (mysql_stmt_execute (stmt))
{
- GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "mysql",
+ GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR,
+ "my",
_("`%s' failed at %s:%d with error: %s\n"),
"mysql_stmt_execute", __FILE__, __LINE__,
mysql_stmt_error (stmt));
GNUNET_MYSQL_statements_invalidate (mc);
return GNUNET_SYSERR;
}
-
GNUNET_MY_cleanup_query (params,
qbind);
}
-
return GNUNET_OK;
}
* Extract results from a query result according to the given
* specification. Always fetches the next row.
*
- *
* @param sh statement that returned results
* @param rs specification to extract for
* @return
stmt = GNUNET_MYSQL_statement_get_stmt (sh);
if (NULL == stmt)
{
- GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "mysql",
- ("`%s' failed at %s:%d with error: %s\n"),
- "mysql_stmt_bind_result", __FILE__, __LINE__,
- mysql_stmt_error (stmt));
+ GNUNET_break (0);
return GNUNET_SYSERR;
}
+ if (NULL == rs)
+ {
+ mysql_stmt_free_result (stmt);
+ return GNUNET_NO;
+ }
num_fields = 0;
for (i=0;NULL != rs[i].pre_conv;i++)
}
field_off += rp->num_fields;
}
+
if (mysql_stmt_bind_result (stmt, result))
{
GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR,
"my",
- _("`%s' failed at %s:%d with error: %s\n"),
- "mysql_stmt_bind_result", __FILE__, __LINE__,
+ _("%s failed at %s:%d with error: %s\n"),
+ "mysql_stmt_bind_result",
+ __FILE__, __LINE__,
mysql_stmt_error (stmt));
return GNUNET_SYSERR;
}
-
+#if TEST_OPTIMIZATION
+ (void) mysql_stmt_store_result (stmt);
+#endif
ret = mysql_stmt_fetch (stmt);
-
if (MYSQL_NO_DATA == ret)
+ {
+ mysql_stmt_free_result (stmt);
return GNUNET_NO;
- if ((0 != ret ) && (MYSQL_DATA_TRUNCATED != ret))
+ }
+ if (1 == ret)
{
GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR,
"my",
- _("mysql_stmt_fetch failed at %s:%d with error: %s\n"),
+ _("%s failed at %s:%d with error: %s\n"),
+ "mysql_stmt_fetch",
__FILE__, __LINE__,
mysql_stmt_error (stmt));
GNUNET_MY_cleanup_result (rs);
field_off += rp->num_fields;
}
}
- mysql_stmt_free_result (stmt);
return GNUNET_OK;
}
results[0].buffer = NULL;
results[0].buffer_length = 0;
results[0].length = &rs->mysql_bind_output_length;
+ results[0].is_null = &rs->is_null;
+ rs->is_null = 0;
return GNUNET_OK;
}
void *buf;
size_t size;
+ if (*results->is_null)
+ return GNUNET_SYSERR;
size = (size_t) rs->mysql_bind_output_length;
if (rs->mysql_bind_output_length != size)
results[0].buffer_length = rs->dst_size;
results[0].length = &rs->mysql_bind_output_length;
results[0].buffer_type = MYSQL_TYPE_BLOB;
+ results[0].is_null = &rs->is_null;
+ rs->is_null = 0;
return GNUNET_OK;
}
unsigned int column,
MYSQL_BIND *results)
{
+ if (*results->is_null)
+ return GNUNET_SYSERR;
if (rs->dst_size != rs->mysql_bind_output_length)
return GNUNET_SYSERR;
return GNUNET_OK;
results[0].buffer_length = 0;
results[0].length = &rs->mysql_bind_output_length;
results[0].buffer_type = MYSQL_TYPE_BLOB;
+ results[0].is_null = &rs->is_null;
+ rs->is_null = 0;
return GNUNET_OK;
}
void *buf;
size_t size;
+ if (*results->is_null)
+ return GNUNET_SYSERR;
size = (size_t) rs->mysql_bind_output_length;
if (rs->mysql_bind_output_length != size)
results[0].buffer_length = 0;
results[0].length = &rs->mysql_bind_output_length;
results[0].buffer_type = MYSQL_TYPE_BLOB;
+ results[0].is_null = &rs->is_null;
+ rs->is_null = 0;
return GNUNET_OK;
}
void *buf;
size_t size;
+ if (*results->is_null)
+ return GNUNET_SYSERR;
size = (size_t) rs->mysql_bind_output_length;
if (rs->mysql_bind_output_length != size)
*/
static void
clean_rsa_signature (void *cls,
- struct GNUNET_MY_ResultSpec *rs)
+ struct GNUNET_MY_ResultSpec *rs)
{
struct GNUNET_CRYPTO_RsaSignature **sig = rs->dst;
results[0].buffer_length = 0;
results[0].length = &rs->mysql_bind_output_length;
results[0].buffer_type = MYSQL_TYPE_BLOB;
+ results[0].is_null = &rs->is_null;
+ rs->is_null = 0;
return GNUNET_OK;
}
if (rs->mysql_bind_output_length != size)
return GNUNET_SYSERR;
+ if (*results->is_null)
+ {
+ rs->dst = NULL;
+ return GNUNET_OK;
+ }
buf = GNUNET_malloc (size);
results[0].buffer = buf;
results[0].buffer_length = rs->dst_size;
results[0].length = &rs->mysql_bind_output_length;
results[0].buffer_type = MYSQL_TYPE_SHORT;
+ results[0].is_null = &rs->is_null;
+ rs->is_null = 0;
return GNUNET_OK;
}
{
if (rs->dst_size != rs->mysql_bind_output_length)
return GNUNET_SYSERR;
+ if (*results->is_null)
+ return GNUNET_SYSERR;
return GNUNET_OK;
}
results[0].buffer_length = rs->dst_size;
results[0].length = &rs->mysql_bind_output_length;
results[0].buffer_type = MYSQL_TYPE_LONG;
+ results[0].is_null = &rs->is_null;
+ rs->is_null = 0;
return GNUNET_OK;
}
MYSQL_BIND *results)
{
if (rs->dst_size != rs->mysql_bind_output_length)
- return GNUNET_SYSERR;
+ return GNUNET_SYSERR;
+ if (*results->is_null)
+ return GNUNET_SYSERR;
return GNUNET_OK;
}
unsigned int column,
MYSQL_BIND *results)
{
+ if (sizeof (uint64_t) != rs->dst_size)
+ return GNUNET_SYSERR;
results[0].buffer = rs->dst;
results[0].buffer_length = rs->dst_size;
results[0].length = &rs->mysql_bind_output_length;
results[0].buffer_type = MYSQL_TYPE_LONGLONG;
+ results[0].is_null = &rs->is_null;
+ rs->is_null = 0;
return GNUNET_OK;
}
unsigned int column,
MYSQL_BIND *results)
{
- if (rs->dst_size != rs->mysql_bind_output_length)
+ if (sizeof (uint64_t) != rs->dst_size)
+ return GNUNET_SYSERR;
+ if (*results->is_null)
return GNUNET_SYSERR;
return GNUNET_OK;
}