Commit 8e74c1b7 authored by ndbdev@eel.hemma.oreland.se's avatar ndbdev@eel.hemma.oreland.se

Merge

parents 64618d7f b023e183
...@@ -13,7 +13,7 @@ fi ...@@ -13,7 +13,7 @@ fi
# Also sends +Oprocelim and +Ofastaccess to the linker # Also sends +Oprocelim and +Ofastaccess to the linker
# (see ld(1)). # (see ld(1)).
release_flags="-fast +O4" release_flags="-fast +O3"
# -z Do not bind anything to address zero. This option # -z Do not bind anything to address zero. This option
# allows runtime detection of null pointers. See the # allows runtime detection of null pointers. See the
......
...@@ -84,6 +84,7 @@ joreland@mysql.com ...@@ -84,6 +84,7 @@ joreland@mysql.com
jorge@linux.jorge.mysql.com jorge@linux.jorge.mysql.com
jplindst@t41.(none) jplindst@t41.(none)
kaj@work.mysql.com kaj@work.mysql.com
kent@mysql.com
konstantin@mysql.com konstantin@mysql.com
kostja@oak.local kostja@oak.local
lenz@kallisto.mysql.com lenz@kallisto.mysql.com
...@@ -97,6 +98,7 @@ miguel@hegel.txg ...@@ -97,6 +98,7 @@ miguel@hegel.txg
miguel@light. miguel@light.
miguel@light.local miguel@light.local
miguel@sartre.local miguel@sartre.local
mikron@c-fb0ae253.1238-1-64736c10.cust.bredbandsbolaget.se
mikron@mikael-ronstr-ms-dator.local mikron@mikael-ronstr-ms-dator.local
mmatthew@markslaptop. mmatthew@markslaptop.
monty@bitch.mysql.fi monty@bitch.mysql.fi
......
...@@ -2961,10 +2961,10 @@ then ...@@ -2961,10 +2961,10 @@ then
if test "$with_debug" = "yes" if test "$with_debug" = "yes"
then then
# Medium debug. # Medium debug.
NDB_DEFS="-DVM_TRACE -DERROR_INSERT -DARRAY_GUARD" NDB_DEFS="-DNDB_DEBUG -DVM_TRACE -DERROR_INSERT -DARRAY_GUARD"
elif test "$with_debug" = "full" elif test "$with_debug" = "full"
then then
NDB_DEFS="-DVM_TRACE -DERROR_INSERT -DARRAY_GUARD" NDB_DEFS="-DNDB_DEBUG_FULL -DVM_TRACE -DERROR_INSERT -DARRAY_GUARD"
else else
NDB_DEFS="-DNDEBUG" NDB_DEFS="-DNDEBUG"
fi fi
......
...@@ -3018,6 +3018,7 @@ mysql_stmt_send_long_data(MYSQL_STMT *stmt, uint param_number, ...@@ -3018,6 +3018,7 @@ mysql_stmt_send_long_data(MYSQL_STMT *stmt, uint param_number,
static void set_zero_time(MYSQL_TIME *tm) static void set_zero_time(MYSQL_TIME *tm)
{ {
bzero((void *)tm, sizeof(*tm)); bzero((void *)tm, sizeof(*tm));
tm->time_type= MYSQL_TIMESTAMP_NONE;
} }
...@@ -3041,337 +3042,397 @@ static void set_zero_time(MYSQL_TIME *tm) ...@@ -3041,337 +3042,397 @@ static void set_zero_time(MYSQL_TIME *tm)
static uint read_binary_time(MYSQL_TIME *tm, uchar **pos) static uint read_binary_time(MYSQL_TIME *tm, uchar **pos)
{ {
uchar *to;
uint length; uint length;
/* net_field_length will set pos to the first byte of data */ /* net_field_length will set pos to the first byte of data */
if (!(length= net_field_length(pos))) if (!(length= net_field_length(pos)))
{
set_zero_time(tm); set_zero_time(tm);
return 0; else
} {
uchar *to= *pos;
to= *pos; tm->neg= (bool) to[0];
tm->neg= (bool) to[0];
tm->day= (ulong) sint4korr(to+1); tm->day= (ulong) sint4korr(to+1);
tm->hour= (uint) to[5]; tm->hour= (uint) to[5];
tm->minute= (uint) to[6]; tm->minute= (uint) to[6];
tm->second= (uint) to[7]; tm->second= (uint) to[7];
tm->second_part= (length > 8) ? (ulong) sint4korr(to+8) : 0; tm->second_part= (length > 8) ? (ulong) sint4korr(to+8) : 0;
tm->year= tm->month= 0; tm->year= tm->month= 0;
tm->time_type= MYSQL_TIMESTAMP_TIME;
}
return length; return length;
} }
static uint read_binary_datetime(MYSQL_TIME *tm, uchar **pos) static uint read_binary_datetime(MYSQL_TIME *tm, uchar **pos)
{ {
uchar *to;
uint length; uint length;
if (!(length= net_field_length(pos))) if (!(length= net_field_length(pos)))
{
set_zero_time(tm); set_zero_time(tm);
return 0; else
} {
uchar *to= *pos;
to= *pos;
tm->neg= 0; tm->neg= 0;
tm->year= (uint) sint2korr(to); tm->year= (uint) sint2korr(to);
tm->month= (uint) to[2]; tm->month= (uint) to[2];
tm->day= (uint) to[3]; tm->day= (uint) to[3];
if (length > 4) if (length > 4)
{ {
tm->hour= (uint) to[4]; tm->hour= (uint) to[4];
tm->minute= (uint) to[5]; tm->minute= (uint) to[5];
tm->second= (uint) to[6]; tm->second= (uint) to[6];
}
else
tm->hour= tm->minute= tm->second= 0;
tm->second_part= (length > 7) ? (ulong) sint4korr(to+7) : 0;
tm->time_type= MYSQL_TIMESTAMP_DATETIME;
} }
else
tm->hour= tm->minute= tm->second= 0;
tm->second_part= (length > 7) ? (ulong) sint4korr(to+7) : 0;
return length; return length;
} }
static uint read_binary_date(MYSQL_TIME *tm, uchar **pos) static uint read_binary_date(MYSQL_TIME *tm, uchar **pos)
{ {
uchar *to;
uint length; uint length;
if (!(length= net_field_length(pos))) if (!(length= net_field_length(pos)))
{
set_zero_time(tm); set_zero_time(tm);
return 0; else
} {
uchar *to= *pos;
to= *pos; tm->year = (uint) sint2korr(to);
tm->year = (uint) sint2korr(to); tm->month= (uint) to[2];
tm->month= (uint) to[2]; tm->day= (uint) to[3];
tm->day= (uint) to[3];
tm->hour= tm->minute= tm->second= 0; tm->hour= tm->minute= tm->second= 0;
tm->second_part= 0; tm->second_part= 0;
tm->neg= 0; tm->neg= 0;
tm->time_type= MYSQL_TIMESTAMP_DATE;
}
return length; return length;
} }
/* Convert integer value to client buffer type. */ /*
Convert string to supplied buffer of any type.
SYNOPSIS
fetch_string_with_conversion()
param output buffer descriptor
value column data
length data length
*/
static void send_data_long(MYSQL_BIND *param, MYSQL_FIELD *field, static void fetch_string_with_conversion(MYSQL_BIND *param, char *value,
longlong value) uint length)
{ {
char *buffer= (char *)param->buffer; char *buffer= (char *)param->buffer;
uint field_is_unsigned= (field->flags & UNSIGNED_FLAG); int err= 0;
switch (param->buffer_type) { /*
This function should support all target buffer types: the rest
of conversion functions can delegate conversion to it.
*/
switch(param->buffer_type) {
case MYSQL_TYPE_NULL: /* do nothing */ case MYSQL_TYPE_NULL: /* do nothing */
break; break;
case MYSQL_TYPE_TINY: case MYSQL_TYPE_TINY:
*(uchar *)param->buffer= (uchar) value; {
uchar data= (uchar) my_strntol(&my_charset_latin1, value, length, 10,
NULL, &err);
*buffer= data;
break; break;
}
case MYSQL_TYPE_SHORT: case MYSQL_TYPE_SHORT:
shortstore(buffer, value); {
short data= (short) my_strntol(&my_charset_latin1, value, length, 10,
NULL, &err);
shortstore(buffer, data);
break; break;
}
case MYSQL_TYPE_LONG: case MYSQL_TYPE_LONG:
longstore(buffer, value); {
int32 data= (int32)my_strntol(&my_charset_latin1, value, length, 10,
NULL, &err);
longstore(buffer, data);
break; break;
}
case MYSQL_TYPE_LONGLONG: case MYSQL_TYPE_LONGLONG:
longlongstore(buffer, value); {
longlong data= my_strntoll(&my_charset_latin1, value, length, 10,
NULL, &err);
longlongstore(buffer, data);
break; break;
}
case MYSQL_TYPE_FLOAT: case MYSQL_TYPE_FLOAT:
{ {
float data= (field_is_unsigned ? (float) ulonglong2double(value) : float data = (float) my_strntod(&my_charset_latin1, value, length,
(float) value); NULL, &err);
floatstore(buffer, data); floatstore(buffer, data);
break; break;
} }
case MYSQL_TYPE_DOUBLE: case MYSQL_TYPE_DOUBLE:
{ {
double data= (field_is_unsigned ? ulonglong2double(value) : double data= my_strntod(&my_charset_latin1, value, length, NULL, &err);
(double) value);
doublestore(buffer, data); doublestore(buffer, data);
break; break;
} }
case MYSQL_TYPE_TIME:
{
MYSQL_TIME *tm= (MYSQL_TIME *)buffer;
str_to_time(value, length, tm, &err);
break;
}
case MYSQL_TYPE_DATE:
case MYSQL_TYPE_DATETIME:
{
MYSQL_TIME *tm= (MYSQL_TIME *)buffer;
str_to_datetime(value, length, tm, 0, &err);
break;
}
case MYSQL_TYPE_TINY_BLOB:
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
case MYSQL_TYPE_BLOB:
default: default:
{ {
char tmp[22]; /* Enough for longlong */ /*
uint length= (uint)(longlong10_to_str(value,(char *)tmp, Copy column data to the buffer taking into account offset,
field_is_unsigned ? 10: -10) - data length and buffer length.
tmp); */
ulong copy_length= min((ulong)length-param->offset, param->buffer_length); char *start= value + param->offset;
if ((long) copy_length < 0) char *end= value + length;
copy_length=0; ulong copy_length;
if (start < end)
{
copy_length= end - start;
/* We've got some data beyond offset: copy up to buffer_length bytes */
if (param->buffer_length)
memcpy(buffer, start, min(copy_length, param->buffer_length));
}
else else
memcpy(buffer, (char *)tmp+param->offset, copy_length); copy_length= 0;
if (copy_length < param->buffer_length)
buffer[copy_length]= '\0';
/*
param->length will always contain length of entire column;
number of copied bytes may be way different:
*/
*param->length= length; *param->length= length;
break;
if (copy_length != param->buffer_length)
*(buffer+copy_length)= '\0';
} }
} }
} }
/* Convert Double to buffer types */ /*
Convert integer value to client buffer of any type.
SYNOPSIS
fetch_long_with_conversion()
param output buffer descriptor
field column metadata
value column data
*/
static void send_data_double(MYSQL_BIND *param, double value) static void fetch_long_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
longlong value)
{ {
char *buffer= (char *)param->buffer; char *buffer= (char *)param->buffer;
uint field_is_unsigned= (field->flags & UNSIGNED_FLAG);
switch(param->buffer_type) { switch (param->buffer_type) {
case MYSQL_TYPE_NULL: /* do nothing */ case MYSQL_TYPE_NULL: /* do nothing */
break; break;
case MYSQL_TYPE_TINY: case MYSQL_TYPE_TINY:
*buffer= (uchar)value; *(uchar *)param->buffer= (uchar) value;
break; break;
case MYSQL_TYPE_SHORT: case MYSQL_TYPE_SHORT:
shortstore(buffer, (short)value); shortstore(buffer, value);
break; break;
case MYSQL_TYPE_LONG: case MYSQL_TYPE_LONG:
longstore(buffer, (long)value); longstore(buffer, value);
break; break;
case MYSQL_TYPE_LONGLONG: case MYSQL_TYPE_LONGLONG:
{ longlongstore(buffer, value);
longlong val= (longlong) value;
longlongstore(buffer, val);
break; break;
}
case MYSQL_TYPE_FLOAT: case MYSQL_TYPE_FLOAT:
{ {
float data= (float) value; float data= field_is_unsigned ? (float) ulonglong2double(value) :
(float) value;
floatstore(buffer, data); floatstore(buffer, data);
break; break;
} }
case MYSQL_TYPE_DOUBLE: case MYSQL_TYPE_DOUBLE:
{ {
doublestore(buffer, value); double data= field_is_unsigned ? ulonglong2double(value) :
(double) value;
doublestore(buffer, data);
break; break;
} }
default: default:
{ {
char tmp[128]; char buff[22]; /* Enough for longlong */
uint length= my_sprintf(tmp,(tmp,"%g",value)); char *end= longlong10_to_str(value, buff, field_is_unsigned ? 10: -10);
ulong copy_length= min((ulong)length-param->offset, param->buffer_length); /* Resort to string conversion which supports all typecodes */
if ((long) copy_length < 0) return fetch_string_with_conversion(param, buff, end - buff);
copy_length=0;
else
memcpy(buffer, (char *)tmp+param->offset, copy_length);
*param->length= length;
if (copy_length != param->buffer_length)
*(buffer+copy_length)= '\0';
} }
} }
} }
/* Convert string to buffer types */ /*
Convert double/float column to supplied buffer of any type.
SYNOPSIS
fetch_float_with_conversion()
param output buffer descriptor
field column metadata
value column data
width default number of significant digits used when converting
float/double to string
*/
static void send_data_str(MYSQL_BIND *param, char *value, uint length) static void fetch_float_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
double value, int width)
{ {
char *buffer= (char *)param->buffer; char *buffer= (char *)param->buffer;
int err=0;
switch(param->buffer_type) { switch (param->buffer_type) {
case MYSQL_TYPE_NULL: /* do nothing */ case MYSQL_TYPE_NULL: /* do nothing */
break; break;
case MYSQL_TYPE_TINY: case MYSQL_TYPE_TINY:
{ *buffer= (uchar)value;
uchar data= (uchar)my_strntol(&my_charset_latin1,value,length,10,NULL,
&err);
*buffer= data;
break; break;
}
case MYSQL_TYPE_SHORT: case MYSQL_TYPE_SHORT:
{ shortstore(buffer, (short)value);
short data= (short)my_strntol(&my_charset_latin1,value,length,10,NULL,
&err);
shortstore(buffer, data);
break; break;
}
case MYSQL_TYPE_LONG: case MYSQL_TYPE_LONG:
{ longstore(buffer, (long)value);
int32 data= (int32)my_strntol(&my_charset_latin1,value,length,10,NULL,
&err);
longstore(buffer, data);
break; break;
}
case MYSQL_TYPE_LONGLONG: case MYSQL_TYPE_LONGLONG:
{ {
longlong data= my_strntoll(&my_charset_latin1,value,length,10,NULL,&err); longlong val= (longlong) value;
longlongstore(buffer, data); longlongstore(buffer, val);
break; break;
} }
case MYSQL_TYPE_FLOAT: case MYSQL_TYPE_FLOAT:
{ {
float data = (float)my_strntod(&my_charset_latin1,value,length,NULL,&err); float data= (float) value;
floatstore(buffer, data); floatstore(buffer, data);
break; break;
} }
case MYSQL_TYPE_DOUBLE: case MYSQL_TYPE_DOUBLE:
{ {
double data= my_strntod(&my_charset_latin1,value,length,NULL,&err); doublestore(buffer, value);
doublestore(buffer, data);
break;
}
case MYSQL_TYPE_TIME:
{
int dummy;
MYSQL_TIME *tm= (MYSQL_TIME *)buffer;
str_to_time(value, length, tm, &dummy);
break;
}
case MYSQL_TYPE_DATE:
case MYSQL_TYPE_DATETIME:
{
int dummy;
MYSQL_TIME *tm= (MYSQL_TIME *)buffer;
str_to_datetime(value, length, tm, 0, &dummy);
break; break;
} }
case MYSQL_TYPE_TINY_BLOB:
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
case MYSQL_TYPE_BLOB:
*param->length= length;
length= min(length-param->offset, param->buffer_length);
if ((long) length > 0)
memcpy(buffer, value+param->offset, length);
break;
default: default:
*param->length= length; {
length= min(length-param->offset, param->buffer_length); /*
if ((long) length < 0) Resort to fetch_string_with_conversion: this should handle
length= 0; floating point -> string conversion nicely, honor all typecodes
and param->offset possibly set in mysql_stmt_fetch_column
*/
char buff[331];
char *end;
/* TODO: move this to a header shared between client and server. */
#define NOT_FIXED_DEC 31
if (field->decimals >= 31)
#undef NOT_FIXED_DEC
{
sprintf(buff, "%-*.*g", (int) param->buffer_length, width, value);
end= strcend(buff, ' ');
*end= 0;
}
else else
memcpy(buffer, value+param->offset, length); {
if (length != param->buffer_length) sprintf(buff, "%.*f", field->decimals, value);
buffer[length]= '\0'; end= strend(buff);
}
return fetch_string_with_conversion(param, buff, end - buff);
}
} }
} }
static void send_data_time(MYSQL_BIND *param, MYSQL_TIME ltime, /*
uint length) Fetch time/date/datetime to supplied buffer of any type
SYNOPSIS
param output buffer descriptor
time column data
*/
static void fetch_datetime_with_conversion(MYSQL_BIND *param,
MYSQL_TIME *time)
{ {
switch (param->buffer_type) { switch (param->buffer_type) {
case MYSQL_TYPE_NULL: /* do nothing */ case MYSQL_TYPE_NULL: /* do nothing */
break; break;
case MYSQL_TYPE_DATE: case MYSQL_TYPE_DATE:
case MYSQL_TYPE_TIME: case MYSQL_TYPE_TIME:
case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_DATETIME:
case MYSQL_TYPE_TIMESTAMP: case MYSQL_TYPE_TIMESTAMP:
{ /* XXX: should we copy only relevant members here? */
MYSQL_TIME *tm= (MYSQL_TIME *)param->buffer; *(MYSQL_TIME *)(param->buffer)= *time;
tm->year= ltime.year;
tm->month= ltime.month;
tm->day= ltime.day;
tm->hour= ltime.hour;
tm->minute= ltime.minute;
tm->second= ltime.second;
tm->second_part= ltime.second_part;
tm->neg= ltime.neg;
break; break;
}
default: default:
{ {
/*
Convert time value to string and delegate the rest to
fetch_string_with_conversion:
*/
char buff[25]; char buff[25];
uint length;
if (!length) switch (time->time_type) {
ltime.time_type= MYSQL_TIMESTAMP_NONE;
switch (ltime.time_type) {
case MYSQL_TIMESTAMP_DATE: case MYSQL_TIMESTAMP_DATE:
length= my_sprintf(buff,(buff, "%04d-%02d-%02d", ltime.year, length= my_sprintf(buff,(buff, "%04d-%02d-%02d",
ltime.month,ltime.day)); time->year, time->month, time->day));
break; break;
case MYSQL_TIMESTAMP_DATETIME: case MYSQL_TIMESTAMP_DATETIME:
length= my_sprintf(buff,(buff, "%04d-%02d-%02d %02d:%02d:%02d", length= my_sprintf(buff,(buff, "%04d-%02d-%02d %02d:%02d:%02d",
ltime.year,ltime.month,ltime.day, time->year, time->month, time->day,
ltime.hour,ltime.minute,ltime.second)); time->hour, time->minute, time->second));
break; break;
case MYSQL_TIMESTAMP_TIME: case MYSQL_TIMESTAMP_TIME:
length= my_sprintf(buff, (buff, "%02d:%02d:%02d", length= my_sprintf(buff, (buff, "%02d:%02d:%02d",
ltime.hour,ltime.minute,ltime.second)); time->hour, time->minute, time->second));
break; break;
default: default:
length= 0; length= 0;
buff[0]='\0'; buff[0]='\0';
break;
} }
send_data_str(param, (char *)buff, length); /* Resort to string conversion */
fetch_string_with_conversion(param, (char *)buff, length);
break;
} }
} }
} }
/* Fetch data to client buffers with conversion. */ /*
Fetch and convert result set column to output buffer.
SYNOPSIS
fetch_result_with_conversion()
param output buffer descriptor
field column metadata
row points to a column of result set tuple in binary format
DESCRIPTION
This is a fallback implementation of column fetch used
if column and output buffer types do not match.
Increases tuple pointer to point at the next column within the
tuple.
*/
static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) static void fetch_result_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
uchar **row)
{ {
ulong length; ulong length;
enum enum_field_types field_type= field->type; enum enum_field_types field_type= field->type;
...@@ -3381,9 +3442,9 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) ...@@ -3381,9 +3442,9 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row)
{ {
char value= (char) **row; char value= (char) **row;
uint field_is_unsigned= (field->flags & UNSIGNED_FLAG); uint field_is_unsigned= (field->flags & UNSIGNED_FLAG);
longlong data= ((field_is_unsigned) ? (longlong) (unsigned char) value: longlong data= (field_is_unsigned) ? (longlong) (unsigned char) value:
(longlong) value); (longlong) value;
send_data_long(param, field, data); fetch_long_with_conversion(param, field, data);
length= 1; length= 1;
break; break;
} }
...@@ -3394,7 +3455,7 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) ...@@ -3394,7 +3455,7 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row)
uint field_is_unsigned= (field->flags & UNSIGNED_FLAG); uint field_is_unsigned= (field->flags & UNSIGNED_FLAG);
longlong data= ((field_is_unsigned) ? (longlong) (unsigned short) value: longlong data= ((field_is_unsigned) ? (longlong) (unsigned short) value:
(longlong) value); (longlong) value);
send_data_long(param, field, data); fetch_long_with_conversion(param, field, data);
length= 2; length= 2;
break; break;
} }
...@@ -3404,14 +3465,14 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) ...@@ -3404,14 +3465,14 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row)
uint field_is_unsigned= (field->flags & UNSIGNED_FLAG); uint field_is_unsigned= (field->flags & UNSIGNED_FLAG);
longlong data= ((field_is_unsigned) ? (longlong) (unsigned long) value: longlong data= ((field_is_unsigned) ? (longlong) (unsigned long) value:
(longlong) value); (longlong) value);
send_data_long(param, field, data); fetch_long_with_conversion(param, field, data);
length= 4; length= 4;
break; break;
} }
case MYSQL_TYPE_LONGLONG: case MYSQL_TYPE_LONGLONG:
{ {
longlong value= (longlong)sint8korr(*row); longlong value= (longlong)sint8korr(*row);
send_data_long(param, field, value); fetch_long_with_conversion(param, field, value);
length= 8; length= 8;
break; break;
} }
...@@ -3419,7 +3480,7 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) ...@@ -3419,7 +3480,7 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row)
{ {
float value; float value;
float4get(value,*row); float4get(value,*row);
send_data_double(param,value); fetch_float_with_conversion(param, field, value, FLT_DIG);
length= 4; length= 4;
break; break;
} }
...@@ -3427,7 +3488,7 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) ...@@ -3427,7 +3488,7 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row)
{ {
double value; double value;
float8get(value,*row); float8get(value,*row);
send_data_double(param,value); fetch_float_with_conversion(param, field, value, DBL_DIG);
length= 8; length= 8;
break; break;
} }
...@@ -3436,8 +3497,7 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) ...@@ -3436,8 +3497,7 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row)
MYSQL_TIME tm; MYSQL_TIME tm;
length= read_binary_date(&tm, row); length= read_binary_date(&tm, row);
tm.time_type= MYSQL_TIMESTAMP_DATE; fetch_datetime_with_conversion(param, &tm);
send_data_time(param, tm, length);
break; break;
} }
case MYSQL_TYPE_TIME: case MYSQL_TYPE_TIME:
...@@ -3445,8 +3505,7 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) ...@@ -3445,8 +3505,7 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row)
MYSQL_TIME tm; MYSQL_TIME tm;
length= read_binary_time(&tm, row); length= read_binary_time(&tm, row);
tm.time_type= MYSQL_TIMESTAMP_TIME; fetch_datetime_with_conversion(param, &tm);
send_data_time(param, tm, length);
break; break;
} }
case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_DATETIME:
...@@ -3455,13 +3514,12 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) ...@@ -3455,13 +3514,12 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row)
MYSQL_TIME tm; MYSQL_TIME tm;
length= read_binary_datetime(&tm, row); length= read_binary_datetime(&tm, row);
tm.time_type= MYSQL_TIMESTAMP_DATETIME; fetch_datetime_with_conversion(param, &tm);
send_data_time(param, tm, length);
break; break;
} }
default: default:
length= net_field_length(row); length= net_field_length(row);
send_data_str(param,(char*) *row,length); fetch_string_with_conversion(param, (char*) *row, length);
break; break;
} }
*row+= length; *row+= length;
...@@ -3606,7 +3664,6 @@ static void skip_result_string(MYSQL_BIND *param __attribute__((unused)), ...@@ -3606,7 +3664,6 @@ static void skip_result_string(MYSQL_BIND *param __attribute__((unused)),
} }
/* /*
Setup the bind buffers for resultset processing Setup the bind buffers for resultset processing
*/ */
...@@ -3825,7 +3882,7 @@ static int stmt_fetch_row(MYSQL_STMT *stmt, uchar *row) ...@@ -3825,7 +3882,7 @@ static int stmt_fetch_row(MYSQL_STMT *stmt, uchar *row)
if (field->type == bind->buffer_type) if (field->type == bind->buffer_type)
(*bind->fetch_result)(bind, &row); (*bind->fetch_result)(bind, &row);
else else
fetch_results(bind, field, &row); fetch_result_with_conversion(bind, field, &row);
} }
if (!((bit<<=1) & 255)) if (!((bit<<=1) & 255))
{ {
...@@ -3917,7 +3974,7 @@ int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind, ...@@ -3917,7 +3974,7 @@ int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind,
*bind->length= *param->length; *bind->length= *param->length;
else else
bind->length= &param->internal_length; /* Needed for fetch_result() */ bind->length= &param->internal_length; /* Needed for fetch_result() */
fetch_results(bind, field, &row); fetch_result_with_conversion(bind, field, &row);
} }
else else
{ {
......
...@@ -14,10 +14,7 @@ ...@@ -14,10 +14,7 @@
#define CFG_ACC_SCAN (PRIVATE_BASE + 9) #define CFG_ACC_SCAN (PRIVATE_BASE + 9)
#define CFG_DICT_ATTRIBUTE (PRIVATE_BASE + 10) #define CFG_DICT_ATTRIBUTE (PRIVATE_BASE + 10)
#define CFG_DICT_CONNECT (PRIVATE_BASE + 11)
#define CFG_DICT_FRAG_CONNECT (PRIVATE_BASE + 12)
#define CFG_DICT_TABLE (PRIVATE_BASE + 13) #define CFG_DICT_TABLE (PRIVATE_BASE + 13)
#define CFG_DICT_TC_CONNECT (PRIVATE_BASE + 14)
#define CFG_DIH_API_CONNECT (PRIVATE_BASE + 15) #define CFG_DIH_API_CONNECT (PRIVATE_BASE + 15)
#define CFG_DIH_CONNECT (PRIVATE_BASE + 16) #define CFG_DIH_CONNECT (PRIVATE_BASE + 16)
...@@ -27,10 +24,8 @@ ...@@ -27,10 +24,8 @@
#define CFG_DIH_TABLE (PRIVATE_BASE + 20) #define CFG_DIH_TABLE (PRIVATE_BASE + 20)
#define CFG_LQH_FRAG (PRIVATE_BASE + 21) #define CFG_LQH_FRAG (PRIVATE_BASE + 21)
#define CFG_LQH_CONNECT (PRIVATE_BASE + 22)
#define CFG_LQH_TABLE (PRIVATE_BASE + 23) #define CFG_LQH_TABLE (PRIVATE_BASE + 23)
#define CFG_LQH_TC_CONNECT (PRIVATE_BASE + 24) #define CFG_LQH_TC_CONNECT (PRIVATE_BASE + 24)
#define CFG_LQH_REPLICAS (PRIVATE_BASE + 25)
#define CFG_LQH_LOG_FILES (PRIVATE_BASE + 26) #define CFG_LQH_LOG_FILES (PRIVATE_BASE + 26)
#define CFG_LQH_SCAN (PRIVATE_BASE + 27) #define CFG_LQH_SCAN (PRIVATE_BASE + 27)
......
...@@ -510,7 +510,7 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){ ...@@ -510,7 +510,7 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){
// The remainder are allowed for use by the scan processes. // The remainder are allowed for use by the scan processes.
/*-----------------------------------------------------------------------*/ /*-----------------------------------------------------------------------*/
cfg.put(CFG_ACC_OP_RECS, cfg.put(CFG_ACC_OP_RECS,
noOfReplicas*((16 * noOfOperations) / 10 + 50) + ((11 * noOfOperations) / 10 + 50) +
(noOfLocalScanRecords * MAX_PARALLEL_SCANS_PER_FRAG) + (noOfLocalScanRecords * MAX_PARALLEL_SCANS_PER_FRAG) +
NODE_RECOVERY_SCAN_OP_RECORDS); NODE_RECOVERY_SCAN_OP_RECORDS);
...@@ -535,18 +535,9 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){ ...@@ -535,18 +535,9 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){
*/ */
cfg.put(CFG_DICT_ATTRIBUTE, cfg.put(CFG_DICT_ATTRIBUTE,
noOfAttributes); noOfAttributes);
cfg.put(CFG_DICT_CONNECT,
noOfOperations + 32);
cfg.put(CFG_DICT_FRAG_CONNECT,
NO_OF_FRAG_PER_NODE * noOfDBNodes * noOfReplicas);
cfg.put(CFG_DICT_TABLE, cfg.put(CFG_DICT_TABLE,
noOfTables); noOfTables);
cfg.put(CFG_DICT_TC_CONNECT,
2* noOfOperations);
} }
{ {
...@@ -557,7 +548,7 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){ ...@@ -557,7 +548,7 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){
2 * noOfTransactions); 2 * noOfTransactions);
cfg.put(CFG_DIH_CONNECT, cfg.put(CFG_DIH_CONNECT,
noOfOperations + 46); noOfOperations + noOfTransactions + 46);
cfg.put(CFG_DIH_FRAG_CONNECT, cfg.put(CFG_DIH_FRAG_CONNECT,
NO_OF_FRAG_PER_NODE * noOfTables * noOfDBNodes); NO_OF_FRAG_PER_NODE * noOfTables * noOfDBNodes);
...@@ -587,18 +578,12 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){ ...@@ -587,18 +578,12 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){
cfg.put(CFG_LQH_FRAG, cfg.put(CFG_LQH_FRAG,
NO_OF_FRAG_PER_NODE * noOfTables * noOfReplicas); NO_OF_FRAG_PER_NODE * noOfTables * noOfReplicas);
cfg.put(CFG_LQH_CONNECT,
noOfReplicas*((11 * noOfOperations) / 10 + 50));
cfg.put(CFG_LQH_TABLE, cfg.put(CFG_LQH_TABLE,
noOfTables); noOfTables);
cfg.put(CFG_LQH_TC_CONNECT, cfg.put(CFG_LQH_TC_CONNECT,
noOfReplicas*((16 * noOfOperations) / 10 + 50)); (11 * noOfOperations) / 10 + 50);
cfg.put(CFG_LQH_REPLICAS,
noOfReplicas);
cfg.put(CFG_LQH_SCAN, cfg.put(CFG_LQH_SCAN,
noOfLocalScanRecords); noOfLocalScanRecords);
} }
...@@ -611,7 +596,7 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){ ...@@ -611,7 +596,7 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){
3 * noOfTransactions); 3 * noOfTransactions);
cfg.put(CFG_TC_TC_CONNECT, cfg.put(CFG_TC_TC_CONNECT,
noOfOperations + 16 + noOfTransactions); (2 * noOfOperations) + 16 + noOfTransactions);
cfg.put(CFG_TC_TABLE, cfg.put(CFG_TC_TABLE,
noOfTables); noOfTables);
...@@ -631,7 +616,7 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){ ...@@ -631,7 +616,7 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){
2 * NO_OF_FRAG_PER_NODE * noOfTables* noOfReplicas); 2 * NO_OF_FRAG_PER_NODE * noOfTables* noOfReplicas);
cfg.put(CFG_TUP_OP_RECS, cfg.put(CFG_TUP_OP_RECS,
noOfReplicas*((16 * noOfOperations) / 10 + 50)); (11 * noOfOperations) / 10 + 50);
cfg.put(CFG_TUP_PAGE, cfg.put(CFG_TUP_PAGE,
noOfDataPages); noOfDataPages);
......
...@@ -170,7 +170,7 @@ void report_stats() ...@@ -170,7 +170,7 @@ void report_stats()
log_msg("\nThe .out and .err files in %s may give you some\n", result_dir); log_msg("\nThe .out and .err files in %s may give you some\n", result_dir);
log_msg("hint of what when wrong.\n"); log_msg("hint of what when wrong.\n");
log_msg("\nIf you want to report this error, please first read the documentation\n"); log_msg("\nIf you want to report this error, please first read the documentation\n");
log_msg("at: http://www.mysql.com/doc/M/y/MySQL_test_suite.html\n"); log_msg("at: http://www.mysql.com/doc/en/MySQL_test_suite.html\n");
} }
log_msg("\n%.02f total minutes elapsed in the test cases\n\n", total_time / 60); log_msg("\n%.02f total minutes elapsed in the test cases\n\n", total_time / 60);
......
...@@ -1788,7 +1788,7 @@ bytes of memory\n", ((ulong) sql_key_cache->key_cache_mem_size + ...@@ -1788,7 +1788,7 @@ bytes of memory\n", ((ulong) sql_key_cache->key_cache_mem_size +
You seem to be running 32-bit Linux and have %d concurrent connections.\n\ You seem to be running 32-bit Linux and have %d concurrent connections.\n\
If you have not changed STACK_SIZE in LinuxThreads and built the binary \n\ If you have not changed STACK_SIZE in LinuxThreads and built the binary \n\
yourself, LinuxThreads is quite likely to steal a part of the global heap for\n\ yourself, LinuxThreads is quite likely to steal a part of the global heap for\n\
the thread stack. Please read http://www.mysql.com/doc/L/i/Linux.html\n\n", the thread stack. Please read http://www.mysql.com/doc/en/Linux.html\n\n",
thread_count); thread_count);
} }
#endif /* HAVE_LINUXTHREADS */ #endif /* HAVE_LINUXTHREADS */
......
...@@ -9862,11 +9862,17 @@ static void test_bug4026() ...@@ -9862,11 +9862,17 @@ static void test_bug4026()
time_in.minute= 59; time_in.minute= 59;
time_in.second= 59; time_in.second= 59;
time_in.second_part= 123456; time_in.second_part= 123456;
/*
This is not necessary, just to make assert below work: this field
is filled in when time is received from server
*/
time_in.time_type= MYSQL_TIMESTAMP_TIME;
datetime_in= time_in; datetime_in= time_in;
datetime_in.year= 2003; datetime_in.year= 2003;
datetime_in.month= 12; datetime_in.month= 12;
datetime_in.day= 31; datetime_in.day= 31;
datetime_in.time_type= MYSQL_TIMESTAMP_DATETIME;
mysql_stmt_bind_param(stmt, bind); mysql_stmt_bind_param(stmt, bind);
......
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