mirror of
https://github.com/MariaDB/server.git
synced 2026-05-01 20:55:32 +02:00
Cleanup: use helper functions to set an error in MYSQL or MYSQL_STMT.
No functionality added or changed. This is a pre-requisite for the fix for Bug#12713 Error in a stored function called from a SELECT doesn't cause ROLLBACK of statem Address post-review comments. include/sql_common.h: Declare auxiliary functions to manipulate mysql.net.last_er* and mysql_stmt.last_er* libmysql/libmysql.c: Use helper functions to set an error in MYSQL or MYSQL_STMT libmysqld/lib_sql.cc: Use helper functions to set an error in MYSQL or MYSQL_STMT sql-common/client.c: Use helper functions to set an error in MYSQL or MYSQL_STMT
This commit is contained in:
parent
1430f4ded2
commit
70987ab97c
4 changed files with 144 additions and 184 deletions
|
|
@ -312,42 +312,34 @@ HANDLE create_named_pipe(NET *net, uint connect_timeout, char **arg_host,
|
|||
break;
|
||||
if (GetLastError() != ERROR_PIPE_BUSY)
|
||||
{
|
||||
net->last_errno=CR_NAMEDPIPEOPEN_ERROR;
|
||||
strmov(net->sqlstate, unknown_sqlstate);
|
||||
my_snprintf(net->last_error, sizeof(net->last_error)-1,
|
||||
ER(net->last_errno), host, unix_socket,
|
||||
(ulong) GetLastError());
|
||||
set_mysql_extended_error(mysql, CR_NAMEDPIPEOPEN_ERROR,
|
||||
unknown_sqlstate, ER(CR_NAMEDPIPEOPEN_ERROR),
|
||||
host, unix_socket, (ulong) GetLastError());
|
||||
return INVALID_HANDLE_VALUE;
|
||||
}
|
||||
/* wait for for an other instance */
|
||||
if (! WaitNamedPipe(pipe_name, connect_timeout*1000) )
|
||||
{
|
||||
net->last_errno=CR_NAMEDPIPEWAIT_ERROR;
|
||||
strmov(net->sqlstate, unknown_sqlstate);
|
||||
my_snprintf(net->last_error, sizeof(net->last_error)-1,
|
||||
ER(net->last_errno), host, unix_socket,
|
||||
(ulong) GetLastError());
|
||||
set_mysql_extended_error(mysql, CR_NAMEDPIPEWAIT_ERROR, unknown_sqlstate,
|
||||
ER(CR_NAMEDPIPEWAIT_ERROR),
|
||||
host, unix_socket, (ulong) GetLastError());
|
||||
return INVALID_HANDLE_VALUE;
|
||||
}
|
||||
}
|
||||
if (hPipe == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
net->last_errno=CR_NAMEDPIPEOPEN_ERROR;
|
||||
strmov(net->sqlstate, unknown_sqlstate);
|
||||
my_snprintf(net->last_error, sizeof(net->last_error)-1,
|
||||
ER(net->last_errno), host, unix_socket,
|
||||
(ulong) GetLastError());
|
||||
set_mysql_extended_error(mysql, CR_NAMEDPIPEOPEN_ERROR, unknown_sqlstate,
|
||||
ER(CR_NAMEDPIPEOPEN_ERROR), host, unix_socket,
|
||||
(ulong) GetLastError());
|
||||
return INVALID_HANDLE_VALUE;
|
||||
}
|
||||
dwMode = PIPE_READMODE_BYTE | PIPE_WAIT;
|
||||
if ( !SetNamedPipeHandleState(hPipe, &dwMode, NULL, NULL) )
|
||||
{
|
||||
CloseHandle( hPipe );
|
||||
net->last_errno=CR_NAMEDPIPESETSTATE_ERROR;
|
||||
strmov(net->sqlstate, unknown_sqlstate);
|
||||
my_snprintf(net->last_error, sizeof(net->last_error)-1,
|
||||
ER(net->last_errno),host, unix_socket,
|
||||
(ulong) GetLastError());
|
||||
set_mysql_extended_error(mysql, CR_NAMEDPIPESETSTATE_ERROR,
|
||||
unknown_sqlstate, ER(CR_NAMEDPIPESETSTATE_ERROR),
|
||||
host, unix_socket, (ulong) GetLastError());
|
||||
return INVALID_HANDLE_VALUE;
|
||||
}
|
||||
*arg_host=host ; *arg_unix_socket=unix_socket; /* connect arg */
|
||||
|
|
@ -566,14 +558,12 @@ err:
|
|||
CloseHandle(handle_connect_file_map);
|
||||
if (error_allow)
|
||||
{
|
||||
net->last_errno=error_allow;
|
||||
strmov(net->sqlstate, unknown_sqlstate);
|
||||
if (error_allow == CR_SHARED_MEMORY_EVENT_ERROR)
|
||||
my_snprintf(net->last_error,sizeof(net->last_error)-1,
|
||||
ER(net->last_errno),suffix_pos,error_code);
|
||||
set_mysql_extended_error(mysql, error_allow, unknown_sqlstate,
|
||||
ER(error_allow), suffix_pos, error_code);
|
||||
else
|
||||
my_snprintf(net->last_error,sizeof(net->last_error)-1,
|
||||
ER(net->last_errno),error_code);
|
||||
set_mysql_extended_error(mysql, error_allow, unknown_sqlstate,
|
||||
ER(error_allow), error_code);
|
||||
return(INVALID_HANDLE_VALUE);
|
||||
}
|
||||
return(handle_map);
|
||||
|
|
@ -683,10 +673,8 @@ cli_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
|||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
net->last_error[0]=0;
|
||||
net->last_errno= 0;
|
||||
strmov(net->sqlstate, not_error_sqlstate);
|
||||
mysql->net.report_error=0;
|
||||
net_clear_error(net);
|
||||
net->report_error=0;
|
||||
mysql->info=0;
|
||||
mysql->affected_rows= ~(my_ulonglong) 0;
|
||||
/*
|
||||
|
|
@ -703,8 +691,7 @@ cli_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
|||
socket_errno));
|
||||
if (net->last_errno == ER_NET_PACKET_TOO_LARGE)
|
||||
{
|
||||
net->last_errno=CR_NET_PACKET_TOO_LARGE;
|
||||
strmov(net->last_error,ER(net->last_errno));
|
||||
set_mysql_error(mysql, CR_NET_PACKET_TOO_LARGE, unknown_sqlstate);
|
||||
goto end;
|
||||
}
|
||||
end_server(mysql);
|
||||
|
|
@ -713,8 +700,7 @@ cli_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
|||
if (net_write_command(net,(uchar) command, header, header_length,
|
||||
arg, arg_length))
|
||||
{
|
||||
net->last_errno=CR_SERVER_GONE_ERROR;
|
||||
strmov(net->last_error,ER(net->last_errno));
|
||||
set_mysql_error(mysql, CR_SERVER_GONE_ERROR, unknown_sqlstate);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
|
@ -760,6 +746,19 @@ void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate)
|
|||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
/**
|
||||
Clear possible error state of struct NET
|
||||
|
||||
@param net clear the state of the argument
|
||||
*/
|
||||
|
||||
void net_clear_error(NET *net)
|
||||
{
|
||||
net->last_errno= 0;
|
||||
net->last_error[0]= '\0';
|
||||
strmov(net->sqlstate, not_error_sqlstate);
|
||||
}
|
||||
|
||||
|
||||
static void set_mysql_extended_error(MYSQL *mysql, int errcode,
|
||||
const char *sqlstate,
|
||||
|
|
@ -846,9 +845,8 @@ static int check_license(MYSQL *mysql)
|
|||
{
|
||||
if (net->last_errno == ER_UNKNOWN_SYSTEM_VARIABLE)
|
||||
{
|
||||
net->last_errno= CR_WRONG_LICENSE;
|
||||
my_snprintf(net->last_error, sizeof(net->last_error)-1,
|
||||
ER(net->last_errno), required_license);
|
||||
set_mysql_extended_error(mysql, CR_WRONG_LICENSE, unknown_sqlstate,
|
||||
ER(CR_WRONG_LICENSE), required_license);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -864,9 +862,8 @@ static int check_license(MYSQL *mysql)
|
|||
(!row || !row[0] ||
|
||||
strncmp(row[0], required_license, sizeof(required_license))))
|
||||
{
|
||||
net->last_errno= CR_WRONG_LICENSE;
|
||||
my_snprintf(net->last_error, sizeof(net->last_error)-1,
|
||||
ER(net->last_errno), required_license);
|
||||
set_mysql_extended_error(mysql, CR_WRONG_LICENSE, unknown_sqlstate,
|
||||
ER(CR_WRONG_LICENSE), required_license);
|
||||
}
|
||||
mysql_free_result(res);
|
||||
return net->last_errno;
|
||||
|
|
@ -1761,24 +1758,22 @@ int mysql_init_character_set(MYSQL *mysql)
|
|||
}
|
||||
charsets_dir= save;
|
||||
}
|
||||
|
||||
|
||||
if (!mysql->charset)
|
||||
{
|
||||
net->last_errno=CR_CANT_READ_CHARSET;
|
||||
strmov(net->sqlstate, unknown_sqlstate);
|
||||
if (mysql->options.charset_dir)
|
||||
my_snprintf(net->last_error, sizeof(net->last_error)-1,
|
||||
ER(net->last_errno),
|
||||
mysql->options.charset_name,
|
||||
mysql->options.charset_dir);
|
||||
set_mysql_extended_error(mysql, CR_CANT_READ_CHARSET, unknown_sqlstate,
|
||||
ER(CR_CANT_READ_CHARSET),
|
||||
mysql->options.charset_name,
|
||||
mysql->options.charset_dir);
|
||||
else
|
||||
{
|
||||
char cs_dir_name[FN_REFLEN];
|
||||
get_charsets_dir(cs_dir_name);
|
||||
my_snprintf(net->last_error, sizeof(net->last_error)-1,
|
||||
ER(net->last_errno),
|
||||
mysql->options.charset_name,
|
||||
cs_dir_name);
|
||||
set_mysql_extended_error(mysql, CR_CANT_READ_CHARSET, unknown_sqlstate,
|
||||
ER(CR_CANT_READ_CHARSET),
|
||||
mysql->options.charset_name,
|
||||
cs_dir_name);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -1910,10 +1905,10 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
|||
DBUG_PRINT("info",("Using UNIX sock '%s'",unix_socket));
|
||||
if ((sock = socket(AF_UNIX,SOCK_STREAM,0)) == SOCKET_ERROR)
|
||||
{
|
||||
net->last_errno=CR_SOCKET_CREATE_ERROR;
|
||||
strmov(net->sqlstate, unknown_sqlstate);
|
||||
my_snprintf(net->last_error,sizeof(net->last_error)-1,
|
||||
ER(net->last_errno),socket_errno);
|
||||
set_mysql_extended_error(mysql, CR_SOCKET_CREATE_ERROR,
|
||||
unknown_sqlstate,
|
||||
ER(CR_SOCKET_CREATE_ERROR),
|
||||
socket_errno);
|
||||
goto error;
|
||||
}
|
||||
net->vio= vio_new(sock, VIO_TYPE_SOCKET,
|
||||
|
|
@ -1926,10 +1921,10 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
|||
{
|
||||
DBUG_PRINT("error",("Got error %d on connect to local server",
|
||||
socket_errno));
|
||||
net->last_errno=CR_CONNECTION_ERROR;
|
||||
strmov(net->sqlstate, unknown_sqlstate);
|
||||
my_snprintf(net->last_error,sizeof(net->last_error)-1,
|
||||
ER(net->last_errno),unix_socket,socket_errno);
|
||||
set_mysql_extended_error(mysql, CR_CONNECTION_ERROR,
|
||||
unknown_sqlstate,
|
||||
ER(CR_CONNECTION_ERROR),
|
||||
unix_socket, socket_errno);
|
||||
goto error;
|
||||
}
|
||||
mysql->options.protocol=MYSQL_PROTOCOL_SOCKET;
|
||||
|
|
@ -1986,10 +1981,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
|||
#endif
|
||||
if (sock == SOCKET_ERROR)
|
||||
{
|
||||
net->last_errno=CR_IPSOCK_ERROR;
|
||||
strmov(net->sqlstate, unknown_sqlstate);
|
||||
my_snprintf(net->last_error,sizeof(net->last_error)-1,
|
||||
ER(net->last_errno),socket_errno);
|
||||
set_mysql_extended_error(mysql, CR_IPSOCK_ERROR, unknown_sqlstate,
|
||||
ER(CR_IPSOCK_ERROR), socket_errno);
|
||||
goto error;
|
||||
}
|
||||
net->vio= vio_new(sock, VIO_TYPE_TCPIP, VIO_BUFFERED_READ);
|
||||
|
|
@ -2014,10 +2007,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
|||
if (!hp)
|
||||
{
|
||||
my_gethostbyname_r_free();
|
||||
net->last_errno=CR_UNKNOWN_HOST;
|
||||
strmov(net->sqlstate, unknown_sqlstate);
|
||||
my_snprintf(net->last_error, sizeof(net->last_error)-1,
|
||||
ER(CR_UNKNOWN_HOST), host, tmp_errno);
|
||||
set_mysql_extended_error(mysql, CR_UNKNOWN_HOST, unknown_sqlstate,
|
||||
ER(CR_UNKNOWN_HOST), host, tmp_errno);
|
||||
goto error;
|
||||
}
|
||||
memcpy(&sock_addr.sin_addr, hp->h_addr,
|
||||
|
|
@ -2030,10 +2021,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
|||
{
|
||||
DBUG_PRINT("error",("Got error %d on connect to '%s'",socket_errno,
|
||||
host));
|
||||
net->last_errno= CR_CONN_HOST_ERROR;
|
||||
strmov(net->sqlstate, unknown_sqlstate);
|
||||
my_snprintf(net->last_error, sizeof(net->last_error)-1,
|
||||
ER(CR_CONN_HOST_ERROR), host, socket_errno);
|
||||
set_mysql_extended_error(mysql, CR_CONN_HOST_ERROR, unknown_sqlstate,
|
||||
ER(CR_CONN_HOST_ERROR), host, socket_errno);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
|
@ -2097,11 +2086,9 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
|||
PROTOCOL_VERSION, mysql->protocol_version));
|
||||
if (mysql->protocol_version != PROTOCOL_VERSION)
|
||||
{
|
||||
strmov(net->sqlstate, unknown_sqlstate);
|
||||
net->last_errno= CR_VERSION_ERROR;
|
||||
my_snprintf(net->last_error, sizeof(net->last_error)-1,
|
||||
ER(CR_VERSION_ERROR), mysql->protocol_version,
|
||||
PROTOCOL_VERSION);
|
||||
set_mysql_extended_error(mysql, CR_VERSION_ERROR, unknown_sqlstate,
|
||||
ER(CR_VERSION_ERROR), mysql->protocol_version,
|
||||
PROTOCOL_VERSION);
|
||||
goto error;
|
||||
}
|
||||
end=strend((char*) net->read_pos+1);
|
||||
|
|
@ -2625,7 +2612,7 @@ void mysql_detach_stmt_list(LIST **stmt_list __attribute__((unused)),
|
|||
for (; element; element= element->next)
|
||||
{
|
||||
MYSQL_STMT *stmt= (MYSQL_STMT *) element->data;
|
||||
set_stmt_errmsg(stmt, buff, CR_STMT_CLOSED, unknown_sqlstate);
|
||||
set_stmt_error(stmt, CR_STMT_CLOSED, unknown_sqlstate, buff);
|
||||
stmt->mysql= 0;
|
||||
/* No need to call list_delete for statement here */
|
||||
}
|
||||
|
|
@ -3142,11 +3129,8 @@ int STDCALL mysql_set_character_set(MYSQL *mysql, const char *cs_name)
|
|||
{
|
||||
char cs_dir_name[FN_REFLEN];
|
||||
get_charsets_dir(cs_dir_name);
|
||||
mysql->net.last_errno= CR_CANT_READ_CHARSET;
|
||||
strmov(mysql->net.sqlstate, unknown_sqlstate);
|
||||
my_snprintf(mysql->net.last_error, sizeof(mysql->net.last_error) - 1,
|
||||
ER(mysql->net.last_errno), cs_name, cs_dir_name);
|
||||
|
||||
set_mysql_extended_error(mysql, CR_CANT_READ_CHARSET, unknown_sqlstate,
|
||||
ER(CR_CANT_READ_CHARSET), cs_name, cs_dir_name);
|
||||
}
|
||||
charsets_dir= save_csdir;
|
||||
return mysql->net.last_errno;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue