From d10bd129fc392283b60db2f0ef426f4e16ffd8bf Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Fri, 15 Feb 2019 10:49:14 +0200 Subject: Improve error handling in mysql.c * src/mysql.c (check_errno): Always print the failed query in full. Don't treat ER_PARSE_ERROR and ER_EMPTY_QUERY as fatal errors. --- src/mysql.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/mysql.c b/src/mysql.c index d97200a..1391743d 100644 --- a/src/mysql.c +++ b/src/mysql.c @@ -29,16 +29,17 @@ struct vmod_mysql_data static void -check_errno(struct dbrw_connection *conn) +check_errno(struct dbrw_connection *conn, char const *query) { struct vmod_mysql_data *mp = conn->data; + dbrw_error("query failed: %s", query); + dbrw_error("%s", mysql_error(&mp->mysql)); switch (mysql_errno(&mp->mysql)) { case CR_SERVER_GONE_ERROR: case CR_SERVER_LOST: case ER_SERVER_SHUTDOWN: case ER_ABORTING_CONNECTION: - dbrw_error("query failed: %s", mysql_error(&mp->mysql)); sql_disconnect(conn); if (conn->state == state_error) { conn->state = state_disabled; @@ -53,18 +54,17 @@ check_errno(struct dbrw_connection *conn) case ER_BAD_HOST_ERROR: case ER_BAD_TABLE_ERROR: case ER_WRONG_FIELD_SPEC: - case ER_PARSE_ERROR: - case ER_EMPTY_QUERY: case ER_FIELD_SPECIFIED_TWICE: case ER_NO_SUCH_TABLE: case ER_NOT_ALLOWED_COMMAND: - dbrw_error("query failed: %s", mysql_error(&mp->mysql)); dbrw_error("disabling MySQL connection"); sql_disconnect(conn); conn->state = state_disabled; break; + case ER_EMPTY_QUERY: + case ER_PARSE_ERROR: default: - dbrw_error("query failed: %s", mysql_error(&mp->mysql)); + break; } } @@ -160,7 +160,7 @@ s_mysql_query(struct dbrw_connection *conn, const char *query) for (i = 0; i < 10; i++) { rc = mysql_query(&mp->mysql, query); if (rc) { - check_errno(conn); + check_errno(conn, query); if (conn->state != state_init) return -1; sql_connect(conn); -- cgit v1.2.1