|
|
@ -1019,8 +1019,7 @@ static uint8_t getPrecisionFromCurrStmt(SNode* pCurrStmt, uint8_t defaultVal) {
|
|
|
|
if (isDeleteStmt(pCurrStmt)) {
|
|
|
|
if (isDeleteStmt(pCurrStmt)) {
|
|
|
|
return ((SDeleteStmt*)pCurrStmt)->precision;
|
|
|
|
return ((SDeleteStmt*)pCurrStmt)->precision;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (pCurrStmt && nodeType(pCurrStmt) == QUERY_NODE_CREATE_TSMA_STMT)
|
|
|
|
if (pCurrStmt && nodeType(pCurrStmt) == QUERY_NODE_CREATE_TSMA_STMT) return ((SCreateTSMAStmt*)pCurrStmt)->precision;
|
|
|
|
return ((SCreateTSMAStmt*)pCurrStmt)->precision;
|
|
|
|
|
|
|
|
return defaultVal;
|
|
|
|
return defaultVal;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -1194,8 +1193,7 @@ int32_t buildPartitionListFromOrderList(SNodeList* pOrderList, int32_t nodesNum,
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) *ppOut = pPartitionList;
|
|
|
|
*ppOut = pPartitionList;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return code;
|
|
|
|
return code;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1229,7 +1227,8 @@ static int32_t isTimeLineAlignedQuery(SNode* pStmt, bool* pRes) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (TSDB_CODE_SUCCESS == code && QUERY_NODE_SET_OPERATOR == nodeType(((STempTableNode*)pSelect->pFromTable)->pSubquery)) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code &&
|
|
|
|
|
|
|
|
QUERY_NODE_SET_OPERATOR == nodeType(((STempTableNode*)pSelect->pFromTable)->pSubquery)) {
|
|
|
|
SSetOperator* pSub = (SSetOperator*)((STempTableNode*)pSelect->pFromTable)->pSubquery;
|
|
|
|
SSetOperator* pSub = (SSetOperator*)((STempTableNode*)pSelect->pFromTable)->pSubquery;
|
|
|
|
if (pSelect->pPartitionByList && pSub->timeLineFromOrderBy && pSub->pOrderByList->length > 1) {
|
|
|
|
if (pSelect->pPartitionByList && pSub->timeLineFromOrderBy && pSub->pOrderByList->length > 1) {
|
|
|
|
SNodeList* pPartitionList = NULL;
|
|
|
|
SNodeList* pPartitionList = NULL;
|
|
|
@ -1397,12 +1396,16 @@ static void setColumnPrimTs(STranslateContext* pCxt, SColumnNode* pCol, const ST
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static int32_t createColumnsByTable(STranslateContext* pCxt, const STableNode* pTable, bool igTags, SNodeList* pList, bool skipProjRef) {
|
|
|
|
static int32_t createColumnsByTable(STranslateContext* pCxt, const STableNode* pTable, bool igTags, SNodeList* pList,
|
|
|
|
|
|
|
|
bool skipProjRef) {
|
|
|
|
int32_t code = 0;
|
|
|
|
int32_t code = 0;
|
|
|
|
if (QUERY_NODE_REAL_TABLE == nodeType(pTable)) {
|
|
|
|
if (QUERY_NODE_REAL_TABLE == nodeType(pTable)) {
|
|
|
|
const STableMeta* pMeta = ((SRealTableNode*)pTable)->pMeta;
|
|
|
|
const STableMeta* pMeta = ((SRealTableNode*)pTable)->pMeta;
|
|
|
|
int32_t nums = pMeta->tableInfo.numOfColumns +
|
|
|
|
int32_t nums = pMeta->tableInfo.numOfColumns +
|
|
|
|
(igTags ? 0 : ((TSDB_SUPER_TABLE == pMeta->tableType || ((SRealTableNode*)pTable)->stbRewrite) ? pMeta->tableInfo.numOfTags : 0));
|
|
|
|
(igTags ? 0
|
|
|
|
|
|
|
|
: ((TSDB_SUPER_TABLE == pMeta->tableType || ((SRealTableNode*)pTable)->stbRewrite)
|
|
|
|
|
|
|
|
? pMeta->tableInfo.numOfTags
|
|
|
|
|
|
|
|
: 0));
|
|
|
|
for (int32_t i = 0; i < nums; ++i) {
|
|
|
|
for (int32_t i = 0; i < nums; ++i) {
|
|
|
|
if (invisibleColumn(pCxt->pParseCxt->enableSysInfo, pMeta->tableType, pMeta->schema[i].flags)) {
|
|
|
|
if (invisibleColumn(pCxt->pParseCxt->enableSysInfo, pMeta->tableType, pMeta->schema[i].flags)) {
|
|
|
|
pCxt->pParseCxt->hasInvisibleCol = true;
|
|
|
|
pCxt->pParseCxt->hasInvisibleCol = true;
|
|
|
@ -1433,7 +1436,8 @@ static int32_t createColumnsByTable(STranslateContext* pCxt, const STableNode* p
|
|
|
|
code = setColumnInfoByExpr(pTempTable, (SExprNode*)pNode, (SColumnNode**)&pCell->pNode);
|
|
|
|
code = setColumnInfoByExpr(pTempTable, (SExprNode*)pNode, (SColumnNode**)&pCell->pNode);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
if (!skipProjRef) pCol->projRefIdx = ((SExprNode*)pNode)->projIdx; // only set proj ref when select * from (select ...)
|
|
|
|
if (!skipProjRef)
|
|
|
|
|
|
|
|
pCol->projRefIdx = ((SExprNode*)pNode)->projIdx; // only set proj ref when select * from (select ...)
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1603,7 +1607,8 @@ static EDealRes translateColumnUseAlias(STranslateContext* pCxt, SColumnNode** p
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (*pFound) {
|
|
|
|
if (*pFound) {
|
|
|
|
if (QUERY_NODE_FUNCTION == nodeType(pFoundNode) && (SQL_CLAUSE_GROUP_BY == pCxt->currClause || SQL_CLAUSE_PARTITION_BY == pCxt->currClause)) {
|
|
|
|
if (QUERY_NODE_FUNCTION == nodeType(pFoundNode) &&
|
|
|
|
|
|
|
|
(SQL_CLAUSE_GROUP_BY == pCxt->currClause || SQL_CLAUSE_PARTITION_BY == pCxt->currClause)) {
|
|
|
|
pCxt->errCode = getFuncInfo(pCxt, (SFunctionNode*)pFoundNode);
|
|
|
|
pCxt->errCode = getFuncInfo(pCxt, (SFunctionNode*)pFoundNode);
|
|
|
|
if (TSDB_CODE_SUCCESS == pCxt->errCode) {
|
|
|
|
if (TSDB_CODE_SUCCESS == pCxt->errCode) {
|
|
|
|
if (fmIsVectorFunc(((SFunctionNode*)pFoundNode)->funcId)) {
|
|
|
|
if (fmIsVectorFunc(((SFunctionNode*)pFoundNode)->funcId)) {
|
|
|
@ -1744,8 +1749,7 @@ static int32_t biRewriteSelectFuncParamStar(STranslateContext* pCxt, SSelectStmt
|
|
|
|
((SRealTableNode*)pTable)->pMeta->tableType == TSDB_SUPER_TABLE) {
|
|
|
|
((SRealTableNode*)pTable)->pMeta->tableType == TSDB_SUPER_TABLE) {
|
|
|
|
SNode* pTbnameNode = NULL;
|
|
|
|
SNode* pTbnameNode = NULL;
|
|
|
|
code = biMakeTbnameProjectAstNode(pFunc->functionName, NULL, &pTbnameNode);
|
|
|
|
code = biMakeTbnameProjectAstNode(pFunc->functionName, NULL, &pTbnameNode);
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = nodesListStrictAppend(pTbnameNodeList, pTbnameNode);
|
|
|
|
code = nodesListStrictAppend(pTbnameNodeList, pTbnameNode);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (TSDB_CODE_SUCCESS == code && LIST_LENGTH(pTbnameNodeList) > 0) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code && LIST_LENGTH(pTbnameNodeList) > 0) {
|
|
|
@ -1761,8 +1765,7 @@ static int32_t biRewriteSelectFuncParamStar(STranslateContext* pCxt, SSelectStmt
|
|
|
|
((SRealTableNode*)pTable)->pMeta->tableType == TSDB_SUPER_TABLE) {
|
|
|
|
((SRealTableNode*)pTable)->pMeta->tableType == TSDB_SUPER_TABLE) {
|
|
|
|
SNode* pTbnameNode = NULL;
|
|
|
|
SNode* pTbnameNode = NULL;
|
|
|
|
code = biMakeTbnameProjectAstNode(pFunc->functionName, pTableAlias, &pTbnameNode);
|
|
|
|
code = biMakeTbnameProjectAstNode(pFunc->functionName, pTableAlias, &pTbnameNode);
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = nodesListStrictAppend(pTbnameNodeList, pTbnameNode);
|
|
|
|
code = nodesListStrictAppend(pTbnameNodeList, pTbnameNode);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (TSDB_CODE_SUCCESS == code && LIST_LENGTH(pTbnameNodeList) > 0) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code && LIST_LENGTH(pTbnameNodeList) > 0) {
|
|
|
|
nodesListInsertListAfterPos(pSelect->pProjectionList, pSelectListCell, pTbnameNodeList);
|
|
|
|
nodesListInsertListAfterPos(pSelect->pProjectionList, pSelectListCell, pTbnameNodeList);
|
|
|
@ -1794,8 +1797,7 @@ int32_t biRewriteSelectStar(STranslateContext* pCxt, SSelectStmt* pSelect) {
|
|
|
|
((SRealTableNode*)pTable)->pMeta->tableType == TSDB_SUPER_TABLE) {
|
|
|
|
((SRealTableNode*)pTable)->pMeta->tableType == TSDB_SUPER_TABLE) {
|
|
|
|
SNode* pTbnameNode = NULL;
|
|
|
|
SNode* pTbnameNode = NULL;
|
|
|
|
code = biMakeTbnameProjectAstNode(NULL, NULL, &pTbnameNode);
|
|
|
|
code = biMakeTbnameProjectAstNode(NULL, NULL, &pTbnameNode);
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = nodesListStrictAppend(pTbnameNodeList, pTbnameNode);
|
|
|
|
code = nodesListStrictAppend(pTbnameNodeList, pTbnameNode);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (TSDB_CODE_SUCCESS == code && LIST_LENGTH(pTbnameNodeList) > 0) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code && LIST_LENGTH(pTbnameNodeList) > 0) {
|
|
|
@ -1810,8 +1812,7 @@ int32_t biRewriteSelectStar(STranslateContext* pCxt, SSelectStmt* pSelect) {
|
|
|
|
((SRealTableNode*)pTable)->pMeta != NULL && ((SRealTableNode*)pTable)->pMeta->tableType == TSDB_SUPER_TABLE) {
|
|
|
|
((SRealTableNode*)pTable)->pMeta != NULL && ((SRealTableNode*)pTable)->pMeta->tableType == TSDB_SUPER_TABLE) {
|
|
|
|
SNode* pTbnameNode = NULL;
|
|
|
|
SNode* pTbnameNode = NULL;
|
|
|
|
code = biMakeTbnameProjectAstNode(NULL, pTableAlias, &pTbnameNode);
|
|
|
|
code = biMakeTbnameProjectAstNode(NULL, pTableAlias, &pTbnameNode);
|
|
|
|
if (TSDB_CODE_SUCCESS ==code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = nodesListStrictAppend(pTbnameNodeList, pTbnameNode);
|
|
|
|
code = nodesListStrictAppend(pTbnameNodeList, pTbnameNode);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (TSDB_CODE_SUCCESS == code && LIST_LENGTH(pTbnameNodeList) > 0) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code && LIST_LENGTH(pTbnameNodeList) > 0) {
|
|
|
|
nodesListInsertListAfterPos(pSelect->pProjectionList, cell, pTbnameNodeList);
|
|
|
|
nodesListInsertListAfterPos(pSelect->pProjectionList, cell, pTbnameNodeList);
|
|
|
@ -1877,9 +1878,7 @@ int32_t biCheckCreateTableTbnameCol(STranslateContext* pCxt, SCreateTableStmt* p
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static bool clauseSupportAlias(ESqlClause clause) {
|
|
|
|
static bool clauseSupportAlias(ESqlClause clause) {
|
|
|
|
return SQL_CLAUSE_GROUP_BY == clause ||
|
|
|
|
return SQL_CLAUSE_GROUP_BY == clause || SQL_CLAUSE_PARTITION_BY == clause || SQL_CLAUSE_ORDER_BY == clause;
|
|
|
|
SQL_CLAUSE_PARTITION_BY == clause ||
|
|
|
|
|
|
|
|
SQL_CLAUSE_ORDER_BY == clause;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static EDealRes translateColumn(STranslateContext* pCxt, SColumnNode** pCol) {
|
|
|
|
static EDealRes translateColumn(STranslateContext* pCxt, SColumnNode** pCol) {
|
|
|
@ -1908,8 +1907,7 @@ static EDealRes translateColumn(STranslateContext* pCxt, SColumnNode** pCol) {
|
|
|
|
res = translateColumnWithPrefix(pCxt, pCol);
|
|
|
|
res = translateColumnWithPrefix(pCxt, pCol);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
bool found = false;
|
|
|
|
bool found = false;
|
|
|
|
if ((pCxt->currClause == SQL_CLAUSE_ORDER_BY) &&
|
|
|
|
if ((pCxt->currClause == SQL_CLAUSE_ORDER_BY) && !(*pCol)->node.asParam) {
|
|
|
|
!(*pCol)->node.asParam) {
|
|
|
|
|
|
|
|
res = translateColumnUseAlias(pCxt, pCol, &found);
|
|
|
|
res = translateColumnUseAlias(pCxt, pCol, &found);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (DEAL_RES_ERROR != res && !found) {
|
|
|
|
if (DEAL_RES_ERROR != res && !found) {
|
|
|
@ -1919,9 +1917,7 @@ static EDealRes translateColumn(STranslateContext* pCxt, SColumnNode** pCol) {
|
|
|
|
res = translateColumnWithoutPrefix(pCxt, pCol);
|
|
|
|
res = translateColumnWithoutPrefix(pCxt, pCol);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (clauseSupportAlias(pCxt->currClause) &&
|
|
|
|
if (clauseSupportAlias(pCxt->currClause) && !(*pCol)->node.asParam && res != DEAL_RES_CONTINUE &&
|
|
|
|
!(*pCol)->node.asParam &&
|
|
|
|
|
|
|
|
res != DEAL_RES_CONTINUE &&
|
|
|
|
|
|
|
|
res != DEAL_RES_END) {
|
|
|
|
res != DEAL_RES_END) {
|
|
|
|
res = translateColumnUseAlias(pCxt, pCol, &found);
|
|
|
|
res = translateColumnUseAlias(pCxt, pCol, &found);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -2750,7 +2746,8 @@ static int32_t translateRepeatScanFunc(STranslateContext* pCxt, SFunctionNode* p
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (NULL != pSelect->pWindow) {
|
|
|
|
if (NULL != pSelect->pWindow) {
|
|
|
|
if (QUERY_NODE_EVENT_WINDOW == nodeType(pSelect->pWindow) || QUERY_NODE_COUNT_WINDOW == nodeType(pSelect->pWindow)) {
|
|
|
|
if (QUERY_NODE_EVENT_WINDOW == nodeType(pSelect->pWindow) ||
|
|
|
|
|
|
|
|
QUERY_NODE_COUNT_WINDOW == nodeType(pSelect->pWindow)) {
|
|
|
|
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_NOT_ALLOWED_FUNC,
|
|
|
|
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_NOT_ALLOWED_FUNC,
|
|
|
|
"%s function is not supported in count/event window", pFunc->functionName);
|
|
|
|
"%s function is not supported in count/event window", pFunc->functionName);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -3222,8 +3219,7 @@ static EDealRes translateFunction(STranslateContext* pCxt, SFunctionNode** pFunc
|
|
|
|
|
|
|
|
|
|
|
|
pCxt->errCode = getFuncInfo(pCxt, *pFunc);
|
|
|
|
pCxt->errCode = getFuncInfo(pCxt, *pFunc);
|
|
|
|
if (TSDB_CODE_SUCCESS == pCxt->errCode) {
|
|
|
|
if (TSDB_CODE_SUCCESS == pCxt->errCode) {
|
|
|
|
if ((SQL_CLAUSE_GROUP_BY == pCxt->currClause ||
|
|
|
|
if ((SQL_CLAUSE_GROUP_BY == pCxt->currClause || SQL_CLAUSE_PARTITION_BY == pCxt->currClause) &&
|
|
|
|
SQL_CLAUSE_PARTITION_BY == pCxt->currClause) &&
|
|
|
|
|
|
|
|
fmIsVectorFunc((*pFunc)->funcId)) {
|
|
|
|
fmIsVectorFunc((*pFunc)->funcId)) {
|
|
|
|
pCxt->errCode = TSDB_CODE_PAR_ILLEGAL_USE_AGG_FUNCTION;
|
|
|
|
pCxt->errCode = TSDB_CODE_PAR_ILLEGAL_USE_AGG_FUNCTION;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -3327,7 +3323,6 @@ static int32_t selectCommonType(SDataType* commonType, const SDataType* newType)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
commonType->type = resultType;
|
|
|
|
commonType->type = resultType;
|
|
|
|
return TSDB_CODE_SUCCESS;
|
|
|
|
return TSDB_CODE_SUCCESS;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static EDealRes translateCaseWhen(STranslateContext* pCxt, SCaseWhenNode* pCaseWhen) {
|
|
|
|
static EDealRes translateCaseWhen(STranslateContext* pCxt, SCaseWhenNode* pCaseWhen) {
|
|
|
@ -4278,8 +4273,8 @@ static int32_t setTableTsmas(STranslateContext* pCxt, SName* pName, SRealTableNo
|
|
|
|
SVgroupInfo vgInfo = {0};
|
|
|
|
SVgroupInfo vgInfo = {0};
|
|
|
|
bool exists = false;
|
|
|
|
bool exists = false;
|
|
|
|
toName(pCxt->pParseCxt->acctId, pRealTable->table.dbName, "", &tsmaTargetTbName);
|
|
|
|
toName(pCxt->pParseCxt->acctId, pRealTable->table.dbName, "", &tsmaTargetTbName);
|
|
|
|
int32_t len = tsnprintf(buf, TSDB_TABLE_FNAME_LEN + TSDB_TABLE_NAME_LEN, "%s.%s_%s", pTsma->dbFName, pTsma->name,
|
|
|
|
int32_t len = tsnprintf(buf, TSDB_TABLE_FNAME_LEN + TSDB_TABLE_NAME_LEN, "%s.%s_%s", pTsma->dbFName,
|
|
|
|
pRealTable->table.tableName);
|
|
|
|
pTsma->name, pRealTable->table.tableName);
|
|
|
|
len = taosCreateMD5Hash(buf, len);
|
|
|
|
len = taosCreateMD5Hash(buf, len);
|
|
|
|
strncpy(tsmaTargetTbName.tname, buf, MD5_OUTPUT_LEN);
|
|
|
|
strncpy(tsmaTargetTbName.tname, buf, MD5_OUTPUT_LEN);
|
|
|
|
code = collectUseTable(&tsmaTargetTbName, pCxt->pTargetTables);
|
|
|
|
code = collectUseTable(&tsmaTargetTbName, pCxt->pTargetTables);
|
|
|
@ -4957,8 +4952,7 @@ int32_t translateTable(STranslateContext* pCxt, SNode** pTable, SNode* pJoinPare
|
|
|
|
}
|
|
|
|
}
|
|
|
|
code = translateAudit(pCxt, pRealTable, &name);
|
|
|
|
code = translateAudit(pCxt, pRealTable, &name);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = setTableVgroupList(pCxt, &name, pRealTable);
|
|
|
|
code = setTableVgroupList(pCxt, &name, pRealTable);
|
|
|
|
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
code = setTableIndex(pCxt, &name, pRealTable);
|
|
|
|
code = setTableIndex(pCxt, &name, pRealTable);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -5350,8 +5344,8 @@ static int32_t translateOrderBy(STranslateContext* pCxt, SSelectStmt* pSelect) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static EDealRes needFillImpl(SNode* pNode, void* pContext) {
|
|
|
|
static EDealRes needFillImpl(SNode* pNode, void* pContext) {
|
|
|
|
if ((isAggFunc(pNode) || isInterpFunc(pNode)) && FUNCTION_TYPE_GROUP_KEY != ((SFunctionNode*)pNode)->funcType
|
|
|
|
if ((isAggFunc(pNode) || isInterpFunc(pNode)) && FUNCTION_TYPE_GROUP_KEY != ((SFunctionNode*)pNode)->funcType &&
|
|
|
|
&& FUNCTION_TYPE_GROUP_CONST_VALUE != ((SFunctionNode*)pNode)->funcType) {
|
|
|
|
FUNCTION_TYPE_GROUP_CONST_VALUE != ((SFunctionNode*)pNode)->funcType) {
|
|
|
|
*(bool*)pContext = true;
|
|
|
|
*(bool*)pContext = true;
|
|
|
|
return DEAL_RES_END;
|
|
|
|
return DEAL_RES_END;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -5460,9 +5454,7 @@ static int32_t translateProjectionList(STranslateContext* pCxt, SSelectStmt* pSe
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
SNode* pNode;
|
|
|
|
SNode* pNode;
|
|
|
|
int32_t projIdx = 1;
|
|
|
|
int32_t projIdx = 1;
|
|
|
|
FOREACH(pNode, pSelect->pProjectionList) {
|
|
|
|
FOREACH(pNode, pSelect->pProjectionList) { ((SExprNode*)pNode)->projIdx = projIdx++; }
|
|
|
|
((SExprNode*)pNode)->projIdx = projIdx++;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return TSDB_CODE_SUCCESS;
|
|
|
|
return TSDB_CODE_SUCCESS;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -5511,8 +5503,7 @@ static int32_t replaceGroupByAlias(STranslateContext* pCxt, SSelectStmt* pSelect
|
|
|
|
if (NULL == pSelect->pGroupByList) {
|
|
|
|
if (NULL == pSelect->pGroupByList) {
|
|
|
|
return TSDB_CODE_SUCCESS;
|
|
|
|
return TSDB_CODE_SUCCESS;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
SReplaceGroupByAliasCxt cxt = {
|
|
|
|
SReplaceGroupByAliasCxt cxt = {.pTranslateCxt = pCxt, .pProjectionList = pSelect->pProjectionList};
|
|
|
|
.pTranslateCxt = pCxt, .pProjectionList = pSelect->pProjectionList};
|
|
|
|
|
|
|
|
nodesRewriteExprsPostOrder(pSelect->pGroupByList, replaceGroupByAliasImpl, &cxt);
|
|
|
|
nodesRewriteExprsPostOrder(pSelect->pGroupByList, replaceGroupByAliasImpl, &cxt);
|
|
|
|
|
|
|
|
|
|
|
|
return pCxt->errCode;
|
|
|
|
return pCxt->errCode;
|
|
|
@ -5522,8 +5513,7 @@ static int32_t replacePartitionByAlias(STranslateContext* pCxt, SSelectStmt* pSe
|
|
|
|
if (NULL == pSelect->pPartitionByList) {
|
|
|
|
if (NULL == pSelect->pPartitionByList) {
|
|
|
|
return TSDB_CODE_SUCCESS;
|
|
|
|
return TSDB_CODE_SUCCESS;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
SReplaceGroupByAliasCxt cxt = {
|
|
|
|
SReplaceGroupByAliasCxt cxt = {.pTranslateCxt = pCxt, .pProjectionList = pSelect->pProjectionList};
|
|
|
|
.pTranslateCxt = pCxt, .pProjectionList = pSelect->pProjectionList};
|
|
|
|
|
|
|
|
nodesRewriteExprsPostOrder(pSelect->pPartitionByList, replaceGroupByAliasImpl, &cxt);
|
|
|
|
nodesRewriteExprsPostOrder(pSelect->pPartitionByList, replaceGroupByAliasImpl, &cxt);
|
|
|
|
|
|
|
|
|
|
|
|
return pCxt->errCode;
|
|
|
|
return pCxt->errCode;
|
|
|
@ -6400,7 +6390,8 @@ static int32_t isOperatorTbnameInCond(STranslateContext* pCxt, SOperatorNode* pO
|
|
|
|
return TSDB_CODE_SUCCESS;
|
|
|
|
return TSDB_CODE_SUCCESS;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static int32_t findEqCondTbNameInOperatorNode(STranslateContext* pCxt, SNode* pWhere, SEqCondTbNameTableInfo* pInfo, bool* pRet) {
|
|
|
|
static int32_t findEqCondTbNameInOperatorNode(STranslateContext* pCxt, SNode* pWhere, SEqCondTbNameTableInfo* pInfo,
|
|
|
|
|
|
|
|
bool* pRet) {
|
|
|
|
int32_t code = TSDB_CODE_SUCCESS;
|
|
|
|
int32_t code = TSDB_CODE_SUCCESS;
|
|
|
|
char* pTableAlias = NULL;
|
|
|
|
char* pTableAlias = NULL;
|
|
|
|
bool eqTbnameCond = false, tbnameInCond = false;
|
|
|
|
bool eqTbnameCond = false, tbnameInCond = false;
|
|
|
@ -6714,7 +6705,8 @@ static int32_t setEqualTbnameTableVgroups(STranslateContext* pCxt, SSelectStmt*
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
qDebug("before ctbname optimize, code:%d, aTableNum:%d, nTbls:%d, stableQuery:%d", code, aTableNum, nTbls, stableQuery);
|
|
|
|
qDebug("before ctbname optimize, code:%d, aTableNum:%d, nTbls:%d, stableQuery:%d", code, aTableNum, nTbls,
|
|
|
|
|
|
|
|
stableQuery);
|
|
|
|
|
|
|
|
|
|
|
|
if (TSDB_CODE_SUCCESS == code && 1 == aTableNum && 1 == nTbls && stableQuery && NULL == pInfo->pRealTable->pTsmas) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code && 1 == aTableNum && 1 == nTbls && stableQuery && NULL == pInfo->pRealTable->pTsmas) {
|
|
|
|
code = replaceToChildTableQuery(pCxt, pInfo);
|
|
|
|
code = replaceToChildTableQuery(pCxt, pInfo);
|
|
|
@ -6808,8 +6800,8 @@ static EDealRes collectTableAlias(SNode* pNode, void* pContext) {
|
|
|
|
*(SSHashObj**)pContext = pHash;
|
|
|
|
*(SSHashObj**)pContext = pHash;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (TSDB_CODE_SUCCESS != tSimpleHashPut(*(SSHashObj**)pContext, pCol->tableAlias, strlen(pCol->tableAlias), pCol->tableAlias,
|
|
|
|
if (TSDB_CODE_SUCCESS != tSimpleHashPut(*(SSHashObj**)pContext, pCol->tableAlias, strlen(pCol->tableAlias),
|
|
|
|
sizeof(pCol->tableAlias))) {
|
|
|
|
pCol->tableAlias, sizeof(pCol->tableAlias))) {
|
|
|
|
return DEAL_RES_ERROR;
|
|
|
|
return DEAL_RES_ERROR;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -7075,8 +7067,7 @@ static int32_t translateSelectFrom(STranslateContext* pCxt, SSelectStmt* pSelect
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
code = resetSelectFuncNumWithoutDup(pSelect);
|
|
|
|
code = resetSelectFuncNumWithoutDup(pSelect);
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = checkAggColCoexist(pCxt, pSelect);
|
|
|
|
code = checkAggColCoexist(pCxt, pSelect);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
@ -8005,8 +7996,8 @@ static int32_t checkDatabaseOptions(STranslateContext* pCxt, const char* pDbName
|
|
|
|
code = checkOptionsDependency(pCxt, pDbName, pOptions);
|
|
|
|
code = checkOptionsDependency(pCxt, pDbName, pOptions);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
code =
|
|
|
|
code = checkDbRangeOption(pCxt, "s3_chunkpages", pOptions->s3ChunkSize, TSDB_MIN_S3_CHUNK_SIZE,
|
|
|
|
checkDbRangeOption(pCxt, "s3_chunksize", pOptions->s3ChunkSize, TSDB_MIN_S3_CHUNK_SIZE, TSDB_MAX_S3_CHUNK_SIZE);
|
|
|
|
TSDB_MAX_S3_CHUNK_SIZE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
code = checkDbRangeOption(pCxt, "s3_compact", pOptions->s3Compact, TSDB_MIN_S3_COMPACT, TSDB_MAX_S3_COMPACT);
|
|
|
|
code = checkDbRangeOption(pCxt, "s3_compact", pOptions->s3Compact, TSDB_MIN_S3_COMPACT, TSDB_MAX_S3_COMPACT);
|
|
|
@ -9024,7 +9015,8 @@ static int32_t createRollupFuncs(SCreateTableStmt* pStmt, SNodeList** ppList) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*ppList = pFuncs;
|
|
|
|
*ppList = pFuncs;
|
|
|
|
|
|
|
|
|
|
|
|
return code;;
|
|
|
|
return code;
|
|
|
|
|
|
|
|
;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static int32_t createRollupTableMeta(SCreateTableStmt* pStmt, int8_t precision, STableMeta** ppTbMeta) {
|
|
|
|
static int32_t createRollupTableMeta(SCreateTableStmt* pStmt, int8_t precision, STableMeta** ppTbMeta) {
|
|
|
@ -9153,8 +9145,7 @@ static int32_t buildCreateStbReq(STranslateContext* pCxt, SCreateTableStmt* pStm
|
|
|
|
// columnDefNodeToField(pStmt->pCols, &pReq->pColumns, true);
|
|
|
|
// columnDefNodeToField(pStmt->pCols, &pReq->pColumns, true);
|
|
|
|
// columnDefNodeToField(pStmt->pTags, &pReq->pTags, true);
|
|
|
|
// columnDefNodeToField(pStmt->pTags, &pReq->pTags, true);
|
|
|
|
code = columnDefNodeToField(pStmt->pCols, &pReq->pColumns, true);
|
|
|
|
code = columnDefNodeToField(pStmt->pCols, &pReq->pColumns, true);
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = tagDefNodeToField(pStmt->pTags, &pReq->pTags, true);
|
|
|
|
code = tagDefNodeToField(pStmt->pTags, &pReq->pTags, true);
|
|
|
|
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
pReq->numOfColumns = LIST_LENGTH(pStmt->pCols);
|
|
|
|
pReq->numOfColumns = LIST_LENGTH(pStmt->pCols);
|
|
|
|
pReq->numOfTags = LIST_LENGTH(pStmt->pTags);
|
|
|
|
pReq->numOfTags = LIST_LENGTH(pStmt->pTags);
|
|
|
@ -9174,8 +9165,7 @@ static int32_t buildCreateStbReq(STranslateContext* pCxt, SCreateTableStmt* pStm
|
|
|
|
toName(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, &tableName);
|
|
|
|
toName(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, &tableName);
|
|
|
|
code = tNameExtractFullName(&tableName, pReq->name);
|
|
|
|
code = tNameExtractFullName(&tableName, pReq->name);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = collectUseTable(&tableName, pCxt->pTables);
|
|
|
|
code = collectUseTable(&tableName, pCxt->pTables);
|
|
|
|
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
code = collectUseTable(&tableName, pCxt->pTargetTables);
|
|
|
|
code = collectUseTable(&tableName, pCxt->pTargetTables);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -9532,7 +9522,8 @@ static int32_t translateUseDatabase(STranslateContext* pCxt, SUseDatabaseStmt* p
|
|
|
|
code = tNameExtractFullName(&name, usedbReq.db);
|
|
|
|
code = tNameExtractFullName(&name, usedbReq.db);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
code = getDBVgVersion(pCxt, usedbReq.db, &usedbReq.vgVersion, &usedbReq.dbId, &usedbReq.numOfTable, &usedbReq.stateTs);
|
|
|
|
code =
|
|
|
|
|
|
|
|
getDBVgVersion(pCxt, usedbReq.db, &usedbReq.vgVersion, &usedbReq.dbId, &usedbReq.numOfTable, &usedbReq.stateTs);
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
code = buildCmdMsg(pCxt, TDMT_MND_USE_DB, (FSerializeFunc)tSerializeSUseDbReq, &usedbReq);
|
|
|
|
code = buildCmdMsg(pCxt, TDMT_MND_USE_DB, (FSerializeFunc)tSerializeSUseDbReq, &usedbReq);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -10112,8 +10103,7 @@ static int32_t buildCreateTopicReq(STranslateContext* pCxt, SCreateTopicStmt* pS
|
|
|
|
} else if ('\0' != pStmt->subDbName[0]) {
|
|
|
|
} else if ('\0' != pStmt->subDbName[0]) {
|
|
|
|
pReq->subType = TOPIC_SUB_TYPE__DB;
|
|
|
|
pReq->subType = TOPIC_SUB_TYPE__DB;
|
|
|
|
code = tNameSetDbName(&name, pCxt->pParseCxt->acctId, pStmt->subDbName, strlen(pStmt->subDbName));
|
|
|
|
code = tNameSetDbName(&name, pCxt->pParseCxt->acctId, pStmt->subDbName, strlen(pStmt->subDbName));
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) (void)tNameGetFullDbName(&name, pReq->subDbName);
|
|
|
|
(void)tNameGetFullDbName(&name, pReq->subDbName);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
pReq->subType = TOPIC_SUB_TYPE__COLUMN;
|
|
|
|
pReq->subType = TOPIC_SUB_TYPE__COLUMN;
|
|
|
|
char* dbName = ((SRealTableNode*)(((SSelectStmt*)pStmt->pQuery)->pFromTable))->table.dbName;
|
|
|
|
char* dbName = ((SRealTableNode*)(((SSelectStmt*)pStmt->pQuery)->pFromTable))->table.dbName;
|
|
|
@ -10625,8 +10615,7 @@ static int32_t addNullTagsForExistTable(STranslateContext* pCxt, STableMeta* pMe
|
|
|
|
for (int32_t i = 0; TSDB_CODE_SUCCESS == code && i < numOfTags; ++i) {
|
|
|
|
for (int32_t i = 0; TSDB_CODE_SUCCESS == code && i < numOfTags; ++i) {
|
|
|
|
SNode* pNull = NULL;
|
|
|
|
SNode* pNull = NULL;
|
|
|
|
code = createNullValue(&pNull);
|
|
|
|
code = createNullValue(&pNull);
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = nodesListMakeStrictAppend(&pSelect->pTags, pNull);
|
|
|
|
code = nodesListMakeStrictAppend(&pSelect->pTags, pNull);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return code;
|
|
|
|
return code;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -10686,8 +10675,7 @@ static int32_t addNullTagsForCreateTable(STranslateContext* pCxt, SCreateStreamS
|
|
|
|
for (int32_t i = 0; TSDB_CODE_SUCCESS == code && i < LIST_LENGTH(pStmt->pTags); ++i) {
|
|
|
|
for (int32_t i = 0; TSDB_CODE_SUCCESS == code && i < LIST_LENGTH(pStmt->pTags); ++i) {
|
|
|
|
SNode* pNull = NULL;
|
|
|
|
SNode* pNull = NULL;
|
|
|
|
code = createNullValue(&pNull);
|
|
|
|
code = createNullValue(&pNull);
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = nodesListMakeStrictAppend(&((SSelectStmt*)pStmt->pQuery)->pTags, pNull);
|
|
|
|
code = nodesListMakeStrictAppend(&((SSelectStmt*)pStmt->pQuery)->pTags, pNull);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return code;
|
|
|
|
return code;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -10874,7 +10862,8 @@ static int32_t checkStreamQuery(STranslateContext* pCxt, SCreateStreamStmt* pStm
|
|
|
|
SValueNode* pVal = (SValueNode*)pStmt->pOptions->pDelay;
|
|
|
|
SValueNode* pVal = (SValueNode*)pStmt->pOptions->pDelay;
|
|
|
|
int64_t minDelay = 0;
|
|
|
|
int64_t minDelay = 0;
|
|
|
|
char* str = "5s";
|
|
|
|
char* str = "5s";
|
|
|
|
if (DEAL_RES_ERROR != translateValue(pCxt, pVal) && TSDB_CODE_SUCCESS ==
|
|
|
|
if (DEAL_RES_ERROR != translateValue(pCxt, pVal) &&
|
|
|
|
|
|
|
|
TSDB_CODE_SUCCESS ==
|
|
|
|
parseNatualDuration(str, strlen(str), &minDelay, &pVal->unit, pVal->node.resType.precision, false)) {
|
|
|
|
parseNatualDuration(str, strlen(str), &minDelay, &pVal->unit, pVal->node.resType.precision, false)) {
|
|
|
|
if (pVal->datum.i < minDelay) {
|
|
|
|
if (pVal->datum.i < minDelay) {
|
|
|
|
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_STREAM_QUERY,
|
|
|
|
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_STREAM_QUERY,
|
|
|
@ -11170,8 +11159,7 @@ static int32_t adjustOrderOfTags(STranslateContext* pCxt, SNodeList* pTags, cons
|
|
|
|
}
|
|
|
|
}
|
|
|
|
SNode* pNull = NULL;
|
|
|
|
SNode* pNull = NULL;
|
|
|
|
code = createNullValue(&pNull);
|
|
|
|
code = createNullValue(&pNull);
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = nodesListStrictAppend(pNewTagExprs, pNull);
|
|
|
|
code = nodesListStrictAppend(pNewTagExprs, pNull);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -12077,8 +12065,7 @@ static int32_t translateShowCreateDatabase(STranslateContext* pCxt, SShowCreateD
|
|
|
|
SName name;
|
|
|
|
SName name;
|
|
|
|
int32_t code = tNameSetDbName(&name, pCxt->pParseCxt->acctId, pStmt->dbName, strlen(pStmt->dbName));
|
|
|
|
int32_t code = tNameSetDbName(&name, pCxt->pParseCxt->acctId, pStmt->dbName, strlen(pStmt->dbName));
|
|
|
|
(void)tNameGetFullDbName(&name, pStmt->dbFName);
|
|
|
|
(void)tNameGetFullDbName(&name, pStmt->dbFName);
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) return getDBCfg(pCxt, pStmt->dbName, (SDbCfgInfo*)pStmt->pCfg);
|
|
|
|
return getDBCfg(pCxt, pStmt->dbName, (SDbCfgInfo*)pStmt->pCfg);
|
|
|
|
|
|
|
|
return code;
|
|
|
|
return code;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -12218,8 +12205,7 @@ static int32_t buildTSMAAst(STranslateContext* pCxt, SCreateTSMAStmt* pStmt, SMC
|
|
|
|
info.pDbName = pStmt->dbName;
|
|
|
|
info.pDbName = pStmt->dbName;
|
|
|
|
info.pTableName = tbName;
|
|
|
|
info.pTableName = tbName;
|
|
|
|
code = nodesCloneList(pStmt->pOptions->pFuncs, &info.pFuncs);
|
|
|
|
code = nodesCloneList(pStmt->pOptions->pFuncs, &info.pFuncs);
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = nodesCloneNode(pStmt->pOptions->pInterval, &info.pInterval);
|
|
|
|
code = nodesCloneNode(pStmt->pOptions->pInterval, &info.pInterval);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SFunctionNode* pTbnameFunc = NULL;
|
|
|
|
SFunctionNode* pTbnameFunc = NULL;
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
@ -12246,8 +12232,7 @@ static int32_t buildTSMAAst(STranslateContext* pCxt, SCreateTSMAStmt* pStmt, SMC
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
SNode* pNew = NULL;
|
|
|
|
SNode* pNew = NULL;
|
|
|
|
code = nodesCloneNode(pTagCol, &pNew);
|
|
|
|
code = nodesCloneNode(pTagCol, &pNew);
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = nodesListMakeStrictAppend(&info.pTags, pNew);
|
|
|
|
code = nodesListMakeStrictAppend(&info.pTags, pNew);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -12405,8 +12390,7 @@ static int32_t buildCreateTSMAReq(STranslateContext* pCxt, SCreateTSMAStmt* pStm
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
if (pReq->intervalUnit == TIME_UNIT_MONTH && (pReq->interval < 1 || pReq->interval > 12))
|
|
|
|
if (pReq->intervalUnit == TIME_UNIT_MONTH && (pReq->interval < 1 || pReq->interval > 12))
|
|
|
|
return TSDB_CODE_TSMA_INVALID_INTERVAL;
|
|
|
|
return TSDB_CODE_TSMA_INVALID_INTERVAL;
|
|
|
|
if (pReq->intervalUnit == TIME_UNIT_YEAR && (pReq->interval != 1))
|
|
|
|
if (pReq->intervalUnit == TIME_UNIT_YEAR && (pReq->interval != 1)) return TSDB_CODE_TSMA_INVALID_INTERVAL;
|
|
|
|
return TSDB_CODE_TSMA_INVALID_INTERVAL;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
STableMeta* pTableMeta = NULL;
|
|
|
|
STableMeta* pTableMeta = NULL;
|
|
|
@ -13337,11 +13321,9 @@ static int32_t addShowUserDatabasesCond(SSelectStmt* pSelect) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
nodesDestroyNode((SNode*)pValNode2);
|
|
|
|
nodesDestroyNode((SNode*)pValNode2);
|
|
|
|
nodesDestroyNode((SNode*)pValNode1);
|
|
|
|
nodesDestroyNode((SNode*)pValNode1);
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = createLogicCondNode(&pNameCond1, &pNameCond2, &pNameCond, LOGIC_COND_TYPE_AND);
|
|
|
|
code = createLogicCondNode(&pNameCond1, &pNameCond2, &pNameCond, LOGIC_COND_TYPE_AND);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = insertCondIntoSelectStmt(pSelect, &pNameCond);
|
|
|
|
code = insertCondIntoSelectStmt(pSelect, &pNameCond);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (TSDB_CODE_SUCCESS != code) {
|
|
|
|
if (TSDB_CODE_SUCCESS != code) {
|
|
|
|
nodesDestroyNode(pNameCond1);
|
|
|
|
nodesDestroyNode(pNameCond1);
|
|
|
@ -13373,8 +13355,7 @@ static int32_t addShowSystemDatabasesCond(SSelectStmt* pSelect) {
|
|
|
|
code = createLogicCondNode(&pNameCond1, &pNameCond2, &pNameCond, LOGIC_COND_TYPE_OR);
|
|
|
|
code = createLogicCondNode(&pNameCond1, &pNameCond2, &pNameCond, LOGIC_COND_TYPE_OR);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = insertCondIntoSelectStmt(pSelect, &pNameCond);
|
|
|
|
code = insertCondIntoSelectStmt(pSelect, &pNameCond);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (TSDB_CODE_SUCCESS != code) {
|
|
|
|
if (TSDB_CODE_SUCCESS != code) {
|
|
|
|
nodesDestroyNode(pNameCond1);
|
|
|
|
nodesDestroyNode(pNameCond1);
|
|
|
@ -13390,8 +13371,7 @@ static int32_t addShowNormalTablesCond(SSelectStmt* pSelect) {
|
|
|
|
SValueNode* pValNode1 = NULL;
|
|
|
|
SValueNode* pValNode1 = NULL;
|
|
|
|
code = nodesMakeValueNodeFromString("NORMAL_TABLE", &pValNode1);
|
|
|
|
code = nodesMakeValueNodeFromString("NORMAL_TABLE", &pValNode1);
|
|
|
|
|
|
|
|
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = createOperatorNode(OP_TYPE_EQUAL, "type", (SNode*)pValNode1, &pTypeCond);
|
|
|
|
code = createOperatorNode(OP_TYPE_EQUAL, "type", (SNode*)pValNode1, &pTypeCond);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nodesDestroyNode((SNode*)pValNode1);
|
|
|
|
nodesDestroyNode((SNode*)pValNode1);
|
|
|
|
|
|
|
|
|
|
|
@ -13406,8 +13386,7 @@ static int32_t addShowChildTablesCond(SSelectStmt* pSelect) {
|
|
|
|
SValueNode* pValNode1 = NULL;
|
|
|
|
SValueNode* pValNode1 = NULL;
|
|
|
|
code = nodesMakeValueNodeFromString("CHILD_TABLE", &pValNode1);
|
|
|
|
code = nodesMakeValueNodeFromString("CHILD_TABLE", &pValNode1);
|
|
|
|
|
|
|
|
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = createOperatorNode(OP_TYPE_EQUAL, "type", (SNode*)pValNode1, &pTypeCond);
|
|
|
|
code = createOperatorNode(OP_TYPE_EQUAL, "type", (SNode*)pValNode1, &pTypeCond);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nodesDestroyNode((SNode*)pValNode1);
|
|
|
|
nodesDestroyNode((SNode*)pValNode1);
|
|
|
|
|
|
|
|
|
|
|
@ -13506,7 +13485,8 @@ static int32_t checkShowTags(STranslateContext* pCxt, const SShowStmt* pShow) {
|
|
|
|
int32_t code = 0;
|
|
|
|
int32_t code = 0;
|
|
|
|
SName name = {0};
|
|
|
|
SName name = {0};
|
|
|
|
STableMeta* pTableMeta = NULL;
|
|
|
|
STableMeta* pTableMeta = NULL;
|
|
|
|
toName(pCxt->pParseCxt->acctId, ((SValueNode*)pShow->pDbName)->literal, ((SValueNode*)pShow->pTbName)->literal, &name);
|
|
|
|
toName(pCxt->pParseCxt->acctId, ((SValueNode*)pShow->pDbName)->literal, ((SValueNode*)pShow->pTbName)->literal,
|
|
|
|
|
|
|
|
&name);
|
|
|
|
code = getTargetMeta(pCxt, &name, &pTableMeta, true);
|
|
|
|
code = getTargetMeta(pCxt, &name, &pTableMeta, true);
|
|
|
|
if (TSDB_CODE_SUCCESS != code) {
|
|
|
|
if (TSDB_CODE_SUCCESS != code) {
|
|
|
|
code = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_GET_META_ERROR, tstrerror(code));
|
|
|
|
code = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_GET_META_ERROR, tstrerror(code));
|
|
|
@ -13670,8 +13650,7 @@ static int32_t rewriteShowTableDist(STranslateContext* pCxt, SQuery* pQuery) {
|
|
|
|
NODES_DESTORY_LIST(pStmt->pProjectionList);
|
|
|
|
NODES_DESTORY_LIST(pStmt->pProjectionList);
|
|
|
|
SFunctionNode* pFuncNew = NULL;
|
|
|
|
SFunctionNode* pFuncNew = NULL;
|
|
|
|
code = createBlockDistFunc(&pFuncNew);
|
|
|
|
code = createBlockDistFunc(&pFuncNew);
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = nodesListMakeStrictAppend(&pStmt->pProjectionList, (SNode*)pFuncNew);
|
|
|
|
code = nodesListMakeStrictAppend(&pStmt->pProjectionList, (SNode*)pFuncNew);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
if (TSDB_CODE_SUCCESS == code) {
|
|
|
|
pCxt->showRewrite = true;
|
|
|
|
pCxt->showRewrite = true;
|
|
|
@ -15623,12 +15602,9 @@ static int32_t rewriteShowAliveStmt(STranslateContext* pCxt, SQuery* pQuery) {
|
|
|
|
SNode* pCond3 = NULL;
|
|
|
|
SNode* pCond3 = NULL;
|
|
|
|
SNode* pCond4 = NULL;
|
|
|
|
SNode* pCond4 = NULL;
|
|
|
|
code = createOperatorNode(OP_TYPE_EQUAL, "v1_status", (SNode*)pValNode, &pCond1);
|
|
|
|
code = createOperatorNode(OP_TYPE_EQUAL, "v1_status", (SNode*)pValNode, &pCond1);
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = createOperatorNode(OP_TYPE_EQUAL, "v2_status", (SNode*)pValNode, &pCond2);
|
|
|
|
code = createOperatorNode(OP_TYPE_EQUAL, "v2_status", (SNode*)pValNode, &pCond2);
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = createOperatorNode(OP_TYPE_EQUAL, "v3_status", (SNode*)pValNode, &pCond3);
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = createOperatorNode(OP_TYPE_EQUAL, "v4_status", (SNode*)pValNode, &pCond4);
|
|
|
|
code = createOperatorNode(OP_TYPE_EQUAL, "v3_status", (SNode*)pValNode, &pCond3);
|
|
|
|
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
|
|
|
|
code = createOperatorNode(OP_TYPE_EQUAL, "v4_status", (SNode*)pValNode, &pCond4);
|
|
|
|
|
|
|
|
nodesDestroyNode((SNode*)pValNode);
|
|
|
|
nodesDestroyNode((SNode*)pValNode);
|
|
|
|
if (TSDB_CODE_SUCCESS != code) {
|
|
|
|
if (TSDB_CODE_SUCCESS != code) {
|
|
|
|
nodesDestroyNode(pCond1);
|
|
|
|
nodesDestroyNode(pCond1);
|
|
|
@ -15643,10 +15619,8 @@ static int32_t rewriteShowAliveStmt(STranslateContext* pCxt, SQuery* pQuery) {
|
|
|
|
SNode* pTemp2 = NULL;
|
|
|
|
SNode* pTemp2 = NULL;
|
|
|
|
SNode* pFullCond = NULL;
|
|
|
|
SNode* pFullCond = NULL;
|
|
|
|
code = createLogicCondNode(&pCond1, &pCond2, &pTemp1, LOGIC_COND_TYPE_OR);
|
|
|
|
code = createLogicCondNode(&pCond1, &pCond2, &pTemp1, LOGIC_COND_TYPE_OR);
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = createLogicCondNode(&pTemp1, &pCond3, &pTemp2, LOGIC_COND_TYPE_OR);
|
|
|
|
code = createLogicCondNode(&pTemp1, &pCond3, &pTemp2, LOGIC_COND_TYPE_OR);
|
|
|
|
if (TSDB_CODE_SUCCESS == code) code = createLogicCondNode(&pTemp2, &pCond4, &pFullCond, LOGIC_COND_TYPE_OR);
|
|
|
|
if (TSDB_CODE_SUCCESS == code)
|
|
|
|
|
|
|
|
code = createLogicCondNode(&pTemp2, &pCond4, &pFullCond, LOGIC_COND_TYPE_OR);
|
|
|
|
|
|
|
|
if (TSDB_CODE_SUCCESS != code) {
|
|
|
|
if (TSDB_CODE_SUCCESS != code) {
|
|
|
|
nodesDestroyNode(pCond1);
|
|
|
|
nodesDestroyNode(pCond1);
|
|
|
|
nodesDestroyNode(pCond2);
|
|
|
|
nodesDestroyNode(pCond2);
|
|
|
@ -15969,8 +15943,8 @@ static int32_t rewriteShowAliveStmt(STranslateContext* pCxt, SQuery* pQuery) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// pSubSelect, pWhenThenlist need to free
|
|
|
|
// pSubSelect, pWhenThenlist need to free
|
|
|
|
|
|
|
|
|
|
|
|
// case when leader_col = count_col and leader_col > 0 then 1 when leader_col < count_col and leader_col > 0 then 2 else
|
|
|
|
// case when leader_col = count_col and leader_col > 0 then 1 when leader_col < count_col and leader_col > 0 then 2
|
|
|
|
// 0 end as status
|
|
|
|
// else 0 end as status
|
|
|
|
pElse = NULL;
|
|
|
|
pElse = NULL;
|
|
|
|
code = nodesMakeValueNodeFromInt32(0, &pElse);
|
|
|
|
code = nodesMakeValueNodeFromInt32(0, &pElse);
|
|
|
|
if (TSDB_CODE_SUCCESS != code) {
|
|
|
|
if (TSDB_CODE_SUCCESS != code) {
|
|
|
|