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);
280 unique_ptr<Expression> &child() {
return child_; }
283 RC cast(
const Value &value,
Value &cast_value)
const;
302 AttrType
value_type()
const override {
return AttrType::BOOLEANS; }
303 CompOp comp()
const {
return comp_; }
305 unique_ptr<Expression>
copy()
const override
307 return make_unique<ComparisonExpr>(comp_, left_->copy(), right_->copy());
314 RC
eval(
Chunk &chunk, vector<uint8_t> &select)
override;
316 unique_ptr<Expression> &left() {
return left_; }
317 unique_ptr<Expression> &right() {
return right_; }
331 template <
typename T>
332 RC compare_column(
const Column &left,
const Column &right, vector<uint8_t> &result)
const;
336 unique_ptr<Expression> left_;
337 unique_ptr<Expression> right_;
359 unique_ptr<Expression>
copy()
const override
361 vector<unique_ptr<Expression>> children;
362 for (
auto &child : children_) {
363 children.emplace_back(child->copy());
365 return make_unique<ConjunctionExpr>(conjunction_type_, children);
369 AttrType
value_type()
const override {
return AttrType::BOOLEANS; }
372 Type conjunction_type()
const {
return conjunction_type_; }
374 vector<unique_ptr<Expression>> &children() {
return children_; }
377 Type conjunction_type_;
378 vector<unique_ptr<Expression>> children_;
402 unique_ptr<Expression>
copy()
const override
405 return make_unique<ArithmeticExpr>(arithmetic_type_, left_->copy(), right_->copy());
407 return make_unique<ArithmeticExpr>(arithmetic_type_, left_->copy(),
nullptr);
415 int value_length()
const override {
return std::max(left_->value_length(), right_ ? right_->value_length() : 0); };
423 Type arithmetic_type()
const {
return arithmetic_type_; }
425 unique_ptr<Expression> &left() {
return left_; }
426 unique_ptr<Expression> &right() {
return right_; }
429 RC calc_value(
const Value &left_value,
const Value &right_value,
Value &value)
const;
431 RC calc_column(
const Column &left_column,
const Column &right_column,
Column &column)
const;
433 template <
bool LEFT_CONSTANT,
bool RIGHT_CONSTANT>
434 RC execute_calc(
const Column &left,
const Column &right,
Column &result, Type
type, AttrType attr_type)
const;
437 Type arithmetic_type_;
438 unique_ptr<Expression> left_;
439 unique_ptr<Expression> right_;
449 ExprType type()
const override {
return ExprType::UNBOUND_AGGREGATION; }
451 unique_ptr<Expression>
copy()
const override
453 return make_unique<UnboundAggregateExpr>(aggregate_name_.c_str(), child_->copy());
456 const char *aggregate_name()
const {
return aggregate_name_.c_str(); }
458 unique_ptr<Expression> &child() {
return child_; }
461 AttrType
value_type()
const override {
return child_->value_type(); }
464 string aggregate_name_;
465 unique_ptr<Expression> child_;
487 unique_ptr<Expression>
copy()
const override {
return make_unique<AggregateExpr>(aggregate_type_, child_->copy()); }
493 if (aggregate_type_ == Type::COUNT) {
494 return AttrType::INTS;
495 }
else if (aggregate_type_ == Type::AVG) {
496 return AttrType::FLOATS;
498 return child_->value_type();
503 if (aggregate_type_ == Type::COUNT) {
505 }
else if (aggregate_type_ == Type::AVG) {
506 return sizeof(float);
508 return child_->value_length();
516 Type aggregate_type()
const {
return aggregate_type_; }
518 unique_ptr<Expression> &child() {
return child_; }
520 const unique_ptr<Expression> &child()
const {
return child_; }
522 unique_ptr<Aggregator> create_aggregator()
const;
525 static RC type_from_string(
const char *type_str, Type &
type);
528 Type aggregate_type_;
529 unique_ptr<Expression> child_;
Definition: expression.h:469
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:489
int value_length() const override
表达式值的长度
Definition: expression.h:501
RC get_column(Chunk &chunk, Column &column) override
从 chunk 中获取表达式的计算结果 column
Definition: expression.cpp:569
bool equal(const Expression &other) const override
判断两个表达式是否相等
Definition: expression.cpp:580
unique_ptr< Expression > copy() const override
复制表达式
Definition: expression.h:487
AttrType value_type() const override
表达式值的类型
Definition: expression.h:491
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.cpp:608
算术表达式
Definition: expression.h:386
RC get_column(Chunk &chunk, Column &column) override
从 chunk 中获取表达式的计算结果 column
Definition: expression.cpp:482
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.cpp:462
RC try_get_value(Value &value) const override
在没有实际运行的情况下,也就是无法获取tuple的情况下,尝试获取表达式的值
Definition: expression.cpp:529
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:412
int value_length() const override
表达式值的长度
Definition: expression.h:415
AttrType value_type() const override
表达式值的类型
Definition: expression.cpp:343
bool equal(const Expression &other) const override
判断两个表达式是否相等
Definition: expression.cpp:331
unique_ptr< Expression > copy() const override
复制表达式
Definition: expression.h:402
类型转换表达式
Definition: expression.h:264
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:271
unique_ptr< Expression > child_
从这个表达式转换
Definition: expression.h:286
RC get_column(Chunk &chunk, Column &column) override
从 chunk 中获取表达式的计算结果 column
Definition: expression.cpp:102
unique_ptr< Expression > copy() const override
复制表达式
Definition: expression.h:269
AttrType value_type() const override
表达式值的类型
Definition: expression.h:278
AttrType cast_type_
想要转换成这个类型
Definition: expression.h:287
RC try_get_value(Value &value) const override
在没有实际运行的情况下,也就是无法获取tuple的情况下,尝试获取表达式的值
Definition: expression.cpp:122
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:23
比较表达式
Definition: expression.h:295
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.cpp:196
AttrType value_type() const override
表达式值的类型
Definition: expression.h:302
unique_ptr< Expression > copy() const override
复制表达式
Definition: expression.h:305
RC eval(Chunk &chunk, vector< uint8_t > &select) override
根据 ComparisonExpr 获得 select 结果。 select 的长度与chunk 的行数相同,表示每一行在ComparisonExpr 计算后是否会被输出。
Definition: expression.cpp:221
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:300
RC compare_value(const Value &left, const Value &right, bool &value) const
Definition: expression.cpp:142
RC try_get_value(Value &value) const override
Definition: expression.cpp:175
联结表达式多个表达式使用同一种关系(AND或OR)来联结 当前miniob仅有AND操作
Definition: expression.h:347
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.cpp:295
unique_ptr< Expression > copy() const override
复制表达式
Definition: expression.h:359
AttrType value_type() const override
表达式值的类型
Definition: expression.h:369
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:368
表达式的抽象描述
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:443
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.h:460
AttrType value_type() const override
表达式值的类型
Definition: expression.h:461
unique_ptr< Expression > copy() const override
复制表达式
Definition: expression.h:451
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:449
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:31
ExprType
表达式类型
Definition: expression.h:37
@ UNBOUND_AGGREGATION
未绑定的聚合函数,需要在resolver阶段解析为AggregateExpr
@ FIELD
字段。在实际执行时,根据行数据内容提取对应字段的值
@ UNBOUND_FIELD
未绑定的字段,需要在resolver阶段解析为FieldExpr
@ CONJUNCTION
多个表达式使用同一种关系(AND或OR)来联结
CompOp
描述比较运算符
Definition: parse_defs.h:47