diff --git a/mysql-test/suite/json/r/json_table.result b/mysql-test/suite/json/r/json_table.result index 97743b3288e..0b0b1aa1ca6 100644 --- a/mysql-test/suite/json/r/json_table.result +++ b/mysql-test/suite/json/r/json_table.result @@ -491,5 +491,22 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE jt1 ALL NULL NULL NULL NULL 40 Table function: json_table drop table t20,t21,t31,t32; # +# MDEV-25142: JSON_TABLE: CREATE VIEW involving EXISTS PATH ends up with invalid frm +# +drop view if exists v1; +CREATE VIEW v1 AS SELECT * FROM JSON_TABLE('[]', '$' COLUMNS (f INT EXISTS PATH '$')) a ; +show create view v1; +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `a`.`f` AS `f` from JSON_TABLE('[]', '$' COLUMNS (`f` int(11) EXISTS PATH '$')) `a` latin1 latin1_swedish_ci +drop view v1; +# +# MDEV-25145: JSON_TABLE: Assertion `fixed == 1' failed in Item_load_file::val_str on 2nd execution of PS +# +PREPARE stmt FROM "SELECT * FROM (SELECT * FROM JSON_TABLE(LOAD_FILE('x'), '$' COLUMNS (a FOR ORDINALITY)) AS t) AS sq"; +EXECUTE stmt; +a +EXECUTE stmt; +a +# # End of 10.6 tests # diff --git a/mysql-test/suite/json/t/json_table.test b/mysql-test/suite/json/t/json_table.test index 9d26ac267b4..8da1a5e3865 100644 --- a/mysql-test/suite/json/t/json_table.test +++ b/mysql-test/suite/json/t/json_table.test @@ -388,6 +388,13 @@ CREATE VIEW v1 AS SELECT * FROM JSON_TABLE('[]', '$' COLUMNS (f INT EXISTS PATH show create view v1; drop view v1; +--echo # +--echo # MDEV-25145: JSON_TABLE: Assertion `fixed == 1' failed in Item_load_file::val_str on 2nd execution of PS +--echo # +PREPARE stmt FROM "SELECT * FROM (SELECT * FROM JSON_TABLE(LOAD_FILE('x'), '$' COLUMNS (a FOR ORDINALITY)) AS t) AS sq"; +EXECUTE stmt; +EXECUTE stmt; + --echo # --echo # End of 10.6 tests --echo # diff --git a/sql/sql_select.cc b/sql/sql_select.cc index ff87678a656..5e17bfda0fc 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -1243,11 +1243,14 @@ JOIN::prepare(TABLE_LIST *tables_init, COND *conds_init, uint og_num, thd->lex->current_select->context_analysis_place; thd->lex->current_select->context_analysis_place= SELECT_LIST; - for (TABLE_LIST *tbl= tables_list; tbl; tbl= tbl->next_local) { - if (tbl->table_function && - tbl->table_function->setup(thd, tbl, select_lex_arg)) - DBUG_RETURN(-1); + List_iterator_fast it(select_lex->leaf_tables); + while ((tbl= it++)) + { + if (tbl->table_function && + tbl->table_function->setup(thd, tbl, select_lex_arg)) + DBUG_RETURN(-1); + } } if (setup_fields(thd, ref_ptrs, fields_list, MARK_COLUMNS_READ,