diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2022-12-13 14:39:18 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2022-12-13 14:39:18 +0200 |
commit | 1dc2f35598193fc52b79061c286b61f01c617374 (patch) | |
tree | 30e3972564ec174de0432e429f5f0897bf0b41a7 /sql/item.cc | |
parent | da5d3499353036d39c3a4bcd1f0466f7de3fc263 (diff) | |
parent | fdf43b5c78c4aeb26efdbef3172746e007ab6f1d (diff) | |
download | mariadb-git-1dc2f35598193fc52b79061c286b61f01c617374.tar.gz |
Merge 10.4 into 10.5
Diffstat (limited to 'sql/item.cc')
-rw-r--r-- | sql/item.cc | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/sql/item.cc b/sql/item.cc index 8aec7eb3a78..57647dd2074 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -1,6 +1,6 @@ /* Copyright (c) 2000, 2018, Oracle and/or its affiliates. - Copyright (c) 2010, 2021, MariaDB Corporation. + Copyright (c) 2010, 2022, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1567,12 +1567,14 @@ bool Item_field::check_vcol_func_processor(void *arg) } } } - if (field && (field->unireg_check == Field::NEXT_NUMBER)) - { - // Auto increment fields are unsupported - return mark_unsupported_function(field_name.str, arg, VCOL_FIELD_REF | VCOL_AUTO_INC); - } - return mark_unsupported_function(field_name.str, arg, VCOL_FIELD_REF); + + uint r= VCOL_FIELD_REF; + if (field && field->unireg_check == Field::NEXT_NUMBER) + r|= VCOL_AUTO_INC; + if (field && field->vcol_info && + field->vcol_info->flags & (VCOL_NOT_STRICTLY_DETERMINISTIC | VCOL_AUTO_INC)) + r|= VCOL_NON_DETERMINISTIC; + return mark_unsupported_function(field_name.str, arg, r); } @@ -7176,6 +7178,25 @@ Item_bin_string::Item_bin_string(THD *thd, const char *str, size_t str_length): } +void Item_bin_string::print(String *str, enum_query_type query_type) +{ + if (!str_value.length()) + { + /* + Historically a bit string such as b'01100001' + prints itself in the hex hybrid notation: 0x61 + In case of an empty bit string b'', the hex hybrid + notation would result in a bad syntax: 0x + So let's print empty bit strings using bit string notation: b'' + */ + static const LEX_CSTRING empty_bit_string= {STRING_WITH_LEN("b''")}; + str->append(empty_bit_string); + } + else + Item_hex_hybrid::print(str, query_type); +} + + void Item_date_literal::print(String *str, enum_query_type query_type) { str->append("DATE'"); |