80 if (list_id_p ==
NULL)
114 char *disk_repr_p =
NULL;
212 if (pr_type_p ==
NULL)
324 opr_dbval_p = &dbval;
333 opr_dbval_p = &dbval;
345 opr_dbval_p = &dbval;
456 opr_dbval_p = &dbval;
484 if (pr_type_p ==
NULL)
653 dom_status =
tp_value_cast (&dbval, &dbval, tmp_domain_p,
false);
659 dom_status =
tp_value_cast (&dbval, &dbval, tmp_domain_p,
false);
667 dom_status =
tp_value_cast (&dbval, &dbval, tmp_domain_p,
false);
674 "DOUBLE, DATETIME, TIME");
679 func_p->
domain = tmp_domain_p;
726 if (pr_type_p ==
NULL)
732 pr_type_p->
setval (func_p->
value, opr_dbval_p,
true);
760 DB_VALUE xavgval, xavg_1val, x2avgval;
761 DB_VALUE xavg2val, varval, sqr_val, dval;
796 if (func_p->
list_id != list_id_p)
890 if (tmp_pr_type ==
NULL)
945 domain_ptr = tmp_domain_ptr !=
NULL ? tmp_domain_ptr : func_p->
domain;
1070 dtmp = (dtmp < 0.0f ? 0.0f : dtmp);
1102 double row_num_d, f_row_num_d, c_row_num_d, percentile_d;
1104 double cur_group_percentile;
1113 if (tuple_count < 1)
1124 percentile_d = cur_group_percentile;
1128 percentile_d = ceil (percentile_d * tuple_count) / tuple_count;
1132 row_num_d = ((double) (tuple_count - 1)) * percentile_d;
1133 f_row_num_d = floor (row_num_d);
1137 c_row_num_d = f_row_num_d;
1141 c_row_num_d = ceil (row_num_d);
1146 f_row_num_d, c_row_num_d, ana_p->
value, &ana_p->
domain,
#define QFILE_TUPLE_VALUE_HEADER_SIZE
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
TP_DOMAIN_STATUS tp_value_coerce(const DB_VALUE *src, DB_VALUE *dest, const TP_DOMAIN *desired_domain)
analytic_ntile_function_info ntile
int db_value_coerce(const DB_VALUE *src, DB_VALUE *dest, const DB_DOMAIN *desired_domain)
int pr_data_writeval_disk_size(DB_VALUE *value)
static int qdata_analytic_interpolation(cubthread::entry *thread_p, cubxasl::analytic_list_node *ana_p, QFILE_LIST_SCAN_ID *scan_id)
QFILE_TUPLE_VALUE_TYPE_LIST type_list
int data_writeval(struct or_buf *buf, const DB_VALUE *value) const
#define ER_TF_BUFFER_OVERFLOW
int db_get_int(const DB_VALUE *value)
DB_C_DOUBLE db_get_double(const DB_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)
#define OR_BUF_INIT(buf, data, size)
#define ER_QPROC_INVALID_XASLNODE
regu_variable_node * percentile_reguvar
double cur_group_percentile
#define assert_release(e)
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)
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
TP_DOMAIN * tp_domain_resolve_value(const DB_VALUE *val, TP_DOMAIN *dbuf)
#define QPROC_IS_INTERPOLATION_FUNC(func_p)
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)
regu_variable_node operand
int qdata_multiply_dbval(DB_VALUE *dbval1_p, DB_VALUE *dbval2_p, DB_VALUE *result_p, tp_domain *domain_p)
TP_DOMAIN tp_Double_domain
int qdata_divide_dbval(DB_VALUE *dbval1_p, DB_VALUE *dbval2_p, DB_VALUE *result_p, tp_domain *domain_p)
#define QFILE_GET_TUPLE_VALUE_FLAG(ptr)
PR_TYPE * pr_type_from_id(DB_TYPE id)
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,...)
analytic_percentile_function_info percentile
int tp_domain_status_er_set(TP_DOMAIN_STATUS status, const char *file_name, const int line_no, const DB_VALUE *src, const TP_DOMAIN *domain)
void qfile_destroy_list(THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id_p)
int qdata_evaluate_analytic_func(cubthread::entry *thread_p, ANALYTIC_TYPE *func_p, VAL_DESCR *val_desc_p)
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)
#define TP_IS_NUMERIC_TYPE(typeid)
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
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)
#define QFILE_GET_TUPLE_VALUE_LENGTH(ptr)
#define QFILE_TUPLE_LENGTH_SIZE
int qdata_add_dbval(DB_VALUE *dbval1_p, DB_VALUE *dbval2_p, DB_VALUE *result_p, tp_domain *domain_p)
#define ANALYTIC_KEEP_RANK
int qdata_finalize_analytic_func(cubthread::entry *thread_p, ANALYTIC_TYPE *func_p, bool is_same_group)
#define db_private_free_and_init(thrd, ptr)
void or_init(OR_BUF *buf, char *data, int length)
#define db_private_alloc(thrd, size)
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)
int qdata_initialize_analytic_func(cubthread::entry *thread_p, ANALYTIC_TYPE *func_p, QUERY_ID query_id)
#define ANALYTIC_FUNC_CLEAR_FLAG(x, f)
struct db_domain_info::general_info general_info
#define TP_IS_CHAR_TYPE(typeid)
static void error(const char *msg)
#define DB_DEFAULT_PRECISION
#define ER_NTILE_INVALID_BUCKET_NUMBER
void qfile_close_scan(THREAD_ENTRY *thread_p, QFILE_LIST_SCAN_ID *scan_id_p)
void qfile_free_list_id(QFILE_LIST_ID *list_id_p)
analytic_function_info info
int pr_clone_value(const DB_VALUE *src, DB_VALUE *dest)
int qfile_add_item_to_list(THREAD_ENTRY *thread_p, char *item_p, int item_size, QFILE_LIST_ID *list_id_p)
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)
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)
bool qdata_copy_db_value(DB_VALUE *dest_p, const DB_VALUE *src_p)
#define ER_ARG_CAN_NOT_BE_CASTED_TO_DESIRED_DOMAIN
int setval(DB_VALUE *dest, const DB_VALUE *src, bool copy) const
int db_make_int(DB_VALUE *value, const int num)
#define ER_QPROC_INVALID_DATATYPE
const char * fcode_get_uppercase_name(FUNC_TYPE ftype)
#define ANALYTIC_FUNC_IS_FLAGED(x, f)
int db_value_domain_init(DB_VALUE *value, const DB_TYPE type, const int precision, const int scale)
#define TP_DOMAIN_COLLATION_FLAG(dom)