54 cubxasl::aggregate_accumulator_domain *domain,
104 if (list_id_p ==
NULL)
140 for (agg_p = agg_list_p; agg_p !=
NULL; agg_p = agg_p->
next)
181 agg_p->
info.dist_percent.const_array =
NULL;
182 agg_p->
info.dist_percent.list_len = 0;
183 agg_p->
info.dist_percent.nlargers = 0;
316 bool copy_operator =
false;
324 if (domain !=
NULL && domain->value_dom !=
NULL)
326 coll_id = domain->value_dom->collation_id;
337 if (acc->
curr_cnt < 1 || domain->value_dom->type->cmpval (acc->
value, value, 1, 1,
NULL, coll_id) > 0)
340 copy_operator =
true;
349 if (acc->
curr_cnt < 1 || domain->value_dom->type->cmpval (acc->
value, value, 1, 1,
NULL, coll_id) < 0)
352 copy_operator =
true;
440 copy_operator =
true;
477 domain->value_dom->type->setval (acc->
value, value,
true);
478 domain->value2_dom->type->setval (acc->
value2, &squared,
true);
550 if (db_values.size () == 1)
603 char *disk_repr_p =
NULL;
608 for (agg_p = agg_list_p, i = 0; agg_p !=
NULL; agg_p = agg_p->
next, i++)
613 accumulator = (alt_acc_list !=
NULL ? &alt_acc_list[
i] : &agg_p->
accumulator);
655 db_values.emplace_back ();
670 db_value_p = &db_values[0];
735 if (pr_type_p ==
NULL)
847 status =
tp_value_cast (db_value_p, db_value_p, tmp_domain_p,
false);
853 status =
tp_value_cast (db_value_p, db_value_p, tmp_domain_p,
false);
861 status =
tp_value_cast (db_value_p, db_value_p, tmp_domain_p,
false);
875 agg_p->
domain = tmp_domain_p;
965 int oid_count = 0, null_count = 0, key_count = 0;
966 int flag_btree_stat_needed =
true;
980 flag_btree_stat_needed =
false;
983 if (flag_btree_stat_needed)
1181 bool keep_list_file)
1187 DB_VALUE xavgval, xavg_1val, x2avgval;
1209 for (agg_p = agg_list_p; agg_p !=
NULL; agg_p = agg_p->
next)
1237 assert (dbl <= 1.0 && dbl > 0.0);
1241 if (agg_p->
info.dist_percent.const_array !=
NULL)
1244 agg_p->
info.dist_percent.list_len = 0;
1259 assert (dbl <= 1.0 && dbl >= 0.0);
1263 if (agg_p->
info.dist_percent.const_array !=
NULL)
1266 agg_p->
info.dist_percent.list_len = 0;
1298 if (list_id_p ==
NULL)
1406 if (tmp_pr_type ==
NULL)
1509 tmp_domain_ptr !=
NULL ? tmp_domain_ptr : agg_p->accumulator_domain.value_dom;
1540 if (!keep_list_file)
1657 dtmp = (dtmp < 0.0f ? 0.0f : dtmp);
1685 for (agg_p = agg_list_p; agg_p !=
NULL; agg_p = agg_p->
next)
1712 AGGREGATE_DIST_PERCENT_INFO *info_p;
1718 HL_HEAPID save_heapid = 0;
1723 info_p = &agg_p->
info.dist_percent;
1736 assert (info_p->list_len == 0 && info_p->const_array ==
NULL);
1738 regu_var_node = regu_tmp_node = regu_var_list;
1739 len = &info_p->list_len;
1740 info_p->nlargers = 0;
1744 while (regu_tmp_node)
1747 regu_var_node = regu_var_node->
next;
1748 regu_tmp_node = regu_tmp_node->
next->
next;
1756 if (info_p->const_array ==
NULL)
1762 regu_tmp_node = regu_var_list;
1763 for (i = 0; i < nloops; i++)
1765 val_node_p = &info_p->const_array[
i];
1772 dom = regu_tmp_node->
value.domain;
1781 if (save_heapid != 0)
1790 if (save_heapid != 0)
1796 regu_var_node = regu_var_node->
next;
1797 regu_tmp_node = regu_tmp_node->
next;
1802 assert (info_p->list_len != 0 && info_p->const_array !=
NULL);
1804 regu_var_node = regu_var_list;
1806 nloops = info_p->list_len;
1808 for (i = 0; i < nloops; i++)
1813 sort_p = sort_p->
next;
1854 cmp = pr_type_p->
cmpval (val_node, info_p->const_array[i], 1, 0,
NULL,
1855 regu_var_node->
value.domain->collation_id);
1870 regu_var_node = regu_var_node->
next;
1897 if (agg_p->
info.dist_percent.const_array !=
NULL)
1934 for (i = 0; i < val_cnt; i++)
2021 for (i = 0; i < func_cnt; i++)
2027 for (i = 0, agg_p = g_agg_list; agg_p !=
NULL; agg_p = agg_p->
next, i++)
2130 int i, size = 0, old_size = 0;
2151 old_size = (ret_delta ? value->
curr_size : 0);
2192 unsigned int hash_val = 0;
2236 if (result !=
DB_EQ)
2321 while (agg_list !=
NULL)
2372 agg_list = agg_list->
next;
2466 cubxasl::aggregate_accumulator_domain **acc_dom)
2515 acc_dom[
i]->value_dom->type->data_readval (&buf, value->
accumulators[i].
value, acc_dom[i]->value_dom, -1,
2533 acc_dom[
i]->value2_dom->type->data_readval (&buf, value->
accumulators[i].
value2, acc_dom[i]->value2_dom, -1,
2595 cubxasl::aggregate_accumulator_domain **acc_dom)
2633 if (hash_table ==
NULL || tuple_list_id ==
NULL || partial_list_id ==
NULL)
2639 while (head !=
NULL)
2717 "DOUBLE, DATETIME, TIME");
2759 int max_allowed_size;
2795 max_allowed_size,
"GROUP_CONCAT()");
2827 int max_allowed_size;
2853 result_domain, max_allowed_size,
"GROUP_CONCAT()") !=
NO_ERROR)
2897 double row_num_d, f_row_num_d, c_row_num_d, percentile_d;
2899 double cur_group_percentile;
2908 if (tuple_count < 1)
2919 percentile_d = cur_group_percentile;
2923 percentile_d = ceil (percentile_d * tuple_count) / tuple_count;
2927 row_num_d = ((double) (tuple_count - 1)) * percentile_d;
2928 f_row_num_d = floor (row_num_d);
2932 c_row_num_d = f_row_num_d;
2936 c_row_num_d = ceil (row_num_d);
#define QFILE_TUPLE_VALUE_HEADER_SIZE
aggregate_hash_key * qdata_copy_agg_hkey(cubthread::entry *thread_p, aggregate_hash_key *key)
int qfile_generate_tuple_into_list(THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id_p, QFILE_TUPLE_TYPE tuple_type)
int data_readval(struct or_buf *buf, DB_VALUE *value, const tp_domain *domain, int size, bool copy, char *copy_buf, int copy_buf_len) const
aggregate_hash_value * qdata_alloc_agg_hvalue(cubthread::entry *thread_p, int func_cnt, cubxasl::aggregate_list_node *g_agg_list)
#define TP_IS_DATE_OR_TIME_TYPE(typeid)
TP_DOMAIN_STATUS tp_value_coerce(const DB_VALUE *src, DB_VALUE *dest, const TP_DOMAIN *desired_domain)
int db_make_json(DB_VALUE *value, JSON_DOC *json_document, bool need_clear)
int db_value_coerce(const DB_VALUE *src, DB_VALUE *dest, const DB_DOMAIN *desired_domain)
aggregate_specific_function_info info
int db_evaluate_json_merge_preserve(DB_VALUE *result, DB_VALUE *const *arg, const int num_args)
int pr_data_writeval_disk_size(DB_VALUE *value)
int mht_clear(MHT_TABLE *ht, int(*rem_func)(const void *key, void *data, void *args), void *func_args)
DB_VALUE_COMPARE_RESULT tp_value_compare(const DB_VALUE *value1, const DB_VALUE *value2, int allow_coercion, int total_order)
DB_VALUE * pr_make_value(void)
QFILE_TUPLE_VALUE_TYPE_LIST type_list
int qdata_bit_xor_dbval(DB_VALUE *dbval1_p, DB_VALUE *dbval2_p, DB_VALUE *result_p, tp_domain *domain_p)
int data_writeval(struct or_buf *buf, const DB_VALUE *value) const
#define QFILE_FREE_AND_INIT_LIST_ID(list_id)
#define ER_TF_BUFFER_OVERFLOW
unsigned int qdata_hash_agg_hkey(const void *key, unsigned int ht_size)
int db_make_bigint(DB_VALUE *value, const DB_BIGINT num)
int db_get_int(const DB_VALUE *value)
int qdata_get_tuple_value_size_from_dbval(DB_VALUE *dbval_p)
double cur_group_percentile
DB_C_DOUBLE db_get_double(const DB_VALUE *value)
void qdata_free_agg_hvalue(cubthread::entry *thread_p, aggregate_hash_value *value)
#define ER_PERCENTILE_FUNC_INVALID_PERCENTILE_RANGE
SCAN_CODE qfile_scan_list_next(THREAD_ENTRY *thread_p, QFILE_LIST_SCAN_ID *scan_id_p, QFILE_TUPLE_RECORD *tuple_record_p, int peek)
int db_string_fix_string_size(DB_VALUE *src_string)
int qdata_evaluate_aggregate_optimize(cubthread::entry *thread_p, cubxasl::aggregate_list_node *agg_p, HFID *hfid_p, OID *super_oid)
#define OR_BUF_INIT(buf, data, size)
#define ER_QPROC_INVALID_XASLNODE
#define ASSERT_ERROR_AND_SET(error_code)
int fetch_copy_dbval(THREAD_ENTRY *thread_p, REGU_VARIABLE *regu_var, val_descr *vd, OID *class_oid, OID *obj_oid, QFILE_TUPLE tpl, DB_VALUE *dbval)
int qfile_locate_tuple_next_value(OR_BUF *iterator, OR_BUF *buf, QFILE_TUPLE_VALUE_FLAG *flag)
DB_VALUE_COMPARE_RESULT cmpval(const DB_VALUE *value, const DB_VALUE *value2, int do_coercion, int total_order, int *start_colp, int collation) const
int db_accumulate_json_arrayagg(const DB_VALUE *json_db_val, DB_VALUE *json_res)
int qdata_agg_hkey_eq(const void *key1, const void *key2)
aggregate_hash_key * qdata_alloc_agg_hkey(cubthread::entry *thread_p, int val_cnt, bool alloc_vals)
bool REGU_VARIABLE_IS_FLAGED(const regu_variable_node *regu, int flag)
aggregate_accumulator accumulator
int qdata_update_interpolation_func_value_and_domain(DB_VALUE *src_val, DB_VALUE *dest_val, TP_DOMAIN **domain)
TP_DOMAIN tp_Integer_domain
int btree_find_min_or_max_key(THREAD_ENTRY *thread_p, BTID *btid, DB_VALUE *key, int find_min_key)
int qdata_save_agg_hentry_to_list(cubthread::entry *thread_p, aggregate_hash_key *key, aggregate_hash_value *value, DB_VALUE *temp_dbval_array, qfile_list_id *list_id)
#define QPROC_IS_INTERPOLATION_FUNC(func_p)
QFILE_TUPLE_DESCRIPTOR tpl_descr
enum tp_domain_status TP_DOMAIN_STATUS
int qdata_subtract_dbval(DB_VALUE *dbval1_p, DB_VALUE *dbval2_p, DB_VALUE *result_p, tp_domain *domain_p)
HL_HEAPID db_change_private_heap(THREAD_ENTRY *thread_p, HL_HEAPID heap_id)
int qdata_bit_and_dbval(DB_VALUE *dbval1_p, DB_VALUE *dbval2_p, DB_VALUE *result_p, tp_domain *domain_p)
int qdata_evaluate_aggregate_hierarchy(cubthread::entry *thread_p, cubxasl::aggregate_list_node *agg_p, HFID *root_hfid, BTID *root_btid, hierarchy_aggregate_helper *helper)
int db_string_make_empty_typed_string(DB_VALUE *db_val, const DB_TYPE db_type, int precision, int codeset, int collation_id)
int qdata_get_agg_hvalue_size(aggregate_hash_value *value, bool ret_delta)
int qdata_multiply_dbval(DB_VALUE *dbval1_p, DB_VALUE *dbval2_p, DB_VALUE *result_p, tp_domain *domain_p)
void qdata_free_agg_hkey(cubthread::entry *thread_p, aggregate_hash_key *key)
int qdata_divide_dbval(DB_VALUE *dbval1_p, DB_VALUE *dbval2_p, DB_VALUE *result_p, tp_domain *domain_p)
UINT64 prm_get_bigint_value(PARAM_ID prm_id)
#define QFILE_GET_TUPLE_VALUE_FLAG(ptr)
#define QFILE_MAX_TUPLE_SIZE_IN_PAGE
PR_TYPE * pr_type_from_id(DB_TYPE id)
int pr_free_value(DB_VALUE *value)
TP_DOMAIN * tp_domain_resolve_default(DB_TYPE type)
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
void pr_clear_value_vector(std::vector< DB_VALUE > &value_vector)
void qfile_destroy_list(THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id_p)
#define ER_OUT_OF_VIRTUAL_MEMORY
int qdata_finalize_aggregate_list(cubthread::entry *thread_p, cubxasl::aggregate_list_node *agg_list_p, bool keep_list_file)
const int REGU_VARIABLE_CLEAR_AT_CLONE_DECACHE
int qdata_load_agg_hentry_from_tuple(cubthread::entry *thread_p, QFILE_TUPLE tuple, aggregate_hash_key *key, aggregate_hash_value *value, tp_domain **key_dom, cubxasl::aggregate_accumulator_domain **acc_dom)
int fetch_peek_dbval(THREAD_ENTRY *thread_p, REGU_VARIABLE *regu_var, val_descr *vd, OID *class_oid, OID *obj_oid, QFILE_TUPLE tpl, DB_VALUE **peek_dbval)
#define DB_VALUE_DOMAIN_TYPE(value)
regu_variable_node * percentile_reguvar
#define TP_DOMAIN_COLLATION(dom)
#define TP_IS_NUMERIC_TYPE(typeid)
int qdata_aggregate_accumulator_to_accumulator(cubthread::entry *thread_p, cubxasl::aggregate_accumulator *acc, cubxasl::aggregate_accumulator_domain *acc_dom, FUNC_TYPE func_type, tp_domain *func_domain, cubxasl::aggregate_accumulator *new_acc)
int qdata_get_interpolation_function_result(THREAD_ENTRY *thread_p, QFILE_LIST_SCAN_ID *scan_id, tp_domain *domain, int pos, double row_num_d, double f_row_num_d, double c_row_num_d, DB_VALUE *result, tp_domain **result_dom, FUNC_TYPE function)
#define ER_PERCENTILE_FUNC_PERCENTILE_CHANGED_IN_GROUP
int qdata_get_agg_hkey_size(aggregate_hash_key *key)
TP_DOMAIN_STATUS tp_value_cast(const DB_VALUE *src, DB_VALUE *dest, const TP_DOMAIN *desired_domain, bool implicit_coercion)
#define TP_DOMAIN_TYPE(dom)
static void cleanup(int signo)
#define QFILE_GET_TUPLE_VALUE_LENGTH(ptr)
DB_VALUE * pr_copy_value(DB_VALUE *value)
static int qdata_group_concat_value(THREAD_ENTRY *thread_p, AGGREGATE_TYPE *agg_p, DB_VALUE *dbvalue)
#define QFILE_TUPLE_LENGTH_SIZE
static int qdata_group_concat_first_value(THREAD_ENTRY *thread_p, AGGREGATE_TYPE *agg_p, DB_VALUE *dbvalue)
static int qdata_process_distinct_or_sort(cubthread::entry *thread_p, cubxasl::aggregate_list_node *agg_p, QUERY_ID query_id)
#define QFILE_GET_TUPLE_LENGTH(tpl)
int qdata_add_dbval(DB_VALUE *dbval1_p, DB_VALUE *dbval2_p, DB_VALUE *result_p, tp_domain *domain_p)
QFILE_TUPLE_VALUE_POSITION pos_descr
aggregate_list_node * next
#define db_private_free_and_init(thrd, ptr)
#define db_private_free(thrd, ptr)
void or_init(OR_BUF *buf, char *data, int length)
int btree_get_unique_statistics_for_count(THREAD_ENTRY *thread_p, BTID *btid, int *oid_cnt, int *null_cnt, int *key_cnt)
#define db_private_alloc(thrd, size)
need_clear_type need_clear
int qdata_evaluate_aggregate_list(cubthread::entry *thread_p, cubxasl::aggregate_list_node *agg_list_p, val_descr *val_desc_p, cubxasl::aggregate_accumulator *alt_acc_list)
int pr_clear_value(DB_VALUE *value)
int qfile_open_list_scan(QFILE_LIST_ID *list_id_p, QFILE_LIST_SCAN_ID *scan_id_p)
qfile_tuple_record first_tuple
int qdata_bit_or_dbval(DB_VALUE *dbval1_p, DB_VALUE *dbval2_p, DB_VALUE *result_p, tp_domain *domain_p)
#define ER_JSON_OBJECT_NAME_IS_NULL
DB_VALUE_COMPARE_RESULT qdata_agg_hkey_compare(aggregate_hash_key *ckey1, aggregate_hash_key *ckey2, int *diff_pos)
SCAN_CODE qdata_load_agg_hentry_from_list(cubthread::entry *thread_p, qfile_list_scan_id *list_scan_id, aggregate_hash_key *key, aggregate_hash_value *value, tp_domain **key_dom, cubxasl::aggregate_accumulator_domain **acc_dom)
struct db_domain_info::general_info general_info
static int qdata_aggregate_multiple_values_to_accumulator(cubthread::entry *thread_p, cubxasl::aggregate_accumulator *acc, cubxasl::aggregate_accumulator_domain *domain, FUNC_TYPE func_type, tp_domain *func_domain, std::vector< DB_VALUE > &db_values)
static void error(const char *msg)
#define DB_DEFAULT_PRECISION
void qfile_close_scan(THREAD_ENTRY *thread_p, QFILE_LIST_SCAN_ID *scan_id_p)
unsigned char compressed_need_clear
unsigned int mht_get_hash_number(const int ht_size, const DB_VALUE *val)
static int qdata_aggregate_interpolation(cubthread::entry *thread_p, cubxasl::aggregate_list_node *agg_p, QFILE_LIST_SCAN_ID *scan_id)
int pr_clone_value(const DB_VALUE *src, DB_VALUE *dest)
cubxasl::aggregate_accumulator * accumulators
int qfile_add_item_to_list(THREAD_ENTRY *thread_p, char *item_p, int item_size, QFILE_LIST_ID *list_id_p)
static int qdata_calculate_aggregate_cume_dist_percent_rank(cubthread::entry *thread_p, cubxasl::aggregate_list_node *agg_p, VAL_DESCR *val_desc_p)
#define BTID_COPY(btid_ptr1, btid_ptr2)
static int qdata_update_agg_interpolation_func_value_and_domain(cubxasl::aggregate_list_node *agg_p, DB_VALUE *val)
int qfile_copy_tuple_descr_to_tuple(THREAD_ENTRY *thread_p, QFILE_TUPLE_DESCRIPTOR *tpl_descr, QFILE_TUPLE_RECORD *tplrec)
bool prm_get_bool_value(PARAM_ID prm_id)
int qfile_copy_list_id(QFILE_LIST_ID *dest_list_id_p, const QFILE_LIST_ID *src_list_id_p, bool is_include_sort_list)
int pr_value_mem_size(const DB_VALUE *value)
QFILE_LIST_ID * qfile_open_list(THREAD_ENTRY *thread_p, QFILE_TUPLE_VALUE_TYPE_LIST *type_list_p, SORT_LIST *sort_list_p, QUERY_ID query_id, int flag)
#define DB_VALUE_TYPE(value)
int db_make_null(DB_VALUE *value)
QFILE_LIST_ID * qfile_sort_list(THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id_p, SORT_LIST *sort_list_p, QUERY_OPTIONS option, bool do_close)
void qfile_close_list(THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id_p)
#define DB_IS_NULL(value)
int db_make_double(DB_VALUE *value, const DB_C_DOUBLE num)
static int qdata_aggregate_value_to_accumulator(cubthread::entry *thread_p, cubxasl::aggregate_accumulator *acc, cubxasl::aggregate_accumulator_domain *domain, FUNC_TYPE func_type, tp_domain *func_domain, db_value *value, bool is_acc_to_acc)
#define ER_ARG_CAN_NOT_BE_CASTED_TO_DESIRED_DOMAIN
#define BTID_IS_NULL(btid)
int setval(DB_VALUE *dest, const DB_VALUE *src, bool copy) const
int db_make_int(DB_VALUE *value, const int num)
void qdata_load_agg_hvalue_in_agg_list(aggregate_hash_value *value, cubxasl::aggregate_list_node *agg_list, bool copy_vals)
int qdata_free_agg_hentry(const void *key, void *data, void *args)
#define TP_DOMAIN_CODESET(dom)
int db_accumulate_json_objectagg(const DB_VALUE *json_key, const DB_VALUE *json_db_val, DB_VALUE *json_res)
int qdata_save_agg_htable_to_list(cubthread::entry *thread_p, mht_table *hash_table, qfile_list_id *tuple_list_id, qfile_list_id *partial_list_id, db_value *temp_dbval_array)
#define ER_QPROC_INVALID_DATATYPE
int qdata_initialize_aggregate_list(cubthread::entry *thread_p, cubxasl::aggregate_list_node *agg_list_p, QUERY_ID query_id)
aggregate_percentile_info percentile
JSON_DOC * db_json_allocate_doc()
int or_advance(OR_BUF *buf, int offset)
const char * fcode_get_uppercase_name(FUNC_TYPE ftype)
regu_variable_list_node * operands
int db_value_domain_init(DB_VALUE *value, const DB_TYPE type, const int precision, const int scale)
#define TP_DOMAIN_COLLATION_FLAG(dom)
int qdata_concatenate_dbval(THREAD_ENTRY *thread_p, DB_VALUE *dbval1_p, DB_VALUE *dbval2_p, DB_VALUE *result_p, tp_domain *domain_p, const int max_allowed_size, const char *warning_context)
int qfile_add_tuple_to_list(THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id_p, QFILE_TUPLE tuple)