diff --git a/src/binder/expression_binder.cpp b/src/binder/expression_binder.cpp index 53f54ee4a0..b601d1a810 100644 --- a/src/binder/expression_binder.cpp +++ b/src/binder/expression_binder.cpp @@ -253,7 +253,12 @@ std::shared_ptr ExpressionBinder::forceCast( auto functionName = "CAST"; auto children = expression_vector{expression, createLiteralExpression(Value(targetType.toString()))}; - return bindScalarFunctionExpression(children, functionName); + auto castExpression = bindScalarFunctionExpression(children, functionName); + if (expression->expressionType == ExpressionType::LITERAL && + expression->dataType == LogicalType::STRING() && LogicalTypeUtils::isDate(targetType)) { + return foldExpression(castExpression); + } + return castExpression; } std::string ExpressionBinder::getUniqueName(const std::string& name) const { diff --git a/test/test_files/exceptions/binder/binder_error.test b/test/test_files/exceptions/binder/binder_error.test index 23b126da95..f531193e69 100644 --- a/test/test_files/exceptions/binder/binder_error.test +++ b/test/test_files/exceptions/binder/binder_error.test @@ -209,6 +209,14 @@ Expected: (STRING) -> DATE ---- error Conversion exception: Error occurred during parsing date. Given: "2012". Expected format: (YYYY-MM-DD) +-LOG FoldImplicitDateCastInComparison +-STATEMENT MATCH (a:person) WHERE a.birthdate = '2012' RETURN COUNT(*); +---- error +Conversion exception: Error occurred during parsing date. Given: "2012". Expected format: (YYYY-MM-DD) +-STATEMENT EXPLAIN MATCH (a:person) WHERE a.birthdate = '2012' RETURN COUNT(*); +---- error +Conversion exception: Error occurred during parsing date. Given: "2012". Expected format: (YYYY-MM-DD) + -LOG OrderByVariableNotInScope -STATEMENT MATCH (a:person)-[e1:knows]->(b:person) RETURN SUM(a.age) ORDER BY a.ID; ---- error diff --git a/test/test_files/explain/explain.test b/test/test_files/explain/explain.test index 540a2c652e..8809ea4093 100644 --- a/test/test_files/explain/explain.test +++ b/test/test_files/explain/explain.test @@ -42,6 +42,10 @@ -STATEMENT EXPLAIN LOGICAL MATCH (p:person) WHERE p.gender='F' RETURN p; ---- ok +-LOG ExplainImplicitDateCast +-STATEMENT EXPLAIN MATCH (p:person) WHERE p.birthdate = '1980-10-26' RETURN p; +---- ok + -LOG ExplainLogicalCall -STATEMENT EXPLAIN LOGICAL CALL threads=5 ---- ok