Merge bk@192.168.21.1:/usr/home/bk/mysql-4.1
into deer.(none):/home/hf/work/mysql-4.1.emb
This commit is contained in:
commit
c43d7d92dd
@ -627,6 +627,7 @@ typedef struct st_mysql_methods
|
|||||||
MYSQL_RES * (*use_result)(MYSQL *mysql);
|
MYSQL_RES * (*use_result)(MYSQL *mysql);
|
||||||
void (*fetch_lengths)(unsigned long *to,
|
void (*fetch_lengths)(unsigned long *to,
|
||||||
MYSQL_ROW column, unsigned int field_count);
|
MYSQL_ROW column, unsigned int field_count);
|
||||||
|
void (*flush_use_result)(MYSQL *mysql);
|
||||||
#if !defined(MYSQL_SERVER) || defined(EMBEDDED_LIBRARY)
|
#if !defined(MYSQL_SERVER) || defined(EMBEDDED_LIBRARY)
|
||||||
MYSQL_FIELD * (*list_fields)(MYSQL *mysql);
|
MYSQL_FIELD * (*list_fields)(MYSQL *mysql);
|
||||||
my_bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt);
|
my_bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt);
|
||||||
|
@ -25,7 +25,6 @@ extern "C" {
|
|||||||
MYSQL_FIELD *unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields,
|
MYSQL_FIELD *unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields,
|
||||||
my_bool default_value, uint server_capabilities);
|
my_bool default_value, uint server_capabilities);
|
||||||
void free_rows(MYSQL_DATA *cur);
|
void free_rows(MYSQL_DATA *cur);
|
||||||
void flush_use_result(MYSQL *mysql);
|
|
||||||
my_bool mysql_autenticate(MYSQL *mysql, const char *passwd);
|
my_bool mysql_autenticate(MYSQL *mysql, const char *passwd);
|
||||||
void free_old_query(MYSQL *mysql);
|
void free_old_query(MYSQL *mysql);
|
||||||
void end_server(MYSQL *mysql);
|
void end_server(MYSQL *mysql);
|
||||||
|
@ -4392,7 +4392,7 @@ my_bool STDCALL mysql_stmt_free_result(MYSQL_STMT *stmt)
|
|||||||
if (mysql->status != MYSQL_STATUS_READY)
|
if (mysql->status != MYSQL_STATUS_READY)
|
||||||
{
|
{
|
||||||
/* There is a result set and it belongs to this statement */
|
/* There is a result set and it belongs to this statement */
|
||||||
flush_use_result(mysql);
|
(*mysql->methods->flush_use_result)(mysql);
|
||||||
mysql->status= MYSQL_STATUS_READY;
|
mysql->status= MYSQL_STATUS_READY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4442,7 +4442,7 @@ my_bool STDCALL mysql_stmt_close(MYSQL_STMT *stmt)
|
|||||||
Flush result set of the connection. If it does not belong
|
Flush result set of the connection. If it does not belong
|
||||||
to this statement, set a warning.
|
to this statement, set a warning.
|
||||||
*/
|
*/
|
||||||
flush_use_result(mysql);
|
(*mysql->methods->flush_use_result)(mysql);
|
||||||
if (mysql->unbuffered_fetch_owner)
|
if (mysql->unbuffered_fetch_owner)
|
||||||
*mysql->unbuffered_fetch_owner= TRUE;
|
*mysql->unbuffered_fetch_owner= TRUE;
|
||||||
mysql->status= MYSQL_STATUS_READY;
|
mysql->status= MYSQL_STATUS_READY;
|
||||||
|
@ -84,6 +84,7 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
|||||||
thd->clear_error();
|
thd->clear_error();
|
||||||
mysql->affected_rows= ~(my_ulonglong) 0;
|
mysql->affected_rows= ~(my_ulonglong) 0;
|
||||||
mysql->field_count= 0;
|
mysql->field_count= 0;
|
||||||
|
net->last_errno= 0;
|
||||||
|
|
||||||
thd->store_globals(); // Fix if more than one connect
|
thd->store_globals(); // Fix if more than one connect
|
||||||
/*
|
/*
|
||||||
@ -107,17 +108,38 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
|||||||
if (!skip_check)
|
if (!skip_check)
|
||||||
result= thd->net.last_errno ? -1 : 0;
|
result= thd->net.last_errno ? -1 : 0;
|
||||||
|
|
||||||
embedded_get_error(mysql);
|
/*
|
||||||
|
If mysql->field_count is set it means the parsing of the query was OK
|
||||||
|
and metadata was returned (see Protocol::send_fields).
|
||||||
|
In this case we postpone the error to be returned in mysql_stmt_store_result
|
||||||
|
(see emb_read_rows) to behave just as standalone server.
|
||||||
|
*/
|
||||||
|
if (!mysql->field_count)
|
||||||
|
embedded_get_error(mysql);
|
||||||
mysql->server_status= thd->server_status;
|
mysql->server_status= thd->server_status;
|
||||||
mysql->warning_count= ((THD*)mysql->thd)->total_warn_count;
|
mysql->warning_count= ((THD*)mysql->thd)->total_warn_count;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void emb_flush_use_result(MYSQL *mysql)
|
||||||
|
{
|
||||||
|
MYSQL_DATA *data= ((THD*)(mysql->thd))->data;
|
||||||
|
|
||||||
|
if (data)
|
||||||
|
{
|
||||||
|
free_rows(data);
|
||||||
|
((THD*)(mysql->thd))->data= NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static MYSQL_DATA *
|
static MYSQL_DATA *
|
||||||
emb_read_rows(MYSQL *mysql, MYSQL_FIELD *mysql_fields __attribute__((unused)),
|
emb_read_rows(MYSQL *mysql, MYSQL_FIELD *mysql_fields __attribute__((unused)),
|
||||||
unsigned int fields __attribute__((unused)))
|
unsigned int fields __attribute__((unused)))
|
||||||
{
|
{
|
||||||
MYSQL_DATA *result= ((THD*)mysql->thd)->data;
|
MYSQL_DATA *result= ((THD*)mysql->thd)->data;
|
||||||
|
embedded_get_error(mysql);
|
||||||
|
if (mysql->net.last_errno)
|
||||||
|
return NULL;
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
if (!(result=(MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA),
|
if (!(result=(MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA),
|
||||||
@ -227,6 +249,9 @@ int emb_read_binary_rows(MYSQL_STMT *stmt)
|
|||||||
int emb_unbuffered_fetch(MYSQL *mysql, char **row)
|
int emb_unbuffered_fetch(MYSQL *mysql, char **row)
|
||||||
{
|
{
|
||||||
MYSQL_DATA *data= ((THD*)mysql->thd)->data;
|
MYSQL_DATA *data= ((THD*)mysql->thd)->data;
|
||||||
|
embedded_get_error(mysql);
|
||||||
|
if (mysql->net.last_errno)
|
||||||
|
return mysql->net.last_errno;
|
||||||
if (!data || !data->data)
|
if (!data || !data->data)
|
||||||
{
|
{
|
||||||
*row= NULL;
|
*row= NULL;
|
||||||
@ -293,6 +318,7 @@ MYSQL_METHODS embedded_methods=
|
|||||||
emb_read_rows,
|
emb_read_rows,
|
||||||
emb_mysql_store_result,
|
emb_mysql_store_result,
|
||||||
emb_fetch_lengths,
|
emb_fetch_lengths,
|
||||||
|
emb_flush_use_result,
|
||||||
emb_list_fields,
|
emb_list_fields,
|
||||||
emb_read_prepare_result,
|
emb_read_prepare_result,
|
||||||
emb_stmt_execute,
|
emb_stmt_execute,
|
||||||
@ -442,14 +468,6 @@ int init_embedded_server(int argc, char **argv, char **groups)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
Update mysqld variables from client variables if set
|
|
||||||
The client variables are set also by get_one_option() in mysqld.cc
|
|
||||||
*/
|
|
||||||
if (max_allowed_packet)
|
|
||||||
global_system_variables.max_allowed_packet= max_allowed_packet;
|
|
||||||
if (net_buffer_length)
|
|
||||||
global_system_variables.net_buffer_length= net_buffer_length;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -478,18 +496,20 @@ void *create_embedded_thd(int client_flag, char *db)
|
|||||||
if (thd->store_globals())
|
if (thd->store_globals())
|
||||||
{
|
{
|
||||||
fprintf(stderr,"store_globals failed.\n");
|
fprintf(stderr,"store_globals failed.\n");
|
||||||
return NULL;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
thd->mysys_var= my_thread_var;
|
thd->mysys_var= my_thread_var;
|
||||||
thd->dbug_thread_id= my_thread_id();
|
thd->dbug_thread_id= my_thread_id();
|
||||||
thd->thread_stack= (char*) &thd;
|
thd->thread_stack= (char*) &thd;
|
||||||
|
|
||||||
|
/* TODO - add init_connect command execution */
|
||||||
|
|
||||||
thd->proc_info=0; // Remove 'login'
|
thd->proc_info=0; // Remove 'login'
|
||||||
thd->command=COM_SLEEP;
|
thd->command=COM_SLEEP;
|
||||||
thd->version=refresh_version;
|
thd->version=refresh_version;
|
||||||
thd->set_time();
|
thd->set_time();
|
||||||
init_sql_alloc(&thd->mem_root,8192,8192);
|
thd->init_for_queries();
|
||||||
thd->client_capabilities= client_flag;
|
thd->client_capabilities= client_flag;
|
||||||
|
|
||||||
thd->db= db;
|
thd->db= db;
|
||||||
@ -504,6 +524,9 @@ void *create_embedded_thd(int client_flag, char *db)
|
|||||||
|
|
||||||
thread_count++;
|
thread_count++;
|
||||||
return thd;
|
return thd;
|
||||||
|
err:
|
||||||
|
delete(thd);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NO_EMBEDDED_ACCESS_CHECKS
|
#ifdef NO_EMBEDDED_ACCESS_CHECKS
|
||||||
|
@ -723,7 +723,7 @@ void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate)
|
|||||||
Flush result set sent from server
|
Flush result set sent from server
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void flush_use_result(MYSQL *mysql)
|
static void cli_flush_use_result(MYSQL *mysql)
|
||||||
{
|
{
|
||||||
/* Clear the current execution status */
|
/* Clear the current execution status */
|
||||||
DBUG_PRINT("warning",("Not all packets read, clearing them"));
|
DBUG_PRINT("warning",("Not all packets read, clearing them"));
|
||||||
@ -842,7 +842,7 @@ mysql_free_result(MYSQL_RES *result)
|
|||||||
mysql->unbuffered_fetch_owner= 0;
|
mysql->unbuffered_fetch_owner= 0;
|
||||||
if (mysql->status == MYSQL_STATUS_USE_RESULT)
|
if (mysql->status == MYSQL_STATUS_USE_RESULT)
|
||||||
{
|
{
|
||||||
flush_use_result(mysql);
|
(*mysql->methods->flush_use_result)(mysql);
|
||||||
mysql->status=MYSQL_STATUS_READY;
|
mysql->status=MYSQL_STATUS_READY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1493,7 +1493,8 @@ static MYSQL_METHODS client_methods=
|
|||||||
cli_advanced_command,
|
cli_advanced_command,
|
||||||
cli_read_rows,
|
cli_read_rows,
|
||||||
cli_use_result,
|
cli_use_result,
|
||||||
cli_fetch_lengths
|
cli_fetch_lengths,
|
||||||
|
cli_flush_use_result
|
||||||
#ifndef MYSQL_SERVER
|
#ifndef MYSQL_SERVER
|
||||||
,cli_list_fields,
|
,cli_list_fields,
|
||||||
cli_read_prepare_result,
|
cli_read_prepare_result,
|
||||||
|
@ -5619,9 +5619,11 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||||||
#ifdef EMBEDDED_LIBRARY
|
#ifdef EMBEDDED_LIBRARY
|
||||||
case OPT_MAX_ALLOWED_PACKET:
|
case OPT_MAX_ALLOWED_PACKET:
|
||||||
max_allowed_packet= atoi(argument);
|
max_allowed_packet= atoi(argument);
|
||||||
|
global_system_variables.max_allowed_packet= max_allowed_packet;
|
||||||
break;
|
break;
|
||||||
case OPT_NET_BUFFER_LENGTH:
|
case OPT_NET_BUFFER_LENGTH:
|
||||||
net_buffer_length= atoi(argument);
|
net_buffer_length= atoi(argument);
|
||||||
|
global_system_variables.net_buffer_length= net_buffer_length;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#include <sslopt-case.h>
|
#include <sslopt-case.h>
|
||||||
|
@ -1138,8 +1138,10 @@ static int check_max_delayed_threads(THD *thd, set_var *var)
|
|||||||
|
|
||||||
static void fix_max_connections(THD *thd, enum_var_type type)
|
static void fix_max_connections(THD *thd, enum_var_type type)
|
||||||
{
|
{
|
||||||
|
#ifndef EMBEDDED_LIBRARY
|
||||||
resize_thr_alarm(max_connections +
|
resize_thr_alarm(max_connections +
|
||||||
global_system_variables.max_insert_delayed_threads + 10);
|
global_system_variables.max_insert_delayed_threads + 10);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -696,6 +696,7 @@ static bool emb_insert_params(Prepared_statement *stmt, String *expanded_query)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
uchar *buff= (uchar*) client_param->buffer;
|
uchar *buff= (uchar*) client_param->buffer;
|
||||||
|
param->unsigned_flag= client_param->is_unsigned;
|
||||||
param->set_param_func(param, &buff,
|
param->set_param_func(param, &buff,
|
||||||
client_param->length ?
|
client_param->length ?
|
||||||
*client_param->length :
|
*client_param->length :
|
||||||
@ -736,6 +737,7 @@ static bool emb_insert_params_withlog(Prepared_statement *stmt, String *query)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
uchar *buff= (uchar*)client_param->buffer;
|
uchar *buff= (uchar*)client_param->buffer;
|
||||||
|
param->unsigned_flag= client_param->is_unsigned;
|
||||||
param->set_param_func(param, &buff,
|
param->set_param_func(param, &buff,
|
||||||
client_param->length ?
|
client_param->length ?
|
||||||
*client_param->length :
|
*client_param->length :
|
||||||
|
Loading…
x
Reference in New Issue
Block a user