opti:case when else data type compatibility

This commit is contained in:
lyh250-666 2024-10-09 17:23:58 +08:00
parent bab99c7897
commit 521da82e14
1 changed files with 11 additions and 7 deletions

View File

@ -3220,22 +3220,26 @@ static bool selectCommonType(SDataType* commonType, const SDataType* newType) {
return true;
}
// type 6
// type 6, float >= float, bool, tinyint, smallint, utinyint, usmallint
if ((commonType->type == TSDB_DATA_TYPE_FLOAT &&
((newType->type >= TSDB_DATA_TYPE_BOOL && newType->type <= TSDB_DATA_TYPE_INT))) ||
((newType->type >= TSDB_DATA_TYPE_BOOL && newType->type < TSDB_DATA_TYPE_INT) ||
newType->type == TSDB_DATA_TYPE_UTINYINT || newType->type == TSDB_DATA_TYPE_USMALLINT))||
(newType->type == TSDB_DATA_TYPE_FLOAT &&
((commonType->type >= TSDB_DATA_TYPE_BOOL && commonType->type <= TSDB_DATA_TYPE_INT)))) {
((commonType->type >= TSDB_DATA_TYPE_BOOL && commonType->type < TSDB_DATA_TYPE_INT) ||
commonType->type == TSDB_DATA_TYPE_UTINYINT || commonType->type == TSDB_DATA_TYPE_USMALLINT))) {
*commonType = (commonType->type == TSDB_DATA_TYPE_FLOAT) ? *commonType : *newType;
return true;
}
//type 7
//type 7, double >= double bool, tinyint, smallint, int, utinyint, usmallint, uint,
if ((commonType->type == TSDB_DATA_TYPE_DOUBLE &&
((newType->type >= TSDB_DATA_TYPE_BOOL && newType->type <= TSDB_DATA_TYPE_BIGINT) ||
newType->type == TSDB_DATA_TYPE_FLOAT ||
((newType->type >= TSDB_DATA_TYPE_BOOL && newType->type < TSDB_DATA_TYPE_BIGINT) ||
newType->type == TSDB_DATA_TYPE_FLOAT ||
(newType->type >= TSDB_DATA_TYPE_UTINYINT && newType->type < TSDB_DATA_TYPE_UBIGINT) ||
newType->type == TSDB_DATA_TYPE_DOUBLE)) ||
(newType->type == TSDB_DATA_TYPE_DOUBLE &&
((commonType->type >= TSDB_DATA_TYPE_BOOL && commonType->type <= TSDB_DATA_TYPE_BIGINT) ||
((commonType->type >= TSDB_DATA_TYPE_BOOL && commonType->type < TSDB_DATA_TYPE_BIGINT) ||
commonType->type == TSDB_DATA_TYPE_FLOAT ||
(commonType->type >= TSDB_DATA_TYPE_UTINYINT && commonType->type < TSDB_DATA_TYPE_UBIGINT) ||
commonType->type == TSDB_DATA_TYPE_DOUBLE))) {
*commonType = (commonType->type == TSDB_DATA_TYPE_DOUBLE) ? *commonType : *newType;
return true;