Merge branch '3.0' of https://github.com/taosdata/TDengine into fix/hzcheng_3.0
This commit is contained in:
commit
cd762afe76
|
@ -1107,6 +1107,11 @@ int32_t blockDataSort_rv(SSDataBlock* pDataBlock, SArray* pOrderInfo, bool nullF
|
||||||
|
|
||||||
void blockDataCleanup(SSDataBlock* pDataBlock) {
|
void blockDataCleanup(SSDataBlock* pDataBlock) {
|
||||||
pDataBlock->info.rows = 0;
|
pDataBlock->info.rows = 0;
|
||||||
|
pDataBlock->info.groupId = 0;
|
||||||
|
|
||||||
|
pDataBlock->info.window.ekey = 0;
|
||||||
|
pDataBlock->info.window.skey = 0;
|
||||||
|
|
||||||
size_t numOfCols = taosArrayGetSize(pDataBlock->pDataBlock);
|
size_t numOfCols = taosArrayGetSize(pDataBlock->pDataBlock);
|
||||||
for (int32_t i = 0; i < numOfCols; ++i) {
|
for (int32_t i = 0; i < numOfCols; ++i) {
|
||||||
SColumnInfoData* p = taosArrayGet(pDataBlock->pDataBlock, i);
|
SColumnInfoData* p = taosArrayGet(pDataBlock->pDataBlock, i);
|
||||||
|
|
|
@ -215,10 +215,10 @@ int32_t tqCheckColModifiable(STQ* pTq, int32_t colId) {
|
||||||
if (pIter == NULL) break;
|
if (pIter == NULL) break;
|
||||||
STqHandle* pExec = (STqHandle*)pIter;
|
STqHandle* pExec = (STqHandle*)pIter;
|
||||||
if (pExec->execHandle.subType == TOPIC_SUB_TYPE__COLUMN) {
|
if (pExec->execHandle.subType == TOPIC_SUB_TYPE__COLUMN) {
|
||||||
int32_t sz = taosArrayGetSize(pExec->colIdList);
|
int32_t sz = pExec->execHandle.pSchemaWrapper->nCols;
|
||||||
for (int32_t i = 0; i < sz; i++) {
|
for (int32_t i = 0; i < sz; i++) {
|
||||||
int32_t forbidColId = *(int32_t*)taosArrayGet(pExec->colIdList, i);
|
SSchema* pSchema = &pExec->execHandle.pSchemaWrapper->pSchema[i];
|
||||||
if (forbidColId == colId) {
|
if (pSchema->colId == colId) {
|
||||||
taosHashCancelIterate(pTq->handles, pIter);
|
taosHashCancelIterate(pTq->handles, pIter);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -523,7 +523,8 @@ int32_t tqProcessVgChangeReq(STQ* pTq, char* msg, int32_t msgLen) {
|
||||||
.version = ver,
|
.version = ver,
|
||||||
};
|
};
|
||||||
pHandle->execHandle.execCol.task =
|
pHandle->execHandle.execCol.task =
|
||||||
qCreateQueueExecTaskInfo(pHandle->execHandle.execCol.qmsg, &handle, &pHandle->execHandle.numOfCols, &pHandle->execHandle.pSchemaWrapper);
|
qCreateQueueExecTaskInfo(pHandle->execHandle.execCol.qmsg, &handle, &pHandle->execHandle.numOfCols,
|
||||||
|
&pHandle->execHandle.pSchemaWrapper);
|
||||||
ASSERT(pHandle->execHandle.execCol.task);
|
ASSERT(pHandle->execHandle.execCol.task);
|
||||||
void* scanner = NULL;
|
void* scanner = NULL;
|
||||||
qExtractStreamScanner(pHandle->execHandle.execCol.task, &scanner);
|
qExtractStreamScanner(pHandle->execHandle.execCol.task, &scanner);
|
||||||
|
|
|
@ -108,6 +108,7 @@ int64_t tqScan(STQ* pTq, const STqHandle* pHandle, SMqDataRsp* pRsp, STqOffsetVa
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pRsp->blockNum == 0 && pOffset->type == TMQ_OFFSET__SNAPSHOT_DATA) {
|
if (pRsp->blockNum == 0 && pOffset->type == TMQ_OFFSET__SNAPSHOT_DATA) {
|
||||||
|
tqDebug("vgId: %d, tsdb consume over, switch to wal, ver %ld", TD_VID(pTq->pVnode), pHandle->snapshotVer + 1);
|
||||||
tqOffsetResetToLog(pOffset, pHandle->snapshotVer);
|
tqOffsetResetToLog(pOffset, pHandle->snapshotVer);
|
||||||
qStreamPrepareScan(task, pOffset);
|
qStreamPrepareScan(task, pOffset);
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -785,11 +785,11 @@ static int32_t copyBlockDataToSDataBlock(STsdbReader* pReader, STableBlockScanIn
|
||||||
doCopyColVal(pColData, rowIndex++, i, &cv, pSupInfo);
|
doCopyColVal(pColData, rowIndex++, i, &cv, pSupInfo);
|
||||||
}
|
}
|
||||||
colIndex += 1;
|
colIndex += 1;
|
||||||
|
ASSERT(rowIndex == remain);
|
||||||
} else { // the specified column does not exist in file block, fill with null data
|
} else { // the specified column does not exist in file block, fill with null data
|
||||||
colDataAppendNNULL(pColData, 0, remain);
|
colDataAppendNNULL(pColData, 0, remain);
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(rowIndex == remain);
|
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -869,7 +869,7 @@ SOperatorInfo* createDataBlockInfoScanOperator(void* dataReader, SReadHandle* re
|
||||||
SExecTaskInfo* pTaskInfo);
|
SExecTaskInfo* pTaskInfo);
|
||||||
|
|
||||||
SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhysiNode* pTableScanNode, SNode* pTagCond,
|
SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhysiNode* pTableScanNode, SNode* pTagCond,
|
||||||
SExecTaskInfo* pTaskInfo);
|
STimeWindowAggSupp* pTwAggSup, SExecTaskInfo* pTaskInfo);
|
||||||
|
|
||||||
SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* pPhyFillNode, SExecTaskInfo* pTaskInfo);
|
SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* pPhyFillNode, SExecTaskInfo* pTaskInfo);
|
||||||
|
|
||||||
|
|
|
@ -120,7 +120,8 @@ int32_t qSetMultiStreamInput(qTaskInfo_t tinfo, const void* pBlocks, size_t numO
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
qTaskInfo_t qCreateQueueExecTaskInfo(void* msg, SReadHandle* readers, int32_t* numOfCols, SSchemaWrapper** pSchemaWrapper) {
|
qTaskInfo_t qCreateQueueExecTaskInfo(void* msg, SReadHandle* readers, int32_t* numOfCols,
|
||||||
|
SSchemaWrapper** pSchemaWrapper) {
|
||||||
if (msg == NULL) {
|
if (msg == NULL) {
|
||||||
// TODO create raw scan
|
// TODO create raw scan
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -146,7 +147,7 @@ qTaskInfo_t qCreateQueueExecTaskInfo(void* msg, SReadHandle* readers, int32_t* n
|
||||||
SDataBlockDescNode* pDescNode = pPlan->pNode->pOutputDataBlockDesc;
|
SDataBlockDescNode* pDescNode = pPlan->pNode->pOutputDataBlockDesc;
|
||||||
*numOfCols = 0;
|
*numOfCols = 0;
|
||||||
|
|
||||||
SNode* pNode;
|
SNode* pNode;
|
||||||
FOREACH(pNode, pDescNode->pSlots) {
|
FOREACH(pNode, pDescNode->pSlots) {
|
||||||
SSlotDescNode* pSlotDesc = (SSlotDescNode*)pNode;
|
SSlotDescNode* pSlotDesc = (SSlotDescNode*)pNode;
|
||||||
if (pSlotDesc->output) {
|
if (pSlotDesc->output) {
|
||||||
|
@ -249,9 +250,11 @@ int32_t qUpdateQualifiedTableId(qTaskInfo_t tinfo, const SArray* tableIdList, bo
|
||||||
|
|
||||||
// add to qTaskInfo
|
// add to qTaskInfo
|
||||||
// todo refactor STableList
|
// todo refactor STableList
|
||||||
for(int32_t i = 0; i < taosArrayGetSize(qa); ++i) {
|
for (int32_t i = 0; i < taosArrayGetSize(qa); ++i) {
|
||||||
uint64_t* uid = taosArrayGet(qa, i);
|
uint64_t* uid = taosArrayGet(qa, i);
|
||||||
|
|
||||||
|
qDebug("table %ld added to task info", *uid);
|
||||||
|
|
||||||
STableKeyInfo keyInfo = {.uid = *uid, .groupId = 0};
|
STableKeyInfo keyInfo = {.uid = *uid, .groupId = 0};
|
||||||
taosArrayPush(pTaskInfo->tableqinfoList.pTableList, &keyInfo);
|
taosArrayPush(pTaskInfo->tableqinfoList.pTableList, &keyInfo);
|
||||||
}
|
}
|
||||||
|
|
|
@ -344,11 +344,20 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, const STqOffsetVal* pOffset) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if (pTaskInfo->streamInfo.lastStatus.type != TMQ_OFFSET__SNAPSHOT_DATA ||*/
|
/*if (pTaskInfo->streamInfo.lastStatus.type != TMQ_OFFSET__SNAPSHOT_DATA ||*/
|
||||||
/*pTaskInfo->streamInfo.lastStatus.uid != uid || pTaskInfo->streamInfo.lastStatus.ts != ts) {*/
|
/*pTaskInfo->streamInfo.lastStatus.uid != uid || pTaskInfo->streamInfo.lastStatus.ts != ts) {*/
|
||||||
STableScanInfo* pTableScanInfo = pInfo->pTableScanOp->info;
|
STableScanInfo* pTableScanInfo = pInfo->pTableScanOp->info;
|
||||||
int32_t tableSz = taosArrayGetSize(pTaskInfo->tableqinfoList.pTableList);
|
int32_t tableSz = taosArrayGetSize(pTaskInfo->tableqinfoList.pTableList);
|
||||||
bool found = false;
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
|
||||||
|
qDebug("switch to next table %ld (cursor %d), %ld rows returned", uid,
|
||||||
|
pTableScanInfo->currentTable, pInfo->pTableScanOp->resultInfo.totalRows);
|
||||||
|
pInfo->pTableScanOp->resultInfo.totalRows = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool found = false;
|
||||||
for (int32_t i = 0; i < tableSz; i++) {
|
for (int32_t i = 0; i < tableSz; i++) {
|
||||||
STableKeyInfo* pTableInfo = taosArrayGet(pTaskInfo->tableqinfoList.pTableList, i);
|
STableKeyInfo* pTableInfo = taosArrayGet(pTaskInfo->tableqinfoList.pTableList, i);
|
||||||
if (pTableInfo->uid == uid) {
|
if (pTableInfo->uid == uid) {
|
||||||
|
|
|
@ -376,9 +376,7 @@ void initExecTimeWindowInfo(SColumnInfoData* pColData, STimeWindow* pQueryWindow
|
||||||
colDataAppendInt64(pColData, 4, &pQueryWindow->ekey);
|
colDataAppendInt64(pColData, 4, &pQueryWindow->ekey);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cleanupExecTimeWindowInfo(SColumnInfoData* pColData) {
|
void cleanupExecTimeWindowInfo(SColumnInfoData* pColData) { colDataDestroy(pColData); }
|
||||||
colDataDestroy(pColData);
|
|
||||||
}
|
|
||||||
|
|
||||||
void doApplyFunctions(SExecTaskInfo* taskInfo, SqlFunctionCtx* pCtx, STimeWindow* pWin,
|
void doApplyFunctions(SExecTaskInfo* taskInfo, SqlFunctionCtx* pCtx, STimeWindow* pWin,
|
||||||
SColumnInfoData* pTimeWindowData, int32_t offset, int32_t forwardStep, TSKEY* tsCol,
|
SColumnInfoData* pTimeWindowData, int32_t offset, int32_t forwardStep, TSKEY* tsCol,
|
||||||
|
@ -524,8 +522,8 @@ static int32_t doSetInputDataBlock(SOperatorInfo* pOperator, SqlFunctionCtx* pCt
|
||||||
// NOTE: the last parameter is the primary timestamp column
|
// NOTE: the last parameter is the primary timestamp column
|
||||||
// todo: refactor this
|
// todo: refactor this
|
||||||
if (fmIsTimelineFunc(pCtx[i].functionId) && (j == pOneExpr->base.numOfParams - 1)) {
|
if (fmIsTimelineFunc(pCtx[i].functionId) && (j == pOneExpr->base.numOfParams - 1)) {
|
||||||
pInput->pPTS = pInput->pData[j]; // in case of merge function, this is not always the ts column data.
|
pInput->pPTS = pInput->pData[j]; // in case of merge function, this is not always the ts column data.
|
||||||
// ASSERT(pInput->pPTS->info.type == TSDB_DATA_TYPE_TIMESTAMP);
|
// ASSERT(pInput->pPTS->info.type == TSDB_DATA_TYPE_TIMESTAMP);
|
||||||
}
|
}
|
||||||
ASSERT(pInput->pData[j] != NULL);
|
ASSERT(pInput->pData[j] != NULL);
|
||||||
} else if (pFuncParam->type == FUNC_PARAM_TYPE_VALUE) {
|
} else if (pFuncParam->type == FUNC_PARAM_TYPE_VALUE) {
|
||||||
|
@ -633,7 +631,7 @@ int32_t projectApplyFunctions(SExprInfo* pExpr, SSDataBlock* pResult, SSDataBloc
|
||||||
ASSERT(pResult->info.capacity > 0);
|
ASSERT(pResult->info.capacity > 0);
|
||||||
colDataMergeCol(pResColData, startOffset, &pResult->info.capacity, &idata, dest.numOfRows);
|
colDataMergeCol(pResColData, startOffset, &pResult->info.capacity, &idata, dest.numOfRows);
|
||||||
colDataDestroy(&idata);
|
colDataDestroy(&idata);
|
||||||
|
|
||||||
numOfRows = dest.numOfRows;
|
numOfRows = dest.numOfRows;
|
||||||
taosArrayDestroy(pBlockList);
|
taosArrayDestroy(pBlockList);
|
||||||
} else if (pExpr[k].pExpr->nodeType == QUERY_NODE_FUNCTION) {
|
} else if (pExpr[k].pExpr->nodeType == QUERY_NODE_FUNCTION) {
|
||||||
|
@ -835,7 +833,7 @@ void setTaskKilled(SExecTaskInfo* pTaskInfo) { pTaskInfo->code = TSDB_CODE_TSC_Q
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
STimeWindow getAlignQueryTimeWindow(SInterval* pInterval, int32_t precision, int64_t key) {
|
STimeWindow getAlignQueryTimeWindow(SInterval* pInterval, int32_t precision, int64_t key) {
|
||||||
STimeWindow win = {0};
|
STimeWindow win = {0};
|
||||||
win.skey = taosTimeTruncate(key, pInterval, precision);
|
win.skey = taosTimeTruncate(key, pInterval, precision);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1336,12 +1334,10 @@ void setResultRowInitCtx(SResultRow* pResult, SqlFunctionCtx* pCtx, int32_t numO
|
||||||
static void extractQualifiedTupleByFilterResult(SSDataBlock* pBlock, const int8_t* rowRes, bool keep);
|
static void extractQualifiedTupleByFilterResult(SSDataBlock* pBlock, const int8_t* rowRes, bool keep);
|
||||||
|
|
||||||
void doFilter(const SNode* pFilterNode, SSDataBlock* pBlock) {
|
void doFilter(const SNode* pFilterNode, SSDataBlock* pBlock) {
|
||||||
if (pFilterNode == NULL) {
|
if (pFilterNode == NULL || pBlock->info.rows == 0) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (pBlock->info.rows == 0) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SFilterInfo* filter = NULL;
|
SFilterInfo* filter = NULL;
|
||||||
|
|
||||||
// todo move to the initialization function
|
// todo move to the initialization function
|
||||||
|
@ -1358,8 +1354,6 @@ void doFilter(const SNode* pFilterNode, SSDataBlock* pBlock) {
|
||||||
filterFreeInfo(filter);
|
filterFreeInfo(filter);
|
||||||
|
|
||||||
extractQualifiedTupleByFilterResult(pBlock, rowRes, keep);
|
extractQualifiedTupleByFilterResult(pBlock, rowRes, keep);
|
||||||
blockDataUpdateTsWindow(pBlock, 0);
|
|
||||||
|
|
||||||
taosMemoryFree(rowRes);
|
taosMemoryFree(rowRes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2378,7 +2372,7 @@ static SSDataBlock* doLoadRemoteData(SOperatorInfo* pOperator) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(1) {
|
while (1) {
|
||||||
SSDataBlock* pBlock = doLoadRemoteDataImpl(pOperator);
|
SSDataBlock* pBlock = doLoadRemoteDataImpl(pOperator);
|
||||||
if (pBlock == NULL) {
|
if (pBlock == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -3414,6 +3408,7 @@ static SSDataBlock* doFillImpl(SOperatorInfo* pOperator) {
|
||||||
|
|
||||||
doHandleRemainBlockFromNewGroup(pInfo, pResultInfo, pTaskInfo);
|
doHandleRemainBlockFromNewGroup(pInfo, pResultInfo, pTaskInfo);
|
||||||
if (pResBlock->info.rows > pResultInfo->threshold || pResBlock->info.rows > 0) {
|
if (pResBlock->info.rows > pResultInfo->threshold || pResBlock->info.rows > 0) {
|
||||||
|
pResBlock->info.groupId = pInfo->curGroupId;
|
||||||
return pResBlock;
|
return pResBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3431,13 +3426,13 @@ static SSDataBlock* doFillImpl(SOperatorInfo* pOperator) {
|
||||||
blockDataUpdateTsWindow(pBlock, pInfo->primaryTsCol);
|
blockDataUpdateTsWindow(pBlock, pInfo->primaryTsCol);
|
||||||
|
|
||||||
if (pInfo->curGroupId == 0 || pInfo->curGroupId == pBlock->info.groupId) {
|
if (pInfo->curGroupId == 0 || pInfo->curGroupId == pBlock->info.groupId) {
|
||||||
pInfo->curGroupId = pBlock->info.groupId; // the first data block
|
pInfo->curGroupId = pBlock->info.groupId; // the first data block
|
||||||
|
|
||||||
pInfo->totalInputRows += pBlock->info.rows;
|
pInfo->totalInputRows += pBlock->info.rows;
|
||||||
|
|
||||||
taosFillSetStartInfo(pInfo->pFillInfo, pBlock->info.rows, pBlock->info.window.ekey);
|
taosFillSetStartInfo(pInfo->pFillInfo, pBlock->info.rows, pBlock->info.window.ekey);
|
||||||
taosFillSetInputDataBlock(pInfo->pFillInfo, pBlock);
|
taosFillSetInputDataBlock(pInfo->pFillInfo, pBlock);
|
||||||
} else if (pInfo->curGroupId != pBlock->info.groupId) { // the new group data block
|
} else if (pInfo->curGroupId != pBlock->info.groupId) { // the new group data block
|
||||||
pInfo->existNewGroupBlock = pBlock;
|
pInfo->existNewGroupBlock = pBlock;
|
||||||
|
|
||||||
// Fill the previous group data block, before handle the data block of new group.
|
// Fill the previous group data block, before handle the data block of new group.
|
||||||
|
@ -3456,17 +3451,20 @@ static SSDataBlock* doFillImpl(SOperatorInfo* pOperator) {
|
||||||
// 1. The result in current group not reach the threshold of output result, continue
|
// 1. The result in current group not reach the threshold of output result, continue
|
||||||
// 2. If multiple group results existing in one SSDataBlock is not allowed, return immediately
|
// 2. If multiple group results existing in one SSDataBlock is not allowed, return immediately
|
||||||
if (pResBlock->info.rows > pResultInfo->threshold || pBlock == NULL || pInfo->existNewGroupBlock != NULL) {
|
if (pResBlock->info.rows > pResultInfo->threshold || pBlock == NULL || pInfo->existNewGroupBlock != NULL) {
|
||||||
|
pResBlock->info.groupId = pInfo->curGroupId;
|
||||||
return pResBlock;
|
return pResBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
doHandleRemainBlockFromNewGroup(pInfo, pResultInfo, pTaskInfo);
|
doHandleRemainBlockFromNewGroup(pInfo, pResultInfo, pTaskInfo);
|
||||||
if (pResBlock->info.rows >= pOperator->resultInfo.threshold || pBlock == NULL) {
|
if (pResBlock->info.rows >= pOperator->resultInfo.threshold || pBlock == NULL) {
|
||||||
|
pResBlock->info.groupId = pInfo->curGroupId;
|
||||||
return pResBlock;
|
return pResBlock;
|
||||||
}
|
}
|
||||||
} else if (pInfo->existNewGroupBlock) { // try next group
|
} else if (pInfo->existNewGroupBlock) { // try next group
|
||||||
assert(pBlock != NULL);
|
assert(pBlock != NULL);
|
||||||
doHandleRemainBlockForNewGroupImpl(pInfo, pResultInfo, pTaskInfo);
|
doHandleRemainBlockForNewGroupImpl(pInfo, pResultInfo, pTaskInfo);
|
||||||
if (pResBlock->info.rows > pResultInfo->threshold) {
|
if (pResBlock->info.rows > pResultInfo->threshold) {
|
||||||
|
pResBlock->info.groupId = pInfo->curGroupId;
|
||||||
return pResBlock;
|
return pResBlock;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -3486,23 +3484,19 @@ static SSDataBlock* doFill(SOperatorInfo* pOperator) {
|
||||||
SSDataBlock* fillResult = NULL;
|
SSDataBlock* fillResult = NULL;
|
||||||
while (true) {
|
while (true) {
|
||||||
fillResult = doFillImpl(pOperator);
|
fillResult = doFillImpl(pOperator);
|
||||||
if (fillResult != NULL) {
|
|
||||||
doFilter(pInfo->pCondition, fillResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fillResult == NULL) {
|
if (fillResult == NULL) {
|
||||||
doSetOperatorCompleted(pOperator);
|
doSetOperatorCompleted(pOperator);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
doFilter(pInfo->pCondition, fillResult);
|
||||||
if (fillResult->info.rows > 0) {
|
if (fillResult->info.rows > 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fillResult != NULL) {
|
if (fillResult != NULL) {
|
||||||
size_t rows = fillResult->info.rows;
|
pOperator->resultInfo.totalRows += fillResult->info.rows;
|
||||||
pOperator->resultInfo.totalRows += rows;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return fillResult;
|
return fillResult;
|
||||||
|
@ -3511,7 +3505,7 @@ static SSDataBlock* doFill(SOperatorInfo* pOperator) {
|
||||||
static void destroyExprInfo(SExprInfo* pExpr, int32_t numOfExprs) {
|
static void destroyExprInfo(SExprInfo* pExpr, int32_t numOfExprs) {
|
||||||
for (int32_t i = 0; i < numOfExprs; ++i) {
|
for (int32_t i = 0; i < numOfExprs; ++i) {
|
||||||
SExprInfo* pExprInfo = &pExpr[i];
|
SExprInfo* pExprInfo = &pExpr[i];
|
||||||
for(int32_t j = 0; j < pExprInfo->base.numOfParams; ++j) {
|
for (int32_t j = 0; j < pExprInfo->base.numOfParams; ++j) {
|
||||||
if (pExprInfo->base.pParam[j].type == FUNC_PARAM_TYPE_COLUMN) {
|
if (pExprInfo->base.pParam[j].type == FUNC_PARAM_TYPE_COLUMN) {
|
||||||
taosMemoryFreeClear(pExprInfo->base.pParam[j].pCol);
|
taosMemoryFreeClear(pExprInfo->base.pParam[j].pCol);
|
||||||
}
|
}
|
||||||
|
@ -3604,7 +3598,7 @@ int32_t initAggInfo(SExprSupp* pSup, SAggSupporter* pAggSup, SExprInfo* pExprInf
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void initResultSizeInfo(SResultInfo * pResultInfo, int32_t numOfRows) {
|
void initResultSizeInfo(SResultInfo* pResultInfo, int32_t numOfRows) {
|
||||||
ASSERT(numOfRows != 0);
|
ASSERT(numOfRows != 0);
|
||||||
pResultInfo->capacity = numOfRows;
|
pResultInfo->capacity = numOfRows;
|
||||||
pResultInfo->threshold = numOfRows * 0.75;
|
pResultInfo->threshold = numOfRows * 0.75;
|
||||||
|
@ -3724,7 +3718,6 @@ void destroyBasicOperatorInfo(void* param, int32_t numOfOutput) {
|
||||||
taosMemoryFreeClear(param);
|
taosMemoryFreeClear(param);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void freeItem(void* pItem) {
|
static void freeItem(void* pItem) {
|
||||||
void** p = pItem;
|
void** p = pItem;
|
||||||
if (*p != NULL) {
|
if (*p != NULL) {
|
||||||
|
@ -4051,8 +4044,8 @@ static int32_t initFillInfo(SFillOperatorInfo* pInfo, SExprInfo* pExpr, int32_t
|
||||||
w = getFirstQualifiedTimeWindow(win.skey, &w, pInterval, TSDB_ORDER_ASC);
|
w = getFirstQualifiedTimeWindow(win.skey, &w, pInterval, TSDB_ORDER_ASC);
|
||||||
|
|
||||||
int32_t order = TSDB_ORDER_ASC;
|
int32_t order = TSDB_ORDER_ASC;
|
||||||
pInfo->pFillInfo = taosCreateFillInfo(order, w.skey, 0, capacity, numOfCols, pInterval,
|
pInfo->pFillInfo =
|
||||||
fillType, pColInfo, pInfo->primaryTsCol, id);
|
taosCreateFillInfo(order, w.skey, 0, capacity, numOfCols, pInterval, fillType, pColInfo, pInfo->primaryTsCol, id);
|
||||||
|
|
||||||
pInfo->win = win;
|
pInfo->win = win;
|
||||||
pInfo->p = taosMemoryCalloc(numOfCols, POINTER_BYTES);
|
pInfo->p = taosMemoryCalloc(numOfCols, POINTER_BYTES);
|
||||||
|
@ -4066,7 +4059,8 @@ static int32_t initFillInfo(SFillOperatorInfo* pInfo, SExprInfo* pExpr, int32_t
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* pPhyFillNode, SExecTaskInfo* pTaskInfo) {
|
SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* pPhyFillNode,
|
||||||
|
SExecTaskInfo* pTaskInfo) {
|
||||||
SFillOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SFillOperatorInfo));
|
SFillOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SFillOperatorInfo));
|
||||||
SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo));
|
SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo));
|
||||||
if (pInfo == NULL || pOperator == NULL) {
|
if (pInfo == NULL || pOperator == NULL) {
|
||||||
|
@ -4149,8 +4143,8 @@ int32_t extractTableSchemaInfo(SReadHandle* pHandle, SScanPhysiNode* pScanNode,
|
||||||
metaReaderInit(&mr, pHandle->meta, 0);
|
metaReaderInit(&mr, pHandle->meta, 0);
|
||||||
int32_t code = metaGetTableEntryByUid(&mr, pScanNode->uid);
|
int32_t code = metaGetTableEntryByUid(&mr, pScanNode->uid);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
qError("failed to get the table meta, uid:0x%"PRIx64", suid:0x%"PRIx64 ", %s", pScanNode->uid, pScanNode->suid,
|
qError("failed to get the table meta, uid:0x%" PRIx64 ", suid:0x%" PRIx64 ", %s", pScanNode->uid, pScanNode->suid,
|
||||||
GET_TASKID(pTaskInfo));
|
GET_TASKID(pTaskInfo));
|
||||||
|
|
||||||
metaReaderClear(&mr);
|
metaReaderClear(&mr);
|
||||||
return terrno;
|
return terrno;
|
||||||
|
@ -4180,11 +4174,11 @@ int32_t extractTableSchemaInfo(SReadHandle* pHandle, SScanPhysiNode* pScanNode,
|
||||||
}
|
}
|
||||||
|
|
||||||
SSchemaWrapper* extractQueriedColumnSchema(SScanPhysiNode* pScanNode) {
|
SSchemaWrapper* extractQueriedColumnSchema(SScanPhysiNode* pScanNode) {
|
||||||
int32_t numOfCols = LIST_LENGTH(pScanNode->pScanCols);
|
int32_t numOfCols = LIST_LENGTH(pScanNode->pScanCols);
|
||||||
SSchemaWrapper* pqSw = taosMemoryCalloc(1, sizeof(SSchemaWrapper));
|
SSchemaWrapper* pqSw = taosMemoryCalloc(1, sizeof(SSchemaWrapper));
|
||||||
pqSw->pSchema = taosMemoryCalloc(numOfCols, sizeof(SSchema));
|
pqSw->pSchema = taosMemoryCalloc(numOfCols, sizeof(SSchema));
|
||||||
|
|
||||||
for(int32_t i = 0; i < numOfCols; ++i) {
|
for (int32_t i = 0; i < numOfCols; ++i) {
|
||||||
STargetNode* pNode = (STargetNode*)nodesListGetNode(pScanNode->pScanCols, i);
|
STargetNode* pNode = (STargetNode*)nodesListGetNode(pScanNode->pScanCols, i);
|
||||||
SColumnNode* pColNode = (SColumnNode*)pNode->pExpr;
|
SColumnNode* pColNode = (SColumnNode*)pNode->pExpr;
|
||||||
|
|
||||||
|
@ -4387,21 +4381,23 @@ static int32_t initTableblockDistQueryCond(uint64_t uid, SQueryTableDataCond* pC
|
||||||
pCond->suid = uid;
|
pCond->suid = uid;
|
||||||
pCond->type = BLOCK_LOAD_OFFSET_ORDER;
|
pCond->type = BLOCK_LOAD_OFFSET_ORDER;
|
||||||
pCond->startVersion = -1;
|
pCond->startVersion = -1;
|
||||||
pCond->endVersion = -1;
|
pCond->endVersion = -1;
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle,
|
SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle,
|
||||||
STableListInfo* pTableListInfo, SNode* pTagCond, SNode* pTagIndexCond, const char* pUser) {
|
STableListInfo* pTableListInfo, SNode* pTagCond, SNode* pTagIndexCond,
|
||||||
|
const char* pUser) {
|
||||||
int32_t type = nodeType(pPhyNode);
|
int32_t type = nodeType(pPhyNode);
|
||||||
|
|
||||||
if (pPhyNode->pChildren == NULL || LIST_LENGTH(pPhyNode->pChildren) == 0) {
|
if (pPhyNode->pChildren == NULL || LIST_LENGTH(pPhyNode->pChildren) == 0) {
|
||||||
if (QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN == type) {
|
if (QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN == type) {
|
||||||
STableScanPhysiNode* pTableScanNode = (STableScanPhysiNode*)pPhyNode;
|
STableScanPhysiNode* pTableScanNode = (STableScanPhysiNode*)pPhyNode;
|
||||||
|
|
||||||
int32_t code = createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags,
|
int32_t code =
|
||||||
pTableScanNode->groupSort, pHandle, pTableListInfo, pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo));
|
createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags, pTableScanNode->groupSort, pHandle,
|
||||||
|
pTableListInfo, pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo));
|
||||||
if (code) {
|
if (code) {
|
||||||
pTaskInfo->code = code;
|
pTaskInfo->code = code;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -4420,8 +4416,9 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo
|
||||||
|
|
||||||
} else if (QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN == type) {
|
} else if (QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN == type) {
|
||||||
STableMergeScanPhysiNode* pTableScanNode = (STableMergeScanPhysiNode*)pPhyNode;
|
STableMergeScanPhysiNode* pTableScanNode = (STableMergeScanPhysiNode*)pPhyNode;
|
||||||
int32_t code = createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags,
|
int32_t code =
|
||||||
pTableScanNode->groupSort, pHandle, pTableListInfo, pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo));
|
createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags, pTableScanNode->groupSort, pHandle,
|
||||||
|
pTableListInfo, pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo));
|
||||||
if (code) {
|
if (code) {
|
||||||
pTaskInfo->code = code;
|
pTaskInfo->code = code;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -4433,8 +4430,7 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
SOperatorInfo* pOperator =
|
SOperatorInfo* pOperator = createTableMergeScanOperatorInfo(pTableScanNode, pTableListInfo, pHandle, pTaskInfo);
|
||||||
createTableMergeScanOperatorInfo(pTableScanNode, pTableListInfo, pHandle, pTaskInfo);
|
|
||||||
|
|
||||||
STableScanInfo* pScanInfo = pOperator->info;
|
STableScanInfo* pScanInfo = pOperator->info;
|
||||||
pTaskInfo->cost.pRecoder = &pScanInfo->readRecorder;
|
pTaskInfo->cost.pRecoder = &pScanInfo->readRecorder;
|
||||||
|
@ -4444,17 +4440,32 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo
|
||||||
return createExchangeOperatorInfo(pHandle->pMsgCb->clientRpc, (SExchangePhysiNode*)pPhyNode, pTaskInfo);
|
return createExchangeOperatorInfo(pHandle->pMsgCb->clientRpc, (SExchangePhysiNode*)pPhyNode, pTaskInfo);
|
||||||
} else if (QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN == type) {
|
} else if (QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN == type) {
|
||||||
STableScanPhysiNode* pTableScanNode = (STableScanPhysiNode*)pPhyNode;
|
STableScanPhysiNode* pTableScanNode = (STableScanPhysiNode*)pPhyNode;
|
||||||
|
STimeWindowAggSupp aggSup = (STimeWindowAggSupp){
|
||||||
|
.waterMark = pTableScanNode->watermark,
|
||||||
|
.calTrigger = pTableScanNode->triggerType,
|
||||||
|
.maxTs = INT64_MIN,
|
||||||
|
};
|
||||||
|
|
||||||
if (pHandle->vnode) {
|
if (pHandle->vnode) {
|
||||||
int32_t code = createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags,
|
int32_t code =
|
||||||
pTableScanNode->groupSort, pHandle, pTableListInfo, pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo));
|
createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags, pTableScanNode->groupSort,
|
||||||
|
pHandle, pTableListInfo, pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo));
|
||||||
if (code) {
|
if (code) {
|
||||||
pTaskInfo->code = code;
|
pTaskInfo->code = code;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
int32_t sz = taosArrayGetSize(pTableListInfo->pTableList);
|
||||||
|
for (int32_t i = 0; i < sz; i++) {
|
||||||
|
STableKeyInfo* pKeyInfo = taosArrayGet(pTableListInfo->pTableList, i);
|
||||||
|
qDebug("creating stream task: add table %ld", pKeyInfo->uid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
pTaskInfo->schemaInfo.qsw = extractQueriedColumnSchema(&pTableScanNode->scan);
|
pTaskInfo->schemaInfo.qsw = extractQueriedColumnSchema(&pTableScanNode->scan);
|
||||||
SOperatorInfo* pOperator = createStreamScanOperatorInfo(pHandle, pTableScanNode, pTagCond, pTaskInfo);
|
SOperatorInfo* pOperator = createStreamScanOperatorInfo(pHandle, pTableScanNode, pTagCond, &aggSup, pTaskInfo);
|
||||||
return pOperator;
|
return pOperator;
|
||||||
|
|
||||||
} else if (QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN == type) {
|
} else if (QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN == type) {
|
||||||
|
@ -4486,7 +4497,7 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
SQueryTableDataCond cond = {0};
|
SQueryTableDataCond cond = {0};
|
||||||
int32_t code = initTableblockDistQueryCond(pBlockNode->suid, &cond);
|
int32_t code = initTableblockDistQueryCond(pBlockNode->suid, &cond);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -4499,7 +4510,8 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo
|
||||||
} else if (QUERY_NODE_PHYSICAL_PLAN_LAST_ROW_SCAN == type) {
|
} else if (QUERY_NODE_PHYSICAL_PLAN_LAST_ROW_SCAN == type) {
|
||||||
SLastRowScanPhysiNode* pScanNode = (SLastRowScanPhysiNode*)pPhyNode;
|
SLastRowScanPhysiNode* pScanNode = (SLastRowScanPhysiNode*)pPhyNode;
|
||||||
|
|
||||||
int32_t code = createScanTableListInfo(&pScanNode->scan, pScanNode->pGroupTags, true, pHandle, pTableListInfo, pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo));
|
int32_t code = createScanTableListInfo(&pScanNode->scan, pScanNode->pGroupTags, true, pHandle, pTableListInfo,
|
||||||
|
pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo));
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
pTaskInfo->code = code;
|
pTaskInfo->code = code;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -4961,7 +4973,8 @@ int32_t createExecTaskInfoImpl(SSubplan* pPlan, SExecTaskInfo** pTaskInfo, SRead
|
||||||
|
|
||||||
(*pTaskInfo)->sql = sql;
|
(*pTaskInfo)->sql = sql;
|
||||||
(*pTaskInfo)->pSubplan = pPlan;
|
(*pTaskInfo)->pSubplan = pPlan;
|
||||||
(*pTaskInfo)->pRoot = createOperatorTree(pPlan->pNode, *pTaskInfo, pHandle, &(*pTaskInfo)->tableqinfoList, pPlan->pTagCond, pPlan->pTagIndexCond, pPlan->user);
|
(*pTaskInfo)->pRoot = createOperatorTree(pPlan->pNode, *pTaskInfo, pHandle, &(*pTaskInfo)->tableqinfoList,
|
||||||
|
pPlan->pTagCond, pPlan->pTagIndexCond, pPlan->user);
|
||||||
|
|
||||||
if (NULL == (*pTaskInfo)->pRoot) {
|
if (NULL == (*pTaskInfo)->pRoot) {
|
||||||
code = (*pTaskInfo)->code;
|
code = (*pTaskInfo)->code;
|
||||||
|
|
|
@ -1530,7 +1530,7 @@ static void destroyStreamScanOperatorInfo(void* param, int32_t numOfOutput) {
|
||||||
}
|
}
|
||||||
|
|
||||||
SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhysiNode* pTableScanNode, SNode* pTagCond,
|
SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhysiNode* pTableScanNode, SNode* pTagCond,
|
||||||
SExecTaskInfo* pTaskInfo) {
|
STimeWindowAggSupp* pTwSup, SExecTaskInfo* pTaskInfo) {
|
||||||
SStreamScanInfo* pInfo = taosMemoryCalloc(1, sizeof(SStreamScanInfo));
|
SStreamScanInfo* pInfo = taosMemoryCalloc(1, sizeof(SStreamScanInfo));
|
||||||
SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo));
|
SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo));
|
||||||
|
|
||||||
|
@ -1544,11 +1544,7 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys
|
||||||
|
|
||||||
pInfo->pTagCond = pTagCond;
|
pInfo->pTagCond = pTagCond;
|
||||||
|
|
||||||
pInfo->twAggSup = (STimeWindowAggSupp){
|
pInfo->twAggSup = *pTwSup;
|
||||||
.waterMark = pTableScanNode->watermark,
|
|
||||||
.calTrigger = pTableScanNode->triggerType,
|
|
||||||
.maxTs = INT64_MIN,
|
|
||||||
};
|
|
||||||
|
|
||||||
int32_t numOfCols = 0;
|
int32_t numOfCols = 0;
|
||||||
pInfo->pColMatchInfo = extractColMatchInfo(pScanPhyNode->pScanCols, pDescNode, &numOfCols, COL_MATCH_FROM_COL_ID);
|
pInfo->pColMatchInfo = extractColMatchInfo(pScanPhyNode->pScanCols, pDescNode, &numOfCols, COL_MATCH_FROM_COL_ID);
|
||||||
|
|
|
@ -2088,7 +2088,7 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
|
||||||
.classification = FUNC_MGT_AGG_FUNC,
|
.classification = FUNC_MGT_AGG_FUNC,
|
||||||
.translateFunc = translateApercentileMerge,
|
.translateFunc = translateApercentileMerge,
|
||||||
.getEnvFunc = getApercentileFuncEnv,
|
.getEnvFunc = getApercentileFuncEnv,
|
||||||
.initFunc = functionSetup,
|
.initFunc = apercentileFunctionSetup,
|
||||||
.processFunc = apercentileFunctionMerge,
|
.processFunc = apercentileFunctionMerge,
|
||||||
.finalizeFunc = apercentileFinalize,
|
.finalizeFunc = apercentileFinalize,
|
||||||
.invertFunc = NULL,
|
.invertFunc = NULL,
|
||||||
|
|
|
@ -2592,6 +2592,7 @@ int32_t apercentileFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
|
||||||
SAPercentileInfo* pInfo = (SAPercentileInfo*)GET_ROWCELL_INTERBUF(pResInfo);
|
SAPercentileInfo* pInfo = (SAPercentileInfo*)GET_ROWCELL_INTERBUF(pResInfo);
|
||||||
|
|
||||||
if (pInfo->algo == APERCT_ALGO_TDIGEST) {
|
if (pInfo->algo == APERCT_ALGO_TDIGEST) {
|
||||||
|
buildTDigestInfo(pInfo);
|
||||||
if (pInfo->pTDigest->size > 0) {
|
if (pInfo->pTDigest->size > 0) {
|
||||||
pInfo->result = tdigestQuantile(pInfo->pTDigest, pInfo->percent / 100);
|
pInfo->result = tdigestQuantile(pInfo->pTDigest, pInfo->percent / 100);
|
||||||
} else { // no need to free
|
} else { // no need to free
|
||||||
|
@ -2599,6 +2600,7 @@ int32_t apercentileFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
buildHistogramInfo(pInfo);
|
||||||
if (pInfo->pHisto->numOfElems > 0) {
|
if (pInfo->pHisto->numOfElems > 0) {
|
||||||
qDebug("get the final res:%d, elements:%"PRId64", entry:%d", pInfo->pHisto->numOfElems, pInfo->pHisto->numOfEntries);
|
qDebug("get the final res:%d, elements:%"PRId64", entry:%d", pInfo->pHisto->numOfElems, pInfo->pHisto->numOfEntries);
|
||||||
|
|
||||||
|
|
|
@ -884,9 +884,17 @@ static int32_t createDistinctLogicNode(SLogicPlanContext* pCxt, SSelectStmt* pSe
|
||||||
|
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
// set grouyp keys, agg funcs and having conditions
|
// set grouyp keys, agg funcs and having conditions
|
||||||
pAgg->pGroupKeys = nodesCloneList(pSelect->pProjectionList);
|
SNodeList* pGroupKeys = NULL;
|
||||||
if (NULL == pAgg->pGroupKeys) {
|
SNode* pProjection = NULL;
|
||||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
FOREACH(pProjection, pSelect->pProjectionList) {
|
||||||
|
code = nodesListMakeStrictAppend(&pGroupKeys, createGroupingSetNode(pProjection));
|
||||||
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
|
nodesDestroyList(pGroupKeys);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
pAgg->pGroupKeys = pGroupKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
// rewrite the expression in subsequent clauses
|
// rewrite the expression in subsequent clauses
|
||||||
|
|
|
@ -2149,7 +2149,16 @@ static bool tagScanMayBeOptimized(SLogicNode* pNode) {
|
||||||
planOptNodeListHasCol(pAgg->pGroupKeys) || !planOptNodeListHasTbname(pAgg->pGroupKeys)) {
|
planOptNodeListHasCol(pAgg->pGroupKeys) || !planOptNodeListHasTbname(pAgg->pGroupKeys)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SNode* pGroupKey = NULL;
|
||||||
|
FOREACH(pGroupKey, pAgg->pGroupKeys) {
|
||||||
|
SNode* pGroup = NULL;
|
||||||
|
FOREACH(pGroup, ((SGroupingSetNode*)pGroupKey)->pParameterList) {
|
||||||
|
if (QUERY_NODE_COLUMN != nodeType(pGroup)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -159,6 +159,7 @@ static SArray* streamExecForQall(SStreamTask* pTask, SArray* pRes) {
|
||||||
if (data == NULL) {
|
if (data == NULL) {
|
||||||
data = qItem;
|
data = qItem;
|
||||||
streamQueueProcessSuccess(pTask->inputQueue);
|
streamQueueProcessSuccess(pTask->inputQueue);
|
||||||
|
if (pTask->execType == TASK_EXEC__NONE) break;
|
||||||
/*if (qItem->type == STREAM_INPUT__DATA_BLOCK) {*/
|
/*if (qItem->type == STREAM_INPUT__DATA_BLOCK) {*/
|
||||||
/*streamUpdateVer(pTask, (SStreamDataBlock*)qItem);*/
|
/*streamUpdateVer(pTask, (SStreamDataBlock*)qItem);*/
|
||||||
/*}*/
|
/*}*/
|
||||||
|
|
|
@ -27,11 +27,11 @@
|
||||||
./test.sh -f tsim/db/delete_writing2.sim
|
./test.sh -f tsim/db/delete_writing2.sim
|
||||||
# unsupport ./test.sh -f tsim/db/dropdnodes.sim
|
# unsupport ./test.sh -f tsim/db/dropdnodes.sim
|
||||||
./test.sh -f tsim/db/error1.sim
|
./test.sh -f tsim/db/error1.sim
|
||||||
# jira ./test.sh -f tsim/db/keep.sim
|
# TD-17592 ./test.sh -f tsim/db/keep.sim
|
||||||
./test.sh -f tsim/db/len.sim
|
./test.sh -f tsim/db/len.sim
|
||||||
./test.sh -f tsim/db/repeat.sim
|
./test.sh -f tsim/db/repeat.sim
|
||||||
./test.sh -f tsim/db/show_create_db.sim
|
./test.sh -f tsim/db/show_create_db.sim
|
||||||
# jira ./test.sh -f tsim/db/show_create_table.sim
|
./test.sh -f tsim/db/show_create_table.sim
|
||||||
./test.sh -f tsim/db/tables.sim
|
./test.sh -f tsim/db/tables.sim
|
||||||
./test.sh -f tsim/db/taosdlog.sim
|
./test.sh -f tsim/db/taosdlog.sim
|
||||||
|
|
||||||
|
@ -87,83 +87,82 @@
|
||||||
./test.sh -f tsim/parser/alter_column.sim
|
./test.sh -f tsim/parser/alter_column.sim
|
||||||
./test.sh -f tsim/parser/alter_stable.sim
|
./test.sh -f tsim/parser/alter_stable.sim
|
||||||
./test.sh -f tsim/parser/alter.sim
|
./test.sh -f tsim/parser/alter.sim
|
||||||
# jira ./test.sh -f tsim/parser/alter1.sim
|
# ./test.sh -f tsim/parser/alter1.sim
|
||||||
./test.sh -f tsim/parser/auto_create_tb_drop_tb.sim
|
./test.sh -f tsim/parser/auto_create_tb_drop_tb.sim
|
||||||
./test.sh -f tsim/parser/auto_create_tb.sim
|
./test.sh -f tsim/parser/auto_create_tb.sim
|
||||||
./test.sh -f tsim/parser/between_and.sim
|
./test.sh -f tsim/parser/between_and.sim
|
||||||
./test.sh -f tsim/parser/binary_escapeCharacter.sim
|
./test.sh -f tsim/parser/binary_escapeCharacter.sim
|
||||||
# jira ./test.sh -f tsim/parser/col_arithmetic_operation.sim
|
# ./test.sh -f tsim/parser/col_arithmetic_operation.sim
|
||||||
# jira ./test.sh -f tsim/parser/columnValue.sim
|
# ./test.sh -f tsim/parser/columnValue.sim
|
||||||
./test.sh -f tsim/parser/commit.sim
|
./test.sh -f tsim/parser/commit.sim
|
||||||
# jira ./test.sh -f tsim/parser/condition.sim
|
# TD-17661 ./test.sh -f tsim/parser/condition.sim
|
||||||
./test.sh -f tsim/parser/constCol.sim
|
./test.sh -f tsim/parser/constCol.sim
|
||||||
./test.sh -f tsim/parser/create_db.sim
|
./test.sh -f tsim/parser/create_db.sim
|
||||||
./test.sh -f tsim/parser/create_mt.sim
|
./test.sh -f tsim/parser/create_mt.sim
|
||||||
# jira ./test.sh -f tsim/parser/create_tb_with_tag_name.sim
|
# TD-17653 ./test.sh -f tsim/parser/create_tb_with_tag_name.sim
|
||||||
./test.sh -f tsim/parser/create_tb.sim
|
./test.sh -f tsim/parser/create_tb.sim
|
||||||
./test.sh -f tsim/parser/dbtbnameValidate.sim
|
./test.sh -f tsim/parser/dbtbnameValidate.sim
|
||||||
./test.sh -f tsim/parser/distinct.sim
|
./test.sh -f tsim/parser/distinct.sim
|
||||||
# jira ./test.sh -f tsim/parser/fill_stb.sim
|
# TD-17623 ./test.sh -f tsim/parser/fill_stb.sim
|
||||||
./test.sh -f tsim/parser/fill_us.sim
|
./test.sh -f tsim/parser/fill_us.sim
|
||||||
./test.sh -f tsim/parser/fill.sim
|
./test.sh -f tsim/parser/fill.sim
|
||||||
./test.sh -f tsim/parser/first_last.sim
|
./test.sh -f tsim/parser/first_last.sim
|
||||||
./test.sh -f tsim/parser/fourArithmetic-basic.sim
|
./test.sh -f tsim/parser/fourArithmetic-basic.sim
|
||||||
# jira ./test.sh -f tsim/parser/function.sim
|
# TD-17659 TD-17658 ./test.sh -f tsim/parser/function.sim
|
||||||
./test.sh -f tsim/parser/groupby-basic.sim
|
./test.sh -f tsim/parser/groupby-basic.sim
|
||||||
# jira ./test.sh -f tsim/parser/groupby.sim
|
# ./test.sh -f tsim/parser/groupby.sim
|
||||||
# jira ./test.sh -f tsim/parser/having_child.sim
|
# TD-17622 ./test.sh -f tsim/parser/having_child.sim
|
||||||
# jira ./test.sh -f tsim/parser/having.sim
|
# ./test.sh -f tsim/parser/having.sim
|
||||||
./test.sh -f tsim/parser/import_commit1.sim
|
./test.sh -f tsim/parser/import_commit1.sim
|
||||||
./test.sh -f tsim/parser/import_commit2.sim
|
./test.sh -f tsim/parser/import_commit2.sim
|
||||||
./test.sh -f tsim/parser/import_commit3.sim
|
./test.sh -f tsim/parser/import_commit3.sim
|
||||||
# jira ./test.sh -f tsim/parser/import_file.sim
|
# TD-17663 ./test.sh -f tsim/parser/import_file.sim
|
||||||
./test.sh -f tsim/parser/import.sim
|
./test.sh -f tsim/parser/import.sim
|
||||||
./test.sh -f tsim/parser/insert_multiTbl.sim
|
./test.sh -f tsim/parser/insert_multiTbl.sim
|
||||||
./test.sh -f tsim/parser/insert_tb.sim
|
./test.sh -f tsim/parser/insert_tb.sim
|
||||||
# jira ./test.sh -f tsim/parser/interp.sim
|
# ./test.sh -f tsim/parser/interp.sim
|
||||||
./test.sh -f tsim/parser/join_manyblocks.sim
|
./test.sh -f tsim/parser/join_manyblocks.sim
|
||||||
## ./test.sh -f tsim/parser/join_multitables.sim
|
# ./test.sh -f tsim/parser/join_multitables.sim
|
||||||
# ./test.sh -f tsim/parser/join_multivnode.sim
|
# TD-17713 ./test.sh -f tsim/parser/join_multivnode.sim
|
||||||
# jira ./test.sh -f tsim/parser/join.sim
|
# TD-17707 ./test.sh -f tsim/parser/join.sim
|
||||||
./test.sh -f tsim/parser/last_cache.sim
|
./test.sh -f tsim/parser/last_cache.sim
|
||||||
./test.sh -f tsim/parser/last_groupby.sim
|
./test.sh -f tsim/parser/last_groupby.sim
|
||||||
# jira ./test.sh -f tsim/parser/lastrow.sim
|
# TD-17675 ./test.sh -f tsim/parser/lastrow.sim
|
||||||
./test.sh -f tsim/parser/like.sim
|
./test.sh -f tsim/parser/like.sim
|
||||||
# jira ./test.sh -f tsim/parser/limit.sim
|
# ./test.sh -f tsim/parser/limit.sim
|
||||||
# jira ./test.sh -f tsim/parser/limit1.sim
|
# ./test.sh -f tsim/parser/limit1.sim
|
||||||
# jira ./test.sh -f tsim/parser/limit2.sim
|
# ./test.sh -f tsim/parser/limit2.sim
|
||||||
# jira ./test.sh -f tsim/parser/line_insert.sim
|
|
||||||
./test.sh -f tsim/parser/mixed_blocks.sim
|
./test.sh -f tsim/parser/mixed_blocks.sim
|
||||||
./test.sh -f tsim/parser/nchar.sim
|
./test.sh -f tsim/parser/nchar.sim
|
||||||
# jira ./test.sh -f tsim/parser/nestquery.sim
|
# TD-17703 ./test.sh -f tsim/parser/nestquery.sim
|
||||||
# jira ./test.sh -f tsim/parser/null_char.sim
|
# ./test.sh -f tsim/parser/null_char.sim
|
||||||
./test.sh -f tsim/parser/precision_ns.sim
|
./test.sh -f tsim/parser/precision_ns.sim
|
||||||
./test.sh -f tsim/parser/projection_limit_offset.sim
|
./test.sh -f tsim/parser/projection_limit_offset.sim
|
||||||
./test.sh -f tsim/parser/regex.sim
|
./test.sh -f tsim/parser/regex.sim
|
||||||
./test.sh -f tsim/parser/select_across_vnodes.sim
|
./test.sh -f tsim/parser/select_across_vnodes.sim
|
||||||
./test.sh -f tsim/parser/select_distinct_tag.sim
|
./test.sh -f tsim/parser/select_distinct_tag.sim
|
||||||
./test.sh -f tsim/parser/select_from_cache_disk.sim
|
./test.sh -f tsim/parser/select_from_cache_disk.sim
|
||||||
# jira ./test.sh -f tsim/parser/select_with_tags.sim
|
# ./test.sh -f tsim/parser/select_with_tags.sim
|
||||||
./test.sh -f tsim/parser/selectResNum.sim
|
./test.sh -f tsim/parser/selectResNum.sim
|
||||||
# jira ./test.sh -f tsim/parser/set_tag_vals.sim
|
# TD-17685 ./test.sh -f tsim/parser/set_tag_vals.sim
|
||||||
./test.sh -f tsim/parser/single_row_in_tb.sim
|
./test.sh -f tsim/parser/single_row_in_tb.sim
|
||||||
# jira ./test.sh -f tsim/parser/sliding.sim
|
# TD-17684 ./test.sh -f tsim/parser/sliding.sim
|
||||||
# jira ./test.sh -f tsim/parser/slimit_alter_tags.sim
|
# ./test.sh -f tsim/parser/slimit_alter_tags.sim
|
||||||
# jira ./test.sh -f tsim/parser/slimit.sim
|
# ./test.sh -f tsim/parser/slimit.sim
|
||||||
# jira ./test.sh -f tsim/parser/slimit1.sim
|
# ./test.sh -f tsim/parser/slimit1.sim
|
||||||
./test.sh -f tsim/parser/stableOp.sim
|
./test.sh -f tsim/parser/stableOp.sim
|
||||||
# jira ./test.sh -f tsim/parser/tags_dynamically_specifiy.sim
|
# ./test.sh -f tsim/parser/tags_dynamically_specifiy.sim
|
||||||
# jira ./test.sh -f tsim/parser/tags_filter.sim
|
# ./test.sh -f tsim/parser/tags_filter.sim
|
||||||
./test.sh -f tsim/parser/tbnameIn.sim
|
./test.sh -f tsim/parser/tbnameIn.sim
|
||||||
./test.sh -f tsim/parser/timestamp.sim
|
./test.sh -f tsim/parser/timestamp.sim
|
||||||
./test.sh -f tsim/parser/top_groupby.sim
|
./test.sh -f tsim/parser/top_groupby.sim
|
||||||
./test.sh -f tsim/parser/topbot.sim
|
./test.sh -f tsim/parser/topbot.sim
|
||||||
# jira ./test.sh -f tsim/parser/udf_dll_stable.sim
|
# ./test.sh -f tsim/parser/udf_dll_stable.sim
|
||||||
# jira ./test.sh -f tsim/parser/udf_dll.sim
|
# ./test.sh -f tsim/parser/udf_dll.sim
|
||||||
# jira ./test.sh -f tsim/parser/udf.sim
|
# ./test.sh -f tsim/parser/udf.sim
|
||||||
./test.sh -f tsim/parser/union.sim
|
./test.sh -f tsim/parser/union.sim
|
||||||
# jira ./test.sh -f tsim/parser/union_sysinfo.sim
|
# TD-17704 ./test.sh -f tsim/parser/union_sysinfo.sim
|
||||||
# jira ./test.sh -f tsim/parser/where.sim
|
# ./test.sh -f tsim/parser/where.sim
|
||||||
|
|
||||||
# ---- query
|
# ---- query
|
||||||
./test.sh -f tsim/query/interval.sim
|
./test.sh -f tsim/query/interval.sim
|
||||||
|
@ -192,7 +191,7 @@
|
||||||
./test.sh -f tsim/mnode/basic5.sim
|
./test.sh -f tsim/mnode/basic5.sim
|
||||||
|
|
||||||
# ---- show
|
# ---- show
|
||||||
# jira ./test.sh -f tsim/show/basic.sim
|
./test.sh -f tsim/show/basic.sim
|
||||||
|
|
||||||
# ---- table
|
# ---- table
|
||||||
./test.sh -f tsim/table/autocreate.sim
|
./test.sh -f tsim/table/autocreate.sim
|
||||||
|
@ -324,7 +323,7 @@
|
||||||
./test.sh -f tsim/vnode/stable_replica3_vnode3.sim
|
./test.sh -f tsim/vnode/stable_replica3_vnode3.sim
|
||||||
|
|
||||||
# --- sync
|
# --- sync
|
||||||
# jira ./test.sh -f tsim/sync/3Replica1VgElect.sim
|
# ./test.sh -f tsim/sync/3Replica1VgElect.sim
|
||||||
./test.sh -f tsim/sync/3Replica5VgElect.sim
|
./test.sh -f tsim/sync/3Replica5VgElect.sim
|
||||||
./test.sh -f tsim/sync/oneReplica1VgElect.sim
|
./test.sh -f tsim/sync/oneReplica1VgElect.sim
|
||||||
./test.sh -f tsim/sync/oneReplica5VgElect.sim
|
./test.sh -f tsim/sync/oneReplica5VgElect.sim
|
||||||
|
@ -414,7 +413,7 @@
|
||||||
./test.sh -f tsim/tag/3.sim
|
./test.sh -f tsim/tag/3.sim
|
||||||
./test.sh -f tsim/tag/4.sim
|
./test.sh -f tsim/tag/4.sim
|
||||||
./test.sh -f tsim/tag/5.sim
|
./test.sh -f tsim/tag/5.sim
|
||||||
# jira ./test.sh -f tsim/tag/6.sim
|
# TD-17382 ./test.sh -f tsim/tag/6.sim
|
||||||
./test.sh -f tsim/tag/add.sim
|
./test.sh -f tsim/tag/add.sim
|
||||||
./test.sh -f tsim/tag/bigint.sim
|
./test.sh -f tsim/tag/bigint.sim
|
||||||
./test.sh -f tsim/tag/binary_binary.sim
|
./test.sh -f tsim/tag/binary_binary.sim
|
||||||
|
@ -422,18 +421,18 @@
|
||||||
./test.sh -f tsim/tag/bool_binary.sim
|
./test.sh -f tsim/tag/bool_binary.sim
|
||||||
./test.sh -f tsim/tag/bool_int.sim
|
./test.sh -f tsim/tag/bool_int.sim
|
||||||
./test.sh -f tsim/tag/bool.sim
|
./test.sh -f tsim/tag/bool.sim
|
||||||
# jira ./test.sh -f tsim/tag/change.sim
|
# ./test.sh -f tsim/tag/change.sim
|
||||||
# jira ./test.sh -f tsim/tag/column.sim
|
# ./test.sh -f tsim/tag/column.sim
|
||||||
# jira ./test.sh -f tsim/tag/commit.sim
|
# ./test.sh -f tsim/tag/commit.sim
|
||||||
# jira ./test.sh -f tsim/tag/create.sim
|
# ./test.sh -f tsim/tag/create.sim
|
||||||
# jira /test.sh -f tsim/tag/delete.sim
|
# /test.sh -f tsim/tag/delete.sim
|
||||||
# jira ./test.sh -f tsim/tag/double.sim
|
# ./test.sh -f tsim/tag/double.sim
|
||||||
# jira ./test.sh -f tsim/tag/filter.sim
|
# ./test.sh -f tsim/tag/filter.sim
|
||||||
# jira ./test.sh -f tsim/tag/float.sim
|
# TD-17407 ./test.sh -f tsim/tag/float.sim
|
||||||
./test.sh -f tsim/tag/int_binary.sim
|
./test.sh -f tsim/tag/int_binary.sim
|
||||||
./test.sh -f tsim/tag/int_float.sim
|
./test.sh -f tsim/tag/int_float.sim
|
||||||
./test.sh -f tsim/tag/int.sim
|
./test.sh -f tsim/tag/int.sim
|
||||||
# jira ./test.sh -f tsim/tag/set.sim
|
# ./test.sh -f tsim/tag/set.sim
|
||||||
./test.sh -f tsim/tag/smallint.sim
|
./test.sh -f tsim/tag/smallint.sim
|
||||||
./test.sh -f tsim/tag/tinyint.sim
|
./test.sh -f tsim/tag/tinyint.sim
|
||||||
|
|
||||||
|
|
|
@ -247,7 +247,9 @@ if $rows != $val then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print 2
|
#TODO
|
||||||
|
return
|
||||||
|
|
||||||
#===========================aggregation===================================
|
#===========================aggregation===================================
|
||||||
#select + where condition
|
#select + where condition
|
||||||
sql select count(join_tb1.*), count(join_tb0.*) from $tb1 , $tb2 where $ts1 = $ts2 and join_tb1.ts >= 100000 and join_tb0.c7 = false;
|
sql select count(join_tb1.*), count(join_tb0.*) from $tb1 , $tb2 where $ts1 = $ts2 and join_tb1.ts >= 100000 and join_tb0.c7 = false;
|
||||||
|
|
|
@ -3,8 +3,7 @@ system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
sql connect
|
sql connect
|
||||||
|
|
||||||
$dbPrefix = join_m_db
|
$dbPrefix = join_db
|
||||||
$tbPrefix = join_tb
|
|
||||||
$mtPrefix = join_mt
|
$mtPrefix = join_mt
|
||||||
$tbNum = 3
|
$tbNum = 3
|
||||||
$rowNum = 1000
|
$rowNum = 1000
|
||||||
|
@ -14,6 +13,7 @@ print =============== join_multivnode.sim
|
||||||
$i = 0
|
$i = 0
|
||||||
$db = $dbPrefix . $i
|
$db = $dbPrefix . $i
|
||||||
$mt = $mtPrefix . $i
|
$mt = $mtPrefix . $i
|
||||||
|
$tbPrefix = $mt . _tb
|
||||||
|
|
||||||
$tstart = 100000
|
$tstart = 100000
|
||||||
|
|
||||||
|
@ -54,14 +54,12 @@ while $i < $tbNum
|
||||||
$tstart = 100000
|
$tstart = 100000
|
||||||
endw
|
endw
|
||||||
|
|
||||||
sleep 100
|
|
||||||
|
|
||||||
$tstart = 100000
|
$tstart = 100000
|
||||||
$mt = $mtPrefix . 1 . $i
|
$mt = $mtPrefix . 1
|
||||||
sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12), t3 int)
|
sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12), t3 int)
|
||||||
|
|
||||||
$i = 0
|
$i = 0
|
||||||
$tbPrefix = join_1_tb
|
$tbPrefix = $mt . _tb
|
||||||
|
|
||||||
while $i < $tbNum
|
while $i < $tbNum
|
||||||
$tb = $tbPrefix . $i
|
$tb = $tbPrefix . $i
|
||||||
|
@ -100,20 +98,19 @@ while $i < $tbNum
|
||||||
endw
|
endw
|
||||||
|
|
||||||
print ===============multivnode projection join.sim
|
print ===============multivnode projection join.sim
|
||||||
|
|
||||||
sql select join_mt0.ts,join_mt0.ts,join_mt0.t1 from join_mt0, join_mt1 where join_mt0.ts=join_mt1.ts and join_mt0.t1=join_mt1.t1;
|
sql select join_mt0.ts,join_mt0.ts,join_mt0.t1 from join_mt0, join_mt1 where join_mt0.ts=join_mt1.ts and join_mt0.t1=join_mt1.t1;
|
||||||
|
print ===> rows $row
|
||||||
print $row
|
|
||||||
if $row != 3000 then
|
if $row != 3000 then
|
||||||
print expect 3000, actual: $row
|
print expect 3000, actual: $row
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print ======= second tags join
|
# TODO
|
||||||
|
return
|
||||||
|
|
||||||
|
print ======= second tags join
|
||||||
sql create table m1(ts timestamp, k int) tags(a binary(12), b int);
|
sql create table m1(ts timestamp, k int) tags(a binary(12), b int);
|
||||||
sql create table m2(ts timestamp, k int) tags(a binary(12), b int);
|
sql create table m2(ts timestamp, k int) tags(a binary(12), b int);
|
||||||
|
|
||||||
sql insert into tm1 using m1 tags('tm1', 1) values(10000000, 1) tm2 using m2 tags('tm2', 1) values(10000000, 99);
|
sql insert into tm1 using m1 tags('tm1', 1) values(10000000, 1) tm2 using m2 tags('tm2', 1) values(10000000, 99);
|
||||||
|
|
||||||
sql select * from m1,m2 where m1.ts=m2.ts and m1.b=m2.b;
|
sql select * from m1,m2 where m1.ts=m2.ts and m1.b=m2.b;
|
||||||
|
@ -122,9 +119,7 @@ if $row != 1 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select join_mt0.ts, join_mt1.t1 from join_mt0, join_mt1 where join_mt0.ts=join_mt1.ts and join_mt0.t1=join_mt1.t1
|
sql select join_mt0.ts, join_mt1.t1 from join_mt0, join_mt1 where join_mt0.ts=join_mt1.ts and join_mt0.t1=join_mt1.t1
|
||||||
|
|
||||||
sql select join_mt0.ts, join_mt1.t1, join_mt0.t1, join_mt1.tbname, join_mt0.tbname from join_mt0, join_mt1 where join_mt0.ts=join_mt1.ts and join_mt0.t1=join_mt1.t1
|
sql select join_mt0.ts, join_mt1.t1, join_mt0.t1, join_mt1.tbname, join_mt0.tbname from join_mt0, join_mt1 where join_mt0.ts=join_mt1.ts and join_mt0.t1=join_mt1.t1
|
||||||
|
|
||||||
sql select join_mt0.ts, join_mt1.t1, join_mt0.t1, join_mt1.tbname, join_mt0.tbname from join_mt0, join_mt1 where join_mt0.ts=join_mt1.ts and join_mt0.t1=join_mt1.t1 limit 1
|
sql select join_mt0.ts, join_mt1.t1, join_mt0.t1, join_mt1.tbname, join_mt0.tbname from join_mt0, join_mt1 where join_mt0.ts=join_mt1.ts and join_mt0.t1=join_mt1.t1 limit 1
|
||||||
|
|
||||||
#1970-01-01 08:01:40.800 | 10 | 45.000000000 | 0 | true | false | 0 |
|
#1970-01-01 08:01:40.800 | 10 | 45.000000000 | 0 | true | false | 0 |
|
||||||
|
@ -135,63 +130,49 @@ sql select count(join_mt0.c1), sum(join_mt0.c2)/count(*), avg(c2), first(join_mt
|
||||||
if $rows != 300 then
|
if $rows != 300 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data00 != @70-01-01 08:01:40.990@ then
|
if $data00 != @70-01-01 08:01:40.990@ then
|
||||||
print expect 70-01-01 08:01:40.990, actual: $data00
|
print expect 70-01-01 08:01:40.990, actual: $data00
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data01 != 10 then
|
if $data01 != 10 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data02 != 94.500000000 then
|
if $data02 != 94.500000000 then
|
||||||
print expect 94.500000000, actual $data02
|
print expect 94.500000000, actual $data02
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data03 != 94.500000000 then
|
if $data03 != 94.500000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data04 != 90 then
|
if $data04 != 90 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data05 != 1 then
|
if $data05 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data06 != 0 then
|
if $data06 != 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data10 != @70-01-01 08:01:40.980@ then
|
if $data10 != @70-01-01 08:01:40.980@ then
|
||||||
print expect 70-01-01 08:01:40.980, actual: $data10
|
print expect 70-01-01 08:01:40.980, actual: $data10
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data11 != 10 then
|
if $data11 != 10 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data12 != 84.500000000 then
|
if $data12 != 84.500000000 then
|
||||||
print expect 84.500000000, actual $data12
|
print expect 84.500000000, actual $data12
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data13 != 84.500000000 then
|
if $data13 != 84.500000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data14 != 80 then
|
if $data14 != 80 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data15 != 1 then
|
if $data15 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data16 != 0 then
|
if $data16 != 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -264,100 +245,76 @@ sql select m1.ts,m1.tbname,m1.a, m2.ts,m2.tbname,m2.b from m1,m2 where m1.a=m2.b
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data00 != @20-01-01 01:01:01.000@ then
|
if $data00 != @20-01-01 01:01:01.000@ then
|
||||||
print expect 20-01-01 01:01:01.000, actual:$data00
|
print expect 20-01-01 01:01:01.000, actual:$data00
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data01 != @tm0@ then
|
if $data01 != @tm0@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data02 != 0 then
|
if $data02 != 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data03 != @20-01-01 01:01:01.000@ then
|
if $data03 != @20-01-01 01:01:01.000@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data04 != @t0@ then
|
if $data04 != @t0@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data05 != 0 then
|
if $data05 != 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data10 != @20-01-01 01:01:01.000@ then
|
if $data10 != @20-01-01 01:01:01.000@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data11 != @tm1@ then
|
if $data11 != @tm1@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data12 != 1 then
|
if $data12 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data13 != @20-01-01 01:01:01.000@ then
|
if $data13 != @20-01-01 01:01:01.000@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data14 != @t4@ then
|
if $data14 != @t4@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data15 != 1 then
|
if $data15 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data20 != @20-01-01 01:01:01.000@ then
|
if $data20 != @20-01-01 01:01:01.000@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data21 != @tm4@ then
|
if $data21 != @tm4@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data22 != 4 then
|
if $data22 != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data23 != @20-01-01 01:01:01.000@ then
|
if $data23 != @20-01-01 01:01:01.000@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data24 != @t1@ then
|
if $data24 != @t1@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data25 != 4 then
|
if $data25 != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data30 != @20-01-01 01:01:01.000@ then
|
if $data30 != @20-01-01 01:01:01.000@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data31 != @tm5@ then
|
if $data31 != @tm5@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data32 != 5 then
|
if $data32 != 5 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data33 != @20-01-01 01:01:01.000@ then
|
if $data33 != @20-01-01 01:01:01.000@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data34 != @t5@ then
|
if $data34 != @t5@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data35 != 5 then
|
if $data35 != 5 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
|
@ -1,50 +0,0 @@
|
||||||
system sh/stop_dnodes.sh
|
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
|
||||||
sql connect
|
|
||||||
|
|
||||||
print =============== step1
|
|
||||||
$db = testlp
|
|
||||||
$mte = ste
|
|
||||||
$mt = st
|
|
||||||
sql drop database $db -x step1
|
|
||||||
step1:
|
|
||||||
sql create database $db precision 'us'
|
|
||||||
sql use $db
|
|
||||||
sql create stable $mte (ts timestamp, f int) TAGS(t1 bigint)
|
|
||||||
|
|
||||||
line_insert st,t1=3i64,t2=4f64,t3="t3" c1=3i64,c3=L"passit",c2=false,c4=4f64 1626006833639000000ns
|
|
||||||
line_insert st,t1=4i64,t3="t4",t2=5f64,t4=5f64 c1=3i64,c3=L"passitagin",c2=true,c4=5f64,c5=5f64 1626006833640000000ns
|
|
||||||
line_insert ste,t2=5f64,t3=L"ste" c1=true,c2=4i64,c3="iam" 1626056811823316532ns
|
|
||||||
line_insert stf,t1=4i64,t3="t4",t2=5f64,t4=5f64 c1=3i64,c3=L"passitagin",c2=true,c4=5f64,c5=5f64,c6=7u64 1626006933640000000ns
|
|
||||||
sql select * from st
|
|
||||||
if $rows != 2 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
if $data00 != @21-07-11 20:33:53.639000@ then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
if $data02 != @passit@ then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
sql select * from stf
|
|
||||||
if $rows != 1 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
sql select * from ste
|
|
||||||
if $rows != 1 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
#print =============== clear
|
|
||||||
sql drop database $db
|
|
||||||
sql show databases
|
|
||||||
if $rows != 2 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
|
|
@ -356,6 +356,9 @@ if $data03 != 0.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
#TODO
|
||||||
|
return
|
||||||
|
|
||||||
sql select count(c2),last(c4),stddev(c3),spread(c3) from sliding_tb0 where c2 = 0 interval(30s) sliding(20s) order by _wstart desc limit 1 offset 15;
|
sql select count(c2),last(c4),stddev(c3),spread(c3) from sliding_tb0 where c2 = 0 interval(30s) sliding(20s) order by _wstart desc limit 1 offset 15;
|
||||||
if $row != 1 then
|
if $row != 1 then
|
||||||
return -1
|
return -1
|
||||||
|
|
|
@ -43,6 +43,7 @@ endi
|
||||||
|
|
||||||
if $data01 != 1 then
|
if $data01 != 1 then
|
||||||
if $data01 != 10 then
|
if $data01 != 10 then
|
||||||
|
print =============> $data01
|
||||||
print retention level 2 file result $data01 != 1 or 10
|
print retention level 2 file result $data01 != 1 or 10
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
|
@ -241,7 +241,7 @@ if $data04 != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql alter table $mt change tag tgcol1 tgcol4
|
sql alter table $mt rename tag tgcol1 tgcol4
|
||||||
sql alter table $mt drop tag tgcol2
|
sql alter table $mt drop tag tgcol2
|
||||||
sql alter table $mt drop tag tgcol3
|
sql alter table $mt drop tag tgcol3
|
||||||
sql alter table $mt add tag tgcol5 binary(10)
|
sql alter table $mt add tag tgcol5 binary(10)
|
||||||
|
|
|
@ -95,6 +95,16 @@ sql select * from tb
|
||||||
sql insert into db.ctb values(now+3s, 2, 3, 4)
|
sql insert into db.ctb values(now+3s, 2, 3, 4)
|
||||||
sql select * from db.stb
|
sql select * from db.stb
|
||||||
|
|
||||||
|
sql alter table db.stb add tag t4 bigint
|
||||||
|
sql select * from db.stb
|
||||||
|
sql select * from db.stb
|
||||||
|
sql_error create table db.ctb2 using db.stb tags(101, "102")
|
||||||
|
sql create table db.ctb2 using db.stb tags(101, 102, "103", 104)
|
||||||
|
sql insert into db.ctb2 values(now, 1, 2, 3)
|
||||||
|
|
||||||
|
print =============== step6: query data
|
||||||
|
sql select * from db.stb where tbname = 'ctb2';
|
||||||
|
|
||||||
_OVER:
|
_OVER:
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
print =============== check
|
print =============== check
|
||||||
|
|
Loading…
Reference in New Issue