← Back to team overview

maria-developers team mailing list archive

Review request: mdev-4651

 

Hi Serg,

Please review a patch for
"mdev-4651 Crash in my_decimal2decimal in a ORDER BY query".

Thanks.

=== modified file 'mysql-test/r/ps_2myisam.result'
--- mysql-test/r/ps_2myisam.result	2011-07-23 06:47:28 +0000
+++ mysql-test/r/ps_2myisam.result	2013-06-13 13:59:20 +0000
@@ -1793,7 +1793,7 @@ t5	CREATE TABLE `t5` (
   `param08` longtext,
   `const09` datetime DEFAULT NULL,
   `param09` longblob,
-  `const10` decimal(22,6) NOT NULL DEFAULT '0.000000',
+  `const10` decimal(22,6) DEFAULT NULL,
   `param10` decimal(65,30) DEFAULT NULL,
   `const11` int(4) DEFAULT NULL,
   `param11` bigint(20) DEFAULT NULL,
@@ -1823,7 +1823,7 @@ def	test	t5	t5	const08	const08	253	19	19
 def	test	t5	t5	param08	param08	252	4294967295	19	Y	16	0	8
 def	test	t5	t5	const09	const09	12	19	19	Y	128	0	63
 def	test	t5	t5	param09	param09	252	4294967295	19	Y	144	0	63
-def	test	t5	t5	const10	const10	246	24	16	N	1	6	63
+def	test	t5	t5	const10	const10	246	24	16	Y	0	6	63
 def	test	t5	t5	param10	param10	246	67	40	Y	0	30	63
 def	test	t5	t5	const11	const11	3	4	4	Y	32768	0	63
 def	test	t5	t5	param11	param11	8	20	4	Y	32768	0	63

=== modified file 'mysql-test/r/ps_3innodb.result'
--- mysql-test/r/ps_3innodb.result	2011-07-23 06:47:28 +0000
+++ mysql-test/r/ps_3innodb.result	2013-06-13 14:00:27 +0000
@@ -1776,7 +1776,7 @@ t5	CREATE TABLE `t5` (
   `param08` longtext,
   `const09` datetime DEFAULT NULL,
   `param09` longblob,
-  `const10` decimal(22,6) NOT NULL DEFAULT '0.000000',
+  `const10` decimal(22,6) DEFAULT NULL,
   `param10` decimal(65,30) DEFAULT NULL,
   `const11` int(4) DEFAULT NULL,
   `param11` bigint(20) DEFAULT NULL,
@@ -1806,7 +1806,7 @@ def	test	t5	t5	const08	const08	253	19	19
 def	test	t5	t5	param08	param08	252	4294967295	19	Y	16	0	8
 def	test	t5	t5	const09	const09	12	19	19	Y	128	0	63
 def	test	t5	t5	param09	param09	252	4294967295	19	Y	144	0	63
-def	test	t5	t5	const10	const10	246	24	16	N	1	6	63
+def	test	t5	t5	const10	const10	246	24	16	Y	0	6	63
 def	test	t5	t5	param10	param10	246	67	40	Y	0	30	63
 def	test	t5	t5	const11	const11	3	4	4	Y	32768	0	63
 def	test	t5	t5	param11	param11	8	20	4	Y	32768	0	63

=== modified file 'mysql-test/r/ps_4heap.result'
--- mysql-test/r/ps_4heap.result	2011-07-23 06:47:28 +0000
+++ mysql-test/r/ps_4heap.result	2013-06-13 13:59:33 +0000
@@ -1777,7 +1777,7 @@ t5	CREATE TABLE `t5` (
   `param08` longtext,
   `const09` datetime DEFAULT NULL,
   `param09` longblob,
-  `const10` decimal(22,6) NOT NULL DEFAULT '0.000000',
+  `const10` decimal(22,6) DEFAULT NULL,
   `param10` decimal(65,30) DEFAULT NULL,
   `const11` int(4) DEFAULT NULL,
   `param11` bigint(20) DEFAULT NULL,
@@ -1807,7 +1807,7 @@ def	test	t5	t5	const08	const08	253	19	19
 def	test	t5	t5	param08	param08	252	4294967295	19	Y	16	0	8
 def	test	t5	t5	const09	const09	12	19	19	Y	128	0	63
 def	test	t5	t5	param09	param09	252	4294967295	19	Y	144	0	63
-def	test	t5	t5	const10	const10	246	24	16	N	1	6	63
+def	test	t5	t5	const10	const10	246	24	16	Y	0	6	63
 def	test	t5	t5	param10	param10	246	67	40	Y	0	30	63
 def	test	t5	t5	const11	const11	3	4	4	Y	32768	0	63
 def	test	t5	t5	param11	param11	8	20	4	Y	32768	0	63

=== modified file 'mysql-test/r/ps_5merge.result'
--- mysql-test/r/ps_5merge.result	2011-07-23 06:47:28 +0000
+++ mysql-test/r/ps_5merge.result	2013-06-13 14:00:02 +0000
@@ -1713,7 +1713,7 @@ t5	CREATE TABLE `t5` (
   `param08` longtext,
   `const09` datetime DEFAULT NULL,
   `param09` longblob,
-  `const10` decimal(22,6) NOT NULL DEFAULT '0.000000',
+  `const10` decimal(22,6) DEFAULT NULL,
   `param10` decimal(65,30) DEFAULT NULL,
   `const11` int(4) DEFAULT NULL,
   `param11` bigint(20) DEFAULT NULL,
@@ -1743,7 +1743,7 @@ def	test	t5	t5	const08	const08	253	19	19
 def	test	t5	t5	param08	param08	252	4294967295	19	Y	16	0	8
 def	test	t5	t5	const09	const09	12	19	19	Y	128	0	63
 def	test	t5	t5	param09	param09	252	4294967295	19	Y	144	0	63
-def	test	t5	t5	const10	const10	246	24	16	N	1	6	63
+def	test	t5	t5	const10	const10	246	24	16	Y	0	6	63
 def	test	t5	t5	param10	param10	246	67	40	Y	0	30	63
 def	test	t5	t5	const11	const11	3	4	4	Y	32768	0	63
 def	test	t5	t5	param11	param11	8	20	4	Y	32768	0	63
@@ -5067,7 +5067,7 @@ t5	CREATE TABLE `t5` (
   `param08` longtext,
   `const09` datetime DEFAULT NULL,
   `param09` longblob,
-  `const10` decimal(22,6) NOT NULL DEFAULT '0.000000',
+  `const10` decimal(22,6) DEFAULT NULL,
   `param10` decimal(65,30) DEFAULT NULL,
   `const11` int(4) DEFAULT NULL,
   `param11` bigint(20) DEFAULT NULL,
@@ -5097,7 +5097,7 @@ def	test	t5	t5	const08	const08	253	19	19
 def	test	t5	t5	param08	param08	252	4294967295	19	Y	16	0	8
 def	test	t5	t5	const09	const09	12	19	19	Y	128	0	63
 def	test	t5	t5	param09	param09	252	4294967295	19	Y	144	0	63
-def	test	t5	t5	const10	const10	246	24	16	N	1	6	63
+def	test	t5	t5	const10	const10	246	24	16	Y	0	6	63
 def	test	t5	t5	param10	param10	246	67	40	Y	0	30	63
 def	test	t5	t5	const11	const11	3	4	4	Y	32768	0	63
 def	test	t5	t5	param11	param11	8	20	4	Y	32768	0	63

=== modified file 'mysql-test/r/type_datetime_hires.result'
--- mysql-test/r/type_datetime_hires.result	2011-06-09 15:23:39 +0000
+++ mysql-test/r/type_datetime_hires.result	2013-06-13 14:13:49 +0000
@@ -338,3 +338,15 @@ select * from t1;
 a	b
 2010-01-02 03:04:05.000000	2010-01-02 03:04:05
 drop table t1;
+#
+# MDEV-4651 Crash in my_decimal2decimal in a ORDER BY query
+#
+SET @@time_zone='+00:00';
+CREATE TABLE t1 (a DATETIME(4) NOT NULL);
+INSERT INTO t1 VALUES ('2001-01-01 00:00:00'),('2000-00-00 00:00:00');
+SELECT UNIX_TIMESTAMP(a) FROM t1 ORDER BY 1;
+UNIX_TIMESTAMP(a)
+NULL
+978307200.0000
+DROP TABLE t1;
+SET @@time_zone=DEFAULT;

=== modified file 'mysql-test/suite/maria/r/ps_maria.result'
--- mysql-test/suite/maria/r/ps_maria.result	2011-07-23 06:47:28 +0000
+++ mysql-test/suite/maria/r/ps_maria.result	2013-06-13 14:00:14 +0000
@@ -1793,7 +1793,7 @@ t5	CREATE TABLE `t5` (
   `param08` longtext,
   `const09` datetime DEFAULT NULL,
   `param09` longblob,
-  `const10` decimal(22,6) NOT NULL DEFAULT '0.000000',
+  `const10` decimal(22,6) DEFAULT NULL,
   `param10` decimal(65,30) DEFAULT NULL,
   `const11` int(4) DEFAULT NULL,
   `param11` bigint(20) DEFAULT NULL,
@@ -1823,7 +1823,7 @@ def	test	t5	t5	const08	const08	253	19	19
 def	test	t5	t5	param08	param08	252	4294967295	19	Y	16	0	8
 def	test	t5	t5	const09	const09	12	19	19	Y	128	0	63
 def	test	t5	t5	param09	param09	252	4294967295	19	Y	144	0	63
-def	test	t5	t5	const10	const10	246	24	16	N	1	6	63
+def	test	t5	t5	const10	const10	246	24	16	Y	0	6	63
 def	test	t5	t5	param10	param10	246	67	40	Y	0	30	63
 def	test	t5	t5	const11	const11	3	4	4	Y	32768	0	63
 def	test	t5	t5	param11	param11	8	20	4	Y	32768	0	63

=== modified file 'mysql-test/t/type_datetime_hires.test'
--- mysql-test/t/type_datetime_hires.test	2011-06-09 15:23:39 +0000
+++ mysql-test/t/type_datetime_hires.test	2013-06-13 14:13:15 +0000
@@ -69,3 +69,12 @@ alter table t1 modify b datetime, modify
 select * from t1;
 drop table t1;
 
+--echo #
+--echo # MDEV-4651 Crash in my_decimal2decimal in a ORDER BY query
+--echo #
+SET @@time_zone='+00:00';
+CREATE TABLE t1 (a DATETIME(4) NOT NULL);
+INSERT INTO t1 VALUES ('2001-01-01 00:00:00'),('2000-00-00 00:00:00');
+SELECT UNIX_TIMESTAMP(a) FROM t1 ORDER BY 1;
+DROP TABLE t1;
+SET @@time_zone=DEFAULT;

=== modified file 'sql/item_timefunc.h'
--- sql/item_timefunc.h	2012-12-28 12:41:46 +0000
+++ sql/item_timefunc.h	2013-06-13 07:24:20 +0000
@@ -370,6 +370,7 @@ class Item_func_seconds_hybrid: public I
       decimals= args[0]->decimals;
     set_if_smaller(decimals, TIME_SECOND_PART_DIGITS);
     max_length=17 + (decimals ? decimals + 1 : 0);
+    set_persist_maybe_null(1);
   }
   void find_num_type() { hybrid_type= decimals ? DECIMAL_RESULT : INT_RESULT; }
   double real_op() { DBUG_ASSERT(0); return 0; }


References