diff --git a/mysql-test/r/strict.result b/mysql-test/r/strict.result index 79be7a1923a..d7ad803b828 100644 --- a/mysql-test/r/strict.result +++ b/mysql-test/r/strict.result @@ -770,7 +770,7 @@ ERROR 22003: Out of range value adjusted for column 'col1' at row 1 INSERT INTO t1 VALUES ('-100E+1'); ERROR 22003: Out of range value adjusted for column 'col1' at row 1 INSERT INTO t1 VALUES ('-100E'); -ERROR 22003: Out of range value adjusted for column 'col1' at row 1 +ERROR HY000: Incorrect decimal value: '-100E' for column 'col1' at row 1 UPDATE t1 SET col1 =col1 * 50000 WHERE col1 =11; ERROR 22003: Out of range value adjusted for column 'col1' at row 6 UPDATE t1 SET col1 =col1 / 0 WHERE col1 > 0; @@ -782,8 +782,7 @@ ERROR HY000: Incorrect decimal value: '' for column 'col1' at row 1 INSERT INTO t1 (col1) VALUES ('a59b'); ERROR HY000: Incorrect decimal value: 'a59b' for column 'col1' at row 1 INSERT INTO t1 (col1) VALUES ('1a'); -Warnings: -Note 1265 Data truncated for column 'col1' at row 1 +ERROR HY000: Incorrect decimal value: '1a' for column 'col1' at row 1 INSERT IGNORE INTO t1 (col1) VALUES ('2a'); Warnings: Note 1265 Data truncated for column 'col1' at row 1 @@ -818,7 +817,6 @@ NULL -10.56 11.00 10.00 -1.00 2.00 NULL 99.99 diff --git a/mysql-test/t/strict.test b/mysql-test/t/strict.test index 298653b554a..302acc9bef2 100644 --- a/mysql-test/t/strict.test +++ b/mysql-test/t/strict.test @@ -740,7 +740,7 @@ INSERT INTO t1 VALUES ('-101.55'); INSERT INTO t1 VALUES ('-1010.55'); --error 1264 INSERT INTO t1 VALUES ('-100E+1'); ---error 1264 +--error 1366 INSERT INTO t1 VALUES ('-100E'); --error 1264 UPDATE t1 SET col1 =col1 * 50000 WHERE col1 =11; @@ -754,7 +754,7 @@ INSERT INTO t1 (col1) VALUES (''); #--error 1265 --error 1366 INSERT INTO t1 (col1) VALUES ('a59b'); -#--error 1265 +--error 1366 INSERT INTO t1 (col1) VALUES ('1a'); INSERT IGNORE INTO t1 (col1) VALUES ('2a'); INSERT IGNORE INTO t1 values (1/0); diff --git a/sql/field.cc b/sql/field.cc index 34c5210b43c..54ed4044de5 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -2365,9 +2365,20 @@ int Field_new_decimal::store(const char *from, uint length, my_decimal decimal_value; DBUG_ENTER("Field_new_decimal::store(char*)"); - switch ((err= str2my_decimal(E_DEC_FATAL_ERROR & - ~(E_DEC_OVERFLOW | E_DEC_BAD_NUM), - from, length, charset, &decimal_value))) { + if ((err= str2my_decimal(E_DEC_FATAL_ERROR & + ~(E_DEC_OVERFLOW | E_DEC_BAD_NUM), + from, length, charset, &decimal_value)) && + table->in_use->abort_on_warning) + { + push_warning_printf(table->in_use, MYSQL_ERROR::WARN_LEVEL_ERROR, + ER_TRUNCATED_WRONG_VALUE_FOR_FIELD, + ER(ER_TRUNCATED_WRONG_VALUE_FOR_FIELD), + "decimal", from, field_name, + (ulong) table->in_use->row_count); + DBUG_RETURN(err); + } + + switch (err) { case E_DEC_TRUNCATED: set_warning(MYSQL_ERROR::WARN_LEVEL_NOTE, WARN_DATA_TRUNCATED, 1); break;