List:Internals« Previous MessageNext Message »
From:pem Date:September 27 2005 5:42pm
Subject:bk commit into 5.0 tree (pem:1.1998) BUG#12589
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of pem. When pem does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet
  1.1998 05/09/27 17:07:28 pem@stripped +12 -0
  Fixed BUG#12589: Assert when creating temp. table from decimal stored
                   procedure variable
    Second version, after review.
    Keep the unsigned_flag in Item_decimal updated. Note that this also changed
    the result of several old test results - creating tables from decimal
    templates now gives unsigned columns and different sizes. (Several tests
    had Length > Max_length before.)

  sql/item.cc
    1.180 05/09/27 17:07:21 pem@stripped +9 -2
    Keep the unsigned_flag updated in Item_splocal and Item_decimal.

  mysql-test/t/sp.test
    1.154 05/09/27 17:07:21 pem@stripped +51 -0
    New test case for BUG#12589.

  mysql-test/r/type_newdecimal.result
    1.30 05/09/27 17:07:21 pem@stripped +7 -7
    Updated result (after fixing BUG#12589).

  mysql-test/r/sp.result
    1.158 05/09/27 17:07:20 pem@stripped +45 -0
    New test case for BUG#12589.

  mysql-test/r/ps_7ndb.result
    1.40 05/09/27 17:07:20 pem@stripped +2 -2
    Updated result (after fixing BUG#12589).

  mysql-test/r/ps_6bdb.result
    1.40 05/09/27 17:07:20 pem@stripped +2 -2
    Updated result (after fixing BUG#12589).

  mysql-test/r/ps_5merge.result
    1.38 05/09/27 17:07:20 pem@stripped +4 -4
    Updated result (after fixing BUG#12589).

  mysql-test/r/ps_4heap.result
    1.37 05/09/27 17:07:20 pem@stripped +2 -2
    Updated result (after fixing BUG#12589).

  mysql-test/r/ps_3innodb.result
    1.41 05/09/27 17:07:20 pem@stripped +2 -2
    Updated result (after fixing BUG#12589).

  mysql-test/r/ps_2myisam.result
    1.38 05/09/27 17:07:20 pem@stripped +2 -2
    Updated result (after fixing BUG#12589).

  mysql-test/r/metadata.result
    1.13 05/09/27 17:07:20 pem@stripped +1 -1
    Updated result (after fixing BUG#12589).

  mysql-test/r/case.result
    1.24 05/09/27 17:07:20 pem@stripped +4 -4
    Updated result (after fixing BUG#12589).

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	pem
# Host:	mysql.comhem.se
# Root:	/usr/home/pem/mysql-5.0

--- 1.179/sql/item.cc	2005-09-15 21:29:00 +02:00
+++ 1.180/sql/item.cc	2005-09-27 17:07:21 +02:00
@@ -904,6 +904,7 @@
   DBUG_ASSERT(it->fixed);
   max_length= it->max_length;
   decimals= it->decimals;
+  unsigned_flag= it->unsigned_flag;
   fixed= 1;
   return FALSE;
 }
@@ -1804,6 +1805,7 @@
   name= (char*) str_arg;
   decimals= (uint8) decimal_value.frac;
   fixed= 1;
+  unsigned_flag= !decimal_value.sign();
   max_length= my_decimal_precision_to_length(decimal_value.intg + decimals,
                                              decimals, unsigned_flag);
 }
@@ -1813,6 +1815,7 @@
   int2my_decimal(E_DEC_FATAL_ERROR, val, unsig, &decimal_value);
   decimals= (uint8) decimal_value.frac;
   fixed= 1;
+  unsigned_flag= !decimal_value.sign();
   max_length= my_decimal_precision_to_length(decimal_value.intg + decimals,
                                              decimals, unsigned_flag);
 }
@@ -1823,6 +1826,7 @@
   double2my_decimal(E_DEC_FATAL_ERROR, val, &decimal_value);
   decimals= (uint8) decimal_value.frac;
   fixed= 1;
+  unsigned_flag= !decimal_value.sign();
   max_length= my_decimal_precision_to_length(decimal_value.intg + decimals,
                                              decimals, unsigned_flag);
 }
@@ -1835,6 +1839,7 @@
   name= (char*) str;
   decimals= (uint8) decimal_par;
   max_length= length;
+  unsigned_flag= !decimal_value.sign();
   fixed= 1;
 }
 
@@ -1844,8 +1849,9 @@
   my_decimal2decimal(value_par, &decimal_value);
   decimals= (uint8) decimal_value.frac;
   fixed= 1;
+  unsigned_flag= !decimal_value.sign();
   max_length= my_decimal_precision_to_length(decimal_value.intg + decimals,
-                                             decimals, !decimal_value.sign());
+                                             decimals, unsigned_flag);
 }
 
 
@@ -1855,8 +1861,9 @@
                     &decimal_value, precision, scale);
   decimals= (uint8) decimal_value.frac;
   fixed= 1;
+  unsigned_flag= !decimal_value.sign();
   max_length= my_decimal_precision_to_length(precision, decimals,
-                                             !decimal_value.sign());
+                                             unsigned_flag);
 }
 
 

--- 1.37/mysql-test/r/ps_2myisam.result	2005-09-09 14:50:02 +02:00
+++ 1.38/mysql-test/r/ps_2myisam.result	2005-09-27 17:07:20 +02:00
@@ -1775,7 +1775,7 @@
 t5	CREATE TABLE `t5` (
   `const01` bigint(1) NOT NULL default '0',
   `param01` bigint(20) default NULL,
-  `const02` decimal(2,1) NOT NULL default '0.0',
+  `const02` decimal(2,1) unsigned NOT NULL default '0.0',
   `param02` decimal(65,30) default NULL,
   `const03` double NOT NULL default '0',
   `param03` double default NULL,
@@ -1805,7 +1805,7 @@
 Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max
length	Is_null	Flags	Decimals	Charsetnr
 def	test	t5	t5	const01	const01	8	1	1	N	32769	0	63
 def	test	t5	t5	param01	param01	8	20	1	Y	32768	0	63
-def	test	t5	t5	const02	const02	246	4	3	N	1	1	63
+def	test	t5	t5	const02	const02	246	3	3	N	33	1	63
 def	test	t5	t5	param02	param02	246	67	32	Y	0	30	63
 def	test	t5	t5	const03	const03	5	17	1	N	32769	31	63
 def	test	t5	t5	param03	param03	5	23	1	Y	32768	31	63

--- 1.40/mysql-test/r/ps_3innodb.result	2005-09-09 14:50:02 +02:00
+++ 1.41/mysql-test/r/ps_3innodb.result	2005-09-27 17:07:20 +02:00
@@ -1758,7 +1758,7 @@
 t5	CREATE TABLE `t5` (
   `const01` bigint(1) NOT NULL default '0',
   `param01` bigint(20) default NULL,
-  `const02` decimal(2,1) NOT NULL default '0.0',
+  `const02` decimal(2,1) unsigned NOT NULL default '0.0',
   `param02` decimal(65,30) default NULL,
   `const03` double NOT NULL default '0',
   `param03` double default NULL,
@@ -1788,7 +1788,7 @@
 Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max
length	Is_null	Flags	Decimals	Charsetnr
 def	test	t5	t5	const01	const01	8	1	1	N	32769	0	63
 def	test	t5	t5	param01	param01	8	20	1	Y	32768	0	63
-def	test	t5	t5	const02	const02	246	4	3	N	1	1	63
+def	test	t5	t5	const02	const02	246	3	3	N	33	1	63
 def	test	t5	t5	param02	param02	246	67	32	Y	0	30	63
 def	test	t5	t5	const03	const03	5	17	1	N	32769	31	63
 def	test	t5	t5	param03	param03	5	23	1	Y	32768	31	63

--- 1.36/mysql-test/r/ps_4heap.result	2005-09-09 14:50:02 +02:00
+++ 1.37/mysql-test/r/ps_4heap.result	2005-09-27 17:07:20 +02:00
@@ -1759,7 +1759,7 @@
 t5	CREATE TABLE `t5` (
   `const01` bigint(1) NOT NULL default '0',
   `param01` bigint(20) default NULL,
-  `const02` decimal(2,1) NOT NULL default '0.0',
+  `const02` decimal(2,1) unsigned NOT NULL default '0.0',
   `param02` decimal(65,30) default NULL,
   `const03` double NOT NULL default '0',
   `param03` double default NULL,
@@ -1789,7 +1789,7 @@
 Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max
length	Is_null	Flags	Decimals	Charsetnr
 def	test	t5	t5	const01	const01	8	1	1	N	32769	0	63
 def	test	t5	t5	param01	param01	8	20	1	Y	32768	0	63
-def	test	t5	t5	const02	const02	246	4	3	N	1	1	63
+def	test	t5	t5	const02	const02	246	3	3	N	33	1	63
 def	test	t5	t5	param02	param02	246	67	32	Y	0	30	63
 def	test	t5	t5	const03	const03	5	17	1	N	32769	31	63
 def	test	t5	t5	param03	param03	5	23	1	Y	32768	31	63

--- 1.37/mysql-test/r/ps_5merge.result	2005-09-09 14:50:02 +02:00
+++ 1.38/mysql-test/r/ps_5merge.result	2005-09-27 17:07:20 +02:00
@@ -1695,7 +1695,7 @@
 t5	CREATE TABLE `t5` (
   `const01` bigint(1) NOT NULL default '0',
   `param01` bigint(20) default NULL,
-  `const02` decimal(2,1) NOT NULL default '0.0',
+  `const02` decimal(2,1) unsigned NOT NULL default '0.0',
   `param02` decimal(65,30) default NULL,
   `const03` double NOT NULL default '0',
   `param03` double default NULL,
@@ -1725,7 +1725,7 @@
 Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max
length	Is_null	Flags	Decimals	Charsetnr
 def	test	t5	t5	const01	const01	8	1	1	N	32769	0	63
 def	test	t5	t5	param01	param01	8	20	1	Y	32768	0	63
-def	test	t5	t5	const02	const02	246	4	3	N	1	1	63
+def	test	t5	t5	const02	const02	246	3	3	N	33	1	63
 def	test	t5	t5	param02	param02	246	67	32	Y	0	30	63
 def	test	t5	t5	const03	const03	5	17	1	N	32769	31	63
 def	test	t5	t5	param03	param03	5	23	1	Y	32768	31	63
@@ -4707,7 +4707,7 @@
 t5	CREATE TABLE `t5` (
   `const01` bigint(1) NOT NULL default '0',
   `param01` bigint(20) default NULL,
-  `const02` decimal(2,1) NOT NULL default '0.0',
+  `const02` decimal(2,1) unsigned NOT NULL default '0.0',
   `param02` decimal(65,30) default NULL,
   `const03` double NOT NULL default '0',
   `param03` double default NULL,
@@ -4737,7 +4737,7 @@
 Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max
length	Is_null	Flags	Decimals	Charsetnr
 def	test	t5	t5	const01	const01	8	1	1	N	32769	0	63
 def	test	t5	t5	param01	param01	8	20	1	Y	32768	0	63
-def	test	t5	t5	const02	const02	246	4	3	N	1	1	63
+def	test	t5	t5	const02	const02	246	3	3	N	33	1	63
 def	test	t5	t5	param02	param02	246	67	32	Y	0	30	63
 def	test	t5	t5	const03	const03	5	17	1	N	32769	31	63
 def	test	t5	t5	param03	param03	5	23	1	Y	32768	31	63

--- 1.39/mysql-test/r/ps_6bdb.result	2005-09-12 12:02:53 +02:00
+++ 1.40/mysql-test/r/ps_6bdb.result	2005-09-27 17:07:20 +02:00
@@ -1758,7 +1758,7 @@
 t5	CREATE TABLE `t5` (
   `const01` bigint(1) NOT NULL default '0',
   `param01` bigint(20) default NULL,
-  `const02` decimal(2,1) NOT NULL default '0.0',
+  `const02` decimal(2,1) unsigned NOT NULL default '0.0',
   `param02` decimal(65,30) default NULL,
   `const03` double NOT NULL default '0',
   `param03` double default NULL,
@@ -1788,7 +1788,7 @@
 Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max
length	Is_null	Flags	Decimals	Charsetnr
 def	test	t5	t5	const01	const01	8	1	1	N	32769	0	63
 def	test	t5	t5	param01	param01	8	20	1	Y	32768	0	63
-def	test	t5	t5	const02	const02	246	4	3	N	1	1	63
+def	test	t5	t5	const02	const02	246	3	3	N	33	1	63
 def	test	t5	t5	param02	param02	246	67	32	Y	0	30	63
 def	test	t5	t5	const03	const03	5	17	1	N	32769	31	63
 def	test	t5	t5	param03	param03	5	23	1	Y	32768	31	63

--- 1.29/mysql-test/r/type_newdecimal.result	2005-09-14 05:25:21 +02:00
+++ 1.30/mysql-test/r/type_newdecimal.result	2005-09-27 17:07:21 +02:00
@@ -68,10 +68,10 @@
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
-  `nullif(1.1, 1.1)` decimal(2,1) default NULL,
-  `nullif(1.1, 1.2)` decimal(2,1) default NULL,
-  `nullif(1.1, 0.11e1)` decimal(2,1) default NULL,
-  `nullif(1.0, 1)` decimal(2,1) default NULL,
+  `nullif(1.1, 1.1)` decimal(2,1) unsigned default NULL,
+  `nullif(1.1, 1.2)` decimal(2,1) unsigned default NULL,
+  `nullif(1.1, 0.11e1)` decimal(2,1) unsigned default NULL,
+  `nullif(1.0, 1)` decimal(2,1) unsigned default NULL,
   `nullif(1, 1.0)` int(1) default NULL,
   `nullif(1, 1.1)` int(1) default NULL
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
@@ -174,9 +174,9 @@
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
-  `round(15.4,-1)` decimal(3,0) NOT NULL default '0',
+  `round(15.4,-1)` decimal(3,0) unsigned NOT NULL default '0',
   `truncate(-5678.123451,-3)` decimal(4,0) NOT NULL default '0',
-  `abs(-1.1)` decimal(3,1) NOT NULL default '0.0',
+  `abs(-1.1)` decimal(2,1) NOT NULL default '0.0',
   `-(-1.1)` decimal(2,1) NOT NULL default '0.0'
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
 drop table t1;
@@ -781,7 +781,7 @@
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
-  `0.5` decimal(2,1) NOT NULL default '0.0'
+  `0.5` decimal(2,1) unsigned NOT NULL default '0.0'
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
 drop table t1;
 select round(1.5),round(2.5);

--- 1.39/mysql-test/r/ps_7ndb.result	2005-09-12 12:02:53 +02:00
+++ 1.40/mysql-test/r/ps_7ndb.result	2005-09-27 17:07:20 +02:00
@@ -1758,7 +1758,7 @@
 t5	CREATE TABLE `t5` (
   `const01` bigint(1) NOT NULL default '0',
   `param01` bigint(20) default NULL,
-  `const02` decimal(2,1) NOT NULL default '0.0',
+  `const02` decimal(2,1) unsigned NOT NULL default '0.0',
   `param02` decimal(65,30) default NULL,
   `const03` double NOT NULL default '0',
   `param03` double default NULL,
@@ -1788,7 +1788,7 @@
 Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max
length	Is_null	Flags	Decimals	Charsetnr
 def	test	t5	t5	const01	const01	8	1	1	N	32769	0	63
 def	test	t5	t5	param01	param01	8	20	1	Y	32768	0	63
-def	test	t5	t5	const02	const02	246	4	3	N	1	1	63
+def	test	t5	t5	const02	const02	246	3	3	N	33	1	63
 def	test	t5	t5	param02	param02	246	67	32	Y	0	30	63
 def	test	t5	t5	const03	const03	5	17	1	N	32769	31	63
 def	test	t5	t5	param03	param03	5	23	1	Y	32768	31	63

--- 1.23/mysql-test/r/case.result	2005-06-23 19:05:34 +02:00
+++ 1.24/mysql-test/r/case.result	2005-09-27 17:07:20 +02:00
@@ -103,8 +103,8 @@
   `c2` varchar(1) character set latin1 collate latin1_danish_ci NOT NULL default '',
   `c3` varbinary(1) NOT NULL default '',
   `c4` varbinary(1) NOT NULL default '',
-  `c5` varbinary(4) NOT NULL default '',
-  `c6` varbinary(4) NOT NULL default '',
+  `c5` varbinary(3) NOT NULL default '',
+  `c6` varbinary(3) NOT NULL default '',
   `c7` decimal(2,1) NOT NULL default '0.0',
   `c8` decimal(2,1) NOT NULL default '0.0',
   `c9` decimal(2,1) default NULL,
@@ -152,11 +152,11 @@
 Table	Create Table
 t1	CREATE TABLE `t1` (
   `COALESCE(1)` int(1) NOT NULL default '0',
-  `COALESCE(1.0)` decimal(2,1) NOT NULL default '0.0',
+  `COALESCE(1.0)` decimal(2,1) unsigned NOT NULL default '0.0',
   `COALESCE('a')` varchar(1) NOT NULL default '',
   `COALESCE(1,1.0)` decimal(2,1) NOT NULL default '0.0',
   `COALESCE(1,'1')` varbinary(1) NOT NULL default '',
-  `COALESCE(1.1,'1')` varbinary(4) NOT NULL default '',
+  `COALESCE(1.1,'1')` varbinary(3) NOT NULL default '',
   `COALESCE('a' COLLATE latin1_bin,'b')` varchar(1) character set latin1 collate
latin1_bin NOT NULL default ''
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
 DROP TABLE t1;

--- 1.12/mysql-test/r/metadata.result	2005-08-15 21:37:04 +02:00
+++ 1.13/mysql-test/r/metadata.result	2005-09-27 17:07:20 +02:00
@@ -2,7 +2,7 @@
 select 1, 1.0, -1, "hello", NULL;
 Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max
length	Is_null	Flags	Decimals	Charsetnr
 def					1	8	1	1	N	32897	0	63
-def					1.0	246	4	3	N	129	1	63
+def					1.0	246	3	3	N	161	1	63
 def					-1	8	2	2	N	32897	0	63
 def					hello	253	5	5	N	1	31	8
 def					NULL	6	0	0	Y	32896	0	63

--- 1.157/mysql-test/r/sp.result	2005-09-26 18:21:53 +02:00
+++ 1.158/mysql-test/r/sp.result	2005-09-27 17:07:20 +02:00
@@ -3390,4 +3390,49 @@
 set sql_mode=@sm|
 drop table t3|
 drop procedure bug6127|
+drop procedure if exists bug12589_1|
+drop procedure if exists bug12589_2|
+drop procedure if exists bug12589_3|
+create procedure bug12589_1()
+begin
+declare spv1 decimal(3,3);
+set spv1= 123.456;
+set spv1 = 'test';
+create temporary table tm1 as select spv1;
+show create table tm1;
+drop temporary table tm1;
+end|
+create procedure bug12589_2()
+begin
+declare spv1 decimal(6,3);
+set spv1= 123.456;
+create temporary table tm1 as select spv1;
+show create table tm1;
+drop temporary table tm1;
+end|
+create procedure bug12589_3()
+begin
+declare spv1 decimal(6,3);
+set spv1= -123.456;
+create temporary table tm1 as select spv1;
+show create table tm1;
+drop temporary table tm1;
+end|
+call bug12589_1()|
+Table	Create Table
+tm1	CREATE TEMPORARY TABLE `tm1` (
+  `spv1` decimal(1,0) unsigned default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+Warnings:
+Warning	1292	Truncated incorrect DECIMAL value: 'test'
+call bug12589_2()|
+Table	Create Table
+tm1	CREATE TEMPORARY TABLE `tm1` (
+  `spv1` decimal(6,3) unsigned default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+call bug12589_3()|
+Table	Create Table
+tm1	CREATE TEMPORARY TABLE `tm1` (
+  `spv1` decimal(6,3) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
 drop table t1,t2;

--- 1.153/mysql-test/t/sp.test	2005-09-26 18:21:53 +02:00
+++ 1.154/mysql-test/t/sp.test	2005-09-27 17:07:21 +02:00
@@ -4265,6 +4265,57 @@
 
 
 #
+# BUG#12589: Assert when creating temp. table from decimal stored procedure
+#            variable
+#
+--disable_warnings
+drop procedure if exists bug12589_1|
+drop procedure if exists bug12589_2|
+drop procedure if exists bug12589_3|
+--enable_warnings
+create procedure bug12589_1()
+begin
+  declare spv1 decimal(3,3);
+  set spv1= 123.456;
+
+  set spv1 = 'test';
+  create temporary table tm1 as select spv1;
+  show create table tm1;
+  drop temporary table tm1;
+end|
+
+create procedure bug12589_2()
+begin
+  declare spv1 decimal(6,3);
+  set spv1= 123.456;
+
+  create temporary table tm1 as select spv1;
+  show create table tm1;
+  drop temporary table tm1;
+end|
+
+create procedure bug12589_3()
+begin
+  declare spv1 decimal(6,3);
+  set spv1= -123.456;
+
+  create temporary table tm1 as select spv1;
+  show create table tm1;
+  drop temporary table tm1;
+end|
+
+# Note: The type of the field will match the value, not the declared
+#       type of the variable. (This is a type checking issue which
+#       might be changed later.)
+
+# Warning expected from "set spv1 = 'test'", the value is set to decimal "0".
+call bug12589_1()|
+# No warnings here
+call bug12589_2()|
+call bug12589_3()|
+
+
+#
 # BUG#NNNN: New bug synopsis
 #
 #--disable_warnings
Thread
bk commit into 5.0 tree (pem:1.1998) BUG#12589pem27 Sep