summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rw-r--r--sql/field.cc18
-rw-r--r--sql/field.h2
-rw-r--r--sql/ha_myisam.cc4
-rw-r--r--sql/item.cc3
-rw-r--r--sql/item_strfunc.cc5
-rw-r--r--sql/mysql_priv.h10
-rw-r--r--sql/net_pkg.cc14
-rw-r--r--sql/sql_acl.cc4
-rw-r--r--sql/sql_base.cc4
-rw-r--r--sql/sql_class.cc3
-rw-r--r--sql/sql_class.h7
-rw-r--r--sql/sql_handler.cc2
-rw-r--r--sql/sql_parse.cc8
-rw-r--r--sql/sql_select.cc3
-rw-r--r--sql/sql_show.cc46
-rw-r--r--sql/sql_table.cc27
16 files changed, 121 insertions, 39 deletions
diff --git a/sql/field.cc b/sql/field.cc
index cdbe05669d0..205e98698fe 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -4489,7 +4489,7 @@ void Field_blob::set_key_image(char *buff,uint length)
void Field_geom::get_key_image(char *buff,uint length, imagetype type)
{
- length-=HA_KEY_BLOB_LENGTH;
+/* length-=HA_KEY_BLOB_LENGTH;
ulong blob_length=get_length(ptr);
char *blob;
get_ptr(&blob);
@@ -4504,12 +4504,19 @@ void Field_geom::get_key_image(char *buff,uint length, imagetype type)
float8store(buff+16, mbr.ymin);
float8store(buff+24, mbr.ymax);
return;
+*/
+ Field_blob::get_key_image(buff, length, type);
}
void Field_geom::set_key_image(char *buff,uint length)
{
+ Field_blob::set_key_image(buff, length);
}
+void Field_geom::sql_type(String &res) const
+{
+ res.set("geometry", 8U, default_charset_info);
+}
int Field_blob::key_cmp(const byte *key_ptr, uint max_key_length)
{
@@ -5162,6 +5169,7 @@ uint32 calc_pack_length(enum_field_types type,uint32 length)
case FIELD_TYPE_BLOB: return 2+portable_sizeof_char_ptr;
case FIELD_TYPE_MEDIUM_BLOB: return 3+portable_sizeof_char_ptr;
case FIELD_TYPE_LONG_BLOB: return 4+portable_sizeof_char_ptr;
+ case FIELD_TYPE_GEOMETRY: return 2+portable_sizeof_char_ptr;
case FIELD_TYPE_SET:
case FIELD_TYPE_ENUM: abort(); return 0; // This shouldn't happen
default: return 0;
@@ -5209,15 +5217,15 @@ Field *make_field(char *ptr, uint32 field_length,
f_packtype(pack_flag),
field_length);
+ if (f_is_geom(pack_flag))
+ return new Field_geom(ptr,null_pos,null_bit,
+ unireg_check, field_name, table,
+ pack_length,f_is_binary(pack_flag) != 0);
if (f_is_blob(pack_flag))
return new Field_blob(ptr,null_pos,null_bit,
unireg_check, field_name, table,
pack_length,f_is_binary(pack_flag) != 0,
default_charset_info);
- if (f_is_geom(pack_flag))
- return new Field_geom(ptr,null_pos,null_bit,
- unireg_check, field_name, table,
- pack_length,f_is_binary(pack_flag) != 0);
if (interval)
{
diff --git a/sql/field.h b/sql/field.h
index a1a511075fb..8d63b0ef3f1 100644
--- a/sql/field.h
+++ b/sql/field.h
@@ -950,6 +950,8 @@ public:
:Field_blob(len_arg, maybe_null_arg, field_name_arg,
table_arg, binary_arg, default_charset_info) {}
enum ha_base_keytype key_type() const { return HA_KEYTYPE_VARBINARY; }
+ enum_field_types type() const { return FIELD_TYPE_GEOMETRY;}
+ void sql_type(String &str) const;
void get_key_image(char *buff,uint length, imagetype type);
void set_key_image(char *buff,uint length);
diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc
index e02252e711f..43a351101b3 100644
--- a/sql/ha_myisam.cc
+++ b/sql/ha_myisam.cc
@@ -79,7 +79,7 @@ static void mi_check_print_msg(MI_CHECK *param, const char* msg_type,
net_store_data(packet, msg_type);
net_store_data(packet, msgbuf);
- if (my_net_write(&thd->net, (char*)thd->packet.ptr(), thd->packet.length()))
+ if (SEND_ROW(thd, &thd->net, 4, (char*)thd->packet.ptr(), thd->packet.length()))
sql_print_error("Failed on my_net_write, writing to stderr instead: %s\n",
msgbuf);
return;
@@ -1093,7 +1093,7 @@ int ha_myisam::create(const char *name, register TABLE *table,
keydef[i].flag|=HA_AUTO_KEY;
found_auto_increment=1;
}
- if (field->type() == FIELD_TYPE_BLOB)
+ if ((field->type() == FIELD_TYPE_BLOB) || (field->type() == FIELD_TYPE_GEOMETRY))
{
keydef[i].seg[j].flag|=HA_BLOB_PART;
/* save number of bytes used to pack length */
diff --git a/sql/item.cc b/sql/item.cc
index 05185a24f45..38ec7e80898 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -444,6 +444,9 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
cause error ER_NON_UNIQ_ERROR in find_field_in_tables.
*/
SELECT_LEX *last= 0;
+#ifdef EMBEDDED_LIBRARY
+ thd->net.last_errno= 0;
+#endif
for (SELECT_LEX *sl= thd->lex.select->outer_select();
sl;
sl= sl->outer_select())
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 2ef95bb8746..2b85b3e794b 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -1367,10 +1367,15 @@ String *Item_func_database::val_str(String *str)
String *Item_func_user::val_str(String *str)
{
THD *thd=current_thd;
+#ifdef EMBEDDED_LIBRARY
+ if (str->copy("localuser@localhost", (uint)strlen("localuser@localhost")))
+ return &empty_string;
+#else
if (str->copy((const char*) thd->user,(uint) strlen(thd->user)) ||
str->append('@') ||
str->append(thd->host ? thd->host : thd->ip ? thd->ip : ""))
return &empty_string;
+#endif
return str;
}
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index d1a3c7e235a..bd6914363e2 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -869,3 +869,13 @@ inline void mark_as_null_row(TABLE *table)
table->status|=STATUS_NULL_ROW;
bfill(table->null_flags,table->null_bytes,255);
}
+
+#ifdef EMBEDDED_LIBRARY
+ int embedded_send_row(THD *thd, int n_fields, char *data, int data_len);
+#define SEND_ROW(thd, net, n_fields, data, data_len)\
+ embedded_send_row(thd, n_fields, data, data_len)
+#else
+#define SEND_ROW(thd, net, n_fields, data, data_len)\
+ my_net_write(net, data, data_len)
+#endif
+
diff --git a/sql/net_pkg.cc b/sql/net_pkg.cc
index 1da625e776f..0fc2347bebd 100644
--- a/sql/net_pkg.cc
+++ b/sql/net_pkg.cc
@@ -47,6 +47,12 @@ void send_error(THD *thd, uint sql_errno, const char *err)
}
}
}
+
+#ifdef EMBEDDED_LIBRARY
+ net->last_errno= sql_errno;
+ strmake(net->last_error, err, sizeof(net->last_error)-1);
+#else
+
if (net->vio == 0)
{
if (thd->bootstrap)
@@ -69,6 +75,7 @@ void send_error(THD *thd, uint sql_errno, const char *err)
set_if_smaller(length,MYSQL_ERRMSG_SIZE-1);
}
VOID(net_write_command(net,(uchar) 255, "", 0, (char*) err,length));
+#endif /* EMBEDDED_LIBRARY*/
thd->fatal_error=0; // Error message is given
thd->net.report_error= 0;
DBUG_VOID_RETURN;
@@ -158,6 +165,7 @@ net_printf(THD *thd, uint errcode, ...)
length=sizeof(net->last_error)-1; /* purecov: inspected */
va_end(args);
+#ifndef EMBEDDED_LIBRARY
if (net->vio == 0)
{
if (thd->bootstrap)
@@ -175,6 +183,10 @@ net_printf(THD *thd, uint errcode, ...)
if (offset)
int2store(text_pos-2, errcode);
VOID(net_real_write(net,(char*) net->buff,length+head_length+1+offset));
+#else
+ net->last_errno= errcode;
+ strmake(net->last_error, text_pos, length);
+#endif
thd->fatal_error=0; // Error message is given
DBUG_VOID_RETURN;
}
@@ -205,6 +217,7 @@ net_printf(THD *thd, uint errcode, ...)
If net->no_send_ok return without sending packet
*/
+#ifndef EMBEDDED_LIBRARY
void
send_ok(THD *thd, ha_rows affected_rows, ulonglong id, const char *message)
@@ -290,6 +303,7 @@ send_eof(THD *thd, bool no_flush)
}
DBUG_VOID_RETURN;
}
+#endif /* EMBEDDED_LIBRARY */
/****************************************************************************
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 5f8cf42c2bf..1941d84cc1e 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -2635,8 +2635,12 @@ ulong get_table_grant(THD *thd, TABLE_LIST *table)
GRANT_TABLE *grant_table;
rw_rdlock(&LOCK_grant);
+#ifdef EMBEDDED_LIBRARY
+ grant_table= NULL;
+#else
grant_table = table_hash_search(thd->host,thd->ip,db,user,
table->real_name,0);
+#endif
table->grant.grant_table=grant_table; // Remember for column test
table->grant.version=grant_version;
if (grant_table)
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 46afddf0967..40a11d54f10 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -195,7 +195,6 @@ OPEN_TABLE_LIST *list_open_tables(THD *thd, const char *wild)
DBUG_RETURN(open_list);
}
-
/*
Send name and type of result to client converted to a given char set
@@ -216,6 +215,8 @@ OPEN_TABLE_LIST *list_open_tables(THD *thd, const char *wild)
1 Error (Note that in this case the error is not sent to the client)
*/
+#ifndef EMBEDDED_LIBRARY
+
bool
send_convert_fields(THD *thd,List<Item> &list,CONVERT *convert,uint flag)
{
@@ -439,6 +440,7 @@ err:
DBUG_RETURN(1); /* purecov: inspected */
}
+#endif /* EMBEDDED_LIBRARY */
/*****************************************************************************
* Functions to free open table cache
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 083b0ed2543..c4966ff1326 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -448,6 +448,8 @@ bool select_send::send_fields(List<Item> &list,uint flag)
}
+#ifndef EMBEDDED_LIBRARY
+
/* Send data to client. Returns 0 if ok */
bool select_send::send_data(List<Item> &items)
@@ -482,6 +484,7 @@ bool select_send::send_data(List<Item> &items)
else
DBUG_RETURN(1);
}
+#endif /* EMBEDDED_LIBRARY */
bool select_send::send_eof()
{
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 7b5a6da8c6b..b625a78b867 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -335,6 +335,10 @@ class select_result;
#define THD_SENTRY_MAGIC 0xfeedd1ff
#define THD_SENTRY_GONE 0xdeadbeef
+#ifdef EMBEDDED_LIBRARY
+typedef struct st_mysql;
+#endif
+
#define THD_CHECK_SENTRY(thd) DBUG_ASSERT(thd->dbug_sentry == THD_SENTRY_MAGIC)
struct system_variables
@@ -393,6 +397,9 @@ public:
struct rand_struct rand; // used for authentication
struct system_variables variables; // Changeable local variables
pthread_mutex_t LOCK_delete; // Locked before thd is deleted
+#ifdef EMBEDDED_LIBRARY
+ struct st_mysql *mysql;
+#endif
char *query; // Points to the current query,
/*
diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc
index ea15f2e5417..7867db37d6d 100644
--- a/sql/sql_handler.cc
+++ b/sql/sql_handler.cc
@@ -233,7 +233,7 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
goto err;
}
}
- my_net_write(&thd->net, (char*)packet->ptr(), packet->length());
+ SEND_ROW(thd, &thd->net, list.elements, (char*)packet->ptr(), packet->length());
}
}
num_rows++;
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 046b5d45b59..96b48ebd1fd 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -839,8 +839,9 @@ err:
}
- /* Execute one command from socket (query or simple command) */
+#ifndef EMBEDDED_LIBRARY
+ /* Execute one command from socket (query or simple command) */
bool do_command(THD *thd)
{
char *packet;
@@ -879,6 +880,7 @@ bool do_command(THD *thd)
DBUG_RETURN(dispatch_command(command,thd, packet+1, (uint) packet_length));
}
+#endif /* EMBEDDED_LIBRARY */
bool dispatch_command(enum enum_server_command command, THD *thd,
char* packet, uint packet_length)
@@ -3157,7 +3159,6 @@ bool add_field_to_list(char *field_name, enum_field_types type,
case FIELD_TYPE_STRING:
case FIELD_TYPE_VAR_STRING:
case FIELD_TYPE_NULL:
- case FIELD_TYPE_GEOMETRY:
break;
case FIELD_TYPE_DECIMAL:
if (!length)
@@ -3170,6 +3171,7 @@ bool add_field_to_list(char *field_name, enum_field_types type,
case FIELD_TYPE_TINY_BLOB:
case FIELD_TYPE_LONG_BLOB:
case FIELD_TYPE_MEDIUM_BLOB:
+ case FIELD_TYPE_GEOMETRY:
if (default_value) // Allow empty as default value
{
String str,*res;
@@ -3305,7 +3307,7 @@ bool add_field_to_list(char *field_name, enum_field_types type,
if (new_field->length >= MAX_FIELD_WIDTH ||
(!new_field->length && !(new_field->flags & BLOB_FLAG) &&
- type != FIELD_TYPE_STRING && type != FIELD_TYPE_VAR_STRING))
+ type != FIELD_TYPE_STRING && type != FIELD_TYPE_VAR_STRING && type != FIELD_TYPE_GEOMETRY))
{
net_printf(thd,ER_TOO_BIG_FIELDLENGTH,field_name,
MAX_FIELD_WIDTH-1); /* purecov: inspected */
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 6a48f56443c..84ffa9c6663 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -5358,6 +5358,9 @@ end_update(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
{
Item *item= *group->item;
item->save_org_in_field(group->field);
+#ifdef EMBEDDED_LIBRARY
+ join->thd->net.last_errno= 0;
+#endif
/* Store in the used key if the field was 0 */
if (item->maybe_null)
group->buff[-1]=item->null_value ? 1 : 0;
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index d6fe2f3772a..eca86a60887 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -52,8 +52,6 @@ extern struct st_VioSSLAcceptorFd * ssl_acceptor_fd;
** Send list of databases
** A database is a directory in the mysql_data_home directory
****************************************************************************/
-
-
int
mysqld_show_dbs(THD *thd,const char *wild)
{
@@ -87,8 +85,8 @@ mysqld_show_dbs(THD *thd,const char *wild)
{
packet->length(0);
net_store_data(packet, thd->variables.convert_set, file_name);
- if (my_net_write(&thd->net, (char*) packet->ptr(),
- packet->length()))
+ if (SEND_ROW(thd, &thd->net, field_list.elements,
+ (char *)packet->ptr(), packet->length()))
DBUG_RETURN(-1);
}
}
@@ -127,7 +125,8 @@ int mysqld_show_open_tables(THD *thd,const char *wild)
net_store_data(packet,convert, open_list->table);
net_store_data(packet,open_list->in_use);
net_store_data(packet,open_list->locked);
- if (my_net_write(&thd->net,(char*) packet->ptr(),packet->length()))
+ if (SEND_ROW(thd, &thd->net, field_list.elements,
+ (char *)packet->ptr(), packet->length()))
{
DBUG_RETURN(-1);
}
@@ -169,7 +168,8 @@ int mysqld_show_tables(THD *thd,const char *db,const char *wild)
{
packet->length(0);
net_store_data(packet, thd->variables.convert_set, file_name);
- if (my_net_write(&thd->net,(char*) packet->ptr(),packet->length()))
+ if (SEND_ROW(thd, &thd->net, field_list.elements,
+ (char *)packet->ptr(), packet->length()))
DBUG_RETURN(-1);
}
send_eof(thd);
@@ -635,9 +635,9 @@ int mysqld_extend_show_tables(THD *thd,const char *db,const char *wild)
}
close_thread_tables(thd,0);
}
- if (my_net_write(&thd->net,(char*) packet->ptr(),
- packet->length()))
- DBUG_RETURN(-1);
+ if (SEND_ROW(thd, &thd->net, field_list.elements,
+ (char *)packet->ptr(), packet->length()))
+ DBUG_RETURN(-1);
}
send_eof(thd);
DBUG_RETURN(0);
@@ -647,7 +647,6 @@ int mysqld_extend_show_tables(THD *thd,const char *db,const char *wild)
/***************************************************************************
** List all columns in a table_list->real_name
***************************************************************************/
-
int
mysqld_show_fields(THD *thd, TABLE_LIST *table_list,const char *wild,
bool verbose)
@@ -750,8 +749,8 @@ mysqld_show_fields(THD *thd, TABLE_LIST *table_list,const char *wild,
if (verbose)
{
/* Add grant options & comments */
- col_access= get_column_grant(thd,table_list,field) & COL_ACLS;
end=tmp;
+ col_access= get_column_grant(thd,table_list,field) & COL_ACLS;
for (uint bitnr=0; col_access ; col_access>>=1,bitnr++)
{
if (col_access & 1)
@@ -763,8 +762,9 @@ mysqld_show_fields(THD *thd, TABLE_LIST *table_list,const char *wild,
net_store_data(packet,convert, tmp+1,end == tmp ? 0 : (uint) (end-tmp-1));
net_store_data(packet, field->comment.str,field->comment.length);
}
- if (my_net_write(&thd->net,(char*) packet->ptr(),packet->length()))
- DBUG_RETURN(1);
+ if (SEND_ROW(thd, &thd->net, field_list.elements,
+ (char *)packet->ptr(), packet->length()))
+ DBUG_RETURN(-1);
}
}
}
@@ -833,8 +833,9 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
int3store(p, create_len);
// now we are in business :-)
- if (my_net_write(&thd->net, (char*)packet->ptr(), packet->length()))
- DBUG_RETURN(1);
+ if (SEND_ROW(thd, &thd->net, field_list.elements,
+ (char *)packet->ptr(), packet->length()))
+ DBUG_RETURN(-1);
}
send_eof(thd);
DBUG_RETURN(0);
@@ -956,8 +957,9 @@ mysqld_show_keys(THD *thd, TABLE_LIST *table_list)
net_store_data(packet,convert,table->file->index_type(i));
/* Comment */
net_store_data(packet,convert,"");
- if (my_net_write(&thd->net,(char*) packet->ptr(),packet->length()))
- DBUG_RETURN(1); /* purecov: inspected */
+ if (SEND_ROW(thd, &thd->net, field_list.elements,
+ (char *)packet->ptr(), packet->length()))
+ DBUG_RETURN(-1);
}
}
send_eof(thd);
@@ -1384,8 +1386,9 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
net_store_data(packet,convert,thd_info->query);
else
net_store_null(packet);
- if (my_net_write(&thd->net,(char*) packet->ptr(),packet->length()))
- break; /* purecov: inspected */
+ if (SEND_ROW(thd, &thd->net, field_list.elements,
+ (char *)packet->ptr(), packet->length()))
+ break;
}
send_eof(thd);
DBUG_VOID_RETURN;
@@ -1684,8 +1687,9 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables,
net_store_data(&packet2, ""); // Safety
break;
}
- if (my_net_write(&thd->net, (char*) packet2.ptr(),packet2.length()))
- goto err; /* purecov: inspected */
+ if (SEND_ROW(thd, &thd->net, field_list.elements,
+ (char *)packet2.ptr(), packet2.length()))
+ goto err;
}
}
pthread_mutex_unlock(&LOCK_status);
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index bff07809861..803d4102563 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -397,6 +397,16 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
sql_field->unireg_check=Field::BLOB_FIELD;
blob_columns++;
break;
+ case FIELD_TYPE_GEOMETRY:
+ sql_field->pack_flag=FIELDFLAG_GEOM |
+ pack_length_to_packflag(sql_field->pack_length -
+ portable_sizeof_char_ptr);
+ if (sql_field->flags & BINARY_FLAG)
+ sql_field->pack_flag|=FIELDFLAG_BINARY;
+ sql_field->length=8; // Unireg field length
+ sql_field->unireg_check=Field::BLOB_FIELD;
+ blob_columns++;
+ break;
case FIELD_TYPE_VAR_STRING:
case FIELD_TYPE_STRING:
sql_field->pack_flag=0;
@@ -1007,8 +1017,7 @@ static int send_check_errmsg(THD* thd, TABLE_LIST* table,
net_store_data(packet, "error");
net_store_data(packet, errmsg);
thd->net.last_error[0]=0;
- if (my_net_write(&thd->net, (char*) thd->packet.ptr(),
- packet->length()))
+ if (SEND_ROW(thd, &thd->net, 4, (char*) thd->packet.ptr(), packet->length()))
return -1;
return 1;
}
@@ -1178,6 +1187,9 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
thd->open_options|= extra_open_options;
table->table = open_ltable(thd, table, lock_type);
+#ifdef EMBEDDED_LIBRARY
+ thd->net.last_errno= 0; // these errors shouldn't get client
+#endif
thd->open_options&= ~extra_open_options;
packet->length(0);
if (prepare_func)
@@ -1199,7 +1211,7 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
err_msg=ER(ER_CHECK_NO_SUCH_TABLE);
net_store_data(packet, err_msg);
thd->net.last_error[0]=0;
- if (my_net_write(&thd->net, (char*) thd->packet.ptr(),
+ if (SEND_ROW(thd, &thd->net, field_list.elements, (char*) thd->packet.ptr(),
packet->length()))
goto err;
continue;
@@ -1214,7 +1226,7 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
net_store_data(packet, buff);
close_thread_tables(thd);
table->table=0; // For query cache
- if (my_net_write(&thd->net, (char*) thd->packet.ptr(),
+ if (SEND_ROW(thd, &thd->net, field_list.elements, (char*) thd->packet.ptr(),
packet->length()))
goto err;
continue;
@@ -1243,6 +1255,9 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
}
int result_code = (table->table->file->*operator_func)(thd, check_opt);
+#ifdef EMBEDDED_LIBRARY
+ thd->net.last_errno= 0; // these errors shouldn't get client
+#endif
packet->length(0);
net_store_data(packet, table_name);
net_store_data(packet, operator_name);
@@ -1298,8 +1313,8 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
}
close_thread_tables(thd);
table->table=0; // For query cache
- if (my_net_write(&thd->net, (char*) packet->ptr(),
- packet->length()))
+ if (SEND_ROW(thd, &thd->net, field_list.elements,
+ (char *)thd->packet.ptr(), thd->packet.length()))
goto err;
}