diff --git a/parser/query_builder.cpp b/parser/query_builder.cpp index 5afdfcb9..a836f777 100644 --- a/parser/query_builder.cpp +++ b/parser/query_builder.cpp @@ -220,6 +220,9 @@ struct ValueGetter { if (value.type == parser::Expression::Type::Argument) { return args.bool_for_argument(std::stoi(value.s)); } + if (value.type != parser::Expression::Type::True && value.type != parser::Expression::Type::False) { + throw std::runtime_error("Attempting to compare bool property to a non-bool value"); + } return value.type == parser::Expression::Type::True; } }; diff --git a/parser/test.cpp b/parser/test.cpp index e47dcee7..f18a36ff 100644 --- a/parser/test.cpp +++ b/parser/test.cpp @@ -74,6 +74,7 @@ static std::vector valid_queries = { "a==a OR a==a", "and=='AND'&&'or'=='||'", "and == or && ORE > GRAND", + "a=1AND NOTb=2", }; static std::vector invalid_queries = { @@ -124,6 +125,7 @@ static std::vector invalid_queries = { "a==a &| a==a", "a==a && OR a==a", "a==aORa==a", + "a=1ANDNOT b=2", "truepredicate &&", "truepredicate & truepredicate",