diff options
-rw-r--r-- | mysql-test/r/sp-vars.result | 152 | ||||
-rw-r--r-- | mysql-test/r/sp.result | 2 | ||||
-rw-r--r-- | mysql-test/r/type_newdecimal-big.result | 31 | ||||
-rw-r--r-- | mysql-test/t/type_newdecimal-big.test | 31 | ||||
-rw-r--r-- | sql/sp_head.cc | 3 | ||||
-rw-r--r-- | sql/sql_select.cc | 4 |
6 files changed, 130 insertions, 93 deletions
diff --git a/mysql-test/r/sp-vars.result b/mysql-test/r/sp-vars.result index 6b4d7b1a6d3..b26d8a6e974 100644 --- a/mysql-test/r/sp-vars.result +++ b/mysql-test/r/sp-vars.result @@ -103,18 +103,18 @@ v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 12.00 12.12 12.00 12.12 Warnings: -Warning 1264 Out of range value adjusted for column 'v1' at row 1 -Warning 1264 Out of range value adjusted for column 'v1u' at row 1 -Warning 1264 Out of range value adjusted for column 'v2' at row 1 -Warning 1264 Out of range value adjusted for column 'v2u' at row 1 -Warning 1264 Out of range value adjusted for column 'v3' at row 1 -Warning 1264 Out of range value adjusted for column 'v3u' at row 1 -Warning 1264 Out of range value adjusted for column 'v4' at row 1 -Warning 1264 Out of range value adjusted for column 'v4u' at row 1 -Warning 1264 Out of range value adjusted for column 'v5' at row 1 -Warning 1264 Out of range value adjusted for column 'v5u' at row 1 -Warning 1264 Out of range value adjusted for column 'v6' at row 1 -Warning 1264 Out of range value adjusted for column 'v6u' at row 1 +Warning 1264 Out of range value for column 'v1' at row 1 +Warning 1264 Out of range value for column 'v1u' at row 1 +Warning 1264 Out of range value for column 'v2' at row 1 +Warning 1264 Out of range value for column 'v2u' at row 1 +Warning 1264 Out of range value for column 'v3' at row 1 +Warning 1264 Out of range value for column 'v3u' at row 1 +Warning 1264 Out of range value for column 'v4' at row 1 +Warning 1264 Out of range value for column 'v4u' at row 1 +Warning 1264 Out of range value for column 'v5' at row 1 +Warning 1264 Out of range value for column 'v5u' at row 1 +Warning 1264 Out of range value for column 'v6' at row 1 +Warning 1264 Out of range value for column 'v6u' at row 1 Warning 1366 Incorrect integer value: 'String 10 ' for column 'v10' at row 1 Warning 1366 Incorrect integer value: 'String10' for column 'v11' at row 1 Warning 1265 Data truncated for column 'v12' at row 1 @@ -136,32 +136,32 @@ d1 d2 d3 d1 d2 d3 1234.00 1234.12 1234.12 Warnings: -Warning 1264 Out of range value adjusted for column 'i1' at row 1 -Warning 1264 Out of range value adjusted for column 'i2' at row 1 -Warning 1264 Out of range value adjusted for column 'i3' at row 1 -Warning 1264 Out of range value adjusted for column 'i4' at row 1 -Warning 1264 Out of range value adjusted for column 'i1' at row 1 -Warning 1264 Out of range value adjusted for column 'i2' at row 1 -Warning 1264 Out of range value adjusted for column 'i3' at row 1 -Warning 1264 Out of range value adjusted for column 'i4' at row 1 -Warning 1264 Out of range value adjusted for column 'u1' at row 1 -Warning 1264 Out of range value adjusted for column 'u2' at row 1 -Warning 1264 Out of range value adjusted for column 'u3' at row 1 -Warning 1264 Out of range value adjusted for column 'u4' at row 1 -Warning 1264 Out of range value adjusted for column 'u1' at row 1 -Warning 1264 Out of range value adjusted for column 'u2' at row 1 +Warning 1264 Out of range value for column 'i1' at row 1 +Warning 1264 Out of range value for column 'i2' at row 1 +Warning 1264 Out of range value for column 'i3' at row 1 +Warning 1264 Out of range value for column 'i4' at row 1 +Warning 1264 Out of range value for column 'i1' at row 1 +Warning 1264 Out of range value for column 'i2' at row 1 +Warning 1264 Out of range value for column 'i3' at row 1 +Warning 1264 Out of range value for column 'i4' at row 1 +Warning 1264 Out of range value for column 'u1' at row 1 +Warning 1264 Out of range value for column 'u2' at row 1 +Warning 1264 Out of range value for column 'u3' at row 1 +Warning 1264 Out of range value for column 'u4' at row 1 +Warning 1264 Out of range value for column 'u1' at row 1 +Warning 1264 Out of range value for column 'u2' at row 1 Note 1265 Data truncated for column 'd3' at row 1 Note 1265 Data truncated for column 'd3' at row 1 SELECT sp_vars_check_ret1(); sp_vars_check_ret1() 127 Warnings: -Warning 1264 Out of range value adjusted for column 'sp_vars_check_ret1()' at row 1 +Warning 1264 Out of range value for column 'sp_vars_check_ret1()' at row 1 SELECT sp_vars_check_ret2(); sp_vars_check_ret2() 127 Warnings: -Warning 1264 Out of range value adjusted for column 'sp_vars_check_ret2()' at row 1 +Warning 1264 Out of range value for column 'sp_vars_check_ret2()' at row 1 SELECT sp_vars_check_ret3(); sp_vars_check_ret3() 0 @@ -188,18 +188,18 @@ v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 12.00 12.12 12.00 12.12 Warnings: -Warning 1264 Out of range value adjusted for column 'v1' at row 1 -Warning 1264 Out of range value adjusted for column 'v1u' at row 1 -Warning 1264 Out of range value adjusted for column 'v2' at row 1 -Warning 1264 Out of range value adjusted for column 'v2u' at row 1 -Warning 1264 Out of range value adjusted for column 'v3' at row 1 -Warning 1264 Out of range value adjusted for column 'v3u' at row 1 -Warning 1264 Out of range value adjusted for column 'v4' at row 1 -Warning 1264 Out of range value adjusted for column 'v4u' at row 1 -Warning 1264 Out of range value adjusted for column 'v5' at row 1 -Warning 1264 Out of range value adjusted for column 'v5u' at row 1 -Warning 1264 Out of range value adjusted for column 'v6' at row 1 -Warning 1264 Out of range value adjusted for column 'v6u' at row 1 +Warning 1264 Out of range value for column 'v1' at row 1 +Warning 1264 Out of range value for column 'v1u' at row 1 +Warning 1264 Out of range value for column 'v2' at row 1 +Warning 1264 Out of range value for column 'v2u' at row 1 +Warning 1264 Out of range value for column 'v3' at row 1 +Warning 1264 Out of range value for column 'v3u' at row 1 +Warning 1264 Out of range value for column 'v4' at row 1 +Warning 1264 Out of range value for column 'v4u' at row 1 +Warning 1264 Out of range value for column 'v5' at row 1 +Warning 1264 Out of range value for column 'v5u' at row 1 +Warning 1264 Out of range value for column 'v6' at row 1 +Warning 1264 Out of range value for column 'v6u' at row 1 Warning 1366 Incorrect integer value: 'String 10 ' for column 'v10' at row 1 Warning 1366 Incorrect integer value: 'String10' for column 'v11' at row 1 Warning 1265 Data truncated for column 'v12' at row 1 @@ -221,32 +221,32 @@ d1 d2 d3 d1 d2 d3 1234.00 1234.12 1234.12 Warnings: -Warning 1264 Out of range value adjusted for column 'i1' at row 1 -Warning 1264 Out of range value adjusted for column 'i2' at row 1 -Warning 1264 Out of range value adjusted for column 'i3' at row 1 -Warning 1264 Out of range value adjusted for column 'i4' at row 1 -Warning 1264 Out of range value adjusted for column 'i1' at row 1 -Warning 1264 Out of range value adjusted for column 'i2' at row 1 -Warning 1264 Out of range value adjusted for column 'i3' at row 1 -Warning 1264 Out of range value adjusted for column 'i4' at row 1 -Warning 1264 Out of range value adjusted for column 'u1' at row 1 -Warning 1264 Out of range value adjusted for column 'u2' at row 1 -Warning 1264 Out of range value adjusted for column 'u3' at row 1 -Warning 1264 Out of range value adjusted for column 'u4' at row 1 -Warning 1264 Out of range value adjusted for column 'u1' at row 1 -Warning 1264 Out of range value adjusted for column 'u2' at row 1 +Warning 1264 Out of range value for column 'i1' at row 1 +Warning 1264 Out of range value for column 'i2' at row 1 +Warning 1264 Out of range value for column 'i3' at row 1 +Warning 1264 Out of range value for column 'i4' at row 1 +Warning 1264 Out of range value for column 'i1' at row 1 +Warning 1264 Out of range value for column 'i2' at row 1 +Warning 1264 Out of range value for column 'i3' at row 1 +Warning 1264 Out of range value for column 'i4' at row 1 +Warning 1264 Out of range value for column 'u1' at row 1 +Warning 1264 Out of range value for column 'u2' at row 1 +Warning 1264 Out of range value for column 'u3' at row 1 +Warning 1264 Out of range value for column 'u4' at row 1 +Warning 1264 Out of range value for column 'u1' at row 1 +Warning 1264 Out of range value for column 'u2' at row 1 Note 1265 Data truncated for column 'd3' at row 1 Note 1265 Data truncated for column 'd3' at row 1 SELECT sp_vars_check_ret1(); sp_vars_check_ret1() 127 Warnings: -Warning 1264 Out of range value adjusted for column 'sp_vars_check_ret1()' at row 1 +Warning 1264 Out of range value for column 'sp_vars_check_ret1()' at row 1 SELECT sp_vars_check_ret2(); sp_vars_check_ret2() 127 Warnings: -Warning 1264 Out of range value adjusted for column 'sp_vars_check_ret2()' at row 1 +Warning 1264 Out of range value for column 'sp_vars_check_ret2()' at row 1 SELECT sp_vars_check_ret3(); sp_vars_check_ret3() 0 @@ -352,13 +352,13 @@ Calling the routines, created in TRADITIONAL mode. --------------------------------------------------------------- CALL sp_vars_check_dflt(); -ERROR 22003: Out of range value adjusted for column 'v1' at row 1 +ERROR 22003: Out of range value for column 'v1' at row 1 CALL sp_vars_check_assignment(); -ERROR 22003: Out of range value adjusted for column 'i1' at row 1 +ERROR 22003: Out of range value for column 'i1' at row 1 SELECT sp_vars_check_ret1(); -ERROR 22003: Out of range value adjusted for column 'sp_vars_check_ret1()' at row 1 +ERROR 22003: Out of range value for column 'sp_vars_check_ret1()' at row 1 SELECT sp_vars_check_ret2(); -ERROR 22003: Out of range value adjusted for column 'sp_vars_check_ret2()' at row 1 +ERROR 22003: Out of range value for column 'sp_vars_check_ret2()' at row 1 SELECT sp_vars_check_ret3(); ERROR HY000: Incorrect integer value: 'Hello, world' for column 'sp_vars_check_ret3()' at row 1 SELECT sp_vars_check_ret4(); @@ -428,11 +428,11 @@ FF HEX(v10) FF Warnings: -Warning 1264 Out of range value adjusted for column 'v8' at row 1 -Warning 1264 Out of range value adjusted for column 'v9' at row 1 -Warning 1264 Out of range value adjusted for column 'v10' at row 1 -Warning 1264 Out of range value adjusted for column 'v1' at row 1 -Warning 1264 Out of range value adjusted for column 'v5' at row 1 +Warning 1264 Out of range value for column 'v8' at row 1 +Warning 1264 Out of range value for column 'v9' at row 1 +Warning 1264 Out of range value for column 'v10' at row 1 +Warning 1264 Out of range value for column 'v1' at row 1 +Warning 1264 Out of range value for column 'v5' at row 1 DROP PROCEDURE p1; --------------------------------------------------------------- @@ -675,7 +675,7 @@ t1 CREATE TABLE "t1" ( "x" varbinary(19) default NULL ) Warnings: -Warning 1264 Out of range value adjusted for column 'x' at row 1 +Warning 1264 Out of range value for column 'x' at row 1 DROP PROCEDURE p1; --------------------------------------------------------------- @@ -777,9 +777,9 @@ SET var := arg; SELECT arg, var; END| CALL p1(); -ERROR 22003: Out of range value adjusted for column 'v' at row 1 +ERROR 22003: Out of range value for column 'v' at row 1 CALL p2(); -ERROR 22003: Out of range value adjusted for column 'v' at row 1 +ERROR 22003: Out of range value for column 'v' at row 1 CALL p3(); ERROR 22001: Data too long for column 'v' at row 1 CALL p4('aaa'); @@ -787,7 +787,7 @@ ERROR 22001: Data too long for column 'arg' at row 1 CALL p5('aa'); ERROR 22001: Data too long for column 'var' at row 1 CALL p6(10); -ERROR 22003: Out of range value adjusted for column 'var' at row 1 +ERROR 22003: Out of range value for column 'var' at row 1 SET @@sql_mode = 'ansi'; DROP PROCEDURE p1; DROP PROCEDURE p2; @@ -833,17 +833,17 @@ SELECT f1(-2500); f1(-2500) 0 Warnings: -Warning 1264 Out of range value adjusted for column 'arg' at row 1 +Warning 1264 Out of range value for column 'arg' at row 1 SET @@sql_mode = 'traditional'; SELECT f1(-2500); -ERROR 22003: Out of range value adjusted for column 'arg' at row 1 +ERROR 22003: Out of range value for column 'arg' at row 1 DROP FUNCTION f1; CREATE FUNCTION f1(arg TINYINT UNSIGNED) RETURNS TINYINT BEGIN RETURN arg; END| SELECT f1(-2500); -ERROR 22003: Out of range value adjusted for column 'arg' at row 1 +ERROR 22003: Out of range value for column 'arg' at row 1 SET @@sql_mode = 'ansi'; DROP FUNCTION f1; @@ -860,17 +860,17 @@ SELECT f1(8388699); f1(8388699) 8388607 Warnings: -Warning 1264 Out of range value adjusted for column 'arg' at row 1 +Warning 1264 Out of range value for column 'arg' at row 1 SET @@sql_mode = 'traditional'; SELECT f1(8388699); -ERROR 22003: Out of range value adjusted for column 'arg' at row 1 +ERROR 22003: Out of range value for column 'arg' at row 1 DROP FUNCTION f1; CREATE FUNCTION f1(arg MEDIUMINT) RETURNS MEDIUMINT BEGIN RETURN arg; END| SELECT f1(8388699); -ERROR 22003: Out of range value adjusted for column 'arg' at row 1 +ERROR 22003: Out of range value for column 'arg' at row 1 SET @@sql_mode = 'ansi'; DROP FUNCTION f1; @@ -896,7 +896,7 @@ sp_var @user_var 0 Warnings: -Warning 1264 Out of range value adjusted for column 'sp_var' at row 1 +Warning 1264 Out of range value for column 'sp_var' at row 1 DROP PROCEDURE p1; DROP TABLE t1; diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result index d8ea7aae55f..9601cae5c3b 100644 --- a/mysql-test/r/sp.result +++ b/mysql-test/r/sp.result @@ -3537,7 +3537,7 @@ tm1 CREATE TEMPORARY TABLE `tm1` ( `spv1` decimal(3,3) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 Warnings: -Warning 1264 Out of range value adjusted for column 'spv1' at row 1 +Warning 1264 Out of range value for column 'spv1' at row 1 Warning 1366 Incorrect decimal value: 'test' for column 'spv1' at row 1 call bug12589_2()| Table Create Table diff --git a/mysql-test/r/type_newdecimal-big.result b/mysql-test/r/type_newdecimal-big.result index e95f2f3f781..4e694702d14 100644 --- a/mysql-test/r/type_newdecimal-big.result +++ b/mysql-test/r/type_newdecimal-big.result @@ -1,11 +1,26 @@ drop procedure if exists sp1; -create procedure sp1 () begin -declare v1, v2, v3, v4 decimal(16,12); declare v5 int; -set v1 = 1; set v2 = 2; set v3 = 1000000000000; set v4 = 2000000000000; set v5 = 0; -while v5 < 100000 do -set v1 = v1 + 0.000000000001; set v2 = v2 - 0.000000000001; set v3 = v3 + 1; set v4 = v4 - 1; set v5 = v5 + 1; -end while; select v1, v2, v3 * 0.000000000001, v4 * 0.000000000001; end;// +CREATE PROCEDURE sp1() +BEGIN +DECLARE v1, v2, v3, v4 DECIMAL(28,12); +DECLARE v3_2, v4_2 DECIMAL(28, 12); +DECLARE counter INT; +SET v1 = 1; +SET v2 = 2; +SET v3 = 1000000000000; +SET v4 = 2000000000000; +SET counter = 0; +WHILE counter < 100000 DO +SET v1 = v1 + 0.000000000001; +SET v2 = v2 - 0.000000000001; +SET v3 = v3 + 1; +SET v4 = v4 - 1; +SET counter = counter + 1; +END WHILE; +SET v3_2 = v3 * 0.000000000001; +SET v4_2 = v4 * 0.000000000001; +SELECT v1, v2, v3, v3_2, v4, v4_2; +END// call sp1()// -v1 v2 v3 * 0.000000000001 v4 * 0.000000000001 -1.000000100000 1.999999900000 1.000000100000 1.999999900000 +v1 v2 v3 v3_2 v4 v4_2 +1.000000100000 1.999999900000 1000000100000.000000000000 1.000000100000 1999999900000.000000000000 1.999999900000 drop procedure sp1; diff --git a/mysql-test/t/type_newdecimal-big.test b/mysql-test/t/type_newdecimal-big.test index e200017f2ba..9a1104e4fe6 100644 --- a/mysql-test/t/type_newdecimal-big.test +++ b/mysql-test/t/type_newdecimal-big.test @@ -12,12 +12,31 @@ drop procedure if exists sp1; delimiter //; # -create procedure sp1 () begin - declare v1, v2, v3, v4 decimal(16,12); declare v5 int; - set v1 = 1; set v2 = 2; set v3 = 1000000000000; set v4 = 2000000000000; set v5 = 0; - while v5 < 100000 do - set v1 = v1 + 0.000000000001; set v2 = v2 - 0.000000000001; set v3 = v3 + 1; set v4 = v4 - 1; set v5 = v5 + 1; - end while; select v1, v2, v3 * 0.000000000001, v4 * 0.000000000001; end;// +CREATE PROCEDURE sp1() +BEGIN + DECLARE v1, v2, v3, v4 DECIMAL(28,12); + DECLARE v3_2, v4_2 DECIMAL(28, 12); + DECLARE counter INT; + + SET v1 = 1; + SET v2 = 2; + SET v3 = 1000000000000; + SET v4 = 2000000000000; + SET counter = 0; + + WHILE counter < 100000 DO + SET v1 = v1 + 0.000000000001; + SET v2 = v2 - 0.000000000001; + SET v3 = v3 + 1; + SET v4 = v4 - 1; + SET counter = counter + 1; + END WHILE; + + SET v3_2 = v3 * 0.000000000001; + SET v4_2 = v4 * 0.000000000001; + + SELECT v1, v2, v3, v3_2, v4, v4_2; +END// # call sp1()// #-- should return diff --git a/sql/sp_head.cc b/sql/sp_head.cc index ab3db48acc7..956de7d9c36 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -679,6 +679,9 @@ sp_head::create_result_field(uint field_max_length, const char *field_name, Field::NONE, /* unreg check */ m_return_field_def.interval, field_name ? field_name : (const char *) m_name.str); + + if (field) + field->init(table); DBUG_RETURN(field); } diff --git a/sql/sql_select.cc b/sql/sql_select.cc index a9ae336d06f..1c1a789c4a4 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -8997,8 +8997,8 @@ TABLE *create_virtual_tmp_table(THD *thd, List<create_field> &field_list) field++; } *field= NULL; /* mark the end of the list */ - s->blob_field[blob_count]= 0; /* mark the end of the list */ - s->blob_fields= blob_count; + share->blob_field[blob_count]= 0; /* mark the end of the list */ + share->blob_fields= blob_count; null_pack_length= (null_count + 7)/8; share->reclength= record_length + null_pack_length; |