relational operators added
This commit is contained in:
parent
199a5f9e12
commit
e44b72ce53
19
executor.cpp
19
executor.cpp
|
|
@ -205,12 +205,19 @@ bool Executor::evalRelationalOperator(const RelationalOperatorNode &filter, Tabl
|
|||
}
|
||||
|
||||
|
||||
if (filter.op == RelationalOperatorType::greater) {
|
||||
return comparator > 0.0;
|
||||
}
|
||||
|
||||
if (filter.op == RelationalOperatorType::equal) {
|
||||
return comparator == 0.0;
|
||||
switch (filter.op) {
|
||||
case RelationalOperatorType::equal:
|
||||
return comparator == 0.0;
|
||||
case RelationalOperatorType::not_equal:
|
||||
return comparator != 0.0;
|
||||
case RelationalOperatorType::greater:
|
||||
return comparator > 0.0;
|
||||
case RelationalOperatorType::greater_equal:
|
||||
return comparator >= 0.0;
|
||||
case RelationalOperatorType::lesser:
|
||||
return comparator < 0.0;
|
||||
case RelationalOperatorType::lesser_equal:
|
||||
return comparator <= 0.0;
|
||||
}
|
||||
|
||||
throw Exception("invalid relational operator");
|
||||
|
|
|
|||
3
main.cpp
3
main.cpp
|
|
@ -19,7 +19,8 @@ int main(int argc, char *argv[]) {
|
|||
"insert into a (i, s) values(4, 'four')",
|
||||
"select i, s from a where i > 2",
|
||||
"select i, s from a where i = 1",
|
||||
"select i, s from a where s = 'two'"
|
||||
"select i, s from a where s = 'two'",
|
||||
"select i, s from a where i <= 3"
|
||||
// "update a set s = 'three' where i = 3"
|
||||
// "delete from a where i = 3"
|
||||
// "select i, s from a where i > 0"
|
||||
|
|
|
|||
12
parser.cpp
12
parser.cpp
|
|
@ -170,7 +170,7 @@ std::unique_ptr<Node> Parser::parse_operand_node() {
|
|||
case TokenType::identifier:
|
||||
return std::make_unique<DatabaseValueNode>(tokenString);
|
||||
default: ;
|
||||
// Throw exception
|
||||
throw Exception("Unknown operand node");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -179,9 +179,17 @@ RelationalOperatorType Parser::parse_operator() {
|
|||
switch (op.type) {
|
||||
case TokenType::equal:
|
||||
return RelationalOperatorType::equal;
|
||||
case TokenType::not_equal:
|
||||
return RelationalOperatorType::not_equal;
|
||||
case TokenType::greater:
|
||||
return RelationalOperatorType::greater;
|
||||
case TokenType::greater_equal:
|
||||
return RelationalOperatorType::greater_equal;
|
||||
case TokenType::lesser:
|
||||
return RelationalOperatorType::lesser;
|
||||
case TokenType::lesser_equal:
|
||||
return RelationalOperatorType::lesser_equal;
|
||||
default: ;
|
||||
// Throw exception
|
||||
throw Exception("Unknown relational operator");
|
||||
}
|
||||
}
|
||||
19
parser.h
19
parser.h
|
|
@ -91,19 +91,26 @@ struct DatabaseValueNode : Node {
|
|||
DatabaseValueNode(std::string name) : Node(NodeType::database_value), col_name(name) {}
|
||||
};
|
||||
|
||||
enum class LogicalOperatorType {
|
||||
and_operator,
|
||||
or_operator,
|
||||
not_operator
|
||||
};
|
||||
|
||||
struct LogicalOperatorNode : Node {
|
||||
// and_operator,
|
||||
// or_operator,
|
||||
// not_operator,
|
||||
// and / or / not
|
||||
LogicalOperatorType op;
|
||||
std::unique_ptr<Node> left;
|
||||
std::unique_ptr<Node> right;
|
||||
};
|
||||
|
||||
enum class RelationalOperatorType {
|
||||
equal,
|
||||
greater
|
||||
// =, !=, >, >=, <, <=, like
|
||||
greater,
|
||||
greater_equal,
|
||||
lesser,
|
||||
lesser_equal,
|
||||
not_equal
|
||||
// like
|
||||
};
|
||||
|
||||
struct RelationalOperatorNode : Node {
|
||||
|
|
|
|||
Loading…
Reference in New Issue