17#include "common/lang/string.h"
18#include "common/lang/memory.h"
19#include "common/lang/unordered_set.h"
20#include "common/value.h"
21#include "storage/field/field.h"
22#include "sql/expr/aggregator.h"
23#include "storage/common/chunk.h"
75 virtual unique_ptr<Expression>
copy()
const = 0;
117 virtual const char *
name()
const {
return name_.c_str(); }
118 virtual void set_name(
string name) { name_ =
name; }
129 virtual RC
eval(
Chunk &chunk, vector<uint8_t> &select) {
return RC::UNIMPLEMENTED; }
148 StarExpr(
const char *table_name) : table_name_(table_name) {}
151 unique_ptr<Expression>
copy()
const override {
return make_unique<StarExpr>(table_name_.c_str()); }
154 AttrType
value_type()
const override {
return AttrType::UNDEFINED; }
158 const char *table_name()
const {
return table_name_.c_str(); }
168 : table_name_(table_name), field_name_(field_name)
173 unique_ptr<Expression>
copy()
const override {
return make_unique<UnboundFieldExpr>(table_name_, field_name_); }
176 AttrType
value_type()
const override {
return AttrType::UNDEFINED; }
180 const char *table_name()
const {
return table_name_.c_str(); }
181 const char *field_name()
const {
return field_name_.c_str(); }
203 unique_ptr<Expression>
copy()
const override {
return make_unique<FieldExpr>(field_); }
206 AttrType
value_type()
const override {
return field_.attr_type(); }
209 Field &field() {
return field_; }
211 const Field &field()
const {
return field_; }
213 const char *table_name()
const {
return field_.table_name(); }
214 const char *field_name()
const {
return field_.field_name(); }
238 unique_ptr<Expression>
copy()
const override {
return make_unique<ValueExpr>(value_); }
240 RC get_value(
const Tuple &tuple,
Value &value)
const override;
249 AttrType
value_type()
const override {
return value_.attr_type(); }
252 void get_value(
Value &value)
const { value = value_; }
266 CastExpr(unique_ptr<Expression> child, AttrType cast_type);
279 unique_ptr<Expression> &child() {
return child_; }
282 RC cast(
const Value &value,
Value &cast_value)
const;
301 AttrType
value_type()
const override {
return AttrType::BOOLEANS; }
302 CompOp comp()
const {
return comp_; }
304 unique_ptr<Expression>
copy()
const override
306 return make_unique<ComparisonExpr>(comp_, left_->copy(), right_->copy());
313 RC
eval(
Chunk &chunk, vector<uint8_t> &select)
override;
315 unique_ptr<Expression> &left() {
return left_; }
316 unique_ptr<Expression> &right() {
return right_; }
330 template <
typename T>
331 RC compare_column(
const Column &left,
const Column &right, vector<uint8_t> &result)
const;
335 unique_ptr<Expression> left_;
336 unique_ptr<Expression> right_;
358 unique_ptr<Expression>
copy()
const override
360 vector<unique_ptr<Expression>> children;
361 for (
auto &child : children_) {
362 children.emplace_back(child->copy());
364 return make_unique<ConjunctionExpr>(conjunction_type_, children);
368 AttrType
value_type()
const override {
return AttrType::BOOLEANS; }
371 Type conjunction_type()
const {
return conjunction_type_; }
373 vector<unique_ptr<Expression>> &children() {
return children_; }
376 Type conjunction_type_;
377 vector<unique_ptr<Expression>> children_;
401 unique_ptr<Expression>
copy()
const override
404 return make_unique<ArithmeticExpr>(arithmetic_type_, left_->copy(), right_->copy());
406 return make_unique<ArithmeticExpr>(arithmetic_type_, left_->copy(),
nullptr);
417 return left_->value_length();
428 Type arithmetic_type()
const {
return arithmetic_type_; }
430 unique_ptr<Expression> &left() {
return left_; }
431 unique_ptr<Expression> &right() {
return right_; }
434 RC calc_value(
const Value &left_value,
const Value &right_value,
Value &value)
const;
436 RC calc_column(
const Column &left_column,
const Column &right_column,
Column &column)
const;
438 template <
bool LEFT_CONSTANT,
bool RIGHT_CONSTANT>
439 RC execute_calc(
const Column &left,
const Column &right,
Column &result, Type
type, AttrType attr_type)
const;
442 Type arithmetic_type_;
443 unique_ptr<Expression> left_;
444 unique_ptr<Expression> right_;
454 ExprType type()
const override {
return ExprType::UNBOUND_AGGREGATION; }
456 unique_ptr<Expression>
copy()
const override
458 return make_unique<UnboundAggregateExpr>(aggregate_name_.c_str(), child_->copy());
461 const char *aggregate_name()
const {
return aggregate_name_.c_str(); }
463 unique_ptr<Expression> &child() {
return child_; }
466 AttrType
value_type()
const override {
return child_->value_type(); }
469 string aggregate_name_;
470 unique_ptr<Expression> child_;
492 unique_ptr<Expression>
copy()
const override {
return make_unique<AggregateExpr>(aggregate_type_, child_->copy()); }
496 AttrType
value_type()
const override {
return child_->value_type(); }
503 Type aggregate_type()
const {
return aggregate_type_; }
505 unique_ptr<Expression> &child() {
return child_; }
507 const unique_ptr<Expression> &child()
const {
return child_; }
509 unique_ptr<Aggregator> create_aggregator()
const;
512 static RC type_from_string(
const char *type_str, Type &
type);
515 Type aggregate_type_;
516 unique_ptr<Expression> child_;
Definition: expression.h:474
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:494
int value_length() const override
表达式值的长度
Definition: expression.h:497
RC get_column(Chunk &chunk, Column &column) override
从 chunk 中获取表达式的计算结果 column
Definition: expression.cpp:530
bool equal(const Expression &other) const override
判断两个表达式是否相等
Definition: expression.cpp:541
unique_ptr< Expression > copy() const override
复制表达式
Definition: expression.h:492
AttrType value_type() const override
表达式值的类型
Definition: expression.h:496
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.cpp:569
算术表达式
Definition: expression.h:385
RC get_column(Chunk &chunk, Column &column) override
从 chunk 中获取表达式的计算结果 column
Definition: expression.cpp:443
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.cpp:423
RC try_get_value(Value &value) const override
在没有实际运行的情况下,也就是无法获取tuple的情况下,尝试获取表达式的值
Definition: expression.cpp:490
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:411
int value_length() const override
表达式值的长度
Definition: expression.h:414
AttrType value_type() const override
表达式值的类型
Definition: expression.cpp:305
bool equal(const Expression &other) const override
判断两个表达式是否相等
Definition: expression.cpp:293
unique_ptr< Expression > copy() const override
复制表达式
Definition: expression.h:401
类型转换表达式
Definition: expression.h:264
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:271
unique_ptr< Expression > child_
从这个表达式转换
Definition: expression.h:285
unique_ptr< Expression > copy() const override
复制表达式
Definition: expression.h:269
AttrType value_type() const override
表达式值的类型
Definition: expression.h:277
AttrType cast_type_
想要转换成这个类型
Definition: expression.h:286
RC try_get_value(Value &value) const override
在没有实际运行的情况下,也就是无法获取tuple的情况下,尝试获取表达式的值
Definition: expression.cpp:102
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.cpp:91
A Chunk represents a set of columns.
Definition: chunk.h:23
A column contains multiple values in contiguous memory with a specified type.
Definition: column.h:22
比较表达式
Definition: expression.h:294
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.cpp:176
AttrType value_type() const override
表达式值的类型
Definition: expression.h:301
unique_ptr< Expression > copy() const override
复制表达式
Definition: expression.h:304
RC eval(Chunk &chunk, vector< uint8_t > &select) override
根据 ComparisonExpr 获得 select 结果。 select 的长度与chunk 的行数相同,表示每一行在ComparisonExpr 计算后是否会被输出。
Definition: expression.cpp:201
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:299
RC compare_value(const Value &left, const Value &right, bool &value) const
Definition: expression.cpp:122
RC try_get_value(Value &value) const override
Definition: expression.cpp:155
联结表达式多个表达式使用同一种关系(AND或OR)来联结 当前miniob仅有AND操作
Definition: expression.h:346
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.cpp:257
unique_ptr< Expression > copy() const override
复制表达式
Definition: expression.h:358
AttrType value_type() const override
表达式值的类型
Definition: expression.h:368
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:367
表达式的抽象描述
Definition: expression.h:66
virtual const char * name() const
表达式的名字,比如是字段名称,或者用户在执行SQL语句时输入的内容
Definition: expression.h:117
virtual bool equal(const Expression &other) const
判断两个表达式是否相等
Definition: expression.h:80
int pos_
表达式在下层算子返回的 chunk 中的位置
Definition: expression.h:138
virtual AttrType value_type() const =0
表达式值的类型
virtual int pos() const
表达式在下层算子返回的 chunk 中的位置
Definition: expression.h:123
virtual int value_length() const
表达式值的长度
Definition: expression.h:112
virtual RC get_value(const Tuple &tuple, Value &value) const =0
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
virtual RC get_column(Chunk &chunk, Column &column)
从 chunk 中获取表达式的计算结果 column
Definition: expression.h:95
virtual unique_ptr< Expression > copy() const =0
复制表达式
virtual ExprType type() const =0
表达式的类型 可以根据表达式类型来转换为具体的子类
virtual RC eval(Chunk &chunk, vector< uint8_t > &select)
用于 ComparisonExpr 获得比较结果 select。
Definition: expression.h:129
virtual RC try_get_value(Value &value) const
在没有实际运行的情况下,也就是无法获取tuple的情况下,尝试获取表达式的值
Definition: expression.h:90
字段表达式
Definition: expression.h:193
bool equal(const Expression &other) const override
判断两个表达式是否相等
Definition: expression.cpp:26
int value_length() const override
表达式值的长度
Definition: expression.h:207
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.cpp:21
unique_ptr< Expression > copy() const override
复制表达式
Definition: expression.h:203
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:205
AttrType value_type() const override
表达式值的类型
Definition: expression.h:206
RC get_column(Chunk &chunk, Column &column) override
从 chunk 中获取表达式的计算结果 column
Definition: expression.cpp:40
Definition: expression.h:145
AttrType value_type() const override
表达式值的类型
Definition: expression.h:154
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.h:156
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:153
unique_ptr< Expression > copy() const override
复制表达式
Definition: expression.h:151
元组的抽象描述
Definition: tuple.h:66
Definition: expression.h:448
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.h:465
AttrType value_type() const override
表达式值的类型
Definition: expression.h:466
unique_ptr< Expression > copy() const override
复制表达式
Definition: expression.h:456
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:454
Definition: expression.h:165
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.h:178
unique_ptr< Expression > copy() const override
复制表达式
Definition: expression.h:173
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:175
AttrType value_type() const override
表达式值的类型
Definition: expression.h:176
常量值表达式
Definition: expression.h:229
AttrType value_type() const override
表达式值的类型
Definition: expression.h:249
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:248
RC get_column(Chunk &chunk, Column &column) override
从 chunk 中获取表达式的计算结果 column
Definition: expression.cpp:68
int value_length() const override
表达式值的长度
Definition: expression.h:250
unique_ptr< Expression > copy() const override
复制表达式
Definition: expression.h:238
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.cpp:62
RC try_get_value(Value &value) const override
在没有实际运行的情况下,也就是无法获取tuple的情况下,尝试获取表达式的值
Definition: expression.h:242
bool equal(const Expression &other) const override
判断两个表达式是否相等
Definition: expression.cpp:50
属性的值
Definition: value.h:30
ExprType
表达式类型
Definition: expression.h:37
@ UNBOUND_AGGREGATION
未绑定的聚合函数,需要在resolver阶段解析为AggregateExpr
@ FIELD
字段。在实际执行时,根据行数据内容提取对应字段的值
@ UNBOUND_FIELD
未绑定的字段,需要在resolver阶段解析为FieldExpr
@ CONJUNCTION
多个表达式使用同一种关系(AND或OR)来联结
CompOp
描述比较运算符
Definition: parse_defs.h:46