Commit e3a3d00c authored by serg@serg.mylan's avatar serg@serg.mylan

merged

parents aee17912 7f1ffcc4
...@@ -109,7 +109,7 @@ static int get_options(int *argc,char ***argv) ...@@ -109,7 +109,7 @@ static int get_options(int *argc,char ***argv)
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
struct hostent *hpaddr; struct hostent *hpaddr;
u_long taddr; in_addr_t taddr;
char *ip,**q; char *ip,**q;
int error=0; int error=0;
......
...@@ -389,6 +389,11 @@ void Item_string::make_field(Send_field *tmp_field) ...@@ -389,6 +389,11 @@ void Item_string::make_field(Send_field *tmp_field)
init_make_field(tmp_field,FIELD_TYPE_STRING); init_make_field(tmp_field,FIELD_TYPE_STRING);
} }
void Item_empty_string::make_field(Send_field *tmp_field)
{
init_make_field(tmp_field,FIELD_TYPE_VAR_STRING);
}
void Item_datetime::make_field(Send_field *tmp_field) void Item_datetime::make_field(Send_field *tmp_field)
{ {
init_make_field(tmp_field,FIELD_TYPE_DATETIME); init_make_field(tmp_field,FIELD_TYPE_DATETIME);
......
...@@ -356,6 +356,7 @@ class Item_empty_string :public Item_string ...@@ -356,6 +356,7 @@ class Item_empty_string :public Item_string
public: public:
Item_empty_string(const char *header,uint length) :Item_string("",0) Item_empty_string(const char *header,uint length) :Item_string("",0)
{ name=(char*) header; max_length=length;} { name=(char*) header; max_length=length;}
void make_field(Send_field *field);
unsigned int size_of() { return sizeof(*this);} unsigned int size_of() { return sizeof(*this);}
}; };
......
...@@ -566,27 +566,20 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list) ...@@ -566,27 +566,20 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
DBUG_RETURN(1); DBUG_RETURN(1);
} }
List<Item> field_list; char buff[1024];
field_list.push_back(new Item_empty_string("Table",NAME_LEN)); String packet(buff,sizeof(buff));
field_list.push_back(new Item_empty_string("Create Table",1024)); packet.length(0);
net_store_data(&packet,convert, table->table_name);
if (send_fields(thd,field_list,1))
DBUG_RETURN(1);
String *packet = &thd->packet;
{
packet->length(0);
net_store_data(packet,convert, table->table_name);
/* /*
A hack - we need to reserve some space for the length before A hack - we need to reserve some space for the length before
we know what it is - let's assume that the length of create table we know what it is - let's assume that the length of create table
statement will fit into 3 bytes ( 16 MB max :-) ) statement will fit into 3 bytes ( 16 MB max :-) )
*/ */
ulong store_len_offset = packet->length(); ulong store_len_offset = packet.length();
packet->length(store_len_offset + 4); packet.length(store_len_offset + 4);
if (store_create_info(thd, table, packet)) if (store_create_info(thd, table, &packet))
DBUG_RETURN(-1); DBUG_RETURN(-1);
ulong create_len = packet->length() - store_len_offset - 4; ulong create_len = packet.length() - store_len_offset - 4;
if (create_len > 0x00ffffff) // better readable in HEX ... if (create_len > 0x00ffffff) // better readable in HEX ...
{ {
/* /*
...@@ -601,14 +594,21 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list) ...@@ -601,14 +594,21 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
into fewer bytes, so we cannot use net_store_data() anymore, into fewer bytes, so we cannot use net_store_data() anymore,
and do it ourselves and do it ourselves
*/ */
char* p = (char*)packet->ptr() + store_len_offset; char* p = (char*)packet.ptr() + store_len_offset;
*p++ = (char) 253; // The client the length is stored using 3-bytes *p++ = (char) 253; // The client the length is stored using 3-bytes
int3store(p, create_len); int3store(p, create_len);
// now we are in business :-) List<Item> field_list;
if (my_net_write(&thd->net, (char*)packet->ptr(), packet->length())) field_list.push_back(new Item_empty_string("Table",NAME_LEN));
field_list.push_back(new Item_empty_string("Create Table",
max(packet.length(),1024))); // 1024 is for not to confuse old clients
if (send_fields(thd,field_list,1))
DBUG_RETURN(1); DBUG_RETURN(1);
}
if (my_net_write(&thd->net, (char*)packet.ptr(), packet.length()))
DBUG_RETURN(1);
send_eof(&thd->net); send_eof(&thd->net);
DBUG_RETURN(0); DBUG_RETURN(0);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment