CUBRID Engine  latest
query_manager.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  * Query manager (Server Side)
22  */
23 
24 #ifndef _QUERY_MANAGER_H_
25 #define _QUERY_MANAGER_H_
26 
27 #ident "$Id$"
28 
29 #if !defined (SERVER_MODE) && !defined (SA_MODE)
30 #error Belongs to server module
31 #endif /* !defined (SERVER_MODE) && !defined (SA_MODE) */
32 
33 #include "dbtype_def.h"
34 #include "file_manager.h"
35 #include "list_file.h"
36 #include "storage_common.h"
37 #include "thread_compat.hpp"
38 
39 // forward definitions
40 struct xasl_cache_ent;
41 
42 #define qmgr_free_old_page_and_init(thread_p, page_p, tfile_vfidp) \
43  do \
44  { \
45  qmgr_free_old_page ((thread_p), (page_p), (tfile_vfidp)); \
46  (page_p) = NULL; \
47  } \
48  while (0)
49 
50 #define NULL_PAGEID_IN_PROGRESS -2
51 
52 typedef enum
53 {
57 
60 
61 typedef enum
62 {
63  QMGR_TRAN_NULL, /* Null transaction: a transaction not issued a query */
64  QMGR_TRAN_RUNNING, /* Running transaction */
65  QMGR_TRAN_DELAYED_START, /* Suspended transaction: waiting for all the waiting transactions to be served */
66  QMGR_TRAN_WAITING, /* Suspended transaction: waiting for a query file page to be freed. */
67  QMGR_TRAN_RESUME_TO_DEALLOCATE, /* Transaction has been resumed to deallocate all query pages. Transaction will
68  * have to restart the query */
69  QMGR_TRAN_RESUME_DUE_DEADLOCK, /* Transaction has been resumed to deallocate all query pages. The transaction
70  * was involved in a deadlock. Transaction will have to restart the query. Note
71  * that the transaction is not aborted. */
72  QMGR_TRAN_TERMINATED /* Terminated transaction */
74 
77 {
86  bool preserved; /* if temp file is preserved */
87  bool tde_encrypted; /* whether the file of temp_vfid has to be encrypted when flushing (TDE) */
88 };
89 
90 /*
91  * Arguments to pass to the routine used to wait for the next available page
92  * for streaming queries.
93  */
96 {
97  QUERY_ID query_id;
101 };
102 
103 typedef enum
104 {
114 
115 typedef enum
116 {
118  QUERY_COMPLETED, /* execution completed */
119  QUERY_CLOSED, /* cursor closed or aborted */
121 
124 {
125  QUERY_ID query_id; /* unique query identifier */
126  XASL_ID xasl_id; /* XASL tree storage identifier */
127  xasl_cache_ent *xasl_ent; /* XASL cache entry for this query */
128  QFILE_LIST_ID *list_id; /* result list file identifier */
129  QFILE_LIST_CACHE_ENTRY *list_ent; /* list cache entry for this query */
131  QMGR_TEMP_FILE *temp_vfid; /* head of per query temp file VFID */
132  int num_tmp; /* number of tmpfiles allocated */
133  int total_count; /* total number of file pages alloc'd for the entire query */
134  char *er_msg; /* pointer to error message string of last error */
135  int errid; /* errid for last error of query */
138  bool is_holdable; /* true if this query should be available */
139  bool includes_tde_class; /* true if this query include some tde class. It is from xasl node */
140 };
141 
142 extern QMGR_QUERY_ENTRY *qmgr_get_query_entry (THREAD_ENTRY * thread_p, QUERY_ID query_id, int trans_ind);
143 extern int qmgr_allocate_tran_entries (THREAD_ENTRY * thread_p, int trans_cnt);
144 extern void qmgr_dump (void);
145 extern int qmgr_initialize (THREAD_ENTRY * thread_p);
146 extern void qmgr_finalize (THREAD_ENTRY * thread_p);
147 extern void qmgr_clear_trans_wakeup (THREAD_ENTRY * thread_p, int tran_index, bool tran_died, bool is_abort);
148 #if defined(ENABLE_UNUSED_FUNCTION)
149 extern QMGR_TRAN_STATUS qmgr_get_tran_status (THREAD_ENTRY * thread_p, int tran_index);
150 extern void qmgr_set_tran_status (THREAD_ENTRY * thread_p, int tran_index, QMGR_TRAN_STATUS trans_status);
151 extern int qmgr_get_query_error_with_entry (QMGR_QUERY_ENTRY * query_entryp);
152 #endif /* ENABLE_UNUSED_FUNCTION */
153 extern void qmgr_add_modified_class (THREAD_ENTRY * thread_p, const OID * class_oid);
154 extern PAGE_PTR qmgr_get_old_page (THREAD_ENTRY * thread_p, VPID * vpidp, QMGR_TEMP_FILE * tfile_vfidp);
155 extern void qmgr_free_old_page (THREAD_ENTRY * thread_p, PAGE_PTR page_ptr, QMGR_TEMP_FILE * tfile_vfidp);
156 extern void qmgr_set_dirty_page (THREAD_ENTRY * thread_p, PAGE_PTR page_ptr, int free_page, LOG_DATA_ADDR * addrp,
157  QMGR_TEMP_FILE * tfile_vfidp);
158 extern PAGE_PTR qmgr_get_new_page (THREAD_ENTRY * thread_p, VPID * vpidp, QMGR_TEMP_FILE * tfile_vfidp);
159 extern QMGR_TEMP_FILE *qmgr_create_new_temp_file (THREAD_ENTRY * thread_p, QUERY_ID query_id,
161 extern QMGR_TEMP_FILE *qmgr_create_result_file (THREAD_ENTRY * thread_p, QUERY_ID query_id);
162 extern int qmgr_free_list_temp_file (THREAD_ENTRY * thread_p, QUERY_ID query_id, QMGR_TEMP_FILE * tfile_vfidp);
163 extern int qmgr_free_temp_file_list (THREAD_ENTRY * thread_p, QMGR_TEMP_FILE * tfile_vfidp, QUERY_ID query_id,
164  bool is_error);
165 
166 #if defined (SERVER_MODE)
167 extern bool qmgr_is_query_interrupted (THREAD_ENTRY * thread_p, QUERY_ID query_id);
168 #endif /* SERVER_MODE */
169 
170 extern void qmgr_set_query_error (THREAD_ENTRY * thread_p, QUERY_ID query_id);
171 extern void qmgr_setup_empty_list_file (char *page_buf);
172 extern int qmgr_get_temp_file_membuf_pages (QMGR_TEMP_FILE * temp_file_p);
173 extern int qmgr_get_sql_id (THREAD_ENTRY * thread_p, char **sql_id_buf, char *query, size_t sql_len);
174 extern struct drand48_data *qmgr_get_rand_buf (THREAD_ENTRY * thread_p);
175 extern QUERY_ID qmgr_get_current_query_id (THREAD_ENTRY * thread_p);
176 extern char *qmgr_get_query_sql_user_text (THREAD_ENTRY * thread_p, QUERY_ID query_id, int tran_index);
177 
178 #endif /* _QUERY_MANAGER_H_ */
void qmgr_dump(void)
char * PAGE_PTR
QMGR_TRAN_STATUS
Definition: query_manager.h:61
QFILE_LIST_CACHE_ENTRY * list_ent
QMGR_QUERY_STATUS
QFILE_LIST_ID * list_id
int errid
FILE_TYPE
Definition: file_manager.h:38
QUERY_ID query_id
Definition: query_manager.h:97
QMGR_TEMP_FILE * prev
Definition: query_manager.h:79
int num_tmp
struct drand48_data * qmgr_get_rand_buf(THREAD_ENTRY *thread_p)
QMGR_QUERY_ENTRY * qmgr_get_query_entry(THREAD_ENTRY *thread_p, QUERY_ID query_id, int trans_ind)
PAGE_PTR qmgr_get_old_page(THREAD_ENTRY *thread_p, VPID *vpidp, QMGR_TEMP_FILE *tfile_vfidp)
void qmgr_add_modified_class(THREAD_ENTRY *thread_p, const OID *class_oid)
void THREAD_ENTRY
void qmgr_finalize(THREAD_ENTRY *thread_p)
void qmgr_free_old_page(THREAD_ENTRY *thread_p, PAGE_PTR page_ptr, QMGR_TEMP_FILE *tfile_vfidp)
int qmgr_initialize(THREAD_ENTRY *thread_p)
void qmgr_clear_trans_wakeup(THREAD_ENTRY *thread_p, int tran_index, bool tran_died, bool is_abort)
QMGR_QUERY_STATUS query_status
QMGR_TEMP_FILE * qmgr_create_new_temp_file(THREAD_ENTRY *thread_p, QUERY_ID query_id, QMGR_TEMP_FILE_MEMBUF_TYPE membuf_type)
QMGR_TEMP_FILE_MEMBUF_TYPE membuf_type
Definition: query_manager.h:85
QUERY_FLAG query_flag
void qmgr_set_query_error(THREAD_ENTRY *thread_p, QUERY_ID query_id)
Definition: list_file.h:82
xasl_cache_ent * xasl_ent
bool includes_tde_class
char * er_msg
XASL_ID xasl_id
bool is_holdable
char * qmgr_get_query_sql_user_text(THREAD_ENTRY *thread_p, QUERY_ID query_id, int tran_index)
FILE_TYPE temp_file_type
Definition: query_manager.h:80
QMGR_TEMP_FILE * temp_vfid
QUERY_ID query_id
PAGE_PTR * membuf
Definition: query_manager.h:83
QMGR_QUERY_TYPE
QMGR_TEMP_FILE * tfile_vfidp
QMGR_QUERY_ENTRY * next
QMGR_TEMP_FILE * next
Definition: query_manager.h:78
int qmgr_free_list_temp_file(THREAD_ENTRY *thread_p, QUERY_ID query_id, QMGR_TEMP_FILE *tfile_vfidp)
int qmgr_get_temp_file_membuf_pages(QMGR_TEMP_FILE *temp_file_p)
int qmgr_free_temp_file_list(THREAD_ENTRY *thread_p, QMGR_TEMP_FILE *tfile_vfidp, QUERY_ID query_id, bool is_error)
QUERY_ID qmgr_get_current_query_id(THREAD_ENTRY *thread_p)
int QUERY_FLAG
Definition: query_list.h:585
PAGE_PTR qmgr_get_new_page(THREAD_ENTRY *thread_p, VPID *vpidp, QMGR_TEMP_FILE *tfile_vfidp)
void qmgr_setup_empty_list_file(char *page_buf)
int qmgr_allocate_tran_entries(THREAD_ENTRY *thread_p, int trans_cnt)
int qmgr_get_sql_id(THREAD_ENTRY *thread_p, char **sql_id_buf, char *query, size_t sql_len)
int total_count
QMGR_TEMP_FILE_MEMBUF_TYPE
Definition: query_manager.h:52
void qmgr_set_dirty_page(THREAD_ENTRY *thread_p, PAGE_PTR page_ptr, int free_page, LOG_DATA_ADDR *addrp, QMGR_TEMP_FILE *tfile_vfidp)
QMGR_TEMP_FILE * qmgr_create_result_file(THREAD_ENTRY *thread_p, QUERY_ID query_id)