summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <davi@skynet.(none)>2008-05-19 13:39:31 -0300
committerunknown <davi@skynet.(none)>2008-05-19 13:39:31 -0300
commit990f1f09ed0bf3d7c51c2aa3b5858976e674ad21 (patch)
treef317faf48c7a017f96d86a6d506eb988d7dbe755
parent1c12291b2f39641d283590b528dc3ce63a687928 (diff)
downloadmariadb-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.am7
-rw-r--r--sql/sql_base.cc7
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;
}