13#include "common/lang/array.h"
14#include "common/lang/memory.h"
15#include "common/lang/string.h"
16#include "common/sys/rc.h"
17#include "common/type/attr_type.h"
30 explicit DataType(AttrType attr_type) : attr_type_(attr_type) {}
34 inline static DataType *type_instance(AttrType attr_type)
36 return type_instances_.at(
static_cast<int>(attr_type)).get();
39 inline AttrType get_attr_type()
const {
return attr_type_; }
53 virtual RC
add(
const Value &left,
const Value &right,
Value &result)
const {
return RC::UNSUPPORTED; }
78 virtual RC
cast_to(
const Value &val, AttrType type,
Value &result)
const {
return RC::UNSUPPORTED; }
83 virtual RC
to_string(
const Value &val,
string &result)
const {
return RC::UNSUPPORTED; }
90 if (type == attr_type_) {
96 virtual RC set_value_from_str(
Value &val,
const string &data)
const {
return RC::UNSUPPORTED; }
101 static array<unique_ptr<DataType>,
static_cast<int>(AttrType::MAXTYPE)> type_instances_;
Definition: data_type.h:28
virtual RC to_string(const Value &val, string &result) const
将 val 转换为 string,并将结果保存到 result 中
Definition: data_type.h:83
virtual RC divide(const Value &left, const Value &right, Value &result) const
计算 left / right,并将结果保存到 result 中
Definition: data_type.h:68
virtual RC cast_to(const Value &val, AttrType type, Value &result) const
将 val 转换为 type 类型,并将结果保存到 result 中
Definition: data_type.h:78
virtual RC subtract(const Value &left, const Value &right, Value &result) const
计算 left - right,并将结果保存到 result 中
Definition: data_type.h:58
virtual int compare(const Value &left, const Value &right) const
Definition: data_type.h:48
virtual RC multiply(const Value &left, const Value &right, Value &result) const
计算 left * right,并将结果保存到 result 中
Definition: data_type.h:63
virtual RC add(const Value &left, const Value &right, Value &result) const
计算 left + right,并将结果保存到 result 中
Definition: data_type.h:53
virtual RC negative(const Value &val, Value &result) const
计算 -val,并将结果保存到 result 中
Definition: data_type.h:73
virtual int cast_cost(AttrType type)
计算从 type 到 attr_type 的隐式转换的 cost,如果无法转换,返回 INT32_MAX
Definition: data_type.h:88
属性的值
Definition: value.h:30