fxi: alias name is too long

This commit is contained in:
factosea 2025-01-03 10:32:18 +08:00
parent 9a34af9e95
commit 908d69faa3
3 changed files with 33 additions and 4 deletions

View File

@ -55,8 +55,8 @@ typedef struct SDataType {
typedef struct SExprNode { typedef struct SExprNode {
ENodeType type; ENodeType type;
SDataType resType; SDataType resType;
char aliasName[TSDB_COL_NAME_LEN + TSDB_COL_NAME_EXLEN]; char aliasName[TSDB_COL_NAME_LEN];
char userAlias[TSDB_COL_NAME_LEN + TSDB_COL_NAME_EXLEN]; char userAlias[TSDB_COL_NAME_LEN];
SArray* pAssociation; SArray* pAssociation;
bool asAlias; bool asAlias;
bool asParam; bool asParam;

View File

@ -7342,7 +7342,13 @@ static EDealRes pushDownBindSelectFunc(SNode** pNode, void* pContext) {
if (nodesIsExprNode(*pNode)) { if (nodesIsExprNode(*pNode)) {
((SExprNode*)*pNode)->bindTupleFuncIdx = pCxt->bindTupleFuncIdx; ((SExprNode*)*pNode)->bindTupleFuncIdx = pCxt->bindTupleFuncIdx;
int32_t len = strlen(((SExprNode*)*pNode)->aliasName); int32_t len = strlen(((SExprNode*)*pNode)->aliasName);
if (len + TSDB_COL_NAME_EXLEN >= TSDB_COL_NAME_LEN) {
parserWarn("The alias name is too long, the extra part will be truncated");
tsnprintf(((SExprNode*)*pNode)->aliasName + TSDB_COL_NAME_EXLEN - TSDB_COL_NAME_EXLEN, TSDB_COL_NAME_EXLEN, ".%d",
pCxt->bindTupleFuncIdx);
} else {
tsnprintf(((SExprNode*)*pNode)->aliasName + len, TSDB_COL_NAME_EXLEN, ".%d", pCxt->bindTupleFuncIdx); tsnprintf(((SExprNode*)*pNode)->aliasName + len, TSDB_COL_NAME_EXLEN, ".%d", pCxt->bindTupleFuncIdx);
}
SFunctionNode* pFunc = (SFunctionNode*)*pNode; SFunctionNode* pFunc = (SFunctionNode*)*pNode;
} }
return DEAL_RES_CONTINUE; return DEAL_RES_CONTINUE;
@ -7450,7 +7456,7 @@ static EDealRes rewriteSingleColsFunc(SNode** pNode, void* pContext) {
return DEAL_RES_ERROR; return DEAL_RES_ERROR;
} else { } else {
((SExprNode*)pExpr)->asAlias = true; ((SExprNode*)pExpr)->asAlias = true;
tstrncpy(((SExprNode*)pExpr)->userAlias, pFunc->node.userAlias, TSDB_COL_NAME_LEN + TSDB_COL_NAME_EXLEN); tstrncpy(((SExprNode*)pExpr)->userAlias, pFunc->node.userAlias, TSDB_COL_NAME_LEN);
} }
} }
if(*pCxt->selectFuncList == NULL) { if(*pCxt->selectFuncList == NULL) {

View File

@ -180,6 +180,11 @@ class TDTestCase:
tdSql.checkCols(2) tdSql.checkCols(2)
tdSql.checkData(0, 0, 1734574929004) tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4) tdSql.checkData(0, 1, 4)
tdSql.query(f'select cols(last(ts), ts as t123456789t123456789t123456789t123456789t123456789t123456789t123456789, c0 cc) from {from_table}')
tdSql.checkRows(1)
tdSql.checkCols(2)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.query(f'select cols(last(ts), c0, c1, c2, c3) from {from_table}') tdSql.query(f'select cols(last(ts), c0, c1, c2, c3) from {from_table}')
tdSql.checkRows(1) tdSql.checkRows(1)
tdSql.checkCols(4) tdSql.checkCols(4)
@ -362,6 +367,24 @@ class TDTestCase:
tdSql.checkData(0, 2, 1734574929000) tdSql.checkData(0, 2, 1734574929000)
tdSql.checkData(0, 3, 1) tdSql.checkData(0, 3, 1)
tdSql.checkData(0, 4, 5) tdSql.checkData(0, 4, 5)
tdSql.query(f'select cols(max(c0), ts as t123456789t123456789t123456789t123456789t123456789t123456789t123456789, c1 as c11), cols(first(c0), \
ts as t123456789t123456789t123456789t123456789t123456789t123456789t123456789, c1 c21), count(1) from {self.dbname}.meters')
tdSql.checkRows(1)
tdSql.checkCols(5)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 1734574929000)
tdSql.checkData(0, 3, 1)
tdSql.checkData(0, 4, 6)
tdSql.query(f'select cols(max(c0), ts as t123456789t123456789t123456789t123456789t123456789t123456789t123456789, c1 as c11), cols(first(c0), \
ts as t123456789t123456789t123456789t123456789t123456789t123456789t123456789, c1 c21), count(1) from {self.dbname}.meters where c0 < 4')
tdSql.checkRows(1)
tdSql.checkCols(5)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 1, 3)
tdSql.checkData(0, 2, 1734574929000)
tdSql.checkData(0, 3, 1)
tdSql.checkData(0, 4, 5)
tdSql.query(f'select cols(max(c0), ts as t1, c1 as c11), cols(first(c0), ts as t2, c1 c21), count(1) from test.meters where c0 < 4 group by tbname order by t1') tdSql.query(f'select cols(max(c0), ts as t1, c1 as c11), cols(first(c0), ts as t2, c1 c21), count(1) from test.meters where c0 < 4 group by tbname order by t1')
tdSql.checkRows(2) tdSql.checkRows(2)
tdSql.checkCols(5) tdSql.checkCols(5)