mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-22 17:40:34 +00:00
prepare_expression didn't allow to prepare binary_operators. so it's now implemented. If prepare_binary_operator is unable to infer the types it will fail with an exception instead of returning std::nullopt, but we can live with that for now. Preparing binary_operators inside the WHERE clause is currently more complicated than just calling prepare_binary_operator. Preparation of the WHERE clause is done inside statement_restrictions constructor. It's done by iterating over all binary_operators, validating them and then preparing. The validation contains additional checks with custom error messages. Preparation has to be done after validation, because otherwise the error messages will change and some tests will start failing. Because of that we can't just call prepare_expression on the WHERE clause yet. It's still useful to have the ability to prepare binary_operators using prepare_expression. In cases where we know that the WHERE clause is valid, we can just call prepare_expression and be done with it. Once grammar is fully relaxed the artificial constraints checked by the validation code will be removed and it will be possible to prepare the whole WHERE clause using just prepare_expression. prepare_expression does a bit more than prepare_binary_operator. In case where both sides of the binary_operator are known it will evaluate the whole binary_operator to a constant value. Query analysis code is NOT ready to encounter constant boolean values inside the WHERE clause, so for the WHERE we still use prepare_binary_operator which doesn't evaluate the binary_operator to a constant value. Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>