Commit 990f1f09 authored by unknown's avatar unknown

Bug#27430 Crash in subquery code when in PS and table DDL changed after PREPARE

Add test target to the makefile that will cause all
statements to be re-prepared before execution.


Makefile.am:
  Add test-reprepare target. In combination with the
  --ps-protocol this will cause that every statement
  in the test suite be re-prepared before execution.
sql/sql_base.cc:
  Re-prepare each statement before execution.
parent 1c12291b
...@@ -66,7 +66,7 @@ tags: ...@@ -66,7 +66,7 @@ tags:
test-pl test-force-pl test-full-pl test-force-full-pl test-force-pl-mem \ test-pl test-force-pl test-full-pl test-force-full-pl test-force-pl-mem \
test-unit test-ps test-nr test-pr test-ns test-binlog-statement \ test-unit test-ps test-nr test-pr test-ns test-binlog-statement \
test-ext-funcs test-ext-rpl test-ext-partitions test-ext-jp \ test-ext-funcs test-ext-rpl test-ext-partitions test-ext-jp \
test-ext-stress test-ext test-embedded \ test-ext-stress test-ext test-embedded test-reprepare \
test-fast test-fast-cursor test-fast-view test-fast-prepare \ test-fast test-fast-cursor test-fast-view test-fast-prepare \
test-full-qa test-full-qa
...@@ -111,6 +111,11 @@ test-embedded: ...@@ -111,6 +111,11 @@ test-embedded:
echo "no program found for 'embedded' tests - skipped testing" ; \ echo "no program found for 'embedded' tests - skipped testing" ; \
fi fi
test-reprepare:
cd mysql-test ; \
@PERL@ ./mysql-test-run.pl $(force) $(mem) --ps-protocol \
--mysqld=--debug=+d,reprepare_each_statement
test: test-unit test-ns test-pr test: test-unit test-ns test-pr
test-full: test test-nr test-ps test-full: test test-nr test-ps
......
...@@ -3770,16 +3770,17 @@ check_and_update_table_version(THD *thd, ...@@ -3770,16 +3770,17 @@ check_and_update_table_version(THD *thd,
/* Always maintain the latest version and type */ /* Always maintain the latest version and type */
tables->set_metadata_id(table_share); tables->set_metadata_id(table_share);
} }
#if 0
#ifndef DBUG_OFF #ifndef DBUG_OFF
/* Spuriously reprepare each statement. */ /* Spuriously reprepare each statement. */
if (thd->m_metadata_observer && thd->stmt_arena->is_reprepared == FALSE) if (_db_strict_keyword_("reprepare_each_statement") &&
thd->m_metadata_observer && thd->stmt_arena->is_reprepared == FALSE)
{ {
thd->m_metadata_observer->report_error(thd); thd->m_metadata_observer->report_error(thd);
return TRUE; return TRUE;
} }
#endif #endif
#endif
return FALSE; return FALSE;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment