fix: timestamp add return float when get time range

This commit is contained in:
shenglian zhou 2023-09-27 15:39:43 +08:00 committed by slzhou
parent af009a2390
commit d5df76fc8c
1 changed files with 19 additions and 12 deletions

View File

@ -3983,18 +3983,14 @@ _return:
return code;
}
static int32_t fltSclGetDatumValueFromPoint(SFltSclPoint *point, SFltSclDatum *d) {
static int32_t fltSclGetTimeStampDatum(SFltSclPoint *point, SFltSclDatum *d) {
*d = point->val;
if (point->val.kind == FLT_SCL_DATUM_KIND_NULL) {
return TSDB_CODE_SUCCESS;
}
if (point->val.kind == FLT_SCL_DATUM_KIND_MAX) {
getDataMax(d->type.type, &(d->i));
} else if (point->val.kind == FLT_SCL_DATUM_KIND_MIN) {
getDataMin(d->type.type, &(d->i));
}
if (IS_INTEGER_TYPE(d->type.type) || IS_TIMESTAMP_TYPE(d->type.type)) {
if (point->val.kind == FLT_SCL_DATUM_KIND_MAX) {
getDataMax(point->val.type.type, &(d->i));
} else if (point->val.kind == FLT_SCL_DATUM_KIND_MIN) {
getDataMin(point->val.type.type, &(d->i));
} else if (point->val.kind == FLT_SCL_DATUM_KIND_INT64) {
if (point->excl) {
if (point->start) {
++d->i;
@ -4002,6 +3998,16 @@ static int32_t fltSclGetDatumValueFromPoint(SFltSclPoint *point, SFltSclDatum *d
--d->i;
}
}
} else if (point->val.kind == FLT_SCL_DATUM_KIND_FLOAT64) {
d->kind = FLT_SCL_DATUM_KIND_INT64;
double v = d->d;
if (point->excl) {
if (point->start) {
d->i = v + 1;
} else {
d->i = v - 1;
}
}
} else {
qError("not supported type %d when get datum from point", d->type.type);
}
@ -4022,12 +4028,13 @@ int32_t filterGetTimeRange(SNode *pNode, STimeWindow *win, bool *isStrict) {
SFltSclColumnRange *colRange = taosArrayGet(colRanges, 0);
SArray *points = colRange->points;
if (taosArrayGetSize(points) == 2) {
*win = TSWINDOW_DESC_INITIALIZER;
SFltSclPoint *startPt = taosArrayGet(points, 0);
SFltSclPoint *endPt = taosArrayGet(points, 1);
SFltSclDatum start;
SFltSclDatum end;
fltSclGetDatumValueFromPoint(startPt, &start);
fltSclGetDatumValueFromPoint(endPt, &end);
fltSclGetTimeStampDatum(startPt, &start);
fltSclGetTimeStampDatum(endPt, &end);
win->skey = start.i;
win->ekey = end.i;
*isStrict = true;