Merge branch '3.0' into fix/TD-17009
This commit is contained in:
commit
8f510f0821
|
@ -555,6 +555,7 @@ int32_t* taosGetErrno();
|
||||||
#define TSDB_CODE_PAR_ONLY_SUPPORT_SINGLE_TABLE TAOS_DEF_ERROR_CODE(0, 0x265F)
|
#define TSDB_CODE_PAR_ONLY_SUPPORT_SINGLE_TABLE TAOS_DEF_ERROR_CODE(0, 0x265F)
|
||||||
#define TSDB_CODE_PAR_INVALID_SMA_INDEX TAOS_DEF_ERROR_CODE(0, 0x2660)
|
#define TSDB_CODE_PAR_INVALID_SMA_INDEX TAOS_DEF_ERROR_CODE(0, 0x2660)
|
||||||
#define TSDB_CODE_PAR_INVALID_SELECTED_EXPR TAOS_DEF_ERROR_CODE(0, 0x2661)
|
#define TSDB_CODE_PAR_INVALID_SELECTED_EXPR TAOS_DEF_ERROR_CODE(0, 0x2661)
|
||||||
|
#define TSDB_CODE_PAR_GET_META_ERROR TAOS_DEF_ERROR_CODE(0, 0x2662)
|
||||||
#define TSDB_CODE_PAR_INTERNAL_ERROR TAOS_DEF_ERROR_CODE(0, 0x26FF)
|
#define TSDB_CODE_PAR_INTERNAL_ERROR TAOS_DEF_ERROR_CODE(0, 0x26FF)
|
||||||
|
|
||||||
//planner
|
//planner
|
||||||
|
|
|
@ -353,6 +353,7 @@ int32_t hbBuildQueryDesc(SQueryHbReqBasic *hbBasic, STscObj *pObj) {
|
||||||
desc.subDesc = NULL;
|
desc.subDesc = NULL;
|
||||||
desc.subPlanNum = 0;
|
desc.subPlanNum = 0;
|
||||||
}
|
}
|
||||||
|
ASSERT(desc.subPlanNum == taosArrayGetSize(desc.subDesc));
|
||||||
} else {
|
} else {
|
||||||
desc.subDesc = NULL;
|
desc.subDesc = NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -305,6 +305,8 @@ static int32_t tDeserializeSClientHbReq(SDecoder *pDecoder, SClientHbReq *pReq)
|
||||||
taosArrayPush(desc.subDesc, &sDesc);
|
taosArrayPush(desc.subDesc, &sDesc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ASSERT(desc.subPlanNum == taosArrayGetSize(desc.subDesc));
|
||||||
|
|
||||||
taosArrayPush(pReq->query->queryDesc, &desc);
|
taosArrayPush(pReq->query->queryDesc, &desc);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3140,6 +3140,26 @@ void destroyStreamAggSupporter(SStreamAggSupporter* pSup) {
|
||||||
blockDataDestroy(pSup->pScanBlock);
|
blockDataDestroy(pSup->pScanBlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void destroyStateWinInfo(void* ptr) {
|
||||||
|
if (ptr == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
SStateWindowInfo* pWin = (SStateWindowInfo*) ptr;
|
||||||
|
taosMemoryFreeClear(pWin->stateKey.pData);
|
||||||
|
}
|
||||||
|
|
||||||
|
void destroyStateStreamAggSupporter(SStreamAggSupporter* pSup) {
|
||||||
|
taosMemoryFreeClear(pSup->pKeyBuf);
|
||||||
|
void** pIte = NULL;
|
||||||
|
while ((pIte = taosHashIterate(pSup->pResultRows, pIte)) != NULL) {
|
||||||
|
SArray* pWins = (SArray*)(*pIte);
|
||||||
|
taosArrayDestroyEx(pWins, (FDelete)destroyStateWinInfo);
|
||||||
|
}
|
||||||
|
taosHashCleanup(pSup->pResultRows);
|
||||||
|
destroyDiskbasedBuf(pSup->pResultBuf);
|
||||||
|
blockDataDestroy(pSup->pScanBlock);
|
||||||
|
}
|
||||||
|
|
||||||
void destroyStreamSessionAggOperatorInfo(void* param, int32_t numOfOutput) {
|
void destroyStreamSessionAggOperatorInfo(void* param, int32_t numOfOutput) {
|
||||||
SStreamSessionAggOperatorInfo* pInfo = (SStreamSessionAggOperatorInfo*)param;
|
SStreamSessionAggOperatorInfo* pInfo = (SStreamSessionAggOperatorInfo*)param;
|
||||||
cleanupBasicInfo(&pInfo->binfo);
|
cleanupBasicInfo(&pInfo->binfo);
|
||||||
|
@ -3607,12 +3627,17 @@ static void doStreamSessionAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSData
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void deleteWindow(SArray* pWinInfos, int32_t index) {
|
void deleteWindow(SArray* pWinInfos, int32_t index, FDelete fp) {
|
||||||
ASSERT(index >= 0 && index < taosArrayGetSize(pWinInfos));
|
ASSERT(index >= 0 && index < taosArrayGetSize(pWinInfos));
|
||||||
|
if (fp) {
|
||||||
|
void* ptr = taosArrayGet(pWinInfos, index);
|
||||||
|
fp(ptr);
|
||||||
|
}
|
||||||
taosArrayRemove(pWinInfos, index);
|
taosArrayRemove(pWinInfos, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void doDeleteTimeWindows(SStreamAggSupporter* pAggSup, SSDataBlock* pBlock, int64_t gap, SArray* result) {
|
static void doDeleteTimeWindows(SStreamAggSupporter* pAggSup, SSDataBlock* pBlock, int64_t gap,
|
||||||
|
SArray* result, FDelete fp) {
|
||||||
SColumnInfoData* pStartTsCol = taosArrayGet(pBlock->pDataBlock, START_TS_COLUMN_INDEX);
|
SColumnInfoData* pStartTsCol = taosArrayGet(pBlock->pDataBlock, START_TS_COLUMN_INDEX);
|
||||||
TSKEY* startDatas = (TSKEY*)pStartTsCol->pData;
|
TSKEY* startDatas = (TSKEY*)pStartTsCol->pData;
|
||||||
SColumnInfoData* pEndTsCol = taosArrayGet(pBlock->pDataBlock, END_TS_COLUMN_INDEX);
|
SColumnInfoData* pEndTsCol = taosArrayGet(pBlock->pDataBlock, END_TS_COLUMN_INDEX);
|
||||||
|
@ -3626,7 +3651,7 @@ static void doDeleteTimeWindows(SStreamAggSupporter* pAggSup, SSDataBlock* pBloc
|
||||||
if (!pCurWin) {
|
if (!pCurWin) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
deleteWindow(pAggSup->pCurWins, winIndex);
|
deleteWindow(pAggSup->pCurWins, winIndex, fp);
|
||||||
if (result) {
|
if (result) {
|
||||||
taosArrayPush(result, pCurWin);
|
taosArrayPush(result, pCurWin);
|
||||||
}
|
}
|
||||||
|
@ -3751,7 +3776,7 @@ SResultWindowInfo* getResWinForSession(void* pData) { return (SResultWindowInfo*
|
||||||
SResultWindowInfo* getResWinForState(void* pData) { return &((SStateWindowInfo*)pData)->winInfo; }
|
SResultWindowInfo* getResWinForState(void* pData) { return &((SStateWindowInfo*)pData)->winInfo; }
|
||||||
|
|
||||||
int32_t closeSessionWindow(SHashObj* pHashMap, STimeWindowAggSupp* pTwSup, SArray* pClosed, __get_win_info_ fn,
|
int32_t closeSessionWindow(SHashObj* pHashMap, STimeWindowAggSupp* pTwSup, SArray* pClosed, __get_win_info_ fn,
|
||||||
bool delete) {
|
bool delete, FDelete fp) {
|
||||||
// Todo(liuyao) save window to tdb
|
// Todo(liuyao) save window to tdb
|
||||||
void** pIte = NULL;
|
void** pIte = NULL;
|
||||||
size_t keyLen = 0;
|
size_t keyLen = 0;
|
||||||
|
@ -3773,7 +3798,7 @@ int32_t closeSessionWindow(SHashObj* pHashMap, STimeWindowAggSupp* pTwSup, SArra
|
||||||
pSeWin->isOutput = true;
|
pSeWin->isOutput = true;
|
||||||
}
|
}
|
||||||
if (delete) {
|
if (delete) {
|
||||||
deleteWindow(pWins, i);
|
deleteWindow(pWins, i, fp);
|
||||||
i--;
|
i--;
|
||||||
size = taosArrayGetSize(pWins);
|
size = taosArrayGetSize(pWins);
|
||||||
}
|
}
|
||||||
|
@ -3786,13 +3811,13 @@ int32_t closeSessionWindow(SHashObj* pHashMap, STimeWindowAggSupp* pTwSup, SArra
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void closeChildSessionWindow(SArray* pChildren, TSKEY maxTs, bool delete) {
|
static void closeChildSessionWindow(SArray* pChildren, TSKEY maxTs, bool delete, FDelete fp) {
|
||||||
int32_t size = taosArrayGetSize(pChildren);
|
int32_t size = taosArrayGetSize(pChildren);
|
||||||
for (int32_t i = 0; i < size; i++) {
|
for (int32_t i = 0; i < size; i++) {
|
||||||
SOperatorInfo* pChildOp = taosArrayGetP(pChildren, i);
|
SOperatorInfo* pChildOp = taosArrayGetP(pChildren, i);
|
||||||
SStreamSessionAggOperatorInfo* pChInfo = pChildOp->info;
|
SStreamSessionAggOperatorInfo* pChInfo = pChildOp->info;
|
||||||
pChInfo->twAggSup.maxTs = TMAX(pChInfo->twAggSup.maxTs, maxTs);
|
pChInfo->twAggSup.maxTs = TMAX(pChInfo->twAggSup.maxTs, maxTs);
|
||||||
closeSessionWindow(pChInfo->streamAggSup.pResultRows, &pChInfo->twAggSup, NULL, getResWinForSession, delete);
|
closeSessionWindow(pChInfo->streamAggSup.pResultRows, &pChInfo->twAggSup, NULL, getResWinForSession, delete, fp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3870,13 +3895,13 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) {
|
||||||
} else if (pBlock->info.type == STREAM_DELETE_DATA || pBlock->info.type == STREAM_DELETE_RESULT) {
|
} else if (pBlock->info.type == STREAM_DELETE_DATA || pBlock->info.type == STREAM_DELETE_RESULT) {
|
||||||
SArray* pWins = taosArrayInit(16, sizeof(SResultWindowInfo));
|
SArray* pWins = taosArrayInit(16, sizeof(SResultWindowInfo));
|
||||||
// gap must be 0
|
// gap must be 0
|
||||||
doDeleteTimeWindows(&pInfo->streamAggSup, pBlock, 0, pWins);
|
doDeleteTimeWindows(&pInfo->streamAggSup, pBlock, 0, pWins, NULL);
|
||||||
if (IS_FINAL_OP(pInfo)) {
|
if (IS_FINAL_OP(pInfo)) {
|
||||||
int32_t childIndex = getChildIndex(pBlock);
|
int32_t childIndex = getChildIndex(pBlock);
|
||||||
SOperatorInfo* pChildOp = taosArrayGetP(pInfo->pChildren, childIndex);
|
SOperatorInfo* pChildOp = taosArrayGetP(pInfo->pChildren, childIndex);
|
||||||
SStreamSessionAggOperatorInfo* pChildInfo = pChildOp->info;
|
SStreamSessionAggOperatorInfo* pChildInfo = pChildOp->info;
|
||||||
// gap must be 0
|
// gap must be 0
|
||||||
doDeleteTimeWindows(&pChildInfo->streamAggSup, pBlock, 0, NULL);
|
doDeleteTimeWindows(&pChildInfo->streamAggSup, pBlock, 0, NULL, NULL);
|
||||||
rebuildTimeWindow(pInfo, pWins, pBlock->info.groupId, pOperator->exprSupp.numOfExprs, pOperator);
|
rebuildTimeWindow(pInfo, pWins, pBlock->info.groupId, pOperator->exprSupp.numOfExprs, pOperator);
|
||||||
}
|
}
|
||||||
copyDeleteWindowInfo(pWins, pInfo->pStDeleted);
|
copyDeleteWindowInfo(pWins, pInfo->pStDeleted);
|
||||||
|
@ -3918,8 +3943,8 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) {
|
||||||
pOperator->status = OP_RES_TO_RETURN;
|
pOperator->status = OP_RES_TO_RETURN;
|
||||||
|
|
||||||
closeSessionWindow(pInfo->streamAggSup.pResultRows, &pInfo->twAggSup, pUpdated, getResWinForSession,
|
closeSessionWindow(pInfo->streamAggSup.pResultRows, &pInfo->twAggSup, pUpdated, getResWinForSession,
|
||||||
pInfo->ignoreExpiredData);
|
pInfo->ignoreExpiredData, NULL);
|
||||||
closeChildSessionWindow(pInfo->pChildren, pInfo->twAggSup.maxTs, pInfo->ignoreExpiredData);
|
closeChildSessionWindow(pInfo->pChildren, pInfo->twAggSup.maxTs, pInfo->ignoreExpiredData, NULL);
|
||||||
copyUpdateResult(pStUpdated, pUpdated);
|
copyUpdateResult(pStUpdated, pUpdated);
|
||||||
taosHashCleanup(pStUpdated);
|
taosHashCleanup(pStUpdated);
|
||||||
|
|
||||||
|
@ -4014,7 +4039,7 @@ static SSDataBlock* doStreamSessionSemiAgg(SOperatorInfo* pOperator) {
|
||||||
break;
|
break;
|
||||||
} else if (pBlock->info.type == STREAM_DELETE_DATA || pBlock->info.type == STREAM_DELETE_RESULT) {
|
} else if (pBlock->info.type == STREAM_DELETE_DATA || pBlock->info.type == STREAM_DELETE_RESULT) {
|
||||||
// gap must be 0
|
// gap must be 0
|
||||||
doDeleteTimeWindows(&pInfo->streamAggSup, pBlock, 0, NULL);
|
doDeleteTimeWindows(&pInfo->streamAggSup, pBlock, 0, NULL, NULL);
|
||||||
copyDataBlock(pInfo->pDelRes, pBlock);
|
copyDataBlock(pInfo->pDelRes, pBlock);
|
||||||
pInfo->pDelRes->info.type = STREAM_DELETE_RESULT;
|
pInfo->pDelRes->info.type = STREAM_DELETE_RESULT;
|
||||||
break;
|
break;
|
||||||
|
@ -4120,7 +4145,7 @@ _error:
|
||||||
void destroyStreamStateOperatorInfo(void* param, int32_t numOfOutput) {
|
void destroyStreamStateOperatorInfo(void* param, int32_t numOfOutput) {
|
||||||
SStreamStateAggOperatorInfo* pInfo = (SStreamStateAggOperatorInfo*)param;
|
SStreamStateAggOperatorInfo* pInfo = (SStreamStateAggOperatorInfo*)param;
|
||||||
cleanupBasicInfo(&pInfo->binfo);
|
cleanupBasicInfo(&pInfo->binfo);
|
||||||
destroyStreamAggSupporter(&pInfo->streamAggSup);
|
destroyStateStreamAggSupporter(&pInfo->streamAggSup);
|
||||||
cleanupGroupResInfo(&pInfo->groupResInfo);
|
cleanupGroupResInfo(&pInfo->groupResInfo);
|
||||||
if (pInfo->pChildren != NULL) {
|
if (pInfo->pChildren != NULL) {
|
||||||
int32_t size = taosArrayGetSize(pInfo->pChildren);
|
int32_t size = taosArrayGetSize(pInfo->pChildren);
|
||||||
|
@ -4132,6 +4157,10 @@ void destroyStreamStateOperatorInfo(void* param, int32_t numOfOutput) {
|
||||||
taosMemoryFreeClear(pChInfo);
|
taosMemoryFreeClear(pChInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
colDataDestroy(&pInfo->twAggSup.timeWindowData);
|
||||||
|
blockDataDestroy(pInfo->pDelRes);
|
||||||
|
taosHashCleanup(pInfo->pSeDeleted);
|
||||||
|
destroySqlFunctionCtx(pInfo->pDummyCtx, 0);
|
||||||
|
|
||||||
taosMemoryFreeClear(param);
|
taosMemoryFreeClear(param);
|
||||||
}
|
}
|
||||||
|
@ -4314,7 +4343,7 @@ static void doClearStateWindows(SStreamAggSupporter* pAggSup, SSDataBlock* pBloc
|
||||||
pSeDeleted);
|
pSeDeleted);
|
||||||
ASSERT(isTsInWindow(pCurWin, tsCol[i]) || isEqualStateKey(pCurWin, pKeyData));
|
ASSERT(isTsInWindow(pCurWin, tsCol[i]) || isEqualStateKey(pCurWin, pKeyData));
|
||||||
taosHashRemove(pSeUpdated, &pCurWin->winInfo.pos, sizeof(SResultRowPosition));
|
taosHashRemove(pSeUpdated, &pCurWin->winInfo.pos, sizeof(SResultRowPosition));
|
||||||
deleteWindow(pAggSup->pCurWins, winIndex);
|
deleteWindow(pAggSup->pCurWins, winIndex, destroyStateWinInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4357,7 +4386,7 @@ static void doStreamStateAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl
|
||||||
appendOneRow(pAggSup->pScanBlock, &pCurWin->winInfo.win.skey, &pCurWin->winInfo.win.ekey,
|
appendOneRow(pAggSup->pScanBlock, &pCurWin->winInfo.win.skey, &pCurWin->winInfo.win.ekey,
|
||||||
&pSDataBlock->info.groupId);
|
&pSDataBlock->info.groupId);
|
||||||
taosHashRemove(pSeUpdated, &pCurWin->winInfo.pos, sizeof(SResultRowPosition));
|
taosHashRemove(pSeUpdated, &pCurWin->winInfo.pos, sizeof(SResultRowPosition));
|
||||||
deleteWindow(pAggSup->pCurWins, winIndex);
|
deleteWindow(pAggSup->pCurWins, winIndex, destroyStateWinInfo);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
code = doOneStateWindowAgg(pInfo, pSDataBlock, &pCurWin->winInfo, &pResult, i, winRows, numOfOutput, pOperator);
|
code = doOneStateWindowAgg(pInfo, pSDataBlock, &pCurWin->winInfo, &pResult, i, winRows, numOfOutput, pOperator);
|
||||||
|
@ -4415,7 +4444,7 @@ static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) {
|
||||||
continue;
|
continue;
|
||||||
} else if (pBlock->info.type == STREAM_DELETE_DATA) {
|
} else if (pBlock->info.type == STREAM_DELETE_DATA) {
|
||||||
SArray* pWins = taosArrayInit(16, sizeof(SResultWindowInfo));
|
SArray* pWins = taosArrayInit(16, sizeof(SResultWindowInfo));
|
||||||
doDeleteTimeWindows(&pInfo->streamAggSup, pBlock, 0, pWins);
|
doDeleteTimeWindows(&pInfo->streamAggSup, pBlock, 0, pWins, destroyStateWinInfo);
|
||||||
copyDeleteWindowInfo(pWins, pInfo->pSeDeleted);
|
copyDeleteWindowInfo(pWins, pInfo->pSeDeleted);
|
||||||
taosArrayDestroy(pWins);
|
taosArrayDestroy(pWins);
|
||||||
continue;
|
continue;
|
||||||
|
@ -4437,8 +4466,8 @@ static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) {
|
||||||
pOperator->status = OP_RES_TO_RETURN;
|
pOperator->status = OP_RES_TO_RETURN;
|
||||||
|
|
||||||
closeSessionWindow(pInfo->streamAggSup.pResultRows, &pInfo->twAggSup, pUpdated, getResWinForState,
|
closeSessionWindow(pInfo->streamAggSup.pResultRows, &pInfo->twAggSup, pUpdated, getResWinForState,
|
||||||
pInfo->ignoreExpiredData);
|
pInfo->ignoreExpiredData, destroyStateWinInfo);
|
||||||
closeChildSessionWindow(pInfo->pChildren, pInfo->twAggSup.maxTs, pInfo->ignoreExpiredData);
|
// closeChildSessionWindow(pInfo->pChildren, pInfo->twAggSup.maxTs, pInfo->ignoreExpiredData, destroyStateWinInfo);
|
||||||
copyUpdateResult(pSeUpdated, pUpdated);
|
copyUpdateResult(pSeUpdated, pUpdated);
|
||||||
taosHashCleanup(pSeUpdated);
|
taosHashCleanup(pSeUpdated);
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,7 @@ typedef struct STranslateContext {
|
||||||
SMsgBuf msgBuf;
|
SMsgBuf msgBuf;
|
||||||
SArray* pNsLevel; // element is SArray*, the element of this subarray is STableNode*
|
SArray* pNsLevel; // element is SArray*, the element of this subarray is STableNode*
|
||||||
int32_t currLevel;
|
int32_t currLevel;
|
||||||
|
int32_t levelNo;
|
||||||
ESqlClause currClause;
|
ESqlClause currClause;
|
||||||
SNode* pCurrStmt;
|
SNode* pCurrStmt;
|
||||||
SCmdMsgInfo* pCmdMsg;
|
SCmdMsgInfo* pCmdMsg;
|
||||||
|
@ -354,6 +355,7 @@ static int32_t initTranslateContext(SParseContext* pParseCxt, SParseMetaCache* p
|
||||||
pCxt->msgBuf.len = pParseCxt->msgLen;
|
pCxt->msgBuf.len = pParseCxt->msgLen;
|
||||||
pCxt->pNsLevel = taosArrayInit(TARRAY_MIN_SIZE, POINTER_BYTES);
|
pCxt->pNsLevel = taosArrayInit(TARRAY_MIN_SIZE, POINTER_BYTES);
|
||||||
pCxt->currLevel = 0;
|
pCxt->currLevel = 0;
|
||||||
|
pCxt->levelNo = 0;
|
||||||
pCxt->currClause = 0;
|
pCxt->currClause = 0;
|
||||||
pCxt->pMetaCache = pMetaCache;
|
pCxt->pMetaCache = pMetaCache;
|
||||||
pCxt->pDbs = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK);
|
pCxt->pDbs = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK);
|
||||||
|
@ -1857,7 +1859,7 @@ static int32_t translateTable(STranslateContext* pCxt, SNode* pTable) {
|
||||||
pCxt, toName(pCxt->pParseCxt->acctId, pRealTable->table.dbName, pRealTable->table.tableName, &name),
|
pCxt, toName(pCxt->pParseCxt->acctId, pRealTable->table.dbName, pRealTable->table.tableName, &name),
|
||||||
&(pRealTable->pMeta));
|
&(pRealTable->pMeta));
|
||||||
if (TSDB_CODE_SUCCESS != code) {
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_TABLE_NOT_EXIST, pRealTable->table.tableName);
|
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_GET_META_ERROR, tstrerror(code));
|
||||||
}
|
}
|
||||||
code = setTableVgroupList(pCxt, &name, pRealTable);
|
code = setTableVgroupList(pCxt, &name, pRealTable);
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
@ -4960,13 +4962,14 @@ static int32_t translateQuery(STranslateContext* pCxt, SNode* pNode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t translateSubquery(STranslateContext* pCxt, SNode* pNode) {
|
static int32_t translateSubquery(STranslateContext* pCxt, SNode* pNode) {
|
||||||
++(pCxt->currLevel);
|
|
||||||
ESqlClause currClause = pCxt->currClause;
|
ESqlClause currClause = pCxt->currClause;
|
||||||
SNode* pCurrStmt = pCxt->pCurrStmt;
|
SNode* pCurrStmt = pCxt->pCurrStmt;
|
||||||
|
int32_t currLevel = pCxt->currLevel;
|
||||||
|
pCxt->currLevel = ++(pCxt->levelNo);
|
||||||
int32_t code = translateQuery(pCxt, pNode);
|
int32_t code = translateQuery(pCxt, pNode);
|
||||||
--(pCxt->currLevel);
|
|
||||||
pCxt->currClause = currClause;
|
pCxt->currClause = currClause;
|
||||||
pCxt->pCurrStmt = pCurrStmt;
|
pCxt->pCurrStmt = pCurrStmt;
|
||||||
|
pCxt->currLevel = currLevel;
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,8 @@ static char* getSyntaxErrFormat(int32_t errCode) {
|
||||||
return "Invalid column name: %s";
|
return "Invalid column name: %s";
|
||||||
case TSDB_CODE_PAR_TABLE_NOT_EXIST:
|
case TSDB_CODE_PAR_TABLE_NOT_EXIST:
|
||||||
return "Table does not exist: %s";
|
return "Table does not exist: %s";
|
||||||
|
case TSDB_CODE_PAR_GET_META_ERROR:
|
||||||
|
return "Fail to get table info, error: %s";
|
||||||
case TSDB_CODE_PAR_AMBIGUOUS_COLUMN:
|
case TSDB_CODE_PAR_AMBIGUOUS_COLUMN:
|
||||||
return "Column ambiguously defined: %s";
|
return "Column ambiguously defined: %s";
|
||||||
case TSDB_CODE_PAR_WRONG_VALUE_TYPE:
|
case TSDB_CODE_PAR_WRONG_VALUE_TYPE:
|
||||||
|
|
|
@ -341,11 +341,12 @@ TEST_F(ParserSelectTest, semanticCheck) {
|
||||||
|
|
||||||
run("SELECT t1.c1, t1.cc1 FROM t1", TSDB_CODE_PAR_INVALID_COLUMN);
|
run("SELECT t1.c1, t1.cc1 FROM t1", TSDB_CODE_PAR_INVALID_COLUMN);
|
||||||
|
|
||||||
|
// TSDB_CODE_PAR_GET_META_ERROR
|
||||||
|
run("SELECT * FROM t10", TSDB_CODE_PAR_GET_META_ERROR);
|
||||||
|
|
||||||
|
run("SELECT * FROM test.t10", TSDB_CODE_PAR_GET_META_ERROR);
|
||||||
|
|
||||||
// TSDB_CODE_PAR_TABLE_NOT_EXIST
|
// TSDB_CODE_PAR_TABLE_NOT_EXIST
|
||||||
run("SELECT * FROM t10", TSDB_CODE_PAR_TABLE_NOT_EXIST);
|
|
||||||
|
|
||||||
run("SELECT * FROM test.t10", TSDB_CODE_PAR_TABLE_NOT_EXIST);
|
|
||||||
|
|
||||||
run("SELECT t2.c1 FROM t1", TSDB_CODE_PAR_TABLE_NOT_EXIST);
|
run("SELECT t2.c1 FROM t1", TSDB_CODE_PAR_TABLE_NOT_EXIST);
|
||||||
|
|
||||||
// TSDB_CODE_PAR_AMBIGUOUS_COLUMN
|
// TSDB_CODE_PAR_AMBIGUOUS_COLUMN
|
||||||
|
|
|
@ -1229,6 +1229,7 @@ static int32_t createDeleteScanLogicNode(SLogicPlanContext* pCxt, SDeleteStmt* p
|
||||||
// set columns to scan
|
// set columns to scan
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
pScan->scanType = SCAN_TYPE_TABLE;
|
pScan->scanType = SCAN_TYPE_TABLE;
|
||||||
|
pScan->scanRange = pDelete->timeRange;
|
||||||
pScan->pScanCols = nodesCloneList(((SFunctionNode*)pDelete->pCountFunc)->pParameterList);
|
pScan->pScanCols = nodesCloneList(((SFunctionNode*)pDelete->pCountFunc)->pParameterList);
|
||||||
if (NULL == pScan->pScanCols) {
|
if (NULL == pScan->pScanCols) {
|
||||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
|
|
@ -916,7 +916,7 @@ int32_t schProcessOnOpBegin(SSchJob* pJob, SCH_OP_TYPE type, SSchedulerReq* pReq
|
||||||
qDebug("job not initialized or not executable job, refId:0x%" PRIx64, pJob->refId);
|
qDebug("job not initialized or not executable job, refId:0x%" PRIx64, pJob->refId);
|
||||||
SCH_ERR_RET(TSDB_CODE_SCH_STATUS_ERROR);
|
SCH_ERR_RET(TSDB_CODE_SCH_STATUS_ERROR);
|
||||||
}
|
}
|
||||||
break;
|
return TSDB_CODE_SUCCESS;
|
||||||
default:
|
default:
|
||||||
SCH_JOB_ELOG("unknown operation type %d", type);
|
SCH_JOB_ELOG("unknown operation type %d", type);
|
||||||
SCH_ERR_RET(TSDB_CODE_TSC_APP_ERROR);
|
SCH_ERR_RET(TSDB_CODE_TSC_APP_ERROR);
|
||||||
|
|
|
@ -559,6 +559,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_PAR_NO_VALID_FUNC_IN_WIN, "Not valid function
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_ONLY_SUPPORT_SINGLE_TABLE, "Only support single table")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_ONLY_SUPPORT_SINGLE_TABLE, "Only support single table")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_SMA_INDEX, "Invalid sma index")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_SMA_INDEX, "Invalid sma index")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_SELECTED_EXPR, "Invalid SELECTed expression")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_SELECTED_EXPR, "Invalid SELECTed expression")
|
||||||
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_GET_META_ERROR, "Fail to get table info")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INTERNAL_ERROR, "Parser internal error")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INTERNAL_ERROR, "Parser internal error")
|
||||||
|
|
||||||
//planner
|
//planner
|
||||||
|
|
|
@ -135,6 +135,7 @@ print ===================> nest query interval
|
||||||
sql_error select ts, avg(c1) from (select ts, c1 from nest_tb0);
|
sql_error select ts, avg(c1) from (select ts, c1 from nest_tb0);
|
||||||
|
|
||||||
sql select _wstart, avg(c1) from (select * from nest_tb0) interval(3d)
|
sql select _wstart, avg(c1) from (select * from nest_tb0) interval(3d)
|
||||||
|
print $data00 $data01 $data10 $data11 $data20 $data21
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -147,19 +148,19 @@ endi
|
||||||
if $data10 != @20-09-17 00:00:00.000@ then
|
if $data10 != @20-09-17 00:00:00.000@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data11 != 49.581325301 then
|
if $data11 != 49.685185185 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data20 != @20-09-20 00:00:00.000@ then
|
if $data20 != @20-09-20 00:00:00.000@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data21 != 49.703539823 then
|
if $data21 != 49.500000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select stddev(c1) from (select c1 from nest_tb0);
|
sql select stddev(c1) from (select c1 from nest_tb0);
|
||||||
sql_error select percentile(c1, 20) from (select * from nest_tb0);
|
sql_error select percentile(c1, 20) from (select * from nest_tb0);
|
||||||
sql_error select interp(c1) from (select * from nest_tb0);
|
sql select interp(c1) from (select * from nest_tb0);
|
||||||
sql_error select derivative(val, 1s, 0) from (select c1 val from nest_tb0);
|
sql_error select derivative(val, 1s, 0) from (select c1 val from nest_tb0);
|
||||||
sql_error select twa(c1) from (select c1 from nest_tb0);
|
sql_error select twa(c1) from (select c1 from nest_tb0);
|
||||||
sql_error select irate(c1) from (select c1 from nest_tb0);
|
sql_error select irate(c1) from (select c1 from nest_tb0);
|
||||||
|
@ -217,19 +218,14 @@ if $data00 != 0.016666667 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select derivative(c1, 1s, 0) from (select * from nest_tb0);
|
sql select derivative(c1, 1s, 0) from (select * from nest_tb0);
|
||||||
|
print $rows $data00 $data10
|
||||||
if $rows != 9999 then
|
if $rows != 9999 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data00 != @20-09-15 00:01:00.000@ then
|
if $data00 != 0.016666667 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data01 != 0.016666667 then
|
if $data10 != 0.016666667 then
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data10 != @20-09-15 00:02:00.000@ then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data11 != 0.016666667 then
|
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -238,7 +234,7 @@ if $rows != 9999 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(c1),sum(c2), max(c3), min(c4), count(*), first(c7), last(c7),spread(c6) from (select * from nest_tb0) interval(1d);
|
sql select _wstart, avg(c1),sum(c2), max(c3), min(c4), count(*), first(c7), last(c7),spread(c6) from (select * from nest_tb0) interval(1d);
|
||||||
if $rows != 7 then
|
if $rows != 7 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -291,7 +287,7 @@ print ===================> group by + having
|
||||||
print =========================> ascending order/descending order
|
print =========================> ascending order/descending order
|
||||||
|
|
||||||
print =========================> nest query join
|
print =========================> nest query join
|
||||||
sql select a.ts,a.k,b.ts from (select count(*) k from nest_tb0 interval(30a)) a, (select count(*) f from nest_tb1 interval(30a)) b where a.ts = b.ts ;
|
sql select a.ts,a.k,b.ts from (select _wstart ts, count(*) k from nest_tb0 interval(30a)) a, (select _wstart ts, count(*) f from nest_tb1 interval(30a)) b where a.ts = b.ts ;
|
||||||
if $rows != 10000 then
|
if $rows != 10000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -314,7 +310,7 @@ if $data12 != @20-09-15 00:01:00.000@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select sum(a.k), sum(b.f) from (select count(*) k from nest_tb0 interval(30a)) a, (select count(*) f from nest_tb1 interval(30a)) b where a.ts = b.ts ;
|
sql select sum(a.k), sum(b.f) from (select _wstart ts, count(*) k from nest_tb0 interval(30a)) a, (select _wstart ts, count(*) f from nest_tb1 interval(30a)) b where a.ts = b.ts ;
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -325,7 +321,7 @@ if $data01 != 10000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select a.ts,a.k,b.ts,c.ts,c.ts,c.x from (select count(*) k from nest_tb0 interval(30a)) a, (select count(*) f from nest_tb1 interval(30a)) b, (select count(*) x from nest_tb2 interval(30a)) c where a.ts = b.ts and a.ts = c.ts
|
sql select a.ts,a.k,b.ts,c.ts,c.ts,c.x from (select _wstart ts, count(*) k from nest_tb0 interval(30a)) a, (select _wstart ts, count(*) f from nest_tb1 interval(30a)) b, (select _wstart ts, count(*) x from nest_tb2 interval(30a)) c where a.ts = b.ts and a.ts = c.ts
|
||||||
if $rows != 10000 then
|
if $rows != 10000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -346,10 +342,7 @@ sql select diff(val) from (select c1 val from nest_tb0);
|
||||||
if $rows != 9999 then
|
if $rows != 9999 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data00 != @70-01-01 08:00:00.000@ then
|
if $data00 != 1 then
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data01 != 1 then
|
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -376,7 +369,7 @@ if $data11 != 1 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print =====================>TD-5157
|
print =====================>TD-5157
|
||||||
sql select twa(c1) from nest_tb1 interval(19a);
|
sql select _wstart, twa(c1) from nest_tb1 interval(19a);
|
||||||
if $rows != 10000 then
|
if $rows != 10000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -388,29 +381,14 @@ if $data01 != 0.000083333 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print ======================>TD-5271
|
print ======================>TD-5271
|
||||||
sql select min(val),max(val),first(val),last(val),count(val),sum(val),avg(val) from (select count(*) val from nest_mt0 group by tbname)
|
sql_error select min(val),max(val),first(val),last(val),count(val),sum(val),avg(val) from (select count(*) val from nest_mt0 group by tbname)
|
||||||
if $rows != 1 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data00 != 10000 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data01 != 10000 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data04 != 10 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data05 != 100000 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
print =================>us database interval query, TD-5039
|
print =================>us database interval query, TD-5039
|
||||||
sql create database test precision 'us';
|
sql create database test precision 'us';
|
||||||
sql use test;
|
sql use test;
|
||||||
sql create table t1(ts timestamp, k int);
|
sql create table t1(ts timestamp, k int);
|
||||||
sql insert into t1 values('2020-01-01 01:01:01.000', 1) ('2020-01-01 01:02:00.000', 2);
|
sql insert into t1 values('2020-01-01 01:01:01.000', 1) ('2020-01-01 01:02:00.000', 2);
|
||||||
sql select avg(k) from (select avg(k) k from t1 interval(1s)) interval(1m);
|
sql select _wstart, avg(k) from (select _wstart, avg(k) k from t1 interval(1s)) interval(1m);
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -427,4 +405,4 @@ if $data11 != 2.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
|
|
|
@ -498,4 +498,7 @@ if $data15 != 3 then
|
||||||
goto loop5
|
goto loop5
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
sql drop database test;
|
||||||
|
sql drop database test1;
|
||||||
|
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
|
|
Loading…
Reference in New Issue