TD-1530
This commit is contained in:
parent
05687d1eba
commit
283d144d1c
|
@ -235,15 +235,10 @@ static void getStatics_f(const TSKEY *primaryKey, const void *pData, int32_t num
|
||||||
double csum = 0;
|
double csum = 0;
|
||||||
csum = GET_DOUBLE_VAL(sum);
|
csum = GET_DOUBLE_VAL(sum);
|
||||||
csum += dsum;
|
csum += dsum;
|
||||||
#ifdef _TD_ARM_32
|
|
||||||
SET_DOUBLE_VAL_ALIGN(sum, &csum);
|
SET_DOUBLE_VAL(sum, csum);
|
||||||
SET_DOUBLE_VAL_ALIGN(max, &fmax);
|
SET_DOUBLE_VAL(max, fmax);
|
||||||
SET_DOUBLE_VAL_ALIGN(min, &fmin);
|
SET_DOUBLE_VAL(min, fmin);
|
||||||
#else
|
|
||||||
*(double*)sum = csum;
|
|
||||||
*(double*)max = fmax;
|
|
||||||
*(double*)min = fmin;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void getStatics_d(const TSKEY *primaryKey, const void *pData, int32_t numOfRow, int64_t *min, int64_t *max,
|
static void getStatics_d(const TSKEY *primaryKey, const void *pData, int32_t numOfRow, int64_t *min, int64_t *max,
|
||||||
|
@ -281,16 +276,9 @@ static void getStatics_d(const TSKEY *primaryKey, const void *pData, int32_t num
|
||||||
csum = GET_DOUBLE_VAL(sum);
|
csum = GET_DOUBLE_VAL(sum);
|
||||||
csum += dsum;
|
csum += dsum;
|
||||||
|
|
||||||
|
SET_DOUBLE_PTR(sum, &csum);
|
||||||
#ifdef _TD_ARM_32
|
SET_DOUBLE_PTR(max, &dmax);
|
||||||
SET_DOUBLE_VAL_ALIGN(sum, &csum);
|
SET_DOUBLE_PTR(min, &dmin);
|
||||||
SET_DOUBLE_VAL_ALIGN(max, &dmax);
|
|
||||||
SET_DOUBLE_VAL_ALIGN(min, &dmin);
|
|
||||||
#else
|
|
||||||
*(double*) sum = csum;
|
|
||||||
*(double*) max = dmax;
|
|
||||||
*(double*) min = dmin;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void getStatics_bin(const TSKEY *primaryKey, const void *pData, int32_t numOfRow, int64_t *min, int64_t *max,
|
static void getStatics_bin(const TSKEY *primaryKey, const void *pData, int32_t numOfRow, int64_t *min, int64_t *max,
|
||||||
|
@ -493,46 +481,29 @@ void assignVal(char *val, const char *src, int32_t len, int32_t type) {
|
||||||
*((int32_t *)val) = GET_INT32_VAL(src);
|
*((int32_t *)val) = GET_INT32_VAL(src);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TSDB_DATA_TYPE_FLOAT: {
|
case TSDB_DATA_TYPE_FLOAT:
|
||||||
#ifdef _TD_ARM_32
|
SET_FLOAT_VAL(val, GET_FLOAT_VAL(src));
|
||||||
float fv = GET_FLOAT_VAL(src);
|
|
||||||
SET_FLOAT_VAL_ALIGN(val, &fv);
|
|
||||||
#else
|
|
||||||
*((float *)val) = GET_FLOAT_VAL(src);
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
};
|
case TSDB_DATA_TYPE_DOUBLE:
|
||||||
case TSDB_DATA_TYPE_DOUBLE: {
|
SET_DOUBLE_VAL(val, GET_DOUBLE_VAL(src));
|
||||||
#ifdef _TD_ARM_32
|
|
||||||
double dv = GET_DOUBLE_VAL(src);
|
|
||||||
SET_DOUBLE_VAL_ALIGN(val, &dv);
|
|
||||||
#else
|
|
||||||
*((double *)val) = GET_DOUBLE_VAL(src);
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
};
|
|
||||||
case TSDB_DATA_TYPE_TIMESTAMP:
|
case TSDB_DATA_TYPE_TIMESTAMP:
|
||||||
case TSDB_DATA_TYPE_BIGINT: {
|
case TSDB_DATA_TYPE_BIGINT:
|
||||||
*((int64_t *)val) = GET_INT64_VAL(src);
|
*((int64_t *)val) = GET_INT64_VAL(src);
|
||||||
break;
|
break;
|
||||||
};
|
case TSDB_DATA_TYPE_SMALLINT:
|
||||||
case TSDB_DATA_TYPE_SMALLINT: {
|
|
||||||
*((int16_t *)val) = GET_INT16_VAL(src);
|
*((int16_t *)val) = GET_INT16_VAL(src);
|
||||||
break;
|
break;
|
||||||
};
|
|
||||||
case TSDB_DATA_TYPE_BOOL:
|
case TSDB_DATA_TYPE_BOOL:
|
||||||
case TSDB_DATA_TYPE_TINYINT: {
|
case TSDB_DATA_TYPE_TINYINT:
|
||||||
*((int8_t *)val) = GET_INT8_VAL(src);
|
*((int8_t *)val) = GET_INT8_VAL(src);
|
||||||
break;
|
break;
|
||||||
};
|
case TSDB_DATA_TYPE_BINARY:
|
||||||
case TSDB_DATA_TYPE_BINARY: {
|
|
||||||
varDataCopy(val, src);
|
varDataCopy(val, src);
|
||||||
break;
|
break;
|
||||||
};
|
case TSDB_DATA_TYPE_NCHAR:
|
||||||
case TSDB_DATA_TYPE_NCHAR: {
|
|
||||||
varDataCopy(val, src);
|
varDataCopy(val, src);
|
||||||
break;
|
break;
|
||||||
};
|
|
||||||
default: {
|
default: {
|
||||||
memcpy(val, src, len);
|
memcpy(val, src, len);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -709,46 +709,21 @@ int32_t tVariantDump(tVariant *pVariant, char *payload, int16_t type, bool inclu
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _TD_ARM_32
|
SET_FLOAT_VAL(payload, value);
|
||||||
//memcpy(&payload, &value, sizeof(float));
|
|
||||||
float fv = (float)value;
|
|
||||||
SET_FLOAT_VAL_ALIGN(payload, &fv);
|
|
||||||
#else
|
|
||||||
*((float *)payload) = (float)value;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
} else if (pVariant->nType >= TSDB_DATA_TYPE_BOOL && pVariant->nType <= TSDB_DATA_TYPE_BIGINT) {
|
} else if (pVariant->nType >= TSDB_DATA_TYPE_BOOL && pVariant->nType <= TSDB_DATA_TYPE_BIGINT) {
|
||||||
#ifdef _TD_ARM_32
|
SET_FLOAT_VAL(payload, pVariant->i64Key);
|
||||||
//memcpy(&payload, &pVariant->i64Key, sizeof(float));
|
|
||||||
float fv = (float)pVariant->i64Key;
|
|
||||||
SET_FLOAT_VAL_ALIGN(payload, &fv);
|
|
||||||
#else
|
|
||||||
*((float *)payload) = (float)pVariant->i64Key;
|
|
||||||
#endif
|
|
||||||
} else if (pVariant->nType == TSDB_DATA_TYPE_DOUBLE || pVariant->nType == TSDB_DATA_TYPE_FLOAT) {
|
} else if (pVariant->nType == TSDB_DATA_TYPE_DOUBLE || pVariant->nType == TSDB_DATA_TYPE_FLOAT) {
|
||||||
#ifdef _TD_ARM_32
|
SET_FLOAT_VAL(payload, pVariant->dKey);
|
||||||
//memcpy(&payload, &pVariant->dKey, sizeof(float));
|
|
||||||
float fv = (float)pVariant->dKey;
|
|
||||||
SET_FLOAT_VAL_ALIGN(payload, &fv);
|
|
||||||
#else
|
|
||||||
*((float *)payload) = (float)pVariant->dKey;
|
|
||||||
#endif
|
|
||||||
} else if (pVariant->nType == TSDB_DATA_TYPE_NULL) {
|
} else if (pVariant->nType == TSDB_DATA_TYPE_NULL) {
|
||||||
*((int32_t *)payload) = TSDB_DATA_FLOAT_NULL;
|
*((int32_t *)payload) = TSDB_DATA_FLOAT_NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _TD_ARM_32
|
|
||||||
float fv = GET_FLOAT_VAL(payload);
|
float fv = GET_FLOAT_VAL(payload);
|
||||||
if (isinf(fv) || isnan(fv) || fv > FLT_MAX || fv < -FLT_MAX) {
|
if (isinf(fv) || isnan(fv) || fv > FLT_MAX || fv < -FLT_MAX) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
if (isinf(*((float *)payload)) || isnan(*((float *)payload)) || *((float *)payload) > FLT_MAX ||
|
|
||||||
*((float *)payload) < -FLT_MAX) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TSDB_DATA_TYPE_DOUBLE: {
|
case TSDB_DATA_TYPE_DOUBLE: {
|
||||||
|
@ -765,42 +740,21 @@ int32_t tVariantDump(tVariant *pVariant, char *payload, int16_t type, bool inclu
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _TD_ARM_32
|
SET_DOUBLE_VAL(payload, value);
|
||||||
SET_DOUBLE_VAL_ALIGN(payload, &value);
|
|
||||||
#else
|
|
||||||
*((double *)payload) = value;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
} else if (pVariant->nType >= TSDB_DATA_TYPE_BOOL && pVariant->nType <= TSDB_DATA_TYPE_BIGINT) {
|
} else if (pVariant->nType >= TSDB_DATA_TYPE_BOOL && pVariant->nType <= TSDB_DATA_TYPE_BIGINT) {
|
||||||
#ifdef _TD_ARM_32
|
SET_DOUBLE_VAL(payload, pVariant->i64Key);
|
||||||
double dv = (double)(pVariant->i64Key);
|
|
||||||
SET_DOUBLE_VAL_ALIGN(payload, &dv);
|
|
||||||
#else
|
|
||||||
*((double *)payload) = (double)pVariant->i64Key;
|
|
||||||
#endif
|
|
||||||
} else if (pVariant->nType == TSDB_DATA_TYPE_DOUBLE || pVariant->nType == TSDB_DATA_TYPE_FLOAT) {
|
} else if (pVariant->nType == TSDB_DATA_TYPE_DOUBLE || pVariant->nType == TSDB_DATA_TYPE_FLOAT) {
|
||||||
#ifdef _TD_ARM_32
|
SET_DOUBLE_VAL(payload, pVariant->dKey);
|
||||||
double dv = (double)(pVariant->dKey);
|
|
||||||
SET_DOUBLE_VAL_ALIGN(payload, &dv);
|
|
||||||
#else
|
|
||||||
*((double *)payload) = pVariant->dKey;
|
|
||||||
#endif
|
|
||||||
} else if (pVariant->nType == TSDB_DATA_TYPE_NULL) {
|
} else if (pVariant->nType == TSDB_DATA_TYPE_NULL) {
|
||||||
*((int64_t *)payload) = TSDB_DATA_DOUBLE_NULL;
|
*((int64_t *)payload) = TSDB_DATA_DOUBLE_NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _TD_ARM_32
|
|
||||||
double dv = GET_DOUBLE_VAL(payload);
|
double dv = GET_DOUBLE_VAL(payload);
|
||||||
if (isinf(dv) || isnan(dv) || dv > DBL_MAX || dv < -DBL_MAX) {
|
if (isinf(dv) || isnan(dv) || dv > DBL_MAX || dv < -DBL_MAX) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
if (isinf(*((double *)payload)) || isnan(*((double *)payload)) || *((double *)payload) > DBL_MAX ||
|
|
||||||
*((double *)payload) < -DBL_MAX) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -132,21 +132,30 @@ do { \
|
||||||
#define GET_INT32_VAL(x) (*(int32_t *)(x))
|
#define GET_INT32_VAL(x) (*(int32_t *)(x))
|
||||||
#define GET_INT64_VAL(x) (*(int64_t *)(x))
|
#define GET_INT64_VAL(x) (*(int64_t *)(x))
|
||||||
#ifdef _TD_ARM_32
|
#ifdef _TD_ARM_32
|
||||||
#define GET_FLOAT_VAL(x) taos_align_get_float(x)
|
|
||||||
#define GET_DOUBLE_VAL(x) taos_align_get_double(x)
|
|
||||||
|
|
||||||
float taos_align_get_float(const char* pBuf);
|
|
||||||
double taos_align_get_double(const char* pBuf);
|
|
||||||
|
|
||||||
//#define __float_align_declear() float __underlyFloat = 0.0;
|
//#define __float_align_declear() float __underlyFloat = 0.0;
|
||||||
//#define __float_align_declear()
|
//#define __float_align_declear()
|
||||||
//#define GET_FLOAT_VAL_ALIGN(x) (*(int32_t*)&(__underlyFloat) = *(int32_t*)(x); __underlyFloat);
|
//#define GET_FLOAT_VAL_ALIGN(x) (*(int32_t*)&(__underlyFloat) = *(int32_t*)(x); __underlyFloat);
|
||||||
// notes: src must be float or double type variable !!!
|
// notes: src must be float or double type variable !!!
|
||||||
#define SET_FLOAT_VAL_ALIGN(dst, src) (*(int32_t*) dst = *(int32_t*)src);
|
//#define SET_FLOAT_VAL_ALIGN(dst, src) (*(int32_t*) dst = *(int32_t*)src);
|
||||||
#define SET_DOUBLE_VAL_ALIGN(dst, src) (*(int64_t*) dst = *(int64_t*)src);
|
//#define SET_DOUBLE_VAL_ALIGN(dst, src) (*(int64_t*) dst = *(int64_t*)src);
|
||||||
|
|
||||||
|
float taos_align_get_float(const char* pBuf);
|
||||||
|
double taos_align_get_double(const char* pBuf);
|
||||||
|
|
||||||
|
#define GET_FLOAT_VAL(x) taos_align_get_float(x)
|
||||||
|
#define GET_DOUBLE_VAL(x) taos_align_get_double(x)
|
||||||
|
#define SET_FLOAT_VAL(x, y) { float z = (float)(y); (*(int32_t*) x = *(int32_t*)z); }
|
||||||
|
#define SET_DOUBLE_VAL(x, y) { double z = (double)(y); (*(int64_t*) x = *(int64_t*)z); }
|
||||||
|
#define SET_FLOAT_PTR(x, y) { (*(int32_t*) x = *(int32_t*)y); }
|
||||||
|
#define SET_DOUBLE_PTR(x, y) { (*(int64_t*) x = *(int64_t*)y); }
|
||||||
#else
|
#else
|
||||||
#define GET_FLOAT_VAL(x) (*(float *)(x))
|
#define GET_FLOAT_VAL(x) (*(float *)(x))
|
||||||
#define GET_DOUBLE_VAL(x) (*(double *)(x))
|
#define GET_DOUBLE_VAL(x) (*(double *)(x))
|
||||||
|
#define SET_FLOAT_VAL(x, y) { (*(float *)(x)) = (float)(y); }
|
||||||
|
#define SET_DOUBLE_VAL(x, y) { (*(double *)(x)) = (double)(y); }
|
||||||
|
#define SET_FLOAT_PTR(x, y) { (*(float *)(x)) = (*(float *)(y)); }
|
||||||
|
#define SET_DOUBLE_PTR(x, y) { (*(double *)(x)) = (*(double *)(y)); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct tDataTypeDescriptor {
|
typedef struct tDataTypeDescriptor {
|
||||||
|
|
|
@ -750,25 +750,11 @@ bool simExecuteNativeSqlCommand(SScript *script, char *rest, bool isSlow) {
|
||||||
case TSDB_DATA_TYPE_BIGINT:
|
case TSDB_DATA_TYPE_BIGINT:
|
||||||
sprintf(value, "%" PRId64, *((int64_t *)row[i]));
|
sprintf(value, "%" PRId64, *((int64_t *)row[i]));
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_FLOAT:{
|
case TSDB_DATA_TYPE_FLOAT:
|
||||||
#ifdef _TD_ARM_32
|
sprintf(value, "%.5f", GET_FLOAT_VAL(row[i]));
|
||||||
float fv = 0;
|
|
||||||
*(int32_t*)(&fv) = *(int32_t*)row[i];
|
|
||||||
sprintf(value, "%.5f", fv);
|
|
||||||
#else
|
|
||||||
sprintf(value, "%.5f", *((float *)row[i]));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_DOUBLE: {
|
case TSDB_DATA_TYPE_DOUBLE:
|
||||||
#ifdef _TD_ARM_32
|
sprintf(value, "%.9lf", GET_DOUBLE_VAL(row[i]));
|
||||||
double dv = 0;
|
|
||||||
*(int64_t*)(&dv) = *(int64_t*)row[i];
|
|
||||||
sprintf(value, "%.9lf", dv);
|
|
||||||
#else
|
|
||||||
sprintf(value, "%.9lf", *((double *)row[i]));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_BINARY:
|
case TSDB_DATA_TYPE_BINARY:
|
||||||
case TSDB_DATA_TYPE_NCHAR:
|
case TSDB_DATA_TYPE_NCHAR:
|
||||||
|
|
Loading…
Reference in New Issue