diff options
author | unknown <davi@skynet.(none)> | 2008-05-19 13:39:31 -0300 |
---|---|---|
committer | unknown <davi@skynet.(none)> | 2008-05-19 13:39:31 -0300 |
commit | 990f1f09ed0bf3d7c51c2aa3b5858976e674ad21 (patch) | |
tree | f317faf48c7a017f96d86a6d506eb988d7dbe755 | |
parent | 1c12291b2f39641d283590b528dc3ce63a687928 (diff) | |
download | mariadb-git-990f1f09ed0bf3d7c51c2aa3b5858976e674ad21.tar.gz |
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.
-rw-r--r-- | Makefile.am | 7 | ||||
-rw-r--r-- | sql/sql_base.cc | 7 |
2 files changed, 10 insertions, 4 deletions
diff --git a/Makefile.am b/Makefile.am index ad94c9ea325..5cf4fa9ba49 100644 --- a/Makefile.am +++ b/Makefile.am @@ -66,7 +66,7 @@ tags: 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-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-full-qa @@ -111,6 +111,11 @@ test-embedded: echo "no program found for 'embedded' tests - skipped testing" ; \ 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-full: test test-nr test-ps diff --git a/sql/sql_base.cc b/sql/sql_base.cc index d7c4d899b0e..29f97cf37ce 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -3770,16 +3770,17 @@ check_and_update_table_version(THD *thd, /* Always maintain the latest version and type */ tables->set_metadata_id(table_share); } -#if 0 + #ifndef DBUG_OFF /* 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); return TRUE; } #endif -#endif + return FALSE; } |