mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Automerge.
This commit is contained in:
@ -1562,4 +1562,16 @@ DESC t6;
|
||||
Field Type Null Key Default Extra
|
||||
NULL int(11) YES NULL
|
||||
DROP TABLE t1, t2, t3, t4, t5, t6;
|
||||
CREATE TABLE t1 (f FLOAT(9,6));
|
||||
CREATE TABLE t2 AS SELECT f FROM t1 UNION SELECT f FROM t1;
|
||||
SHOW FIELDS FROM t2;
|
||||
Field Type Null Key Default Extra
|
||||
f float(9,6) YES NULL
|
||||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t1(d DOUBLE(9,6));
|
||||
CREATE TABLE t2 AS SELECT d FROM t1 UNION SELECT d FROM t1;
|
||||
SHOW FIELDS FROM t2;
|
||||
Field Type Null Key Default Extra
|
||||
d double(9,6) YES NULL
|
||||
DROP TABLE t1, t2;
|
||||
End of 5.0 tests
|
||||
|
@ -1074,4 +1074,19 @@ SELECT * FROM (SELECT * FROM (SELECT NULL)a) b UNION SELECT a FROM t1;
|
||||
DESC t6;
|
||||
|
||||
DROP TABLE t1, t2, t3, t4, t5, t6;
|
||||
|
||||
#
|
||||
# Bug #43432: Union on floats does unnecessary rounding
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (f FLOAT(9,6));
|
||||
CREATE TABLE t2 AS SELECT f FROM t1 UNION SELECT f FROM t1;
|
||||
SHOW FIELDS FROM t2;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
CREATE TABLE t1(d DOUBLE(9,6));
|
||||
CREATE TABLE t2 AS SELECT d FROM t1 UNION SELECT d FROM t1;
|
||||
SHOW FIELDS FROM t2;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -9685,16 +9685,16 @@ bool Create_field::init(THD *thd, char *fld_name, enum_field_types fld_type,
|
||||
else if (tmp_length > PRECISION_FOR_FLOAT)
|
||||
{
|
||||
sql_type= MYSQL_TYPE_DOUBLE;
|
||||
length= DBL_DIG+7; /* -[digits].E+### */
|
||||
length= MAX_DOUBLE_STR_LENGTH;
|
||||
}
|
||||
else
|
||||
length= FLT_DIG+6; /* -[digits].E+## */
|
||||
length= MAX_FLOAT_STR_LENGTH;
|
||||
decimals= NOT_FIXED_DEC;
|
||||
break;
|
||||
}
|
||||
if (!fld_length && !fld_decimals)
|
||||
{
|
||||
length= FLT_DIG+6;
|
||||
length= MAX_FLOAT_STR_LENGTH;
|
||||
decimals= NOT_FIXED_DEC;
|
||||
}
|
||||
if (length < decimals &&
|
||||
|
30
sql/item.cc
30
sql/item.cc
@ -7125,18 +7125,26 @@ bool Item_type_holder::join_types(THD *thd, Item *item)
|
||||
{
|
||||
if (decimals != NOT_FIXED_DEC)
|
||||
{
|
||||
int delta1= max_length_orig - decimals_orig;
|
||||
int delta2= item->max_length - item->decimals;
|
||||
max_length= max(delta1, delta2) + decimals;
|
||||
if (fld_type == MYSQL_TYPE_FLOAT && max_length > FLT_DIG + 2)
|
||||
/*
|
||||
For FLOAT(M,D)/DOUBLE(M,D) do not change precision
|
||||
if both fields have the same M and D
|
||||
*/
|
||||
if (item->max_length != max_length_orig ||
|
||||
item->decimals != decimals_orig)
|
||||
{
|
||||
max_length= FLT_DIG + 6;
|
||||
decimals= NOT_FIXED_DEC;
|
||||
}
|
||||
if (fld_type == MYSQL_TYPE_DOUBLE && max_length > DBL_DIG + 2)
|
||||
{
|
||||
max_length= DBL_DIG + 7;
|
||||
decimals= NOT_FIXED_DEC;
|
||||
int delta1= max_length_orig - decimals_orig;
|
||||
int delta2= item->max_length - item->decimals;
|
||||
max_length= max(delta1, delta2) + decimals;
|
||||
if (fld_type == MYSQL_TYPE_FLOAT && max_length > FLT_DIG + 2)
|
||||
{
|
||||
max_length= MAX_FLOAT_STR_LENGTH;
|
||||
decimals= NOT_FIXED_DEC;
|
||||
}
|
||||
else if (fld_type == MYSQL_TYPE_DOUBLE && max_length > DBL_DIG + 2)
|
||||
{
|
||||
max_length= MAX_DOUBLE_STR_LENGTH;
|
||||
decimals= NOT_FIXED_DEC;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -363,6 +363,11 @@ protected:
|
||||
#define PRECISION_FOR_DOUBLE 53
|
||||
#define PRECISION_FOR_FLOAT 24
|
||||
|
||||
/* -[digits].E+## */
|
||||
#define MAX_FLOAT_STR_LENGTH (FLT_DIG + 6)
|
||||
/* -[digits].E+### */
|
||||
#define MAX_DOUBLE_STR_LENGTH (DBL_DIG + 7)
|
||||
|
||||
/*
|
||||
Default time to wait before aborting a new client connection
|
||||
that does not respond to "initial server greeting" timely
|
||||
|
Reference in New Issue
Block a user