10 #include "share/err_type.h"
11 #include "share/config.h"
12 #include "hsql/SQLParser.h"
14 enum struct Operator {
18 const std::map<hsql::OperatorType, Operator> op_map
19 {{hsql::OperatorType::kOpGreater, Operator::GT},
20 {hsql::OperatorType::kOpGreaterEq, Operator::GE},
21 {hsql::OperatorType::kOpLess, Operator::LT},
22 {hsql::OperatorType::kOpLessEq, Operator::LE},
23 {hsql::OperatorType::kOpEquals, Operator::EQ},
24 {hsql::OperatorType::kOpNotEquals, Operator::NE}};
26 enum struct BASE_SQL_ValType
31 const std::map<hsql::DataType, BASE_SQL_ValType> type_map
32 {{hsql::DataType::INT, BASE_SQL_ValType::INT},
33 {hsql::DataType::FLOAT, BASE_SQL_ValType::FLOAT},
34 {hsql::DataType::CHAR, BASE_SQL_ValType::STRING},
35 {hsql::DataType::DOUBLE, BASE_SQL_ValType::FLOAT},
36 {hsql::DataType::VARCHAR, BASE_SQL_ValType::STRING},
37 {hsql::DataType::DECIMAL, BASE_SQL_ValType::FLOAT}};
45 BASE_SQL_ValType type;
54 explicit Data(hsql::Expr* expr){
56 case hsql::kExprLiteralInt :{
57 type = BASE_SQL_ValType::INT;
58 data_meta.i_data = expr->ival;
61 case hsql::kExprLiteralFloat :{
62 type = BASE_SQL_ValType::FLOAT;
63 data_meta.f_data = expr->fval;
66 case hsql::kExprLiteralString :{
67 type = BASE_SQL_ValType::STRING;
68 strcpy(data_meta.s_data, expr->name);
77 friend bool operator<(
const Data& d_l,
const Data& d_r){
78 if (d_l.type != d_r.type)
throw DB_OPERANDS_MISMATCH;
81 case BASE_SQL_ValType::STRING:{
82 if(strcmp(d_l.data_meta.s_data, d_r.data_meta.s_data) < 0){
89 case BASE_SQL_ValType::INT:{
90 return d_l.data_meta.i_data < d_r.data_meta.i_data;
92 case BASE_SQL_ValType::FLOAT:{
93 return d_l.data_meta.f_data < d_r.data_meta.f_data;
101 friend bool operator==(
const Data& d_l,
const Data& d_r){
102 if (d_l.type != d_r.type){
103 throw DB_OPERANDS_MISMATCH;
106 case BASE_SQL_ValType::STRING:{
107 if(strcmp(d_l.data_meta.s_data, d_r.data_meta.s_data) == 0){
114 case BASE_SQL_ValType::INT:{
115 return d_l.data_meta.i_data == d_r.data_meta.i_data;
117 case BASE_SQL_ValType::FLOAT:{
118 return d_l.data_meta.f_data == d_r.data_meta.f_data;
126 friend bool operator<=(
const Data& d_l,
const Data& d_r){
127 return (d_l < d_r || d_l == d_r);
130 friend bool operator>=(
const Data& d_l,
const Data& d_r){
134 friend bool operator>(
const Data& d_l,
const Data& d_r){
135 return !(d_l <= d_r);
138 friend bool operator!=(
const Data& d_l,
const Data& d_r){
139 return !(d_l == d_r);
142 friend std::ostream& operator<<(std::ostream& os,
const Data& data){
144 case BASE_SQL_ValType::INT:{
145 os << data.data_meta.i_data <<
" | ";
148 case BASE_SQL_ValType::FLOAT:{
149 os << data.data_meta.f_data <<
" | ";
152 case BASE_SQL_ValType::STRING:{
153 os << data.data_meta.s_data <<
" | ";
163 Operator relation_operator;
174 BASE_SQL_ValType type[32];
191 typedef std::vector<Data> MemoryTuple;
207 db_size_t _total_len;
216 void serializeFromMemory(
const MemoryTuple& in_tuple);
217 MemoryTuple deserializeToMemory(
const std::vector<int>& pos = {});
218 [[nodiscard]] std::vector<Data> getData()
const;
219 [[nodiscard]] db_size_t getSize()
const{
222 [[nodiscard]] db_size_t getBytes()
const{