From 5262f92733f90ed73414be2d697b5452ad725628 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Mon, 31 May 2021 11:43:47 +0800 Subject: [PATCH] [td-4321] --- src/client/src/tscSQLParser.c | 11 +++++++++++ src/client/src/tscUtil.c | 9 +++++++++ src/query/src/qExecutor.c | 5 ++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 59f72987ad..8dbbf9be2e 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -7463,6 +7463,7 @@ int32_t validateSqlNode(SSqlObj* pSql, SSqlNode* pSqlNode, SQueryInfo* pQueryInf return TSDB_CODE_TSC_INVALID_OPERATION; } + // validate the query filter condition info if (pSqlNode->pWhere != NULL) { if (validateWhereNode(pQueryInfo, &pSqlNode->pWhere, pSql) != TSDB_CODE_SUCCESS) { return TSDB_CODE_TSC_INVALID_OPERATION; @@ -7474,6 +7475,16 @@ int32_t validateSqlNode(SSqlObj* pSql, SSqlNode* pSqlNode, SQueryInfo* pQueryInf pQueryInfo->window.ekey = pQueryInfo->window.ekey / 1000; } } + + // validate the interval info + if (validateIntervalNode(pSql, pQueryInfo, pSqlNode) != TSDB_CODE_SUCCESS) { + return TSDB_CODE_TSC_INVALID_OPERATION; + } else { + if (isTimeWindowQuery(pQueryInfo) && + (validateFunctionsInIntervalOrGroupbyQuery(pCmd, pQueryInfo) != TSDB_CODE_SUCCESS)) { + return TSDB_CODE_TSC_INVALID_OPERATION; + } + } } else { pQueryInfo->command = TSDB_SQL_SELECT; diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index e174880b8c..952246524e 100644 --- a/src/client/src/tscUtil.c +++ b/src/client/src/tscUtil.c @@ -668,6 +668,7 @@ typedef struct SJoinOperatorInfo { static void doSetupSDataBlock(SSqlRes* pRes, SSDataBlock* pBlock) { int32_t offset = 0; char* pData = pRes->data; + for(int32_t i = 0; i < pBlock->info.numOfCols; ++i) { SColumnInfoData* pColData = taosArrayGet(pBlock->pDataBlock, i); if (pData != NULL) { @@ -679,6 +680,14 @@ static void doSetupSDataBlock(SSqlRes* pRes, SSDataBlock* pBlock) { offset += pColData->info.bytes; } + // todo refactor: extract method + // set the timestamp range of current result data block + SColumnInfoData* pColData = taosArrayGet(pBlock->pDataBlock, 0); + if (pColData->info.type == TSDB_DATA_TYPE_TIMESTAMP) { + pBlock->info.window.skey = ((int64_t*)pColData->pData)[0]; + pBlock->info.window.ekey = ((int64_t*)pColData->pData)[pBlock->info.rows-1]; + } + pRes->numOfRows = 0; } diff --git a/src/query/src/qExecutor.c b/src/query/src/qExecutor.c index 334edefe1e..05f6c235d7 100644 --- a/src/query/src/qExecutor.c +++ b/src/query/src/qExecutor.c @@ -1716,7 +1716,10 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int32_t numOf case OP_TimeWindow: { pRuntimeEnv->proot = createTimeIntervalOperatorInfo(pRuntimeEnv, pRuntimeEnv->proot, pQueryAttr->pExpr1, pQueryAttr->numOfOutput); - setTableScanFilterOperatorInfo(pRuntimeEnv->proot->upstream[0]->info, pRuntimeEnv->proot); + int32_t opType = pRuntimeEnv->proot->upstream[0]->operatorType; + if (opType != OP_DummyInput && opType != OP_Join) { + setTableScanFilterOperatorInfo(pRuntimeEnv->proot->upstream[0]->info, pRuntimeEnv->proot); + } break; } case OP_Groupby: { -- GitLab