implement parse and serialize for histogram json
This commit is contained in:
parent
9bba595528
commit
bf4d0dcfe2
@ -1261,12 +1261,6 @@ bool Histogram_binary::parse(MEM_ROOT *mem_root, Histogram_type type_arg, const
|
|||||||
*/
|
*/
|
||||||
void Histogram_binary::serialize(Field *field)
|
void Histogram_binary::serialize(Field *field)
|
||||||
{
|
{
|
||||||
if (get_type() == JSON)
|
|
||||||
{
|
|
||||||
field->store((char*)get_values(), strlen((char*)get_values()),
|
|
||||||
&my_charset_bin);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
field->store((char*)get_values(), get_width(), &my_charset_bin);
|
field->store((char*)get_values(), get_width(), &my_charset_bin);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1287,6 +1281,32 @@ void Histogram_json::init_for_collection(MEM_ROOT *mem_root, Histogram_type htyp
|
|||||||
size = (uint8) size_arg;
|
size = (uint8) size_arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Histogram_json::parse(MEM_ROOT *mem_root, Histogram_type type_arg, const uchar *ptr, uint size_arg)
|
||||||
|
{
|
||||||
|
size = (uint8) size_arg;
|
||||||
|
type = type_arg;
|
||||||
|
// I think we could use memcpy here, but not sure about how to get the right size
|
||||||
|
// since we can't depend on size_arg (it's zero for json histograms)
|
||||||
|
// also, does it make sense to cast here? or we can modify json_get_array_items
|
||||||
|
// to accept uchar*
|
||||||
|
const char *json = (char *)ptr;
|
||||||
|
int vt;
|
||||||
|
bool result = json_get_array_items(json, json + strlen(json), &vt, hist_buckets);
|
||||||
|
fprintf(stderr,"==============\n");
|
||||||
|
fprintf(stderr,"histogram: %s\n", json);
|
||||||
|
fprintf(stderr, "json_get_array_items() returned %s\n", result ? "true" : "false");
|
||||||
|
fprintf(stderr, "value type after json_get_array_items() is %d\n", vt);
|
||||||
|
fprintf(stderr, " JSV_BAD_JSON=%d, JSON_VALUE_ARRAY=%d\n", (int)JSV_BAD_JSON, (int)JSON_VALUE_ARRAY);
|
||||||
|
fprintf(stderr, "hist_buckets.size()=%zu\n", hist_buckets.size());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Histogram_json::serialize(Field *field)
|
||||||
|
{
|
||||||
|
field->store((char*)get_values(), strlen((char*)get_values()),
|
||||||
|
&my_charset_bin);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
An object of the class Index_stat is created to read statistical
|
An object of the class Index_stat is created to read statistical
|
||||||
data on tables from the statistical table table_stat, to update
|
data on tables from the statistical table table_stat, to update
|
||||||
@ -1987,9 +2007,9 @@ public:
|
|||||||
@brief
|
@brief
|
||||||
Get the pointer to the histogram built for table_field
|
Get the pointer to the histogram built for table_field
|
||||||
*/
|
*/
|
||||||
Histogram_binary *get_histogram()
|
Histogram_base *get_histogram()
|
||||||
{
|
{
|
||||||
return dynamic_cast<Histogram_binary *>(table_field->collected_stats->histogram_);
|
return table_field->collected_stats->histogram_;
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#ifndef SQL_STATISTICS_H
|
#ifndef SQL_STATISTICS_H
|
||||||
#define SQL_STATISTICS_H
|
#define SQL_STATISTICS_H
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
/*
|
/*
|
||||||
For COMPLEMENTARY_FOR_QUERIES and PREFERABLY_FOR_QUERIES they are
|
For COMPLEMENTARY_FOR_QUERIES and PREFERABLY_FOR_QUERIES they are
|
||||||
similar to the COMPLEMENTARY and PREFERABLY respectively except that
|
similar to the COMPLEMENTARY and PREFERABLY respectively except that
|
||||||
@ -341,11 +342,12 @@ private:
|
|||||||
Histogram_type type;
|
Histogram_type type;
|
||||||
uint8 size; /* Number of elements in the histogram*/
|
uint8 size; /* Number of elements in the histogram*/
|
||||||
uchar *values;
|
uchar *values;
|
||||||
|
std::vector<std::string> hist_buckets;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool parse(MEM_ROOT *mem_root, Histogram_type type_arg, const uchar *ptr, uint size) override {return false;}
|
bool parse(MEM_ROOT *mem_root, Histogram_type type_arg, const uchar *ptr, uint size) override;
|
||||||
|
|
||||||
void serialize(Field *to_field) override{}
|
void serialize(Field *field) override;
|
||||||
|
|
||||||
// returns number of buckets in the histogram
|
// returns number of buckets in the histogram
|
||||||
uint get_width() override
|
uint get_width() override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user