diff options
Diffstat (limited to 'sql/protocol.cc')
-rw-r--r-- | sql/protocol.cc | 70 |
1 files changed, 36 insertions, 34 deletions
diff --git a/sql/protocol.cc b/sql/protocol.cc index 0239d867f6b..9926d4a6432 100644 --- a/sql/protocol.cc +++ b/sql/protocol.cc @@ -27,6 +27,23 @@ #include <stdarg.h> #include <assert.h> +#ifndef EMBEDDED_LIBRARY +bool Protocol::net_store_data(const char *from, uint length) +{ + ulong packet_length=packet->length(); + if (packet_length+5+length > packet->alloced_length() && + packet->realloc(packet_length+5+length)) + return 1; + char *to=(char*) net_store_length((char*) packet->ptr()+packet_length, + (ulonglong) length); + memcpy(to,from,length); + packet->length((uint) (to+length-packet->ptr())); + return 0; +} + +#endif + + /* Send a error string to client */ void send_error(THD *thd, uint sql_errno, const char *err) @@ -402,23 +419,6 @@ char *net_store_length(char *pkg, uint length) } -/* - Used internally for storing strings in packet -*/ - -static bool net_store_data(String *packet, const char *from, uint length) -{ - ulong packet_length=packet->length(); - if (packet_length+5+length > packet->alloced_length() && - packet->realloc(packet_length+5+length)) - return 1; - char *to=(char*) net_store_length((char*) packet->ptr()+packet_length, - (ulonglong) length); - memcpy(to,from,length); - packet->length((uint) (to+length-packet->ptr())); - return 0; -} - /**************************************************************************** Functions used by the protocol functions (like send_ok) to store strings and numbers in the header result packet. @@ -574,15 +574,16 @@ err: DBUG_RETURN(1); /* purecov: inspected */ } -#endif - bool Protocol::write() { DBUG_ENTER("Protocol::write"); - DBUG_RETURN(SEND_ROW(thd, n_fields, packet->ptr(), packet->length())); + DBUG_RETURN(my_net_write(&thd->net, packet->ptr(), packet->length())); } +#endif /* EMBEDDED_LIBRARY */ + + /* Send \0 end terminated string @@ -640,6 +641,7 @@ bool Protocol::store(I_List<i_string>* str_list) ****************************************************************************/ +#ifndef EMBEDDED_LIBRARY void Protocol_simple::prepare_for_resend() { packet->length(0); @@ -647,6 +649,7 @@ void Protocol_simple::prepare_for_resend() field_pos= 0; #endif } +#endif bool Protocol_simple::store_null() { @@ -669,7 +672,7 @@ bool Protocol_simple::store(const char *from, uint length) #endif if (convert) return convert->store(packet, from, length); - return net_store_data(packet, from, length); + return net_store_data(from, length); } @@ -679,7 +682,7 @@ bool Protocol_simple::store_tiny(longlong from) DBUG_ASSERT(field_types == 0 || field_types[field_pos++] == MYSQL_TYPE_TINY); #endif char buff[20]; - return net_store_data(packet,(char*) buff, + return net_store_data((char*) buff, (uint) (int10_to_str((int) from,buff, -10)-buff)); } @@ -690,7 +693,7 @@ bool Protocol_simple::store_short(longlong from) field_types[field_pos++] == MYSQL_TYPE_SHORT); #endif char buff[20]; - return net_store_data(packet,(char*) buff, + return net_store_data((char*) buff, (uint) (int10_to_str((int) from,buff, -10)-buff)); } @@ -700,7 +703,7 @@ bool Protocol_simple::store_long(longlong from) DBUG_ASSERT(field_types == 0 || field_types[field_pos++] == MYSQL_TYPE_LONG); #endif char buff[20]; - return net_store_data(packet,(char*) buff, + return net_store_data((char*) buff, (uint) (int10_to_str((int) from,buff, -10)-buff)); } @@ -712,7 +715,7 @@ bool Protocol_simple::store_longlong(longlong from, bool unsigned_flag) field_types[field_pos++] == MYSQL_TYPE_LONGLONG); #endif char buff[22]; - return net_store_data(packet,(char*) buff, + return net_store_data((char*) buff, (uint) (longlong10_to_str(from,buff, unsigned_flag ? 10 : -10)- buff)); @@ -726,7 +729,7 @@ bool Protocol_simple::store(float from, uint32 decimals, String *buffer) field_types[field_pos++] == MYSQL_TYPE_FLOAT); #endif buffer->set((double) from, decimals, thd->variables.thd_charset); - return net_store_data(packet,(char*) buffer->ptr(), buffer->length()); + return net_store_data((char*) buffer->ptr(), buffer->length()); } bool Protocol_simple::store(double from, uint32 decimals, String *buffer) @@ -736,7 +739,7 @@ bool Protocol_simple::store(double from, uint32 decimals, String *buffer) field_types[field_pos++] == MYSQL_TYPE_DOUBLE); #endif buffer->set(from, decimals, thd->variables.thd_charset); - return net_store_data(packet,(char*) buffer->ptr(), buffer->length()); + return net_store_data((char*) buffer->ptr(), buffer->length()); } @@ -752,7 +755,7 @@ bool Protocol_simple::store(Field *field) field->val_str(&tmp,&tmp); if (convert) return convert->store(packet, tmp.ptr(), tmp.length()); - return net_store_data(packet, tmp.ptr(), tmp.length()); + return net_store_data(tmp.ptr(), tmp.length()); } @@ -773,7 +776,7 @@ bool Protocol_simple::store(TIME *tm) (int) tm->hour, (int) tm->minute, (int) tm->second)); - return net_store_data(packet, (char*) buff, length); + return net_store_data((char*) buff, length); } @@ -789,7 +792,7 @@ bool Protocol_simple::store_date(TIME *tm) (int) tm->year, (int) tm->month, (int) tm->day)); - return net_store_data(packet, (char*) buff, length); + return net_store_data((char*) buff, length); } @@ -806,7 +809,7 @@ bool Protocol_simple::store_time(TIME *tm) (long) tm->day*3600L+(long) tm->hour, (int) tm->minute, (int) tm->second)); - return net_store_data(packet, (char*) buff, length); + return net_store_data((char*) buff, length); } @@ -816,8 +819,7 @@ bool Protocol_simple::store_time(TIME *tm) bool Protocol_prep::prepare_for_send(List<Item> *item_list) { - field_count=item_list->elements; - set_nfields(item_list->elements); + Protocol::prepare_for_send(item_list); bit_fields= (field_count+3)/8; if (packet->alloc(bit_fields)) return 1; @@ -846,7 +848,7 @@ bool Protocol_prep::store(const char *from,uint length) field_pos++; if (convert) return convert->store(packet, from, length); - return net_store_data(packet, from, length); + return net_store_data(from, length); } |