summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <timour@mysql.com>2006-02-22 10:04:10 +0200
committerunknown <timour@mysql.com>2006-02-22 10:04:10 +0200
commit89638d60def96c43670a4b6b4377c45054470062 (patch)
tree4a5a2a2b3a5bbaa7697e835edb2bd20086f5fddc
parent7b31775ed5ffae63b019394c7cbad16bef1b5e67 (diff)
downloadmariadb-git-89638d60def96c43670a4b6b4377c45054470062.tar.gz
Fix for BUG#17523: natural join and information schema.
The cause of the bug was an ASSERT that checked the consistency of TABLE_SHARE::db and TABLE_LIST::db and failed for I_S tables. The fix relaxes the requirement for consistency for I_S. mysql-test/r/join.result: Added test for BUG#17523 mysql-test/t/join.test: Added test for BUG#17523 sql/table.cc: Take into account that for I_S tables, TABLE_SHARE::db == 0, while TABLE_LIST::db contains the database name of a table. The only change is in the ASSERTs.
-rw-r--r--mysql-test/r/join.result5
-rw-r--r--mysql-test/t/join.test6
-rw-r--r--sql/table.cc19
3 files changed, 28 insertions, 2 deletions
diff --git a/mysql-test/r/join.result b/mysql-test/r/join.result
index 724d1b1e39f..54536d6c32a 100644
--- a/mysql-test/r/join.result
+++ b/mysql-test/r/join.result
@@ -677,6 +677,11 @@ select t1.b from v1a;
ERROR 42S22: Unknown column 't1.b' in 'field list'
select * from v1a join v1b on t1.b = t2.b;
ERROR 42S22: Unknown column 't1.b' in 'on clause'
+select * from information_schema.statistics join information_schema.columns
+using(table_name,column_name) where table_name='user';
+TABLE_NAME COLUMN_NAME TABLE_CATALOG TABLE_SCHEMA NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT TABLE_CATALOG TABLE_SCHEMA ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
+user Host NULL mysql 0 mysql PRIMARY 1 A NULL NULL NULL BTREE NULL mysql 1 NO char 20 60 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
+user User NULL mysql 0 mysql PRIMARY 2 A 5 NULL NULL BTREE NULL mysql 2 NO char 5 16 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
drop table t1;
drop table t2;
drop table t3;
diff --git a/mysql-test/t/join.test b/mysql-test/t/join.test
index 553aaf987bb..90abc61ca07 100644
--- a/mysql-test/t/join.test
+++ b/mysql-test/t/join.test
@@ -523,6 +523,12 @@ select t1.b from v1a;
-- error 1054
select * from v1a join v1b on t1.b = t2.b;
+#
+# Bug #17523 natural join and information_schema
+#
+select * from information_schema.statistics join information_schema.columns
+ using(table_name,column_name) where table_name='user';
+
drop table t1;
drop table t2;
drop table t3;
diff --git a/sql/table.cc b/sql/table.cc
index 9ae5348b5c6..1a2c2b8f073 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -2595,8 +2595,15 @@ const char *Natural_join_column::db_name()
if (view_field)
return table_ref->view_db.str;
+ /*
+ Test that TABLE_LIST::db is the same as st_table_share::db to
+ ensure consistency. An exception are I_S schema tables, which
+ are inconsistent in this respect.
+ */
DBUG_ASSERT(!strcmp(table_ref->db,
- table_ref->table->s->db));
+ table_ref->table->s->db) ||
+ (table_ref->schema_table &&
+ table_ref->table->s->db[0] == 0));
return table_ref->db;
}
@@ -2798,7 +2805,15 @@ const char *Field_iterator_table_ref::db_name()
else if (table_ref->is_natural_join)
return natural_join_it.column_ref()->db_name();
- DBUG_ASSERT(!strcmp(table_ref->db, table_ref->table->s->db));
+ /*
+ Test that TABLE_LIST::db is the same as st_table_share::db to
+ ensure consistency. An exception are I_S schema tables, which
+ are inconsistent in this respect.
+ */
+ DBUG_ASSERT(!strcmp(table_ref->db, table_ref->table->s->db) ||
+ (table_ref->schema_table &&
+ table_ref->table->s->db[0] == 0));
+
return table_ref->db;
}