CUBRID Engine  latest
query_executor.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 
20 /*
21  * XASL (eXtented Access Specification Language) interpreter internal
22  * definitions.
23  * For a brief description of ASL principles see "Access Path Selection in a
24  * Relational Database Management System" by P. Griffiths Selinger et al
25  */
26 
27 #ifndef _QUERY_EXECUTOR_H_
28 #define _QUERY_EXECUTOR_H_
29 
30 #ident "$Id$"
31 
32 #if !defined (SERVER_MODE) && !defined (SA_MODE)
33 #error Belongs to server module
34 #endif /* !defined (SERVER_MODE) && !defined (SA_MODE) */
35 
36 #include "dbtype_def.h"
37 #include "query_list.h"
38 #include "system.h"
39 #include "thread_compat.hpp"
40 
41 #include <time.h>
42 
43 // forward definitions
44 struct func_pred;
46 struct qfile_list_id;
47 struct qfile_tuple_record;
48 class regu_variable_node;
49 struct tp_domain;
50 struct valptr_list_node;
51 struct xasl_node;
52 struct xasl_state;
54 
55 #define QEXEC_NULL_COMMAND_ID -1 /* Invalid command identifier */
56 
59 {
62 };
63 
64 typedef struct val_descr VAL_DESCR;
65 struct val_descr
66 {
67  DB_VALUE *dbval_ptr; /* Array of values */
68  int dbval_cnt; /* Value Count */
71  long lrand;
72  double drand;
73  XASL_STATE *xasl_state; /* XASL_STATE pointer */
74 }; /* Value Descriptor */
75 
76 extern qfile_list_id *qexec_execute_query (THREAD_ENTRY * thread_p, xasl_node * xasl, int dbval_cnt,
77  const DB_VALUE * dbval_ptr, QUERY_ID query_id);
78 extern int qexec_execute_mainblock (THREAD_ENTRY * thread_p, xasl_node * xasl, xasl_state * xstate,
79  UPDDEL_CLASS_INSTANCE_LOCK_INFO * p_class_instance_lock_info);
80 extern int qexec_start_mainblock_iterations (THREAD_ENTRY * thread_p, xasl_node * xasl, xasl_state * xstate);
81 extern int qexec_clear_xasl (THREAD_ENTRY * thread_p, xasl_node * xasl, bool is_final);
82 extern int qexec_clear_pred_context (THREAD_ENTRY * thread_p, pred_expr_with_context * pred_filter,
83  bool dealloc_dbvalues);
84 extern int qexec_clear_func_pred (THREAD_ENTRY * thread_p, func_pred * pred_filter);
86 
88 #if defined(CUBRID_DEBUG)
89 extern void get_xasl_dumper_linked_in ();
90 #endif
91 
92 extern int qexec_clear_list_cache_by_class (THREAD_ENTRY * thread_p, const OID * class_oid);
93 
94 #if defined(CUBRID_DEBUG)
95 extern bool qdump_check_xasl_tree (xasl_node * xasl);
96 #endif /* CUBRID_DEBUG */
97 
98 extern int qexec_get_tuple_column_value (QFILE_TUPLE tpl, int index, DB_VALUE * valp, tp_domain * domain);
99 extern int qexec_insert_tuple_into_list (THREAD_ENTRY * thread_p, qfile_list_id * list_id,
100  valptr_list_node * outptr_list, val_descr * vd, qfile_tuple_record * tplrec);
102  xasl_node * xasl, xasl_node * connect_by_ptr);
103 
104 #endif /* _QUERY_EXECUTOR_H_ */
int qexec_execute_mainblock(THREAD_ENTRY *thread_p, xasl_node *xasl, xasl_state *xstate, UPDDEL_CLASS_INSTANCE_LOCK_INFO *p_class_instance_lock_info)
qfile_list_id * qexec_execute_query(THREAD_ENTRY *thread_p, xasl_node *xasl, int dbval_cnt, const DB_VALUE *dbval_ptr, QUERY_ID query_id)
int qexec_clear_list_cache_by_class(THREAD_ENTRY *thread_p, const OID *class_oid)
int qexec_clear_pred_context(THREAD_ENTRY *thread_p, pred_expr_with_context *pred_filter, bool dealloc_dbvalues)
int qexec_insert_tuple_into_list(THREAD_ENTRY *thread_p, qfile_list_id *list_id, valptr_list_node *outptr_list, val_descr *vd, qfile_tuple_record *tplrec)
void THREAD_ENTRY
int qexec_start_mainblock_iterations(THREAD_ENTRY *thread_p, xasl_node *xasl, xasl_state *xstate)
int qexec_clear_func_pred(THREAD_ENTRY *thread_p, func_pred *pred_filter)
unsigned int DB_TIMESTAMP
Definition: dbtype_def.h:759
void qexec_replace_prior_regu_vars_prior_expr(THREAD_ENTRY *thread_p, regu_variable_node *regu, xasl_node *xasl, xasl_node *connect_by_ptr)
int qexec_clear_xasl(THREAD_ENTRY *thread_p, xasl_node *xasl, bool is_final)
DB_VALUE * dbval_ptr
DB_DATETIME sys_datetime
DB_TIMESTAMP sys_epochtime
char * QFILE_TUPLE
Definition: query_list.h:281
double drand
XASL_STATE * xasl_state
int qexec_clear_partition_expression(THREAD_ENTRY *thread_p, regu_variable_node *expr)
int qexec_get_tuple_column_value(QFILE_TUPLE tpl, int index, DB_VALUE *valp, tp_domain *domain)
qfile_list_id * qexec_get_xasl_list_id(xasl_node *xasl)