Merge pull request #5352 from taosdata/hotfix/TD-3170
[TD-3170]taosd/taos crash when group by tag with type double and value NULL
This commit is contained in:
commit
bc3df41100
|
@ -83,6 +83,20 @@ extern "C" {
|
|||
} \
|
||||
} while (0)
|
||||
|
||||
#define DEFAULT_DOUBLE_COMP(x, y) \
|
||||
do { \
|
||||
if (isnan(x) && isnan(y)) { return 0; } \
|
||||
if (isnan(x)) { return -1; } \
|
||||
if (isnan(y)) { return 1; } \
|
||||
if ((x) == (y)) { \
|
||||
return 0; \
|
||||
} else { \
|
||||
return (x) < (y) ? -1 : 1; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define DEFAULT_FLOAT_COMP(x, y) DEFAULT_DOUBLE_COMP(x, y)
|
||||
|
||||
#define ALIGN_NUM(n, align) (((n) + ((align)-1)) & (~((align)-1)))
|
||||
|
||||
// align to 8bytes
|
||||
|
|
|
@ -362,20 +362,10 @@ static FORCE_INLINE int32_t columnValueAscendingComparator(char *f1, char *f2, i
|
|||
return (first < second) ? -1 : 1;
|
||||
};
|
||||
case TSDB_DATA_TYPE_DOUBLE: {
|
||||
double first = GET_DOUBLE_VAL(f1);
|
||||
double second = GET_DOUBLE_VAL(f2);
|
||||
if (first == second) {
|
||||
return 0;
|
||||
}
|
||||
return (first < second) ? -1 : 1;
|
||||
DEFAULT_DOUBLE_COMP(GET_DOUBLE_VAL(f1), GET_DOUBLE_VAL(f2));
|
||||
};
|
||||
case TSDB_DATA_TYPE_FLOAT: {
|
||||
float first = GET_FLOAT_VAL(f1);
|
||||
float second = GET_FLOAT_VAL(f2);
|
||||
if (first == second) {
|
||||
return 0;
|
||||
}
|
||||
return (first < second) ? -1 : 1;
|
||||
DEFAULT_FLOAT_COMP(GET_FLOAT_VAL(f1), GET_FLOAT_VAL(f2));
|
||||
};
|
||||
case TSDB_DATA_TYPE_BIGINT: {
|
||||
int64_t first = *(int64_t *)f1;
|
||||
|
|
|
@ -392,8 +392,8 @@ __compar_fn_t getKeyComparFunc(int32_t keyType) {
|
|||
int32_t doCompare(const char* f1, const char* f2, int32_t type, size_t size) {
|
||||
switch (type) {
|
||||
case TSDB_DATA_TYPE_INT: DEFAULT_COMP(GET_INT32_VAL(f1), GET_INT32_VAL(f2));
|
||||
case TSDB_DATA_TYPE_DOUBLE: DEFAULT_COMP(GET_DOUBLE_VAL(f1), GET_DOUBLE_VAL(f2));
|
||||
case TSDB_DATA_TYPE_FLOAT: DEFAULT_COMP(GET_FLOAT_VAL(f1), GET_FLOAT_VAL(f2));
|
||||
case TSDB_DATA_TYPE_DOUBLE: DEFAULT_DOUBLE_COMP(GET_DOUBLE_VAL(f1), GET_DOUBLE_VAL(f2));
|
||||
case TSDB_DATA_TYPE_FLOAT: DEFAULT_FLOAT_COMP(GET_FLOAT_VAL(f1), GET_FLOAT_VAL(f2));
|
||||
case TSDB_DATA_TYPE_BIGINT: DEFAULT_COMP(GET_INT64_VAL(f1), GET_INT64_VAL(f2));
|
||||
case TSDB_DATA_TYPE_SMALLINT: DEFAULT_COMP(GET_INT16_VAL(f1), GET_INT16_VAL(f2));
|
||||
case TSDB_DATA_TYPE_TINYINT:
|
||||
|
|
Loading…
Reference in New Issue