diff options
-rw-r--r-- | client/mysql.cc | 1 | ||||
-rw-r--r-- | include/sql_common.h | 1 | ||||
-rw-r--r-- | libmysql/libmysql.c | 2 | ||||
-rw-r--r-- | libmysqld/lib_sql.cc | 10 | ||||
-rw-r--r-- | sql-common/client.c | 28 | ||||
-rw-r--r-- | sql/log.cc | 10 |
6 files changed, 35 insertions, 17 deletions
diff --git a/client/mysql.cc b/client/mysql.cc index 1d673348f58..682ab077b94 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -421,6 +421,7 @@ int main(int argc,char *argv[]) if (mysql_server_init(embedded_server_arg_count, embedded_server_args, (char**) embedded_server_groups)) { + put_error(NULL); free_defaults(defaults_argv); my_end(0); exit(1); diff --git a/include/sql_common.h b/include/sql_common.h index 56e7305130f..9e43d076ba9 100644 --- a/include/sql_common.h +++ b/include/sql_common.h @@ -15,6 +15,7 @@ extern const char *unknown_sqlstate; +extern const char *cant_connect_sqlstate; extern const char *not_error_sqlstate; #ifdef __cplusplus diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index f5ac1c09248..a1fb1d8a3c4 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -1500,7 +1500,7 @@ my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql) const char *STDCALL mysql_sqlstate(MYSQL *mysql) { - return mysql->net.sqlstate; + return mysql ? mysql->net.sqlstate : cant_connect_sqlstate; } uint STDCALL mysql_warning_count(MYSQL *mysql) diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index b467345b5d5..bef51a33d75 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -38,6 +38,8 @@ C_MODE_START #include <sql_common.h> #include "embedded_priv.h" +extern unsigned int mysql_server_last_errno; +extern char mysql_server_last_error[MYSQL_ERRMSG_SIZE]; static my_bool emb_read_query_result(MYSQL *mysql); @@ -1115,3 +1117,11 @@ bool Protocol::net_store_data(const uchar *from, size_t length) return FALSE; } + +void vprint_msg_to_log(enum loglevel level __attribute__((unused)), + const char *format, va_list argsi) +{ + vsnprintf(mysql_server_last_error, sizeof(mysql_server_last_error), + format, argsi); + mysql_server_last_errno= CR_UNKNOWN_ERROR; +} diff --git a/sql-common/client.c b/sql-common/client.c index 1a0f9c64d7d..e5667fa6735 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -112,6 +112,7 @@ uint mysql_port=0; char *mysql_unix_port= 0; const char *unknown_sqlstate= "HY000"; const char *not_error_sqlstate= "00000"; +const char *cant_connect_sqlstate= "08001"; #ifdef HAVE_SMEM char *shared_memory_base_name= 0; const char *def_shared_memory_base_name= default_shared_memory_base_name; @@ -126,6 +127,9 @@ static int wait_for_data(my_socket fd, uint timeout); CHARSET_INFO *default_client_charset_info = &my_charset_latin1; +/* Server error code and message */ +unsigned int mysql_server_last_errno; +char mysql_server_last_error[MYSQL_ERRMSG_SIZE]; /**************************************************************************** A modified version of connect(). my_connect() allows you to specify @@ -288,11 +292,18 @@ void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate) DBUG_PRINT("enter", ("error :%d '%s'", errcode, ER(errcode))); DBUG_ASSERT(mysql != 0); - net= &mysql->net; - net->client_last_errno= errcode; - strmov(net->client_last_error, ER(errcode)); - strmov(net->sqlstate, sqlstate); - + if (mysql) + { + net= &mysql->net; + net->client_last_errno= errcode; + strmov(net->client_last_error, ER(errcode)); + strmov(net->sqlstate, sqlstate); + } + else + { + mysql_server_last_errno= errcode; + strmov(mysql_server_last_error, ER(errcode)); + } DBUG_VOID_RETURN; } @@ -1489,7 +1500,10 @@ mysql_init(MYSQL *mysql) if (!mysql) { if (!(mysql=(MYSQL*) my_malloc(sizeof(*mysql),MYF(MY_WME | MY_ZEROFILL)))) + { + set_mysql_error(NULL, CR_OUT_OF_MEMORY, unknown_sqlstate); return 0; + } mysql->free_me=1; } else @@ -3079,13 +3093,13 @@ unsigned int STDCALL mysql_num_fields(MYSQL_RES *res) uint STDCALL mysql_errno(MYSQL *mysql) { - return mysql->net.client_last_errno; + return mysql ? mysql->net.client_last_errno : mysql_server_last_errno; } const char * STDCALL mysql_error(MYSQL *mysql) { - return mysql->net.client_last_error; + return mysql ? mysql->net.client_last_error : mysql_server_last_error; } diff --git a/sql/log.cc b/sql/log.cc index 99ac9cf509d..cddcf8eced2 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -4378,15 +4378,7 @@ static void print_buffer_to_nt_eventlog(enum loglevel level, char *buff, return an error (e.g. logging to the log tables) */ -#ifdef EMBEDDED_LIBRARY -int vprint_msg_to_log(enum loglevel level __attribute__((unused)), - const char *format __attribute__((unused)), - va_list argsi __attribute__((unused))) -{ - DBUG_ENTER("vprint_msg_to_log"); - DBUG_RETURN(0); -} -#else /*!EMBEDDED_LIBRARY*/ +#ifndef EMBEDDED_LIBRARY static void print_buffer_to_file(enum loglevel level, const char *buffer) { time_t skr; |