fix binary interp function
This commit is contained in:
parent
fb6dff3a1d
commit
2db8feb744
|
@ -3790,11 +3790,37 @@ static void interp_function_impl(SQLFunctionCtx *pCtx) {
|
|||
static void interp_function(SQLFunctionCtx *pCtx) {
|
||||
// at this point, the value is existed, return directly
|
||||
if (pCtx->size > 0) {
|
||||
// impose the timestamp check
|
||||
TSKEY key = GET_TS_DATA(pCtx, 0);
|
||||
bool ascQuery = (pCtx->order == TSDB_ORDER_ASC);
|
||||
TSKEY key;
|
||||
char *pData;
|
||||
int32_t typedData = 0;
|
||||
|
||||
if (ascQuery) {
|
||||
key = GET_TS_DATA(pCtx, 0);
|
||||
pData = GET_INPUT_DATA(pCtx, 0);
|
||||
} else {
|
||||
key = pCtx->start.key;
|
||||
if (key == INT64_MIN) {
|
||||
key = GET_TS_DATA(pCtx, 0);
|
||||
pData = GET_INPUT_DATA(pCtx, 0);
|
||||
} else {
|
||||
if (!(IS_NUMERIC_TYPE(pCtx->inputType) || pCtx->inputType == TSDB_DATA_TYPE_BOOL)) {
|
||||
pData = pCtx->start.ptr;
|
||||
} else {
|
||||
typedData = 1;
|
||||
pData = (char *)&pCtx->start.val;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//if (key == pCtx->startTs && (ascQuery || !(IS_NUMERIC_TYPE(pCtx->inputType) || pCtx->inputType == TSDB_DATA_TYPE_BOOL))) {
|
||||
if (key == pCtx->startTs) {
|
||||
char *pData = GET_INPUT_DATA(pCtx, 0);
|
||||
assignVal(pCtx->pOutput, pData, pCtx->inputBytes, pCtx->inputType);
|
||||
if (typedData) {
|
||||
SET_TYPED_DATA(pCtx->pOutput, pCtx->inputType, *(double *)pData);
|
||||
} else {
|
||||
assignVal(pCtx->pOutput, pData, pCtx->inputBytes, pCtx->inputType);
|
||||
}
|
||||
|
||||
SET_VAL(pCtx, 1, 1);
|
||||
} else {
|
||||
interp_function_impl(pCtx);
|
||||
|
|
|
@ -1327,6 +1327,16 @@ void doTimeWindowInterpolation(SOperatorInfo* pOperator, SOptrBasicInfo* pInfo,
|
|||
|
||||
pCtx[k].end.key = curTs;
|
||||
pCtx[k].end.val = v2;
|
||||
|
||||
if (pColInfo->info.type == TSDB_DATA_TYPE_BINARY || pColInfo->info.type == TSDB_DATA_TYPE_NCHAR) {
|
||||
if (prevRowIndex == -1) {
|
||||
pCtx[k].start.ptr = (char *)pRuntimeEnv->prevRow[index];
|
||||
} else {
|
||||
pCtx[k].start.ptr = (char *)pColInfo->pData + prevRowIndex * pColInfo->info.bytes;
|
||||
}
|
||||
|
||||
pCtx[k].end.ptr = (char *)pColInfo->pData + curRowIndex * pColInfo->info.bytes;
|
||||
}
|
||||
}
|
||||
} else if (functionId == TSDB_FUNC_TWA) {
|
||||
SPoint point1 = (SPoint){.key = prevTs, .val = &v1};
|
||||
|
|
Loading…
Reference in New Issue