summaryrefslogtreecommitdiff
path: root/sql/sql_lex.cc
diff options
context:
space:
mode:
authorunknown <sergefp@mysql.com>2005-11-02 07:05:19 +0300
committerunknown <sergefp@mysql.com>2005-11-02 07:05:19 +0300
commit17fcbcf77290fff34a00ce1387760f5e5c71c134 (patch)
tree1e42ee72be760a83403054006bb7dbdce435401b /sql/sql_lex.cc
parent6de8b295a7dd53b47f7e0d4ebc109dabb07c6397 (diff)
downloadmariadb-git-17fcbcf77290fff34a00ce1387760f5e5c71c134.tar.gz
BUG#14026: When doing the end-of-prepare fix up for TABLE_LISTs used in the PS, do the fixup
for underlying tables of a merge VIEWs, too. mysql-test/r/view.result: Testcase for BUG#14026 mysql-test/t/view.test: Testcase for BUG#14026
Diffstat (limited to 'sql/sql_lex.cc')
-rw-r--r--sql/sql_lex.cc40
1 files changed, 30 insertions, 10 deletions
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index 11f056d6510..a302db15736 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -2038,6 +2038,35 @@ void st_lex::cleanup_after_one_table_open()
/*
+ Do end-of-prepare fixup for list of tables and their merge-VIEWed tables
+
+ SYNOPSIS
+ fix_prepare_info_in_table_list()
+ thd Thread handle
+ tbl List of tables to process
+
+ DESCRIPTION
+ Perform end-end-of prepare fixup for list of tables, if any of the tables
+ is a merge-algorithm VIEW, recursively fix up its underlying tables as
+ well.
+
+*/
+
+static void fix_prepare_info_in_table_list(THD *thd, TABLE_LIST *tbl)
+{
+ for (; tbl; tbl= tbl->next_local)
+ {
+ if (tbl->on_expr)
+ {
+ tbl->prep_on_expr= tbl->on_expr;
+ tbl->on_expr= tbl->on_expr->copy_andor_structure(thd);
+ }
+ fix_prepare_info_in_table_list(thd, tbl->merge_underlying_list);
+ }
+}
+
+
+/*
fix some structures at the end of preparation
SYNOPSIS
@@ -2056,16 +2085,7 @@ void st_select_lex::fix_prepare_information(THD *thd, Item **conds)
prep_where= *conds;
*conds= where= prep_where->copy_andor_structure(thd);
}
- for (TABLE_LIST *tbl= (TABLE_LIST *)table_list.first;
- tbl;
- tbl= tbl->next_local)
- {
- if (tbl->on_expr)
- {
- tbl->prep_on_expr= tbl->on_expr;
- tbl->on_expr= tbl->on_expr->copy_andor_structure(thd);
- }
- }
+ fix_prepare_info_in_table_list(thd, (TABLE_LIST *)table_list.first);
}
}