fix: fix type convertion issue
This commit is contained in:
parent
d18e7cd739
commit
44dcaf2517
|
@ -909,11 +909,11 @@ int32_t vectorConvertImpl(const SScalarParam* pIn, SScalarParam* pOut, int32_t*
|
|||
int8_t gConvertTypes[TSDB_DATA_TYPE_BLOB+1][TSDB_DATA_TYPE_BLOB+1] = {
|
||||
/* NULL BOOL TINY SMAL INT BIG FLOA DOUB VARC TIME NCHA UTIN USMA UINT UBIG JSON VARB DECI BLOB */
|
||||
/*NULL*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/*BOOL*/ 0, 0, 0, 3, 4, 5, 6, 7, 7, 9, 7, 0, 12, 13, 14, 0, 7, 0, 0,
|
||||
/*BOOL*/ 0, 0, 2, 3, 4, 5, 6, 7, 7, 9, 7, 11, 12, 13, 14, 0, 7, 0, 0,
|
||||
/*TINY*/ 0, 0, 0, 3, 4, 5, 6, 7, 7, 9, 7, 3, 4, 5, 7, 0, 7, 0, 0,
|
||||
/*SMAL*/ 0, 0, 0, 0, 4, 5, 6, 7, 7, 9, 7, 3, 4, 5, 7, 0, 7, 0, 0,
|
||||
/*INT */ 0, 0, 0, 0, 0, 5, 6, 7, 7, 9, 7, 4, 4, 5, 7, 0, 7, 0, 0,
|
||||
/*BIGI*/ 0, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 5, 5, 5, 7, 0, 7, 0, 0,
|
||||
/*BIGI*/ 0, 0, 0, 0, 0, 0, 6, 7, 7, 9, 7, 5, 5, 5, 7, 0, 7, 0, 0,
|
||||
/*FLOA*/ 0, 0, 0, 0, 0, 0, 0, 7, 7, 6, 7, 6, 6, 6, 6, 0, 7, 0, 0,
|
||||
/*DOUB*/ 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 0, 0,
|
||||
/*VARC*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 8, 7, 7, 7, 7, 0, 0, 0, 0,
|
||||
|
|
|
@ -570,9 +570,23 @@ int32_t compareFloatInt64(const void *pLeft, const void *pRight) {
|
|||
int32_t compareFloatDouble(const void *pLeft, const void *pRight) {
|
||||
float left = GET_FLOAT_VAL(pLeft);
|
||||
double right = GET_DOUBLE_VAL(pRight);
|
||||
if (left > right) return 1;
|
||||
if (left < right) return -1;
|
||||
return 0;
|
||||
|
||||
if (isnan(left) && isnan(right)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (isnan(left)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (isnan(right)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (FLT_EQUAL(left, right)) {
|
||||
return 0;
|
||||
}
|
||||
return FLT_GREATER(left, right) ? 1 : -1;
|
||||
}
|
||||
|
||||
int32_t compareFloatUint8(const void *pLeft, const void *pRight) {
|
||||
|
@ -642,9 +656,23 @@ int32_t compareDoubleInt64(const void *pLeft, const void *pRight) {
|
|||
int32_t compareDoubleFloat(const void *pLeft, const void *pRight) {
|
||||
double left = GET_DOUBLE_VAL(pLeft);
|
||||
float right = GET_FLOAT_VAL(pRight);
|
||||
if (left > right) return 1;
|
||||
if (left < right) return -1;
|
||||
return 0;
|
||||
|
||||
if (isnan(left) && isnan(right)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (isnan(left)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (isnan(right)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (FLT_EQUAL(left, right)) {
|
||||
return 0;
|
||||
}
|
||||
return FLT_GREATER(left, right) ? 1 : -1;
|
||||
}
|
||||
|
||||
int32_t compareDoubleUint8(const void *pLeft, const void *pRight) {
|
||||
|
|
Loading…
Reference in New Issue