mirror of
https://github.com/MariaDB/server.git
synced 2026-04-28 03:05:33 +02:00
Bug#20305: PROCEDURE ANALYSE() returns wrong M for FLOAT(M, D) and DOUBLE(M, D)
mysql-test/r/analyse.result: Added Results mysql-test/t/analyse.test: Added test cases to make sure field_str and field_real return correctly. sql/sql_analyse.cc: According the manaul, when declaring a FLOAT(M, N), N equals the number of decimal places and M equals the total number of digits in the number.
This commit is contained in:
parent
418ae41b48
commit
314e10592c
3 changed files with 30 additions and 5 deletions
|
|
@ -709,9 +709,9 @@ void field_str::get_opt_type(String *answer, ha_rows total_rows)
|
|||
else if (num_info.decimals) // DOUBLE(%d,%d) sometime
|
||||
{
|
||||
if (num_info.dval > -FLT_MAX && num_info.dval < FLT_MAX)
|
||||
sprintf(buff, "FLOAT(%d,%d)", num_info.integers, num_info.decimals);
|
||||
sprintf(buff, "FLOAT(%d,%d)", (num_info.integers + num_info.decimals), num_info.decimals);
|
||||
else
|
||||
sprintf(buff, "DOUBLE(%d,%d)", num_info.integers, num_info.decimals);
|
||||
sprintf(buff, "DOUBLE(%d,%d)", (num_info.integers + num_info.decimals), num_info.decimals);
|
||||
}
|
||||
else if (ev_num_info.llval >= -128 &&
|
||||
ev_num_info.ullval <=
|
||||
|
|
@ -818,10 +818,10 @@ void field_real::get_opt_type(String *answer,
|
|||
else
|
||||
{
|
||||
if (min_arg >= -FLT_MAX && max_arg <= FLT_MAX)
|
||||
sprintf(buff, "FLOAT(%d,%d)", (int) max_length - (item->decimals + 1),
|
||||
sprintf(buff, "FLOAT(%d,%d)", (int) max_length - (item->decimals + 1) + max_notzero_dec_len,
|
||||
max_notzero_dec_len);
|
||||
else
|
||||
sprintf(buff, "DOUBLE(%d,%d)", (int) max_length - (item->decimals + 1),
|
||||
sprintf(buff, "DOUBLE(%d,%d)", (int) max_length - (item->decimals + 1) + max_notzero_dec_len,
|
||||
max_notzero_dec_len);
|
||||
answer->append(buff, (uint) strlen(buff));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue