summaryrefslogtreecommitdiff
path: root/sql/table.cc
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.com>2022-08-02 16:23:08 +0400
committerAlexander Barkov <bar@mariadb.com>2022-08-25 11:34:09 +0400
commitcc94b619758a04659fa9218ede838fadf461d3de (patch)
treed1899b63ff9c7f176868504debf2e9e0898f0d52 /sql/table.cc
parent2426547f857ac01516eb5b14072e68a47e9f892f (diff)
downloadmariadb-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/table.cc')
-rw-r--r--sql/table.cc10
1 files changed, 6 insertions, 4 deletions
diff --git a/sql/table.cc b/sql/table.cc
index 85f69a1fbb8..3eda105f79a 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -9250,7 +9250,8 @@ bool TABLE::validate_default_values_of_unset_fields(THD *thd) const
INSERT INTO t1 (a,b) VALUES (1,2);
*/
bool TABLE::check_assignability_explicit_fields(List<Item> fields,
- List<Item> values)
+ List<Item> values,
+ bool ignore)
{
DBUG_ENTER("TABLE::check_assignability_explicit_fields");
DBUG_ASSERT(fields.elements == values.elements);
@@ -9270,7 +9271,7 @@ bool TABLE::check_assignability_explicit_fields(List<Item> fields,
*/
continue;
}
- if (value->check_assignability_to(item_field->field))
+ if (value->check_assignability_to(item_field->field, ignore))
DBUG_RETURN(true);
}
DBUG_RETURN(false);
@@ -9282,7 +9283,8 @@ bool TABLE::check_assignability_explicit_fields(List<Item> fields,
all visible fields of the table, e.g.
INSERT INTO t1 VALUES (1,2);
*/
-bool TABLE::check_assignability_all_visible_fields(List<Item> &values) const
+bool TABLE::check_assignability_all_visible_fields(List<Item> &values,
+ bool ignore) const
{
DBUG_ENTER("TABLE::check_assignability_all_visible_fields");
DBUG_ASSERT(s->visible_fields == values.elements);
@@ -9291,7 +9293,7 @@ bool TABLE::check_assignability_all_visible_fields(List<Item> &values) const
for (uint i= 0; i < s->fields; i++)
{
if (!field[i]->invisible &&
- (vi++)->check_assignability_to(field[i]))
+ (vi++)->check_assignability_to(field[i], ignore))
DBUG_RETURN(true);
}
DBUG_RETURN(false);