Skip to content

Commit fbc7303

Browse files
committed
Determine whether a message is "general" based on severity level
1 parent e2874f7 commit fbc7303

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

ext/pdo_dblib/dblib_driver.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,23 +42,32 @@ static int dblib_fetch_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *info)
4242
pdo_dblib_stmt *S = NULL;
4343
char *message;
4444
char *msg;
45+
int is_general_message = 0;
4546

4647
if (stmt) {
4748
S = (pdo_dblib_stmt*)stmt->driver_data;
4849
einfo = &S->err;
4950
}
5051

51-
if (einfo->dberr == SYBESMSG && einfo->lastmsg) {
52+
// use severity to determine whether a message is "general"
53+
// Severity Levels 11 through 16
54+
// These messages indicate errors that can be corrected by the user.
55+
// https://technet.microsoft.com/en-us/library/aa937483%28v=sql.80%29.aspx
56+
if (einfo->severity && einfo->severity >= 11 && einfo->severity <= 16) {
57+
is_general_message = 1;
58+
}
59+
60+
if (is_general_message && einfo->lastmsg) {
5261
msg = einfo->lastmsg;
53-
} else if (einfo->dberr == SYBESMSG && DBLIB_G(err).lastmsg) {
62+
} else if (is_general_message && DBLIB_G(err).lastmsg) {
5463
msg = DBLIB_G(err).lastmsg;
5564
DBLIB_G(err).lastmsg = NULL;
5665
} else {
5766
msg = einfo->dberrstr;
5867
}
5968

6069
spprintf(&message, 0, "%s [%d] (severity %d) [%s]",
61-
msg, einfo->dberr, einfo->severity, stmt ? stmt->active_query_string : "");
70+
msg, einfo->dberr, einfo->severity, (stmt && stmt->active_query_string) ? stmt->active_query_string : "");
6271

6372
add_next_index_long(info, einfo->dberr);
6473
add_next_index_string(info, message);

0 commit comments

Comments
 (0)