mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Fix for #1430
there was an error about sendind prepared parameters to the server
This commit is contained in:
@ -755,7 +755,10 @@ bool setup_params_data(st_prep_stmt *stmt)
|
|||||||
{
|
{
|
||||||
uchar *buff= (uchar*)client_param->buffer;
|
uchar *buff= (uchar*)client_param->buffer;
|
||||||
param->maybe_null= param->null_value= 0;
|
param->maybe_null= param->null_value= 0;
|
||||||
param->setup_param_func(param,&buff);
|
param->setup_param_func(param,&buff,
|
||||||
|
client_param->length ?
|
||||||
|
*client_param->length :
|
||||||
|
client_param->buffer_length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
param_no++;
|
param_no++;
|
||||||
@ -796,7 +799,10 @@ bool setup_params_data_withlog(st_prep_stmt *stmt)
|
|||||||
{
|
{
|
||||||
uchar *buff= (uchar*)client_param->buffer;
|
uchar *buff= (uchar*)client_param->buffer;
|
||||||
param->maybe_null= param->null_value= 0;
|
param->maybe_null= param->null_value= 0;
|
||||||
param->setup_param_func(param,&buff);
|
param->setup_param_func(param,&buff,
|
||||||
|
client_param->length ?
|
||||||
|
*client_param->length :
|
||||||
|
client_param->buffer_length);
|
||||||
res= param->query_val_str(&str);
|
res= param->query_val_str(&str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -304,11 +304,13 @@ void berkeley_cleanup_log_files(void)
|
|||||||
char **names;
|
char **names;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
|
// by HF. Sometimes it crashes. TODO - find out why
|
||||||
|
#ifndef EMBEDDED_LIBRARY
|
||||||
/* XXX: Probably this should be done somewhere else, and
|
/* XXX: Probably this should be done somewhere else, and
|
||||||
* should be tunable by the user. */
|
* should be tunable by the user. */
|
||||||
if ((error = db_env->txn_checkpoint(db_env, 0, 0, 0)))
|
if ((error = db_env->txn_checkpoint(db_env, 0, 0, 0)))
|
||||||
my_error(ER_ERROR_DURING_CHECKPOINT, MYF(0), error); /* purecov: inspected */
|
my_error(ER_ERROR_DURING_CHECKPOINT, MYF(0), error); /* purecov: inspected */
|
||||||
|
#endif
|
||||||
if ((error = db_env->log_archive(db_env, &names, DB_ARCH_ABS)) != 0)
|
if ((error = db_env->log_archive(db_env, &names, DB_ARCH_ABS)) != 0)
|
||||||
{
|
{
|
||||||
DBUG_PRINT("error", ("log_archive failed (error %d)", error)); /* purecov: inspected */
|
DBUG_PRINT("error", ("log_archive failed (error %d)", error)); /* purecov: inspected */
|
||||||
|
@ -346,7 +346,11 @@ public:
|
|||||||
void set_time(TIME *tm, timestamp_type type);
|
void set_time(TIME *tm, timestamp_type type);
|
||||||
bool get_time(TIME *tm);
|
bool get_time(TIME *tm);
|
||||||
void reset() {}
|
void reset() {}
|
||||||
|
#ifndef EMBEDDED_LIBRARY
|
||||||
void (*setup_param_func)(Item_param *param, uchar **pos);
|
void (*setup_param_func)(Item_param *param, uchar **pos);
|
||||||
|
#else
|
||||||
|
void (*setup_param_func)(Item_param *param, uchar **pos, ulong data_len);
|
||||||
|
#endif
|
||||||
enum Item_result result_type () const
|
enum Item_result result_type () const
|
||||||
{ return item_result_type; }
|
{ return item_result_type; }
|
||||||
String *query_val_str(String *str);
|
String *query_val_str(String *str);
|
||||||
|
@ -76,6 +76,14 @@ Long data handling:
|
|||||||
|
|
||||||
#define STMT_QUERY_LOG_LENGTH 8192
|
#define STMT_QUERY_LOG_LENGTH 8192
|
||||||
|
|
||||||
|
#ifdef EMBEDDED_LIBRARY
|
||||||
|
#define SETUP_PARAM_FUNCTION(fn_name) \
|
||||||
|
static void fn_name(Item_param *param, uchar **pos, ulong data_len)
|
||||||
|
#else
|
||||||
|
#define SETUP_PARAM_FUNCTION(fn_name) \
|
||||||
|
static void fn_name(Item_param *param, uchar **pos)
|
||||||
|
#endif
|
||||||
|
|
||||||
String my_null_string("NULL", 4, default_charset_info);
|
String my_null_string("NULL", 4, default_charset_info);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -189,6 +197,7 @@ static bool send_item_params(PREP_STMT *stmt)
|
|||||||
caller by positing the pointer to param data
|
caller by positing the pointer to param data
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef EMBEDDED_LIBRARY
|
||||||
static ulong get_param_length(uchar **packet)
|
static ulong get_param_length(uchar **packet)
|
||||||
{
|
{
|
||||||
reg1 uchar *pos= *packet;
|
reg1 uchar *pos= *packet;
|
||||||
@ -210,6 +219,10 @@ static ulong get_param_length(uchar **packet)
|
|||||||
(*packet)+=9; // Must be 254 when here
|
(*packet)+=9; // Must be 254 when here
|
||||||
return (ulong) uint4korr(pos+1);
|
return (ulong) uint4korr(pos+1);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
#define get_param_length(A) data_len
|
||||||
|
#endif /*!EMBEDDED_LIBRARY*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Setup param conversion routines
|
Setup param conversion routines
|
||||||
|
|
||||||
@ -229,31 +242,31 @@ static ulong get_param_length(uchar **packet)
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void setup_param_tiny(Item_param *param, uchar **pos)
|
SETUP_PARAM_FUNCTION(setup_param_tiny)
|
||||||
{
|
{
|
||||||
param->set_int((longlong)(**pos));
|
param->set_int((longlong)(**pos));
|
||||||
*pos+= 1;
|
*pos+= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setup_param_short(Item_param *param, uchar **pos)
|
SETUP_PARAM_FUNCTION(setup_param_short)
|
||||||
{
|
{
|
||||||
param->set_int((longlong)sint2korr(*pos));
|
param->set_int((longlong)sint2korr(*pos));
|
||||||
*pos+= 2;
|
*pos+= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setup_param_int32(Item_param *param, uchar **pos)
|
SETUP_PARAM_FUNCTION(setup_param_int32)
|
||||||
{
|
{
|
||||||
param->set_int((longlong)sint4korr(*pos));
|
param->set_int((longlong)sint4korr(*pos));
|
||||||
*pos+= 4;
|
*pos+= 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setup_param_int64(Item_param *param, uchar **pos)
|
SETUP_PARAM_FUNCTION(setup_param_int64)
|
||||||
{
|
{
|
||||||
param->set_int((longlong)sint8korr(*pos));
|
param->set_int((longlong)sint8korr(*pos));
|
||||||
*pos+= 8;
|
*pos+= 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setup_param_float(Item_param *param, uchar **pos)
|
SETUP_PARAM_FUNCTION(setup_param_float)
|
||||||
{
|
{
|
||||||
float data;
|
float data;
|
||||||
float4get(data,*pos);
|
float4get(data,*pos);
|
||||||
@ -261,7 +274,7 @@ static void setup_param_float(Item_param *param, uchar **pos)
|
|||||||
*pos+= 4;
|
*pos+= 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setup_param_double(Item_param *param, uchar **pos)
|
SETUP_PARAM_FUNCTION(setup_param_double)
|
||||||
{
|
{
|
||||||
double data;
|
double data;
|
||||||
float8get(data,*pos);
|
float8get(data,*pos);
|
||||||
@ -269,7 +282,7 @@ static void setup_param_double(Item_param *param, uchar **pos)
|
|||||||
*pos+= 8;
|
*pos+= 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setup_param_time(Item_param *param, uchar **pos)
|
SETUP_PARAM_FUNCTION(setup_param_time)
|
||||||
{
|
{
|
||||||
ulong length;
|
ulong length;
|
||||||
|
|
||||||
@ -293,7 +306,7 @@ static void setup_param_time(Item_param *param, uchar **pos)
|
|||||||
*pos+= length;
|
*pos+= length;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setup_param_datetime(Item_param *param, uchar **pos)
|
SETUP_PARAM_FUNCTION(setup_param_datetime)
|
||||||
{
|
{
|
||||||
uint length= get_param_length(pos);
|
uint length= get_param_length(pos);
|
||||||
|
|
||||||
@ -323,7 +336,7 @@ static void setup_param_datetime(Item_param *param, uchar **pos)
|
|||||||
*pos+= length;
|
*pos+= length;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setup_param_date(Item_param *param, uchar **pos)
|
SETUP_PARAM_FUNCTION(setup_param_date)
|
||||||
{
|
{
|
||||||
ulong length;
|
ulong length;
|
||||||
|
|
||||||
@ -345,7 +358,7 @@ static void setup_param_date(Item_param *param, uchar **pos)
|
|||||||
*pos+= length;
|
*pos+= length;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setup_param_str(Item_param *param, uchar **pos)
|
SETUP_PARAM_FUNCTION(setup_param_str)
|
||||||
{
|
{
|
||||||
ulong len= get_param_length(pos);
|
ulong len= get_param_length(pos);
|
||||||
param->set_value((const char *)*pos, len);
|
param->set_value((const char *)*pos, len);
|
||||||
|
Reference in New Issue
Block a user