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 { return left_; }
56 const ConDesc &right() const { return right_; }
57
58 CompOp comp_op() const { return comp_op_; }
59 AttrType attr_type() const { return attr_type_; }
60
61private:
62 ConDesc left_;
63 ConDesc right_;
64 AttrType attr_type_ = AttrType::UNDEFINED;
65 CompOp comp_op_ = NO_OP;
66};
67
69{
70public:
71 CompositeConditionFilter() = default;
73
74 RC init(const ConditionFilter *filters[], int filter_num);
75 RC init(Table &table, const ConditionSqlNode *conditions, int condition_num);
76
77 virtual bool filter(const Record &rec) const;
78
79public:
80 int filter_num() const { return filter_num_; }
81 const ConditionFilter &filter(int index) const { return *filters_[index]; }
82
83private:
84 RC init(const ConditionFilter *filters[], int filter_num, bool own_memory);
85
86private:
87 const ConditionFilter **filters_ = nullptr;
88 int filter_num_ = 0;
89 bool memory_owner_ = false; // filters_的内存是否由自己来控制
90};
Definition: condition_filter.h:69
virtual bool filter(const Record &rec) const
Definition: condition_filter.cpp:205
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:120
表示一个记录
Definition: record.h:101
Definition: table.h:42
属性的值
Definition: value.h:30
CompOp
描述比较运算符
Definition: parse_defs.h:47
Definition: condition_filter.h:23
表示一个条件比较
Definition: parse_defs.h:66