On 12/18/2016 02:09 AM, Wietse Venema wrote: > 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
I agree. It might be as simple as changing msg_warn("dict_mysql: stored procedure did not return any result set containing data"); to msg_warn("mysql query failed: %s", mysql_error(host->db)); But I think I need to do some tests with unmodified postfix and then compare behaviour to the patched version to make sure the warnings are really the same. John