CUBRID Engine  latest
query_opfunc.h
Go to the documentation of this file.
1 /*
2  * Copyright 2008 Search Solution Corporation
3  * Copyright 2016 CUBRID Corporation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #ifndef _QUERY_OPFUNC_H_
20 #define _QUERY_OPFUNC_H_
21 
22 #ident "$Id$"
23 
24 #if !defined (SERVER_MODE) && !defined (SA_MODE)
25 #error Belongs to server module
26 #endif /* !defined (SERVER_MODE) && !defined (SA_MODE) */
27 
28 #include "dbtype_def.h"
29 #include "query_list.h"
30 #include "storage_common.h"
31 #include "string_opfunc.h"
32 #include "thread_compat.hpp"
33 
34 // forward definitions
35 struct function_node;
36 class regu_variable_node;
37 struct tp_domain;
38 struct val_descr;
39 struct val_list_node;
40 struct valptr_list_node;
41 struct xasl_state;
42 
43 #define UNBOUND(x) ((x)->val_flag == V_UNBOUND || (x)->type == DB_TYPE_NULL)
44 
45 #define BOUND(x) (! UNBOUND(x))
46 
47 typedef enum
48 {
49  QPROC_TPLDESCR_SUCCESS = 1, /* success generating tuple descriptor */
50  QPROC_TPLDESCR_FAILURE = 0, /* error, give up */
51  QPROC_TPLDESCR_RETRY_SET_TYPE = -1, /* error, retry for SET data-type */
52  QPROC_TPLDESCR_RETRY_BIG_REC = -2 /* error, retry for BIG RECORD */
54 
55 extern void qdata_set_value_list_to_null (val_list_node * val_list);
56 extern bool qdata_copy_db_value (DB_VALUE * dbval1, const DB_VALUE * dbval2);
57 
58 extern int qdata_copy_db_value_to_tuple_value (DB_VALUE * dbval, bool clear_compressed_string, char *tvalp,
59  int *tval_size);
60 extern int qdata_copy_valptr_list_to_tuple (THREAD_ENTRY * thread_p, valptr_list_node * valptr_list, val_descr * vd,
61  qfile_tuple_record * tplrec);
63  valptr_list_node * valptr_list, val_descr * vd,
65 extern int qdata_set_valptr_list_unbound (THREAD_ENTRY * thread_p, valptr_list_node * valptr_list, val_descr * vd);
66 
67 extern int qdata_add_dbval (DB_VALUE * dbval1, DB_VALUE * dbval2, DB_VALUE * res, tp_domain * domain);
68 extern int qdata_concatenate_dbval (THREAD_ENTRY * thread_p, DB_VALUE * dbval1, DB_VALUE * dbval2, DB_VALUE * res,
69  tp_domain * domain, const int max_allowed_size, const char *warning_context);
70 extern int qdata_increment_dbval (DB_VALUE * dbval1, DB_VALUE * res, int incval);
71 extern int qdata_subtract_dbval (DB_VALUE * dbval1, DB_VALUE * dbval2, DB_VALUE * res, tp_domain * domain);
72 extern int qdata_multiply_dbval (DB_VALUE * dbval1, DB_VALUE * dbval2, DB_VALUE * res, tp_domain * domain);
73 extern int qdata_divide_dbval (DB_VALUE * dbval1, DB_VALUE * dbval2, DB_VALUE * res, tp_domain * domain);
74 extern int qdata_unary_minus_dbval (DB_VALUE * res, DB_VALUE * dbval1);
75 extern int qdata_extract_dbval (const MISC_OPERAND extr_operand, DB_VALUE * dbval, DB_VALUE * res, tp_domain * domain);
76 extern int qdata_strcat_dbval (DB_VALUE * dbval1, DB_VALUE * dbval2, DB_VALUE * res, tp_domain * domain);
77 
78 extern int qdata_get_single_tuple_from_list_id (THREAD_ENTRY * thread_p, qfile_list_id * list_id,
79  val_list_node * single_tuple);
80 extern int qdata_get_valptr_type_list (THREAD_ENTRY * thread_p, valptr_list_node * valptr_list,
81  qfile_tuple_value_type_list * type_list);
82 extern int qdata_evaluate_function (THREAD_ENTRY * thread_p, regu_variable_node * func, val_descr * vd, OID * obj_oid,
83  QFILE_TUPLE tpl);
84 
85 
86 #if defined (ENABLE_UNUSED_FUNCTION)
87 extern void regu_set_error_with_one_args (int err_type, const char *infor);
88 #endif
89 extern void regu_set_global_error (void);
90 
91 extern bool qdata_evaluate_connect_by_root (THREAD_ENTRY * thread_p, void *xasl_p, regu_variable_node * regu_p,
92  DB_VALUE * result_val_p, val_descr * vd);
93 extern bool qdata_evaluate_qprior (THREAD_ENTRY * thread_p, void *xasl_p, regu_variable_node * regu_p,
94  DB_VALUE * result_val_p, val_descr * vd);
95 extern bool qdata_evaluate_sys_connect_by_path (THREAD_ENTRY * thread_p, void *xasl_p, regu_variable_node * regu_p,
96  DB_VALUE * value_char, DB_VALUE * result_p, val_descr * vd);
97 extern int qdata_bit_not_dbval (DB_VALUE * dbval, DB_VALUE * res, tp_domain * domain);
98 extern int qdata_bit_and_dbval (DB_VALUE * dbval1, DB_VALUE * dbval2, DB_VALUE * res, tp_domain * domain);
99 extern int qdata_bit_or_dbval (DB_VALUE * dbval1, DB_VALUE * dbval2, DB_VALUE * res, tp_domain * domain);
100 extern int qdata_bit_xor_dbval (DB_VALUE * dbval1, DB_VALUE * dbval2, DB_VALUE * res, tp_domain * domain);
101 extern int qdata_bit_shift_dbval (DB_VALUE * dbval1, DB_VALUE * dbval2, OPERATOR_TYPE op, DB_VALUE * res,
102  tp_domain * domain);
103 extern int qdata_divmod_dbval (DB_VALUE * dbval1, DB_VALUE * dbval2, OPERATOR_TYPE op, DB_VALUE * res,
104  tp_domain * domain);
105 
106 extern int qdata_list_dbs (THREAD_ENTRY * thread_p, DB_VALUE * result_p, tp_domain * domain_p);
107 extern int qdata_regu_list_to_regu_array (function_node * function_p, const int array_size,
108  regu_variable_node * regu_array[], int *num_regu);
109 extern int qdata_get_cardinality (THREAD_ENTRY * thread_p, DB_VALUE * db_class_name, DB_VALUE * db_index_name,
110  DB_VALUE * db_key_position, DB_VALUE * result_p);
111 extern int qdata_tuple_to_values_array (THREAD_ENTRY * thread_p, qfile_tuple_descriptor * tuple, DB_VALUE ** values);
112 extern int qdata_get_tuple_value_size_from_dbval (DB_VALUE * dbval_p);
113 extern int qdata_apply_interpolation_function_coercion (DB_VALUE * f_value, tp_domain ** result_dom, DB_VALUE * result,
114  FUNC_TYPE function);
115 extern int qdata_interpolation_function_values (DB_VALUE * f_value, DB_VALUE * c_value, double row_num_d,
116  double f_row_num_d, double c_row_num_d, tp_domain ** result_dom,
117  DB_VALUE * result, FUNC_TYPE function);
119  tp_domain * domain, int pos, double row_num_d, double f_row_num_d,
120  double c_row_num_d, DB_VALUE * result, tp_domain ** result_dom,
121  FUNC_TYPE function);
122 extern int qdata_update_interpolation_func_value_and_domain (DB_VALUE * src_val, DB_VALUE * dest_val,
123  tp_domain ** domain);
124 
125 #endif /* _QUERY_OPFUNC_H_ */
int qdata_bit_shift_dbval(DB_VALUE *dbval1, DB_VALUE *dbval2, OPERATOR_TYPE op, DB_VALUE *res, tp_domain *domain)
int qdata_concatenate_dbval(THREAD_ENTRY *thread_p, DB_VALUE *dbval1, DB_VALUE *dbval2, DB_VALUE *res, tp_domain *domain, const int max_allowed_size, const char *warning_context)
int qdata_get_valptr_type_list(THREAD_ENTRY *thread_p, valptr_list_node *valptr_list, qfile_tuple_value_type_list *type_list)
int qdata_copy_valptr_list_to_tuple(THREAD_ENTRY *thread_p, valptr_list_node *valptr_list, val_descr *vd, qfile_tuple_record *tplrec)
Definition: query_opfunc.c:434
void regu_set_global_error(void)
int qdata_list_dbs(THREAD_ENTRY *thread_p, DB_VALUE *result_p, tp_domain *domain_p)
int qdata_multiply_dbval(DB_VALUE *dbval1, DB_VALUE *dbval2, DB_VALUE *res, tp_domain *domain)
bool qdata_evaluate_qprior(THREAD_ENTRY *thread_p, void *xasl_p, regu_variable_node *regu_p, DB_VALUE *result_val_p, val_descr *vd)
bool qdata_evaluate_connect_by_root(THREAD_ENTRY *thread_p, void *xasl_p, regu_variable_node *regu_p, DB_VALUE *result_val_p, val_descr *vd)
FUNC_TYPE
int qdata_set_valptr_list_unbound(THREAD_ENTRY *thread_p, valptr_list_node *valptr_list, val_descr *vd)
Definition: query_opfunc.c:622
int qdata_interpolation_function_values(DB_VALUE *f_value, DB_VALUE *c_value, double row_num_d, double f_row_num_d, double c_row_num_d, tp_domain **result_dom, DB_VALUE *result, FUNC_TYPE function)
int qdata_increment_dbval(DB_VALUE *dbval1, DB_VALUE *res, int incval)
int qdata_evaluate_function(THREAD_ENTRY *thread_p, regu_variable_node *func, val_descr *vd, OID *obj_oid, QFILE_TUPLE tpl)
int qdata_strcat_dbval(DB_VALUE *dbval1, DB_VALUE *dbval2, DB_VALUE *res, tp_domain *domain)
int qdata_tuple_to_values_array(THREAD_ENTRY *thread_p, qfile_tuple_descriptor *tuple, DB_VALUE **values)
int qdata_unary_minus_dbval(DB_VALUE *res, DB_VALUE *dbval1)
int qdata_copy_db_value_to_tuple_value(DB_VALUE *dbval, bool clear_compressed_string, char *tvalp, int *tval_size)
Definition: query_opfunc.c:353
void THREAD_ENTRY
int qdata_get_tuple_value_size_from_dbval(DB_VALUE *dbval_p)
int qdata_regu_list_to_regu_array(function_node *function_p, const int array_size, regu_variable_node *regu_array[], int *num_regu)
OPERATOR_TYPE
QPROC_TPLDESCR_STATUS
Definition: query_opfunc.h:47
QPROC_TPLDESCR_STATUS qdata_generate_tuple_desc_for_valptr_list(THREAD_ENTRY *thread_p, valptr_list_node *valptr_list, val_descr *vd, qfile_tuple_descriptor *tdp)
Definition: query_opfunc.c:538
int qdata_bit_or_dbval(DB_VALUE *dbval1, DB_VALUE *dbval2, DB_VALUE *res, tp_domain *domain)
bool qdata_copy_db_value(DB_VALUE *dbval1, const DB_VALUE *dbval2)
Definition: query_opfunc.c:310
int qdata_divmod_dbval(DB_VALUE *dbval1, DB_VALUE *dbval2, OPERATOR_TYPE op, DB_VALUE *res, tp_domain *domain)
int qdata_update_interpolation_func_value_and_domain(DB_VALUE *src_val, DB_VALUE *dest_val, tp_domain **domain)
int qdata_extract_dbval(const MISC_OPERAND extr_operand, DB_VALUE *dbval, DB_VALUE *res, tp_domain *domain)
bool qdata_evaluate_sys_connect_by_path(THREAD_ENTRY *thread_p, void *xasl_p, regu_variable_node *regu_p, DB_VALUE *value_char, DB_VALUE *result_p, val_descr *vd)
void qdata_set_value_list_to_null(val_list_node *val_list)
Definition: query_opfunc.c:280
int qdata_subtract_dbval(DB_VALUE *dbval1, DB_VALUE *dbval2, DB_VALUE *res, tp_domain *domain)
int qdata_apply_interpolation_function_coercion(DB_VALUE *f_value, tp_domain **result_dom, DB_VALUE *result, FUNC_TYPE function)
int qdata_get_cardinality(THREAD_ENTRY *thread_p, DB_VALUE *db_class_name, DB_VALUE *db_index_name, DB_VALUE *db_key_position, DB_VALUE *result_p)
char * QFILE_TUPLE
Definition: query_list.h:281
VAL_DESCR vd
int qdata_add_dbval(DB_VALUE *dbval1, DB_VALUE *dbval2, DB_VALUE *res, tp_domain *domain)
int qdata_get_single_tuple_from_list_id(THREAD_ENTRY *thread_p, qfile_list_id *list_id, val_list_node *single_tuple)
int qdata_divide_dbval(DB_VALUE *dbval1, DB_VALUE *dbval2, DB_VALUE *res, tp_domain *domain)
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)
int qdata_bit_xor_dbval(DB_VALUE *dbval1, DB_VALUE *dbval2, DB_VALUE *res, tp_domain *domain)
int qdata_bit_not_dbval(DB_VALUE *dbval, DB_VALUE *res, tp_domain *domain)
MISC_OPERAND
int qdata_bit_and_dbval(DB_VALUE *dbval1, DB_VALUE *dbval2, DB_VALUE *res, tp_domain *domain)