enhance: tbname col to func

This commit is contained in:
shenglian zhou 2023-11-21 13:53:10 +08:00
parent 4f5359f684
commit 83c1db07a3
2 changed files with 26 additions and 1 deletions

View File

@ -46,6 +46,8 @@ typedef struct STranslateContext {
SNode* pPostRoot;
} STranslateContext;
EDealRes biRewriteToTbnameFuncAndTranslate(STranslateContext* pCxt, SColumnNode** ppCol);
EDealRes translateFunction(STranslateContext* pCxt, SFunctionNode** pFunc);
int32_t biRewriteSelectStar(STranslateContext* pCxt, SSelectStmt* pSelect);
int32_t findTable(STranslateContext* pCxt, const char* pTableAlias, STableNode** pOutput);
int32_t getTargetMetaImpl(SParseContext* pParCxt, SParseMetaCache* pMetaCache, const SName* pName, STableMeta** pMeta, bool couldBeView);

View File

@ -1091,6 +1091,22 @@ static EDealRes translateColumnUseAlias(STranslateContext* pCxt, SColumnNode** p
return DEAL_RES_CONTINUE;
}
#ifndef TD_ENTERPRISE
EDealRes biRewriteToTbnameFuncAndTranslate(STranslateContext* pCxt, SColumnNode** ppCol) {
SFunctionNode* tbnameFuncNode = NULL;
// tbnameFuncNode = biMakeTbnameProjectAstNode(NULL, ((*ppCol)->tableAlias[0]!='\0') ? (*ppCol)->tableAlias : NULL);
tbnameFuncNode->node.resType = (*ppCol)->node.resType;
strcpy(tbnameFuncNode->node.aliasName, (*ppCol)->node.aliasName);
strcpy(tbnameFuncNode->node.userAlias, (*ppCol)->node.userAlias);
nodesDestroyNode(*(SNode**)ppCol);
*(SNode**)ppCol = (SNode*)tbnameFuncNode;
EDealRes res = translateFunction(pCxt, &tbnameFuncNode);
return res;
}
#endif
static EDealRes translateColumn(STranslateContext* pCxt, SColumnNode** pCol) {
if (NULL == pCxt->pCurrStmt ||
(isSelectStmt(pCxt->pCurrStmt) && NULL == ((SSelectStmt*)pCxt->pCurrStmt)->pFromTable)) {
@ -1102,6 +1118,13 @@ static EDealRes translateColumn(STranslateContext* pCxt, SColumnNode** pCol) {
return DEAL_RES_CONTINUE;
}
if (pCxt->pParseCxt->biMode && (strcasecmp((*pCol)->colName, "tbname") == 0) &&
((SSelectStmt*)pCxt->pCurrStmt)->pFromTable &&
QUERY_NODE_REAL_TABLE == nodeType(((SSelectStmt*)pCxt->pCurrStmt)->pFromTable)) {
EDealRes res = biRewriteToTbnameFuncAndTranslate(pCxt, pCol);
return res;
}
EDealRes res = DEAL_RES_CONTINUE;
if ('\0' != (*pCol)->tableAlias[0]) {
res = translateColumnWithPrefix(pCxt, pCol);
@ -2204,7 +2227,7 @@ static int32_t translateFunctionImpl(STranslateContext* pCxt, SFunctionNode** pF
return translateNormalFunction(pCxt, (SNode**)pFunc);
}
static EDealRes translateFunction(STranslateContext* pCxt, SFunctionNode** pFunc) {
EDealRes translateFunction(STranslateContext* pCxt, SFunctionNode** pFunc) {
SNode* pParam = NULL;
FOREACH(pParam, (*pFunc)->pParameterList) {
if (isMultiResFunc(pParam)) {