[td-2819] refactor codes.
This commit is contained in:
parent
a36099d8bf
commit
d2e78ac757
|
@ -302,9 +302,8 @@ int32_t tscCreateTableMetaFromCChildMeta(STableMeta* pChild, const char* name);
|
||||||
STableMeta* tscTableMetaDup(STableMeta* pTableMeta);
|
STableMeta* tscTableMetaDup(STableMeta* pTableMeta);
|
||||||
int32_t tscCreateQueryFromQueryInfo(SQueryInfo* pQueryInfo, SQueryAttr* pQueryAttr, void* addr);
|
int32_t tscCreateQueryFromQueryInfo(SQueryInfo* pQueryInfo, SQueryAttr* pQueryAttr, void* addr);
|
||||||
|
|
||||||
void tsCreateSQLFunctionCtx(SQueryInfo* pQueryInfo, SQLFunctionCtx* pCtx, SSchemaEx* pSchema);
|
void tsCreateSQLFunctionCtx(SQueryInfo* pQueryInfo, SQLFunctionCtx* pCtx, SSchema* pSchema);
|
||||||
void* createQueryInfoFromQueryNode(SQueryInfo* pQueryInfo, SExprInfo* pExprs, STableGroupInfo* pTableGroupInfo,
|
void* createQueryInfoFromQueryNode(SQueryInfo* pQueryInfo, SExprInfo* pExprs, STableGroupInfo* pTableGroupInfo, SOperatorInfo* pOperator, char* sql, void* addr);
|
||||||
uint64_t* qId, char* sql, void* addr);
|
|
||||||
|
|
||||||
void* malloc_throw(size_t size);
|
void* malloc_throw(size_t size);
|
||||||
void* calloc_throw(size_t nmemb, size_t size);
|
void* calloc_throw(size_t nmemb, size_t size);
|
||||||
|
|
|
@ -57,7 +57,7 @@ int32_t treeComparator(const void *pLeft, const void *pRight, void *param) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo merge with vnode side function
|
// todo merge with vnode side function
|
||||||
void tsCreateSQLFunctionCtx(SQueryInfo* pQueryInfo, SQLFunctionCtx* pCtx, SSchemaEx* pSchema) {
|
void tsCreateSQLFunctionCtx(SQueryInfo* pQueryInfo, SQLFunctionCtx* pCtx, SSchema* pSchema) {
|
||||||
size_t size = tscSqlExprNumOfExprs(pQueryInfo);
|
size_t size = tscSqlExprNumOfExprs(pQueryInfo);
|
||||||
|
|
||||||
for (int32_t i = 0; i < size; ++i) {
|
for (int32_t i = 0; i < size; ++i) {
|
||||||
|
@ -69,16 +69,14 @@ void tsCreateSQLFunctionCtx(SQueryInfo* pQueryInfo, SQLFunctionCtx* pCtx, SSchem
|
||||||
pCtx[i].order = pQueryInfo->order.order;
|
pCtx[i].order = pQueryInfo->order.order;
|
||||||
pCtx[i].functionId = pExpr->base.functionId;
|
pCtx[i].functionId = pExpr->base.functionId;
|
||||||
|
|
||||||
// input buffer hold only one point data
|
|
||||||
SSchema *s = &pSchema[i].field;
|
|
||||||
|
|
||||||
// input data format comes from pModel
|
// input data format comes from pModel
|
||||||
pCtx[i].inputType = s->type;
|
pCtx[i].inputType = pSchema[i].type;
|
||||||
pCtx[i].inputBytes = s->bytes;
|
pCtx[i].inputBytes = pSchema[i].bytes;
|
||||||
|
|
||||||
pCtx[i].outputBytes = pExpr->base.resBytes;
|
pCtx[i].outputBytes = pExpr->base.resBytes;
|
||||||
pCtx[i].outputType = pExpr->base.resType;
|
pCtx[i].outputType = pExpr->base.resType;
|
||||||
|
|
||||||
|
// input buffer hold only one point data
|
||||||
pCtx[i].size = 1;
|
pCtx[i].size = 1;
|
||||||
pCtx[i].hasNull = true;
|
pCtx[i].hasNull = true;
|
||||||
pCtx[i].currentStage = MERGE_STAGE;
|
pCtx[i].currentStage = MERGE_STAGE;
|
||||||
|
@ -374,7 +372,13 @@ void tscCreateLocalMerger(tExtMemBuffer **pMemBuffer, int32_t numOfBuffer, tOrde
|
||||||
pReducer->pTempBuffer->num = 0;
|
pReducer->pTempBuffer->num = 0;
|
||||||
|
|
||||||
tscCreateResPointerInfo(pRes, pQueryInfo);
|
tscCreateResPointerInfo(pRes, pQueryInfo);
|
||||||
tsCreateSQLFunctionCtx(pQueryInfo, pReducer->pCtx, pDesc->pColumnModel->pFields);
|
|
||||||
|
SSchema* pschema = calloc(pDesc->pColumnModel->numOfCols, sizeof(SSchema));
|
||||||
|
for(int32_t i = 0; i < pDesc->pColumnModel->numOfCols; ++i) {
|
||||||
|
pschema[i] = pDesc->pColumnModel->pFields[i].field;
|
||||||
|
}
|
||||||
|
|
||||||
|
tsCreateSQLFunctionCtx(pQueryInfo, pReducer->pCtx, pschema);
|
||||||
setCtxInputOutputBuffer(pQueryInfo, pReducer->pCtx, pReducer, pDesc);
|
setCtxInputOutputBuffer(pQueryInfo, pReducer->pCtx, pReducer, pDesc);
|
||||||
|
|
||||||
// we change the capacity of schema to denote that there is only one row in temp buffer
|
// we change the capacity of schema to denote that there is only one row in temp buffer
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include "tschemautil.h"
|
#include "tschemautil.h"
|
||||||
#include "tsclient.h"
|
#include "tsclient.h"
|
||||||
#include "qUtil.h"
|
#include "qUtil.h"
|
||||||
|
#include "qPlan.h"
|
||||||
|
|
||||||
typedef struct SInsertSupporter {
|
typedef struct SInsertSupporter {
|
||||||
SSqlObj* pSql;
|
SSqlObj* pSql;
|
||||||
|
@ -3216,8 +3217,7 @@ static UNUSED_FUNC bool tscHasRemainDataInSubqueryResultSet(SSqlObj *pSql) {
|
||||||
return hasData;
|
return hasData;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* createQueryInfoFromQueryNode(SQueryInfo* pQueryInfo, SExprInfo* pExprs, STableGroupInfo* pTableGroupInfo,
|
void* createQueryInfoFromQueryNode(SQueryInfo* pQueryInfo, SExprInfo* pExprs, STableGroupInfo* pTableGroupInfo, SOperatorInfo* pOperator, char* sql, void* addr) {
|
||||||
uint64_t* qId, char* sql, void* addr) {
|
|
||||||
assert(pQueryInfo != NULL);
|
assert(pQueryInfo != NULL);
|
||||||
int16_t numOfOutput = pQueryInfo->fieldsInfo.numOfOutput;
|
int16_t numOfOutput = pQueryInfo->fieldsInfo.numOfOutput;
|
||||||
|
|
||||||
|
@ -3230,9 +3230,13 @@ void* createQueryInfoFromQueryNode(SQueryInfo* pQueryInfo, SExprInfo* pExprs, ST
|
||||||
pQInfo->signature = pQInfo;
|
pQInfo->signature = pQInfo;
|
||||||
|
|
||||||
SQueryAttr *pQueryAttr = &pQInfo->query;
|
SQueryAttr *pQueryAttr = &pQInfo->query;
|
||||||
pQInfo->runtimeEnv.pQueryAttr = pQueryAttr;
|
SQueryRuntimeEnv* pRuntimeEnv = &pQInfo->runtimeEnv;
|
||||||
|
|
||||||
|
pRuntimeEnv->pQueryAttr = pQueryAttr;
|
||||||
tscCreateQueryFromQueryInfo(pQueryInfo, pQueryAttr, addr);
|
tscCreateQueryFromQueryInfo(pQueryInfo, pQueryAttr, addr);
|
||||||
|
|
||||||
|
pQueryAttr->tableGroupInfo = *pTableGroupInfo;
|
||||||
|
|
||||||
// calculate the result row size
|
// calculate the result row size
|
||||||
for (int16_t col = 0; col < numOfOutput; ++col) {
|
for (int16_t col = 0; col < numOfOutput; ++col) {
|
||||||
assert(pExprs[col].base.resBytes > 0);
|
assert(pExprs[col].base.resBytes > 0);
|
||||||
|
@ -3244,12 +3248,6 @@ void* createQueryInfoFromQueryNode(SQueryInfo* pQueryInfo, SExprInfo* pExprs, ST
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// doUpdateExprColumnIndex(pQueryAttr);
|
|
||||||
// int32_t ret = createFilterInfo(pQInfo, pQueryAttr);
|
|
||||||
// if (ret != TSDB_CODE_SUCCESS) {
|
|
||||||
// goto _cleanup;
|
|
||||||
// }
|
|
||||||
|
|
||||||
size_t numOfGroups = 0;
|
size_t numOfGroups = 0;
|
||||||
if (pTableGroupInfo->pGroupList != NULL) {
|
if (pTableGroupInfo->pGroupList != NULL) {
|
||||||
numOfGroups = taosArrayGetSize(pTableGroupInfo->pGroupList);
|
numOfGroups = taosArrayGetSize(pTableGroupInfo->pGroupList);
|
||||||
|
@ -3272,12 +3270,6 @@ void* createQueryInfoFromQueryNode(SQueryInfo* pQueryInfo, SExprInfo* pExprs, ST
|
||||||
pthread_mutex_init(&pQInfo->lock, NULL);
|
pthread_mutex_init(&pQInfo->lock, NULL);
|
||||||
tsem_init(&pQInfo->ready, 0, 0);
|
tsem_init(&pQInfo->ready, 0, 0);
|
||||||
|
|
||||||
// changeExecuteScanOrder(pQInfo, pQueryMsg, stableQuery);
|
|
||||||
|
|
||||||
SQueryRuntimeEnv* pRuntimeEnv = &pQInfo->runtimeEnv;
|
|
||||||
|
|
||||||
STimeWindow window = pQueryAttr->window;
|
|
||||||
|
|
||||||
int32_t index = 0;
|
int32_t index = 0;
|
||||||
for(int32_t i = 0; i < numOfGroups; ++i) {
|
for(int32_t i = 0; i < numOfGroups; ++i) {
|
||||||
SArray* pa = taosArrayGetP(pQueryAttr->tableGroupInfo.pGroupList, i);
|
SArray* pa = taosArrayGetP(pQueryAttr->tableGroupInfo.pGroupList, i);
|
||||||
|
@ -3290,6 +3282,7 @@ void* createQueryInfoFromQueryNode(SQueryInfo* pQueryInfo, SExprInfo* pExprs, ST
|
||||||
|
|
||||||
taosArrayPush(pRuntimeEnv->tableqinfoGroupInfo.pGroupList, &p1);
|
taosArrayPush(pRuntimeEnv->tableqinfoGroupInfo.pGroupList, &p1);
|
||||||
|
|
||||||
|
STimeWindow window = pQueryAttr->window;
|
||||||
for(int32_t j = 0; j < s; ++j) {
|
for(int32_t j = 0; j < s; ++j) {
|
||||||
STableKeyInfo* info = taosArrayGet(pa, j);
|
STableKeyInfo* info = taosArrayGet(pa, j);
|
||||||
window.skey = info->lastKey;
|
window.skey = info->lastKey;
|
||||||
|
@ -3309,13 +3302,6 @@ void* createQueryInfoFromQueryNode(SQueryInfo* pQueryInfo, SExprInfo* pExprs, ST
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// colIdCheck(pQueryAttr, pQInfo);
|
|
||||||
|
|
||||||
pQInfo->qId = 0;
|
|
||||||
if (qId != NULL) {
|
|
||||||
*qId = pQInfo->qId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// qDebug("qmsg:%p QInfo:%" PRIu64 "-%p created", pQueryMsg, pQInfo->qId, pQInfo);
|
// qDebug("qmsg:%p QInfo:%" PRIu64 "-%p created", pQueryMsg, pQInfo->qId, pQInfo);
|
||||||
// return pQInfo;
|
// return pQInfo;
|
||||||
// if (pGroupbyExpr != NULL) {
|
// if (pGroupbyExpr != NULL) {
|
||||||
|
@ -3334,9 +3320,13 @@ void* createQueryInfoFromQueryNode(SQueryInfo* pQueryInfo, SExprInfo* pExprs, ST
|
||||||
|
|
||||||
tfree(pExprs);
|
tfree(pExprs);
|
||||||
|
|
||||||
|
SArray* pa = createExecOperatorPlan(pQueryAttr);
|
||||||
|
|
||||||
STsBufInfo bufInfo = {0};
|
STsBufInfo bufInfo = {0};
|
||||||
SQueryParam param = {0};
|
SQueryParam param = {.pOperator = pa};
|
||||||
/*int32_t code = */initQInfo(&bufInfo, NULL, pQInfo, ¶m, NULL, 0);
|
/*int32_t code = */initQInfo(&bufInfo, NULL, pQInfo, ¶m, NULL, 0);
|
||||||
|
|
||||||
|
pQInfo->runtimeEnv.proot->upstream = pOperator;
|
||||||
qTableQuery(pQInfo);
|
qTableQuery(pQInfo);
|
||||||
|
|
||||||
return pQInfo;
|
return pQInfo;
|
||||||
|
|
|
@ -539,6 +539,62 @@ static SColumnInfo* extractColumnInfoFromResult(STableMeta* pTableMeta, SArray*
|
||||||
return pColInfo;
|
return pColInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef struct SDummyInputInfo {
|
||||||
|
SSDataBlock block;
|
||||||
|
SSqlRes *pRes; // refactor: remove it
|
||||||
|
} SDummyInputInfo;
|
||||||
|
|
||||||
|
SSDataBlock* doGetDataBlock(void* param) {
|
||||||
|
SOperatorInfo *pOperator = (SOperatorInfo*) param;
|
||||||
|
|
||||||
|
SDummyInputInfo *pInput = pOperator->info;
|
||||||
|
char* pData = pInput->pRes->data;
|
||||||
|
|
||||||
|
SSDataBlock* pBlock = &pInput->block;
|
||||||
|
pBlock->info.rows = pInput->pRes->numOfRows;
|
||||||
|
if (pBlock->info.rows == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t offset = 0;
|
||||||
|
for(int32_t i = 0; i < pBlock->info.numOfCols; ++i) {
|
||||||
|
SColumnInfoData* pColData = taosArrayGet(pBlock->pDataBlock, i);
|
||||||
|
pColData->pData = pData + offset * pBlock->info.rows;
|
||||||
|
|
||||||
|
offset += pColData->info.bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
pInput->pRes->numOfRows = 0;
|
||||||
|
return pBlock;
|
||||||
|
}
|
||||||
|
|
||||||
|
SOperatorInfo* createDummyInputOperator(char* pResult, SSchema* pSchema, int32_t numOfCols) {
|
||||||
|
assert(numOfCols > 0);
|
||||||
|
|
||||||
|
SDummyInputInfo* pInfo = calloc(1, sizeof(SDummyInputInfo));
|
||||||
|
pInfo->pRes = (SSqlRes*) pResult;
|
||||||
|
|
||||||
|
pInfo->block.info.numOfCols = numOfCols;
|
||||||
|
pInfo->block.pDataBlock = taosArrayInit(numOfCols, sizeof(SColumnInfoData));
|
||||||
|
for(int32_t i = 0; i < numOfCols; ++i) {
|
||||||
|
SColumnInfoData colData = {0};
|
||||||
|
colData.info.bytes = pSchema[i].bytes;
|
||||||
|
colData.info.type = pSchema[i].type;
|
||||||
|
colData.info.colId = pSchema[i].colId;
|
||||||
|
|
||||||
|
taosArrayPush(pInfo->block.pDataBlock, &colData);
|
||||||
|
}
|
||||||
|
|
||||||
|
SOperatorInfo* pOptr = calloc(1, sizeof(SOperatorInfo));
|
||||||
|
pOptr->name = "DummyInputOperator";
|
||||||
|
pOptr->operatorType = OP_DummyInput;
|
||||||
|
pOptr->blockingOptr = false;
|
||||||
|
pOptr->info = pInfo;
|
||||||
|
pOptr->exec = doGetDataBlock;
|
||||||
|
|
||||||
|
return pOptr;
|
||||||
|
}
|
||||||
|
|
||||||
void prepareInputDataFromUpstream(SSqlRes* pRes, SQueryInfo* pQueryInfo) {
|
void prepareInputDataFromUpstream(SSqlRes* pRes, SQueryInfo* pQueryInfo) {
|
||||||
if (pQueryInfo->pDownstream != NULL && taosArrayGetSize(pQueryInfo->pDownstream) > 0) {
|
if (pQueryInfo->pDownstream != NULL && taosArrayGetSize(pQueryInfo->pDownstream) > 0) {
|
||||||
// handle the following query process
|
// handle the following query process
|
||||||
|
@ -553,22 +609,29 @@ void prepareInputDataFromUpstream(SSqlRes* pRes, SQueryInfo* pQueryInfo) {
|
||||||
|
|
||||||
int32_t numOfCols = taosArrayGetSize(px->colList);
|
int32_t numOfCols = taosArrayGetSize(px->colList);
|
||||||
SQueriedTableInfo info = {.colList = colInfo, .numOfCols = numOfCols,};
|
SQueriedTableInfo info = {.colList = colInfo, .numOfCols = numOfCols,};
|
||||||
|
|
||||||
/*int32_t code = */createQueryFunc(&info, numOfOutput, &exprInfo, px->exprList->pData, NULL, px->type, NULL);
|
/*int32_t code = */createQueryFunc(&info, numOfOutput, &exprInfo, px->exprList->pData, NULL, px->type, NULL);
|
||||||
tsCreateSQLFunctionCtx(px, pCtx, NULL);
|
SSchema* pSchema = tscGetTableSchema(px->pTableMetaInfo[0]->pTableMeta);
|
||||||
|
tsCreateSQLFunctionCtx(px, pCtx, pSchema);
|
||||||
|
|
||||||
STableGroupInfo tableGroupInfo = {0};
|
STableGroupInfo tableGroupInfo = {.numOfTables = 1, .pGroupList = taosArrayInit(1, POINTER_BYTES),};
|
||||||
tableGroupInfo.numOfTables = 1;
|
tableGroupInfo.map = taosHashInit(1, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true, HASH_NO_LOCK);
|
||||||
tableGroupInfo.pGroupList = taosArrayInit(1, POINTER_BYTES);
|
|
||||||
|
|
||||||
SArray* group = taosArrayInit(1, sizeof(STableKeyInfo));
|
|
||||||
|
|
||||||
STableKeyInfo tableKeyInfo = {.pTable = NULL, .lastKey = INT64_MIN};
|
STableKeyInfo tableKeyInfo = {.pTable = NULL, .lastKey = INT64_MIN};
|
||||||
|
|
||||||
|
SArray* group = taosArrayInit(1, sizeof(STableKeyInfo));
|
||||||
taosArrayPush(group, &tableKeyInfo);
|
taosArrayPush(group, &tableKeyInfo);
|
||||||
|
|
||||||
taosArrayPush(tableGroupInfo.pGroupList, &group);
|
taosArrayPush(tableGroupInfo.pGroupList, &group);
|
||||||
|
|
||||||
SQInfo* pQInfo = createQueryInfoFromQueryNode(px, exprInfo, &tableGroupInfo, 0, NULL, NULL);
|
SOperatorInfo* pSourceOptr = createDummyInputOperator((char*)pRes, pSchema, numOfOutput);
|
||||||
printf("%p\n", pQInfo);
|
|
||||||
|
SQInfo* pQInfo = createQueryInfoFromQueryNode(px, exprInfo, &tableGroupInfo, pSourceOptr, NULL, NULL);
|
||||||
|
//printf("%p\n", pQInfo);
|
||||||
|
SSDataBlock* pres = pQInfo->runtimeEnv.outputBuf;
|
||||||
|
|
||||||
|
// build result
|
||||||
|
pRes->numOfRows = pres->info.rows;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3121,6 +3184,10 @@ static int32_t createSecondaryExpr(SQueryAttr* pQueryAttr, SQueryInfo* pQueryInf
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t createTagColumnInfo(SQueryAttr* pQueryAttr, SQueryInfo* pQueryInfo, STableMetaInfo* pTableMetaInfo) {
|
static int32_t createTagColumnInfo(SQueryAttr* pQueryAttr, SQueryInfo* pQueryInfo, STableMetaInfo* pTableMetaInfo) {
|
||||||
|
if (pTableMetaInfo->tagColList == NULL) {
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
pQueryAttr->numOfTags = (int32_t)taosArrayGetSize(pTableMetaInfo->tagColList);
|
pQueryAttr->numOfTags = (int32_t)taosArrayGetSize(pTableMetaInfo->tagColList);
|
||||||
if (pQueryAttr->numOfTags == 0) {
|
if (pQueryAttr->numOfTags == 0) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
|
|
@ -289,6 +289,7 @@ enum OPERATOR_TYPE_E {
|
||||||
OP_Fill = 13,
|
OP_Fill = 13,
|
||||||
OP_MultiTableAggregate = 14,
|
OP_MultiTableAggregate = 14,
|
||||||
OP_MultiTableTimeInterval = 15,
|
OP_MultiTableTimeInterval = 15,
|
||||||
|
OP_DummyInput = 16, //TODO remove it after fully refactor.
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct SOperatorInfo {
|
typedef struct SOperatorInfo {
|
||||||
|
|
|
@ -35,13 +35,6 @@
|
||||||
|
|
||||||
#define SWITCH_ORDER(n) (((n) = ((n) == TSDB_ORDER_ASC) ? TSDB_ORDER_DESC : TSDB_ORDER_ASC))
|
#define SWITCH_ORDER(n) (((n) = ((n) == TSDB_ORDER_ASC) ? TSDB_ORDER_DESC : TSDB_ORDER_ASC))
|
||||||
|
|
||||||
#define CHECK_IF_QUERY_KILLED(_q) \
|
|
||||||
do { \
|
|
||||||
if (isQueryKilled((_q)->qinfo)) { \
|
|
||||||
longjmp((_q)->env, TSDB_CODE_TSC_QUERY_CANCELLED); \
|
|
||||||
} \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define SDATA_BLOCK_INITIALIZER (SDataBlockInfo) {{0}, 0}
|
#define SDATA_BLOCK_INITIALIZER (SDataBlockInfo) {{0}, 0}
|
||||||
|
|
||||||
#define TIME_WINDOW_COPY(_dst, _src) do {\
|
#define TIME_WINDOW_COPY(_dst, _src) do {\
|
||||||
|
@ -98,7 +91,6 @@ static UNUSED_FUNC void* u_realloc(void* p, size_t __size) {
|
||||||
#define GET_NUM_OF_TABLEGROUP(q) taosArrayGetSize((q)->tableqinfoGroupInfo.pGroupList)
|
#define GET_NUM_OF_TABLEGROUP(q) taosArrayGetSize((q)->tableqinfoGroupInfo.pGroupList)
|
||||||
#define QUERY_IS_INTERVAL_QUERY(_q) ((_q)->interval.interval > 0)
|
#define QUERY_IS_INTERVAL_QUERY(_q) ((_q)->interval.interval > 0)
|
||||||
|
|
||||||
|
|
||||||
uint64_t queryHandleId = 0;
|
uint64_t queryHandleId = 0;
|
||||||
|
|
||||||
int32_t getMaximumIdleDurationSec() {
|
int32_t getMaximumIdleDurationSec() {
|
||||||
|
@ -163,7 +155,6 @@ static STableIdInfo createTableIdInfo(STableQueryInfo* pTableQueryInfo);
|
||||||
static void setTableScanFilterOperatorInfo(STableScanInfo* pTableScanInfo, SOperatorInfo* pDownstream);
|
static void setTableScanFilterOperatorInfo(STableScanInfo* pTableScanInfo, SOperatorInfo* pDownstream);
|
||||||
|
|
||||||
static int32_t getNumOfScanTimes(SQueryAttr* pQueryAttr);
|
static int32_t getNumOfScanTimes(SQueryAttr* pQueryAttr);
|
||||||
//static bool isFixedOutputQuery(SQueryAttr* pQueryAttr);
|
|
||||||
|
|
||||||
static SOperatorInfo* createDataBlocksOptScanInfo(void* pTsdbQueryHandle, SQueryRuntimeEnv* pRuntimeEnv, int32_t repeatTime, int32_t reverseTime);
|
static SOperatorInfo* createDataBlocksOptScanInfo(void* pTsdbQueryHandle, SQueryRuntimeEnv* pRuntimeEnv, int32_t repeatTime, int32_t reverseTime);
|
||||||
static SOperatorInfo* createTableScanOperator(void* pTsdbQueryHandle, SQueryRuntimeEnv* pRuntimeEnv, int32_t repeatTime);
|
static SOperatorInfo* createTableScanOperator(void* pTsdbQueryHandle, SQueryRuntimeEnv* pRuntimeEnv, int32_t repeatTime);
|
||||||
|
@ -1732,7 +1723,9 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int32_t numOf
|
||||||
SOperatorInfo* prev = pRuntimeEnv->pTableScanner;
|
SOperatorInfo* prev = pRuntimeEnv->pTableScanner;
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
pRuntimeEnv->proot = createArithOperatorInfo(pRuntimeEnv, prev, pQueryAttr->pExpr1, pQueryAttr->numOfOutput);
|
pRuntimeEnv->proot = createArithOperatorInfo(pRuntimeEnv, prev, pQueryAttr->pExpr1, pQueryAttr->numOfOutput);
|
||||||
|
if (pRuntimeEnv->pTableScanner != NULL) { // TODO refactor
|
||||||
setTableScanFilterOperatorInfo(pRuntimeEnv->pTableScanner->info, pRuntimeEnv->proot);
|
setTableScanFilterOperatorInfo(pRuntimeEnv->pTableScanner->info, pRuntimeEnv->proot);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
prev = pRuntimeEnv->proot;
|
prev = pRuntimeEnv->proot;
|
||||||
pRuntimeEnv->proot = createArithOperatorInfo(pRuntimeEnv, prev, pQueryAttr->pExpr2, pQueryAttr->numOfExpr2);
|
pRuntimeEnv->proot = createArithOperatorInfo(pRuntimeEnv, prev, pQueryAttr->pExpr2, pQueryAttr->numOfExpr2);
|
||||||
|
@ -3971,20 +3964,6 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, SArray* prevResult, void *ts
|
||||||
pRuntimeEnv->cur.vgroupIndex = -1;
|
pRuntimeEnv->cur.vgroupIndex = -1;
|
||||||
setResultBufSize(pQueryAttr, &pRuntimeEnv->resultInfo);
|
setResultBufSize(pQueryAttr, &pRuntimeEnv->resultInfo);
|
||||||
|
|
||||||
/*
|
|
||||||
if (onlyQueryTags(pQueryAttr)) {
|
|
||||||
// pRuntimeEnv->resultInfo.capacity = 4096;
|
|
||||||
// pRuntimeEnv->proot = createTagScanOperatorInfo(pRuntimeEnv, pQueryAttr->pExpr1, pQueryAttr->numOfOutput);
|
|
||||||
} else if (pQueryAttr->queryBlockDist) {
|
|
||||||
pRuntimeEnv->pTableScanner = createTableBlockInfoScanOperator(pRuntimeEnv->pQueryHandle, pRuntimeEnv);
|
|
||||||
} else if (pQueryAttr->tsCompQuery || pQueryAttr->pointInterpQuery) {
|
|
||||||
pRuntimeEnv->pTableScanner = createTableSeqScanOperator(pRuntimeEnv->pQueryHandle, pRuntimeEnv);
|
|
||||||
} else if (needReverseScan(pQueryAttr)) {
|
|
||||||
pRuntimeEnv->pTableScanner = createDataBlocksOptScanInfo(pRuntimeEnv->pQueryHandle, pRuntimeEnv, getNumOfScanTimes(pQueryAttr), 1);
|
|
||||||
} else {
|
|
||||||
pRuntimeEnv->pTableScanner = createTableScanOperator(pRuntimeEnv->pQueryHandle, pRuntimeEnv, getNumOfScanTimes(pQueryAttr));
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
switch(tbScanner) {
|
switch(tbScanner) {
|
||||||
case OP_TableBlockInfoScan: {
|
case OP_TableBlockInfoScan: {
|
||||||
pRuntimeEnv->pTableScanner = createTableBlockInfoScanOperator(pRuntimeEnv->pQueryHandle, pRuntimeEnv);
|
pRuntimeEnv->pTableScanner = createTableBlockInfoScanOperator(pRuntimeEnv->pQueryHandle, pRuntimeEnv);
|
||||||
|
@ -4002,8 +3981,7 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, SArray* prevResult, void *ts
|
||||||
pRuntimeEnv->pTableScanner = createTableScanOperator(pRuntimeEnv->pQueryHandle, pRuntimeEnv, getNumOfScanTimes(pQueryAttr));
|
pRuntimeEnv->pTableScanner = createTableScanOperator(pRuntimeEnv->pQueryHandle, pRuntimeEnv, getNumOfScanTimes(pQueryAttr));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: { // do nothing
|
||||||
// do nothing
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4531,14 +4509,19 @@ static SSDataBlock* doArithmeticOperation(void* param) {
|
||||||
STableQueryInfo* pTableQueryInfo = pRuntimeEnv->current;
|
STableQueryInfo* pTableQueryInfo = pRuntimeEnv->current;
|
||||||
|
|
||||||
// todo dynamic set tags
|
// todo dynamic set tags
|
||||||
|
if (pTableQueryInfo != NULL) {
|
||||||
setTagValue(pOperator, pTableQueryInfo->pTable, pInfo->pCtx, pOperator->numOfOutput);
|
setTagValue(pOperator, pTableQueryInfo->pTable, pInfo->pCtx, pOperator->numOfOutput);
|
||||||
|
}
|
||||||
|
|
||||||
// the pDataBlock are always the same one, no need to call this again
|
// the pDataBlock are always the same one, no need to call this again
|
||||||
setInputDataBlock(pOperator, pInfo->pCtx, pBlock, order);
|
setInputDataBlock(pOperator, pInfo->pCtx, pBlock, order);
|
||||||
updateOutputBuf(pArithInfo, pBlock->info.rows);
|
updateOutputBuf(pArithInfo, pBlock->info.rows);
|
||||||
|
|
||||||
arithmeticApplyFunctions(pRuntimeEnv, pInfo->pCtx, pOperator->numOfOutput);
|
arithmeticApplyFunctions(pRuntimeEnv, pInfo->pCtx, pOperator->numOfOutput);
|
||||||
|
|
||||||
|
if (pTableQueryInfo != NULL) { // TODO refactor
|
||||||
updateTableIdInfo(pTableQueryInfo, pBlock, pRuntimeEnv->pTableRetrieveTsMap, order);
|
updateTableIdInfo(pTableQueryInfo, pBlock, pRuntimeEnv->pTableRetrieveTsMap, order);
|
||||||
|
}
|
||||||
|
|
||||||
pRes->info.rows = getNumOfResult(pRuntimeEnv, pInfo->pCtx, pOperator->numOfOutput);
|
pRes->info.rows = getNumOfResult(pRuntimeEnv, pInfo->pCtx, pOperator->numOfOutput);
|
||||||
if (pRes->info.rows >= pRuntimeEnv->resultInfo.threshold) {
|
if (pRes->info.rows >= pRuntimeEnv->resultInfo.threshold) {
|
||||||
|
|
Loading…
Reference in New Issue