CUBRID Engine  latest
cursor.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  * Cursor (Client Side)
21  */
22 
23 #ifndef _CURSOR_H_
24 #define _CURSOR_H_
25 
26 #ident "$Id$"
27 
28 #include "config.h"
29 
30 #include "error_manager.h"
31 #include "query_list.h"
32 #include "storage_common.h"
33 
34 // forward definitions
35 struct or_buf;
36 
37 enum
38 {
42 };
43 
44 typedef enum
45 {
46  C_BEFORE = 1,
50 
51 typedef struct cursor_id CURSOR_ID; /* Cursor Identifier */
52 struct cursor_id
53 {
54  QUERY_ID query_id; /* Query id for this cursor */
55  QFILE_LIST_ID list_id; /* List file identifier */
56  OID *oid_set; /* Cursor current page oid set */
57  MOP *mop_set; /* Cursor current page MOP set */
58  int oid_ent_count; /* Number of OIDs in the oid set */
59  CURSOR_POSITION position; /* Cursor position */
60  VPID current_vpid; /* Current real page identifier */
61  VPID next_vpid; /* Next page identifier */
62  VPID header_vpid; /* Header page identifier in buffer area */
63  int on_overflow; /* cursor buffer has an overflow page */
64  int tuple_no; /* Tuple position number */
65  QFILE_TUPLE_RECORD tuple_record; /* Tuple descriptor */
66  char *buffer; /* Current page */
67  char *buffer_area;
69  int buffer_tuple_count; /* Tuple count in current page */
70  int current_tuple_no; /* Tuple position in current page */
71  int current_tuple_offset; /* Tuple offset in current page */
72  char *current_tuple_p; /* Current tuple */
73  int *oid_col_no; /* Column numbers of OID's */
74  int current_tuple_length; /* Current tuple length */
75  int oid_col_no_cnt; /* Number of values in oid_col_no */
77  int current_tuple_value_index; /* Current tplvalue index within current_tuple_p */
78  char *current_tuple_value_p; /* Current tplvalue pointer within current_tuple_p */
79  bool is_updatable; /* Cursor updatable ? */
80  bool is_oid_included; /* Cursor has first hidden oid col. */
81  bool is_copy_tuple_value; /* get tplvalue: true = copy(default), false = peek */
82 };
83 
84 extern int cursor_copy_list_id (QFILE_LIST_ID * dest_list_id, const QFILE_LIST_ID * src_list_id);
85 
86 #define cursor_free_list_id(list_id) \
87  do { \
88  QFILE_LIST_ID *list_id_p = (QFILE_LIST_ID *) (list_id); \
89  if (list_id_p != NULL) { \
90  if (list_id_p->last_pgptr) { \
91  free_and_init (list_id_p->last_pgptr); \
92  } \
93  if (list_id_p->tpl_descr.f_valp) { \
94  free_and_init (list_id_p->tpl_descr.f_valp); \
95  } \
96  if (list_id_p->tpl_descr.clear_f_val_at_clone_decache) { \
97  free_and_init (list_id_p->tpl_descr.clear_f_val_at_clone_decache); \
98  } \
99  if (list_id_p->sort_list) { \
100  free_and_init (list_id_p->sort_list); \
101  } \
102  if (list_id_p->type_list.domp) { \
103  free_and_init (list_id_p->type_list.domp); \
104  } \
105  } \
106  } while (0)
107 
108 #define cursor_free_self_list_id(list_id) \
109  do { \
110  cursor_free_list_id (list_id); \
111  free_and_init (list_id); \
112  } while (0)
113 
114 extern int cursor_copy_vobj_to_dbvalue (struct or_buf *buf, DB_VALUE * db_value);
115 extern int cursor_fetch_page_having_tuple (CURSOR_ID * cursor_id, VPID * vpid, int position, int offset);
116 #if defined (WINDOWS) || defined (CUBRID_DEBUG)
117 extern void cursor_print_list (QUERY_ID query_id, QFILE_LIST_ID * list_id);
118 #endif
119 extern bool cursor_open (CURSOR_ID * cursor_id, QFILE_LIST_ID * list_id, bool updatable, bool oid_included);
120 extern int cursor_next_tuple (CURSOR_ID * cursor_id);
121 extern int cursor_get_tuple_value_list (CURSOR_ID * cursor_id, int size, DB_VALUE * value_list);
122 extern void cursor_close (CURSOR_ID * cursor_id);
124 extern bool cursor_set_copy_tuple_value (CURSOR_ID * cursor_id, bool copy);
126 extern void cursor_free (CURSOR_ID * cursor_id);
127 extern int cursor_get_current_oid (CURSOR_ID * cursor_id, DB_VALUE * crs_value);
128 extern int cursor_prev_tuple (CURSOR_ID * cursor_id);
129 extern int cursor_first_tuple (CURSOR_ID * cursor_id);
130 extern int cursor_last_tuple (CURSOR_ID * cursor_id);
131 extern int cursor_get_tuple_value (CURSOR_ID * result, int index, DB_VALUE * value);
132 
133 #endif /* _CURSOR_H_ */
VPID next_vpid
Definition: cursor.h:61
DB_FETCH_MODE cursor_set_prefetch_lock_mode(CURSOR_ID *cursor_id, DB_FETCH_MODE mode)
Definition: cursor.c:1267
int oid_col_no_cnt
Definition: cursor.h:75
int cursor_set_oid_columns(CURSOR_ID *cursor_id, int *oid_col_no, int oid_col_no_cnt)
Definition: cursor.c:1322
char * current_tuple_p
Definition: cursor.h:72
void cursor_close(CURSOR_ID *cursor_id)
Definition: cursor.c:1381
VPID header_vpid
Definition: cursor.h:62
Definition: cursor.h:47
char * buffer_area
Definition: cursor.h:67
DB_FETCH_MODE prefetch_lock_mode
Definition: cursor.h:76
int cursor_get_tuple_value_list(CURSOR_ID *cursor_id, int size, DB_VALUE *value_list)
Definition: cursor.c:1778
int on_overflow
Definition: cursor.h:63
bool cursor_open(CURSOR_ID *cursor_id, QFILE_LIST_ID *list_id, bool updatable, bool oid_included)
Definition: cursor.c:1194
VPID current_vpid
Definition: cursor.h:60
int cursor_prev_tuple(CURSOR_ID *cursor_id)
Definition: cursor.c:1568
bool is_updatable
Definition: cursor.h:79
char * current_tuple_value_p
Definition: cursor.h:78
int cursor_first_tuple(CURSOR_ID *cursor_id)
Definition: cursor.c:1652
CURSOR_POSITION
Definition: cursor.h:44
int cursor_copy_list_id(QFILE_LIST_ID *dest_list_id, const QFILE_LIST_ID *src_list_id)
Definition: cursor.c:105
int buffer_tuple_count
Definition: cursor.h:69
int cursor_fetch_page_having_tuple(CURSOR_ID *cursor_id, VPID *vpid, int position, int offset)
Definition: cursor.c:992
static enum scanner_mode mode
int buffer_filled_size
Definition: cursor.h:68
QUERY_ID query_id
Definition: cursor.h:54
bool cursor_set_copy_tuple_value(CURSOR_ID *cursor_id, bool copy)
Definition: cursor.c:1291
int current_tuple_offset
Definition: cursor.h:71
bool is_copy_tuple_value
Definition: cursor.h:81
bool is_oid_included
Definition: cursor.h:80
int cursor_next_tuple(CURSOR_ID *cursor_id)
Definition: cursor.c:1482
int tuple_no
Definition: cursor.h:64
int cursor_get_current_oid(CURSOR_ID *cursor_id, DB_VALUE *crs_value)
Definition: cursor.c:1449
int cursor_get_tuple_value(CURSOR_ID *result, int index, DB_VALUE *value)
Definition: cursor.c:1734
char * buffer
Definition: cursor.h:66
int cursor_last_tuple(CURSOR_ID *cursor_id)
Definition: cursor.c:1696
QFILE_TUPLE_RECORD tuple_record
Definition: cursor.h:65
MOP * mop_set
Definition: cursor.h:57
int current_tuple_value_index
Definition: cursor.h:77
QFILE_LIST_ID list_id
Definition: cursor.h:55
int oid_ent_count
Definition: cursor.h:58
int current_tuple_no
Definition: cursor.h:70
DB_FETCH_MODE
Definition: dbtype_def.h:215
int cursor_copy_vobj_to_dbvalue(struct or_buf *buf, DB_VALUE *db_value)
Definition: cursor.c:334
void cursor_free(CURSOR_ID *cursor_id)
Definition: cursor.c:1342
CURSOR_POSITION position
Definition: cursor.h:59
Definition: cursor.h:48
OID * oid_set
Definition: cursor.h:56
int current_tuple_length
Definition: cursor.h:74
int * oid_col_no
Definition: cursor.h:73