CUBRID Engine  latest
query_list.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  * List files shared
22  */
23 
24 #ifndef _QUERY_LIST_H_
25 #define _QUERY_LIST_H_
26 
27 #ident "$Id$"
28 
29 #include "storage_common.h"
30 #include "object_domain.h"
31 
32 typedef enum
33 {
34  NO_JOIN = -1,
40 } JOIN_TYPE;
41 
42 #define IS_OUTER_JOIN_TYPE(t) ((t) == JOIN_LEFT || (t) == JOIN_RIGHT || (t) == JOIN_OUTER)
43 
44 /* PAGE CONSTANTS */
45 
46 /* aligned size of the field */
47 #define QFILE_PAGE_HEADER_SIZE 32
48 
49 /* offset values to access fields */
50 #define QFILE_TUPLE_COUNT_OFFSET 0
51 #define QFILE_PREV_PAGE_ID_OFFSET 4
52 #define QFILE_NEXT_PAGE_ID_OFFSET 8
53 #define QFILE_LAST_TUPLE_OFFSET 12
54 #define QFILE_OVERFLOW_PAGE_ID_OFFSET 16
55 #define QFILE_PREV_VOL_ID_OFFSET 20
56 #define QFILE_NEXT_VOL_ID_OFFSET 22
57 #define QFILE_OVERFLOW_VOL_ID_OFFSET 24
58 #define QFILE_RESERVED_OFFSET 26
59 
60 /* Invalid offset value to the page */
61 #define QFILE_NULL_PAGE_OFFSET -1
62 
63 /*
64  * READERS/WRITERS FOR PAGE FIELDS
65  */
66 
67 #define QFILE_GET_TUPLE_COUNT(ptr) \
68  OR_GET_INT ((ptr) + QFILE_TUPLE_COUNT_OFFSET)
69 
70 #define QFILE_GET_PREV_PAGE_ID(ptr) \
71  (PAGEID) OR_GET_INT ((ptr) + QFILE_PREV_PAGE_ID_OFFSET)
72 
73 #define QFILE_GET_NEXT_PAGE_ID(ptr) \
74  (PAGEID) OR_GET_INT ((ptr) + QFILE_NEXT_PAGE_ID_OFFSET)
75 
76 #define QFILE_GET_LAST_TUPLE_OFFSET(ptr) \
77  (PAGEID) OR_GET_INT ((ptr) + QFILE_LAST_TUPLE_OFFSET)
78 
79 #define QFILE_GET_OVERFLOW_PAGE_ID(ptr) \
80  (PAGEID) OR_GET_INT ((ptr) + QFILE_OVERFLOW_PAGE_ID_OFFSET)
81 
82 #define QFILE_GET_PREV_VOLUME_ID(ptr) \
83  (VOLID) OR_GET_SHORT ((ptr) + QFILE_PREV_VOL_ID_OFFSET)
84 
85 #define QFILE_GET_NEXT_VOLUME_ID(ptr) \
86  (VOLID) OR_GET_SHORT ((ptr) + QFILE_NEXT_VOL_ID_OFFSET)
87 
88 #define QFILE_GET_OVERFLOW_VOLUME_ID(ptr) \
89  (VOLID) OR_GET_SHORT ((ptr) + QFILE_OVERFLOW_VOL_ID_OFFSET)
90 
91 /*
92  * Don't change the order of reading VPID's member in 'GET_XXX_VPID' series.
93  * It is arranged for synchronization of async query execution.
94  */
95 
96 #define QFILE_GET_PREV_VPID(des,ptr) \
97  do \
98  { \
99  (des)->pageid = (PAGEID) OR_GET_INT ((ptr) + QFILE_PREV_PAGE_ID_OFFSET); \
100  (des)->volid = (VOLID) OR_GET_SHORT ((ptr) + QFILE_PREV_VOL_ID_OFFSET); \
101  } \
102  while (0)
103 
104 #define QFILE_GET_NEXT_VPID(des,ptr) \
105  do \
106  { \
107  (des)->pageid = (PAGEID) OR_GET_INT ((ptr) + QFILE_NEXT_PAGE_ID_OFFSET); \
108  (des)->volid = (VOLID) OR_GET_SHORT ((ptr) + QFILE_NEXT_VOL_ID_OFFSET); \
109  } \
110  while (0)
111 
112 #define QFILE_GET_OVERFLOW_VPID(des,ptr) \
113  do \
114  { \
115  (des)->pageid = (PAGEID) OR_GET_INT ((ptr) + QFILE_OVERFLOW_PAGE_ID_OFFSET); \
116  (des)->volid = (VOLID) OR_GET_SHORT ((ptr) + QFILE_OVERFLOW_VOL_ID_OFFSET); \
117  } \
118  while (0)
119 
120 #define QFILE_PUT_TUPLE_COUNT(ptr,val) \
121  OR_PUT_INT ((ptr) + QFILE_TUPLE_COUNT_OFFSET, (val))
122 
123 #define QFILE_PUT_PREV_PAGE_ID(ptr,val) \
124  OR_PUT_INT ((ptr) + QFILE_PREV_PAGE_ID_OFFSET, (val))
125 
126 #define QFILE_PUT_NEXT_PAGE_ID(ptr,val) \
127  OR_PUT_INT ((ptr) + QFILE_NEXT_PAGE_ID_OFFSET, (val))
128 
129 #define QFILE_PUT_LAST_TUPLE_OFFSET(ptr,val) \
130  OR_PUT_INT ((ptr) + QFILE_LAST_TUPLE_OFFSET, (val))
131 
132 #define QFILE_PUT_OVERFLOW_PAGE_ID(ptr,val) \
133  OR_PUT_INT ((ptr) + QFILE_OVERFLOW_PAGE_ID_OFFSET, (val))
134 
135 #define QFILE_PUT_PREV_VOLUME_ID(ptr,val) \
136  OR_PUT_SHORT ((ptr) + QFILE_PREV_VOL_ID_OFFSET, (val))
137 
138 #define QFILE_PUT_NEXT_VOLUME_ID(ptr,val) \
139  OR_PUT_SHORT ((ptr) + QFILE_NEXT_VOL_ID_OFFSET, (val))
140 
141 #define QFILE_PUT_OVERFLOW_VOLUME_ID(ptr,val) \
142  OR_PUT_SHORT ((ptr) + QFILE_OVERFLOW_VOL_ID_OFFSET, (val))
143 
144 /*
145  * Don't change the order of writing VPID's member in 'PUT_XXX_VPID' series.
146  * It is arranged for synchronization of async query execution.
147  */
148 
149 #define QFILE_PUT_PREV_VPID(ptr,vpid) \
150  do \
151  { \
152  OR_PUT_SHORT ((ptr) + QFILE_PREV_VOL_ID_OFFSET, (vpid)->volid); \
153  OR_PUT_INT ((ptr) + QFILE_PREV_PAGE_ID_OFFSET, (vpid)->pageid); \
154  } \
155  while (0)
156 
157 #define QFILE_PUT_NEXT_VPID(ptr,vpid) \
158  do \
159  { \
160  OR_PUT_SHORT ((ptr) + QFILE_NEXT_VOL_ID_OFFSET, (vpid)->volid); \
161  OR_PUT_INT ((ptr) + QFILE_NEXT_PAGE_ID_OFFSET, (vpid)->pageid); \
162  } \
163  while (0)
164 
165 #define QFILE_PUT_OVERFLOW_VPID(ptr,vpid) \
166  do \
167  { \
168  OR_PUT_SHORT ((ptr) + QFILE_OVERFLOW_VOL_ID_OFFSET, (vpid)->volid); \
169  OR_PUT_INT ((ptr) + QFILE_OVERFLOW_PAGE_ID_OFFSET, (vpid)->pageid); \
170  } \
171  while (0)
172 
173 #define QFILE_PUT_PREV_VPID_NULL(ptr) \
174  do \
175  { \
176  OR_PUT_SHORT ((ptr) + QFILE_PREV_VOL_ID_OFFSET, NULL_VOLID); \
177  OR_PUT_INT ((ptr) + QFILE_PREV_PAGE_ID_OFFSET, NULL_PAGEID); \
178  } \
179  while (0)
180 
181 #define QFILE_PUT_NEXT_VPID_NULL(ptr) \
182  do \
183  { \
184  OR_PUT_SHORT ((ptr) + QFILE_NEXT_VOL_ID_OFFSET, NULL_VOLID); \
185  OR_PUT_INT ((ptr) + QFILE_NEXT_PAGE_ID_OFFSET, NULL_PAGEID); \
186  } \
187  while (0)
188 
189 #define QFILE_PUT_OVERFLOW_VPID_NULL(ptr) \
190  do \
191  { \
192  OR_PUT_SHORT ((ptr) + QFILE_OVERFLOW_VOL_ID_OFFSET, NULL_VOLID); \
193  OR_PUT_INT ((ptr) + QFILE_OVERFLOW_PAGE_ID_OFFSET, NULL_PAGEID); \
194  } \
195  while (0)
196 
197 #define QFILE_COPY_VPID(ptr1, ptr2) \
198  do \
199  { \
200  (ptr1)->pageid = (ptr2)->pageid; \
201  (ptr1)->volid = (ptr2)->volid; \
202  } \
203  while (0)
204 
205 /* OVERFLOW PAGE CONSTANTS */
206 
207 #define QFILE_OVERFLOW_TUPLE_PAGE_SIZE_OFFSET 12
208 
209 #define QFILE_GET_OVERFLOW_TUPLE_PAGE_SIZE(ptr) \
210  (int) OR_GET_INT ((ptr) + QFILE_OVERFLOW_TUPLE_PAGE_SIZE_OFFSET)
211 
212 #define QFILE_PUT_OVERFLOW_TUPLE_PAGE_SIZE(ptr,val) \
213  OR_PUT_INT ((ptr) + QFILE_OVERFLOW_TUPLE_PAGE_SIZE_OFFSET, (val))
214 
215 /* QFILE_TUPLE CONSTANTS */
216 
217 #define QFILE_MAX_TUPLE_SIZE_IN_PAGE (DB_PAGESIZE - QFILE_PAGE_HEADER_SIZE)
218 
219 /* Each tuple start is aligned with MAX_ALIGNMENT
220  * Each tuple value header is aligned with MAX_ALIGNMENT,
221  * Each tuple value is aligned with MAX_ALIGNMENT
222  */
223 
224 #define QFILE_TUPLE_LENGTH_SIZE 8
225 #define QFILE_TUPLE_LENGTH_OFFSET 0
226 #define QFILE_TUPLE_PREV_LENGTH_OFFSET 4
227 
228 #define QFILE_TUPLE_VALUE_HEADER_LENGTH 8
229 #define QFILE_TUPLE_VALUE_HEADER_SIZE 8
230 #define QFILE_TUPLE_VALUE_FLAG_SIZE 4
231 #define QFILE_TUPLE_VALUE_LENGTH_SIZE 4
232 
233 #define QFILE_TUPLE_VALUE_FLAG_OFFSET 0
234 #define QFILE_TUPLE_VALUE_LENGTH_OFFSET 4
235 
236 /* READERS/WRITERS FOR QFILE_TUPLE FIELDS */
237 
238 #define QFILE_GET_TUPLE_LENGTH(tpl) \
239  OR_GET_INT ((tpl) + QFILE_TUPLE_LENGTH_OFFSET)
240 
241 #define QFILE_GET_PREV_TUPLE_LENGTH(tpl) \
242  OR_GET_INT ((tpl) + QFILE_TUPLE_PREV_LENGTH_OFFSET)
243 
244 #define QFILE_PUT_TUPLE_LENGTH(tpl,val) \
245  OR_PUT_INT ((tpl) + QFILE_TUPLE_LENGTH_OFFSET,val)
246 
247 #define QFILE_PUT_PREV_TUPLE_LENGTH(tpl,val) \
248  OR_PUT_INT ((tpl) + QFILE_TUPLE_PREV_LENGTH_OFFSET,val)
249 
250 #define QFILE_GET_TUPLE_VALUE_FLAG(ptr) \
251  (QFILE_TUPLE_VALUE_FLAG) OR_GET_INT ((ptr) + QFILE_TUPLE_VALUE_FLAG_OFFSET)
252 
253 #define QFILE_GET_TUPLE_VALUE_LENGTH(ptr) \
254  (int) OR_GET_INT ((ptr) + QFILE_TUPLE_VALUE_LENGTH_OFFSET)
255 
256 #define QFILE_PUT_TUPLE_VALUE_FLAG(ptr,val) \
257  OR_PUT_INT ((ptr) + QFILE_TUPLE_VALUE_FLAG_OFFSET, (val))
258 
259 #define QFILE_PUT_TUPLE_VALUE_LENGTH(ptr,val) \
260  OR_PUT_INT ((ptr) + QFILE_TUPLE_VALUE_LENGTH_OFFSET, (val))
261 
262 #define QFILE_GET_TUPLE_VALUE_HEADER_POSITION(tpl,ind,valp) \
263  do \
264  { \
265  int _k; \
266  (valp) = (char*) (tpl) + QFILE_TUPLE_LENGTH_SIZE; \
267  for (_k = 0; _k < (ind); _k++) \
268  { \
269  (valp) += QFILE_TUPLE_VALUE_HEADER_SIZE + QFILE_GET_TUPLE_VALUE_LENGTH ((valp)); \
270  } \
271  } \
272  while (0)
273 
274 /* Special flag set in the TUPLE_CNT field to indicate an overflow page */
275 #define QFILE_OVERFLOW_TUPLE_COUNT_FLAG -2
276 
277 /*
278  * QFILE_TUPLE FORMAT DEFINITIONS
279  */
280 
281 typedef char *QFILE_TUPLE; /* list file tuple */
282 
283 /* tuple record descriptor */
286 {
287  char *tpl; /* tuple pointer */
288  int size; /* area _allocated_ for tuple pointer */
289 };
290 
291 typedef enum
292 {
293  V_BOUND = 1,
296 
297 /* tuple value header */
300 {
301  QFILE_TUPLE_VALUE_FLAG val_flag; /* V_BOUND/V_UNBOUND? */
302  int val_len; /* length of tuple value */
303 };
304 
305 /* Type list structure */
308 {
309  TP_DOMAIN **domp; /* array of column domains */
310  int type_cnt; /* number of data types */
311 };
312 
313 /* tuple value position descriptor */
316 {
317  TP_DOMAIN *dom; /* value domain */
318  TP_DOMAIN *original_domain; /* original domain */
319  int pos_no; /* value position number */
320 };
321 
322 /*
323  * SCAN FETCH MODE
324  */
325 
326 typedef enum
327 {
328  QPROC_NO_SINGLE_INNER = 0, /* 0 or n qualified rows */
329  QPROC_SINGLE_INNER, /* 0 or 1 qualified row - currently, not used */
330  QPROC_SINGLE_OUTER, /* 1 NULL row or 1 qualified row */
331  QPROC_NO_SINGLE_OUTER /* 1 NULL row or n qualified rows */
333 
334 /* List File Merge Information */
337 {
338  JOIN_TYPE join_type; /* inner, left, right or outer */
339  QPROC_SINGLE_FETCH single_fetch; /* merge in single fetch mode */
340  int ls_column_cnt; /* join columns count */
341  int ls_pos_cnt; /* tuple value fetch count */
342  int *ls_outer_column; /* outer list join columns number */
343  int *ls_outer_unique; /* outer column values unique? */
344  /* currently, not used */
345  int *ls_inner_column; /* inner list join columns number */
346  int *ls_inner_unique; /* inner column values unique? */
347  /* currently, not used */
348  int *ls_outer_inner_list; /* outer/inner list indicators */
349  int *ls_pos_list; /* tuple value positions */
350 };
351 
352 typedef enum
353 {
354  T_UNKNOWN, /* uninitialized: not used */
355  T_SINGLE_BOUND_ITEM, /* called by qfile_add_item_to_list() */
356  T_NORMAL, /* normal case */
357  T_SORTKEY, /* called by ls_sort_put_next() */
358  T_MERGE /* called by xs_add_mergetuple() */
360 
361 /* tuple descriptor */
364 {
365  /* T_SINGLE_BOUND_ITEM */
366  char *item; /* pointer of item (i.e, single bound field tuple) */
367  int item_size; /* item size */
368 
369  /* T_NORMAL */
370  int tpl_size; /* tuple size */
371  int f_cnt; /* number of field */
372  DB_VALUE **f_valp; /* pointer of field value pointer array */
373  bool *clear_f_val_at_clone_decache; /* true, if need to clear value at clone decache */
374 
375  /* T_SORTKEY */
376  void *sortkey_info; /* casted pointer of (SORTKEY_INFO *) */
377  void *sort_rec; /* casted pointer of (SORT_REC *) */
378 
379  /* T_MERGE */
380  QFILE_TUPLE_RECORD *tplrec1; /* first tuple */
381  QFILE_TUPLE_RECORD *tplrec2; /* second tuple */
382  QFILE_LIST_MERGE_INFO *merge_info; /* tuple merge info */
383 };
384 
385 /*
386  * SORTING RELATED DEFINITIONS
387  */
388 
389 typedef enum
390 {
396 } SORT_TYPE;
397 
398 typedef enum
399 {
400  S_ASC = 1,
402 } SORT_ORDER;
403 
404 typedef enum
405 {
408 } SORT_NULLS;
409 
410 typedef struct sort_list SORT_LIST;
411 struct sort_list
412 {
413  UINT64 del_id; /* for latch-free freelist */
414  struct sort_list *local_next; /* for latch-free freelist */
415  struct sort_list *next; /* Next sort item */
416  QFILE_TUPLE_VALUE_POSITION pos_descr; /* Value position descriptor */
417  SORT_ORDER s_order; /* Ascending/Descending Order */
418  SORT_NULLS s_nulls; /* NULLS as First/Last position */
419 }; /* Sort item list */
420 
421 /*
422  * LIST FILE DEFINITIONS
423  */
424 
427 {
428  QFILE_TUPLE_VALUE_TYPE_LIST type_list; /* data type of each column */
429  SORT_LIST *sort_list; /* sort info of each column */
430  int tuple_cnt; /* total number of tuples in the file */
431  int page_cnt; /* total number of pages in the list file */
432  VPID first_vpid; /* first real page identifier */
433  VPID last_vpid; /* last real page identifier */
434  PAGE_PTR last_pgptr; /* last page pointer */
435  int last_offset; /* mark current end of last page */
436  int lasttpl_len; /* length of the last tuple file identifier NOTE: A tuple can be larger than one page
437  * therefore, this field must be int instead of a short value */
438  QUERY_ID query_id; /* Associated Query Id */
439  VFID temp_vfid; /* temp file id; duplicated from tfile_vfid */
440  struct qmgr_temp_file *tfile_vfid; /* Create a tmp file per list */
441  QFILE_TUPLE_DESCRIPTOR tpl_descr; /* tuple descriptor */
442  bool is_domain_resolved; /* domains for host var is resolved or not */
443 };
444 
445 #define QFILE_CLEAR_LIST_ID(list_id) \
446  do \
447  { \
448  (list_id)->type_list.type_cnt = 0; \
449  (list_id)->type_list.domp = NULL; \
450  (list_id)->sort_list = NULL; \
451  (list_id)->tuple_cnt = 0; \
452  (list_id)->page_cnt = 0; \
453  (list_id)->first_vpid.pageid = NULL_PAGEID; \
454  (list_id)->first_vpid.volid = NULL_VOLID; \
455  (list_id)->last_vpid.pageid = NULL_PAGEID; \
456  (list_id)->last_vpid.volid = NULL_VOLID; \
457  (list_id)->last_pgptr = NULL; \
458  (list_id)->last_offset = QFILE_NULL_PAGE_OFFSET; \
459  (list_id)->lasttpl_len = 0; \
460  (list_id)->query_id = 0; \
461  (list_id)->temp_vfid.fileid = NULL_PAGEID; \
462  (list_id)->temp_vfid.volid = NULL_VOLID; \
463  (list_id)->tfile_vfid = NULL; \
464  (list_id)->tpl_descr.item = NULL; \
465  (list_id)->tpl_descr.item_size = 0; \
466  (list_id)->tpl_descr.tpl_size = 0; \
467  (list_id)->tpl_descr.f_cnt = 0; \
468  (list_id)->tpl_descr.f_valp = NULL; \
469  (list_id)->tpl_descr.clear_f_val_at_clone_decache = NULL; \
470  (list_id)->tpl_descr.sortkey_info = NULL; \
471  (list_id)->tpl_descr.sort_rec = NULL; \
472  (list_id)->tpl_descr.tplrec1 = NULL; \
473  (list_id)->tpl_descr.tplrec2 = NULL; \
474  (list_id)->tpl_descr.merge_info = NULL; \
475  (list_id)->is_domain_resolved = false; \
476  } \
477  while (0)
478 
479 /* Tuple position structure */
482 {
483  SCAN_STATUS status; /* Scan status */
484  SCAN_POSITION position; /* Scan position */
485  VPID vpid; /* Real tuple page identifier */
486  int offset; /* Tuple offset inside the page */
487  QFILE_TUPLE tpl; /* Tuple pointer inside the page */
488  int tplno; /* Tuple number inside the page */
489 };
490 
491 #define QFILE_OUTER_LIST 0 /* outer list file indicator */
492 #define QFILE_INNER_LIST 1 /* inner list file indicator */
493 
494 /* List File Scan Identifier */
497 {
498  SCAN_STATUS status; /* Scan Status */
499  SCAN_POSITION position; /* Scan Position */
500  VPID curr_vpid; /* current real page identifier */
501  PAGE_PTR curr_pgptr; /* current page pointer */
502  QFILE_TUPLE curr_tpl; /* current tuple pointer */
503  bool keep_page_on_finish; /* flag; when set, does not free page when scan ends */
504  int curr_offset; /* current page offset */
505  int curr_tplno; /* current tuple number */
506  QFILE_TUPLE_RECORD tplrec; /* used for overflow tuple peeking */
507  QFILE_LIST_ID list_id; /* list file identifier */
508 };
509 
510 /* list file flag; denoting type and/or operation of the list file */
511 enum
512 {
517  QFILE_FLAG_ALL = 0x0100,
520 };
521 
522 #define QFILE_SET_FLAG(var, flag) ((var) |= (flag))
523 #define QFILE_CLEAR_FLAG(var, flag) ((var) &= (flag))
524 #define QFILE_IS_FLAG_SET(var, flag) ((var) & (flag))
525 #define QFILE_IS_FLAG_SET_BOTH(var, flag1, flag2) (((var) & (flag1)) && ((var) & (flag2)))
526 
527 /* SORTING RELATED DEFINITIONS */
528 
529 /* Sorted list identifier */
532 {
533  QFILE_LIST_ID *list_id; /* List File identifier */
534  int sorted; /* Has file already been sorted? */
535 };
536 
537 /* Sorting Scan Identifier */
540 {
541  QFILE_LIST_SCAN_ID *s_id; /* Scan Identifier */
542  QFILE_TUPLE_RECORD tplrec; /* Tuple Descriptor used for sorting */
543 };
544 
545 
546 typedef enum
547 {
551 
552 enum
553 {
557  RESULT_HOLDABLE = 0x0008,
559  MRO_CANDIDATE = 0x0020,
560  MRO_IS_USED = 0x0040,
562  SORT_LIMIT_USED = 0x0100,
563  XASL_TRACE_TEXT = 0x0200,
564  XASL_TRACE_JSON = 0x0400,
570  TRAN_AUTO_COMMIT = 0x000010000
571 };
572 
573 #define DO_NOT_COLLECT_EXEC_STATS(flag) ((flag) & DONT_COLLECT_EXEC_STATS)
574 
575 #define IS_XASL_TRACE_TEXT(flag) (((flag) & XASL_TRACE_TEXT) != 0)
576 #define IS_XASL_TRACE_JSON(flag) (((flag) & XASL_TRACE_JSON) != 0)
577 
578 #define IS_TRIGGER_INVOLVED(flag) (((flag) & TRIGGER_IS_INVOLVED) != 0)
579 
580 #define IS_XASL_CACHE_PINNED_REFERENCE(flag) (((flag) & XASL_CACHE_PINNED_REFERENCE) != 0)
581 #define IS_QUERY_EXECUTED_WITHOUT_DATA_BUFFERS(flag) (((flag) & EXECUTE_QUERY_WITHOUT_DATA_BUFFERS) != 0)
582 #define IS_QUERY_EXECUTE_WITH_COMMIT(flag) (((flag) & EXECUTE_QUERY_WITH_COMMIT) != 0)
583 #define IS_TRAN_AUTO_COMMIT(flag) (((flag) & TRAN_AUTO_COMMIT) != 0)
584 
585 typedef int QUERY_FLAG;
586 
587 #endif /* _QUERY_LIST_H_ */
QPROC_SINGLE_FETCH single_fetch
Definition: query_list.h:339
char * PAGE_PTR
QFILE_TUPLE_RECORD tplrec
Definition: query_list.h:506
SORT_NULLS
Definition: query_list.h:404
struct qmgr_temp_file * tfile_vfid
Definition: query_list.h:440
QFILE_TUPLE_VALUE_TYPE_LIST type_list
Definition: query_list.h:428
QUERY_ID query_id
Definition: query_list.h:438
PAGE_PTR last_pgptr
Definition: query_list.h:434
QPROC_SINGLE_FETCH
Definition: query_list.h:326
SORT_TYPE
Definition: query_list.h:389
QFILE_TUPLE_TYPE
Definition: query_list.h:352
SORT_ORDER
Definition: query_list.h:398
bool * clear_f_val_at_clone_decache
Definition: query_list.h:373
QFILE_TUPLE_DESCRIPTOR tpl_descr
Definition: query_list.h:441
JOIN_TYPE
Definition: query_list.h:32
SORT_ORDER s_order
Definition: query_list.h:417
SCAN_POSITION position
Definition: query_list.h:499
QFILE_TUPLE_RECORD * tplrec1
Definition: query_list.h:380
SCAN_STATUS
struct sort_list * next
Definition: query_list.h:415
PAGE_PTR curr_pgptr
Definition: query_list.h:501
QFILE_TUPLE_RECORD tplrec
Definition: query_list.h:542
SORT_LIST * sort_list
Definition: query_list.h:429
QFILE_TUPLE_VALUE_POSITION pos_descr
Definition: query_list.h:416
SCAN_POSITION
QFILE_TUPLE curr_tpl
Definition: query_list.h:502
bool is_domain_resolved
Definition: query_list.h:442
QFILE_TUPLE_VALUE_FLAG val_flag
Definition: query_list.h:301
QFILE_LIST_ID list_id
Definition: query_list.h:507
struct sort_list * local_next
Definition: query_list.h:414
QFILE_TUPLE_VALUE_FLAG
Definition: query_list.h:291
SCAN_STATUS status
Definition: query_list.h:483
QFILE_TUPLE_RECORD * tplrec2
Definition: query_list.h:381
SCAN_POSITION position
Definition: query_list.h:484
UINT64 del_id
Definition: query_list.h:413
SCAN_STATUS status
Definition: query_list.h:498
char * QFILE_TUPLE
Definition: query_list.h:281
QFILE_LIST_SCAN_ID * s_id
Definition: query_list.h:541
int QUERY_FLAG
Definition: query_list.h:585
SORT_NULLS s_nulls
Definition: query_list.h:418
QUERY_EXEC_MODE
Definition: query_list.h:546
QFILE_LIST_MERGE_INFO * merge_info
Definition: query_list.h:382
QFILE_LIST_ID * list_id
Definition: query_list.h:533