summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2022-11-25 13:37:07 +0100
committerOleksandr Byelkin <sanja@mariadb.com>2023-03-01 13:03:22 +0100
commit1e701f26c513c25de022e26ce23761a4828898a9 (patch)
tree7c4e9eb2fec7bf5bc3a068340a4193c0ca8ce58d
parentcf36ae5c03e90fa993cd636510fdb417ab4034af (diff)
downloadmariadb-git-bb-10.3-MDEV-26831-fallout.tar.gz
MDEV-26831 fallout: name resolution cache simple testbb-10.3-MDEV-26831-fallout
-rw-r--r--mysql-test/main/name_resolution_cache_debug.result25
-rw-r--r--mysql-test/main/name_resolution_cache_debug.test36
-rw-r--r--sql/sql_base.cc3
3 files changed, 64 insertions, 0 deletions
diff --git a/mysql-test/main/name_resolution_cache_debug.result b/mysql-test/main/name_resolution_cache_debug.result
new file mode 100644
index 00000000000..7030176c5fe
--- /dev/null
+++ b/mysql-test/main/name_resolution_cache_debug.result
@@ -0,0 +1,25 @@
+connect con1,localhost,root;
+create table t1 (a int, b int);
+create table t2 (c int, d int);
+create view v1 as select c+1 as e, d+1 as f from t2;
+SET DEBUG_SYNC= 'table_field_cached SIGNAL in_sync WAIT_FOR go';
+prepare stmt1 from "select a from t1";
+execute stmt1;
+connection default;
+SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
+SET DEBUG_SYNC= 'now SIGNAL go';
+connection con1;
+a
+SET DEBUG_SYNC= 'table_field_cached SIGNAL in_sync WAIT_FOR go';
+prepare stmt1 from "select e from v1";
+execute stmt1;
+connection default;
+SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
+SET DEBUG_SYNC= 'now SIGNAL go';
+connection con1;
+e
+connection default;
+disconnect con1;
+SET DEBUG_SYNC = 'RESET';
+drop view v1;
+drop table t1,t2;
diff --git a/mysql-test/main/name_resolution_cache_debug.test b/mysql-test/main/name_resolution_cache_debug.test
new file mode 100644
index 00000000000..362d883cbd1
--- /dev/null
+++ b/mysql-test/main/name_resolution_cache_debug.test
@@ -0,0 +1,36 @@
+
+source include/have_debug_sync.inc;
+
+connect con1,localhost,root;
+create table t1 (a int, b int);
+create table t2 (c int, d int);
+create view v1 as select c+1 as e, d+1 as f from t2;
+
+SET DEBUG_SYNC= 'table_field_cached SIGNAL in_sync WAIT_FOR go';
+prepare stmt1 from "select a from t1";
+--send execute stmt1
+
+connection default;
+SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
+SET DEBUG_SYNC= 'now SIGNAL go';
+
+connection con1;
+--reap
+
+SET DEBUG_SYNC= 'table_field_cached SIGNAL in_sync WAIT_FOR go';
+prepare stmt1 from "select e from v1";
+--send execute stmt1
+
+connection default;
+SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
+SET DEBUG_SYNC= 'now SIGNAL go';
+
+connection con1;
+--reap
+
+connection default;
+disconnect con1;
+
+SET DEBUG_SYNC = 'RESET';
+drop view v1;
+drop table t1,t2;
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 595d9a45b26..d59faefe971 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -5865,7 +5865,10 @@ find_field_in_table(THD *thd, TABLE *table, const char *name, size_t length,
if (cached_field_index < table->s->fields &&
!my_strcasecmp(system_charset_info,
table->field[cached_field_index]->field_name.str, name))
+ {
field= table->field[cached_field_index];
+ DEBUG_SYNC(thd, "table_field_cached");
+ }
else
{
LEX_CSTRING fname= {name, length};