summaryrefslogtreecommitdiff
path: root/sql/sql_statistics.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_statistics.cc')
-rw-r--r--sql/sql_statistics.cc38
1 files changed, 12 insertions, 26 deletions
diff --git a/sql/sql_statistics.cc b/sql/sql_statistics.cc
index 55e8e52c052..ef9d4a1599c 100644
--- a/sql/sql_statistics.cc
+++ b/sql/sql_statistics.cc
@@ -1025,6 +1025,7 @@ public:
char buff[MAX_FIELD_WIDTH];
String val(buff, sizeof(buff), &my_charset_bin);
my_bitmap_map *old_map;
+ Field *fld= NULL;
old_map= dbug_tmp_use_all_columns(stat_table, stat_table->read_set);
for (uint i= COLUMN_STAT_MIN_VALUE; i <= COLUMN_STAT_HISTOGRAM; i++)
@@ -1037,26 +1038,12 @@ public:
stat_field->set_notnull();
switch (i) {
case COLUMN_STAT_MIN_VALUE:
- if (table_field->type() == MYSQL_TYPE_BIT)
- stat_field->store(table_field->collected_stats->min_value->val_int(),true);
- else
- {
- table_field->collected_stats->min_value->val_str(&val);
- size_t length= Well_formed_prefix(val.charset(), val.ptr(),
- MY_MIN(val.length(), stat_field->field_length)).length();
- stat_field->store(val.ptr(), length, &my_charset_bin);
- }
+ fld= table_field->collected_stats->min_value;
+ fld->store_to_statistical_minmax_field(stat_field, &val);
break;
case COLUMN_STAT_MAX_VALUE:
- if (table_field->type() == MYSQL_TYPE_BIT)
- stat_field->store(table_field->collected_stats->max_value->val_int(),true);
- else
- {
- table_field->collected_stats->max_value->val_str(&val);
- size_t length= Well_formed_prefix(val.charset(), val.ptr(),
- MY_MIN(val.length(), stat_field->field_length)).length();
- stat_field->store(val.ptr(), length, &my_charset_bin);
- }
+ fld= table_field->collected_stats->max_value;
+ fld->store_to_statistical_minmax_field(stat_field, &val);
break;
case COLUMN_STAT_NULLS_RATIO:
stat_field->store(table_field->collected_stats->get_nulls_ratio());
@@ -1118,6 +1105,7 @@ public:
{
char buff[MAX_FIELD_WIDTH];
String val(buff, sizeof(buff), &my_charset_bin);
+ Field *field= NULL;
for (uint i= COLUMN_STAT_MIN_VALUE; i <= COLUMN_STAT_HIST_TYPE; i++)
{
@@ -1134,16 +1122,14 @@ public:
switch (i) {
case COLUMN_STAT_MIN_VALUE:
- table_field->read_stats->min_value->set_notnull();
- stat_field->val_str(&val);
- table_field->read_stats->min_value->store(val.ptr(), val.length(),
- &my_charset_bin);
+ field= table_field->read_stats->min_value;
+ field->set_notnull();
+ field->store_from_statistical_minmax_field(stat_field, &val);
break;
case COLUMN_STAT_MAX_VALUE:
- table_field->read_stats->max_value->set_notnull();
- stat_field->val_str(&val);
- table_field->read_stats->max_value->store(val.ptr(), val.length(),
- &my_charset_bin);
+ field= table_field->read_stats->min_value;
+ field->set_notnull();
+ field->store_from_statistical_minmax_field(stat_field, &val);
break;
case COLUMN_STAT_NULLS_RATIO:
table_field->read_stats->set_nulls_ratio(stat_field->val_real());