feature: save work
This commit is contained in:
parent
bdee8ab3c1
commit
51fa363fd5
|
@ -3957,12 +3957,13 @@ typedef enum {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SFltSclDatumKind kind;
|
SFltSclDatumKind kind;
|
||||||
union {
|
union {
|
||||||
int64_t val; // may be int64, uint64 and double
|
int64_t val; // for int64, uint64 and double and bool (1 true, 0 false)
|
||||||
struct {
|
struct {
|
||||||
uint32_t nData;
|
uint32_t nData; // TODO maybe remove this and make pData len prefixed?
|
||||||
uint8_t *pData;
|
uint8_t *pData;
|
||||||
}; // maybe varchar, nchar
|
}; // for varchar, nchar
|
||||||
} datum;
|
} datum;
|
||||||
|
SDataType type; // TODO: original data type, may not be used?
|
||||||
} SFltSclDatum;
|
} SFltSclDatum;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -3979,6 +3980,42 @@ typedef struct {
|
||||||
} SFltSclRange;
|
} SFltSclRange;
|
||||||
|
|
||||||
int32_t fltSclCompareDatum(SFltSclDatum* val1, SFltSclDatum* val2) {
|
int32_t fltSclCompareDatum(SFltSclDatum* val1, SFltSclDatum* val2) {
|
||||||
|
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_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;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case FLT_SCL_DATUM_KIND_MAX: {
|
||||||
|
if (val2->kind == FLT_SCL_DATUM_KIND_MAX) return 0; else return 1;
|
||||||
|
}
|
||||||
|
case FLT_SCL_DATUM_KIND_UINT64: {
|
||||||
|
return compareUint64Val(&val1->datum.val, &val1->datum.val);
|
||||||
|
}
|
||||||
|
case FLT_SCL_DATUM_KIND_INT64: {
|
||||||
|
return compareInt64Val(&val1->datum.val, &val2->datum.val);
|
||||||
|
}
|
||||||
|
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
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
fltError("not supported kind. just return 0");
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fltSclLessPoint(SFltSclPoint* pt1, SFltSclPoint* pt2) {
|
bool fltSclLessPoint(SFltSclPoint* pt1, SFltSclPoint* pt2) {
|
||||||
|
@ -4071,26 +4108,32 @@ typedef struct {
|
||||||
SColumnNode* colNode;
|
SColumnNode* colNode;
|
||||||
SValueNode* valNode;
|
SValueNode* valNode;
|
||||||
EOperatorType type;
|
EOperatorType type;
|
||||||
} SFltSclScalarFunc;
|
} SFltSclScalarOp;
|
||||||
|
|
||||||
|
// simple define it, TODO: implement later
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SColumnNode* colNode;
|
SColumnNode* colNode;
|
||||||
|
|
||||||
} SFltSclConstColumn;
|
} SFltSclConstColumn;
|
||||||
|
|
||||||
|
// simple define it, TODO: implement later
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SValueNode* value;
|
SValueNode* value;
|
||||||
} SFltSclConstant;
|
} SFltSclConstant;
|
||||||
|
|
||||||
|
|
||||||
|
int32_t fltSclBuildRangeFromScalarFunc(SFltSclScalarOp* func, SFltSclPoint* points) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool useRange;
|
bool useRange;
|
||||||
SHashObj* colRanges;
|
SHashObj* colRanges;
|
||||||
|
|
||||||
} SFltSclOptCtx;
|
} SFltSclOptCtx;
|
||||||
|
|
||||||
static EDealRes fltSclMayBeOptimed(SNode* pNode, void* pCtx) {
|
static EDealRes fltSclMayBeOptimed(SNode* pNode, void* pCtx) {
|
||||||
SFltSclOptCtx* ctx = (SFltSclOptCtx*)pCtx;
|
SFltSclOptCtx* ctx = (SFltSclOptCtx*)pCtx;
|
||||||
|
return DEAL_RES_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue