mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
auto-merge Bug#11762799/Bug#55436
This commit is contained in:
@ -2583,7 +2583,7 @@ bool Field_new_decimal::store_value(const my_decimal *decimal_value)
|
||||
DBUG_ENTER("Field_new_decimal::store_value");
|
||||
#ifndef DBUG_OFF
|
||||
{
|
||||
char dbug_buff[DECIMAL_MAX_STR_LENGTH+1];
|
||||
char dbug_buff[DECIMAL_MAX_STR_LENGTH+2];
|
||||
DBUG_PRINT("enter", ("value: %s", dbug_decimal_as_string(dbug_buff, decimal_value)));
|
||||
}
|
||||
#endif
|
||||
@ -2598,7 +2598,7 @@ bool Field_new_decimal::store_value(const my_decimal *decimal_value)
|
||||
}
|
||||
#ifndef DBUG_OFF
|
||||
{
|
||||
char dbug_buff[DECIMAL_MAX_STR_LENGTH+1];
|
||||
char dbug_buff[DECIMAL_MAX_STR_LENGTH+2];
|
||||
DBUG_PRINT("info", ("saving with precision %d scale: %d value %s",
|
||||
(int)precision, (int)dec,
|
||||
dbug_decimal_as_string(dbug_buff, decimal_value)));
|
||||
@ -2673,7 +2673,7 @@ int Field_new_decimal::store(const char *from, uint length,
|
||||
}
|
||||
|
||||
#ifndef DBUG_OFF
|
||||
char dbug_buff[DECIMAL_MAX_STR_LENGTH+1];
|
||||
char dbug_buff[DECIMAL_MAX_STR_LENGTH+2];
|
||||
DBUG_PRINT("enter", ("value: %s",
|
||||
dbug_decimal_as_string(dbug_buff, &decimal_value)));
|
||||
#endif
|
||||
|
@ -95,10 +95,11 @@ int my_decimal2string(uint mask, const my_decimal *d,
|
||||
UNSIGNED. Hence the buffer for a ZEROFILLed value is the length
|
||||
the user requested, plus one for a possible decimal point, plus
|
||||
one if the user only wanted decimal places, but we force a leading
|
||||
zero on them. Because the type is implicitly UNSIGNED, we do not
|
||||
need to reserve a character for the sign. For all other cases,
|
||||
fixed_prec will be 0, and my_decimal_string_length() will be called
|
||||
instead to calculate the required size of the buffer.
|
||||
zero on them, plus one for the '\0' terminator. Because the type
|
||||
is implicitly UNSIGNED, we do not need to reserve a character for
|
||||
the sign. For all other cases, fixed_prec will be 0, and
|
||||
my_decimal_string_length() will be called instead to calculate the
|
||||
required size of the buffer.
|
||||
*/
|
||||
int length= (fixed_prec
|
||||
? (fixed_prec + ((fixed_prec == fixed_dec) ? 1 : 0) + 1)
|
||||
@ -276,7 +277,7 @@ print_decimal_buff(const my_decimal *dec, const uchar* ptr, int length)
|
||||
|
||||
const char *dbug_decimal_as_string(char *buff, const my_decimal *val)
|
||||
{
|
||||
int length= DECIMAL_MAX_STR_LENGTH;
|
||||
int length= DECIMAL_MAX_STR_LENGTH + 1; /* minimum size for buff */
|
||||
if (!val)
|
||||
return "NULL";
|
||||
(void)decimal2string((decimal_t*) val, buff, &length, 0,0,0);
|
||||
|
@ -55,7 +55,7 @@ C_MODE_END
|
||||
|
||||
/**
|
||||
maximum length of string representation (number of maximum decimal
|
||||
digits + 1 position for sign + 1 position for decimal point)
|
||||
digits + 1 position for sign + 1 position for decimal point, no terminator)
|
||||
*/
|
||||
#define DECIMAL_MAX_STR_LENGTH (DECIMAL_MAX_POSSIBLE_PRECISION + 2)
|
||||
|
||||
@ -212,6 +212,7 @@ inline uint32 my_decimal_precision_to_length(uint precision, uint8 scale,
|
||||
inline
|
||||
int my_decimal_string_length(const my_decimal *d)
|
||||
{
|
||||
/* length of string representation including terminating '\0' */
|
||||
return decimal_string_size(d);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user