mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-17759 Assertion `precision > 0' failed in decimal_bin_size upon CREATE TABLE .. SELECT
This commit is contained in:
@@ -3753,5 +3753,23 @@ t1 CREATE TABLE `t1` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-17759 Assertion `precision > 0' failed in decimal_bin_size upon CREATE TABLE .. SELECT
|
||||
#
|
||||
SET sql_mode='';
|
||||
CREATE TABLE t1 (d DECIMAL(43,0) UNSIGNED);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
CREATE TABLE t2 AS SELECT
|
||||
IFNULL(SLEEP(0.01), NULL DIV d) AS f0,
|
||||
IFNULL(SLEEP(0.01), '' DIV d) AS f1
|
||||
FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`f0` decimal(1,0) DEFAULT NULL,
|
||||
`f1` decimal(1,0) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1, t2;
|
||||
SET sql_mode=DEFAULT;
|
||||
#
|
||||
# End of 10.3 tests
|
||||
#
|
||||
|
@@ -611,6 +611,22 @@ CREATE TABLE t1 AS SELECT
|
||||
SHOW CREATE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-17759 Assertion `precision > 0' failed in decimal_bin_size upon CREATE TABLE .. SELECT
|
||||
--echo #
|
||||
|
||||
SET sql_mode='';
|
||||
CREATE TABLE t1 (d DECIMAL(43,0) UNSIGNED);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
CREATE TABLE t2 AS SELECT
|
||||
IFNULL(SLEEP(0.01), NULL DIV d) AS f0,
|
||||
IFNULL(SLEEP(0.01), '' DIV d) AS f1
|
||||
FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t1, t2;
|
||||
SET sql_mode=DEFAULT;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.3 tests
|
||||
--echo #
|
||||
|
@@ -1285,3 +1285,36 @@ E59B9BE4BA94E585AD 2914501801
|
||||
E4B883E585ABE4B99D 2374586519
|
||||
DROP TABLE t1;
|
||||
SET NAMES default;
|
||||
#
|
||||
# MDEV-17759 Assertion `precision > 0' failed in decimal_bin_size upon CREATE TABLE .. SELECT
|
||||
#
|
||||
SET sql_mode='';
|
||||
CREATE TABLE t1 (d DECIMAL(43,0) UNSIGNED);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
CREATE TABLE t2 AS SELECT
|
||||
NULL DIV d AS d_null,
|
||||
'' DIV d AS d_empty_string,
|
||||
X'32' DIV d AS d_hex_string2,
|
||||
X'3232' DIV d AS d_hex_string4,
|
||||
TIME(0) DIV d AS d_time,
|
||||
CURRENT_DATE DIV d AS d_date,
|
||||
CURRENT_TIMESTAMP DIV d AS d_datetime
|
||||
FROM t1;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect DECIMAL value: ''
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`d_null` int(1) unsigned DEFAULT NULL,
|
||||
`d_empty_string` int(1) unsigned DEFAULT NULL,
|
||||
`d_hex_string2` int(1) unsigned DEFAULT NULL,
|
||||
`d_hex_string4` int(2) unsigned DEFAULT NULL,
|
||||
`d_time` int(7) unsigned DEFAULT NULL,
|
||||
`d_date` int(8) unsigned DEFAULT NULL,
|
||||
`d_datetime` bigint(14) unsigned DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1, t2;
|
||||
SET sql_mode=DEFAULT;
|
||||
#
|
||||
# End of 10.3 tests
|
||||
#
|
||||
|
@@ -897,3 +897,28 @@ LOAD DATA INFILE '../../std_data/loaddata_utf8.dat' INTO TABLE t1 CHARACTER SET
|
||||
SELECT HEX(a), CRC32(a) from t1;
|
||||
DROP TABLE t1;
|
||||
SET NAMES default;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-17759 Assertion `precision > 0' failed in decimal_bin_size upon CREATE TABLE .. SELECT
|
||||
--echo #
|
||||
|
||||
SET sql_mode='';
|
||||
CREATE TABLE t1 (d DECIMAL(43,0) UNSIGNED);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
CREATE TABLE t2 AS SELECT
|
||||
NULL DIV d AS d_null,
|
||||
'' DIV d AS d_empty_string,
|
||||
X'32' DIV d AS d_hex_string2,
|
||||
X'3232' DIV d AS d_hex_string4,
|
||||
TIME(0) DIV d AS d_time,
|
||||
CURRENT_DATE DIV d AS d_date,
|
||||
CURRENT_TIMESTAMP DIV d AS d_datetime
|
||||
FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t1, t2;
|
||||
SET sql_mode=DEFAULT;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.3 tests
|
||||
--echo #
|
||||
|
@@ -1752,13 +1752,9 @@ longlong Item_func_int_div::val_int()
|
||||
|
||||
bool Item_func_int_div::fix_length_and_dec()
|
||||
{
|
||||
Item_result argtype= args[0]->result_type();
|
||||
/* use precision ony for the data type it is applicable for and valid */
|
||||
uint32 char_length= args[0]->max_char_length() -
|
||||
(argtype == DECIMAL_RESULT || argtype == INT_RESULT ?
|
||||
args[0]->decimals : 0);
|
||||
fix_char_length(char_length > MY_INT64_NUM_DECIMAL_DIGITS ?
|
||||
MY_INT64_NUM_DECIMAL_DIGITS : char_length);
|
||||
uint32 prec= args[0]->decimal_int_part();
|
||||
set_if_smaller(prec, MY_INT64_NUM_DECIMAL_DIGITS);
|
||||
fix_char_length(prec);
|
||||
maybe_null=1;
|
||||
unsigned_flag=args[0]->unsigned_flag | args[1]->unsigned_flag;
|
||||
return false;
|
||||
|
Reference in New Issue
Block a user