MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
载入中...
搜索中...
未找到
condition_filter.h
1/* Copyright (c) 2021 OceanBase and/or its affiliates. All rights reserved.
2miniob is licensed under Mulan PSL v2.
3You can use this software according to the terms and conditions of the Mulan PSL v2.
4You may obtain a copy of Mulan PSL v2 at:
5 http://license.coscl.org.cn/MulanPSL2
6THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
7EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
8MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
9See the Mulan PSL v2 for more details. */
10
11//
12// Created by Wangyunlai on 2021/5/7.
13//
14
15#pragma once
16
17#include "sql/parser/parse.h"
18
19class Record;
20class Table;
21
22struct ConDesc
23{
24 bool is_attr; // 是否属性,false 表示是值
25 int attr_length; // 如果是属性,表示属性值长度
26 int attr_offset; // 如果是属性,表示在记录中的偏移量
27 Value value; // 如果是值类型,这里记录值的数据
28};
29
31{
32public:
33 virtual ~ConditionFilter();
34
40 virtual bool filter(const Record &rec) const = 0;
41};
42
44{
45public:
48
49 RC init(const ConDesc &left, const ConDesc &right, AttrType attr_type, CompOp comp_op);
50 RC init(Table &table, const ConditionSqlNode &condition);
51
52 virtual bool filter(const Record &rec) const;
53
54public:
55 const ConDesc &left() const
56 {
57 return left_;
58 }
59
60 const ConDesc &right() const
61 {
62 return right_;
63 }
64
65 CompOp comp_op() const
66 {
67 return comp_op_;
68 }
69
70 AttrType attr_type() const
71 {
72 return attr_type_;
73 }
74
75private:
76 ConDesc left_;
77 ConDesc right_;
78 AttrType attr_type_ = UNDEFINED;
79 CompOp comp_op_ = NO_OP;
80};
81
83{
84public:
85 CompositeConditionFilter() = default;
87
88 RC init(const ConditionFilter *filters[], int filter_num);
89 RC init(Table &table, const ConditionSqlNode *conditions, int condition_num);
90 virtual bool filter(const Record &rec) const;
91
92public:
93 int filter_num() const
94 {
95 return filter_num_;
96 }
97 const ConditionFilter &filter(int index) const
98 {
99 return *filters_[index];
100 }
101
102private:
103 RC init(const ConditionFilter *filters[], int filter_num, bool own_memory);
104
105private:
106 const ConditionFilter **filters_ = nullptr;
107 int filter_num_ = 0;
108 bool memory_owner_ = false; // filters_的内存是否由自己来控制
109};
Definition: condition_filter.h:83
virtual bool filter(const Record &rec) const
Definition: condition_filter.cpp:214
Definition: condition_filter.h:31
virtual bool filter(const Record &rec) const =0
Definition: condition_filter.h:44
virtual bool filter(const Record &rec) const
Definition: condition_filter.cpp:122
表示一个记录 当前的记录都是连续存放的空间(内存或磁盘上)。 为了提高访问的效率,record通常直接记录指向页面上的内存,但是需要保证访问这种数据时,拿着锁资源。 为了方便,也提供了复制内存的方法。可...
Definition: record.h:92
Definition: table.h:37
属性的值
Definition: value.h:40
CompOp
描述比较运算符
Definition: parse_defs.h:48
Definition: condition_filter.h:23
表示一个条件比较
Definition: parse_defs.h:67