Merge pull request #23354 from taosdata/fix/3.0/TD-26779

fix: union all cast func resType check error
This commit is contained in:
dapan1121 2023-10-24 16:11:50 +08:00 committed by GitHub
commit 9bf8be1ab4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 14 additions and 3 deletions

View File

@ -1412,6 +1412,10 @@ SNode* createColumnDefNode(SAstCreateContext* pCxt, SToken* pColName, SDataType
if (!checkColumnName(pCxt, pColName) || !checkComment(pCxt, pComment, false)) { if (!checkColumnName(pCxt, pColName) || !checkComment(pCxt, pComment, false)) {
return NULL; return NULL;
} }
if (IS_VAR_DATA_TYPE(dataType.type) && dataType.bytes == 0) {
pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN);
return NULL;
}
SColumnDefNode* pCol = (SColumnDefNode*)nodesMakeNode(QUERY_NODE_COLUMN_DEF); SColumnDefNode* pCol = (SColumnDefNode*)nodesMakeNode(QUERY_NODE_COLUMN_DEF);
CHECK_OUT_OF_MEM(pCol); CHECK_OUT_OF_MEM(pCol);
COPY_STRING_FORM_ID_TOKEN(pCol->colName, pColName); COPY_STRING_FORM_ID_TOKEN(pCol->colName, pColName);

View File

@ -2185,11 +2185,12 @@ static int32_t createCastFunc(STranslateContext* pCxt, SNode* pExpr, SDataType d
nodesDestroyNode((SNode*)pFunc); nodesDestroyNode((SNode*)pFunc);
return TSDB_CODE_OUT_OF_MEMORY; return TSDB_CODE_OUT_OF_MEMORY;
} }
if (TSDB_CODE_SUCCESS != getFuncInfo(pCxt, pFunc)) { int32_t code = getFuncInfo(pCxt, pFunc);
if (TSDB_CODE_SUCCESS != code) {
nodesClearList(pFunc->pParameterList); nodesClearList(pFunc->pParameterList);
pFunc->pParameterList = NULL; pFunc->pParameterList = NULL;
nodesDestroyNode((SNode*)pFunc); nodesDestroyNode((SNode*)pFunc);
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_WRONG_VALUE_TYPE, ((SExprNode*)pExpr)->aliasName); return code;
} }
*pCast = (SNode*)pFunc; *pCast = (SNode*)pFunc;
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;

View File

@ -126,7 +126,7 @@ static char* getSyntaxErrFormat(int32_t errCode) {
case TSDB_CODE_PAR_INVALID_FIRST_COLUMN: case TSDB_CODE_PAR_INVALID_FIRST_COLUMN:
return "First column must be timestamp"; return "First column must be timestamp";
case TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN: case TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN:
return "Invalid binary/nchar column length"; return "Invalid column length for var length type";
case TSDB_CODE_PAR_INVALID_TAGS_NUM: case TSDB_CODE_PAR_INVALID_TAGS_NUM:
return "Invalid number of tag columns"; return "Invalid number of tag columns";
case TSDB_CODE_PAR_INVALID_INTERNAL_PK: case TSDB_CODE_PAR_INVALID_INTERNAL_PK:

View File

@ -76,6 +76,12 @@ class TDTestCase:
for i in range(tdSql.queryRows): for i in range(tdSql.queryRows):
tdSql.checkData(i,0, data_ct1_c8[i]) tdSql.checkData(i,0, data_ct1_c8[i])
tdSql.error("create stable empty_col_stable(ts timestamp, c2 varchar(0)) tags(tg1 int)")
tdSql.error("create stable empty_col_stable(ts timestamp, c2 varchar(10)) tags(tg1 varchar(0))")
tdSql.error("create stable empty_col_stable(ts timestamp, c2 varchar(10)) tags(tg1 nchar(0))")
tdSql.error("create stable empty_col_stable(ts timestamp, c2 varchar(10)) tags(tg1 binary(0))")
tdSql.error("create stable empty_col_stable(ts timestamp, c2 varchar(10)) tags(tg1 varbinary(0))")
# tdSql.query("select c8 from ct4") # tdSql.query("select c8 from ct4")
# data_ct4 = [tdSql.getData(i,0) for i in range(tdSql.queryRows)] # data_ct4 = [tdSql.getData(i,0) for i in range(tdSql.queryRows)]