diff --git a/src/query/interpret/awesome_memgraph_functions.cpp b/src/query/interpret/awesome_memgraph_functions.cpp index dd7d060eb..d1cca8b0f 100644 --- a/src/query/interpret/awesome_memgraph_functions.cpp +++ b/src/query/interpret/awesome_memgraph_functions.cpp @@ -180,6 +180,8 @@ TypedValue ToBoolean(const std::vector &args, GraphDbAccessor &) { return TypedValue::Null; case TypedValue::Type::Bool: return args[0].Value(); + case TypedValue::Type::Int: + return args[0].ValueInt() != 0L; case TypedValue::Type::String: { auto s = utils::ToUpperCase(utils::Trim(args[0].Value())); if (s == "TRUE") return true; @@ -222,6 +224,8 @@ TypedValue ToInteger(const std::vector &args, GraphDbAccessor &) { switch (args[0].type()) { case TypedValue::Type::Null: return TypedValue::Null; + case TypedValue::Type::Bool: + return args[0].ValueBool() ? 1L : 0L; case TypedValue::Type::Int: return args[0]; case TypedValue::Type::Double: diff --git a/tests/unit/query_expression_evaluator.cpp b/tests/unit/query_expression_evaluator.cpp index a4f881978..4737bffbb 100644 --- a/tests/unit/query_expression_evaluator.cpp +++ b/tests/unit/query_expression_evaluator.cpp @@ -886,13 +886,15 @@ TEST(ExpressionEvaluator, FunctionToBoolean) { ASSERT_THROW(EvaluateFunction("TOBOOLEAN", {}), QueryRuntimeException); ASSERT_EQ(EvaluateFunction("TOBOOLEAN", {TypedValue::Null}).type(), TypedValue::Type::Null); + ASSERT_EQ(EvaluateFunction("TOBOOLEAN", {123}).ValueBool(), true); + ASSERT_EQ(EvaluateFunction("TOBOOLEAN", {-213}).ValueBool(), true); + ASSERT_EQ(EvaluateFunction("TOBOOLEAN", {0}).ValueBool(), false); ASSERT_EQ(EvaluateFunction("TOBOOLEAN", {" trUE \n\t"}).Value(), true); ASSERT_EQ(EvaluateFunction("TOBOOLEAN", {"\n\tFalsE "}).Value(), false); ASSERT_EQ(EvaluateFunction("TOBOOLEAN", {"\n\tFALSEA "}).type(), TypedValue::Type::Null); ASSERT_EQ(EvaluateFunction("TOBOOLEAN", {true}).Value(), true); ASSERT_EQ(EvaluateFunction("TOBOOLEAN", {false}).Value(), false); - ASSERT_THROW(EvaluateFunction("TOBOOLEAN", {2}), QueryRuntimeException); } TEST(ExpressionEvaluator, FunctionToFloat) { @@ -912,13 +914,14 @@ TEST(ExpressionEvaluator, FunctionToInteger) { ASSERT_THROW(EvaluateFunction("TOINTEGER", {}), QueryRuntimeException); ASSERT_EQ(EvaluateFunction("TOINTEGER", {TypedValue::Null}).type(), TypedValue::Type::Null); + ASSERT_EQ(EvaluateFunction("TOINTEGER", {false}).Value(), 0); + ASSERT_EQ(EvaluateFunction("TOINTEGER", {true}).Value(), 1); ASSERT_EQ(EvaluateFunction("TOINTEGER", {"\n\t3"}).Value(), 3); ASSERT_EQ(EvaluateFunction("TOINTEGER", {" -3.5 \n\t"}).Value(), -3); ASSERT_EQ(EvaluateFunction("TOINTEGER", {"\n\t3X "}).type(), TypedValue::Type::Null); ASSERT_EQ(EvaluateFunction("TOINTEGER", {-3.5}).Value(), -3); ASSERT_EQ(EvaluateFunction("TOINTEGER", {3.5}).Value(), 3); - ASSERT_THROW(EvaluateFunction("TOINTEGER", {true}), QueryRuntimeException); } TEST(ExpressionEvaluator, FunctionType) {