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);
 }