MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
载入中...
搜索中...
未找到
Public 成员函数 | Protected 属性 | Private 属性 | 所有成员列表
Expression类 参考abstract

表达式的抽象描述 更多...

#include <expression.h>

类 Expression 继承关系图:
AggregateExpr ArithmeticExpr CastExpr ComparisonExpr ConjunctionExpr FieldExpr StarExpr UnboundAggregateExpr UnboundFieldExpr ValueExpr

Public 成员函数

virtual unique_ptr< Expressioncopy () const =0
 复制表达式 更多...
 
virtual bool equal (const Expression &other) const
 判断两个表达式是否相等 更多...
 
virtual RC get_value (const Tuple &tuple, Value &value) const =0
 根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据 更多...
 
virtual RC try_get_value (Value &value) const
 在没有实际运行的情况下,也就是无法获取tuple的情况下,尝试获取表达式的值 更多...
 
virtual RC get_column (Chunk &chunk, Column &column)
 chunk 中获取表达式的计算结果 column 更多...
 
virtual ExprType type () const =0
 表达式的类型 可以根据表达式类型来转换为具体的子类 更多...
 
virtual AttrType value_type () const =0
 表达式值的类型 更多...
 
virtual int value_length () const
 表达式值的长度 更多...
 
virtual const char * name () const
 表达式的名字,比如是字段名称,或者用户在执行SQL语句时输入的内容
 
virtual void set_name (string name)
 
virtual int pos () const
 表达式在下层算子返回的 chunk 中的位置
 
virtual void set_pos (int pos)
 
virtual RC eval (Chunk &chunk, vector< uint8_t > &select)
 用于 ComparisonExpr 获得比较结果 select更多...
 

Protected 属性

int pos_ = -1
 表达式在下层算子返回的 chunk 中的位置 更多...
 

Private 属性

string name_
 

详细描述

表达式的抽象描述

在SQL的元素中,任何需要得出值的元素都可以使用表达式来描述 比如获取某个字段的值、比较运算、类型转换 当然还有一些当前没有实现的表达式,比如算术运算。

通常表达式的值,是在真实的算子运算过程中,拿到具体的tuple后 才能计算出来真实的值。但是有些表达式可能就表示某一个固定的 值,比如ValueExpr。

TODO 区分unbound和bound的表达式

成员函数说明

◆ copy()

virtual unique_ptr< Expression > Expression::copy ( ) const
pure virtual

◆ equal()

virtual bool Expression::equal ( const Expression other) const
inlinevirtual

判断两个表达式是否相等

FieldExpr, ValueExpr, ArithmeticExpr , 以及 AggregateExpr 重载.

◆ eval()

virtual RC Expression::eval ( Chunk chunk,
vector< uint8_t > &  select 
)
inlinevirtual

用于 ComparisonExpr 获得比较结果 select

ComparisonExpr 重载.

◆ get_column()

virtual RC Expression::get_column ( Chunk chunk,
Column column 
)
inlinevirtual

chunk 中获取表达式的计算结果 column

FieldExpr, ValueExpr, ArithmeticExpr , 以及 AggregateExpr 重载.

◆ get_value()

virtual RC Expression::get_value ( const Tuple tuple,
Value value 
) const
pure virtual

根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据

StarExpr, UnboundFieldExpr, FieldExpr, ValueExpr, CastExpr, ComparisonExpr, ConjunctionExpr, ArithmeticExpr, UnboundAggregateExpr , 以及 AggregateExpr 内被实现.

◆ try_get_value()

virtual RC Expression::try_get_value ( Value value) const
inlinevirtual

在没有实际运行的情况下,也就是无法获取tuple的情况下,尝试获取表达式的值

有些表达式的值是固定的,比如ValueExpr,这种情况下可以直接获取值

ValueExpr, CastExpr, ComparisonExpr , 以及 ArithmeticExpr 重载.

◆ type()

virtual ExprType Expression::type ( ) const
pure virtual

表达式的类型 可以根据表达式类型来转换为具体的子类

StarExpr, UnboundFieldExpr, FieldExpr, ValueExpr, CastExpr, ComparisonExpr, ConjunctionExpr, ArithmeticExpr, UnboundAggregateExpr , 以及 AggregateExpr 内被实现.

◆ value_length()

virtual int Expression::value_length ( ) const
inlinevirtual

表达式值的长度

FieldExpr, ValueExpr, ArithmeticExpr , 以及 AggregateExpr 重载.

◆ value_type()

virtual AttrType Expression::value_type ( ) const
pure virtual

表达式值的类型

一个表达式运算出结果后,只有一个值

StarExpr, UnboundFieldExpr, FieldExpr, ValueExpr, CastExpr, ComparisonExpr, ConjunctionExpr, ArithmeticExpr, UnboundAggregateExpr , 以及 AggregateExpr 内被实现.

类成员变量说明

◆ pos_

int Expression::pos_ = -1
protected

表达式在下层算子返回的 chunk 中的位置

当 pos_ = -1 时表示下层算子没有在返回的 chunk 中计算出该表达式的计算结果, 当 pos_ >= 0时表示在下层算子中已经计算出该表达式的值(比如聚合表达式),且该表达式对应的结果位于 chunk 中 下标为 pos_ 的列中。


该类的文档由以下文件生成: