21#include "storage/field/field.h"
22#include "sql/parser/value.h"
23#include "common/log/log.h"
76 return RC::UNIMPLENMENT;
94 virtual std::string
name()
const {
return name_; }
95 virtual void set_name(std::string
name) { name_ =
name; }
117 AttrType
value_type()
const override {
return field_.attr_type(); }
119 Field &field() {
return field_; }
121 const Field &field()
const {
return field_; }
123 const char *table_name()
const {
return field_.table_name(); }
125 const char *field_name()
const {
return field_.field_name(); }
151 AttrType
value_type()
const override {
return value_.attr_type(); }
153 void get_value(
Value &value)
const { value = value_; }
155 const Value &get_value()
const {
return value_; }
168 CastExpr(std::unique_ptr<Expression> child, AttrType cast_type);
173 return ExprType::CAST;
181 std::unique_ptr<Expression> &child() {
return child_; }
184 RC cast(
const Value &value,
Value &cast_value)
const;
198 ComparisonExpr(
CompOp comp, std::unique_ptr<Expression> left, std::unique_ptr<Expression> right);
207 CompOp comp()
const {
return comp_; }
209 std::unique_ptr<Expression> &left() {
return left_; }
210 std::unique_ptr<Expression> &right() {
return right_; }
226 std::unique_ptr<Expression> left_;
227 std::unique_ptr<Expression> right_;
254 Type conjunction_type()
const {
return conjunction_type_; }
256 std::vector<std::unique_ptr<Expression>> &children() {
return children_; }
259 Type conjunction_type_;
260 std::vector<std::unique_ptr<Expression>> children_;
280 ArithmeticExpr(Type
type, std::unique_ptr<Expression> left, std::unique_ptr<Expression> right);
290 Type arithmetic_type()
const {
return arithmetic_type_; }
292 std::unique_ptr<Expression> &left() {
return left_; }
293 std::unique_ptr<Expression> &right() {
return right_; }
296 RC calc_value(
const Value &left_value,
const Value &right_value,
Value &value)
const;
299 Type arithmetic_type_;
300 std::unique_ptr<Expression> left_;
301 std::unique_ptr<Expression> right_;
算术表达式
Definition: expression.h:268
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.cpp:288
RC try_get_value(Value &value) const override
在没有实际运行的情况下,也就是无法获取tuple的情况下,尝试获取表达式的值
Definition: expression.cpp:308
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:283
AttrType value_type() const override
表达式值的类型
Definition: expression.cpp:208
类型转换表达式
Definition: expression.h:166
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:171
AttrType value_type() const override
表达式值的类型
Definition: expression.h:179
AttrType cast_type_
想要转换成这个类型
Definition: expression.h:188
RC try_get_value(Value &value) const override
在没有实际运行的情况下,也就是无法获取tuple的情况下,尝试获取表达式的值
Definition: expression.cpp:70
std::unique_ptr< Expression > child_
从这个表达式转换
Definition: expression.h:187
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.cpp:60
比较表达式
Definition: expression.h:196
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.cpp:143
AttrType value_type() const override
表达式值的类型
Definition: expression.h:205
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:201
RC compare_value(const Value &left, const Value &right, bool &value) const
Definition: expression.cpp:89
RC try_get_value(Value &value) const override
Definition: expression.cpp:122
联结表达式多个表达式使用同一种关系(AND或OR)来联结 当前miniob仅有AND操作
Definition: expression.h:237
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.cpp:172
AttrType value_type() const override
表达式值的类型
Definition: expression.h:250
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:248
表达式的抽象描述
Definition: expression.h:60
virtual AttrType value_type() const =0
表达式值的类型
virtual std::string name() const
表达式的名字,比如是字段名称,或者用户在执行SQL语句时输入的内容
Definition: expression.h:94
virtual RC get_value(const Tuple &tuple, Value &value) const =0
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
virtual ExprType type() const =0
表达式的类型 可以根据表达式类型来转换为具体的子类
virtual RC try_get_value(Value &value) const
在没有实际运行的情况下,也就是无法获取tuple的情况下,尝试获取表达式的值
Definition: expression.h:74
字段表达式
Definition: expression.h:106
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.cpp:20
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:116
AttrType value_type() const override
表达式值的类型
Definition: expression.h:117
元组的抽象描述
Definition: tuple.h:84
常量值表达式
Definition: expression.h:138
AttrType value_type() const override
表达式值的类型
Definition: expression.h:151
ExprType type() const override
表达式的类型 可以根据表达式类型来转换为具体的子类
Definition: expression.h:149
RC get_value(const Tuple &tuple, Value &value) const override
根据具体的tuple,来计算当前表达式的值。tuple有可能是一个具体某个表的行数据
Definition: expression.cpp:25
RC try_get_value(Value &value) const override
在没有实际运行的情况下,也就是无法获取tuple的情况下,尝试获取表达式的值
Definition: expression.h:147
属性的值
Definition: value.h:40
ExprType
表达式类型
Definition: expression.h:37
@ FIELD
字段。在实际执行时,根据行数据内容提取对应字段的值
@ CONJUNCTION
多个表达式使用同一种关系(AND或OR)来联结
CompOp
描述比较运算符
Definition: parse_defs.h:48