allow empty/NULL context message
[oweals/gnunet.git] / src / my / my.c
index 5ef2f18cf5ff1f82a159483922859d44b9333157..dd0e402514f24dcf8434a90a80328d0792a9e893 100644 (file)
@@ -55,7 +55,7 @@ GNUNET_MY_exec_prepared (struct GNUNET_MYSQL_Context *mc,
     MYSQL_BIND qbind[num];
     unsigned int off;
 
-    memset(qbind, 0, sizeof(qbind));
+    memset (qbind, 0, sizeof(qbind));
     off = 0;
     for (i=0;NULL != (p = &params[i])->conv;i++)
     {
@@ -71,13 +71,15 @@ GNUNET_MY_exec_prepared (struct GNUNET_MYSQL_Context *mc,
       }
       off += p->num_params;
     }
-    stmt = GNUNET_MYSQL_statement_get_stmt (mc, sh);
+    stmt = GNUNET_MYSQL_statement_get_stmt (sh);
     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;
@@ -85,18 +87,17 @@ GNUNET_MY_exec_prepared (struct GNUNET_MYSQL_Context *mc,
 
     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;
 }
 
@@ -125,7 +126,6 @@ GNUNET_MY_cleanup_query (struct GNUNET_MY_QueryParam *qp,
  * 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
@@ -142,15 +142,17 @@ GNUNET_MY_extract_result (struct GNUNET_MYSQL_StatementHandle *sh,
   int ret;
   MYSQL_STMT *stmt;
 
-  stmt = GNUNET_MYSQL_statement_get_stmt (NULL, sh);
+  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++)
@@ -187,28 +189,36 @@ GNUNET_MY_extract_result (struct GNUNET_MYSQL_StatementHandle *sh,
       }
       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);
+      mysql_stmt_free_result (stmt);
       return GNUNET_SYSERR;
     }
     field_off = 0;
@@ -224,9 +234,10 @@ GNUNET_MY_extract_result (struct GNUNET_MYSQL_StatementHandle *sh,
                            field_off,
                            &result[field_off]))
         {
-          GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+          GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                       "Post-conversion for MySQL result failed at offset %u\n",
                       i);
+          mysql_stmt_free_result (stmt);
           GNUNET_MY_cleanup_result (rs);
           return GNUNET_SYSERR;
         }