diff options
-rw-r--r-- | mysql-test/r/heap.result | 1 | ||||
-rw-r--r-- | mysql-test/r/innodb.result | 1 | ||||
-rw-r--r-- | mysql-test/r/myisam.result | 1 | ||||
-rw-r--r-- | mysql-test/r/strict.result | 2 | ||||
-rw-r--r-- | mysql-test/r/type_binary.result | 1 | ||||
-rw-r--r-- | mysql-test/r/warnings.result | 2 | ||||
-rw-r--r-- | sql/field.cc | 18 | ||||
-rw-r--r-- | sql/field.h | 3 |
8 files changed, 14 insertions, 15 deletions
diff --git a/mysql-test/r/heap.result b/mysql-test/r/heap.result index a2c208ee3e1..ddf675e2f73 100644 --- a/mysql-test/r/heap.result +++ b/mysql-test/r/heap.result @@ -256,7 +256,6 @@ set @a=repeat(' ',20); insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a)); Warnings: Note 1265 Data truncated for column 'v' at row 1 -Note 1265 Data truncated for column 'c' at row 1 select concat('*',v,'*',c,'*',t,'*') from t1; concat('*',v,'*',c,'*',t,'*') *+ *+*+ * diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index 2c38cb12bac..e6eb895c6dc 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -1836,7 +1836,6 @@ set @a=repeat(' ',20); insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a)); Warnings: Note 1265 Data truncated for column 'v' at row 1 -Note 1265 Data truncated for column 'c' at row 1 select concat('*',v,'*',c,'*',t,'*') from t1; concat('*',v,'*',c,'*',t,'*') *+ *+*+ * diff --git a/mysql-test/r/myisam.result b/mysql-test/r/myisam.result index 112a7b7649b..bf57b6e1006 100644 --- a/mysql-test/r/myisam.result +++ b/mysql-test/r/myisam.result @@ -1086,7 +1086,6 @@ set @a=repeat(' ',20); insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a)); Warnings: Note 1265 Data truncated for column 'v' at row 1 -Note 1265 Data truncated for column 'c' at row 1 select concat('*',v,'*',c,'*',t,'*') from t1; concat('*',v,'*',c,'*',t,'*') *+ *+*+ * diff --git a/mysql-test/r/strict.result b/mysql-test/r/strict.result index ef58a760297..a257d0a8648 100644 --- a/mysql-test/r/strict.result +++ b/mysql-test/r/strict.result @@ -933,8 +933,6 @@ NULL NULL DROP TABLE t1; CREATE TABLE t1 (col1 CHAR(5), col2 VARCHAR(6)); INSERT INTO t1 VALUES ('hello', 'hello'),('he', 'he'),('hello ', 'hello '); -Warnings: -Note 1265 Data truncated for column 'col1' at row 3 INSERT INTO t1 (col1) VALUES ('hellobob'); ERROR 22001: Data too long for column 'col1' at row 1 INSERT INTO t1 (col2) VALUES ('hellobob'); diff --git a/mysql-test/r/type_binary.result b/mysql-test/r/type_binary.result index 00f4183aec3..432c58272a2 100644 --- a/mysql-test/r/type_binary.result +++ b/mysql-test/r/type_binary.result @@ -125,7 +125,6 @@ create table t1 (c char(2), vc varchar(2)); insert into t1 values(0x4120, 0x4120); insert into t1 values(0x412020, 0x412020); Warnings: -Note 1265 Data truncated for column 'c' at row 1 Note 1265 Data truncated for column 'vc' at row 1 drop table t1; set @old_sql_mode= @@sql_mode, sql_mode= 'traditional'; diff --git a/mysql-test/r/warnings.result b/mysql-test/r/warnings.result index 653309efa42..aad8a33ea61 100644 --- a/mysql-test/r/warnings.result +++ b/mysql-test/r/warnings.result @@ -283,7 +283,6 @@ set @q = repeat('q', 256); set sql_mode = ''; insert into t1 values(@c, @c, @c); Warnings: -Note 1265 Data truncated for column 'c_char' at row 1 Note 1265 Data truncated for column 'c_varchar' at row 1 Note 1265 Data truncated for column 'c_tinytext' at row 1 insert into t2 values(@c); @@ -300,7 +299,6 @@ Warning 1265 Data truncated for column 'c_tinyblob' at row 1 set sql_mode = 'traditional'; insert into t1 values(@c, @c, @c); Warnings: -Note 1265 Data truncated for column 'c_char' at row 1 Note 1265 Data truncated for column 'c_varchar' at row 1 Note 1265 Data truncated for column 'c_tinytext' at row 1 insert into t2 values(@c); diff --git a/sql/field.cc b/sql/field.cc index 3ecde13e78c..9bf6df55b30 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -6328,6 +6328,7 @@ check_string_copy_error(Field_str *field, Field_longstr::report_if_important_data() ptr - Truncated rest of string end - End of truncated string + count_spaces - Treat traling spaces as important data RETURN VALUES 0 - None was truncated (or we don't count cut fields) @@ -6337,10 +6338,12 @@ check_string_copy_error(Field_str *field, Check if we lost any important data (anything in a binary string, or any non-space in others). If only trailing spaces was lost, send a truncation note, otherwise send a truncation error. + Silently ignore traling spaces if the count_space parameter is FALSE. */ int -Field_longstr::report_if_important_data(const char *ptr, const char *end) +Field_longstr::report_if_important_data(const char *ptr, const char *end, + bool count_spaces) { if ((ptr < end) && table->in_use->count_cuted_fields) { @@ -6350,10 +6353,13 @@ Field_longstr::report_if_important_data(const char *ptr, const char *end) set_warning(MYSQL_ERROR::WARN_LEVEL_ERROR, ER_DATA_TOO_LONG, 1); else set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1); + return 2; } - else /* If we lost only spaces then produce a NOTE, not a WARNING */ + else if (count_spaces) + { /* If we lost only spaces then produce a NOTE, not a WARNING */ set_warning(MYSQL_ERROR::WARN_LEVEL_NOTE, WARN_DATA_TRUNCATED, 1); - return 2; + return 2; + } } return 0; } @@ -6390,7 +6396,7 @@ int Field_string::store(const char *from,uint length,CHARSET_INFO *cs) cannot_convert_error_pos, from + length, cs)) return 2; - return report_if_important_data(from_end_pos, from + length); + return report_if_important_data(from_end_pos, from + length, FALSE); } @@ -6965,7 +6971,7 @@ int Field_varstring::store(const char *from,uint length,CHARSET_INFO *cs) cannot_convert_error_pos, from + length, cs)) return 2; - return report_if_important_data(from_end_pos, from + length); + return report_if_important_data(from_end_pos, from + length, TRUE); } @@ -7669,7 +7675,7 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs) cannot_convert_error_pos, from + length, cs)) return 2; - return report_if_important_data(from_end_pos, from + length); + return report_if_important_data(from_end_pos, from + length, TRUE); oom_error: /* Fatal OOM error */ diff --git a/sql/field.h b/sql/field.h index 5457b7284e9..479a71dfee5 100644 --- a/sql/field.h +++ b/sql/field.h @@ -594,7 +594,8 @@ public: class Field_longstr :public Field_str { protected: - int report_if_important_data(const char *ptr, const char *end); + int report_if_important_data(const char *ptr, const char *end, + bool count_spaces); public: Field_longstr(uchar *ptr_arg, uint32 len_arg, uchar *null_ptr_arg, uchar null_bit_arg, utype unireg_check_arg, |