Commit 9221a548 authored by unknown's avatar unknown
Browse files

BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)

 When implicitly converting string fields to numbers the 
 string-to-number conversion error was not sent to the client.
 Added code to send the conversion error as warning.
 
 We also need to prevent generation of warnings from the places
 where val_xxx() methods are called for the sole purpose of updating
 the Item::null_value flag.
 To achieve that a special function is added (and called) : 
 update_null_value(). This function will set the no_errors flag and
 will call val_xxx(). The warning generation in Field_string::val_xxx()
 will use the flag when generating the conversion warnings. 


mysql-test/r/compare.result:
  BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
   - non-convertible strings in arithmetic operations
mysql-test/r/func_gconcat.result:
  BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
   - non-convertible strings in arithmetic operations
mysql-test/r/func_group.result:
  BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
   - non-convertible strings in arithmetic operations
mysql-test/r/type_varchar.result:
  BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
   - test case
mysql-test/t/type_varchar.test:
  BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
   - test case
sql/field.cc:
  BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
   - send conversion warning to the client
sql/item.cc:
  BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
   - send conversion warning to the client
sql/item.h:
  BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
   - added a special function to explicitly update the null_value
sql/item_func.h:
  BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
   - added a special function to explicitly update the null_value
sql/item_subselect.h:
  BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
   - added a special function to explicitly update the null_value
sql/item_sum.cc:
  BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
   - added a special function to explicitly update the null_value
sql/item_sum.h:
  BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
   - added a special function to explicitly update the null_value
sql/sql_string.h:
  BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
   - send conversion warning to the client
parent 1019dd40
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -46,6 +46,10 @@ create table t1 (a tinyint(1),b binary(1));
insert into t1 values (0x01,0x01);
select * from t1 where a=b;
a	b
Warnings:
Warning	1292	Truncated incorrect DOUBLE value: ''
select * from t1 where a=b and b=0x01;
a	b
Warnings:
Warning	1292	Truncated incorrect DOUBLE value: ''
drop table if exists t1;
+38 −0
Original line number Diff line number Diff line
@@ -64,11 +64,49 @@ grp group_concat(a order by a,d+c-ascii(c)-a)
1	1
2	2,3
3	4,5,6,7,8,9
Warnings:
Warning	1292	Truncated incorrect DOUBLE value: 'a         '
Warning	1292	Truncated incorrect DOUBLE value: 'a         '
Warning	1292	Truncated incorrect DOUBLE value: 'a         '
Warning	1292	Truncated incorrect DOUBLE value: 'b         '
Warning	1292	Truncated incorrect DOUBLE value: 'b         '
Warning	1292	Truncated incorrect DOUBLE value: 'c         '
Warning	1292	Truncated incorrect DOUBLE value: 'a         '
Warning	1292	Truncated incorrect DOUBLE value: 'E         '
Warning	1292	Truncated incorrect DOUBLE value: 'b         '
Warning	1292	Truncated incorrect DOUBLE value: 'C         '
Warning	1292	Truncated incorrect DOUBLE value: 'b         '
Warning	1292	Truncated incorrect DOUBLE value: 'D         '
Warning	1292	Truncated incorrect DOUBLE value: 'd         '
Warning	1292	Truncated incorrect DOUBLE value: 'd         '
Warning	1292	Truncated incorrect DOUBLE value: 'd         '
Warning	1292	Truncated incorrect DOUBLE value: 'd         '
Warning	1292	Truncated incorrect DOUBLE value: 'c         '
Warning	1292	Truncated incorrect DOUBLE value: 'D         '
select grp,group_concat(a order by d+c-ascii(c),a) from t1 group by grp;
grp	group_concat(a order by d+c-ascii(c),a)
1	1
2	3,2
3	7,8,4,6,9,5
Warnings:
Warning	1292	Truncated incorrect DOUBLE value: 'a         '
Warning	1292	Truncated incorrect DOUBLE value: 'a         '
Warning	1292	Truncated incorrect DOUBLE value: 'a         '
Warning	1292	Truncated incorrect DOUBLE value: 'b         '
Warning	1292	Truncated incorrect DOUBLE value: 'b         '
Warning	1292	Truncated incorrect DOUBLE value: 'c         '
Warning	1292	Truncated incorrect DOUBLE value: 'a         '
Warning	1292	Truncated incorrect DOUBLE value: 'E         '
Warning	1292	Truncated incorrect DOUBLE value: 'b         '
Warning	1292	Truncated incorrect DOUBLE value: 'C         '
Warning	1292	Truncated incorrect DOUBLE value: 'b         '
Warning	1292	Truncated incorrect DOUBLE value: 'D         '
Warning	1292	Truncated incorrect DOUBLE value: 'd         '
Warning	1292	Truncated incorrect DOUBLE value: 'd         '
Warning	1292	Truncated incorrect DOUBLE value: 'd         '
Warning	1292	Truncated incorrect DOUBLE value: 'd         '
Warning	1292	Truncated incorrect DOUBLE value: 'c         '
Warning	1292	Truncated incorrect DOUBLE value: 'D         '
select grp,group_concat(c order by 1) from t1 group by grp;
grp	group_concat(c order by 1)
1	a
+7 −0
Original line number Diff line number Diff line
@@ -62,6 +62,13 @@ NULL NULL
1	7
2	20.25
3	45.483163247594
Warnings:
Warning	1292	Truncated incorrect DOUBLE value: 'a         '
Warning	1292	Truncated incorrect DOUBLE value: 'a         '
Warning	1292	Truncated incorrect DOUBLE value: 'b         '
Warning	1292	Truncated incorrect DOUBLE value: 'c         '
Warning	1292	Truncated incorrect DOUBLE value: 'C         '
Warning	1292	Truncated incorrect DOUBLE value: 'E         '
create table t2 (grp int, a bigint unsigned, c char(10));
insert into t2 select grp,max(a)+max(grp),max(c) from t1 group by grp;
replace into t2 select grp, a, c from t1 limit 2,1;
+35 −0
Original line number Diff line number Diff line
@@ -453,3 +453,38 @@ id name_id id en cz
2	3	2	en string 2	cz string 2
3	3	3	en string 3	cz string 3
drop table t1, t2, t3;
CREATE TABLE t1 (a CHAR(2));
INSERT INTO t1 VALUES (10), (50), (30), ('1a'), (60), ('t');
SELECT a,(a + 0) FROM t1 ORDER BY a;
a	(a + 0)
10	10
1a	1
30	30
50	50
60	60
t	0
Warnings:
Warning	1292	Truncated incorrect DOUBLE value: '1a'
Warning	1292	Truncated incorrect DOUBLE value: 't '
SELECT a,(a DIV 2) FROM t1 ORDER BY a;
a	(a DIV 2)
10	5
1a	0
30	15
50	25
60	30
t	0
Warnings:
Warning	1292	Truncated incorrect INTEGER value: '1a'
Warning	1292	Truncated incorrect INTEGER value: 't '
SELECT a,CAST(a AS SIGNED) FROM t1 ORDER BY a;
a	CAST(a AS SIGNED)
10	10
1a	1
30	30
50	50
60	60
t	0
Warnings:
Warning	1292	Truncated incorrect INTEGER value: '1a'
Warning	1292	Truncated incorrect INTEGER value: 't'
+9 −0
Original line number Diff line number Diff line
@@ -187,3 +187,12 @@ left join t3 on t1.id=t3.id order by t3.id;
--disable_metadata
--enable_ps_protocol
drop table t1, t2, t3;

#
# Bug #11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
#
CREATE TABLE t1 (a CHAR(2));
INSERT INTO t1 VALUES (10), (50), (30), ('1a'), (60), ('t');
SELECT a,(a + 0) FROM t1 ORDER BY a;
SELECT a,(a DIV 2) FROM t1 ORDER BY a;
SELECT a,CAST(a AS SIGNED) FROM t1 ORDER BY a;
Loading