mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 10:31:54 +01:00
MDEV-6689: valgrind errors in view.test in 10.1
SHOW COLUMNS and SHOW KEYS commands fill IS_table_read_plan in a special way - they don't set or use lookup_field_vals member. Added a "trivial_show_command" flag that signals that lookup_field_vals has no valid data, made EXPLAIN code honor it.
This commit is contained in:
parent
e44751b65f
commit
d161546b67
3 changed files with 19 additions and 6 deletions
|
@ -23490,16 +23490,19 @@ void JOIN_TAB::save_explain_data(Explain_table_access *eta, table_map prefix_tab
|
||||||
const char *tmp_buff;
|
const char *tmp_buff;
|
||||||
int f_idx;
|
int f_idx;
|
||||||
StringBuffer<64> key_name_buf;
|
StringBuffer<64> key_name_buf;
|
||||||
if (is_table_read_plan->has_db_lookup_value())
|
if (is_table_read_plan->trivial_show_command ||
|
||||||
|
is_table_read_plan->has_db_lookup_value())
|
||||||
{
|
{
|
||||||
/* The "key" has the name of the column referring to the database */
|
/* The "key" has the name of the column referring to the database */
|
||||||
f_idx= table_list->schema_table->idx_field1;
|
f_idx= table_list->schema_table->idx_field1;
|
||||||
tmp_buff= table_list->schema_table->fields_info[f_idx].field_name;
|
tmp_buff= table_list->schema_table->fields_info[f_idx].field_name;
|
||||||
key_name_buf.append(tmp_buff, strlen(tmp_buff), cs);
|
key_name_buf.append(tmp_buff, strlen(tmp_buff), cs);
|
||||||
}
|
}
|
||||||
if (is_table_read_plan->has_table_lookup_value())
|
if (is_table_read_plan->trivial_show_command ||
|
||||||
|
is_table_read_plan->has_table_lookup_value())
|
||||||
{
|
{
|
||||||
if (is_table_read_plan->has_db_lookup_value())
|
if (is_table_read_plan->trivial_show_command ||
|
||||||
|
is_table_read_plan->has_db_lookup_value())
|
||||||
key_name_buf.append(',');
|
key_name_buf.append(',');
|
||||||
|
|
||||||
f_idx= table_list->schema_table->idx_field2;
|
f_idx= table_list->schema_table->idx_field2;
|
||||||
|
@ -23630,8 +23633,9 @@ void JOIN_TAB::save_explain_data(Explain_table_access *eta, table_map prefix_tab
|
||||||
else
|
else
|
||||||
eta->push_extra(ET_OPEN_FULL_TABLE);
|
eta->push_extra(ET_OPEN_FULL_TABLE);
|
||||||
/* psergey-note: the following has a bug.*/
|
/* psergey-note: the following has a bug.*/
|
||||||
if (table_list->is_table_read_plan->has_db_lookup_value() &&
|
if (table_list->is_table_read_plan->trivial_show_command ||
|
||||||
table_list->is_table_read_plan->has_table_lookup_value())
|
(table_list->is_table_read_plan->has_db_lookup_value() &&
|
||||||
|
table_list->is_table_read_plan->has_table_lookup_value()))
|
||||||
eta->push_extra(ET_SCANNED_0_DATABASES);
|
eta->push_extra(ET_SCANNED_0_DATABASES);
|
||||||
else if (table_list->is_table_read_plan->has_db_lookup_value() ||
|
else if (table_list->is_table_read_plan->has_db_lookup_value() ||
|
||||||
table_list->is_table_read_plan->has_table_lookup_value())
|
table_list->is_table_read_plan->has_table_lookup_value())
|
||||||
|
|
|
@ -8035,6 +8035,7 @@ static bool optimize_for_get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond
|
||||||
if (lsel && lsel->table_list.first)
|
if (lsel && lsel->table_list.first)
|
||||||
{
|
{
|
||||||
/* These do not need to have a query plan */
|
/* These do not need to have a query plan */
|
||||||
|
plan->trivial_show_command= true;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -192,9 +192,17 @@ typedef struct st_lookup_field_values
|
||||||
class IS_table_read_plan : public Sql_alloc
|
class IS_table_read_plan : public Sql_alloc
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
IS_table_read_plan() : no_rows(false) {}
|
IS_table_read_plan() : no_rows(false), trivial_show_command(FALSE) {}
|
||||||
|
|
||||||
bool no_rows;
|
bool no_rows;
|
||||||
|
/*
|
||||||
|
For EXPLAIN only: For SHOW KEYS and SHOW COLUMNS, we know which
|
||||||
|
db_name.table_name will be read, however for some reason we don't
|
||||||
|
set the fields in this->lookup_field_vals.
|
||||||
|
In order to not have JOIN::save_explain_data() walking over uninitialized
|
||||||
|
data, we set trivial_show_command=true.
|
||||||
|
*/
|
||||||
|
bool trivial_show_command;
|
||||||
|
|
||||||
LOOKUP_FIELD_VALUES lookup_field_vals;
|
LOOKUP_FIELD_VALUES lookup_field_vals;
|
||||||
Item *partial_cond;
|
Item *partial_cond;
|
||||||
|
|
Loading…
Add table
Reference in a new issue