I have been working this code into Postfix, and have a comment
about error reporting for old-style queries.

>      while ((host = dict_mysql_get_active(dict_mysql)) != NULL) {
>  #if defined(MYSQL_VERSION_ID) && MYSQL_VERSION_ID >= 40000
> @@ -536,9 +541,46 @@
>  #endif
> 
>         if (!(mysql_query(host->db, vstring_str(query)))) {
> -           if ((res = mysql_store_result(host->db)) == 0) {
> -               msg_warn("mysql query failed: %s", mysql_error(host->db));
> +           sp_error = 0;

Here, the old code reported "mysql query failed" when an old-style
query returned no result set.

> +           num_rs = 0;
> +           res = 0;
> +           do {
> +               temp_res = mysql_store_result(host->db);
> +               /* did statement return data? */
> +               if (temp_res) {
> +                   num_rs++;
> +                   if (num_rs > 1) {
> +                       msg_warn("dict_mysql: multiple result sets
> returning data are not supported");
> +                       mysql_free_result(temp_res);
> +                       temp_res = 0;
> +                   } else {
> +                       res = temp_res;
> +                   }
> +               } else {
> +               /* no data, check if there were errors */
> +                   if (mysql_field_count(host->db) == 0) {
> +                       if (num_rs == 0) {
> +                           msg_warn("dict_mysql: stored procedure did
> not return any result set containing data");
> +                       } else {
> +                           if (msg_verbose)
> +                               msg_info("dict_mysql: successful final
> result for stored procedure");
> +                       }
> +                   } else {
> +                       sp_error=1;
> +                       msg_warn("dict_mysql: unsuccessful final result
> for stored procedure: %s", mysql_error(host->db));

What if Postfix made an old-style query?  I think it should just
report the old-style error here.

        Wietse

Reply via email to