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

fix do_predicate bug

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