diff options
author | Alexander Barkov <bar@mariadb.com> | 2022-08-02 16:23:08 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2022-08-25 11:34:09 +0400 |
commit | cc94b619758a04659fa9218ede838fadf461d3de (patch) | |
tree | d1899b63ff9c7f176868504debf2e9e0898f0d52 /sql/field.cc | |
parent | 2426547f857ac01516eb5b14072e68a47e9f892f (diff) | |
download | mariadb-git-bb-10.6-bar-assign.tar.gz |
Backporting MDEV-29159 from 10.7 to 10.6bb-10.6-bar-assign
MDEV-29159 Patch for MDEV-28918 introduces more inconsistency than it solves, breaks usability
1. Store assignment failures on incompatible data types now raise errors if:
- STRICT_ALL_TABLES or STRICT_TRANS_TABLES sql_mode is used, and
- IGNORE is not used
Otherwise, only a warning is raised and the statement continues.
2. Changing the error/warning test as follows:
-ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET'
+ERROR HY000: Cannot cast 'int' as 'inet6' in assignment of `db`.`t`.`col`
so in case of a big table it's easier to see which column has the problem.
The new error text is also applied to SP variables.
Diffstat (limited to 'sql/field.cc')
-rw-r--r-- | sql/field.cc | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/sql/field.cc b/sql/field.cc index 7d269ab004b..777312a15c4 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -964,7 +964,8 @@ Type_handler::aggregate_for_result_traditional(const Type_handler *a, } -bool Field::check_assignability_from(const Type_handler *from) const +bool Field::check_assignability_from(const Type_handler *from, + bool ignore) const { /* Using type_handler_for_item_field() here to get the data type handler @@ -982,9 +983,26 @@ bool Field::check_assignability_from(const Type_handler *from) const type_handler_for_item_field()); if (th.aggregate_for_result(from->type_handler_for_item_field())) { - my_error(ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION, MYF(0), - type_handler()->name().ptr(), from->name().ptr(), "SET"); - return true; + bool error= !ignore && get_thd()->is_strict_mode(); + /* + Display fully qualified column name for table columns. + Display non-qualified names for other things, + e.g. SP variables, SP return values, SP and CURSOR parameters. + */ + if (table->s->db.str && table->s->table_name.str) + my_printf_error(ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION, + "Cannot cast '%s' as '%s' in assignment of %`s.%`s.%`s", + MYF(error ? 0 : ME_WARNING), + from->name().ptr(), type_handler()->name().ptr(), + table->s->db.str, table->s->table_name.str, + field_name.str); + else + my_printf_error(ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION, + "Cannot cast '%s' as '%s' in assignment of %`s", + MYF(error ? 0 : ME_WARNING), + from->name().ptr(), type_handler()->name().ptr(), + field_name.str); + return error; } return false; } |