diff --git a/src/context/QueryExpressionContext.cpp b/src/context/QueryExpressionContext.cpp index dfd7bf2dfbf1477e1a756136d1f445cd09efe219..9283ed06add6842f077fb08c82e09958a8038149 100644 --- a/src/context/QueryExpressionContext.cpp +++ b/src/context/QueryExpressionContext.cpp @@ -90,7 +90,6 @@ const Value& QueryExpressionContext::getInputProp(const std::string& prop) const void QueryExpressionContext::setVar(const std::string& var, Value val) { if (ectx_ == nullptr) { LOG(ERROR) << "Execution context was not provided."; - DCHECK_NOTNULL(ectx_); return; } ectx_->setValue(var, std::move(val)); diff --git a/src/parser/parser.yy b/src/parser/parser.yy index 8c4972dacaa8a8a04f4be08a38dc176c1ac9ad24..79205e49d56822a818f6e8fcf8c51bea8b40ceec 100644 --- a/src/parser/parser.yy +++ b/src/parser/parser.yy @@ -16,6 +16,7 @@ #include <cstddef> #include "parser/SequentialSentences.h" #include "parser/ColumnTypeDef.h" +#include "util/SchemaUtil.h" namespace nebula { @@ -480,11 +481,10 @@ unary_expression | KW_NOT unary_expression { $$ = new UnaryExpression(Expression::Kind::kUnaryNot, $2); } -/* | L_PAREN type_spec R_PAREN unary_expression { - $$ = new TypeCastingExpression($2->type, $4); + $$ = new TypeCastingExpression(graph::SchemaUtil::propTypeToValueType($2->type), $4); + delete $2; } -*/ ; type_spec diff --git a/src/parser/test/CMakeLists.txt b/src/parser/test/CMakeLists.txt index 36780d0af4726154b9f051cf415a3d7af9af7aef..b28cfef02afb9e0796786f0dd2655cea3eb8bec4 100644 --- a/src/parser/test/CMakeLists.txt +++ b/src/parser/test/CMakeLists.txt @@ -17,6 +17,13 @@ set(PARSER_TEST_LIBS $<TARGET_OBJECTS:common_datatypes_obj> $<TARGET_OBJECTS:common_base_obj> $<TARGET_OBJECTS:common_function_manager_obj> + $<TARGET_OBJECTS:common_meta_thrift_obj> + $<TARGET_OBJECTS:common_meta_obj> + $<TARGET_OBJECTS:common_meta_client_obj> + $<TARGET_OBJECTS:common_conf_obj> + $<TARGET_OBJECTS:common_file_based_cluster_id_man_obj> + $<TARGET_OBJECTS:util_obj> + $<TARGET_OBJECTS:context_obj> ) nebula_add_test( diff --git a/src/parser/test/ParserTest.cpp b/src/parser/test/ParserTest.cpp index 7b1fc686f5cee0daea487de61f11150c12f9c312..a68fe3aa57d369e57a27fa1ebe415d19c54d55e3 100644 --- a/src/parser/test/ParserTest.cpp +++ b/src/parser/test/ParserTest.cpp @@ -2037,4 +2037,109 @@ TEST(Parser, IssueLabelAsExpression) { } } +TEST(Parser, TypeCast) { + { + GQLParser parser; + std::string query = "YIELD (INT)\"123\""; + auto result = parser.parse(query); + ASSERT_TRUE(result.ok()); + } + { + GQLParser parser; + std::string query = "YIELD (INT) \"123\""; + auto result = parser.parse(query); + ASSERT_TRUE(result.ok()); + } + { + GQLParser parser; + std::string query = "YIELD (INT)\".123\""; + auto result = parser.parse(query); + ASSERT_TRUE(result.ok()); + } + { + GQLParser parser; + std::string query = "YIELD (INT8)\".123\""; + auto result = parser.parse(query); + ASSERT_TRUE(result.ok()); + } + { + GQLParser parser; + std::string query = "YIELD (INT16)\".123\""; + auto result = parser.parse(query); + ASSERT_TRUE(result.ok()); + } + { + GQLParser parser; + std::string query = "YIELD (INT32)\".123\""; + auto result = parser.parse(query); + ASSERT_TRUE(result.ok()); + } + { + GQLParser parser; + std::string query = "YIELD (INT64)\"1.23\""; + auto result = parser.parse(query); + ASSERT_TRUE(result.ok()); + } + { + GQLParser parser; + std::string query = "YIELD (INT65)\"1.23\""; + auto result = parser.parse(query); + ASSERT_FALSE(result.ok()); + } + { + GQLParser parser; + std::string query = "YIELD (DOUBLE)\"123abc\""; + auto result = parser.parse(query); + ASSERT_TRUE(result.ok()); + } + { + GQLParser parser; + std::string query = "YIELD (INT)\"abc123\""; + auto result = parser.parse(query); + ASSERT_TRUE(result.ok()); + } + { + GQLParser parser; + std::string query = "YIELD (FLOAT)\"123\""; + auto result = parser.parse(query); + ASSERT_TRUE(result.ok()); + } + { + GQLParser parser; + std::string query = "YIELD (FLOAT)\"1.23\""; + auto result = parser.parse(query); + ASSERT_TRUE(result.ok()); + } + { + GQLParser parser; + std::string query = "YIELD (FLOAT)\".123\""; + auto result = parser.parse(query); + ASSERT_TRUE(result.ok()); + } + { + GQLParser parser; + std::string query = "YIELD (STRING)123"; + auto result = parser.parse(query); + ASSERT_TRUE(result.ok()); + } + { + GQLParser parser; + std::string query = "YIELD (STRING)1.23"; + auto result = parser.parse(query); + ASSERT_TRUE(result.ok()); + } + { + GQLParser parser; + std::string query = "YIELD (MAP)123"; + auto result = parser.parse(query); + ASSERT_FALSE(result.ok()); + } + { + GQLParser parser; + std::string query = "YIELD (INT)true"; + auto result = parser.parse(query); + ASSERT_TRUE(result.ok()); + } +} + } // namespace nebula diff --git a/src/planner/PlanNode.cpp b/src/planner/PlanNode.cpp index 4c1a9fa097fbf00a99289a2ac2efd4ddc5f74fff..b5ca1cc8579ae923622228ef7be5ec883284ae96 100644 --- a/src/planner/PlanNode.cpp +++ b/src/planner/PlanNode.cpp @@ -11,7 +11,7 @@ namespace nebula { namespace graph { PlanNode::PlanNode(ExecutionPlan* plan, Kind kind) : kind_(kind), plan_(plan) { - DCHECK_NOTNULL(plan_); + DCHECK(plan_ != nullptr); plan_->addPlanNode(this); }