mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Better names: s/histogram_/histogram/, s/Histogram_json/Histogram_json_hb/
This commit is contained in:
@ -1073,18 +1073,18 @@ public:
|
|||||||
case COLUMN_STAT_HIST_SIZE:
|
case COLUMN_STAT_HIST_SIZE:
|
||||||
// Note: this is dumb. the histogram size is stored with the
|
// Note: this is dumb. the histogram size is stored with the
|
||||||
// histogram!
|
// histogram!
|
||||||
stat_field->store(stats->histogram_?
|
stat_field->store(stats->histogram?
|
||||||
stats->histogram_->get_size() : 0);
|
stats->histogram->get_size() : 0);
|
||||||
break;
|
break;
|
||||||
case COLUMN_STAT_HIST_TYPE:
|
case COLUMN_STAT_HIST_TYPE:
|
||||||
if (stats->histogram_)
|
if (stats->histogram)
|
||||||
stat_field->store(stats->histogram_->get_type() + 1);
|
stat_field->store(stats->histogram->get_type() + 1);
|
||||||
else
|
else
|
||||||
stat_field->set_null();
|
stat_field->set_null();
|
||||||
break;
|
break;
|
||||||
case COLUMN_STAT_HISTOGRAM:
|
case COLUMN_STAT_HISTOGRAM:
|
||||||
if (stats->histogram_)
|
if (stats->histogram)
|
||||||
stats->histogram_->serialize(stat_field);
|
stats->histogram->serialize(stat_field);
|
||||||
else
|
else
|
||||||
stat_field->set_null();
|
stat_field->set_null();
|
||||||
break;
|
break;
|
||||||
@ -1235,7 +1235,7 @@ public:
|
|||||||
if (!hist->parse(mem_root, table_field, hist_type,
|
if (!hist->parse(mem_root, table_field, hist_type,
|
||||||
val.ptr(), val.length()))
|
val.ptr(), val.length()))
|
||||||
{
|
{
|
||||||
table_field->read_stats->histogram_= hist;
|
table_field->read_stats->histogram= hist;
|
||||||
return hist;
|
return hist;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1276,9 +1276,9 @@ void Histogram_binary::init_for_collection(MEM_ROOT *mem_root,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Histogram_json::init_for_collection(MEM_ROOT *mem_root,
|
void Histogram_json_hb::init_for_collection(MEM_ROOT *mem_root,
|
||||||
Histogram_type htype_arg,
|
Histogram_type htype_arg,
|
||||||
ulonglong size_arg)
|
ulonglong size_arg)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(htype_arg == JSON_HB);
|
DBUG_ASSERT(htype_arg == JSON_HB);
|
||||||
size= (uint8) size_arg;
|
size= (uint8) size_arg;
|
||||||
@ -1294,11 +1294,11 @@ void Histogram_json::init_for_collection(MEM_ROOT *mem_root,
|
|||||||
True Error
|
True Error
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool Histogram_json::parse(MEM_ROOT *mem_root, Field *field,
|
bool Histogram_json_hb::parse(MEM_ROOT *mem_root, Field *field,
|
||||||
Histogram_type type_arg, const char *hist_data,
|
Histogram_type type_arg, const char *hist_data,
|
||||||
size_t hist_data_len)
|
size_t hist_data_len)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("Histogram_json::parse");
|
DBUG_ENTER("Histogram_json_hb::parse");
|
||||||
DBUG_ASSERT(type_arg == JSON_HB);
|
DBUG_ASSERT(type_arg == JSON_HB);
|
||||||
const char *err;
|
const char *err;
|
||||||
json_engine_t je;
|
json_engine_t je;
|
||||||
@ -1501,7 +1501,8 @@ double pos_in_interval_through_strxfrm(Field *field,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
double Histogram_json::point_selectivity(Field *field, key_range *endpoint, double avg_sel)
|
double Histogram_json_hb::point_selectivity(Field *field, key_range *endpoint,
|
||||||
|
double avg_sel)
|
||||||
{
|
{
|
||||||
double sel;
|
double sel;
|
||||||
store_key_image_to_rec(field, (uchar *) endpoint->key,
|
store_key_image_to_rec(field, (uchar *) endpoint->key,
|
||||||
@ -1542,8 +1543,8 @@ double Histogram_json::point_selectivity(Field *field, key_range *endpoint, doub
|
|||||||
@param min_endp Left endpoint, or NULL if there is none
|
@param min_endp Left endpoint, or NULL if there is none
|
||||||
@param max_endp Right endpoint, or NULL if there is none
|
@param max_endp Right endpoint, or NULL if there is none
|
||||||
*/
|
*/
|
||||||
double Histogram_json::range_selectivity(Field *field, key_range *min_endp,
|
double Histogram_json_hb::range_selectivity(Field *field, key_range *min_endp,
|
||||||
key_range *max_endp)
|
key_range *max_endp)
|
||||||
{
|
{
|
||||||
double min, max;
|
double min, max;
|
||||||
double width= 1.0 / histogram_bounds.size();
|
double width= 1.0 / histogram_bounds.size();
|
||||||
@ -1612,7 +1613,7 @@ double Histogram_json::range_selectivity(Field *field, key_range *min_endp,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Histogram_json::serialize(Field *field)
|
void Histogram_json_hb::serialize(Field *field)
|
||||||
{
|
{
|
||||||
field->store(json_text.data(), json_text.size(), &my_charset_bin);
|
field->store(json_text.data(), json_text.size(), &my_charset_bin);
|
||||||
}
|
}
|
||||||
@ -1625,8 +1626,8 @@ void Histogram_json::serialize(Field *field)
|
|||||||
lookup_val.
|
lookup_val.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int Histogram_json::find_bucket(Field *field, const uchar *lookup_val,
|
int Histogram_json_hb::find_bucket(Field *field, const uchar *lookup_val,
|
||||||
bool equal_is_less)
|
bool equal_is_less)
|
||||||
{
|
{
|
||||||
int low= 0;
|
int low= 0;
|
||||||
int high= histogram_bounds.size() - 1;
|
int high= histogram_bounds.size() - 1;
|
||||||
@ -1987,7 +1988,7 @@ public:
|
|||||||
Column_statistics *col_stats= col->collected_stats;
|
Column_statistics *col_stats= col->collected_stats;
|
||||||
min_value= col_stats->min_value;
|
min_value= col_stats->min_value;
|
||||||
max_value= col_stats->max_value;
|
max_value= col_stats->max_value;
|
||||||
histogram= col_stats->histogram_;
|
histogram= col_stats->histogram;
|
||||||
hist_width= histogram->get_width();
|
hist_width= histogram->get_width();
|
||||||
bucket_capacity= (double) records / (hist_width + 1);
|
bucket_capacity= (double) records / (hist_width + 1);
|
||||||
curr_bucket= 0;
|
curr_bucket= 0;
|
||||||
@ -2087,7 +2088,7 @@ public:
|
|||||||
{
|
{
|
||||||
Json_writer writer;
|
Json_writer writer;
|
||||||
writer.start_object();
|
writer.start_object();
|
||||||
writer.add_member(Histogram_json::JSON_NAME).start_array();
|
writer.add_member(Histogram_json_hb::JSON_NAME).start_array();
|
||||||
|
|
||||||
for(auto& value: bucket_bounds) {
|
for(auto& value: bucket_bounds) {
|
||||||
writer.add_str(value.c_str());
|
writer.add_str(value.c_str());
|
||||||
@ -2095,14 +2096,14 @@ public:
|
|||||||
writer.end_array();
|
writer.end_array();
|
||||||
writer.end_object();
|
writer.end_object();
|
||||||
Binary_string *json_string = (Binary_string *) writer.output.get_string();
|
Binary_string *json_string = (Binary_string *) writer.output.get_string();
|
||||||
Histogram_json *hist= (Histogram_json*)histogram;
|
Histogram_json_hb *hist= (Histogram_json_hb*)histogram;
|
||||||
hist->set_json_text(bucket_bounds.size(), (uchar *) json_string->c_ptr());
|
hist->set_json_text(bucket_bounds.size(), (uchar *) json_string->c_ptr());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Histogram_builder *Histogram_json::create_builder(Field *col, uint col_len,
|
Histogram_builder *Histogram_json_hb::create_builder(Field *col, uint col_len,
|
||||||
ha_rows rows)
|
ha_rows rows)
|
||||||
{
|
{
|
||||||
return new Histogram_builder_json(col, col_len, rows);
|
return new Histogram_builder_json(col, col_len, rows);
|
||||||
}
|
}
|
||||||
@ -2120,7 +2121,7 @@ Histogram_base *create_histogram(MEM_ROOT *mem_root, Histogram_type hist_type,
|
|||||||
res= new (mem_root) Histogram_binary();
|
res= new (mem_root) Histogram_binary();
|
||||||
break;
|
break;
|
||||||
case JSON_HB:
|
case JSON_HB:
|
||||||
res= new (mem_root) Histogram_json();
|
res= new (mem_root) Histogram_json_hb();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DBUG_ASSERT(0);
|
DBUG_ASSERT(0);
|
||||||
@ -2244,7 +2245,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
void walk_tree_with_histogram(ha_rows rows)
|
void walk_tree_with_histogram(ha_rows rows)
|
||||||
{
|
{
|
||||||
Histogram_base *hist= table_field->collected_stats->histogram_;
|
Histogram_base *hist= table_field->collected_stats->histogram;
|
||||||
Histogram_builder *hist_builder=
|
Histogram_builder *hist_builder=
|
||||||
hist->create_builder(table_field, tree_key_length, rows);
|
hist->create_builder(table_field, tree_key_length, rows);
|
||||||
|
|
||||||
@ -2272,7 +2273,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
Histogram_base *get_histogram()
|
Histogram_base *get_histogram()
|
||||||
{
|
{
|
||||||
return table_field->collected_stats->histogram_;
|
return table_field->collected_stats->histogram;
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@ -2686,7 +2687,7 @@ int alloc_statistics_for_table(THD* thd, TABLE *table)
|
|||||||
{
|
{
|
||||||
if (bitmap_is_set(table->read_set, (*field_ptr)->field_index))
|
if (bitmap_is_set(table->read_set, (*field_ptr)->field_index))
|
||||||
{
|
{
|
||||||
column_stats->histogram_ = NULL;
|
column_stats->histogram = NULL;
|
||||||
(*field_ptr)->collected_stats= column_stats++;
|
(*field_ptr)->collected_stats= column_stats++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2719,11 +2720,11 @@ void free_statistics_for_table(THD *thd, TABLE *table)
|
|||||||
{
|
{
|
||||||
// Only delete the histograms that are exclusivly owned by this thread
|
// Only delete the histograms that are exclusivly owned by this thread
|
||||||
if ((*field_ptr)->collected_stats &&
|
if ((*field_ptr)->collected_stats &&
|
||||||
(*field_ptr)->collected_stats->histogram_ &&
|
(*field_ptr)->collected_stats->histogram &&
|
||||||
(*field_ptr)->collected_stats->histogram_->get_owner() == thd)
|
(*field_ptr)->collected_stats->histogram->get_owner() == thd)
|
||||||
{
|
{
|
||||||
delete (*field_ptr)->collected_stats->histogram_;
|
delete (*field_ptr)->collected_stats->histogram;
|
||||||
(*field_ptr)->collected_stats->histogram_= NULL;
|
(*field_ptr)->collected_stats->histogram= NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2958,8 +2959,8 @@ void Column_statistics_collected::finish(MEM_ROOT *mem_root, ha_rows rows, doubl
|
|||||||
if (hist_size != 0 && hist_type != INVALID_HISTOGRAM)
|
if (hist_size != 0 && hist_type != INVALID_HISTOGRAM)
|
||||||
{
|
{
|
||||||
have_histogram= true;
|
have_histogram= true;
|
||||||
histogram_= create_histogram(mem_root, hist_type, current_thd);
|
histogram= create_histogram(mem_root, hist_type, current_thd);
|
||||||
histogram_->init_for_collection(mem_root, hist_type, hist_size);
|
histogram->init_for_collection(mem_root, hist_type, hist_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Compute cardinality statistics and optionally histogram. */
|
/* Compute cardinality statistics and optionally histogram. */
|
||||||
@ -3007,7 +3008,7 @@ void Column_statistics_collected::finish(MEM_ROOT *mem_root, ha_rows rows, doubl
|
|||||||
if (have_histogram && distincts)
|
if (have_histogram && distincts)
|
||||||
{
|
{
|
||||||
set_not_null(COLUMN_STAT_HIST_TYPE);
|
set_not_null(COLUMN_STAT_HIST_TYPE);
|
||||||
histogram_= count_distinct->get_histogram();
|
histogram= count_distinct->get_histogram();
|
||||||
set_not_null(COLUMN_STAT_HISTOGRAM);
|
set_not_null(COLUMN_STAT_HISTOGRAM);
|
||||||
}
|
}
|
||||||
delete count_distinct;
|
delete count_distinct;
|
||||||
@ -3582,8 +3583,8 @@ void delete_stat_values_for_table_share(TABLE_SHARE *table_share)
|
|||||||
column_stats->max_value= NULL;
|
column_stats->max_value= NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
delete column_stats->histogram_;
|
delete column_stats->histogram;
|
||||||
column_stats->histogram_=NULL;
|
column_stats->histogram=NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3635,7 +3636,7 @@ int read_histograms_for_table(THD *thd, TABLE *table, TABLE_LIST *stat_tables)
|
|||||||
if (table_field->read_stats->histogram_type_on_disk != INVALID_HISTOGRAM)
|
if (table_field->read_stats->histogram_type_on_disk != INVALID_HISTOGRAM)
|
||||||
{
|
{
|
||||||
column_stat.set_key_fields(table_field);
|
column_stat.set_key_fields(table_field);
|
||||||
table_field->read_stats->histogram_=
|
table_field->read_stats->histogram=
|
||||||
column_stat.load_histogram(&stats_cb->mem_root);
|
column_stat.load_histogram(&stats_cb->mem_root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4328,7 +4329,7 @@ double get_column_range_cardinality(Field *field,
|
|||||||
if (avg_frequency > 1.0 + 0.000001 &&
|
if (avg_frequency > 1.0 + 0.000001 &&
|
||||||
col_stats->min_max_values_are_provided())
|
col_stats->min_max_values_are_provided())
|
||||||
{
|
{
|
||||||
Histogram_base *hist = col_stats->histogram_;
|
Histogram_base *hist = col_stats->histogram;
|
||||||
if (hist && hist->is_usable(thd))
|
if (hist && hist->is_usable(thd))
|
||||||
{
|
{
|
||||||
res= col_non_nulls *
|
res= col_non_nulls *
|
||||||
@ -4347,7 +4348,7 @@ double get_column_range_cardinality(Field *field,
|
|||||||
{
|
{
|
||||||
if (col_stats->min_max_values_are_provided())
|
if (col_stats->min_max_values_are_provided())
|
||||||
{
|
{
|
||||||
Histogram_base *hist= col_stats->histogram_;
|
Histogram_base *hist= col_stats->histogram;
|
||||||
double sel;
|
double sel;
|
||||||
if (hist && hist->is_usable(thd))
|
if (hist && hist->is_usable(thd))
|
||||||
{
|
{
|
||||||
|
@ -356,12 +356,9 @@ public:
|
|||||||
An equi-height histogram which stores real values for bucket bounds.
|
An equi-height histogram which stores real values for bucket bounds.
|
||||||
|
|
||||||
Handles @@histogram_type=JSON_HB
|
Handles @@histogram_type=JSON_HB
|
||||||
|
|
||||||
On-disk format is JSON:
|
|
||||||
(TODO description)
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class Histogram_json : public Histogram_base
|
class Histogram_json_hb : public Histogram_base
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
size_t size; /* Number of elements in the histogram */
|
size_t size; /* Number of elements in the histogram */
|
||||||
@ -505,7 +502,7 @@ public:
|
|||||||
/* Histogram type as specified in mysql.column_stats.hist_type */
|
/* Histogram type as specified in mysql.column_stats.hist_type */
|
||||||
Histogram_type histogram_type_on_disk;
|
Histogram_type histogram_type_on_disk;
|
||||||
|
|
||||||
Histogram_base *histogram_;
|
Histogram_base *histogram;
|
||||||
|
|
||||||
uint32 no_values_provided_bitmap()
|
uint32 no_values_provided_bitmap()
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user