feat: support force fill clause
This commit is contained in:
parent
461dbe752d
commit
d88f1efeb1
|
@ -146,10 +146,12 @@ typedef enum _mgmt_table {
|
||||||
|
|
||||||
#define TSDB_FILL_NONE 0
|
#define TSDB_FILL_NONE 0
|
||||||
#define TSDB_FILL_NULL 1
|
#define TSDB_FILL_NULL 1
|
||||||
#define TSDB_FILL_SET_VALUE 2
|
#define TSDB_FILL_NULL_F 2
|
||||||
#define TSDB_FILL_LINEAR 3
|
#define TSDB_FILL_SET_VALUE 3
|
||||||
#define TSDB_FILL_PREV 4
|
#define TSDB_FILL_SET_VALUE_F 4
|
||||||
#define TSDB_FILL_NEXT 5
|
#define TSDB_FILL_LINEAR 5
|
||||||
|
#define TSDB_FILL_PREV 6
|
||||||
|
#define TSDB_FILL_NEXT 7
|
||||||
|
|
||||||
#define TSDB_ALTER_USER_PASSWD 0x1
|
#define TSDB_ALTER_USER_PASSWD 0x1
|
||||||
#define TSDB_ALTER_USER_SUPERUSER 0x2
|
#define TSDB_ALTER_USER_SUPERUSER 0x2
|
||||||
|
|
|
@ -226,8 +226,10 @@ typedef struct SIntervalWindowNode {
|
||||||
typedef enum EFillMode {
|
typedef enum EFillMode {
|
||||||
FILL_MODE_NONE = 1,
|
FILL_MODE_NONE = 1,
|
||||||
FILL_MODE_VALUE,
|
FILL_MODE_VALUE,
|
||||||
|
FILL_MODE_VALUE_F,
|
||||||
FILL_MODE_PREV,
|
FILL_MODE_PREV,
|
||||||
FILL_MODE_NULL,
|
FILL_MODE_NULL,
|
||||||
|
FILL_MODE_NULL_F,
|
||||||
FILL_MODE_LINEAR,
|
FILL_MODE_LINEAR,
|
||||||
FILL_MODE_NEXT
|
FILL_MODE_NEXT
|
||||||
} EFillMode;
|
} EFillMode;
|
||||||
|
|
|
@ -62,6 +62,7 @@ typedef struct SFillInfo {
|
||||||
int32_t srcTsSlotId; // timestamp column id in the source data block.
|
int32_t srcTsSlotId; // timestamp column id in the source data block.
|
||||||
int32_t order; // order [TSDB_ORDER_ASC|TSDB_ORDER_DESC]
|
int32_t order; // order [TSDB_ORDER_ASC|TSDB_ORDER_DESC]
|
||||||
int32_t type; // fill type
|
int32_t type; // fill type
|
||||||
|
bool forceFill; // force fill values
|
||||||
int32_t numOfRows; // number of rows in the input data block
|
int32_t numOfRows; // number of rows in the input data block
|
||||||
int32_t index; // active row index
|
int32_t index; // active row index
|
||||||
int32_t numOfTotal; // number of filled rows in one round
|
int32_t numOfTotal; // number of filled rows in one round
|
||||||
|
|
|
@ -1658,12 +1658,18 @@ int32_t convertFillType(int32_t mode) {
|
||||||
case FILL_MODE_NULL:
|
case FILL_MODE_NULL:
|
||||||
type = TSDB_FILL_NULL;
|
type = TSDB_FILL_NULL;
|
||||||
break;
|
break;
|
||||||
|
case FILL_MODE_NULL_F:
|
||||||
|
type = TSDB_FILL_NULL_F;
|
||||||
|
break;
|
||||||
case FILL_MODE_NEXT:
|
case FILL_MODE_NEXT:
|
||||||
type = TSDB_FILL_NEXT;
|
type = TSDB_FILL_NEXT;
|
||||||
break;
|
break;
|
||||||
case FILL_MODE_VALUE:
|
case FILL_MODE_VALUE:
|
||||||
type = TSDB_FILL_SET_VALUE;
|
type = TSDB_FILL_SET_VALUE;
|
||||||
break;
|
break;
|
||||||
|
case FILL_MODE_VALUE_F:
|
||||||
|
type = TSDB_FILL_SET_VALUE_F;
|
||||||
|
break;
|
||||||
case FILL_MODE_LINEAR:
|
case FILL_MODE_LINEAR:
|
||||||
type = TSDB_FILL_LINEAR;
|
type = TSDB_FILL_LINEAR;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -140,7 +140,7 @@ static SSDataBlock* doFillImpl(SOperatorInfo* pOperator) {
|
||||||
while (1) {
|
while (1) {
|
||||||
SSDataBlock* pBlock = pDownstream->fpSet.getNextFn(pDownstream);
|
SSDataBlock* pBlock = pDownstream->fpSet.getNextFn(pDownstream);
|
||||||
if (pBlock == NULL) {
|
if (pBlock == NULL) {
|
||||||
if (pInfo->totalInputRows == 0) {
|
if (pInfo->totalInputRows == 0 && !pInfo->pFillInfo->forceFill) {
|
||||||
setOperatorCompleted(pOperator);
|
setOperatorCompleted(pOperator);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -457,6 +457,9 @@ struct SFillInfo* taosCreateFillInfo(TSKEY skey, int32_t numOfFillCols, int32_t
|
||||||
case FILL_MODE_NULL:
|
case FILL_MODE_NULL:
|
||||||
pFillInfo->type = TSDB_FILL_NULL;
|
pFillInfo->type = TSDB_FILL_NULL;
|
||||||
break;
|
break;
|
||||||
|
case FILL_MODE_NULL_F:
|
||||||
|
pFillInfo->type = TSDB_FILL_NULL_F;
|
||||||
|
break;
|
||||||
case FILL_MODE_LINEAR:
|
case FILL_MODE_LINEAR:
|
||||||
pFillInfo->type = TSDB_FILL_LINEAR;
|
pFillInfo->type = TSDB_FILL_LINEAR;
|
||||||
break;
|
break;
|
||||||
|
@ -466,6 +469,9 @@ struct SFillInfo* taosCreateFillInfo(TSKEY skey, int32_t numOfFillCols, int32_t
|
||||||
case FILL_MODE_VALUE:
|
case FILL_MODE_VALUE:
|
||||||
pFillInfo->type = TSDB_FILL_SET_VALUE;
|
pFillInfo->type = TSDB_FILL_SET_VALUE;
|
||||||
break;
|
break;
|
||||||
|
case FILL_MODE_VALUE_F:
|
||||||
|
pFillInfo->type = TSDB_FILL_SET_VALUE_F;
|
||||||
|
break;
|
||||||
default: {
|
default: {
|
||||||
taosMemoryFree(pFillInfo);
|
taosMemoryFree(pFillInfo);
|
||||||
terrno = TSDB_CODE_INVALID_PARA;
|
terrno = TSDB_CODE_INVALID_PARA;
|
||||||
|
|
|
@ -1990,10 +1990,14 @@ char* nodesGetFillModeString(EFillMode mode) {
|
||||||
return "none";
|
return "none";
|
||||||
case FILL_MODE_VALUE:
|
case FILL_MODE_VALUE:
|
||||||
return "value";
|
return "value";
|
||||||
|
case FILL_MODE_VALUE_F:
|
||||||
|
return "value_f";
|
||||||
case FILL_MODE_PREV:
|
case FILL_MODE_PREV:
|
||||||
return "prev";
|
return "prev";
|
||||||
case FILL_MODE_NULL:
|
case FILL_MODE_NULL:
|
||||||
return "null";
|
return "null";
|
||||||
|
case FILL_MODE_NULL_F:
|
||||||
|
return "null_f";
|
||||||
case FILL_MODE_LINEAR:
|
case FILL_MODE_LINEAR:
|
||||||
return "linear";
|
return "linear";
|
||||||
case FILL_MODE_NEXT:
|
case FILL_MODE_NEXT:
|
||||||
|
|
|
@ -2791,7 +2791,7 @@ static int32_t convertFillValue(STranslateContext* pCxt, SDataType dt, SNodeList
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t checkFillValues(STranslateContext* pCxt, SFillNode* pFill, SNodeList* pProjectionList) {
|
static int32_t checkFillValues(STranslateContext* pCxt, SFillNode* pFill, SNodeList* pProjectionList) {
|
||||||
if (FILL_MODE_VALUE != pFill->mode) {
|
if (FILL_MODE_VALUE != pFill->mode && FILL_MODE_VALUE_F != pFill->mode) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue