MySQL 8.0.40
Source Code Documentation
histograms::Singleton< T > Class Template Reference

#include <singleton.h>

Inheritance diagram for histograms::Singleton< T >:
[legend]

Public Member Functions

Histogramclone (MEM_ROOT *mem_root) const override
 Make a clone of this histogram on a MEM_ROOT. More...
 
 Singleton (const Singleton< T > &other)=delete
 
bool build_histogram (const Value_map< T > &value_map, size_t num_buckets)
 Build the Singleton histogram. More...
 
bool histogram_to_json (Json_object *json_object) const override
 Convert this histogram to a JSON object. More...
 
size_t get_num_buckets () const override
 
size_t get_num_distinct_values () const override
 Get the estimated number of distinct non-NULL values. More...
 
std::string histogram_type_to_str () const override
 Returns the histogram type as a readable string. More...
 
double get_equal_to_selectivity (const T &value) const
 Find the number of values equal to 'value'. More...
 
double get_less_than_selectivity (const T &value) const
 Find the number of values less than 'value'. More...
 
double get_greater_than_selectivity (const T &value) const
 Find the number of values greater than 'value'. More...
 
 Singleton (MEM_ROOT *mem_root, const Singleton< String > &other, bool *error)
 
- Public Member Functions inherited from histograms::Histogram
 Histogram ()=delete
 
 Histogram (const Histogram &other)=delete
 
virtual ~Histogram ()=default
 Destructor. More...
 
MEM_ROOTget_mem_root () const
 
const LEX_CSTRING get_database_name () const
 
const LEX_CSTRING get_table_name () const
 
const LEX_CSTRING get_column_name () const
 
enum_histogram_type get_histogram_type () const
 
double get_null_values_fraction () const
 
const CHARSET_INFOget_character_set () const
 
double get_sampling_rate () const
 
Value_map_type get_data_type () const
 
size_t get_num_buckets_specified () const
 
bool store_histogram (THD *thd) const
 Store this histogram to persistent storage (data dictionary). More...
 
bool get_selectivity (Item **items, size_t item_count, enum_operator op, double *selectivity) const
 Get selectivity estimation. More...
 
double get_non_null_values_fraction () const
 
template<>
bool extract_json_dom_value (const Json_dom *json_dom, double *out, Error_context *context)
 
template<>
bool extract_json_dom_value (const Json_dom *json_dom, String *out, Error_context *context)
 
template<>
bool extract_json_dom_value (const Json_dom *json_dom, ulonglong *out, Error_context *context)
 
template<>
bool extract_json_dom_value (const Json_dom *json_dom, longlong *out, Error_context *context)
 
template<>
bool extract_json_dom_value (const Json_dom *json_dom, MYSQL_TIME *out, Error_context *context)
 
template<>
bool extract_json_dom_value (const Json_dom *json_dom, my_decimal *out, Error_context *context)
 

Static Public Member Functions

static Singleton< T > * create (MEM_ROOT *mem_root, const std::string &db_name, const std::string &tbl_name, const std::string &col_name, Value_map_type data_type)
 Singleton histogram factory method. More...
 
- Static Public Member Functions inherited from histograms::Histogram
static constexpr const char * histogram_type_str ()
 String representation of the JSON field "histogram-type". More...
 
static constexpr const char * data_type_str ()
 String representation of the JSON field "data-type". More...
 
static constexpr const char * collation_id_str ()
 String representation of the JSON field "collation-id". More...
 
static constexpr const char * singleton_str ()
 String representation of the histogram type SINGLETON. More...
 
static constexpr const char * equi_height_str ()
 String representation of the histogram type EQUI-HEIGHT. More...
 
static Histogramjson_to_histogram (MEM_ROOT *mem_root, const std::string &schema_name, const std::string &table_name, const std::string &column_name, const Json_object &json_object, Error_context *context)
 Converts JSON object to a histogram. More...
 

Protected Member Functions

bool json_to_histogram (const Json_object &json_object, Error_context *context) override
 Populate this histogram with contents from a JSON object. More...
 
- Protected Member Functions inherited from histograms::Histogram
 Histogram (MEM_ROOT *mem_root, const std::string &db_name, const std::string &tbl_name, const std::string &col_name, enum_histogram_type type, Value_map_type data_type, bool *error)
 Constructor. More...
 
 Histogram (MEM_ROOT *mem_root, const Histogram &other, bool *error)
 Copy constructor. More...
 
bool histogram_data_type_to_json (Json_object *json_object) const
 Write the data type of this histogram into a JSON object. More...
 
template<class T >
bool extract_json_dom_value (const Json_dom *json_dom, T *out, Error_context *context)
 Return the value that is contained in the JSON DOM object. More...
 

Private Member Functions

 Singleton (MEM_ROOT *mem_root, const std::string &db_name, const std::string &tbl_name, const std::string &col_name, Value_map_type data_type, bool *error)
 Singleton constructor. More...
 
 Singleton (MEM_ROOT *mem_root, const Singleton< T > &other, bool *error)
 Singleton copy-constructor. More...
 
bool add_value_json_bucket (const double &value, Json_array *json_bucket)
 
bool add_value_json_bucket (const String &value, Json_array *json_bucket)
 
bool add_value_json_bucket (const ulonglong &value, Json_array *json_bucket)
 
bool add_value_json_bucket (const longlong &value, Json_array *json_bucket)
 
bool add_value_json_bucket (const MYSQL_TIME &value, Json_array *json_bucket)
 
bool add_value_json_bucket (const my_decimal &value, Json_array *json_bucket)
 

Static Private Member Functions

static constexpr const char * singleton_str ()
 String representation of the histogram type SINGLETON. More...
 
static bool add_value_json_bucket (const T &value, Json_array *json_bucket)
 Add value to a JSON bucket. More...
 
static bool create_json_bucket (const SingletonBucket< T > &bucket, Json_array *json_bucket)
 Convert one bucket to a JSON object. More...
 

Private Attributes

Mem_root_array< SingletonBucket< T > > m_buckets
 The buckets for this histogram [value, cumulative frequency]. More...
 

Additional Inherited Members

- Public Types inherited from histograms::Histogram
enum class  enum_histogram_type { EQUI_HEIGHT , SINGLETON }
 All supported histogram types in MySQL. More...
 
- Static Protected Member Functions inherited from histograms::Histogram
static constexpr const char * buckets_str ()
 String representation of the JSON field "buckets". More...
 
static constexpr const char * last_updated_str ()
 String representation of the JSON field "last-updated". More...
 
static constexpr const char * null_values_str ()
 String representation of the JSON field "null-values". More...
 
static constexpr const char * sampling_rate_str ()
 
static constexpr const char * numer_of_buckets_specified_str ()
 String representation of the JSON field "number-of-buckets-specified". More...
 
- Protected Attributes inherited from histograms::Histogram
double m_sampling_rate
 
double m_null_values_fraction
 The fraction of NULL values in the histogram (between 0.0 and 1.0). More...
 
const CHARSET_INFOm_charset
 The character set for the data stored. More...
 
size_t m_num_buckets_specified
 The number of buckets originally specified. More...
 

Constructor & Destructor Documentation

◆ Singleton() [1/4]

template<class T >
histograms::Singleton< T >::Singleton ( const Singleton< T > &  other)
delete

◆ Singleton() [2/4]

template<class T >
histograms::Singleton< T >::Singleton ( MEM_ROOT mem_root,
const std::string &  db_name,
const std::string &  tbl_name,
const std::string &  col_name,
Value_map_type  data_type,
bool *  error 
)
private

Singleton constructor.

This will not build the histogram, but only set its properties.

Parameters
mem_rootthe mem_root where the histogram contents will be allocated
db_namename of the database this histogram represents
tbl_namename of the table this histogram represents
col_namename of the column this histogram represents
data_typethe type of data that this histogram contains
[out]erroris set to true if an error occurs

◆ Singleton() [3/4]

template<class T >
histograms::Singleton< T >::Singleton ( MEM_ROOT mem_root,
const Singleton< T > &  other,
bool *  error 
)
private

Singleton copy-constructor.

This will take a copy of the histogram and all of its contents on the provided MEM_ROOT.

Parameters
mem_rootthe MEM_ROOT to allocate the new histogram on.
otherthe histogram to take a copy of
[out]erroris set to true if an error occurs

◆ Singleton() [4/4]

histograms::Singleton< String >::Singleton ( MEM_ROOT mem_root,
const Singleton< String > &  other,
bool *  error 
)

Member Function Documentation

◆ add_value_json_bucket() [1/7]

bool histograms::Singleton< double >::add_value_json_bucket ( const double &  value,
Json_array json_bucket 
)
private

◆ add_value_json_bucket() [2/7]

bool histograms::Singleton< longlong >::add_value_json_bucket ( const longlong value,
Json_array json_bucket 
)
private

◆ add_value_json_bucket() [3/7]

bool histograms::Singleton< my_decimal >::add_value_json_bucket ( const my_decimal value,
Json_array json_bucket 
)
private

◆ add_value_json_bucket() [4/7]

bool histograms::Singleton< MYSQL_TIME >::add_value_json_bucket ( const MYSQL_TIME value,
Json_array json_bucket 
)
private

◆ add_value_json_bucket() [5/7]

bool histograms::Singleton< String >::add_value_json_bucket ( const String value,
Json_array json_bucket 
)
private

◆ add_value_json_bucket() [6/7]

template<class T >
static bool histograms::Singleton< T >::add_value_json_bucket ( const T &  value,
Json_array json_bucket 
)
staticprivate

Add value to a JSON bucket.

This function adds the value to the supplied JSON array.

Parameters
valuethe value to add
[out]json_bucketa JSON array where the bucket data is to be stored
Returns
true on error, false otherwise

◆ add_value_json_bucket() [7/7]

bool histograms::Singleton< ulonglong >::add_value_json_bucket ( const ulonglong value,
Json_array json_bucket 
)
private

◆ build_histogram()

template<class T >
bool histograms::Singleton< T >::build_histogram ( const Value_map< T > &  value_map,
size_t  num_buckets 
)

Build the Singleton histogram.

Parameters
value_mapvalues to create the histogram for
num_bucketsthe number of buckets specified/requested by the user
Returns
true on error, false otherwise

◆ clone()

template<class T >
Histogram * histograms::Singleton< T >::clone ( MEM_ROOT mem_root) const
overridevirtual

Make a clone of this histogram on a MEM_ROOT.

Parameters
mem_rootthe MEM_ROOT to allocate the new histogram contents on.
Returns
a copy of the histogram allocated on the provided MEM_ROOT.

Implements histograms::Histogram.

◆ create()

template<class T >
Singleton< T > * histograms::Singleton< T >::create ( MEM_ROOT mem_root,
const std::string &  db_name,
const std::string &  tbl_name,
const std::string &  col_name,
Value_map_type  data_type 
)
static

Singleton histogram factory method.

Attempts to allocate and initialize a singleton histogram on the supplied mem_root. This will not build the histogram, but only set its properties. If the attempt to allocate the histogram fails or if an error occurs during construction we return nullptr.

Parameters
mem_rootthe mem_root where the histogram contents will be allocated
db_namename of the database this histogram represents
tbl_namename of the table this histogram represents
col_namename of the column this histogram represents
data_typethe type of data that this histogram contains
Returns
A pointer to a Singleton histogram on success. Returns nullptr on error.

◆ create_json_bucket()

template<class T >
bool histograms::Singleton< T >::create_json_bucket ( const SingletonBucket< T > &  bucket,
Json_array json_bucket 
)
staticprivate

Convert one bucket to a JSON object.

Parameters
bucketthe histogram bucket to convert
[out]json_bucketa JSON array where the bucket data is to be stored
Returns
true on error, false otherwise

◆ get_equal_to_selectivity()

template<class T >
double histograms::Singleton< T >::get_equal_to_selectivity ( const T &  value) const

Find the number of values equal to 'value'.

This function will estimate the number of values that is equal to the provided value.

Parameters
valueThe value to estimate the selectivity for.
Returns
the selectivity between 0.0 and 1.0 inclusive.

◆ get_greater_than_selectivity()

template<class T >
double histograms::Singleton< T >::get_greater_than_selectivity ( const T &  value) const

Find the number of values greater than 'value'.

This function will estimate the number of values that is greater than the provided value.

Parameters
valueThe value to estimate the selectivity for.
Returns
the selectivity between 0.0 and 1.0 inclusive.

◆ get_less_than_selectivity()

template<class T >
double histograms::Singleton< T >::get_less_than_selectivity ( const T &  value) const

Find the number of values less than 'value'.

This function will estimate the number of values that is less than the provided value.

Parameters
valueThe value to estimate the selectivity for.
Returns
the selectivity between 0.0 and 1.0 inclusive.

◆ get_num_buckets()

template<class T >
size_t histograms::Singleton< T >::get_num_buckets ( ) const
inlineoverridevirtual
Returns
number of values/buckets in this histogram

Implements histograms::Histogram.

◆ get_num_distinct_values()

template<class T >
size_t histograms::Singleton< T >::get_num_distinct_values ( ) const
inlineoverridevirtual

Get the estimated number of distinct non-NULL values.

Returns
number of distinct non-NULL values

TODO(christiani): If the histogram is based on sampling, then this estimate is potentially off by a factor 1/sampling_rate. It should be adjusted to an actual estimate if we are going to use it.

Implements histograms::Histogram.

◆ histogram_to_json()

template<class T >
bool histograms::Singleton< T >::histogram_to_json ( Json_object json_object) const
overridevirtual

Convert this histogram to a JSON object.

This function will take the contents of the current histogram and put it in the output parameter "json_object".

Parameters
[in,out]json_objectoutput where the histogram is to be stored. The caller is responsible for allocating/deallocating the JSON object
Returns
true on error, false otherwise

Implements histograms::Histogram.

◆ histogram_type_to_str()

template<class T >
std::string histograms::Singleton< T >::histogram_type_to_str
overridevirtual

Returns the histogram type as a readable string.

Returns
a readable string representation of the histogram type

Implements histograms::Histogram.

◆ json_to_histogram()

template<class T >
bool histograms::Singleton< T >::json_to_histogram ( const Json_object json_object,
Error_context context 
)
overrideprotectedvirtual

Populate this histogram with contents from a JSON object.

Parameters
json_objecta JSON object that represents an Singleton histogram
contexterror context for validation
Returns
true on error, false otherwise.

Implements histograms::Histogram.

◆ singleton_str()

template<class T >
static constexpr const char * histograms::Singleton< T >::singleton_str ( )
inlinestaticconstexprprivate

String representation of the histogram type SINGLETON.

Member Data Documentation

◆ m_buckets

template<class T >
Mem_root_array<SingletonBucket<T> > histograms::Singleton< T >::m_buckets
private

The buckets for this histogram [value, cumulative frequency].


The documentation for this class was generated from the following files: