revision-id: 6c5e60f1b198ff846ee5595927ff5a74c6b08e91 (mariadb-10.3.6-67-g6c5e60f) parent(s): 99fa7c6c2f9c8d705481bec35f7c4af48848cf70 author: Igor Babaev committer: Igor Babaev timestamp: 2018-04-26 16:38:56 -0700 message: MDEV-16038 Assertion `map->n_bits > 0' failed (my_bitmap.c:386: bitmap_is_clear_all) Rows with no elements are not allowed in a table value constructor unless it is used in an INSERT statement. --- mysql-test/main/table_value_constr.result | 7 ++++++- mysql-test/main/table_value_constr.test | 9 ++++++++- sql/share/errmsg-utf8.txt | 2 ++ sql/sql_tvc.cc | 6 ++++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/mysql-test/main/table_value_constr.result b/mysql-test/main/table_value_constr.result index 5a904cb..9e0a096 100644 --- a/mysql-test/main/table_value_constr.result +++ b/mysql-test/main/table_value_constr.result @@ -2072,7 +2072,7 @@ select * from (values (1), (t1.b), (2)) as new_tvc; ERROR HY000: Field reference 't1.b' can't be used in table value constructor drop table t1; # -# MDEV-MDEV-15940: cursor over TVC +# MDEV-15940: cursor over TVC # BEGIN NOT ATOMIC DECLARE v INT; @@ -2092,3 +2092,8 @@ END; | v 1 +# +# MDEV-16038: empty row in TVC +# +with t as (values (),()) select 1 from t; +ERROR HY000: Row with no elements is not allowed in table value constructor in this context diff --git a/mysql-test/main/table_value_constr.test b/mysql-test/main/table_value_constr.test index 84f196b..eb5ea59 100644 --- a/mysql-test/main/table_value_constr.test +++ b/mysql-test/main/table_value_constr.test @@ -1046,7 +1046,7 @@ select * from (values (1), (t1.b), (2)) as new_tvc; drop table t1; --echo # ---echo # MDEV-MDEV-15940: cursor over TVC +--echo # MDEV-15940: cursor over TVC --echo # DELIMITER |; @@ -1068,3 +1068,10 @@ END; | DELIMITER ;| + +--echo # +--echo # MDEV-16038: empty row in TVC +--echo # + +--error ER_EMPTY_ROW_IN_TVC +with t as (values (),()) select 1 from t; diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index 20e4221..c55ac4f 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -7913,3 +7913,5 @@ ER_INDEX_FILE_FULL eng "The index file for table '%-.192s' is full" ER_UPDATED_COLUMN_ONLY_ONCE eng "The column %`s.%`s cannot be changed more than once in a single UPDATE statement" +ER_EMPTY_ROW_IN_TVC + eng "Row with no elements is not allowed in table value constructor in this context" diff --git a/sql/sql_tvc.cc b/sql/sql_tvc.cc index 7004c32..295aade 100644 --- a/sql/sql_tvc.cc +++ b/sql/sql_tvc.cc @@ -221,6 +221,12 @@ bool table_value_constr::prepare(THD *thd, SELECT_LEX *sl, uint cnt= first_elem->elements; Type_holder *holders; + if (cnt == 0) + { + my_error(ER_EMPTY_ROW_IN_TVC, MYF(0)); + DBUG_RETURN(true); + } + if (fix_fields_for_tvc(thd, li)) DBUG_RETURN(true);