summaryrefslogtreecommitdiff
path: root/sql/sql_show.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_show.cc')
-rw-r--r--sql/sql_show.cc29
1 files changed, 27 insertions, 2 deletions
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index 3dbc7724928..52b367dfe4b 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -8094,7 +8094,8 @@ static void
mark_all_fields_used_in_query(THD *thd,
ST_FIELD_INFO *schema_fields,
MY_BITMAP *bitmap,
- Item *all_items)
+ Item *all_items,
+ List<String> *join_using)
{
Item *item;
DBUG_ENTER("mark_all_fields_used_in_query");
@@ -8132,6 +8133,25 @@ mark_all_fields_used_in_query(THD *thd,
}
}
}
+ if (join_using)
+ {
+ List_iterator_fast<String> it(*join_using);
+ String *nm;
+ while ((nm= it++))
+ {
+ ST_FIELD_INFO *fields= schema_fields;
+ uint count;
+ for (count=0; fields->field_name; fields++, count++)
+ {
+ if (!my_strcasecmp(system_charset_info, fields->field_name,
+ nm->ptr()))
+ {
+ bitmap_set_bit(bitmap, count);
+ break;
+ }
+ }
+ }
+ }
DBUG_VOID_RETURN;
}
@@ -8183,7 +8203,12 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list)
else
all_items= thd->free_list;
- mark_all_fields_used_in_query(thd, fields_info, &bitmap, all_items);
+ if ((table_list->natural_join || table_list->part_of_natural_join) &&
+ table_list->join_using == NULL)
+ bitmap_set_all(&bitmap);
+ else
+ mark_all_fields_used_in_query(thd, fields_info, &bitmap, all_items,
+ table_list->join_using);
for (field_count=0; fields_info->field_name; fields_info++)
{