fix: save work

This commit is contained in:
shenglian zhou 2023-05-19 17:06:03 +08:00
parent 3e92ec7a8a
commit 1f6d894dfd
1 changed files with 91 additions and 30 deletions

View File

@ -4206,12 +4206,26 @@ int32_t fltSclBuildDatumFromValueNode(SFltSclDatum* datum, SValueNode* valNode)
break;
}
}
}
return TSDB_CODE_SUCCESS;
}
int32_t fltSclBuildRangePoints(SFltSclOperator *oper, SArray *points) {
if (IS_UNSIGNED_NUMERIC_TYPE(oper->colNode->node.resType.type) &&
((IS_SIGNED_NUMERIC_TYPE(oper->valNode->node.resType.type) && oper->valNode->datum.i < 0) ||
(IS_FLOAT_TYPE(oper->valNode->node.resType.type) && oper->valNode->datum.d < 0))) {
if (oper->type == OP_TYPE_GREATER_THAN || oper->type == OP_TYPE_GREATER_EQUAL || oper->type == OP_TYPE_NOT_EQUAL) {
SFltSclDatum start;
fltSclBuildDatumFromValueNode(&start, oper->valNode);
start.val = 0;
SFltSclPoint startPt = {.start = true, .excl = false, .val = start};
SFltSclDatum end = {.kind = FLT_SCL_DATUM_KIND_MAX, .type = oper->colNode->node.resType};
SFltSclPoint endPt = {.start = false, .excl = false, .val = end};
taosArrayPush(points, &startPt);
taosArrayPush(points, &endPt);
}
return TSDB_CODE_SUCCESS;
}
switch (oper->type) {
case OP_TYPE_GREATER_THAN: {
SFltSclDatum start;
@ -4219,8 +4233,8 @@ int32_t fltSclBuildRangePoints(SFltSclOperator* oper, SArray* points) {
SFltSclPoint startPt = {.start = true, .excl = true, .val = start};
SFltSclDatum end = {.kind = FLT_SCL_DATUM_KIND_MAX, .type = oper->colNode->node.resType};
SFltSclPoint endPt = {.start = false, .excl = false, .val = end};
taosArrayPush(points, &start);
taosArrayPush(points, &end);
taosArrayPush(points, &startPt);
taosArrayPush(points, &endPt);
break;
}
case OP_TYPE_GREATER_EQUAL: {
@ -4229,10 +4243,58 @@ int32_t fltSclBuildRangePoints(SFltSclOperator* oper, SArray* points) {
SFltSclPoint startPt = {.start = true, .excl = false, .val = start};
SFltSclDatum end = {.kind = FLT_SCL_DATUM_KIND_MAX, .type = oper->colNode->node.resType};
SFltSclPoint endPt = {.start = false, .excl = false, .val = end};
taosArrayPush(points, &start);
taosArrayPush(points, &end);
taosArrayPush(points, &startPt);
taosArrayPush(points, &endPt);
break;
}
case OP_TYPE_LOWER_THAN: {
SFltSclDatum end;
fltSclBuildDatumFromValueNode(&end, oper->valNode);
SFltSclPoint endPt = {.start = false, .excl = true, .val = end};
SFltSclDatum start = {.kind = FLT_SCL_DATUM_KIND_MIN, .type = oper->colNode->node.resType};
SFltSclPoint startPt = {.start = true, .excl = false, .val = start};
taosArrayPush(points, &startPt);
taosArrayPush(points, &endPt);
break;
}
case OP_TYPE_LOWER_EQUAL: {
SFltSclDatum end;
fltSclBuildDatumFromValueNode(&end, oper->valNode);
SFltSclPoint endPt = {.start = false, .excl = false, .val = end};
SFltSclDatum start = {.kind = FLT_SCL_DATUM_KIND_MIN, .type = oper->colNode->node.resType};
SFltSclPoint startPt = {.start = true, .excl = false, .val = start};
taosArrayPush(points, &startPt);
taosArrayPush(points, &endPt);
break;
}
case OP_TYPE_EQUAL: {
SFltSclDatum valDatum;
fltSclBuildDatumFromValueNode(&valDatum, oper->valNode);
SFltSclPoint startPt = {.start = true, .excl = false, .val = valDatum};
SFltSclPoint endPt = {.start = false, .excl = false, .val = valDatum};
taosArrayPush(points, &startPt);
taosArrayPush(points, &endPt);
break;
}
case OP_TYPE_NOT_EQUAL: {
SFltSclDatum valDatum;
fltSclBuildDatumFromValueNode(&valDatum, oper->valNode);
{
SFltSclDatum start = {.kind = FLT_SCL_DATUM_KIND_MIN, .type = oper->colNode->node.resType};
SFltSclPoint startPt = {.start = true, .excl = false, .val = start};
SFltSclPoint endPt = {.start = false, .excl = true, .val = valDatum};
taosArrayPush(points, &startPt);
taosArrayPush(points, &endPt);
}
{
SFltSclPoint startPt = {.start = true, .excl = true, .val = valDatum};
SFltSclDatum end = {.kind = FLT_SCL_DATUM_KIND_MAX, .type = oper->colNode->node.resType};
SFltSclPoint endPt = {.start = false, .excl = false, .val = end};
taosArrayPush(points, &startPt);
taosArrayPush(points, &endPt);
}
break;
}
case
default: {
qError("not supported op");
break;
@ -4254,7 +4316,6 @@ int32_t fltSclProcessCNF(SArray* sclOpList, SArray* colRangeList) {
taosArrayDestroy(colRange->points);
taosArrayDestroy(points);
colRange->points = merged;
}
return TSDB_CODE_SUCCESS;
}