refactor GET_TYPED_DATA interface
This commit is contained in:
parent
83f7efd649
commit
045f5b8c64
|
@ -430,6 +430,14 @@ static inline bool isTsmaResSTb(const char* stbName) {
|
|||
return false;
|
||||
}
|
||||
|
||||
static inline STypeMod typeGetTypeModFromColInfo(const SColumnInfo* pCol) {
|
||||
return typeGetTypeMod(pCol->type, pCol->precision, pCol->scale, pCol->bytes);
|
||||
}
|
||||
|
||||
static inline STypeMod typeGetTypeModFromCol(const SColumn* pCol) {
|
||||
return typeGetTypeMod(pCol->type, pCol->precision, pCol->scale, pCol->bytes);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -45,6 +45,9 @@ typedef struct {
|
|||
} SNCharNullT;
|
||||
#pragma pack(pop)
|
||||
|
||||
#define STypeMod int32_t
|
||||
void extractTypeFromTypeMod(uint8_t type, STypeMod typeMod, uint8_t *prec, uint8_t* scale, int32_t *bytes);
|
||||
|
||||
#define varDataTLen(v) (sizeof(VarDataLenT) + varDataLen(v))
|
||||
#define varDataCopy(dst, v) (void)memcpy((dst), (void *)(v), varDataTLen(v))
|
||||
#define varDataLenByData(v) (*(VarDataLenT *)(((char *)(v)) - VARSTR_HEADER_SIZE))
|
||||
|
@ -72,51 +75,55 @@ typedef struct {
|
|||
DEFINE_TYPE_FROM_DECIMAL_FUNCS(extern, Decimal64);
|
||||
DEFINE_TYPE_FROM_DECIMAL_FUNCS(extern, Decimal128);
|
||||
|
||||
#define GET_TYPED_DATA(_v, _finalType, _type, _data) \
|
||||
do { \
|
||||
switch (_type) { \
|
||||
case TSDB_DATA_TYPE_BOOL: \
|
||||
case TSDB_DATA_TYPE_TINYINT: \
|
||||
(_v) = (_finalType)GET_INT8_VAL(_data); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_UTINYINT: \
|
||||
(_v) = (_finalType)GET_UINT8_VAL(_data); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_SMALLINT: \
|
||||
(_v) = (_finalType)GET_INT16_VAL(_data); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_USMALLINT: \
|
||||
(_v) = (_finalType)GET_UINT16_VAL(_data); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_TIMESTAMP: \
|
||||
case TSDB_DATA_TYPE_BIGINT: \
|
||||
(_v) = (_finalType)(GET_INT64_VAL(_data)); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_UBIGINT: \
|
||||
(_v) = (_finalType)(GET_UINT64_VAL(_data)); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_FLOAT: \
|
||||
(_v) = (_finalType)GET_FLOAT_VAL(_data); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_DOUBLE: \
|
||||
(_v) = (_finalType)GET_DOUBLE_VAL(_data); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_UINT: \
|
||||
(_v) = (_finalType)GET_UINT32_VAL(_data); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_INT: \
|
||||
(_v) = (_finalType)GET_INT32_VAL(_data); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_DECIMAL: \
|
||||
(_v) = _finalType##FromDecimal128(_data, 10, 0); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_DECIMAL64: \
|
||||
(_v) = _finalType##FromDecimal64(_data, 10, 0); \
|
||||
break; \
|
||||
default: \
|
||||
(_v) = (_finalType)varDataLen(_data); \
|
||||
break; \
|
||||
} \
|
||||
#define GET_TYPED_DATA(_v, _finalType, _type, _data, inputTypeMod) \
|
||||
do { \
|
||||
switch (_type) { \
|
||||
case TSDB_DATA_TYPE_BOOL: \
|
||||
case TSDB_DATA_TYPE_TINYINT: \
|
||||
(_v) = (_finalType)GET_INT8_VAL(_data); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_UTINYINT: \
|
||||
(_v) = (_finalType)GET_UINT8_VAL(_data); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_SMALLINT: \
|
||||
(_v) = (_finalType)GET_INT16_VAL(_data); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_USMALLINT: \
|
||||
(_v) = (_finalType)GET_UINT16_VAL(_data); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_TIMESTAMP: \
|
||||
case TSDB_DATA_TYPE_BIGINT: \
|
||||
(_v) = (_finalType)(GET_INT64_VAL(_data)); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_UBIGINT: \
|
||||
(_v) = (_finalType)(GET_UINT64_VAL(_data)); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_FLOAT: \
|
||||
(_v) = (_finalType)GET_FLOAT_VAL(_data); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_DOUBLE: \
|
||||
(_v) = (_finalType)GET_DOUBLE_VAL(_data); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_UINT: \
|
||||
(_v) = (_finalType)GET_UINT32_VAL(_data); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_INT: \
|
||||
(_v) = (_finalType)GET_INT32_VAL(_data); \
|
||||
break; \
|
||||
case TSDB_DATA_TYPE_DECIMAL: { \
|
||||
uint8_t prec = 0, scale = 0; \
|
||||
extractTypeFromTypeMod(_type, inputTypeMod, &prec, &scale, NULL); \
|
||||
(_v) = _finalType##FromDecimal128(_data, prec, scale); \
|
||||
} break; \
|
||||
case TSDB_DATA_TYPE_DECIMAL64: { \
|
||||
uint8_t prec = 0, scale = 0; \
|
||||
extractTypeFromTypeMod(_type, inputTypeMod, &prec, &scale, NULL); \
|
||||
(_v) = _finalType##FromDecimal64(_data, prec, scale); \
|
||||
} break; \
|
||||
default: \
|
||||
(_v) = (_finalType)varDataLen(_data); \
|
||||
break; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define SET_TYPED_DATA(_v, _type, _data) \
|
||||
|
@ -404,9 +411,7 @@ void assignVal(char *val, const char *src, int32_t len, int32_t type);
|
|||
void *getDataMin(int32_t type, void *value);
|
||||
void *getDataMax(int32_t type, void *value);
|
||||
|
||||
#define STypeMod int32_t
|
||||
STypeMod typeGetTypeMod(uint8_t type, uint8_t prec, uint8_t scale, int32_t bytes);
|
||||
void extractTypeFromTypeMod(uint8_t type, STypeMod typeMod, uint8_t *prec, uint8_t scale, int32_t *bytes);
|
||||
uint8_t decimalTypeFromPrecision(uint8_t precision);
|
||||
STypeMod decimalCalcTypeMod(uint8_t prec, uint8_t scale);
|
||||
void decimalFromTypeMod(STypeMod typeMod, uint8_t *precision, uint8_t *scale);
|
||||
|
|
|
@ -315,7 +315,7 @@ typedef struct SPoint {
|
|||
} SPoint;
|
||||
|
||||
void taosGetLinearInterpolationVal(SPoint *point, int32_t outputType, SPoint *point1, SPoint *point2,
|
||||
int32_t inputType);
|
||||
int32_t inputType, STypeMod inputTypeMod);
|
||||
|
||||
#define LEASTSQUARES_DOUBLE_ITEM_LENGTH 25
|
||||
#define LEASTSQUARES_BUFF_LENGTH 128
|
||||
|
|
|
@ -516,7 +516,7 @@ static void buildChildElement(cJSON* json, SVCreateTbReq* pCreateReq) {
|
|||
RAW_NULL_CHECK(tvalue);
|
||||
} else {
|
||||
double val = 0;
|
||||
GET_TYPED_DATA(val, double, pTagVal->type, &pTagVal->i64);
|
||||
GET_TYPED_DATA(val, double, pTagVal->type, &pTagVal->i64, 0); // currently tag type can't be decimal, so pass 0 as typeMod
|
||||
tvalue = cJSON_CreateNumber(val);
|
||||
RAW_NULL_CHECK(tvalue);
|
||||
}
|
||||
|
@ -2714,4 +2714,4 @@ static int32_t tmqWriteBatchMetaDataImpl(TAOS* taos, void* meta, uint32_t metaLe
|
|||
end:
|
||||
tDeleteMqBatchMetaRsp(&rsp);
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -728,9 +728,9 @@ int32_t blockDataUpdatePkRange(SSDataBlock* pDataBlock, int32_t pkColumnIndex, b
|
|||
int64_t val = 0;
|
||||
if (asc) {
|
||||
if (IS_NUMERIC_TYPE(pColInfoData->info.type)) {
|
||||
GET_TYPED_DATA(val, int64_t, pColInfoData->info.type, skey);
|
||||
GET_TYPED_DATA(val, int64_t, pColInfoData->info.type, skey, typeGetTypeModFromColInfo(&pColInfoData->info));
|
||||
VALUE_SET_TRIVIAL_DATUM(&pInfo->pks[0], val);
|
||||
GET_TYPED_DATA(val, int64_t, pColInfoData->info.type, ekey);
|
||||
GET_TYPED_DATA(val, int64_t, pColInfoData->info.type, ekey, typeGetTypeModFromColInfo(&pColInfoData->info));
|
||||
VALUE_SET_TRIVIAL_DATUM(&pInfo->pks[1], val);
|
||||
} else { // todo refactor
|
||||
memcpy(pInfo->pks[0].pData, varDataVal(skey), varDataLen(skey));
|
||||
|
@ -741,9 +741,9 @@ int32_t blockDataUpdatePkRange(SSDataBlock* pDataBlock, int32_t pkColumnIndex, b
|
|||
}
|
||||
} else {
|
||||
if (IS_NUMERIC_TYPE(pColInfoData->info.type)) {
|
||||
GET_TYPED_DATA(val, int64_t, pColInfoData->info.type, ekey);
|
||||
GET_TYPED_DATA(val, int64_t, pColInfoData->info.type, ekey, typeGetTypeModFromColInfo(&pColInfoData->info));
|
||||
VALUE_SET_TRIVIAL_DATUM(&pInfo->pks[0], val);
|
||||
GET_TYPED_DATA(val, int64_t, pColInfoData->info.type, skey);
|
||||
GET_TYPED_DATA(val, int64_t, pColInfoData->info.type, skey, typeGetTypeModFromColInfo(&pColInfoData->info));
|
||||
VALUE_SET_TRIVIAL_DATUM(&pInfo->pks[1], val);
|
||||
} else { // todo refactor
|
||||
memcpy(pInfo->pks[0].pData, varDataVal(ekey), varDataLen(ekey));
|
||||
|
@ -2887,19 +2887,19 @@ int32_t buildSubmitReqFromDataBlock(SSubmitReq2** ppReq, const SSDataBlock* pDat
|
|||
char tv[DATUM_MAX_SIZE] = {0};
|
||||
if (pColInfoData->info.type == TSDB_DATA_TYPE_FLOAT) {
|
||||
float v = 0;
|
||||
GET_TYPED_DATA(v, float, pColInfoData->info.type, var);
|
||||
GET_TYPED_DATA(v, float, pColInfoData->info.type, var, typeGetTypeModFromColInfo(&pColInfoData->info));
|
||||
SET_TYPED_DATA(&tv, pCol->type, v);
|
||||
} else if (pColInfoData->info.type == TSDB_DATA_TYPE_DOUBLE) {
|
||||
double v = 0;
|
||||
GET_TYPED_DATA(v, double, pColInfoData->info.type, var);
|
||||
GET_TYPED_DATA(v, double, pColInfoData->info.type, var, typeGetTypeModFromColInfo(&pColInfoData->info));
|
||||
SET_TYPED_DATA(&tv, pCol->type, v);
|
||||
} else if (IS_SIGNED_NUMERIC_TYPE(pColInfoData->info.type)) {
|
||||
int64_t v = 0;
|
||||
GET_TYPED_DATA(v, int64_t, pColInfoData->info.type, var);
|
||||
GET_TYPED_DATA(v, int64_t, pColInfoData->info.type, var, typeGetTypeModFromColInfo(&pColInfoData->info));
|
||||
SET_TYPED_DATA(&tv, pCol->type, v);
|
||||
} else {
|
||||
uint64_t v = 0;
|
||||
GET_TYPED_DATA(v, uint64_t, pColInfoData->info.type, var);
|
||||
GET_TYPED_DATA(v, uint64_t, pColInfoData->info.type, var, typeGetTypeModFromColInfo(&pColInfoData->info));
|
||||
SET_TYPED_DATA(&tv, pCol->type, v);
|
||||
}
|
||||
valueSetDatum(&sv, sv.type, tv, tDataTypes[pCol->type].bytes);
|
||||
|
@ -3714,12 +3714,12 @@ int32_t blockDataCheck(const SSDataBlock* pDataBlock) {
|
|||
} else {
|
||||
if (TSDB_DATA_TYPE_FLOAT == pCol->info.type) {
|
||||
float v = 0;
|
||||
GET_TYPED_DATA(v, float, pCol->info.type, colDataGetNumData(pCol, r));
|
||||
GET_TYPED_DATA(v, float, pCol->info.type, colDataGetNumData(pCol, r), typeGetTypeModFromColInfo(&pCol->info));
|
||||
} else if (TSDB_DATA_TYPE_DOUBLE == pCol->info.type) {
|
||||
double v = 0;
|
||||
GET_TYPED_DATA(v, double, pCol->info.type, colDataGetNumData(pCol, r));
|
||||
GET_TYPED_DATA(v, double, pCol->info.type, colDataGetNumData(pCol, r), typeGetTypeModFromColInfo(&pCol->info));
|
||||
} else {
|
||||
GET_TYPED_DATA(typeValue, int64_t, pCol->info.type, colDataGetNumData(pCol, r));
|
||||
GET_TYPED_DATA(typeValue, int64_t, pCol->info.type, colDataGetNumData(pCol, r), typeGetTypeModFromColInfo(&pCol->info));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -243,8 +243,8 @@ STypeMod decimalCalcTypeMod(uint8_t prec, uint8_t scale) {
|
|||
}
|
||||
|
||||
void decimalFromTypeMod(STypeMod typeMod, uint8_t* precision, uint8_t* scale) {
|
||||
*precision = (uint8_t)((typeMod >> 8) & 0xFF);
|
||||
*scale = (uint8_t)(typeMod & 0xFF);
|
||||
if (precision) *precision = (uint8_t)((typeMod >> 8) & 0xFF);
|
||||
if (scale) *scale = (uint8_t)(typeMod & 0xFF);
|
||||
}
|
||||
|
||||
STypeMod typeGetTypeMod(uint8_t type, uint8_t prec, uint8_t scale, int32_t bytes) {
|
||||
|
@ -259,3 +259,13 @@ void fillTypeFromTypeMod(SDataType* pType, STypeMod mod) {
|
|||
decimalFromTypeMod(mod, &pType->precision, &pType->scale);
|
||||
}
|
||||
}
|
||||
|
||||
void extractTypeFromTypeMod(uint8_t type, STypeMod typeMod, uint8_t *prec, uint8_t *scale, int32_t *bytes) {
|
||||
if (IS_DECIMAL_TYPE(type)) {
|
||||
decimalFromTypeMod(typeMod, prec, scale);
|
||||
} else {
|
||||
if (prec) *prec = 0;
|
||||
if (scale) *scale = 0;
|
||||
}
|
||||
if (bytes) *bytes = tDataTypes[type].bytes;
|
||||
}
|
||||
|
|
|
@ -906,7 +906,7 @@ int32_t decimalOp(EOperatorType op, const SDataType* pLeftT, const SDataType* pR
|
|||
#define ABS_INT64(v) (v) == INT64_MIN ? (uint64_t)INT64_MAX + 1 : (uint64_t)llabs(v)
|
||||
#define ABS_UINT64(v) (v)
|
||||
|
||||
#define DECIMAL64_IS_OVERFLOW(v, max) decimal64Gt(&(v), &max, DECIMAL_WORD_NUM(Decimal64))
|
||||
#define DECIMAL64_IS_OVERFLOW(v, max) decimal64Gt(&(v), &max, DECIMAL_WORD_NUM(Decimal64)) // TODO wjm DELETE it
|
||||
#define DECIMAL128_IS_OVERFLOW(v, max) decimal128Gt(&(v), &max, DECIMAL_WORD_NUM(Decimal128))
|
||||
|
||||
#define CHECK_OVERFLOW_AND_MAKE_DECIMAL64(pDec, v, max, ABS) \
|
||||
|
@ -922,7 +922,7 @@ int32_t decimalOp(EOperatorType op, const SDataType* pLeftT, const SDataType* pR
|
|||
})
|
||||
|
||||
#define MAKE_DECIMAL64_SIGNED(pDec, v, max) CHECK_OVERFLOW_AND_MAKE_DECIMAL64(pDec, v, max, ABS_INT64)
|
||||
#define MAKE_DECIMAL64_UNSIGNED(pDec, v, max) CHECK_OVERFLOW_AND_MAKE_DECIMAL64(pDec, v, max, ABS_UINT64);
|
||||
#define MAKE_DECIMAL64_UNSIGNED(pDec, v, max) CHECK_OVERFLOW_AND_MAKE_DECIMAL64(pDec, v, max, ABS_UINT64); // TODO wjm delete it
|
||||
|
||||
static int64_t int64FromDecimal64(const DecimalType* pDec, uint8_t prec, uint8_t scale) { return 0; }
|
||||
|
||||
|
|
|
@ -603,7 +603,7 @@ static void doStreamFillLinear(SStreamFillSupporter* pFillSup, SStreamFillInfo*
|
|||
cur.key = pFillInfo->current;
|
||||
cur.val = taosMemoryCalloc(1, pCell->bytes);
|
||||
QUERY_CHECK_NULL(cur.val, code, lino, _end, terrno);
|
||||
taosGetLinearInterpolationVal(&cur, pCell->type, &start, pEnd, pCell->type);
|
||||
taosGetLinearInterpolationVal(&cur, pCell->type, &start, pEnd, pCell->type, typeGetTypeModFromColInfo(&pColData->info));
|
||||
code = colDataSetVal(pColData, index, (const char*)cur.val, false);
|
||||
QUERY_CHECK_CODE(code, lino, _end);
|
||||
destroySPoint(&cur);
|
||||
|
@ -1712,15 +1712,15 @@ static void setValueForFillInfo(SStreamFillSupporter* pFillSup, SStreamFillInfo*
|
|||
SVariant* pVar = &(pFillCol->fillVal);
|
||||
if (pCell->type == TSDB_DATA_TYPE_FLOAT) {
|
||||
float v = 0;
|
||||
GET_TYPED_DATA(v, float, pVar->nType, &pVar->i);
|
||||
GET_TYPED_DATA(v, float, pVar->nType, &pVar->i, 0);
|
||||
SET_TYPED_DATA(pCell->pData, pCell->type, v);
|
||||
} else if (IS_FLOAT_TYPE(pCell->type)) {
|
||||
double v = 0;
|
||||
GET_TYPED_DATA(v, double, pVar->nType, &pVar->i);
|
||||
GET_TYPED_DATA(v, double, pVar->nType, &pVar->i, 0);
|
||||
SET_TYPED_DATA(pCell->pData, pCell->type, v);
|
||||
} else if (IS_INTEGER_TYPE(pCell->type)) {
|
||||
int64_t v = 0;
|
||||
GET_TYPED_DATA(v, int64_t, pVar->nType, &pVar->i);
|
||||
GET_TYPED_DATA(v, int64_t, pVar->nType, &pVar->i, 0);
|
||||
SET_TYPED_DATA(pCell->pData, pCell->type, v);
|
||||
} else {
|
||||
pCell->isNull = true;
|
||||
|
|
|
@ -217,15 +217,15 @@ void doStreamSliceInterpolation(SSliceRowData* pPrevWinVal, TSKEY winKey, TSKEY
|
|||
|
||||
double prevVal = 0, curVal = 0, winVal = 0;
|
||||
SResultCellData* pCell = getSliceResultCell((SResultCellData*)pPrevWinVal->pRowVal, pParam->pCol->slotId, pOffsetInfo);
|
||||
GET_TYPED_DATA(prevVal, double, pCell->type, pCell->pData);
|
||||
GET_TYPED_DATA(curVal, double, pColInfo->info.type, colDataGetData(pColInfo, curRowIndex));
|
||||
GET_TYPED_DATA(prevVal, double, pCell->type, pCell->pData, typeGetTypeModFromColInfo(&pColInfo->info));
|
||||
GET_TYPED_DATA(curVal, double, pColInfo->info.type, colDataGetData(pColInfo, curRowIndex), typeGetTypeModFromColInfo(&pColInfo->info));
|
||||
|
||||
SPoint point1 = (SPoint){.key = pPrevWinVal->key, .val = &prevVal};
|
||||
SPoint point2 = (SPoint){.key = curTs, .val = &curVal};
|
||||
SPoint point = (SPoint){.key = winKey, .val = &winVal};
|
||||
|
||||
if (!fmIsElapsedFunc(pCtx[k].functionId)) {
|
||||
taosGetLinearInterpolationVal(&point, TSDB_DATA_TYPE_DOUBLE, &point1, &point2, TSDB_DATA_TYPE_DOUBLE);
|
||||
taosGetLinearInterpolationVal(&point, TSDB_DATA_TYPE_DOUBLE, &point1, &point2, TSDB_DATA_TYPE_DOUBLE, 0);
|
||||
}
|
||||
|
||||
if (type == INTERVAL_SLICE_START) {
|
||||
|
|
|
@ -515,7 +515,7 @@ static void fillLinearRange(SStreamFillSupporter* pFillSup, SStreamFillInfo* pFi
|
|||
cur.val = taosMemoryCalloc(1, pCell->bytes);
|
||||
QUERY_CHECK_NULL(cur.val, code, lino, _end, terrno);
|
||||
|
||||
taosGetLinearInterpolationVal(&cur, pCell->type, &start, pEnd, pCell->type);
|
||||
taosGetLinearInterpolationVal(&cur, pCell->type, &start, pEnd, pCell->type, typeGetTypeModFromColInfo(&pDstCol->info));
|
||||
code = colDataSetVal(pDstCol, index, (const char*)cur.val, false);
|
||||
QUERY_CHECK_CODE(code, lino, _end);
|
||||
|
||||
|
@ -1980,15 +1980,15 @@ static void copyFillValueInfo(SStreamFillSupporter* pFillSup, SStreamFillInfo* p
|
|||
SVariant* pVar = &(pValueCol->fillVal);
|
||||
if (pCell->type == TSDB_DATA_TYPE_FLOAT) {
|
||||
float v = 0;
|
||||
GET_TYPED_DATA(v, float, pVar->nType, &pVar->i);
|
||||
GET_TYPED_DATA(v, float, pVar->nType, &pVar->i, 0);
|
||||
SET_TYPED_DATA(pCell->pData, pCell->type, v);
|
||||
} else if (IS_FLOAT_TYPE(pCell->type)) {
|
||||
double v = 0;
|
||||
GET_TYPED_DATA(v, double, pVar->nType, &pVar->i);
|
||||
GET_TYPED_DATA(v, double, pVar->nType, &pVar->i, 0);
|
||||
SET_TYPED_DATA(pCell->pData, pCell->type, v);
|
||||
} else if (IS_INTEGER_TYPE(pCell->type)) {
|
||||
int64_t v = 0;
|
||||
GET_TYPED_DATA(v, int64_t, pVar->nType, &pVar->i);
|
||||
GET_TYPED_DATA(v, int64_t, pVar->nType, &pVar->i, 0);
|
||||
SET_TYPED_DATA(pCell->pData, pCell->type, v);
|
||||
} else {
|
||||
pCell->isNull = true;
|
||||
|
|
|
@ -85,27 +85,27 @@ static int32_t doSetUserSpecifiedValue(SColumnInfoData* pDst, SVariant* pVar, in
|
|||
bool isNull = (TSDB_DATA_TYPE_NULL == pVar->nType) ? true : false;
|
||||
if (pDst->info.type == TSDB_DATA_TYPE_FLOAT) {
|
||||
float v = 0;
|
||||
GET_TYPED_DATA(v, float, pVar->nType, &pVar->f);
|
||||
GET_TYPED_DATA(v, float, pVar->nType, &pVar->f, typeGetTypeModFromColInfo(&pDst->info));
|
||||
code = colDataSetVal(pDst, rowIndex, (char*)&v, isNull);
|
||||
QUERY_CHECK_CODE(code, lino, _end);
|
||||
} else if (pDst->info.type == TSDB_DATA_TYPE_DOUBLE) {
|
||||
double v = 0;
|
||||
GET_TYPED_DATA(v, double, pVar->nType, &pVar->d);
|
||||
GET_TYPED_DATA(v, double, pVar->nType, &pVar->d, typeGetTypeModFromColInfo(&pDst->info));
|
||||
code = colDataSetVal(pDst, rowIndex, (char*)&v, isNull);
|
||||
QUERY_CHECK_CODE(code, lino, _end);
|
||||
} else if (IS_SIGNED_NUMERIC_TYPE(pDst->info.type) || pDst->info.type == TSDB_DATA_TYPE_BOOL) {
|
||||
int64_t v = 0;
|
||||
GET_TYPED_DATA(v, int64_t, pVar->nType, &pVar->i);
|
||||
GET_TYPED_DATA(v, int64_t, pVar->nType, &pVar->i, typeGetTypeModFromColInfo(&pDst->info));
|
||||
code = colDataSetVal(pDst, rowIndex, (char*)&v, isNull);
|
||||
QUERY_CHECK_CODE(code, lino, _end);
|
||||
} else if (IS_UNSIGNED_NUMERIC_TYPE(pDst->info.type)) {
|
||||
uint64_t v = 0;
|
||||
GET_TYPED_DATA(v, uint64_t, pVar->nType, &pVar->u);
|
||||
GET_TYPED_DATA(v, uint64_t, pVar->nType, &pVar->u, typeGetTypeModFromColInfo(&pDst->info));
|
||||
code = colDataSetVal(pDst, rowIndex, (char*)&v, isNull);
|
||||
QUERY_CHECK_CODE(code, lino, _end);
|
||||
} else if (pDst->info.type == TSDB_DATA_TYPE_TIMESTAMP) {
|
||||
int64_t v = 0;
|
||||
GET_TYPED_DATA(v, int64_t, pVar->nType, &pVar->u);
|
||||
GET_TYPED_DATA(v, int64_t, pVar->nType, &pVar->u, typeGetTypeModFromColInfo(&pDst->info));
|
||||
code = colDataSetVal(pDst, rowIndex, (const char*)&v, isNull);
|
||||
QUERY_CHECK_CODE(code, lino, _end);
|
||||
} else if (pDst->info.type == TSDB_DATA_TYPE_NCHAR || pDst->info.type == TSDB_DATA_TYPE_VARCHAR ||
|
||||
|
@ -236,7 +236,7 @@ static void doFillOneRow(SFillInfo* pFillInfo, SSDataBlock* pBlock, SSDataBlock*
|
|||
|
||||
int64_t out = 0;
|
||||
point = (SPoint){.key = pFillInfo->currentKey, .val = &out};
|
||||
taosGetLinearInterpolationVal(&point, type, &point1, &point2, type);
|
||||
taosGetLinearInterpolationVal(&point, type, &point1, &point2, type, typeGetTypeModFromColInfo(&pDstCol->info));
|
||||
|
||||
code = colDataSetVal(pDstCol, index, (const char*)&out, false);
|
||||
QUERY_CHECK_CODE(code, lino, _end);
|
||||
|
@ -725,10 +725,10 @@ int64_t getNumOfResultsAfterFillGap(SFillInfo* pFillInfo, TSKEY ekey, int32_t ma
|
|||
}
|
||||
|
||||
void taosGetLinearInterpolationVal(SPoint* point, int32_t outputType, SPoint* point1, SPoint* point2,
|
||||
int32_t inputType) {
|
||||
int32_t inputType, STypeMod inputTypeMod) {
|
||||
double v1 = -1, v2 = -1;
|
||||
GET_TYPED_DATA(v1, double, inputType, point1->val);
|
||||
GET_TYPED_DATA(v2, double, inputType, point2->val);
|
||||
GET_TYPED_DATA(v1, double, inputType, point1->val, inputTypeMod);
|
||||
GET_TYPED_DATA(v2, double, inputType, point2->val, inputTypeMod);
|
||||
|
||||
double r = 0;
|
||||
if (!IS_BOOLEAN_TYPE(inputType)) {
|
||||
|
|
|
@ -460,7 +460,7 @@ static bool genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
|
|||
if (pDst->info.type == TSDB_DATA_TYPE_FLOAT) {
|
||||
float v = 0;
|
||||
if (!IS_VAR_DATA_TYPE(pVar->nType)) {
|
||||
GET_TYPED_DATA(v, float, pVar->nType, &pVar->f);
|
||||
GET_TYPED_DATA(v, float, pVar->nType, &pVar->f, 0);
|
||||
} else {
|
||||
v = taosStr2Float(varDataVal(pVar->pz), NULL);
|
||||
}
|
||||
|
@ -469,7 +469,7 @@ static bool genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
|
|||
} else if (pDst->info.type == TSDB_DATA_TYPE_DOUBLE) {
|
||||
double v = 0;
|
||||
if (!IS_VAR_DATA_TYPE(pVar->nType)) {
|
||||
GET_TYPED_DATA(v, double, pVar->nType, &pVar->d);
|
||||
GET_TYPED_DATA(v, double, pVar->nType, &pVar->d, 0);
|
||||
} else {
|
||||
v = taosStr2Double(varDataVal(pVar->pz), NULL);
|
||||
}
|
||||
|
@ -478,7 +478,7 @@ static bool genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
|
|||
} else if (IS_SIGNED_NUMERIC_TYPE(pDst->info.type)) {
|
||||
int64_t v = 0;
|
||||
if (!IS_VAR_DATA_TYPE(pVar->nType)) {
|
||||
GET_TYPED_DATA(v, int64_t, pVar->nType, &pVar->i);
|
||||
GET_TYPED_DATA(v, int64_t, pVar->nType, &pVar->i, 0);
|
||||
} else {
|
||||
v = taosStr2Int64(varDataVal(pVar->pz), NULL, 10);
|
||||
}
|
||||
|
@ -487,7 +487,7 @@ static bool genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
|
|||
} else if (IS_UNSIGNED_NUMERIC_TYPE(pDst->info.type)) {
|
||||
uint64_t v = 0;
|
||||
if (!IS_VAR_DATA_TYPE(pVar->nType)) {
|
||||
GET_TYPED_DATA(v, uint64_t, pVar->nType, &pVar->u);
|
||||
GET_TYPED_DATA(v, uint64_t, pVar->nType, &pVar->u, 0);
|
||||
} else {
|
||||
v = taosStr2UInt64(varDataVal(pVar->pz), NULL, 10);
|
||||
}
|
||||
|
@ -496,12 +496,14 @@ static bool genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
|
|||
} else if (IS_BOOLEAN_TYPE(pDst->info.type)) {
|
||||
bool v = false;
|
||||
if (!IS_VAR_DATA_TYPE(pVar->nType)) {
|
||||
GET_TYPED_DATA(v, bool, pVar->nType, &pVar->i);
|
||||
GET_TYPED_DATA(v, bool, pVar->nType, &pVar->i, 0);
|
||||
} else {
|
||||
v = taosStr2Int8(varDataVal(pVar->pz), NULL, 10);
|
||||
}
|
||||
code = colDataSetVal(pDst, rows, (char*)&v, isNull);
|
||||
QUERY_CHECK_CODE(code, lino, _end);
|
||||
} else if (IS_DECIMAL_TYPE(pDst->info.type)) {
|
||||
// TODO wjm
|
||||
}
|
||||
|
||||
++fillColIndex;
|
||||
|
@ -537,7 +539,7 @@ static bool genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
|
|||
|
||||
current.val = taosMemoryCalloc(pLinearInfo->bytes, 1);
|
||||
QUERY_CHECK_NULL(current.val, code, lino, _end, terrno);
|
||||
taosGetLinearInterpolationVal(¤t, pLinearInfo->type, &start, &end, pLinearInfo->type);
|
||||
taosGetLinearInterpolationVal(¤t, pLinearInfo->type, &start, &end, pLinearInfo->type, typeGetTypeModFromColInfo(&pDst->info));
|
||||
code = colDataSetVal(pDst, rows, (char*)current.val, false);
|
||||
QUERY_CHECK_CODE(code, lino, _end);
|
||||
|
||||
|
|
|
@ -235,12 +235,12 @@ void doTimeWindowInterpolation(SArray* pPrevValues, SArray* pDataBlock, TSKEY pr
|
|||
double v1 = 0, v2 = 0, v = 0;
|
||||
if (prevRowIndex == -1) {
|
||||
SGroupKeys* p = taosArrayGet(pPrevValues, index);
|
||||
GET_TYPED_DATA(v1, double, pColInfo->info.type, p->pData);
|
||||
GET_TYPED_DATA(v1, double, pColInfo->info.type, p->pData, typeGetTypeModFromColInfo(&pColInfo->info));
|
||||
} else {
|
||||
GET_TYPED_DATA(v1, double, pColInfo->info.type, colDataGetData(pColInfo, prevRowIndex));
|
||||
GET_TYPED_DATA(v1, double, pColInfo->info.type, colDataGetData(pColInfo, prevRowIndex), typeGetTypeModFromColInfo(&pColInfo->info));
|
||||
}
|
||||
|
||||
GET_TYPED_DATA(v2, double, pColInfo->info.type, colDataGetData(pColInfo, curRowIndex));
|
||||
GET_TYPED_DATA(v2, double, pColInfo->info.type, colDataGetData(pColInfo, curRowIndex), typeGetTypeModFromColInfo(&pColInfo->info));
|
||||
|
||||
#if 0
|
||||
if (functionId == FUNCTION_INTERP) {
|
||||
|
@ -270,7 +270,7 @@ void doTimeWindowInterpolation(SArray* pPrevValues, SArray* pDataBlock, TSKEY pr
|
|||
SPoint point = (SPoint){.key = windowKey, .val = &v};
|
||||
|
||||
if (!fmIsElapsedFunc(pCtx[k].functionId)) {
|
||||
taosGetLinearInterpolationVal(&point, TSDB_DATA_TYPE_DOUBLE, &point1, &point2, TSDB_DATA_TYPE_DOUBLE);
|
||||
taosGetLinearInterpolationVal(&point, TSDB_DATA_TYPE_DOUBLE, &point1, &point2, TSDB_DATA_TYPE_DOUBLE, 0);
|
||||
}
|
||||
|
||||
if (type == RESULT_ROW_START_INTERP) {
|
||||
|
|
|
@ -195,6 +195,7 @@ typedef struct tMemBucket {
|
|||
int16_t numOfSlots;
|
||||
int16_t type;
|
||||
int32_t bytes;
|
||||
STypeMod typeMod;
|
||||
int32_t total;
|
||||
int32_t elemPerPage; // number of elements for each object
|
||||
int32_t maxCapacity; // maximum allowed number of elements that can be sort directly to get the result
|
||||
|
|
|
@ -25,7 +25,7 @@ extern "C" {
|
|||
|
||||
struct tMemBucket;
|
||||
|
||||
int32_t tMemBucketCreate(int32_t nElemSize, int16_t dataType, double minval, double maxval, bool hasWindowOrGroup,
|
||||
int32_t tMemBucketCreate(int32_t nElemSize, int16_t dataType, STypeMod typeMod, double minval, double maxval, bool hasWindowOrGroup,
|
||||
struct tMemBucket **pBucket, int32_t numOfElements);
|
||||
|
||||
void tMemBucketDestroy(struct tMemBucket **pBucket);
|
||||
|
|
|
@ -1536,8 +1536,10 @@ int32_t leastSQRFunctionSetup(SqlFunctionCtx* pCtx, SResultRowEntryInfo* pResult
|
|||
|
||||
SLeastSQRInfo* pInfo = GET_ROWCELL_INTERBUF(pResultInfo);
|
||||
|
||||
GET_TYPED_DATA(pInfo->startVal, double, pCtx->param[1].param.nType, &pCtx->param[1].param.i);
|
||||
GET_TYPED_DATA(pInfo->stepVal, double, pCtx->param[2].param.nType, &pCtx->param[2].param.i);
|
||||
GET_TYPED_DATA(pInfo->startVal, double, pCtx->param[1].param.nType, &pCtx->param[1].param.i,
|
||||
typeGetTypeModFromCol(pCtx->param[1].pCol));
|
||||
GET_TYPED_DATA(pInfo->stepVal, double, pCtx->param[2].param.nType, &pCtx->param[2].param.i,
|
||||
typeGetTypeModFromCol(pCtx->param[2].pCol));
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -1832,7 +1834,7 @@ int32_t percentileFunction(SqlFunctionCtx* pCtx) {
|
|||
pResInfo->complete = true;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
} else {
|
||||
code = tMemBucketCreate(pCol->info.bytes, type, pInfo->minval, pInfo->maxval, pCtx->hasWindowOrGroup,
|
||||
code = tMemBucketCreate(pCol->info.bytes, type, typeGetTypeModFromColInfo(&pCol->info), pInfo->minval, pInfo->maxval, pCtx->hasWindowOrGroup,
|
||||
&pInfo->pMemBucket, pInfo->numOfElems);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
return code;
|
||||
|
@ -1875,7 +1877,7 @@ int32_t percentileFunction(SqlFunctionCtx* pCtx) {
|
|||
char* data = colDataGetData(pCol, i);
|
||||
|
||||
double v = 0;
|
||||
GET_TYPED_DATA(v, double, type, data);
|
||||
GET_TYPED_DATA(v, double, type, data, typeGetTypeModFromColInfo(&pCol->info));
|
||||
if (v < GET_DOUBLE_VAL(&pInfo->minval)) {
|
||||
SET_DOUBLE_VAL(&pInfo->minval, v);
|
||||
}
|
||||
|
@ -1930,7 +1932,7 @@ int32_t percentileFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
|
|||
for (int32_t i = 1; i < pCtx->numOfParams; ++i) {
|
||||
SVariant* pVal = &pCtx->param[i].param;
|
||||
|
||||
GET_TYPED_DATA(v, double, pVal->nType, &pVal->i);
|
||||
GET_TYPED_DATA(v, double, pVal->nType, &pVal->i, typeGetTypeModFromCol(pCtx->param[i].pCol));
|
||||
|
||||
code = getPercentile((*pMemBucket), v, &ppInfo->result);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
|
@ -1962,7 +1964,7 @@ int32_t percentileFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
|
|||
} else {
|
||||
SVariant* pVal = &pCtx->param[1].param;
|
||||
|
||||
GET_TYPED_DATA(v, double, pVal->nType, &pVal->i);
|
||||
GET_TYPED_DATA(v, double, pVal->nType, &pVal->i, typeGetTypeModFromCol(pCtx->param[1].pCol));
|
||||
|
||||
code = getPercentile((*pMemBucket), v, &ppInfo->result);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
|
@ -2031,7 +2033,7 @@ int32_t apercentileFunctionSetup(SqlFunctionCtx* pCtx, SResultRowEntryInfo* pRes
|
|||
|
||||
SVariant* pVal = &pCtx->param[1].param;
|
||||
pInfo->percent = 0;
|
||||
GET_TYPED_DATA(pInfo->percent, double, pVal->nType, &pVal->i);
|
||||
GET_TYPED_DATA(pInfo->percent, double, pVal->nType, &pVal->i, typeGetTypeModFromCol(pCtx->param[1].pCol));
|
||||
|
||||
if (pCtx->numOfParams == 2) {
|
||||
pInfo->algo = APERCT_ALGO_DEFAULT;
|
||||
|
@ -2078,7 +2080,7 @@ int32_t apercentileFunction(SqlFunctionCtx* pCtx) {
|
|||
|
||||
double v = 0; // value
|
||||
int64_t w = 1; // weigth
|
||||
GET_TYPED_DATA(v, double, type, data);
|
||||
GET_TYPED_DATA(v, double, type, data, typeGetTypeModFromColInfo(&pCol->info));
|
||||
int32_t code = tdigestAdd(pInfo->pTDigest, v, w);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
return code;
|
||||
|
@ -2099,7 +2101,7 @@ int32_t apercentileFunction(SqlFunctionCtx* pCtx) {
|
|||
char* data = colDataGetData(pCol, i);
|
||||
|
||||
double v = 0;
|
||||
GET_TYPED_DATA(v, double, type, data);
|
||||
GET_TYPED_DATA(v, double, type, data, typeGetTypeModFromColInfo(&pCol->info));
|
||||
int32_t code = tHistogramAdd(&pInfo->pHisto, v);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
return code;
|
||||
|
@ -4150,7 +4152,7 @@ int32_t spreadFunction(SqlFunctionCtx* pCtx) {
|
|||
char* data = colDataGetData(pCol, i);
|
||||
|
||||
double v = 0;
|
||||
GET_TYPED_DATA(v, double, type, data);
|
||||
GET_TYPED_DATA(v, double, type, data, typeGetTypeModFromColInfo(&pCol->info));
|
||||
if (v < GET_DOUBLE_VAL(&pInfo->min)) {
|
||||
SET_DOUBLE_VAL(&pInfo->min, v);
|
||||
}
|
||||
|
@ -4705,7 +4707,7 @@ static int32_t histogramFunctionImpl(SqlFunctionCtx* pCtx, bool isPartial) {
|
|||
|
||||
char* data = colDataGetData(pCol, i);
|
||||
double v;
|
||||
GET_TYPED_DATA(v, double, type, data);
|
||||
GET_TYPED_DATA(v, double, type, data, typeGetTypeModFromColInfo(&pCol->info));
|
||||
|
||||
for (int32_t k = 0; k < pInfo->numOfBins; ++k) {
|
||||
if (v > pInfo->bins[k].lower && v <= pInfo->bins[k].upper) {
|
||||
|
@ -5342,7 +5344,7 @@ int32_t csumFunction(SqlFunctionCtx* pCtx) {
|
|||
char* data = colDataGetData(pInputCol, i);
|
||||
if (IS_SIGNED_NUMERIC_TYPE(type)) {
|
||||
int64_t v;
|
||||
GET_TYPED_DATA(v, int64_t, type, data);
|
||||
GET_TYPED_DATA(v, int64_t, type, data, typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
pSumRes->isum += v;
|
||||
code = colDataSetVal(pOutput, pos, (char*)&pSumRes->isum, false);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
|
@ -5350,7 +5352,7 @@ int32_t csumFunction(SqlFunctionCtx* pCtx) {
|
|||
}
|
||||
} else if (IS_UNSIGNED_NUMERIC_TYPE(type)) {
|
||||
uint64_t v;
|
||||
GET_TYPED_DATA(v, uint64_t, type, data);
|
||||
GET_TYPED_DATA(v, uint64_t, type, data, typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
pSumRes->usum += v;
|
||||
code = colDataSetVal(pOutput, pos, (char*)&pSumRes->usum, false);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
|
@ -5358,7 +5360,7 @@ int32_t csumFunction(SqlFunctionCtx* pCtx) {
|
|||
}
|
||||
} else if (IS_FLOAT_TYPE(type)) {
|
||||
double v;
|
||||
GET_TYPED_DATA(v, double, type, data);
|
||||
GET_TYPED_DATA(v, double, type, data, typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
pSumRes->dsum += v;
|
||||
// check for overflow
|
||||
if (isinf(pSumRes->dsum) || isnan(pSumRes->dsum)) {
|
||||
|
@ -5444,7 +5446,7 @@ int32_t mavgFunction(SqlFunctionCtx* pCtx) {
|
|||
|
||||
char* data = colDataGetData(pInputCol, i);
|
||||
double v;
|
||||
GET_TYPED_DATA(v, double, type, data);
|
||||
GET_TYPED_DATA(v, double, type, data, typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
|
||||
if (!pInfo->pointsMeet && (pInfo->pos < pInfo->numOfPoints - 1)) {
|
||||
pInfo->points[pInfo->pos] = v;
|
||||
|
@ -6136,7 +6138,7 @@ int32_t twaFunction(SqlFunctionCtx* pCtx) {
|
|||
|
||||
last->key = row.ts;
|
||||
|
||||
GET_TYPED_DATA(last->val, double, pInputCol->info.type, row.pData);
|
||||
GET_TYPED_DATA(last->val, double, pInputCol->info.type, row.pData, typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
|
||||
pInfo->dOutput += twa_get_area(pCtx->start, *last);
|
||||
pInfo->win.skey = pCtx->start.key;
|
||||
|
@ -6158,7 +6160,7 @@ int32_t twaFunction(SqlFunctionCtx* pCtx) {
|
|||
|
||||
last->key = row.ts;
|
||||
|
||||
GET_TYPED_DATA(last->val, double, pInputCol->info.type, row.pData);
|
||||
GET_TYPED_DATA(last->val, double, pInputCol->info.type, row.pData, typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
|
||||
pInfo->win.skey = last->key;
|
||||
pInfo->numOfElems++;
|
||||
|
@ -6691,7 +6693,7 @@ int32_t derivativeFunction(SqlFunctionCtx* pCtx) {
|
|||
}
|
||||
|
||||
char* d = row.pData;
|
||||
GET_TYPED_DATA(v, double, pInputCol->info.type, d);
|
||||
GET_TYPED_DATA(v, double, pInputCol->info.type, d, typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
|
||||
int32_t pos = pCtx->offset + numOfElems;
|
||||
if (!pDerivInfo->valueSet) { // initial value is not set yet
|
||||
|
@ -6747,7 +6749,7 @@ int32_t derivativeFunction(SqlFunctionCtx* pCtx) {
|
|||
}
|
||||
|
||||
char* d = row.pData;
|
||||
GET_TYPED_DATA(v, double, pInputCol->info.type, d);
|
||||
GET_TYPED_DATA(v, double, pInputCol->info.type, d, typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
|
||||
int32_t pos = pCtx->offset + numOfElems;
|
||||
if (!pDerivInfo->valueSet) { // initial value is not set yet
|
||||
|
@ -6905,7 +6907,7 @@ int32_t irateFunction(SqlFunctionCtx* pCtx) {
|
|||
|
||||
char* data = row.pData;
|
||||
double v = 0;
|
||||
GET_TYPED_DATA(v, double, type, data);
|
||||
GET_TYPED_DATA(v, double, type, data, typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
|
||||
if (INT64_MIN == pRateInfo->lastKey) {
|
||||
doSaveRateInfo(pRateInfo, false, row.ts, row.pPk, v);
|
||||
|
|
|
@ -597,7 +597,7 @@ int32_t doMinMaxHelper(SqlFunctionCtx* pCtx, int32_t isMinFunc, int32_t* nElems)
|
|||
} else {
|
||||
if (IS_SIGNED_NUMERIC_TYPE(type)) {
|
||||
int64_t prev = 0;
|
||||
GET_TYPED_DATA(prev, int64_t, type, &pBuf->v);
|
||||
GET_TYPED_DATA(prev, int64_t, type, &pBuf->v, 0);
|
||||
|
||||
int64_t val = GET_INT64_VAL(tval);
|
||||
if ((prev < val) ^ isMinFunc) {
|
||||
|
@ -606,7 +606,7 @@ int32_t doMinMaxHelper(SqlFunctionCtx* pCtx, int32_t isMinFunc, int32_t* nElems)
|
|||
}
|
||||
} else if (IS_UNSIGNED_NUMERIC_TYPE(type)) {
|
||||
uint64_t prev = 0;
|
||||
GET_TYPED_DATA(prev, uint64_t, type, &pBuf->v);
|
||||
GET_TYPED_DATA(prev, uint64_t, type, &pBuf->v, 0);
|
||||
|
||||
uint64_t val = GET_UINT64_VAL(tval);
|
||||
if ((prev < val) ^ isMinFunc) {
|
||||
|
@ -615,7 +615,7 @@ int32_t doMinMaxHelper(SqlFunctionCtx* pCtx, int32_t isMinFunc, int32_t* nElems)
|
|||
}
|
||||
} else if (type == TSDB_DATA_TYPE_DOUBLE) {
|
||||
double prev = 0;
|
||||
GET_TYPED_DATA(prev, double, type, &pBuf->v);
|
||||
GET_TYPED_DATA(prev, double, type, &pBuf->v, 0);
|
||||
|
||||
double val = GET_DOUBLE_VAL(tval);
|
||||
if ((prev < val) ^ isMinFunc) {
|
||||
|
@ -624,7 +624,7 @@ int32_t doMinMaxHelper(SqlFunctionCtx* pCtx, int32_t isMinFunc, int32_t* nElems)
|
|||
}
|
||||
} else if (type == TSDB_DATA_TYPE_FLOAT) {
|
||||
float prev = 0;
|
||||
GET_TYPED_DATA(prev, float, type, &pBuf->v);
|
||||
GET_TYPED_DATA(prev, float, type, &pBuf->v, 0);
|
||||
|
||||
float val = GET_DOUBLE_VAL(tval);
|
||||
if ((prev < val) ^ isMinFunc) {
|
||||
|
|
|
@ -143,7 +143,7 @@ int32_t findOnlyResult(tMemBucket *pMemBucket, double *result) {
|
|||
return TSDB_CODE_FUNC_PERCENTILE_ERROR;
|
||||
}
|
||||
|
||||
GET_TYPED_DATA(*result, double, pMemBucket->type, pPage->data);
|
||||
GET_TYPED_DATA(*result, double, pMemBucket->type, pPage->data, pMemBucket->typeMod);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
@ -154,7 +154,7 @@ int32_t findOnlyResult(tMemBucket *pMemBucket, double *result) {
|
|||
|
||||
int32_t tBucketIntHash(tMemBucket *pBucket, const void *value, int32_t *index) {
|
||||
int64_t v = 0;
|
||||
GET_TYPED_DATA(v, int64_t, pBucket->type, value);
|
||||
GET_TYPED_DATA(v, int64_t, pBucket->type, value, pBucket->typeMod);
|
||||
|
||||
*index = -1;
|
||||
|
||||
|
@ -186,7 +186,7 @@ int32_t tBucketIntHash(tMemBucket *pBucket, const void *value, int32_t *index) {
|
|||
|
||||
int32_t tBucketUintHash(tMemBucket *pBucket, const void *value, int32_t *index) {
|
||||
int64_t v = 0;
|
||||
GET_TYPED_DATA(v, uint64_t, pBucket->type, value);
|
||||
GET_TYPED_DATA(v, uint64_t, pBucket->type, value, pBucket->typeMod);
|
||||
|
||||
*index = -1;
|
||||
|
||||
|
@ -268,7 +268,7 @@ static void resetSlotInfo(tMemBucket *pBucket) {
|
|||
}
|
||||
}
|
||||
|
||||
int32_t tMemBucketCreate(int32_t nElemSize, int16_t dataType, double minval, double maxval, bool hasWindowOrGroup,
|
||||
int32_t tMemBucketCreate(int32_t nElemSize, int16_t dataType, STypeMod typeMod, double minval, double maxval, bool hasWindowOrGroup,
|
||||
tMemBucket **pBucket, int32_t numOfElements) {
|
||||
*pBucket = (tMemBucket *)taosMemoryCalloc(1, sizeof(tMemBucket));
|
||||
if (*pBucket == NULL) {
|
||||
|
@ -286,6 +286,7 @@ int32_t tMemBucketCreate(int32_t nElemSize, int16_t dataType, double minval, dou
|
|||
(*pBucket)->bytes = nElemSize;
|
||||
(*pBucket)->total = 0;
|
||||
(*pBucket)->times = 1;
|
||||
(*pBucket)->typeMod = typeMod;
|
||||
|
||||
(*pBucket)->maxCapacity = 200000;
|
||||
(*pBucket)->groupPagesMap = taosHashInit(128, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), false, HASH_NO_LOCK);
|
||||
|
@ -353,10 +354,11 @@ void tMemBucketDestroy(tMemBucket **pBucket) {
|
|||
taosMemoryFreeClear(*pBucket);
|
||||
}
|
||||
|
||||
int32_t tMemBucketUpdateBoundingBox(MinMaxEntry *r, const char *data, int32_t dataType) {
|
||||
int32_t tMemBucketUpdateBoundingBox(MinMaxEntry *r, const char *data, tMemBucket* pBucket) {
|
||||
int32_t dataType = pBucket->type;
|
||||
if (IS_SIGNED_NUMERIC_TYPE(dataType)) {
|
||||
int64_t v = 0;
|
||||
GET_TYPED_DATA(v, int64_t, dataType, data);
|
||||
GET_TYPED_DATA(v, int64_t, dataType, data, pBucket->typeMod);
|
||||
|
||||
if (r->dMinVal > v) {
|
||||
r->dMinVal = v;
|
||||
|
@ -367,7 +369,7 @@ int32_t tMemBucketUpdateBoundingBox(MinMaxEntry *r, const char *data, int32_t da
|
|||
}
|
||||
} else if (IS_UNSIGNED_NUMERIC_TYPE(dataType)) {
|
||||
uint64_t v = 0;
|
||||
GET_TYPED_DATA(v, uint64_t, dataType, data);
|
||||
GET_TYPED_DATA(v, uint64_t, dataType, data, pBucket->typeMod);
|
||||
|
||||
if (r->u64MinVal > v) {
|
||||
r->u64MinVal = v;
|
||||
|
@ -378,7 +380,7 @@ int32_t tMemBucketUpdateBoundingBox(MinMaxEntry *r, const char *data, int32_t da
|
|||
}
|
||||
} else if (IS_FLOAT_TYPE(dataType)) {
|
||||
double v = 0;
|
||||
GET_TYPED_DATA(v, double, dataType, data);
|
||||
GET_TYPED_DATA(v, double, dataType, data, pBucket->typeMod);
|
||||
|
||||
if (r->dMinVal > v) {
|
||||
r->dMinVal = v;
|
||||
|
@ -415,7 +417,7 @@ int32_t tMemBucketPut(tMemBucket *pBucket, const void *data, size_t size) {
|
|||
count += 1;
|
||||
|
||||
tMemBucketSlot *pSlot = &pBucket->pSlots[index];
|
||||
code = tMemBucketUpdateBoundingBox(&pSlot->range, d, pBucket->type);
|
||||
code = tMemBucketUpdateBoundingBox(&pSlot->range, d, pBucket);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
return code;
|
||||
}
|
||||
|
@ -572,8 +574,8 @@ int32_t getPercentileImpl(tMemBucket *pMemBucket, int32_t count, double fraction
|
|||
char *nextVal = thisVal + pMemBucket->bytes;
|
||||
|
||||
double td = 1.0, nd = 1.0;
|
||||
GET_TYPED_DATA(td, double, pMemBucket->type, thisVal);
|
||||
GET_TYPED_DATA(nd, double, pMemBucket->type, nextVal);
|
||||
GET_TYPED_DATA(td, double, pMemBucket->type, thisVal, pMemBucket->typeMod);
|
||||
GET_TYPED_DATA(nd, double, pMemBucket->type, nextVal, pMemBucket->typeMod);
|
||||
|
||||
*result = (1 - fraction) * td + fraction * nd;
|
||||
taosMemoryFreeClear(buffer);
|
||||
|
@ -586,7 +588,7 @@ int32_t getPercentileImpl(tMemBucket *pMemBucket, int32_t count, double fraction
|
|||
}
|
||||
// try next round
|
||||
tMemBucket *tmpBucket = NULL;
|
||||
int32_t code = tMemBucketCreate(pMemBucket->bytes, pMemBucket->type, pSlot->range.dMinVal, pSlot->range.dMaxVal,
|
||||
int32_t code = tMemBucketCreate(pMemBucket->bytes, pMemBucket->type, pMemBucket->typeMod, pSlot->range.dMinVal, pSlot->range.dMaxVal,
|
||||
false, &tmpBucket, pSlot->info.size);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
tMemBucketDestroy(&tmpBucket);
|
||||
|
|
|
@ -878,7 +878,7 @@ int32_t sclExecLogic(SLogicConditionNode *node, SScalarCtx *ctx, SScalarParam *o
|
|||
int32_t ind = (i >= params[m].numOfRows) ? (params[m].numOfRows - 1) : i;
|
||||
char *p = colDataGetData(params[m].columnData, ind);
|
||||
|
||||
GET_TYPED_DATA(value, bool, params[m].columnData->info.type, p);
|
||||
GET_TYPED_DATA(value, bool, params[m].columnData->info.type, p, typeGetTypeModFromColInfo(¶ms[m].columnData->info));
|
||||
|
||||
if (LOGIC_COND_TYPE_AND == node->condType && (false == value)) {
|
||||
complete = true;
|
||||
|
|
|
@ -1218,9 +1218,9 @@ int32_t substrFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu
|
|||
|
||||
int32_t subPos = 0;
|
||||
int32_t subLen = INT16_MAX;
|
||||
GET_TYPED_DATA(subPos, int32_t, GET_PARAM_TYPE(&pInput[1]), colDataGetData(pInputData[1], colIdx[1]));
|
||||
GET_TYPED_DATA(subPos, int32_t, GET_PARAM_TYPE(&pInput[1]), colDataGetData(pInputData[1], colIdx[1]), typeGetTypeModFromColInfo(&pInput[1].columnData->info));
|
||||
if (inputNum == 3) {
|
||||
GET_TYPED_DATA(subLen, int32_t, GET_PARAM_TYPE(&pInput[2]), colDataGetData(pInputData[2], colIdx[2]));
|
||||
GET_TYPED_DATA(subLen, int32_t, GET_PARAM_TYPE(&pInput[2]), colDataGetData(pInputData[2], colIdx[2]), typeGetTypeModFromColInfo(&pInput[2].columnData->info));
|
||||
}
|
||||
|
||||
if (subPos == 0 || subLen < 1) {
|
||||
|
@ -1337,7 +1337,7 @@ int32_t charFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
if (colDataIsNull_s(pInput[j].columnData, i)) {
|
||||
continue;
|
||||
} else if (IS_NUMERIC_TYPE(GET_PARAM_TYPE(&pInput[j]))) {
|
||||
GET_TYPED_DATA(num, int32_t, GET_PARAM_TYPE(&pInput[j]), colDataGetData(pInput[j].columnData, colIdx));
|
||||
GET_TYPED_DATA(num, int32_t, GET_PARAM_TYPE(&pInput[j]), colDataGetData(pInput[j].columnData, colIdx), typeGetTypeModFromColInfo(&pInput[j].columnData->info));
|
||||
getAsciiChar(num, &output);
|
||||
} else if (TSDB_DATA_TYPE_BINARY == GET_PARAM_TYPE(&pInput[j])) {
|
||||
num = taosStr2Int32(varDataVal(colDataGetData(pInput[j].columnData, colIdx)), NULL, 10);
|
||||
|
@ -1478,7 +1478,8 @@ int32_t positionFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *p
|
|||
int32_t trimFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
// trim space
|
||||
uint8_t trimType = 0;
|
||||
GET_TYPED_DATA(trimType, int32_t, GET_PARAM_TYPE(&pInput[inputNum - 1]), pInput[inputNum - 1].columnData->pData);
|
||||
GET_TYPED_DATA(trimType, int32_t, GET_PARAM_TYPE(&pInput[inputNum - 1]), pInput[inputNum - 1].columnData->pData,
|
||||
typeGetTypeModFromColInfo(&pInput[inputNum - 1].columnData->info));
|
||||
switch (trimType) {
|
||||
case TRIM_TYPE_LEADING: {
|
||||
SCL_ERR_RET(doTrimFunction(pInput, inputNum, pOutput, tltrimspace, tltrim));
|
||||
|
@ -1673,7 +1674,9 @@ int32_t substrIdxFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *
|
|||
char *delimStr = varDataVal(colDataGetData(pInputData[1], colIdx2));
|
||||
int32_t delimLen = varDataLen(colDataGetData(pInputData[1], colIdx2));
|
||||
bool needFreeDelim = false;
|
||||
GET_TYPED_DATA(count, int32_t, GET_PARAM_TYPE(&pInput[2]), colDataGetData(pInputData[2], (pInput[2].numOfRows == 1) ? 0 : k));
|
||||
GET_TYPED_DATA(count, int32_t, GET_PARAM_TYPE(&pInput[2]),
|
||||
colDataGetData(pInputData[2], (pInput[2].numOfRows == 1) ? 0 : k),
|
||||
typeGetTypeModFromColInfo(&pInputData[2]->info));
|
||||
|
||||
int32_t startPosBytes;
|
||||
int32_t endPosBytes;
|
||||
|
@ -1735,7 +1738,8 @@ int32_t repeatFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu
|
|||
if (colDataIsNull_s(pInput[1].columnData, i)) {
|
||||
continue;
|
||||
}
|
||||
GET_TYPED_DATA(tmpCount, int32_t, GET_PARAM_TYPE(&pInput[1]), colDataGetData(pInput[1].columnData, i));
|
||||
GET_TYPED_DATA(tmpCount, int32_t, GET_PARAM_TYPE(&pInput[1]), colDataGetData(pInput[1].columnData, i),
|
||||
typeGetTypeModFromColInfo(&pInput[1].columnData->info));
|
||||
maxCount = TMAX(maxCount, tmpCount);
|
||||
}
|
||||
pInputData[0] = pInput[0].columnData;
|
||||
|
@ -1761,7 +1765,8 @@ int32_t repeatFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu
|
|||
continue;
|
||||
}
|
||||
int32_t count = 0;
|
||||
GET_TYPED_DATA(count, int32_t, GET_PARAM_TYPE(&pInput[1]), colDataGetData(pInput[1].columnData, i));
|
||||
GET_TYPED_DATA(count, int32_t, GET_PARAM_TYPE(&pInput[1]), colDataGetData(pInput[1].columnData, i),
|
||||
typeGetTypeModFromColInfo(&pInput[1].columnData->info));
|
||||
if (count <= 0) {
|
||||
varDataSetLen(output, 0);
|
||||
SCL_ERR_JRET(colDataSetVal(pOutputData, i, outputBuf, false));
|
||||
|
@ -1783,7 +1788,8 @@ int32_t repeatFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu
|
|||
continue;
|
||||
}
|
||||
int32_t count = 0;
|
||||
GET_TYPED_DATA(count, int32_t, GET_PARAM_TYPE(&pInput[1]), colDataGetData(pInput[1].columnData, i));
|
||||
GET_TYPED_DATA(count, int32_t, GET_PARAM_TYPE(&pInput[1]), colDataGetData(pInput[1].columnData, i),
|
||||
typeGetTypeModFromColInfo(&pInput[1].columnData->info));
|
||||
if (count <= 0) {
|
||||
varDataSetLen(output, 0);
|
||||
SCL_ERR_JRET(colDataSetVal(pOutputData, i, outputBuf, false));
|
||||
|
@ -1806,7 +1812,8 @@ int32_t repeatFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu
|
|||
continue;
|
||||
}
|
||||
int32_t count = 0;
|
||||
GET_TYPED_DATA(count, int32_t, GET_PARAM_TYPE(&pInput[1]), colDataGetData(pInput[1].columnData, 0));
|
||||
GET_TYPED_DATA(count, int32_t, GET_PARAM_TYPE(&pInput[1]), colDataGetData(pInput[1].columnData, 0),
|
||||
typeGetTypeModFromColInfo(&pInput[1].columnData->info));
|
||||
if (count <= 0) {
|
||||
varDataSetLen(output, 0);
|
||||
SCL_ERR_JRET(colDataSetVal(pOutputData, i, outputBuf, false));
|
||||
|
@ -1868,7 +1875,7 @@ int32_t castFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
convBuf[len] = 0;
|
||||
*(int8_t *)output = taosStr2Int8(convBuf, NULL, 10);
|
||||
} else {
|
||||
GET_TYPED_DATA(*(int8_t *)output, int8_t, inputType, input);
|
||||
GET_TYPED_DATA(*(int8_t *)output, int8_t, inputType, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1886,7 +1893,7 @@ int32_t castFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
convBuf[len] = 0;
|
||||
*(int16_t *)output = taosStr2Int16(convBuf, NULL, 10);
|
||||
} else {
|
||||
GET_TYPED_DATA(*(int16_t *)output, int16_t, inputType, input);
|
||||
GET_TYPED_DATA(*(int16_t *)output, int16_t, inputType, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1905,7 +1912,7 @@ int32_t castFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
convBuf[len] = 0;
|
||||
*(int32_t *)output = taosStr2Int32(convBuf, NULL, 10);
|
||||
} else {
|
||||
GET_TYPED_DATA(*(int32_t *)output, int32_t, inputType, input);
|
||||
GET_TYPED_DATA(*(int32_t *)output, int32_t, inputType, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1923,7 +1930,7 @@ int32_t castFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
convBuf[len] = 0;
|
||||
*(int64_t *)output = taosStr2Int64(convBuf, NULL, 10);
|
||||
} else {
|
||||
GET_TYPED_DATA(*(int64_t *)output, int64_t, inputType, input);
|
||||
GET_TYPED_DATA(*(int64_t *)output, int64_t, inputType, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1941,7 +1948,7 @@ int32_t castFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
convBuf[len] = 0;
|
||||
*(uint8_t *)output = taosStr2UInt8(convBuf, NULL, 10);
|
||||
} else {
|
||||
GET_TYPED_DATA(*(uint8_t *)output, uint8_t, inputType, input);
|
||||
GET_TYPED_DATA(*(uint8_t *)output, uint8_t, inputType, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1959,7 +1966,7 @@ int32_t castFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
convBuf[len] = 0;
|
||||
*(uint16_t *)output = taosStr2UInt16(convBuf, NULL, 10);
|
||||
} else {
|
||||
GET_TYPED_DATA(*(uint16_t *)output, uint16_t, inputType, input);
|
||||
GET_TYPED_DATA(*(uint16_t *)output, uint16_t, inputType, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1977,7 +1984,7 @@ int32_t castFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
convBuf[len] = 0;
|
||||
*(uint32_t *)output = taosStr2UInt32(convBuf, NULL, 10);
|
||||
} else {
|
||||
GET_TYPED_DATA(*(uint32_t *)output, uint32_t, inputType, input);
|
||||
GET_TYPED_DATA(*(uint32_t *)output, uint32_t, inputType, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1996,7 +2003,7 @@ int32_t castFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
convBuf[len] = 0;
|
||||
*(uint64_t *)output = taosStr2UInt64(convBuf, NULL, 10);
|
||||
} else {
|
||||
GET_TYPED_DATA(*(uint64_t *)output, uint64_t, inputType, input);
|
||||
GET_TYPED_DATA(*(uint64_t *)output, uint64_t, inputType, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -2014,7 +2021,7 @@ int32_t castFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
convBuf[len] = 0;
|
||||
*(float *)output = taosStr2Float(convBuf, NULL);
|
||||
} else {
|
||||
GET_TYPED_DATA(*(float *)output, float, inputType, input);
|
||||
GET_TYPED_DATA(*(float *)output, float, inputType, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -2032,7 +2039,7 @@ int32_t castFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
convBuf[len] = 0;
|
||||
*(double *)output = taosStr2Double(convBuf, NULL);
|
||||
} else {
|
||||
GET_TYPED_DATA(*(double *)output, double, inputType, input);
|
||||
GET_TYPED_DATA(*(double *)output, double, inputType, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -2050,7 +2057,7 @@ int32_t castFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
convBuf[len] = 0;
|
||||
*(bool *)output = taosStr2Int8(convBuf, NULL, 10);
|
||||
} else {
|
||||
GET_TYPED_DATA(*(bool *)output, bool, inputType, input);
|
||||
GET_TYPED_DATA(*(bool *)output, bool, inputType, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -2058,7 +2065,7 @@ int32_t castFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
int64_t timeVal;
|
||||
if (inputType == TSDB_DATA_TYPE_BINARY || inputType == TSDB_DATA_TYPE_NCHAR) {
|
||||
int64_t timePrec;
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[1]), pInput[1].columnData->pData);
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[1]), pInput[1].columnData->pData, typeGetTypeModFromColInfo(&pInput[1].columnData->info));
|
||||
int32_t ret = convertStringToTimestamp(inputType, input, timePrec, &timeVal, pInput->tz, pInput->charsetCxt);
|
||||
if (ret != TSDB_CODE_SUCCESS) {
|
||||
*(int64_t *)output = 0;
|
||||
|
@ -2066,7 +2073,7 @@ int32_t castFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
*(int64_t *)output = timeVal;
|
||||
}
|
||||
} else {
|
||||
GET_TYPED_DATA(*(int64_t *)output, int64_t, inputType, input);
|
||||
GET_TYPED_DATA(*(int64_t *)output, int64_t, inputType, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -2225,7 +2232,7 @@ int32_t toISO8601Function(SScalarParam *pInput, int32_t inputNum, SScalarParam *
|
|||
int64_t quot = 0;
|
||||
long mod = 0;
|
||||
|
||||
GET_TYPED_DATA(timeVal, int64_t, type, input);
|
||||
GET_TYPED_DATA(timeVal, int64_t, type, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
|
||||
switch (pInput->columnData[0].info.precision) {
|
||||
case TSDB_TIME_PRECISION_MILLI: {
|
||||
|
@ -2298,7 +2305,8 @@ int32_t toUnixtimestampFunction(SScalarParam *pInput, int32_t inputNum, SScalarP
|
|||
int32_t type = GET_PARAM_TYPE(pInput);
|
||||
int64_t timePrec;
|
||||
int32_t idx = (inputNum == 2) ? 1 : 2;
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[idx]), pInput[idx].columnData->pData);
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[idx]), pInput[idx].columnData->pData,
|
||||
typeGetTypeModFromColInfo(&pInput[idx].columnData->info));
|
||||
|
||||
for (int32_t i = 0; i < pInput[0].numOfRows; ++i) {
|
||||
if (colDataIsNull_s(pInput[0].columnData, i)) {
|
||||
|
@ -2477,16 +2485,19 @@ int32_t timeTruncateFunction(SScalarParam *pInput, int32_t inputNum, SScalarPara
|
|||
bool ignoreTz = true;
|
||||
char timezoneStr[20] = {0};
|
||||
|
||||
GET_TYPED_DATA(timeUnit, int64_t, GET_PARAM_TYPE(&pInput[1]), pInput[1].columnData->pData);
|
||||
GET_TYPED_DATA(timeUnit, int64_t, GET_PARAM_TYPE(&pInput[1]), pInput[1].columnData->pData,
|
||||
typeGetTypeModFromColInfo(&pInput[1].columnData->info));
|
||||
|
||||
int32_t timePrecIdx = 2, timeZoneIdx = 3;
|
||||
if (inputNum == 5) {
|
||||
timePrecIdx += 1;
|
||||
timeZoneIdx += 1;
|
||||
GET_TYPED_DATA(ignoreTz, bool, GET_PARAM_TYPE(&pInput[2]), pInput[2].columnData->pData);
|
||||
GET_TYPED_DATA(ignoreTz, bool, GET_PARAM_TYPE(&pInput[2]), pInput[2].columnData->pData,
|
||||
typeGetTypeModFromColInfo(&pInput[2].columnData->info));
|
||||
}
|
||||
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[timePrecIdx]), pInput[timePrecIdx].columnData->pData);
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[timePrecIdx]), pInput[timePrecIdx].columnData->pData,
|
||||
typeGetTypeModFromColInfo(&pInput[timePrecIdx].columnData->info));
|
||||
(void)memcpy(timezoneStr, varDataVal(pInput[timeZoneIdx].columnData->pData), varDataLen(pInput[timeZoneIdx].columnData->pData));
|
||||
|
||||
for (int32_t i = 0; i < pInput[0].numOfRows; ++i) {
|
||||
|
@ -2504,9 +2515,9 @@ int32_t timeTruncateFunction(SScalarParam *pInput, int32_t inputNum, SScalarPara
|
|||
continue;
|
||||
}
|
||||
} else if (type == TSDB_DATA_TYPE_BIGINT) { /* unix timestamp */
|
||||
GET_TYPED_DATA(timeVal, int64_t, type, input);
|
||||
GET_TYPED_DATA(timeVal, int64_t, type, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
} else if (type == TSDB_DATA_TYPE_TIMESTAMP) { /* timestamp column*/
|
||||
GET_TYPED_DATA(timeVal, int64_t, type, input);
|
||||
GET_TYPED_DATA(timeVal, int64_t, type, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
}
|
||||
|
||||
char buf[20] = {0};
|
||||
|
@ -2530,10 +2541,13 @@ int32_t timeTruncateFunction(SScalarParam *pInput, int32_t inputNum, SScalarPara
|
|||
int32_t timeDiffFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
int64_t timeUnit = -1, timePrec, timeVal[2] = {0};
|
||||
if (inputNum == 4) {
|
||||
GET_TYPED_DATA(timeUnit, int64_t, GET_PARAM_TYPE(&pInput[2]), pInput[2].columnData->pData);
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[3]), pInput[3].columnData->pData);
|
||||
GET_TYPED_DATA(timeUnit, int64_t, GET_PARAM_TYPE(&pInput[2]), pInput[2].columnData->pData,
|
||||
typeGetTypeModFromColInfo(&pInput[2].columnData->info));
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[3]), pInput[3].columnData->pData,
|
||||
typeGetTypeModFromColInfo(&pInput[3].columnData->info));
|
||||
} else {
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[2]), pInput[2].columnData->pData);
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[2]), pInput[2].columnData->pData,
|
||||
typeGetTypeModFromColInfo(&pInput[2].columnData->info));
|
||||
}
|
||||
|
||||
int64_t factor = TSDB_TICK_PER_SECOND(timePrec);
|
||||
|
@ -2564,7 +2578,7 @@ int32_t timeDiffFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *p
|
|||
break;
|
||||
}
|
||||
} else if (type == TSDB_DATA_TYPE_BIGINT || type == TSDB_DATA_TYPE_TIMESTAMP) { /* unix timestamp or ts column*/
|
||||
GET_TYPED_DATA(timeVal[k], int64_t, type, input[k]);
|
||||
GET_TYPED_DATA(timeVal[k], int64_t, type, input[k], typeGetTypeModFromColInfo(&pInput[k].columnData->info));
|
||||
if (type == TSDB_DATA_TYPE_TIMESTAMP) {
|
||||
int64_t timeValSec = timeVal[k] / factor;
|
||||
if (timeValSec < 1000000000) {
|
||||
|
@ -2663,7 +2677,8 @@ int32_t timeDiffFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *p
|
|||
|
||||
int32_t nowFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
int64_t timePrec;
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[0]), pInput[0].columnData->pData);
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[0]), pInput[0].columnData->pData,
|
||||
typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
|
||||
int64_t ts = taosGetTimestamp(timePrec);
|
||||
for (int32_t i = 0; i < pInput->numOfRows; ++i) {
|
||||
|
@ -2675,7 +2690,8 @@ int32_t nowFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutpu
|
|||
|
||||
int32_t todayFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
int64_t timePrec;
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[0]), pInput[0].columnData->pData);
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[0]), pInput[0].columnData->pData,
|
||||
typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
|
||||
int64_t ts = taosGetTimestampToday(timePrec, pInput->tz);
|
||||
for (int32_t i = 0; i < pInput->numOfRows; ++i) {
|
||||
|
@ -2711,7 +2727,8 @@ int32_t weekdayFunctionImpl(SScalarParam *pInput, int32_t inputNum, SScalarParam
|
|||
|
||||
int64_t timePrec, timeVal = 0;
|
||||
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[1]), pInput[1].columnData->pData);
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[1]), pInput[1].columnData->pData,
|
||||
typeGetTypeModFromColInfo(&pInput[1].columnData->info));
|
||||
|
||||
for (int32_t i = 0; i < pInput[0].numOfRows; ++i) {
|
||||
if (colDataIsNull_s(pInput[0].columnData, i)) {
|
||||
|
@ -2728,9 +2745,9 @@ int32_t weekdayFunctionImpl(SScalarParam *pInput, int32_t inputNum, SScalarParam
|
|||
continue;
|
||||
}
|
||||
} else if (type == TSDB_DATA_TYPE_BIGINT) { /* unix timestamp */
|
||||
GET_TYPED_DATA(timeVal, int64_t, type, input);
|
||||
GET_TYPED_DATA(timeVal, int64_t, type, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
} else if (type == TSDB_DATA_TYPE_TIMESTAMP) { /* timestamp column*/
|
||||
GET_TYPED_DATA(timeVal, int64_t, type, input);
|
||||
GET_TYPED_DATA(timeVal, int64_t, type, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
}
|
||||
struct STm tm;
|
||||
TAOS_CHECK_RETURN(taosTs2Tm(timeVal, timePrec, &tm, pInput->tz));
|
||||
|
@ -2838,9 +2855,9 @@ int32_t weekFunctionImpl(SScalarParam *pInput, int32_t inputNum, SScalarParam *p
|
|||
continue;
|
||||
}
|
||||
} else if (type == TSDB_DATA_TYPE_BIGINT) { /* unix timestamp */
|
||||
GET_TYPED_DATA(timeVal, int64_t, type, input);
|
||||
GET_TYPED_DATA(timeVal, int64_t, type, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
} else if (type == TSDB_DATA_TYPE_TIMESTAMP) { /* timestamp column*/
|
||||
GET_TYPED_DATA(timeVal, int64_t, type, input);
|
||||
GET_TYPED_DATA(timeVal, int64_t, type, input, typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
}
|
||||
struct STm tm;
|
||||
SCL_ERR_RET(taosTs2Tm(timeVal, prec, &tm, pInput->tz));
|
||||
|
@ -2857,18 +2874,22 @@ int32_t weekFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
int64_t timePrec;
|
||||
int32_t mode = 0;
|
||||
if (inputNum == 2) {
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[1]), pInput[1].columnData->pData);
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[1]), pInput[1].columnData->pData,
|
||||
typeGetTypeModFromColInfo(&pInput[1].columnData->info));
|
||||
return weekFunctionImpl(pInput, inputNum, pOutput, timePrec, mode);
|
||||
} else {
|
||||
GET_TYPED_DATA(mode, int32_t , GET_PARAM_TYPE(&pInput[1]), pInput[1].columnData->pData);
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[2]), pInput[2].columnData->pData);
|
||||
GET_TYPED_DATA(mode, int32_t, GET_PARAM_TYPE(&pInput[1]), pInput[1].columnData->pData,
|
||||
typeGetTypeModFromColInfo(&pInput[1].columnData->info));
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[2]), pInput[2].columnData->pData,
|
||||
typeGetTypeModFromColInfo(&pInput[2].columnData->info));
|
||||
return weekFunctionImpl(pInput, inputNum, pOutput, timePrec, mode);
|
||||
}
|
||||
}
|
||||
|
||||
int32_t weekofyearFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
int64_t timePrec;
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[1]), pInput[1].columnData->pData);
|
||||
GET_TYPED_DATA(timePrec, int64_t, GET_PARAM_TYPE(&pInput[1]), pInput[1].columnData->pData,
|
||||
typeGetTypeModFromColInfo(&pInput[1].columnData->info));
|
||||
return weekFunctionImpl(pInput, inputNum, pOutput, timePrec, 3);
|
||||
}
|
||||
|
||||
|
@ -2927,7 +2948,8 @@ int32_t randFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
// for constant seed, only set seed once
|
||||
if ((pInput[0].numOfRows == 1 && i == 0) || (pInput[0].numOfRows != 1)) {
|
||||
if (!IS_NULL_TYPE(GET_PARAM_TYPE(&pInput[0])) && !colDataIsNull_s(pInput[0].columnData, i)) {
|
||||
GET_TYPED_DATA(seed, int32_t, GET_PARAM_TYPE(&pInput[0]), colDataGetData(pInput[0].columnData, i));
|
||||
GET_TYPED_DATA(seed, int32_t, GET_PARAM_TYPE(&pInput[0]), colDataGetData(pInput[0].columnData, i),
|
||||
typeGetTypeModFromColInfo(&pInput[0].columnData->info));
|
||||
taosSeedRand(seed);
|
||||
}
|
||||
}
|
||||
|
@ -3016,7 +3038,8 @@ static int32_t doScalarFunction2(SScalarParam *pInput, int32_t inputNum, SScalar
|
|||
continue;
|
||||
}
|
||||
double in2;
|
||||
GET_TYPED_DATA(in2, double, GET_PARAM_TYPE(&pInput[1]), colDataGetData(pInputData[1], colIdx2));
|
||||
GET_TYPED_DATA(in2, double, GET_PARAM_TYPE(&pInput[1]), colDataGetData(pInputData[1], colIdx2),
|
||||
typeGetTypeModFromColInfo(&pInputData[1]->info));
|
||||
switch (GET_PARAM_TYPE(&pInput[0])) {
|
||||
case TSDB_DATA_TYPE_DOUBLE: {
|
||||
double *in = (double *)pInputData[0]->pData;
|
||||
|
@ -3654,8 +3677,10 @@ int32_t leastSQRScalarFunction(SScalarParam *pInput, int32_t inputNum, SScalarPa
|
|||
|
||||
double startVal, stepVal;
|
||||
double matrix[2][3] = {0};
|
||||
GET_TYPED_DATA(startVal, double, GET_PARAM_TYPE(&pInput[1]), pInput[1].columnData->pData);
|
||||
GET_TYPED_DATA(stepVal, double, GET_PARAM_TYPE(&pInput[2]), pInput[2].columnData->pData);
|
||||
GET_TYPED_DATA(startVal, double, GET_PARAM_TYPE(&pInput[1]), pInput[1].columnData->pData,
|
||||
typeGetTypeModFromColInfo(&pInput[1].columnData->info));
|
||||
GET_TYPED_DATA(stepVal, double, GET_PARAM_TYPE(&pInput[2]), pInput[2].columnData->pData,
|
||||
typeGetTypeModFromColInfo(&pInput[2].columnData->info));
|
||||
|
||||
int32_t type = GET_PARAM_TYPE(pInput);
|
||||
int64_t count = 0;
|
||||
|
@ -3831,7 +3856,7 @@ int32_t percentileScalarFunction(SScalarParam *pInput, int32_t inputNum, SScalar
|
|||
break;
|
||||
}
|
||||
char *in = pInputData->pData;
|
||||
GET_TYPED_DATA(val, double, type, in);
|
||||
GET_TYPED_DATA(val, double, type, in, typeGetTypeModFromColInfo(&pInputData->info));
|
||||
}
|
||||
|
||||
if (hasNull) {
|
||||
|
@ -3868,7 +3893,7 @@ int32_t spreadScalarFunction(SScalarParam *pInput, int32_t inputNum, SScalarPara
|
|||
char *in = pInputData->pData;
|
||||
|
||||
double val = 0;
|
||||
GET_TYPED_DATA(val, double, type, in);
|
||||
GET_TYPED_DATA(val, double, type, in, typeGetTypeModFromColInfo(&pInputData->info));
|
||||
|
||||
if (val < GET_DOUBLE_VAL(&min)) {
|
||||
SET_DOUBLE_VAL(&min, val);
|
||||
|
@ -4339,7 +4364,7 @@ int32_t histogramScalarFunction(SScalarParam *pInput, int32_t inputNum, SScalarP
|
|||
|
||||
char *data = colDataGetData(pInputData, i);
|
||||
double v;
|
||||
GET_TYPED_DATA(v, double, type, data);
|
||||
GET_TYPED_DATA(v, double, type, data, typeGetTypeModFromColInfo(&pInputData->info));
|
||||
|
||||
for (int32_t k = 0; k < numOfBins; ++k) {
|
||||
if (v > bins[k].lower && v <= bins[k].upper) {
|
||||
|
|
|
@ -50,48 +50,48 @@ static int32_t vectorMathOpForDecimal(SScalarParam *pLeft, SScalarParam *pRight,
|
|||
int32_t convertNumberToNumber(const void *inData, void *outData, int8_t inType, int8_t outType) {
|
||||
switch (outType) {
|
||||
case TSDB_DATA_TYPE_BOOL: {
|
||||
GET_TYPED_DATA(*((bool *)outData), bool, inType, inData);
|
||||
GET_TYPED_DATA(*((bool *)outData), bool, inType, inData, 0);
|
||||
break;
|
||||
}
|
||||
case TSDB_DATA_TYPE_TINYINT: {
|
||||
GET_TYPED_DATA(*((int8_t *)outData), int8_t, inType, inData);
|
||||
GET_TYPED_DATA(*((int8_t *)outData), int8_t, inType, inData, 0);
|
||||
break;
|
||||
}
|
||||
case TSDB_DATA_TYPE_SMALLINT: {
|
||||
GET_TYPED_DATA(*((int16_t *)outData), int16_t, inType, inData);
|
||||
GET_TYPED_DATA(*((int16_t *)outData), int16_t, inType, inData, 0);
|
||||
break;
|
||||
}
|
||||
case TSDB_DATA_TYPE_INT: {
|
||||
GET_TYPED_DATA(*((int32_t *)outData), int32_t, inType, inData);
|
||||
GET_TYPED_DATA(*((int32_t *)outData), int32_t, inType, inData, 0);
|
||||
break;
|
||||
}
|
||||
case TSDB_DATA_TYPE_BIGINT:
|
||||
case TSDB_DATA_TYPE_TIMESTAMP: {
|
||||
GET_TYPED_DATA(*((int64_t *)outData), int64_t, inType, inData);
|
||||
GET_TYPED_DATA(*((int64_t *)outData), int64_t, inType, inData, 0);
|
||||
break;
|
||||
}
|
||||
case TSDB_DATA_TYPE_UTINYINT: {
|
||||
GET_TYPED_DATA(*((uint8_t *)outData), uint8_t, inType, inData);
|
||||
GET_TYPED_DATA(*((uint8_t *)outData), uint8_t, inType, inData, 0);
|
||||
break;
|
||||
}
|
||||
case TSDB_DATA_TYPE_USMALLINT: {
|
||||
GET_TYPED_DATA(*((uint16_t *)outData), uint16_t, inType, inData);
|
||||
GET_TYPED_DATA(*((uint16_t *)outData), uint16_t, inType, inData, 0);
|
||||
break;
|
||||
}
|
||||
case TSDB_DATA_TYPE_UINT: {
|
||||
GET_TYPED_DATA(*((uint32_t *)outData), uint32_t, inType, inData);
|
||||
GET_TYPED_DATA(*((uint32_t *)outData), uint32_t, inType, inData, 0);
|
||||
break;
|
||||
}
|
||||
case TSDB_DATA_TYPE_UBIGINT: {
|
||||
GET_TYPED_DATA(*((uint64_t *)outData), uint64_t, inType, inData);
|
||||
GET_TYPED_DATA(*((uint64_t *)outData), uint64_t, inType, inData, 0);
|
||||
break;
|
||||
}
|
||||
case TSDB_DATA_TYPE_FLOAT: {
|
||||
GET_TYPED_DATA(*((float *)outData), float, inType, inData);
|
||||
GET_TYPED_DATA(*((float *)outData), float, inType, inData, 0);
|
||||
break;
|
||||
}
|
||||
case TSDB_DATA_TYPE_DOUBLE: {
|
||||
GET_TYPED_DATA(*((double *)outData), double, inType, inData);
|
||||
GET_TYPED_DATA(*((double *)outData), double, inType, inData, 0);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
|
@ -737,7 +737,7 @@ int32_t vectorConvertToVarData(SSclVectorConvCtx *pCtx) {
|
|||
}
|
||||
|
||||
int64_t value = 0;
|
||||
GET_TYPED_DATA(value, int64_t, pCtx->inType, colDataGetData(pInputCol, i));
|
||||
GET_TYPED_DATA(value, int64_t, pCtx->inType, colDataGetData(pInputCol, i), typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
int32_t len = tsnprintf(varDataVal(tmp), sizeof(tmp) - VARSTR_HEADER_SIZE, "%" PRId64, value);
|
||||
varDataLen(tmp) = len;
|
||||
if (pCtx->outType == TSDB_DATA_TYPE_NCHAR) {
|
||||
|
@ -754,7 +754,7 @@ int32_t vectorConvertToVarData(SSclVectorConvCtx *pCtx) {
|
|||
}
|
||||
|
||||
uint64_t value = 0;
|
||||
GET_TYPED_DATA(value, uint64_t, pCtx->inType, colDataGetData(pInputCol, i));
|
||||
GET_TYPED_DATA(value, uint64_t, pCtx->inType, colDataGetData(pInputCol, i), typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
int32_t len = tsnprintf(varDataVal(tmp), sizeof(tmp) - VARSTR_HEADER_SIZE, "%" PRIu64, value);
|
||||
varDataLen(tmp) = len;
|
||||
if (pCtx->outType == TSDB_DATA_TYPE_NCHAR) {
|
||||
|
@ -771,7 +771,7 @@ int32_t vectorConvertToVarData(SSclVectorConvCtx *pCtx) {
|
|||
}
|
||||
|
||||
double value = 0;
|
||||
GET_TYPED_DATA(value, double, pCtx->inType, colDataGetData(pInputCol, i));
|
||||
GET_TYPED_DATA(value, double, pCtx->inType, colDataGetData(pInputCol, i), typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
int32_t len = tsnprintf(varDataVal(tmp), sizeof(tmp) - VARSTR_HEADER_SIZE, "%lf", value);
|
||||
varDataLen(tmp) = len;
|
||||
if (pCtx->outType == TSDB_DATA_TYPE_NCHAR) {
|
||||
|
@ -820,7 +820,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam *pIn, SScalarParam *pOut,
|
|||
int64_t maxValue = tDataTypes[cCtx.outType].maxValue;
|
||||
|
||||
double value = 0;
|
||||
GET_TYPED_DATA(value, double, cCtx.inType, colDataGetData(pInputCol, 0));
|
||||
GET_TYPED_DATA(value, double, cCtx.inType, colDataGetData(pInputCol, 0), typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
|
||||
if (value > maxValue) {
|
||||
*overflow = 1;
|
||||
|
@ -836,7 +836,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam *pIn, SScalarParam *pOut,
|
|||
uint64_t maxValue = (uint64_t)tDataTypes[cCtx.outType].maxValue;
|
||||
|
||||
double value = 0;
|
||||
GET_TYPED_DATA(value, double, cCtx.inType, colDataGetData(pInputCol, 0));
|
||||
GET_TYPED_DATA(value, double, cCtx.inType, colDataGetData(pInputCol, 0), typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
|
||||
if (value > maxValue) {
|
||||
*overflow = 1;
|
||||
|
@ -860,7 +860,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam *pIn, SScalarParam *pOut,
|
|||
}
|
||||
|
||||
bool value = 0;
|
||||
GET_TYPED_DATA(value, bool, cCtx.inType, colDataGetData(pInputCol, i));
|
||||
GET_TYPED_DATA(value, bool, cCtx.inType, colDataGetData(pInputCol, i), typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
colDataSetInt8(pOutputCol, i, (int8_t *)&value);
|
||||
}
|
||||
break;
|
||||
|
@ -873,7 +873,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam *pIn, SScalarParam *pOut,
|
|||
}
|
||||
|
||||
int8_t value = 0;
|
||||
GET_TYPED_DATA(value, int8_t, cCtx.inType, colDataGetData(pInputCol, i));
|
||||
GET_TYPED_DATA(value, int8_t, cCtx.inType, colDataGetData(pInputCol, i), typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
colDataSetInt8(pOutputCol, i, (int8_t *)&value);
|
||||
}
|
||||
break;
|
||||
|
@ -886,7 +886,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam *pIn, SScalarParam *pOut,
|
|||
}
|
||||
|
||||
int16_t value = 0;
|
||||
GET_TYPED_DATA(value, int16_t, cCtx.inType, colDataGetData(pInputCol, i));
|
||||
GET_TYPED_DATA(value, int16_t, cCtx.inType, colDataGetData(pInputCol, i), typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
colDataSetInt16(pOutputCol, i, (int16_t *)&value);
|
||||
}
|
||||
break;
|
||||
|
@ -899,7 +899,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam *pIn, SScalarParam *pOut,
|
|||
}
|
||||
|
||||
int32_t value = 0;
|
||||
GET_TYPED_DATA(value, int32_t, cCtx.inType, colDataGetData(pInputCol, i));
|
||||
GET_TYPED_DATA(value, int32_t, cCtx.inType, colDataGetData(pInputCol, i), typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
colDataSetInt32(pOutputCol, i, (int32_t *)&value);
|
||||
}
|
||||
break;
|
||||
|
@ -913,7 +913,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam *pIn, SScalarParam *pOut,
|
|||
}
|
||||
|
||||
int64_t value = 0;
|
||||
GET_TYPED_DATA(value, int64_t, cCtx.inType, colDataGetData(pInputCol, i));
|
||||
GET_TYPED_DATA(value, int64_t, cCtx.inType, colDataGetData(pInputCol, i), typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
colDataSetInt64(pOutputCol, i, (int64_t *)&value);
|
||||
}
|
||||
break;
|
||||
|
@ -926,7 +926,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam *pIn, SScalarParam *pOut,
|
|||
}
|
||||
|
||||
uint8_t value = 0;
|
||||
GET_TYPED_DATA(value, uint8_t, cCtx.inType, colDataGetData(pInputCol, i));
|
||||
GET_TYPED_DATA(value, uint8_t, cCtx.inType, colDataGetData(pInputCol, i), typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
colDataSetInt8(pOutputCol, i, (int8_t *)&value);
|
||||
}
|
||||
break;
|
||||
|
@ -939,7 +939,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam *pIn, SScalarParam *pOut,
|
|||
}
|
||||
|
||||
uint16_t value = 0;
|
||||
GET_TYPED_DATA(value, uint16_t, cCtx.inType, colDataGetData(pInputCol, i));
|
||||
GET_TYPED_DATA(value, uint16_t, cCtx.inType, colDataGetData(pInputCol, i), typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
colDataSetInt16(pOutputCol, i, (int16_t *)&value);
|
||||
}
|
||||
break;
|
||||
|
@ -952,7 +952,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam *pIn, SScalarParam *pOut,
|
|||
}
|
||||
|
||||
uint32_t value = 0;
|
||||
GET_TYPED_DATA(value, uint32_t, cCtx.inType, colDataGetData(pInputCol, i));
|
||||
GET_TYPED_DATA(value, uint32_t, cCtx.inType, colDataGetData(pInputCol, i), typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
colDataSetInt32(pOutputCol, i, (int32_t *)&value);
|
||||
}
|
||||
break;
|
||||
|
@ -965,7 +965,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam *pIn, SScalarParam *pOut,
|
|||
}
|
||||
|
||||
uint64_t value = 0;
|
||||
GET_TYPED_DATA(value, uint64_t, cCtx.inType, colDataGetData(pInputCol, i));
|
||||
GET_TYPED_DATA(value, uint64_t, cCtx.inType, colDataGetData(pInputCol, i), typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
colDataSetInt64(pOutputCol, i, (int64_t *)&value);
|
||||
}
|
||||
break;
|
||||
|
@ -978,7 +978,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam *pIn, SScalarParam *pOut,
|
|||
}
|
||||
|
||||
float value = 0;
|
||||
GET_TYPED_DATA(value, float, cCtx.inType, colDataGetData(pInputCol, i));
|
||||
GET_TYPED_DATA(value, float, cCtx.inType, colDataGetData(pInputCol, i), typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
colDataSetFloat(pOutputCol, i, (float *)&value);
|
||||
}
|
||||
break;
|
||||
|
@ -991,7 +991,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam *pIn, SScalarParam *pOut,
|
|||
}
|
||||
|
||||
double value = 0;
|
||||
GET_TYPED_DATA(value, double, cCtx.inType, colDataGetData(pInputCol, i));
|
||||
GET_TYPED_DATA(value, double, cCtx.inType, colDataGetData(pInputCol, i), typeGetTypeModFromColInfo(&pInputCol->info));
|
||||
colDataSetDouble(pOutputCol, i, (double *)&value);
|
||||
}
|
||||
break;
|
||||
|
@ -2075,7 +2075,7 @@ int32_t vectorIsTrue(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *pO
|
|||
}
|
||||
{
|
||||
bool v = false;
|
||||
GET_TYPED_DATA(v, bool, pOut->columnData->info.type, colDataGetData(pOut->columnData, i));
|
||||
GET_TYPED_DATA(v, bool, pOut->columnData->info.type, colDataGetData(pOut->columnData, i), typeGetTypeModFromColInfo(&pOut->columnData->info));
|
||||
if (v) {
|
||||
++pOut->numOfQualified;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue