diff options
Diffstat (limited to 'sql/net_pkg.cc')
-rw-r--r-- | sql/net_pkg.cc | 60 |
1 files changed, 46 insertions, 14 deletions
diff --git a/sql/net_pkg.cc b/sql/net_pkg.cc index 0b50b34c7bd..8bb601cebcf 100644 --- a/sql/net_pkg.cc +++ b/sql/net_pkg.cc @@ -1,15 +1,15 @@ /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ @@ -30,13 +30,14 @@ void send_error(NET *net, uint sql_errno, const char *err) err ? err : net->last_error[0] ? net->last_error : "NULL")); + query_cache_abort(net); if (thd) thd->query_error = 1; // needed to catch query errors during replication if (!err) { if (sql_errno) err=ER(sql_errno); - else if (!err) + else { if ((err=net->last_error)[0]) sql_errno=net->last_errno; @@ -51,6 +52,7 @@ void send_error(NET *net, uint sql_errno, const char *err) { if (thd && thd->bootstrap) { + /* In bootstrap it's ok to print on stderr */ fprintf(stderr,"ERROR: %d %s\n",sql_errno,err); } DBUG_VOID_RETURN; @@ -85,9 +87,10 @@ void send_warning(NET *net, uint sql_errno, const char *err) DBUG_VOID_RETURN; } -/** -** write error package and flush to client -** It's a little too low level, but I don't want to allow another buffer + +/* + Write error package and flush to client + It's a little too low level, but I don't want to allow another buffer */ /* VARARGS3 */ @@ -102,11 +105,23 @@ net_printf(NET *net, uint errcode, ...) DBUG_ENTER("net_printf"); DBUG_PRINT("enter",("message: %u",errcode)); - if(thd) thd->query_error = 1; - // if we are here, something is wrong :-) - + if (thd) + thd->query_error = 1; // if we are here, something is wrong :-) + query_cache_abort(net); // Safety va_start(args,errcode); - format=ER(errcode); + /* + The following is needed to make net_printf() work with 0 argument for + errorcode and use the argument after that as the format string. This + is useful for rare errors that are not worth the hassle to put in + errmsg.sys, but at the same time, the message is not fixed text + */ + if (errcode) + format= ER(errcode); + else + { + format=va_arg(args,char*); + errcode= ER_UNKNOWN_ERROR; + } offset= net->return_errno ? 2 : 0; text_pos=(char*) net->buff+head_length+offset+1; (void) vsprintf(my_const_cast(char*) (text_pos),format,args); @@ -119,6 +134,7 @@ net_printf(NET *net, uint errcode, ...) { if (thd && thd->bootstrap) { + /* In bootstrap it's ok to print on stderr */ fprintf(stderr,"ERROR: %d %s\n",errcode,text_pos); thd->fatal_error=1; } @@ -142,7 +158,7 @@ send_ok(NET *net,ha_rows affected_rows,ulonglong id,const char *message) { if (net->no_send_ok) // hack for re-parsing queries return; - + char buff[MYSQL_ERRMSG_SIZE+10],*pos; DBUG_ENTER("send_ok"); buff[0]=0; // No fields @@ -330,9 +346,9 @@ bool net_store_data(String* packet, I_List<i_string>* str_list) I_List_iterator<i_string> it(*str_list); i_string* s; - while((s=it++)) + while ((s=it++)) { - if(tmp.length()) + if (tmp.length()) tmp.append(','); tmp.append(s->ptr); } @@ -360,3 +376,19 @@ net_store_data(String *packet, CONVERT *convert, const char *from) return convert->store(packet, from, length); return net_store_data(packet,from,length); } + +/* + Function called by my_net_init() to set some check variables +*/ + +extern "C" { +void my_net_local_init(NET *net) +{ + net->max_packet= (uint) global_system_variables.net_buffer_length; + net->read_timeout= (uint) global_system_variables.net_read_timeout; + net->write_timeout=(uint) global_system_variables.net_write_timeout; + net->retry_count= (uint) global_system_variables.net_retry_count; + net->max_packet_size= max(global_system_variables.net_buffer_length, + global_system_variables.max_allowed_packet); +} +} |