From 7ee01d6d5ee83ec190bb3b7c897107d37027730d Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sat, 23 Jan 2021 14:49:06 +0800 Subject: [PATCH] [TD-225]refactor. --- src/client/inc/tsclient.h | 6 +- src/client/src/tscLocalMerge.c | 2 +- src/client/src/tscSQLParser.c | 14 +- src/client/src/tscSql.c | 2 +- src/client/src/tscSubquery.c | 2 +- src/client/src/tscUtil.c | 4 +- src/{query/inc/qAst.h => common/inc/texpr.h} | 38 +++-- src/common/inc/tname.h | 15 ++ src/{query/src/qAst.c => common/src/texpr.c} | 23 ++- src/query/inc/{tsqlfunction.h => qAggMain.h} | 10 +- src/query/inc/qExecutor.h | 2 +- src/query/src/qAggMain.c | 12 +- src/query/src/qExecutor.c | 7 +- src/query/src/qExtbuffer.c | 4 +- src/query/src/qFill.c | 2 +- src/query/tests/astTest.cpp | 2 +- src/query/tests/patternMatchTest.cpp | 2 +- src/tsdb/src/tsdbRead.c | 166 +------------------ 18 files changed, 88 insertions(+), 225 deletions(-) rename src/{query/inc/qAst.h => common/inc/texpr.h} (83%) rename src/{query/src/qAst.c => common/src/texpr.c} (96%) rename src/query/inc/{tsqlfunction.h => qAggMain.h} (97%) diff --git a/src/client/inc/tsclient.h b/src/client/inc/tsclient.h index 7fc5cbe08e..c1b6b0c2b9 100644 --- a/src/client/inc/tsclient.h +++ b/src/client/inc/tsclient.h @@ -22,15 +22,15 @@ extern "C" { #include "os.h" +#include "qAggMain.h" #include "taos.h" #include "taosdef.h" #include "taosmsg.h" #include "tarray.h" -#include "tglobal.h" -#include "tsqlfunction.h" -#include "tutil.h" #include "tcache.h" +#include "tglobal.h" #include "tref.h" +#include "tutil.h" #include "qExecutor.h" #include "qSqlparser.h" diff --git a/src/client/src/tscLocalMerge.c b/src/client/src/tscLocalMerge.c index 5b5fe8e798..d1ccc1fbb0 100644 --- a/src/client/src/tscLocalMerge.c +++ b/src/client/src/tscLocalMerge.c @@ -16,7 +16,7 @@ #include "tscLocalMerge.h" #include "tscSubquery.h" #include "os.h" -#include "qAst.h" +#include "texpr.h" #include "tlosertree.h" #include "tscLog.h" #include "tscUtil.h" diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 30caee26a3..bdbe9d39c9 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -20,7 +20,7 @@ #include "os.h" #include "ttype.h" -#include "qAst.h" +#include "texpr.h" #include "taos.h" #include "taosmsg.h" #include "tcompare.h" @@ -1354,7 +1354,7 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t int32_t ret = exprTreeFromSqlExpr(pCmd, &pNode, pItem->pNode, pQueryInfo, colList, NULL); if (ret != TSDB_CODE_SUCCESS) { taosArrayDestroy(colList); - tExprTreeDestroy(&pNode, NULL); + tExprTreeDestroy(pNode, NULL); return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg2); } @@ -1363,9 +1363,9 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t for(int32_t k = 0; k < numOfNode; ++k) { SColIndex* pIndex = taosArrayGet(colList, k); if (TSDB_COL_IS_TAG(pIndex->flag)) { - tExprTreeDestroy(&pNode, NULL); + tExprTreeDestroy(pNode, NULL); taosArrayDestroy(colList); - tExprTreeDestroy(&pNode, NULL); + return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3); } } @@ -1392,7 +1392,7 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t tbufCloseWriter(&bw); taosArrayDestroy(colList); - tExprTreeDestroy(&pNode, NULL); + tExprTreeDestroy(pNode, NULL); } else { columnList.num = 0; columnList.ids[0] = (SColumnIndex) {0, 0}; @@ -1424,7 +1424,7 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t int32_t ret = exprTreeFromSqlExpr(pCmd, &pArithExprInfo->pExpr, pItem->pNode, pQueryInfo, NULL, &pArithExprInfo->uid); if (ret != TSDB_CODE_SUCCESS) { - tExprTreeDestroy(&pArithExprInfo->pExpr, NULL); + tExprTreeDestroy(pArithExprInfo->pExpr, NULL); return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), "invalid expression in select clause"); } @@ -4304,7 +4304,7 @@ static int32_t getTagQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SCondE doCompactQueryExpr(pExpr); tSqlExprDestroy(p1); - tExprTreeDestroy(&p, NULL); + tExprTreeDestroy(p, NULL); taosArrayDestroy(colList); if (pQueryInfo->tagCond.pCond != NULL && taosArrayGetSize(pQueryInfo->tagCond.pCond) > 0 && !UTIL_TABLE_IS_SUPER_TABLE(pTableMetaInfo)) { diff --git a/src/client/src/tscSql.c b/src/client/src/tscSql.c index b0154b0e2c..7e7007444a 100644 --- a/src/client/src/tscSql.c +++ b/src/client/src/tscSql.c @@ -15,7 +15,7 @@ #include "hash.h" #include "os.h" -#include "qAst.h" +#include "texpr.h" #include "tkey.h" #include "tcache.h" #include "tnote.h" diff --git a/src/client/src/tscSubquery.c b/src/client/src/tscSubquery.c index 629707525a..aacdf9103e 100644 --- a/src/client/src/tscSubquery.c +++ b/src/client/src/tscSubquery.c @@ -16,7 +16,7 @@ #include "os.h" -#include "qAst.h" +#include "texpr.h" #include "qTsbuf.h" #include "tcompare.h" #include "tscLog.h" diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index 99e4fd40d8..9e30ac8d82 100644 --- a/src/client/src/tscUtil.c +++ b/src/client/src/tscUtil.c @@ -16,7 +16,7 @@ #include "tscUtil.h" #include "hash.h" #include "os.h" -#include "qAst.h" +#include "texpr.h" #include "taosmsg.h" #include "tkey.h" #include "tmd5.h" @@ -1054,7 +1054,7 @@ void tscFieldInfoClear(SFieldInfo* pFieldInfo) { SInternalField* pInfo = taosArrayGet(pFieldInfo->internalField, i); if (pInfo->pArithExprInfo != NULL) { - tExprTreeDestroy(&pInfo->pArithExprInfo->pExpr, NULL); + tExprTreeDestroy(pInfo->pArithExprInfo->pExpr, NULL); SSqlFuncMsg* pFuncMsg = &pInfo->pArithExprInfo->base; for(int32_t j = 0; j < pFuncMsg->numOfParams; ++j) { diff --git a/src/query/inc/qAst.h b/src/common/inc/texpr.h similarity index 83% rename from src/query/inc/qAst.h rename to src/common/inc/texpr.h index 39af7261ef..acfbffc01e 100644 --- a/src/query/inc/qAst.h +++ b/src/common/inc/texpr.h @@ -31,6 +31,15 @@ extern "C" { struct tExprNode; struct SSchema; +#define QUERY_COND_REL_PREFIX_IN "IN|" +#define QUERY_COND_REL_PREFIX_LIKE "LIKE|" + +#define QUERY_COND_REL_PREFIX_IN_LEN 3 +#define QUERY_COND_REL_PREFIX_LIKE_LEN 5 + +typedef bool (*__result_filter_fn_t)(const void *, void *); +typedef void (*__do_filter_suppl_fn_t)(void *, void *); + enum { TSQL_NODE_DUMMY = 0x0, TSQL_NODE_EXPR = 0x1, @@ -38,9 +47,6 @@ enum { TSQL_NODE_VALUE = 0x4, }; -typedef bool (*__result_filter_fn_t)(const void *, void *); -typedef void (*__do_filter_suppl_fn_t)(void *, void *); - /** * this structure is used to filter data in tags, so the offset of filtered tag column in tagdata string is required */ @@ -52,12 +58,6 @@ typedef struct tQueryInfo { bool indexed; // indexed columns } tQueryInfo; -typedef struct SExprTraverseSupp { - __result_filter_fn_t nodeFilterFn; - __do_filter_suppl_fn_t setupInfoFn; - void * pExtInfo; -} SExprTraverseSupp; - typedef struct tExprNode { uint8_t nodeType; union { @@ -65,7 +65,7 @@ typedef struct tExprNode { uint8_t optr; // filter operator uint8_t hasPK; // 0: do not contain primary filter, 1: contain void * info; // support filter operation on this expression only available for leaf node - + struct tExprNode *pLeft; // left child pointer struct tExprNode *pRight; // right child pointer } _node; @@ -74,19 +74,27 @@ typedef struct tExprNode { }; } tExprNode; -void arithmeticTreeTraverse(tExprNode *pExprs, int32_t numOfRows, char *pOutput, void *param, int32_t order, - char *(*cb)(void *, const char*, int32_t)); +typedef struct SExprTraverseSupp { + __result_filter_fn_t nodeFilterFn; + __do_filter_suppl_fn_t setupInfoFn; + void * pExtInfo; +} SExprTraverseSupp; + +void tExprTreeDestroy(tExprNode *pNode, void (*fp)(void *)); tExprNode* exprTreeFromBinary(const void* data, size_t size); tExprNode* exprTreeFromTableName(const char* tbnameCond); void exprTreeToBinary(SBufferWriter* bw, tExprNode* pExprTree); -void tExprNodeDestroy(tExprNode *pNode, void (*fp)(void *)); -void tExprTreeDestroy(tExprNode **pExprs, void (*fp)(void*)); - bool exprTreeApplayFilter(tExprNode *pExpr, const void *pItem, SExprTraverseSupp *param); +typedef void (*_arithmetic_operator_fn_t)(void *left, int32_t numLeft, int32_t leftType, void *right, int32_t numRight, + int32_t rightType, void *output, int32_t order); + +void arithmeticTreeTraverse(tExprNode *pExprs, int32_t numOfRows, char *pOutput, void *param, int32_t order, + char *(*cb)(void *, const char*, int32_t)); + #ifdef __cplusplus } #endif diff --git a/src/common/inc/tname.h b/src/common/inc/tname.h index bc1611cefe..92387560a7 100644 --- a/src/common/inc/tname.h +++ b/src/common/inc/tname.h @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + #ifndef TDENGINE_NAME_H #define TDENGINE_NAME_H diff --git a/src/query/src/qAst.c b/src/common/src/texpr.c similarity index 96% rename from src/query/src/qAst.c rename to src/common/src/texpr.c index bd87cacb4b..10e93d0edc 100644 --- a/src/query/src/qAst.c +++ b/src/common/src/texpr.c @@ -16,18 +16,15 @@ #include "os.h" #include "exception.h" -#include "qArithmeticOperator.h" -#include "qAst.h" #include "taosdef.h" #include "taosmsg.h" #include "tarray.h" #include "tbuffer.h" #include "tcompare.h" -#include "tname.h" -#include "tschemautil.h" #include "tsdb.h" #include "tskiplist.h" -#include "tsqlfunction.h" +#include "texpr.h" + static uint8_t UNUSED_FUNC isQueryOnPrimaryKey(const char *primaryColumnName, const tExprNode *pLeft, const tExprNode *pRight) { if (pLeft->nodeType == TSQL_NODE_COL) { @@ -102,13 +99,15 @@ static void reverseCopy(char* dest, const char* src, int16_t type, int32_t numOf } } -void tExprNodeDestroy(tExprNode *pNode, void (*fp)(void *)) { +static void doExprTreeDestroy(tExprNode **pExpr, void (*fp)(void *)); + +void tExprTreeDestroy(tExprNode *pNode, void (*fp)(void *)) { if (pNode == NULL) { return; } if (pNode->nodeType == TSQL_NODE_EXPR) { - tExprTreeDestroy(&pNode, fp); + doExprTreeDestroy(&pNode, fp); } else if (pNode->nodeType == TSQL_NODE_VALUE) { tVariantDestroy(pNode->pVal); } else if (pNode->nodeType == TSQL_NODE_COL) { @@ -118,14 +117,14 @@ void tExprNodeDestroy(tExprNode *pNode, void (*fp)(void *)) { free(pNode); } -void tExprTreeDestroy(tExprNode **pExpr, void (*fp)(void *)) { +static void doExprTreeDestroy(tExprNode **pExpr, void (*fp)(void *)) { if (*pExpr == NULL) { return; } if ((*pExpr)->nodeType == TSQL_NODE_EXPR) { - tExprTreeDestroy(&(*pExpr)->_node.pLeft, fp); - tExprTreeDestroy(&(*pExpr)->_node.pRight, fp); + doExprTreeDestroy(&(*pExpr)->_node.pLeft, fp); + doExprTreeDestroy(&(*pExpr)->_node.pRight, fp); if (fp != NULL) { fp((*pExpr)->_node.info); @@ -342,7 +341,7 @@ static tExprNode* exprTreeFromBinaryImpl(SBufferReader* br) { } tExprNode* pExpr = exception_calloc(1, sizeof(tExprNode)); - CLEANUP_PUSH_VOID_PTR_PTR(true, tExprNodeDestroy, pExpr, NULL); + CLEANUP_PUSH_VOID_PTR_PTR(true, tExprTreeDestroy, pExpr, NULL); pExpr->nodeType = tbufReadUint8(br); if (pExpr->nodeType == TSQL_NODE_VALUE) { @@ -396,7 +395,7 @@ tExprNode* exprTreeFromTableName(const char* tbnameCond) { int32_t anchor = CLEANUP_GET_ANCHOR(); tExprNode* expr = exception_calloc(1, sizeof(tExprNode)); - CLEANUP_PUSH_VOID_PTR_PTR(true, tExprNodeDestroy, expr, NULL); + CLEANUP_PUSH_VOID_PTR_PTR(true, tExprTreeDestroy, expr, NULL); expr->nodeType = TSQL_NODE_EXPR; diff --git a/src/query/inc/tsqlfunction.h b/src/query/inc/qAggMain.h similarity index 97% rename from src/query/inc/tsqlfunction.h rename to src/query/inc/qAggMain.h index 94933fbebf..53af502e27 100644 --- a/src/query/inc/tsqlfunction.h +++ b/src/query/inc/qAggMain.h @@ -13,8 +13,8 @@ * along with this program. If not, see . */ -#ifndef TDENGINE_TSQLFUNCTION_H -#define TDENGINE_TSQLFUNCTION_H +#ifndef TDENGINE_QAGGMAIN_H +#define TDENGINE_QAGGMAIN_H #ifdef __cplusplus extern "C" { @@ -97,11 +97,7 @@ extern "C" { #define DATA_SET_FLAG ',' // to denote the output area has data, not null value #define DATA_SET_FLAG_SIZE sizeof(DATA_SET_FLAG) -#define QUERY_COND_REL_PREFIX_IN "IN|" -#define QUERY_COND_REL_PREFIX_LIKE "LIKE|" -#define QUERY_COND_REL_PREFIX_IN_LEN 3 -#define QUERY_COND_REL_PREFIX_LIKE_LEN 5 #define QUERY_ASC_FORWARD_STEP 1 #define QUERY_DESC_FORWARD_STEP -1 @@ -279,4 +275,4 @@ static FORCE_INLINE void initResultInfo(SResultRowCellInfo *pResInfo, uint32_t b } #endif -#endif // TDENGINE_TSQLFUNCTION_H +#endif // TDENGINE_QAGGMAIN_H diff --git a/src/query/inc/qExecutor.h b/src/query/inc/qExecutor.h index 0ed609c6c2..63259651d4 100644 --- a/src/query/inc/qExecutor.h +++ b/src/query/inc/qExecutor.h @@ -18,6 +18,7 @@ #include "os.h" #include "hash.h" +#include "qAggMain.h" #include "qFill.h" #include "qResultbuf.h" #include "qSqlparser.h" @@ -27,7 +28,6 @@ #include "tarray.h" #include "tlockfree.h" #include "tsdb.h" -#include "tsqlfunction.h" struct SColumnFilterElem; typedef bool (*__filter_func_t)(struct SColumnFilterElem* pFilter, const char* val1, const char* val2, int16_t type); diff --git a/src/query/src/qAggMain.c b/src/query/src/qAggMain.c index 4d6b0e01c1..9d05677752 100644 --- a/src/query/src/qAggMain.c +++ b/src/query/src/qAggMain.c @@ -14,17 +14,17 @@ */ #include "os.h" -#include "qAst.h" +#include "taosdef.h" +#include "taosmsg.h" +#include "texpr.h" +#include "ttype.h" + +#include "qAggMain.h" #include "qFill.h" #include "qHistogram.h" #include "qPercentile.h" #include "qTsbuf.h" -#include "taosdef.h" -#include "taosmsg.h" #include "queryLog.h" -#include "tscSubquery.h" -#include "tsqlfunction.h" -#include "ttype.h" #define GET_INPUT_DATA_LIST(x) (((char *)((x)->aInputElemBuf)) + ((x)->startOffset) * ((x)->inputBytes)) #define GET_INPUT_DATA(x, y) (GET_INPUT_DATA_LIST(x) + (y) * (x)->inputBytes) diff --git a/src/query/src/qExecutor.c b/src/query/src/qExecutor.c index 99b1203fd1..abea2c9548 100644 --- a/src/query/src/qExecutor.c +++ b/src/query/src/qExecutor.c @@ -20,7 +20,7 @@ #include "exception.h" #include "hash.h" -#include "qAst.h" +#include "texpr.h" #include "qExecutor.h" #include "qResultbuf.h" #include "qUtil.h" @@ -6798,7 +6798,8 @@ _cleanup_query: for (int32_t i = 0; i < numOfOutput; ++i) { SExprInfo* pExprInfo = &pExprs[i]; if (pExprInfo->pExpr != NULL) { - tExprTreeDestroy(&pExprInfo->pExpr, NULL); + tExprTreeDestroy(pExprInfo->pExpr, NULL); + pExprInfo->pExpr = NULL; } } @@ -6914,7 +6915,7 @@ static void* destroyQueryFuncExpr(SExprInfo* pExprInfo, int32_t numOfExpr) { for (int32_t i = 0; i < numOfExpr; ++i) { if (pExprInfo[i].pExpr != NULL) { - tExprNodeDestroy(pExprInfo[i].pExpr, NULL); + tExprTreeDestroy(pExprInfo[i].pExpr, NULL); } } diff --git a/src/query/src/qExtbuffer.c b/src/query/src/qExtbuffer.c index fa3fe285a8..e4c62d90e3 100644 --- a/src/query/src/qExtbuffer.c +++ b/src/query/src/qExtbuffer.c @@ -12,13 +12,13 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ -#include "os.h" #include "qExtbuffer.h" +#include "os.h" +#include "qAggMain.h" #include "queryLog.h" #include "taos.h" #include "taosdef.h" #include "taosmsg.h" -#include "tsqlfunction.h" #include "tulog.h" #define COLMODEL_GET_VAL(data, schema, allrow, rowId, colId) \ diff --git a/src/query/src/qFill.c b/src/query/src/qFill.c index 481c25c5b4..c82f8f632d 100644 --- a/src/query/src/qFill.c +++ b/src/query/src/qFill.c @@ -15,9 +15,9 @@ #include "os.h" +#include "qAggMain.h" #include "taosdef.h" #include "taosmsg.h" -#include "tsqlfunction.h" #include "ttype.h" #include "qFill.h" diff --git a/src/query/tests/astTest.cpp b/src/query/tests/astTest.cpp index 728de4357c..ce7b2f94a1 100644 --- a/src/query/tests/astTest.cpp +++ b/src/query/tests/astTest.cpp @@ -3,7 +3,7 @@ #include #include -#include "qAst.h" +#include "texpr.h" #include "taosmsg.h" #include "tsdb.h" #include "tskiplist.h" diff --git a/src/query/tests/patternMatchTest.cpp b/src/query/tests/patternMatchTest.cpp index fa2b58a10b..f3e0d3e119 100644 --- a/src/query/tests/patternMatchTest.cpp +++ b/src/query/tests/patternMatchTest.cpp @@ -3,7 +3,7 @@ #include #include -#include "tsqlfunction.h" +#include "qAggMain.h" #include "tcompare.h" TEST(testCase, patternMatchTest) { diff --git a/src/tsdb/src/tsdbRead.c b/src/tsdb/src/tsdbRead.c index 4c98aaa307..1845685ff5 100644 --- a/src/tsdb/src/tsdbRead.c +++ b/src/tsdb/src/tsdbRead.c @@ -19,10 +19,10 @@ #include "tcompare.h" #include "exception.h" -#include "../../query/inc/qAst.h" // todo move to common module #include "tlosertree.h" #include "tsdb.h" #include "tsdbMain.h" +#include "texpr.h" #define EXTRA_BYTES 2 #define ASCENDING_TRAVERSE(o) (o == TSDB_ORDER_ASC) @@ -1920,7 +1920,6 @@ static bool doHasDataInBuffer(STsdbQueryHandle* pQueryHandle) { static void changeQueryHandleForInterpQuery(TsdbQueryHandleT pHandle) { // filter the queried time stamp in the first place STsdbQueryHandle* pQueryHandle = (STsdbQueryHandle*) pHandle; -// pQueryHandle->order = TSDB_ORDER_DESC; // starts from the buffer in case of descending timestamp order check data blocks size_t numOfTables = taosArrayGetSize(pQueryHandle->pTableCheckInfo); @@ -1948,9 +1947,6 @@ static void changeQueryHandleForInterpQuery(TsdbQueryHandleT pHandle) { info.lastKey = pQueryHandle->window.skey; taosArrayPush(pQueryHandle->pTableCheckInfo, &info); - - // update the query time window according to the chosen last timestamp -// pQueryHandle->window = (STimeWindow) {info.lastKey, TSKEY_INITIAL_VAL}; } static int tsdbReadRowsFromCache(STableCheckInfo* pCheckInfo, TSKEY maxKey, int maxRowsToRead, STimeWindow* win, @@ -2030,7 +2026,6 @@ static void destroyHelper(void* param) { return; } - tQueryInfo* pInfo = (tQueryInfo*)param; if (pInfo->optr != TSDB_RELATION_IN) { tfree(pInfo->q); @@ -2039,148 +2034,6 @@ static void destroyHelper(void* param) { free(param); } -//static bool getNeighborRows(STsdbQueryHandle* pQueryHandle) { -// assert(pQueryHandle->type == TSDB_QUERY_TYPE_EXTERNAL); -// -// SDataBlockInfo blockInfo = {{0}, 0}; -// -// pQueryHandle->type = TSDB_QUERY_TYPE_ALL; -// pQueryHandle->order = TSDB_ORDER_DESC; -// -// if (!tsdbNextDataBlock((void*)pQueryHandle)) { -// return false; -// } -// -// tsdbRetrieveDataBlockInfo((void*)pQueryHandle, &blockInfo); -// /*SArray *pDataBlock = */ tsdbRetrieveDataBlock((void*)pQueryHandle, pQueryHandle->defaultLoadColumn); -// if (terrno != TSDB_CODE_SUCCESS) { -// return false; -// } -// -// STimeWindow* win = &pQueryHandle->window; -// -// // the skey == ekey means only one data row is required. -// // the data row of this timestamp is already retrieved, discard other data rows and return. -// if (win->skey == win->ekey) { -// if (pQueryHandle->cur.win.ekey == win->skey) { -// int32_t numOfCols = (int32_t)(QH_GET_NUM_OF_COLS(pQueryHandle)); -// for (int32_t i = 0; i < numOfCols; ++i) { -// SColumnInfoData* pCol = taosArrayGet(pQueryHandle->pColumns, i); -// memcpy((char*)pCol->pData, (char*)pCol->pData + pCol->info.bytes * (pQueryHandle->cur.rows - 1), -// pCol->info.bytes); -// } -// -// pQueryHandle->cur.win = (STimeWindow){win->skey, win->skey}; -// pQueryHandle->window = pQueryHandle->cur.win; -// pQueryHandle->cur.rows = 1; -// pQueryHandle->type = TSDB_QUERY_TYPE_ALL; -// return true; -// } else { -// STimeWindow win1 = (STimeWindow){pQueryHandle->window.skey, INT64_MAX}; -// STsdbQueryCond cond = {.order = TSDB_ORDER_ASC, .numOfCols = (int32_t)(QH_GET_NUM_OF_COLS(pQueryHandle))}; -// -// cond.twindow = win1; -// -// cond.colList = calloc(cond.numOfCols, sizeof(SColumnInfo)); -// if (cond.colList == NULL) { -// terrno = TSDB_CODE_QRY_OUT_OF_MEMORY; -// return false; -// } -// -// for (int32_t i = 0; i < cond.numOfCols; ++i) { -// SColumnInfoData* pColInfoData = taosArrayGet(pQueryHandle->pColumns, i); -// memcpy(&cond.colList[i], &pColInfoData->info, sizeof(SColumnInfo)); -// } -// -// STsdbQueryHandle* pSecQueryHandle = -// tsdbQueryTablesImpl(pQueryHandle->pTsdb, &cond, pQueryHandle->qinfo, pQueryHandle->pMemRef); -// -// tfree(cond.colList); -// -// pSecQueryHandle->pTableCheckInfo = -// createCheckInfoFromCheckInfo(pQueryHandle->pTableCheckInfo, pSecQueryHandle->window.skey); -// if (pSecQueryHandle->pTableCheckInfo == NULL) { -// tsdbCleanupQueryHandle(pSecQueryHandle); -// return false; -// } -// -// if (!tsdbNextDataBlock((void*)pSecQueryHandle)) { -// tsdbCleanupQueryHandle(pSecQueryHandle); -// return false; -// } -// -// tsdbRetrieveDataBlockInfo((void*)pSecQueryHandle, &blockInfo); -// tsdbRetrieveDataBlock((void*)pSecQueryHandle, pSecQueryHandle->defaultLoadColumn); -// -// int32_t numOfCols = (int32_t)(QH_GET_NUM_OF_COLS(pSecQueryHandle)); -// size_t si = taosArrayGetSize(pSecQueryHandle->pTableCheckInfo); -// -// for (int32_t i = 0; i < numOfCols; ++i) { -// SColumnInfoData* pCol = taosArrayGet(pQueryHandle->pColumns, i); -// memcpy((char*)pCol->pData, (char*)pCol->pData + pCol->info.bytes * (pQueryHandle->cur.rows - 1), -// pCol->info.bytes); -// -// SColumnInfoData* pCol1 = taosArrayGet(pSecQueryHandle->pColumns, i); -// assert(pCol->info.colId == pCol1->info.colId); -// -// memcpy((char*)pCol->pData + pCol->info.bytes, pCol1->pData, pCol1->info.bytes); -// } -// -// SColumnInfoData* pTSCol = taosArrayGet(pQueryHandle->pColumns, 0); -// -// // it is ascending order -// pQueryHandle->order = TSDB_ORDER_DESC; -// pQueryHandle->window = pQueryHandle->cur.win; -// pQueryHandle->cur.win = (STimeWindow){((TSKEY*)pTSCol->pData)[0], ((TSKEY*)pTSCol->pData)[1]}; -// pQueryHandle->cur.rows = 2; -// pQueryHandle->cur.mixBlock = true; -// -// int32_t step = -1; // one step for ascending order traverse -// for (int32_t j = 0; j < si; ++j) { -// STableCheckInfo* pCheckInfo = (STableCheckInfo*)taosArrayGet(pQueryHandle->pTableCheckInfo, j); -// pCheckInfo->lastKey = pQueryHandle->cur.win.ekey + step; -// } -// -// tsdbCleanupQueryHandle(pSecQueryHandle); -// } -// } else { // go back to normal query -// if (pQueryHandle->cur.win.ekey == win->skey) { -// pQueryHandle->type = TSDB_QUERY_TYPE_ALL; -// -// STsdbQueryCond cond = {.order = TSDB_ORDER_ASC, .numOfCols = (int32_t)(QH_GET_NUM_OF_COLS(pQueryHandle))}; -// -// cond.twindow = pQueryHandle->oriWindow;; -// -// cond.colList = calloc(cond.numOfCols, sizeof(SColumnInfo)); -// if (cond.colList == NULL) { -// terrno = TSDB_CODE_QRY_OUT_OF_MEMORY; -// return false; -// } -// -// STsdbQueryHandle* pSecQueryHandle = -// tsdbQueryTablesImpl(pQueryHandle->pTsdb, &cond, pQueryHandle->qinfo, pQueryHandle->pMemRef); -// -// tfree(cond.colList); -// -// pSecQueryHandle->pTableCheckInfo = -// createCheckInfoFromCheckInfo(pQueryHandle->pTableCheckInfo, pSecQueryHandle->window.skey); -// if (pSecQueryHandle->pTableCheckInfo == NULL) { -// tsdbCleanupQueryHandle(pSecQueryHandle); -// return false; -// } -// -// return true; -// } else { -// // save the pre rows for interpolation query. -// } -// } -// -// // disable it after retrieve data -// pQueryHandle->type = TSDB_QUERY_TYPE_EXTERNAL; -// pQueryHandle->checkFiles = false; -// return true; -//} - // handle data in cache situation bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) { STsdbQueryHandle* pQueryHandle = (STsdbQueryHandle*) pHandle; @@ -2191,16 +2044,7 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) { size_t numOfTables = taosArrayGetSize(pQueryHandle->pTableCheckInfo); assert(numOfTables > 0); -// if (pQueryHandle->type == TSDB_QUERY_TYPE_EXTERNAL) { -// SMemRef* pMemRef = pQueryHandle->pMemRef; -// tsdbMayTakeMemSnapshot(pQueryHandle); -// bool ret = getNeighborRows(pQueryHandle); -// tsdbMayUnTakeMemSnapshot(pQueryHandle); -// -// // restore the pMemRef -// pQueryHandle->pMemRef = pMemRef; -// return ret; - /*} else*/ if (pQueryHandle->type == TSDB_QUERY_TYPE_LAST && pQueryHandle->cachelastrow) { + if (pQueryHandle->type == TSDB_QUERY_TYPE_LAST && pQueryHandle->cachelastrow) { // the last row is cached in buffer, return it directly. // here note that the pQueryHandle->window must be the TS_INITIALIZER int32_t numOfCols = (int32_t)(QH_GET_NUM_OF_COLS(pQueryHandle)); @@ -2872,7 +2716,7 @@ static int32_t doQueryTableList(STable* pSTable, SArray* pRes, tExprNode* pExpr) }; getTableListfromSkipList(pExpr, pSTable->pIndex, pRes, &supp); - tExprTreeDestroy(&pExpr, destroyHelper); + tExprTreeDestroy(pExpr, destroyHelper); return TSDB_CODE_SUCCESS; } @@ -2929,10 +2773,10 @@ int32_t tsdbQuerySTableByTagCond(TSDB_REPO_T* tsdb, uint64_t uid, TSKEY skey, co if (expr == NULL) { expr = exprTreeFromBinary(pTagCond, len); } else { - CLEANUP_PUSH_VOID_PTR_PTR(true, tExprNodeDestroy, expr, NULL); + CLEANUP_PUSH_VOID_PTR_PTR(true, tExprTreeDestroy, expr, NULL); tExprNode* tagExpr = exprTreeFromBinary(pTagCond, len); if (tagExpr != NULL) { - CLEANUP_PUSH_VOID_PTR_PTR(true, tExprNodeDestroy, tagExpr, NULL); + CLEANUP_PUSH_VOID_PTR_PTR(true, tExprTreeDestroy, tagExpr, NULL); tExprNode* tbnameExpr = expr; expr = calloc(1, sizeof(tExprNode)); if (expr == NULL) { -- GitLab