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
|
Field Type Null Key Default Extra
|
||||||
NULL int(11) YES NULL
|
NULL int(11) YES NULL
|
||||||
DROP TABLE t1, t2, t3, t4, t5, t6;
|
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
|
End of 5.0 tests
|
||||||
|
@ -1074,4 +1074,19 @@ SELECT * FROM (SELECT * FROM (SELECT NULL)a) b UNION SELECT a FROM t1;
|
|||||||
DESC t6;
|
DESC t6;
|
||||||
|
|
||||||
DROP TABLE t1, t2, t3, t4, t5, 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
|
--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)
|
else if (tmp_length > PRECISION_FOR_FLOAT)
|
||||||
{
|
{
|
||||||
sql_type= MYSQL_TYPE_DOUBLE;
|
sql_type= MYSQL_TYPE_DOUBLE;
|
||||||
length= DBL_DIG+7; /* -[digits].E+### */
|
length= MAX_DOUBLE_STR_LENGTH;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
length= FLT_DIG+6; /* -[digits].E+## */
|
length= MAX_FLOAT_STR_LENGTH;
|
||||||
decimals= NOT_FIXED_DEC;
|
decimals= NOT_FIXED_DEC;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!fld_length && !fld_decimals)
|
if (!fld_length && !fld_decimals)
|
||||||
{
|
{
|
||||||
length= FLT_DIG+6;
|
length= MAX_FLOAT_STR_LENGTH;
|
||||||
decimals= NOT_FIXED_DEC;
|
decimals= NOT_FIXED_DEC;
|
||||||
}
|
}
|
||||||
if (length < decimals &&
|
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)
|
if (decimals != NOT_FIXED_DEC)
|
||||||
{
|
{
|
||||||
int delta1= max_length_orig - decimals_orig;
|
/*
|
||||||
int delta2= item->max_length - item->decimals;
|
For FLOAT(M,D)/DOUBLE(M,D) do not change precision
|
||||||
max_length= max(delta1, delta2) + decimals;
|
if both fields have the same M and D
|
||||||
if (fld_type == MYSQL_TYPE_FLOAT && max_length > FLT_DIG + 2)
|
*/
|
||||||
|
if (item->max_length != max_length_orig ||
|
||||||
|
item->decimals != decimals_orig)
|
||||||
{
|
{
|
||||||
max_length= FLT_DIG + 6;
|
int delta1= max_length_orig - decimals_orig;
|
||||||
decimals= NOT_FIXED_DEC;
|
int delta2= item->max_length - item->decimals;
|
||||||
}
|
max_length= max(delta1, delta2) + decimals;
|
||||||
if (fld_type == MYSQL_TYPE_DOUBLE && max_length > DBL_DIG + 2)
|
if (fld_type == MYSQL_TYPE_FLOAT && max_length > FLT_DIG + 2)
|
||||||
{
|
{
|
||||||
max_length= DBL_DIG + 7;
|
max_length= MAX_FLOAT_STR_LENGTH;
|
||||||
decimals= NOT_FIXED_DEC;
|
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
|
else
|
||||||
|
@ -363,6 +363,11 @@ protected:
|
|||||||
#define PRECISION_FOR_DOUBLE 53
|
#define PRECISION_FOR_DOUBLE 53
|
||||||
#define PRECISION_FOR_FLOAT 24
|
#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
|
Default time to wait before aborting a new client connection
|
||||||
that does not respond to "initial server greeting" timely
|
that does not respond to "initial server greeting" timely
|
||||||
|
Reference in New Issue
Block a user