summaryrefslogtreecommitdiff
path: root/sql-common
diff options
context:
space:
mode:
authorunknown <gkodinov@dl145s.mysql.com>2006-11-27 16:25:52 +0100
committerunknown <gkodinov@dl145s.mysql.com>2006-11-27 16:25:52 +0100
commit880b3d84d110a24ecb1fb7e053334f45d43b7210 (patch)
tree08f5946df44304e74078c8398e52f0a45684cd67 /sql-common
parentc0f63d8564fdd1aacd001a882271dd896721d93a (diff)
parent52fc261bcab0becc9d23f8d1e511760413a6d85d (diff)
downloadmariadb-git-880b3d84d110a24ecb1fb7e053334f45d43b7210.tar.gz
Merge bk-internal:/home/bk/mysql-5.0
into dl145s.mysql.com:/data0/bk/team_tree_merge/MERGE/mysql-5.0-opt libmysql/libmysql.c: Auto merged mysql-test/t/subselect.test: Auto merged mysql-test/t/type_newdecimal.test: Auto merged sql/filesort.cc: Auto merged sql/handler.cc: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_subselect.cc: Auto merged sql/item_timefunc.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_parse.cc: Auto merged sql-common/client.c: Auto merged sql/sql_select.cc: Auto merged sql/table.cc: Auto merged sql-common/my_time.c: Auto merged strings/decimal.c: Auto merged
Diffstat (limited to 'sql-common')
-rw-r--r--sql-common/client.c86
-rw-r--r--sql-common/my_time.c2
2 files changed, 76 insertions, 12 deletions
diff --git a/sql-common/client.c b/sql-common/client.c
index 5d17f3cc5c6..44b7940a503 100644
--- a/sql-common/client.c
+++ b/sql-common/client.c
@@ -598,7 +598,7 @@ cli_safe_read(MYSQL *mysql)
if (len == packet_error || len == 0)
{
- DBUG_PRINT("error",("Wrong connection or packet. fd: %s len: %d",
+ DBUG_PRINT("error",("Wrong connection or packet. fd: %s len: %lu",
vio_description(net->vio),len));
#ifdef MYSQL_SERVER
if (net->vio && vio_was_interrupted(net->vio))
@@ -753,6 +753,29 @@ void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate)
DBUG_VOID_RETURN;
}
+
+static void set_mysql_extended_error(MYSQL *mysql, int errcode,
+ const char *sqlstate,
+ const char *format, ...)
+{
+ NET *net;
+ va_list args;
+ DBUG_ENTER("set_mysql_extended_error");
+ DBUG_PRINT("enter", ("error :%d '%s'", errcode, format));
+ DBUG_ASSERT(mysql != 0);
+
+ net= &mysql->net;
+ net->last_errno= errcode;
+ va_start(args, format);
+ my_vsnprintf(net->last_error, sizeof(net->last_error)-1,
+ format, args);
+ va_end(args);
+ strmov(net->sqlstate, sqlstate);
+
+ DBUG_VOID_RETURN;
+}
+
+
/*
Flush result set sent from server
*/
@@ -850,6 +873,7 @@ static int check_license(MYSQL *mysql)
void end_server(MYSQL *mysql)
{
+ int save_errno= errno;
DBUG_ENTER("end_server");
if (mysql->net.vio != 0)
{
@@ -862,6 +886,7 @@ void end_server(MYSQL *mysql)
}
net_end(&mysql->net);
free_old_query(mysql);
+ errno= save_errno;
DBUG_VOID_RETURN;
}
@@ -870,7 +895,7 @@ void STDCALL
mysql_free_result(MYSQL_RES *result)
{
DBUG_ENTER("mysql_free_result");
- DBUG_PRINT("enter",("mysql_res: %lx",result));
+ DBUG_PRINT("enter",("mysql_res: 0x%lx", (long) result));
if (result)
{
MYSQL *mysql= result->handle;
@@ -1368,7 +1393,7 @@ MYSQL_DATA *cli_read_rows(MYSQL *mysql,MYSQL_FIELD *mysql_fields,
DBUG_PRINT("info",("status: %u warning_count: %u",
mysql->server_status, mysql->warning_count));
}
- DBUG_PRINT("exit",("Got %d rows",result->rows));
+ DBUG_PRINT("exit", ("Got %lu rows", (ulong) result->rows));
DBUG_RETURN(result);
}
@@ -2033,7 +2058,10 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
if (mysql->options.connect_timeout &&
vio_poll_read(net->vio, mysql->options.connect_timeout))
{
- set_mysql_error(mysql, CR_SERVER_LOST, unknown_sqlstate);
+ set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate,
+ ER(CR_SERVER_LOST_EXTENDED),
+ "waiting for initial communication packet",
+ errno);
goto error;
}
@@ -2042,8 +2070,14 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
*/
if ((pkt_length=cli_safe_read(mysql)) == packet_error)
+ {
+ if (mysql->net.last_errno == CR_SERVER_LOST)
+ set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate,
+ ER(CR_SERVER_LOST_EXTENDED),
+ "reading initial communication packet",
+ errno);
goto error;
-
+ }
/* Check if version of protocol matches current one */
mysql->protocol_version= net->read_pos[0];
@@ -2177,7 +2211,10 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
*/
if (my_net_write(net,buff,(uint) (end-buff)) || net_flush(net))
{
- set_mysql_error(mysql, CR_SERVER_LOST, unknown_sqlstate);
+ set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate,
+ ER(CR_SERVER_LOST_EXTENDED),
+ "sending connection information to server",
+ errno);
goto error;
}
@@ -2256,7 +2293,10 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
/* Write authentication package */
if (my_net_write(net,buff,(ulong) (end-buff)) || net_flush(net))
{
- set_mysql_error(mysql, CR_SERVER_LOST, unknown_sqlstate);
+ set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate,
+ ER(CR_SERVER_LOST_EXTENDED),
+ "sending authentication information",
+ errno);
goto error;
}
@@ -2266,7 +2306,14 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
*/
if ((pkt_length=cli_safe_read(mysql)) == packet_error)
+ {
+ if (mysql->net.last_errno == CR_SERVER_LOST)
+ set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate,
+ ER(CR_SERVER_LOST_EXTENDED),
+ "reading authorization packet",
+ errno);
goto error;
+ }
if (pkt_length == 1 && net->read_pos[0] == 254 &&
mysql->server_capabilities & CLIENT_SECURE_CONNECTION)
@@ -2278,12 +2325,22 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
scramble_323(buff, mysql->scramble, passwd);
if (my_net_write(net, buff, SCRAMBLE_LENGTH_323 + 1) || net_flush(net))
{
- set_mysql_error(mysql, CR_SERVER_LOST, unknown_sqlstate);
+ set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate,
+ ER(CR_SERVER_LOST_EXTENDED),
+ "sending password information",
+ errno);
goto error;
}
/* Read what server thinks about out new auth message report */
if (cli_safe_read(mysql) == packet_error)
+ {
+ if (mysql->net.last_errno == CR_SERVER_LOST)
+ set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate,
+ ER(CR_SERVER_LOST_EXTENDED),
+ "reading final connect information",
+ errno);
goto error;
+ }
}
if (client_flag & CLIENT_COMPRESS) /* We will use compression */
@@ -2294,8 +2351,15 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
goto error;
#endif
- if (db && mysql_select_db(mysql,db))
+ if (db && mysql_select_db(mysql, db))
+ {
+ if (mysql->net.last_errno == CR_SERVER_LOST)
+ set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate,
+ ER(CR_SERVER_LOST_EXTENDED),
+ "Setting intital database",
+ errno);
goto error;
+ }
if (mysql->options.init_commands)
{
@@ -2326,7 +2390,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
goto error;
#endif
- DBUG_PRINT("exit",("Mysql handler: %lx",mysql));
+ DBUG_PRINT("exit", ("Mysql handler: 0x%lx", (long) mysql));
reset_sigpipe(mysql);
DBUG_RETURN(mysql);
@@ -2699,7 +2763,7 @@ int STDCALL
mysql_real_query(MYSQL *mysql, const char *query, ulong length)
{
DBUG_ENTER("mysql_real_query");
- DBUG_PRINT("enter",("handle: %lx",mysql));
+ DBUG_PRINT("enter",("handle: 0x%lx", (long) mysql));
DBUG_PRINT("query",("Query = '%-.4096s'",query));
if (mysql_send_query(mysql,query,length))
diff --git a/sql-common/my_time.c b/sql-common/my_time.c
index 7d12a49e40f..fb27fb74872 100644
--- a/sql-common/my_time.c
+++ b/sql-common/my_time.c
@@ -963,7 +963,7 @@ my_system_gmt_sec(const MYSQL_TIME *t_src, long *my_timezone,
*/
if ((tmp < TIMESTAMP_MIN_VALUE) || (tmp > TIMESTAMP_MAX_VALUE))
tmp= 0;
-end:
+
return (my_time_t) tmp;
} /* my_system_gmt_sec */