summaryrefslogtreecommitdiff
path: root/sql/sql_admin.cc
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2015-12-16 19:33:41 +0100
committerOleksandr Byelkin <sanja@mariadb.com>2016-01-22 18:07:11 +0100
commit825f51d1aab51d363dc07ec9fe0829af33063883 (patch)
tree3e9da3522d9f532799207f23b3e4cc0e1a41a04c /sql/sql_admin.cc
parent45920d3d4a8ee28af8ca64b281db95ae3876bb70 (diff)
downloadmariadb-git-825f51d1aab51d363dc07ec9fe0829af33063883.tar.gz
MDEV-9118 ANALYZE TABLE for Engine independent status fetchs blob/text columns without use
Do not include BLOB fields by default.
Diffstat (limited to 'sql/sql_admin.cc')
-rw-r--r--sql/sql_admin.cc31
1 files changed, 25 insertions, 6 deletions
diff --git a/sql/sql_admin.cc b/sql/sql_admin.cc
index 0787aa9e92f..d8ca8633baa 100644
--- a/sql/sql_admin.cc
+++ b/sql/sql_admin.cc
@@ -692,10 +692,20 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
}
if (!lex->column_list)
- {
- uint fields= 0;
- for ( ; *field_ptr; field_ptr++, fields++) ;
- bitmap_set_prefix(tab->read_set, fields);
+ {
+ bitmap_clear_all(tab->read_set);
+ for (uint fields= 0; *field_ptr; field_ptr++, fields++)
+ {
+ enum enum_field_types type= (*field_ptr)->type();
+ if (type < MYSQL_TYPE_MEDIUM_BLOB ||
+ type > MYSQL_TYPE_BLOB)
+ bitmap_set_bit(tab->read_set, fields);
+ else
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
+ ER_NO_EIS_FOR_FIELD,
+ ER_THD(thd, ER_NO_EIS_FOR_FIELD),
+ (*field_ptr)->field_name);
+ }
}
else
{
@@ -713,8 +723,17 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
compl_result_code= result_code= HA_ADMIN_INVALID;
break;
}
- bitmap_set_bit(tab->read_set, pos-1);
- }
+ pos--;
+ enum enum_field_types type= tab->field[pos]->type();
+ if (type < MYSQL_TYPE_MEDIUM_BLOB ||
+ type > MYSQL_TYPE_BLOB)
+ bitmap_set_bit(tab->read_set, pos);
+ else
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
+ ER_NO_EIS_FOR_FIELD,
+ ER_THD(thd, ER_NO_EIS_FOR_FIELD),
+ column_name->str);
+ }
tab->file->column_bitmaps_signal();
}