Skip to content

Commit 428f03c

Browse files
author
Alexander Barkov
committed
MDEV-8839 COLUMN_GET() produces warnings with no data
1 parent e541894 commit 428f03c

File tree

3 files changed

+39
-12
lines changed

3 files changed

+39
-12
lines changed

mysql-test/suite/vcol/r/vcol_misc.result

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,5 +346,24 @@ t1 CREATE TABLE `t1` (
346346
) ENGINE=MyISAM DEFAULT CHARSET=latin1
347347
DROP TABLE t1;
348348
#
349+
# MDEV-8839 COLUMN_GET() produces warnings with no data
350+
#
351+
SET @aaa= COLUMN_CREATE('price', _binary 0xF0F1F2F3F4F5F6F7);
352+
SELECT COLUMN_GET(@aaa, 'price' AS DECIMAL) aaa;
353+
aaa
354+
0
355+
Warnings:
356+
Warning 1918 Encountered illegal value '\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7' when converting to DECIMAL
357+
SELECT COLUMN_GET(@aaa, 'price' AS INT) aaa;
358+
aaa
359+
0
360+
Warnings:
361+
Warning 1918 Encountered illegal value '\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7' when converting to INT
362+
SELECT COLUMN_GET(@aaa, 'price' AS DOUBLE) aaa;
363+
aaa
364+
0
365+
Warnings:
366+
Warning 1918 Encountered illegal value '\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7' when converting to DOUBLE
367+
#
349368
# End of 10.1 tests
350369
#

mysql-test/suite/vcol/t/vcol_misc.test

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,15 @@ CREATE TABLE t1 (a DATETIME, b TIMESTAMP AS (TIMESTAMP(a)),c TIMESTAMP);
302302
SHOW CREATE TABLE t1;
303303
DROP TABLE t1;
304304

305+
--echo #
306+
--echo # MDEV-8839 COLUMN_GET() produces warnings with no data
307+
--echo #
308+
SET @aaa= COLUMN_CREATE('price', _binary 0xF0F1F2F3F4F5F6F7);
309+
SELECT COLUMN_GET(@aaa, 'price' AS DECIMAL) aaa;
310+
SELECT COLUMN_GET(@aaa, 'price' AS INT) aaa;
311+
SELECT COLUMN_GET(@aaa, 'price' AS DOUBLE) aaa;
312+
313+
305314
--echo #
306315
--echo # End of 10.1 tests
307316
--echo #

sql/item_strfunc.cc

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4963,13 +4963,12 @@ longlong Item_dyncol_get::val_int()
49634963
if (end != org_end || error > 0)
49644964
{
49654965
THD *thd= current_thd;
4966-
char buff[80];
4967-
strmake(buff, val.x.string.value.str, MY_MIN(sizeof(buff)-1,
4968-
val.x.string.value.length));
49694966
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
49704967
ER_BAD_DATA,
49714968
ER_THD(thd, ER_BAD_DATA),
4972-
buff,
4969+
ErrConvString(val.x.string.value.str,
4970+
val.x.string.value.length,
4971+
val.x.string.charset).ptr(),
49734972
unsigned_flag ? "UNSIGNED INT" : "INT");
49744973
}
49754974
unsigned_flag= error >= 0;
@@ -5028,13 +5027,13 @@ double Item_dyncol_get::val_real()
50285027
error)
50295028
{
50305029
THD *thd= current_thd;
5031-
char buff[80];
5032-
strmake(buff, val.x.string.value.str, MY_MIN(sizeof(buff)-1,
5033-
val.x.string.value.length));
50345030
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
50355031
ER_BAD_DATA,
50365032
ER_THD(thd, ER_BAD_DATA),
5037-
buff, "DOUBLE");
5033+
ErrConvString(val.x.string.value.str,
5034+
val.x.string.value.length,
5035+
val.x.string.charset).ptr(),
5036+
"DOUBLE");
50385037
}
50395038
return res;
50405039
}
@@ -5085,17 +5084,17 @@ my_decimal *Item_dyncol_get::val_decimal(my_decimal *decimal_value)
50855084
int rc;
50865085
rc= str2my_decimal(0, val.x.string.value.str, val.x.string.value.length,
50875086
val.x.string.charset, decimal_value, &end);
5088-
char buff[80];
5089-
strmake(buff, val.x.string.value.str, MY_MIN(sizeof(buff)-1,
5090-
val.x.string.value.length));
50915087
if (rc != E_DEC_OK ||
50925088
end != val.x.string.value.str + val.x.string.value.length)
50935089
{
50945090
THD *thd= current_thd;
50955091
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
50965092
ER_BAD_DATA,
50975093
ER_THD(thd, ER_BAD_DATA),
5098-
buff, "DECIMAL");
5094+
ErrConvString(val.x.string.value.str,
5095+
val.x.string.value.length,
5096+
val.x.string.charset).ptr(),
5097+
"DECIMAL");
50995098
}
51005099
break;
51015100
}

0 commit comments

Comments
 (0)