summaryrefslogtreecommitdiff
path: root/sql/item.h
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2022-06-28 10:59:01 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2022-06-28 10:59:01 +0300
commit404d4820af3fa9ea1aede5b02e0dac651598ee55 (patch)
treef9c82e85a1aee5758f859438e4253cdf95bdda8c /sql/item.h
parentb81460f07e7f6df0fa9c25408c71d7f67ce4d3dd (diff)
parent952398629915bb7138a76b21c5a0b426ed1d83f4 (diff)
downloadmariadb-git-404d4820af3fa9ea1aede5b02e0dac651598ee55.tar.gz
Merge 10.8 into 10.9
Diffstat (limited to 'sql/item.h')
-rw-r--r--sql/item.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/sql/item.h b/sql/item.h
index d1d19157b83..75b2ed7f882 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -1838,6 +1838,16 @@ public:
*/
virtual bool is_evaluable_expression() const { return true; }
+ virtual bool check_assignability_to(const Field *to) const
+ {
+ /*
+ "this" must be neither DEFAULT/IGNORE,
+ nor Item_param bound to DEFAULT/IGNORE.
+ */
+ DBUG_ASSERT(is_evaluable_expression());
+ return to->check_assignability_from(type_handler());
+ }
+
/**
* Check whether the item is a parameter ('?') of stored routine.
* Default implementation returns false. Method is overridden in the class
@@ -4078,6 +4088,7 @@ class Item_param :public Item_basic_value,
const String *value_query_val_str(THD *thd, String* str) const;
Item *value_clone_item(THD *thd);
bool is_evaluable_expression() const override;
+ bool check_assignability_to(const Field *field) const override;
bool can_return_value() const;
public:
@@ -6758,6 +6769,10 @@ public:
{
str->append(STRING_WITH_LEN("default"));
}
+ bool check_assignability_to(const Field *to) const override
+ {
+ return false;
+ }
int save_in_field(Field *field_arg, bool) override
{
return field_arg->save_in_field_default_value(false);
@@ -6791,6 +6806,10 @@ public:
{
str->append(STRING_WITH_LEN("ignore"));
}
+ bool check_assignability_to(const Field *to) const override
+ {
+ return false;
+ }
int save_in_field(Field *field_arg, bool) override
{
return field_arg->save_in_field_ignore_value(false);