From e38680886d50dbe1455f4865fc5e84e06a85f7e6 Mon Sep 17 00:00:00 2001 From: "mronstrom@mysql.com" <> Date: Wed, 4 Aug 2004 15:47:50 +0200 Subject: [PATCH 1/7] Fix for allowing large transactions with less memory impact. Currently one needs 636*1.6*2*noOfReplicas + 184 bytes per record which amounts to about 4200 bytes per record. The 2 is a bug which is fixed here as well, noOfReplicas is removed, it was there for concurrent transactions but it is better to focus on supporting one large transaction in the cluster. Also decreasing the safety factor from 1.6 to 1.1. Also removing unused parameters. --- ndb/src/kernel/vm/Configuration.cpp | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/ndb/src/kernel/vm/Configuration.cpp b/ndb/src/kernel/vm/Configuration.cpp index c438c48f450..11bad203619 100644 --- a/ndb/src/kernel/vm/Configuration.cpp +++ b/ndb/src/kernel/vm/Configuration.cpp @@ -510,7 +510,7 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){ // The remainder are allowed for use by the scan processes. /*-----------------------------------------------------------------------*/ cfg.put(CFG_ACC_OP_RECS, - noOfReplicas*((16 * noOfOperations) / 10 + 50) + + ((11 * noOfOperations) / 10 + 50) + (noOfLocalScanRecords * MAX_PARALLEL_SCANS_PER_FRAG) + NODE_RECOVERY_SCAN_OP_RECORDS); @@ -535,18 +535,9 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){ */ cfg.put(CFG_DICT_ATTRIBUTE, 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, noOfTables); - - cfg.put(CFG_DICT_TC_CONNECT, - 2* noOfOperations); } { @@ -587,18 +578,12 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){ cfg.put(CFG_LQH_FRAG, NO_OF_FRAG_PER_NODE * noOfTables * noOfReplicas); - cfg.put(CFG_LQH_CONNECT, - noOfReplicas*((11 * noOfOperations) / 10 + 50)); - cfg.put(CFG_LQH_TABLE, noOfTables); 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, noOfLocalScanRecords); } @@ -611,7 +596,7 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){ 3 * noOfTransactions); cfg.put(CFG_TC_TC_CONNECT, - noOfOperations + 16 + noOfTransactions); + (2 * noOfOperations) + 16 + noOfTransactions); cfg.put(CFG_TC_TABLE, noOfTables); @@ -631,7 +616,7 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){ 2 * NO_OF_FRAG_PER_NODE * noOfTables* noOfReplicas); cfg.put(CFG_TUP_OP_RECS, - noOfReplicas*((16 * noOfOperations) / 10 + 50)); + (11 * noOfOperations) / 10 + 50); cfg.put(CFG_TUP_PAGE, noOfDataPages); From 7c6a4ce7bc7eb9e9b57bcd1907f3403dfa68966d Mon Sep 17 00:00:00 2001 From: "konstantin@mysql.com" <> Date: Thu, 5 Aug 2004 01:56:41 -0700 Subject: [PATCH 2/7] -O4 may be slower if you don't have profiling info (as HP pal told me on OSCON) --- BUILD/compile-hpux11-parisc2-aCC | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BUILD/compile-hpux11-parisc2-aCC b/BUILD/compile-hpux11-parisc2-aCC index 09bb5821b6d..1bdef94e080 100755 --- a/BUILD/compile-hpux11-parisc2-aCC +++ b/BUILD/compile-hpux11-parisc2-aCC @@ -13,7 +13,7 @@ fi # Also sends +Oprocelim and +Ofastaccess to the linker # (see ld(1)). -release_flags="-fast +O4" +release_flags="-fast +O3" # -z Do not bind anything to address zero. This option # allows runtime detection of null pointers. See the From f8c0850521709173112cb2be1e9668d32e0d9b55 Mon Sep 17 00:00:00 2001 From: "konstantin@mysql.com" <> Date: Thu, 5 Aug 2004 02:43:18 -0700 Subject: [PATCH 3/7] Cleanup in libmysql. --- libmysql/libmysql.c | 475 +++++++++++++++++++++++++------------------- tests/client_test.c | 6 + 2 files changed, 272 insertions(+), 209 deletions(-) diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index fc7728c98e0..b9c8201ed56 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -3018,6 +3018,7 @@ mysql_stmt_send_long_data(MYSQL_STMT *stmt, uint param_number, static void set_zero_time(MYSQL_TIME *tm) { bzero((void *)tm, sizeof(*tm)); + tm->time_type= MYSQL_TIMESTAMP_NONE; } @@ -3041,86 +3042,203 @@ static void set_zero_time(MYSQL_TIME *tm) static uint read_binary_time(MYSQL_TIME *tm, uchar **pos) { - uchar *to; uint length; /* net_field_length will set pos to the first byte of data */ if (!(length= net_field_length(pos))) - { set_zero_time(tm); - return 0; + else + { + uchar *to= *pos; + tm->neg= (bool) to[0]; + + tm->day= (ulong) sint4korr(to+1); + tm->hour= (uint) to[5]; + tm->minute= (uint) to[6]; + tm->second= (uint) to[7]; + tm->second_part= (length > 8) ? (ulong) sint4korr(to+8) : 0; + + tm->year= tm->month= 0; + tm->time_type= MYSQL_TIMESTAMP_TIME; } - - to= *pos; - tm->neg= (bool) to[0]; - - tm->day= (ulong) sint4korr(to+1); - tm->hour= (uint) to[5]; - tm->minute= (uint) to[6]; - tm->second= (uint) to[7]; - tm->second_part= (length > 8) ? (ulong) sint4korr(to+8) : 0; - - tm->year= tm->month= 0; return length; } static uint read_binary_datetime(MYSQL_TIME *tm, uchar **pos) { - uchar *to; uint length; if (!(length= net_field_length(pos))) - { set_zero_time(tm); - return 0; - } - - to= *pos; - - tm->neg= 0; - tm->year= (uint) sint2korr(to); - tm->month= (uint) to[2]; - tm->day= (uint) to[3]; - - if (length > 4) - { - tm->hour= (uint) to[4]; - tm->minute= (uint) to[5]; - tm->second= (uint) to[6]; - } else - tm->hour= tm->minute= tm->second= 0; - tm->second_part= (length > 7) ? (ulong) sint4korr(to+7) : 0; + { + uchar *to= *pos; + + tm->neg= 0; + tm->year= (uint) sint2korr(to); + tm->month= (uint) to[2]; + tm->day= (uint) to[3]; + + if (length > 4) + { + tm->hour= (uint) to[4]; + tm->minute= (uint) to[5]; + 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; + } return length; } static uint read_binary_date(MYSQL_TIME *tm, uchar **pos) { - uchar *to; uint length; if (!(length= net_field_length(pos))) - { set_zero_time(tm); - return 0; + else + { + uchar *to= *pos; + tm->year = (uint) sint2korr(to); + tm->month= (uint) to[2]; + tm->day= (uint) to[3]; + + tm->hour= tm->minute= tm->second= 0; + tm->second_part= 0; + tm->neg= 0; + tm->time_type= MYSQL_TIMESTAMP_DATE; } - - to= *pos; - tm->year = (uint) sint2korr(to); - tm->month= (uint) to[2]; - tm->day= (uint) to[3]; - - tm->hour= tm->minute= tm->second= 0; - tm->second_part= 0; - tm->neg= 0; return length; } -/* Convert integer value to client buffer type. */ +/* + Convert string to supplied buffer of any type. -static void send_data_long(MYSQL_BIND *param, MYSQL_FIELD *field, - longlong value) + SYNOPSIS + fetch_string_with_conversion() + param output buffer descriptor + value column data + length data length +*/ + +static void fetch_string_with_conversion(MYSQL_BIND *param, char *value, + uint length) +{ + char *buffer= (char *)param->buffer; + int err= 0; + + /* + 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 */ + break; + case MYSQL_TYPE_TINY: + { + uchar data= (uchar) my_strntol(&my_charset_latin1, value, length, 10, + NULL, &err); + *buffer= data; + break; + } + case MYSQL_TYPE_SHORT: + { + short data= (short) my_strntol(&my_charset_latin1, value, length, 10, + NULL, &err); + shortstore(buffer, data); + break; + } + case MYSQL_TYPE_LONG: + { + int32 data= (int32)my_strntol(&my_charset_latin1, value, length, 10, + NULL, &err); + longstore(buffer, data); + break; + } + case MYSQL_TYPE_LONGLONG: + { + longlong data= my_strntoll(&my_charset_latin1, value, length, 10, + NULL, &err); + longlongstore(buffer, data); + break; + } + case MYSQL_TYPE_FLOAT: + { + float data = (float) my_strntod(&my_charset_latin1, value, length, + NULL, &err); + floatstore(buffer, data); + break; + } + case MYSQL_TYPE_DOUBLE: + { + double data= my_strntod(&my_charset_latin1, value, length, NULL, &err); + doublestore(buffer, data); + 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: + { + /* + Copy column data to the buffer taking into account offset, + data length and buffer length. + */ + char *start= value + param->offset; + char *end= value + length; + 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 + 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; + break; + } + } +} + + +/* + 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 fetch_long_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field, + longlong value) { char *buffer= (char *)param->buffer; uint field_is_unsigned= (field->flags & UNSIGNED_FLAG); @@ -3142,45 +3260,47 @@ static void send_data_long(MYSQL_BIND *param, MYSQL_FIELD *field, break; case MYSQL_TYPE_FLOAT: { - float data= (field_is_unsigned ? (float) ulonglong2double(value) : - (float) value); + float data= field_is_unsigned ? (float) ulonglong2double(value) : + (float) value; floatstore(buffer, data); break; } case MYSQL_TYPE_DOUBLE: { - double data= (field_is_unsigned ? ulonglong2double(value) : - (double) value); + double data= field_is_unsigned ? ulonglong2double(value) : + (double) value; doublestore(buffer, data); break; } default: { - char tmp[22]; /* Enough for longlong */ - uint length= (uint)(longlong10_to_str(value,(char *)tmp, - field_is_unsigned ? 10: -10) - - tmp); - ulong copy_length= min((ulong)length-param->offset, param->buffer_length); - if ((long) copy_length < 0) - 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'; + char buff[22]; /* Enough for longlong */ + char *end= longlong10_to_str(value, buff, field_is_unsigned ? 10: -10); + /* Resort to string conversion which supports all typecodes */ + return fetch_string_with_conversion(param, buff, end - buff); } } } -/* Convert Double to buffer types */ +/* + Convert double/float column to supplied buffer of any type. -static void send_data_double(MYSQL_BIND *param, double value) + 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 fetch_float_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field, + double value, int width) { char *buffer= (char *)param->buffer; - switch(param->buffer_type) { + switch (param->buffer_type) { case MYSQL_TYPE_NULL: /* do nothing */ break; case MYSQL_TYPE_TINY: @@ -3211,167 +3331,108 @@ static void send_data_double(MYSQL_BIND *param, double value) } default: { - char tmp[128]; - uint length= my_sprintf(tmp,(tmp,"%g",value)); - ulong copy_length= min((ulong)length-param->offset, param->buffer_length); - if ((long) copy_length < 0) - copy_length=0; + /* + Resort to fetch_string_with_conversion: this should handle + 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 - memcpy(buffer, (char *)tmp+param->offset, copy_length); - *param->length= length; - - if (copy_length != param->buffer_length) - *(buffer+copy_length)= '\0'; + { + sprintf(buff, "%.*f", field->decimals, value); + end= strend(buff); + } + return fetch_string_with_conversion(param, buff, end - buff); } } } -/* Convert string to buffer types */ +/* + Fetch time/date/datetime to supplied buffer of any type -static void send_data_str(MYSQL_BIND *param, char *value, uint length) -{ - char *buffer= (char *)param->buffer; - int err=0; + SYNOPSIS + param output buffer descriptor + time column data +*/ - switch(param->buffer_type) { - case MYSQL_TYPE_NULL: /* do nothing */ - break; - case MYSQL_TYPE_TINY: - { - uchar data= (uchar)my_strntol(&my_charset_latin1,value,length,10,NULL, - &err); - *buffer= data; - break; - } - case MYSQL_TYPE_SHORT: - { - short data= (short)my_strntol(&my_charset_latin1,value,length,10,NULL, - &err); - shortstore(buffer, data); - break; - } - case MYSQL_TYPE_LONG: - { - int32 data= (int32)my_strntol(&my_charset_latin1,value,length,10,NULL, - &err); - longstore(buffer, data); - break; - } - case MYSQL_TYPE_LONGLONG: - { - longlong data= my_strntoll(&my_charset_latin1,value,length,10,NULL,&err); - longlongstore(buffer, data); - break; - } - case MYSQL_TYPE_FLOAT: - { - float data = (float)my_strntod(&my_charset_latin1,value,length,NULL,&err); - floatstore(buffer, data); - break; - } - case MYSQL_TYPE_DOUBLE: - { - double data= my_strntod(&my_charset_latin1,value,length,NULL,&err); - 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; - } - 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: - *param->length= length; - length= min(length-param->offset, param->buffer_length); - if ((long) length < 0) - length= 0; - else - memcpy(buffer, value+param->offset, length); - if (length != param->buffer_length) - buffer[length]= '\0'; - } -} - - -static void send_data_time(MYSQL_BIND *param, MYSQL_TIME ltime, - uint length) +static void fetch_datetime_with_conversion(MYSQL_BIND *param, + MYSQL_TIME *time) { switch (param->buffer_type) { case MYSQL_TYPE_NULL: /* do nothing */ break; - case MYSQL_TYPE_DATE: case MYSQL_TYPE_TIME: case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_TIMESTAMP: - { - MYSQL_TIME *tm= (MYSQL_TIME *)param->buffer; - - 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; + /* XXX: should we copy only relevant members here? */ + *(MYSQL_TIME *)(param->buffer)= *time; break; - } default: { + /* + Convert time value to string and delegate the rest to + fetch_string_with_conversion: + */ char buff[25]; + uint length; - if (!length) - ltime.time_type= MYSQL_TIMESTAMP_NONE; - switch (ltime.time_type) { + switch (time->time_type) { case MYSQL_TIMESTAMP_DATE: - length= my_sprintf(buff,(buff, "%04d-%02d-%02d", ltime.year, - ltime.month,ltime.day)); + length= my_sprintf(buff,(buff, "%04d-%02d-%02d", + time->year, time->month, time->day)); break; case MYSQL_TIMESTAMP_DATETIME: length= my_sprintf(buff,(buff, "%04d-%02d-%02d %02d:%02d:%02d", - ltime.year,ltime.month,ltime.day, - ltime.hour,ltime.minute,ltime.second)); + time->year, time->month, time->day, + time->hour, time->minute, time->second)); break; case MYSQL_TIMESTAMP_TIME: length= my_sprintf(buff, (buff, "%02d:%02d:%02d", - ltime.hour,ltime.minute,ltime.second)); + time->hour, time->minute, time->second)); break; default: length= 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. -static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) + 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_result_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field, + uchar **row) { ulong length; enum enum_field_types field_type= field->type; @@ -3381,9 +3442,9 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) { char value= (char) **row; uint field_is_unsigned= (field->flags & UNSIGNED_FLAG); - longlong data= ((field_is_unsigned) ? (longlong) (unsigned char) value: - (longlong) value); - send_data_long(param, field, data); + longlong data= (field_is_unsigned) ? (longlong) (unsigned char) value: + (longlong) value; + fetch_long_with_conversion(param, field, data); length= 1; break; } @@ -3394,7 +3455,7 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) uint field_is_unsigned= (field->flags & UNSIGNED_FLAG); longlong data= ((field_is_unsigned) ? (longlong) (unsigned short) value: (longlong) value); - send_data_long(param, field, data); + fetch_long_with_conversion(param, field, data); length= 2; break; } @@ -3404,14 +3465,14 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) uint field_is_unsigned= (field->flags & UNSIGNED_FLAG); longlong data= ((field_is_unsigned) ? (longlong) (unsigned long) value: (longlong) value); - send_data_long(param, field, data); + fetch_long_with_conversion(param, field, data); length= 4; break; } case MYSQL_TYPE_LONGLONG: { longlong value= (longlong)sint8korr(*row); - send_data_long(param, field, value); + fetch_long_with_conversion(param, field, value); length= 8; break; } @@ -3419,7 +3480,7 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) { float value; float4get(value,*row); - send_data_double(param,value); + fetch_float_with_conversion(param, field, value, FLT_DIG); length= 4; break; } @@ -3427,7 +3488,7 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) { double value; float8get(value,*row); - send_data_double(param,value); + fetch_float_with_conversion(param, field, value, DBL_DIG); length= 8; break; } @@ -3436,8 +3497,7 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) MYSQL_TIME tm; length= read_binary_date(&tm, row); - tm.time_type= MYSQL_TIMESTAMP_DATE; - send_data_time(param, tm, length); + fetch_datetime_with_conversion(param, &tm); break; } case MYSQL_TYPE_TIME: @@ -3445,8 +3505,7 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) MYSQL_TIME tm; length= read_binary_time(&tm, row); - tm.time_type= MYSQL_TIMESTAMP_TIME; - send_data_time(param, tm, length); + fetch_datetime_with_conversion(param, &tm); break; } case MYSQL_TYPE_DATETIME: @@ -3455,13 +3514,12 @@ static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row) MYSQL_TIME tm; length= read_binary_datetime(&tm, row); - tm.time_type= MYSQL_TIMESTAMP_DATETIME; - send_data_time(param, tm, length); + fetch_datetime_with_conversion(param, &tm); break; } default: length= net_field_length(row); - send_data_str(param,(char*) *row,length); + fetch_string_with_conversion(param, (char*) *row, length); break; } *row+= length; @@ -3606,7 +3664,6 @@ static void skip_result_string(MYSQL_BIND *param __attribute__((unused)), } - /* Setup the bind buffers for resultset processing */ @@ -3825,7 +3882,7 @@ static int stmt_fetch_row(MYSQL_STMT *stmt, uchar *row) if (field->type == bind->buffer_type) (*bind->fetch_result)(bind, &row); else - fetch_results(bind, field, &row); + fetch_result_with_conversion(bind, field, &row); } if (!((bit<<=1) & 255)) { @@ -3917,7 +3974,7 @@ int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind, *bind->length= *param->length; else bind->length= ¶m->internal_length; /* Needed for fetch_result() */ - fetch_results(bind, field, &row); + fetch_result_with_conversion(bind, field, &row); } else { diff --git a/tests/client_test.c b/tests/client_test.c index 3652c0f7c8e..de77d4517dd 100644 --- a/tests/client_test.c +++ b/tests/client_test.c @@ -9862,11 +9862,17 @@ static void test_bug4026() time_in.minute= 59; time_in.second= 59; 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.year= 2003; datetime_in.month= 12; datetime_in.day= 31; + datetime_in.time_type= MYSQL_TIMESTAMP_DATETIME; mysql_stmt_bind_param(stmt, bind); From b1fd4d883956c0b1dbad1539e4002fc65ba51f5e Mon Sep 17 00:00:00 2001 From: "joreland@mysql.com" <> Date: Thu, 5 Aug 2004 12:54:59 +0200 Subject: [PATCH 4/7] wl2010 Added NDB_DEBUG(--with-debug) and NDB_DEBUG_FULL(--with-debug=full) --- configure.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.in b/configure.in index afcc60942ce..b78881a253c 100644 --- a/configure.in +++ b/configure.in @@ -2961,10 +2961,10 @@ then if test "$with_debug" = "yes" then # 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" then - NDB_DEFS="-DVM_TRACE -DERROR_INSERT -DARRAY_GUARD" + NDB_DEFS="-DNDB_DEBUG_FULL -DVM_TRACE -DERROR_INSERT -DARRAY_GUARD" else NDB_DEFS="-DNDEBUG" fi From 48c8a11a4fabfec1e05041d77dac1b16654750f8 Mon Sep 17 00:00:00 2001 From: "kent@mysql.com" <> Date: Thu, 5 Aug 2004 17:05:21 +0200 Subject: [PATCH 5/7] mysqld.cc, mysql_test_run.c: Changed URL in error message, page has moved --- BitKeeper/etc/logging_ok | 1 + netware/mysql_test_run.c | 2 +- sql/mysqld.cc | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index a9cb6429a35..bd9417928be 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -84,6 +84,7 @@ joreland@mysql.com jorge@linux.jorge.mysql.com jplindst@t41.(none) kaj@work.mysql.com +kent@mysql.com konstantin@mysql.com kostja@oak.local lenz@kallisto.mysql.com diff --git a/netware/mysql_test_run.c b/netware/mysql_test_run.c index a69c5015968..fd5725a6414 100644 --- a/netware/mysql_test_run.c +++ b/netware/mysql_test_run.c @@ -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("hint of what when wrong.\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); diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 78e1268f363..998b5501724 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -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\ 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\ -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); } #endif /* HAVE_LINUXTHREADS */ From a0a5a6a6fb947336afa70a94557da1b7413782a9 Mon Sep 17 00:00:00 2001 From: "mronstrom@mysql.com" <> Date: Thu, 5 Aug 2004 18:23:01 +0200 Subject: [PATCH 6/7] Remove unused config parameters --- BitKeeper/etc/logging_ok | 1 + ndb/include/kernel/kernel_config_parameters.h | 5 ----- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index a9cb6429a35..d24092e1a54 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -97,6 +97,7 @@ miguel@hegel.txg miguel@light. miguel@light.local miguel@sartre.local +mikron@c-fb0ae253.1238-1-64736c10.cust.bredbandsbolaget.se mikron@mikael-ronstr-ms-dator.local mmatthew@markslaptop. monty@bitch.mysql.fi diff --git a/ndb/include/kernel/kernel_config_parameters.h b/ndb/include/kernel/kernel_config_parameters.h index 2f63efa4b6c..bb7c6ebd42c 100644 --- a/ndb/include/kernel/kernel_config_parameters.h +++ b/ndb/include/kernel/kernel_config_parameters.h @@ -14,10 +14,7 @@ #define CFG_ACC_SCAN (PRIVATE_BASE + 9) #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_TC_CONNECT (PRIVATE_BASE + 14) #define CFG_DIH_API_CONNECT (PRIVATE_BASE + 15) #define CFG_DIH_CONNECT (PRIVATE_BASE + 16) @@ -27,10 +24,8 @@ #define CFG_DIH_TABLE (PRIVATE_BASE + 20) #define CFG_LQH_FRAG (PRIVATE_BASE + 21) -#define CFG_LQH_CONNECT (PRIVATE_BASE + 22) #define CFG_LQH_TABLE (PRIVATE_BASE + 23) #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_SCAN (PRIVATE_BASE + 27) From 75b85ebc60826d2c0e44e37a2a18bb273cc1b15b Mon Sep 17 00:00:00 2001 From: "mronstrom@mysql.com" <> Date: Thu, 5 Aug 2004 18:51:27 +0200 Subject: [PATCH 7/7] Small fix for updated config params --- ndb/src/kernel/vm/Configuration.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ndb/src/kernel/vm/Configuration.cpp b/ndb/src/kernel/vm/Configuration.cpp index 11bad203619..550c6313058 100644 --- a/ndb/src/kernel/vm/Configuration.cpp +++ b/ndb/src/kernel/vm/Configuration.cpp @@ -548,7 +548,7 @@ Configuration::calcSizeAlt(ConfigValues * ownConfig){ 2 * noOfTransactions); cfg.put(CFG_DIH_CONNECT, - noOfOperations + 46); + noOfOperations + noOfTransactions + 46); cfg.put(CFG_DIH_FRAG_CONNECT, NO_OF_FRAG_PER_NODE * noOfTables * noOfDBNodes);