Loading mysql-test/r/type_varchar.result +1 −0 Original line number Diff line number Diff line Loading @@ -488,3 +488,4 @@ t 0 Warnings: Warning 1292 Truncated incorrect INTEGER value: '1a' Warning 1292 Truncated incorrect INTEGER value: 't' DROP TABLE t1; mysql-test/t/type_varchar.test +1 −0 Original line number Diff line number Diff line Loading @@ -196,3 +196,4 @@ 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; DROP TABLE t1; sql/item_func.cc +14 −5 Original line number Diff line number Diff line Loading @@ -900,7 +900,8 @@ void Item_func_signed::print(String *str) longlong Item_func_signed::val_int_from_str(int *error) { char buff[MAX_FIELD_WIDTH], *end; char buff[MAX_FIELD_WIDTH], *end, *start; uint32 length; String tmp(buff,sizeof(buff), &my_charset_bin), *res; longlong value; Loading @@ -916,13 +917,21 @@ longlong Item_func_signed::val_int_from_str(int *error) return 0; } null_value= 0; end= (char*) res->ptr()+ res->length(); value= my_strtoll10(res->ptr(), &end, error); if (*error > 0 || end != res->ptr()+ res->length()) start= (char *)res->ptr(); length= res->length(); end= start + length; value= my_strtoll10(start, &end, error); if (*error > 0 || end != start+ length) { char err_buff[128]; String err_tmp(err_buff,(uint32) sizeof(err_buff), system_charset_info); err_tmp.copy(start, length, system_charset_info); push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_TRUNCATED_WRONG_VALUE, ER(ER_TRUNCATED_WRONG_VALUE), "INTEGER", res->c_ptr()); err_tmp.c_ptr()); } return value; } Loading Loading
mysql-test/r/type_varchar.result +1 −0 Original line number Diff line number Diff line Loading @@ -488,3 +488,4 @@ t 0 Warnings: Warning 1292 Truncated incorrect INTEGER value: '1a' Warning 1292 Truncated incorrect INTEGER value: 't' DROP TABLE t1;
mysql-test/t/type_varchar.test +1 −0 Original line number Diff line number Diff line Loading @@ -196,3 +196,4 @@ 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; DROP TABLE t1;
sql/item_func.cc +14 −5 Original line number Diff line number Diff line Loading @@ -900,7 +900,8 @@ void Item_func_signed::print(String *str) longlong Item_func_signed::val_int_from_str(int *error) { char buff[MAX_FIELD_WIDTH], *end; char buff[MAX_FIELD_WIDTH], *end, *start; uint32 length; String tmp(buff,sizeof(buff), &my_charset_bin), *res; longlong value; Loading @@ -916,13 +917,21 @@ longlong Item_func_signed::val_int_from_str(int *error) return 0; } null_value= 0; end= (char*) res->ptr()+ res->length(); value= my_strtoll10(res->ptr(), &end, error); if (*error > 0 || end != res->ptr()+ res->length()) start= (char *)res->ptr(); length= res->length(); end= start + length; value= my_strtoll10(start, &end, error); if (*error > 0 || end != start+ length) { char err_buff[128]; String err_tmp(err_buff,(uint32) sizeof(err_buff), system_charset_info); err_tmp.copy(start, length, system_charset_info); push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_TRUNCATED_WRONG_VALUE, ER(ER_TRUNCATED_WRONG_VALUE), "INTEGER", res->c_ptr()); err_tmp.c_ptr()); } return value; } Loading