提交 5f4ea56d 编写于 作者: 羽飞's avatar 羽飞

fix do_predicate bug

上级 3d7051b9
...@@ -12,8 +12,6 @@ See the Mulan PSL v2 for more details. */ ...@@ -12,8 +12,6 @@ See the Mulan PSL v2 for more details. */
// Created by WangYunlai on 2022/6/27. // Created by WangYunlai on 2022/6/27.
// //
#pragma once
#include "common/log/log.h" #include "common/log/log.h"
#include "sql/executor/predicate_operator.h" #include "sql/executor/predicate_operator.h"
#include "storage/common/record.h" #include "storage/common/record.h"
...@@ -88,19 +86,35 @@ bool PredicateOperator::do_predicate(RowTuple &tuple) ...@@ -88,19 +86,35 @@ bool PredicateOperator::do_predicate(RowTuple &tuple)
get_cell(tuple, right, right_cell); get_cell(tuple, right, right_cell);
const int compare = left_cell.compare(right_cell); const int compare = left_cell.compare(right_cell);
bool filter_result = false;
switch (comp) { switch (comp) {
case EQUAL_TO: return 0 == compare; case EQUAL_TO: {
case LESS_EQUAL: return compare <= 0; filter_result = (0 == compare);
case NOT_EQUAL: return compare != 0; } break;
case LESS_THAN: return compare < 0; case LESS_EQUAL: {
case GREAT_EQUAL: return compare >= 0; filter_result = (compare <= 0);
case GREAT_THAN: return compare > 0; } break;
case NOT_EQUAL: {
filter_result = (compare != 0);
} break;
case LESS_THAN: {
filter_result = (compare < 0);
} break;
case GREAT_EQUAL: {
filter_result = (compare >= 0);
} break;
case GREAT_THAN: {
filter_result = (compare > 0);
} break;
default: { default: {
LOG_WARN("invalid compare type: %d", comp); LOG_WARN("invalid compare type: %d", comp);
} break;
} }
if (!filter_result) {
return false;
} }
} }
return false; return true;
} }
int PredicateOperator::tuple_cell_num() const int PredicateOperator::tuple_cell_num() const
......
...@@ -70,6 +70,12 @@ RC FilterStmt::create_filter_unit(Db *db, Table *default_table, ...@@ -70,6 +70,12 @@ RC FilterStmt::create_filter_unit(Db *db, Table *default_table,
RC rc = RC::SUCCESS; RC rc = RC::SUCCESS;
CompOp comp = condition.comp; CompOp comp = condition.comp;
if (comp < EQUAL_TO || comp >= NO_OP) {
LOG_WARN("invalid compare operator : %d", comp);
return RC::INVALID_ARGUMENT;
}
filter_unit.set_comp(comp);
FilterItem &left_item = filter_unit.left(); FilterItem &left_item = filter_unit.left();
FilterItem &right_item = filter_unit.right(); FilterItem &right_item = filter_unit.right();
......
...@@ -109,7 +109,7 @@ public: ...@@ -109,7 +109,7 @@ public:
return right_; return right_;
} }
private: private:
CompOp comp_; CompOp comp_ = NO_OP;
FilterItem left_; FilterItem left_;
FilterItem right_; FilterItem right_;
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册