17#include "common/lang/vector.h"
18#include "sql/expr/tuple.h"
19#include "common/value.h"
20#include "common/sys/rc.h"
22template <
typename ExprPo
interType>
26 ExpressionTuple(
const vector<ExprPointerType> &expressions) : expressions_(expressions) {}
29 void set_tuple(
const Tuple *tuple) { child_tuple_ = tuple; }
31 int cell_num()
const override {
return static_cast<int>(expressions_.size()); }
35 if (index < 0 || index >=
cell_num()) {
36 return RC::INVALID_ARGUMENT;
39 const ExprPointerType &expression = expressions_[index];
40 return get_value(expression, cell);
45 if (index < 0 || index >=
cell_num()) {
46 return RC::INVALID_ARGUMENT;
49 const ExprPointerType &expression = expressions_[index];
57 if (child_tuple_ !=
nullptr) {
65 for (
const ExprPointerType &expression : expressions_) {
66 if (0 == strcmp(spec.alias(), expression->name())) {
67 rc = get_value(expression, cell);
76 RC get_value(
const ExprPointerType &expression,
Value &value)
const
79 if (child_tuple_ !=
nullptr) {
80 rc = expression->get_value(*child_tuple_, value);
82 rc = expression->try_get_value(value);
88 const vector<ExprPointerType> &expressions_;
89 const Tuple *child_tuple_ =
nullptr;
Definition: expression_tuple.h:24
RC find_cell(const TupleCellSpec &spec, Value &cell) const override
根据cell的描述,获取cell的值
Definition: expression_tuple.h:54
int cell_num() const override
获取元组中的Cell的个数
Definition: expression_tuple.h:31
RC cell_at(int index, Value &cell) const override
获取指定位置的Cell
Definition: expression_tuple.h:33
Definition: tuple_cell.h:20
元组的抽象描述
Definition: tuple.h:66
virtual RC find_cell(const TupleCellSpec &spec, Value &cell) const =0
根据cell的描述,获取cell的值
属性的值
Definition: value.h:30