fix: refactor and save work
This commit is contained in:
parent
51fa363fd5
commit
e16f4c7c44
|
@ -22,6 +22,7 @@
|
|||
#include "sclInt.h"
|
||||
#include "tcompare.h"
|
||||
#include "tdatablock.h"
|
||||
#include "tsimplehash.h"
|
||||
#include "ttime.h"
|
||||
|
||||
bool filterRangeCompGi(const void *minv, const void *maxv, const void *minr, const void *maxr, __compar_fn_t cfunc) {
|
||||
|
@ -3958,10 +3959,7 @@ typedef struct {
|
|||
SFltSclDatumKind kind;
|
||||
union {
|
||||
int64_t val; // for int64, uint64 and double and bool (1 true, 0 false)
|
||||
struct {
|
||||
uint32_t nData; // TODO maybe remove this and make pData len prefixed?
|
||||
uint8_t *pData;
|
||||
}; // for varchar, nchar
|
||||
uint8_t *pData; // for varchar, nchar
|
||||
} datum;
|
||||
SDataType type; // TODO: original data type, may not be used?
|
||||
} SFltSclDatum;
|
||||
|
@ -3979,37 +3977,77 @@ typedef struct {
|
|||
bool highExcl;
|
||||
} SFltSclRange;
|
||||
|
||||
int32_t fltSclCompareDatum(SFltSclDatum* val1, SFltSclDatum* val2) {
|
||||
int32_t fltSclCompareWithFloat64(SFltSclDatum *val1, SFltSclDatum *val2) {
|
||||
// val2->kind == int64
|
||||
switch (val1->kind) {
|
||||
case FLT_SCL_DATUM_KIND_NULL: {
|
||||
if (val2->kind == FLT_SCL_DATUM_KIND_NULL) return 0 ; else return -1;
|
||||
break;
|
||||
case FLT_SCL_DATUM_KIND_UINT64:
|
||||
return compareUint64Double(&val1->datum.val, &val2->datum.val);
|
||||
case FLT_SCL_DATUM_KIND_INT64:
|
||||
return compareInt64Double(&val1->datum.val, &val2->datum.val);
|
||||
case FLT_SCL_DATUM_KIND_FLOAT64: {
|
||||
return compareDoubleVal(&val1->datum.val, &val2->datum.val);
|
||||
}
|
||||
case FLT_SCL_DATUM_KIND_MIN: {
|
||||
if (val2->kind == FLT_SCL_DATUM_KIND_NULL) return 1;
|
||||
else {
|
||||
if (val2->kind == FLT_SCL_DATUM_KIND_MIN) return 0; else return -1;
|
||||
//TODO: varchar, nchar
|
||||
default:
|
||||
qError("not support comparsion. %d, %d", val1->kind, val2->kind);
|
||||
return (val1->kind - val2->kind);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case FLT_SCL_DATUM_KIND_MAX: {
|
||||
if (val2->kind == FLT_SCL_DATUM_KIND_MAX) return 0; else return 1;
|
||||
|
||||
int32_t fltSclCompareWithInt64(SFltSclDatum *val1, SFltSclDatum *val2) {
|
||||
// val2->kind == int64
|
||||
switch (val1->kind) {
|
||||
case FLT_SCL_DATUM_KIND_UINT64:
|
||||
return compareUint64Int64(&val1->datum.val, &val2->datum.val);
|
||||
case FLT_SCL_DATUM_KIND_INT64:
|
||||
return compareInt64Val(&val1->datum.val, &val2->datum.val);
|
||||
case FLT_SCL_DATUM_KIND_FLOAT64: {
|
||||
return compareDoubleInt64(&val1->datum.val, &val2->datum.val);
|
||||
}
|
||||
//TODO: varchar, nchar
|
||||
default:
|
||||
qError("not support comparsion. %d, %d", val1->kind, val2->kind);
|
||||
return (val1->kind - val2->kind);
|
||||
}
|
||||
}
|
||||
|
||||
int32_t fltSclCompareWithUInt64(SFltSclDatum *val1, SFltSclDatum *val2) {
|
||||
// val2 kind == uint64
|
||||
switch (val1->kind) {
|
||||
case FLT_SCL_DATUM_KIND_UINT64:
|
||||
return compareUint64Val(&val1->datum.val, &val2->datum.val);
|
||||
case FLT_SCL_DATUM_KIND_INT64:
|
||||
return compareInt64Uint64(&val1->datum.val, &val2->datum.val);
|
||||
case FLT_SCL_DATUM_KIND_FLOAT64: {
|
||||
return compareDoubleUint64(&val1->datum.val, &val2->datum.val);
|
||||
}
|
||||
//TODO: varchar, nchar
|
||||
default:
|
||||
qError("not support comparsion. %d, %d", val1->kind, val2->kind);
|
||||
return (val1->kind - val2->kind);
|
||||
}
|
||||
}
|
||||
|
||||
int32_t fltSclCompareDatum(SFltSclDatum *val1, SFltSclDatum *val2) {
|
||||
if (val2->kind == FLT_SCL_DATUM_KIND_NULL || val2->kind == FLT_SCL_DATUM_KIND_MIN ||
|
||||
val2->kind == FLT_SCL_DATUM_KIND_MAX) {
|
||||
if (val1->kind == FLT_SCL_DATUM_KIND_NULL || val1->kind == FLT_SCL_DATUM_KIND_MIN ||
|
||||
val1->kind == FLT_SCL_DATUM_KIND_MAX) {
|
||||
return (val1->kind < val2->kind) ? -1 : ((val1->kind > val2->kind) ? 1 : 0);
|
||||
}
|
||||
}
|
||||
|
||||
switch (val2->kind) {
|
||||
case FLT_SCL_DATUM_KIND_UINT64: {
|
||||
return compareUint64Val(&val1->datum.val, &val1->datum.val);
|
||||
return fltSclCompareWithUInt64(val1, val2);
|
||||
}
|
||||
case FLT_SCL_DATUM_KIND_INT64: {
|
||||
return compareInt64Val(&val1->datum.val, &val2->datum.val);
|
||||
return fltSclCompareWithInt64(val1, val2);
|
||||
}
|
||||
case FLT_SCL_DATUM_KIND_FLOAT64: {
|
||||
return compareFloatDouble(&val1->datum.val, &val2->datum.val);
|
||||
}
|
||||
case FLT_SCL_DATUM_KIND_NCHAR: {
|
||||
return compareLenPrefixedWStr(&val1->datum.pData, &val2->datum.pData); //TODO
|
||||
}
|
||||
case FLT_SCL_DATUM_KIND_VARCHAR: {
|
||||
return compareLenPrefixedStr(&val1->datum.pData, &val2->datum.pData); //TODO
|
||||
return fltSclCompareWithFloat64(val1, val2);
|
||||
}
|
||||
//TODO: varchar/nchar
|
||||
default:
|
||||
fltError("not supported kind. just return 0");
|
||||
return 0;
|
||||
|
@ -4094,37 +4132,28 @@ int32_t fltSclMerge(SArray* pts1, SArray* pts2, bool isUnion, SArray* merged) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int32_t fltSclIntersect(SArray *pts1, SArray *pts2, SArray *merged) { return fltSclMerge(pts1, pts2, false, merged); }
|
||||
|
||||
int32_t fltSclIntersect(SArray* pts1, SArray* pts2, SArray* merged) {
|
||||
return fltSclMerge(pts1, pts2, false, merged);
|
||||
}
|
||||
|
||||
int32_t fltSclUnion(SArray* pts1, SArray* pts2, SArray* merged) {
|
||||
return fltSclMerge(pts1, pts2, true, merged);
|
||||
}
|
||||
|
||||
int32_t fltSclUnion(SArray *pts1, SArray *pts2, SArray *merged) { return fltSclMerge(pts1, pts2, true, merged); }
|
||||
|
||||
typedef struct {
|
||||
SColumnNode *colNode;
|
||||
SValueNode *valNode;
|
||||
EOperatorType type;
|
||||
} SFltSclScalarOp;
|
||||
} SFltSclOperator;
|
||||
|
||||
// simple define it, TODO: implement later
|
||||
typedef struct {
|
||||
SColumnNode* colNode;
|
||||
} SFltSclConstColumn;
|
||||
|
||||
// simple define it, TODO: implement later
|
||||
typedef struct {
|
||||
SValueNode* value;
|
||||
} SFltSclConstant;
|
||||
|
||||
|
||||
int32_t fltSclBuildRangeFromScalarFunc(SFltSclScalarOp* func, SFltSclPoint* points) {
|
||||
//TODO: column, constant, operator, and/or/not
|
||||
|
||||
int32_t fltSclBuildRangeFromOperator(SFltSclOperator *sclOper, SSHashObj* obj) {
|
||||
switch (sclOper->type) {
|
||||
case OP_TYPE_GREATER_THAN: {
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
typedef struct {
|
||||
bool useRange;
|
||||
|
@ -4136,7 +4165,6 @@ static EDealRes fltSclMayBeOptimed(SNode* pNode, void* pCtx) {
|
|||
return DEAL_RES_CONTINUE;
|
||||
}
|
||||
|
||||
|
||||
int32_t fltOptimizeNodes(SFilterInfo *pInfo, SNode **pNode, SFltTreeStat *pStat) {
|
||||
SFltSclOptCtx ctx;
|
||||
nodesWalkExprPostOrder(*pNode, fltSclMayBeOptimed, &ctx);
|
||||
|
|
Loading…
Reference in New Issue