[TD-225]refactor.
This commit is contained in:
parent
9dc0bf6c86
commit
7ee01d6d5e
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
#include "os.h"
|
||||
|
||||
#include "qAst.h"
|
||||
#include "texpr.h"
|
||||
#include "qTsbuf.h"
|
||||
#include "tcompare.h"
|
||||
#include "tscLog.h"
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
|
@ -1,3 +1,18 @@
|
|||
/*
|
||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef TDENGINE_NAME_H
|
||||
#define TDENGINE_NAME_H
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
@ -13,8 +13,8 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#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
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -12,13 +12,13 @@
|
|||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#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) \
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#include <cassert>
|
||||
#include <iostream>
|
||||
|
||||
#include "qAst.h"
|
||||
#include "texpr.h"
|
||||
#include "taosmsg.h"
|
||||
#include "tsdb.h"
|
||||
#include "tskiplist.h"
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#include <cassert>
|
||||
#include <iostream>
|
||||
|
||||
#include "tsqlfunction.h"
|
||||
#include "qAggMain.h"
|
||||
#include "tcompare.h"
|
||||
|
||||
TEST(testCase, patternMatchTest) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue