From f0b71c971a5f9db76a0ed5eb1e163b4f4bdb8907 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Mon, 8 Nov 2021 17:57:12 +0800 Subject: [PATCH] [td-10564]fix bug in parser --- source/libs/parser/src/astValidate.c | 4 ++++ source/libs/parser/test/parserTests.cpp | 27 ++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/source/libs/parser/src/astValidate.c b/source/libs/parser/src/astValidate.c index 4098fa5392..9c3537e261 100644 --- a/source/libs/parser/src/astValidate.c +++ b/source/libs/parser/src/astValidate.c @@ -3026,6 +3026,7 @@ int32_t sqlExprToExprNode(tExprNode **pExpr, const tSqlExpr* pSqlExpr, SQuerySt (*pExpr)->nodeType = TEXPR_FUNCTION_NODE; (*pExpr)->_function.pChild = p; + (*pExpr)->_function.num = num; strncpy((*pExpr)->_function.functionName, pSqlExpr->Expr.operand.z, pSqlExpr->Expr.operand.n); return TSDB_CODE_SUCCESS; } else { @@ -3155,6 +3156,9 @@ int32_t sqlExprToExprNode(tExprNode **pExpr, const tSqlExpr* pSqlExpr, SQuerySt } } } + + // scalar op aggregate check + } return TSDB_CODE_SUCCESS; diff --git a/source/libs/parser/test/parserTests.cpp b/source/libs/parser/test/parserTests.cpp index 79bdb561b7..00a31dc89d 100644 --- a/source/libs/parser/test/parserTests.cpp +++ b/source/libs/parser/test/parserTests.cpp @@ -404,6 +404,8 @@ TEST(testCase, function_Test10) { sqlCheck("select length(sum(a) + sum(b)) + length(sum(a) + sum(b)) from `t.1abc`", true); sqlCheck("select sum(length(sum(a))) from `t.1abc`", true); sqlCheck("select cov(a, b) from `t.1abc`", true); + sqlCheck("select sum(length(a) + count(b)) from `t.1abc`", false); + // sqlCheck("select concat(concat(a,b), concat(a,b)) from `t.1abc`", true); // sqlCheck("select length(length(length(a))) from `t.1abc`", true); } @@ -582,7 +584,7 @@ TEST(testCase, function_Test6) { tExprNode* pParam = p1->pExpr->_function.pChild[0]; ASSERT_EQ(pParam->nodeType, TSDB_COL_TMP); -// ASSERT_EQ(pParam->_node.optr, TSDB_BINARY_OP_DIVIDE); +// ASSERT_EQ(pParam->.optr, TSDB_BINARY_OP_DIVIDE); // ASSERT_EQ(pParam->_node.pLeft->nodeType, TEXPR_BINARYEXPR_NODE); // ASSERT_EQ(pParam->_node.pRight->nodeType, TEXPR_VALUE_NODE); @@ -592,6 +594,29 @@ TEST(testCase, function_Test6) { destroyQueryInfo(pQueryInfo); qParserClearupMetaRequestInfo(&req); destroySqlInfo(&info1); + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + info1 = doGenerateAST("select sum(length(a)+length(b)) from `t.1abc` interval(10s, 1s)"); + ASSERT_EQ(info1.valid, true); + + pNode = (SSqlNode*) taosArrayGetP(((SArray*)info1.list), 0); + code = evaluateSqlNode(pNode, TSDB_TIME_PRECISION_NANO, &buf); + ASSERT_EQ(code, 0); + + ret = qParserExtractRequestedMetaInfo(&info1, &req, msg, 128); + ASSERT_EQ(ret, 0); + ASSERT_EQ(taosArrayGetSize(req.pTableName), 1); + + pQueryInfo = createQueryInfo(); + setTableMetaInfo(pQueryInfo, &req); + + pSqlNode = (SSqlNode*)taosArrayGetP(info1.list, 0); + ret = validateSqlNode(pSqlNode, pQueryInfo, &buf); + ASSERT_EQ(ret, 0); + + destroyQueryInfo(pQueryInfo); + qParserClearupMetaRequestInfo(&req); + destroySqlInfo(&info1); } TEST(testCase, invalid_sql_Test) { -- GitLab