diff options
author | Alexander Barkov <bar@mariadb.com> | 2022-12-01 15:04:59 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2022-12-02 08:14:00 +0400 |
commit | b91b4e0b970381603b42e52d701a4f5a176ccfd6 (patch) | |
tree | 62d5dbd40668a54a4e0498c36cc6d56b7a0f216f | |
parent | cc86360f4afb5b7b9fe64bbffef18538b2e3589b (diff) | |
download | mariadb-git-b91b4e0b970381603b42e52d701a4f5a176ccfd6.tar.gz |
MDEV-28696 View created as "select b''; " references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
-rw-r--r-- | mysql-test/main/varbinary.test | 3 | ||||
-rw-r--r-- | mysql-test/main/view.result | 8 | ||||
-rw-r--r-- | mysql-test/main/view.test | 9 | ||||
-rw-r--r-- | sql/item.cc | 19 | ||||
-rw-r--r-- | sql/item.h | 1 |
5 files changed, 37 insertions, 3 deletions
diff --git a/mysql-test/main/varbinary.test b/mysql-test/main/varbinary.test index b35819b0fb3..19e0e88932e 100644 --- a/mysql-test/main/varbinary.test +++ b/mysql-test/main/varbinary.test @@ -149,12 +149,9 @@ select N'', length(N''); select '', length(''); --enable_view_protocol -#enable after fix MDEV-28696 ---disable_view_protocol select b'', 0+b''; select x'', 0+x''; ---enable_view_protocol --error ER_BAD_FIELD_ERROR select 0x; diff --git a/mysql-test/main/view.result b/mysql-test/main/view.result index fd84cff9fa1..7354e1dbb91 100644 --- a/mysql-test/main/view.result +++ b/mysql-test/main/view.result @@ -6905,5 +6905,13 @@ deallocate prepare stmt; drop view v1; drop table t1; # +# MDEV-28696 View created as "select b''; " references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them +# +CREATE VIEW v1 as select b''; +SELECT * FROM v1; +b'' + +DROP VIEW v1; +# # End of 10.3 tests # diff --git a/mysql-test/main/view.test b/mysql-test/main/view.test index 038c7107d07..987e96fc79d 100644 --- a/mysql-test/main/view.test +++ b/mysql-test/main/view.test @@ -6645,5 +6645,14 @@ drop view v1; drop table t1; --echo # +--echo # MDEV-28696 View created as "select b''; " references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them +--echo # + +CREATE VIEW v1 as select b''; +SELECT * FROM v1; +DROP VIEW v1; + + +--echo # --echo # End of 10.3 tests --echo # diff --git a/sql/item.cc b/sql/item.cc index 012dcebdaee..757f09dec01 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -7409,6 +7409,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); +} + + bool Item_temporal_literal::eq(const Item *item, bool binary_cmp) const { return diff --git a/sql/item.h b/sql/item.h index a291678529e..07fbe848bb7 100644 --- a/sql/item.h +++ b/sql/item.h @@ -4490,6 +4490,7 @@ class Item_bin_string: public Item_hex_hybrid { public: Item_bin_string(THD *thd, const char *str, size_t str_length); + void print(String *str, enum_query_type query_type); }; |