CUBRID Engine  latest
query_reevaluation.cpp
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 // Predicate re-evaluation - part of MVCC read committed re-evaluation of modified object
21 //
22 
23 #include "query_reevaluation.hpp"
24 
25 #include "scan_manager.h"
26 
27 namespace cubquery
28 {
29  void
31  {
33  upddel_reev_data = &urd;
35  }
36 
37  void
39  {
41  select_reev_data = &scan;
43  }
44 
45  void
47  {
48  switch (sid.type)
49  {
50  case S_HEAP_SCAN:
51  // no range & key
52  range_filter = filter_info ();
53  key_filter = filter_info ();
54  scan_init_filter_info (&data_filter, &sid.s.hsid.scan_pred, &sid.s.hsid.pred_attrs, sid.val_list, sid.vd,
55  &sid.s.hsid.cls_oid, 0, NULL, NULL, NULL);
56  rest_attrs = &sid.s.hsid.rest_attrs;
57  rest_regu_list = sid.s.hsid.rest_regu_list;
58  qualification = sid.qualification;
59  break;
60 
61  case S_INDX_SCAN:
62  scan_init_filter_info (&range_filter, &sid.s.isid.range_pred, &sid.s.isid.range_attrs, sid.val_list,
63  sid.vd, &sid.s.isid.cls_oid, 0, NULL, &sid.s.isid.num_vstr, sid.s.isid.vstr_ids);
64  scan_init_filter_info (&key_filter, &sid.s.isid.key_pred, &sid.s.isid.key_attrs, sid.val_list, sid.vd,
65  &sid.s.isid.cls_oid, sid.s.isid.bt_num_attrs, sid.s.isid.bt_attr_ids,
66  &sid.s.isid.num_vstr, sid.s.isid.vstr_ids);
67  scan_init_filter_info (&data_filter, &sid.s.isid.scan_pred, &sid.s.isid.pred_attrs, sid.val_list, sid.vd,
68  &sid.s.isid.cls_oid, 0, NULL, NULL, NULL);
69  rest_attrs = &sid.s.isid.rest_attrs;
70  rest_regu_list = sid.s.isid.rest_regu_list;
71  qualification = sid.qualification;
72  break;
73 
74  default:
75  break;
76  }
77  }
78 
79  void
81  {
83  {
84  range_filter = &ureev.range_filter;
85  }
86  else
87  {
88  range_filter = NULL;
89  }
90  if (ureev.key_filter.scan_pred != NULL && ureev.key_filter.scan_pred->regu_list != NULL)
91  {
92  key_filter = &ureev.key_filter;
93  }
94  else
95  {
96  key_filter = NULL;
97  }
98  if (ureev.data_filter.scan_pred != NULL && ureev.data_filter.scan_pred->regu_list != NULL)
99  {
100  data_filter = &ureev.data_filter;
101  }
102  else
103  {
104  data_filter = NULL;
105  }
106  }
107 } // namespace cubquery
QPROC_QUALIFICATION qualification
Definition: scan_manager.h:346
val_descr * vd
Definition: scan_manager.h:350
void scan_init_filter_info(FILTER_INFO *filter_info_p, SCAN_PRED *scan_pred, SCAN_ATTRS *scan_attrs, val_list_node *val_list, VAL_DESCR *val_descr, OID *class_oid, int btree_num_attrs, ATTR_ID *btree_attr_ids, int *num_vstr_ptr, ATTR_ID *vstr_ids)
Definition: scan_manager.c:660
SCAN_ATTRS pred_attrs
Definition: scan_manager.h:102
SCAN_TYPE type
Definition: scan_manager.h:332
SCAN_PRED * scan_pred
void set_filters(upddel_mvcc_cond_reeval &ureev)
SCAN_ATTRS range_attrs
Definition: scan_manager.h:212
void set_scan_reevaluation(mvcc_scan_reev_data &scan)
SCAN_ATTRS key_attrs
Definition: scan_manager.h:208
ATTR_ID * bt_attr_ids
Definition: scan_manager.h:191
SCAN_ATTRS pred_attrs
Definition: scan_manager.h:210
regu_variable_list_node * regu_list
HEAP_SCAN_ID hsid
Definition: scan_manager.h:354
#define NULL
Definition: freelistheap.h:34
mvcc_scan_reev_data * select_reev_data
regu_variable_list_node * rest_regu_list
Definition: scan_manager.h:213
SCAN_PRED scan_pred
Definition: scan_manager.h:209
val_list_node * val_list
Definition: scan_manager.h:349
void set_update_reevaluation(mvcc_update_reev_data &urd)
SCAN_PRED range_pred
Definition: scan_manager.h:211
SCAN_ATTRS rest_attrs
Definition: scan_manager.h:214
regu_variable_list_node * rest_regu_list
Definition: scan_manager.h:103
union scan_id_struct::@153 s
SCAN_PRED scan_pred
Definition: scan_manager.h:101
mvcc_update_reev_data * upddel_reev_data
SCAN_PRED key_pred
Definition: scan_manager.h:207
INDX_SCAN_ID isid
Definition: scan_manager.h:356
ATTR_ID * vstr_ids
Definition: scan_manager.h:193
SCAN_ATTRS rest_attrs
Definition: scan_manager.h:104