Merge pull request #24282 from taosdata/fix/3.0/TS-4411
fix: fill prev not working when desc fill
This commit is contained in:
commit
06e3d8df1d
|
@ -169,13 +169,14 @@ static void doFillOneRow(SFillInfo* pFillInfo, SSDataBlock* pBlock, SSDataBlock*
|
|||
setNotFillColumn(pFillInfo, pDstCol, index, i);
|
||||
}
|
||||
} else {
|
||||
SGroupKeys* pKey = taosArrayGet(pFillInfo->prev.pRowVal, i);
|
||||
SRowVal* pRVal = FILL_IS_ASC_FILL(pFillInfo) ? &pFillInfo->prev : &pFillInfo->next;
|
||||
SGroupKeys* pKey = taosArrayGet(pRVal->pRowVal, i);
|
||||
if (IS_VAR_DATA_TYPE(type) || type == TSDB_DATA_TYPE_BOOL || pKey->isNull) {
|
||||
colDataSetNULL(pDstCol, index);
|
||||
continue;
|
||||
}
|
||||
|
||||
SGroupKeys* pKey1 = taosArrayGet(pFillInfo->prev.pRowVal, pFillInfo->tsSlotId);
|
||||
SGroupKeys* pKey1 = taosArrayGet(pRVal->pRowVal, pFillInfo->tsSlotId);
|
||||
|
||||
int64_t prevTs = *(int64_t*)pKey1->pData;
|
||||
int32_t srcSlotId = GET_DEST_SLOT_ID(pCol);
|
||||
|
@ -346,9 +347,10 @@ static int32_t fillResultImpl(SFillInfo* pFillInfo, SSDataBlock* pBlock, int32_t
|
|||
char* src = colDataGetData(pSrc, pFillInfo->index);
|
||||
if (!colDataIsNull_s(pSrc, pFillInfo->index)) {
|
||||
colDataSetVal(pDst, index, src, false);
|
||||
saveColData(pFillInfo->prev.pRowVal, i, src, false);
|
||||
SRowVal* pRVal = FILL_IS_ASC_FILL(pFillInfo) ? &pFillInfo->prev : &pFillInfo->next;
|
||||
saveColData(pRVal->pRowVal, i, src, false);
|
||||
if (pFillInfo->srcTsSlotId == dstSlotId) {
|
||||
pFillInfo->prev.key = *(int64_t*)src;
|
||||
pRVal->key = *(int64_t*)src;
|
||||
}
|
||||
} else { // the value is null
|
||||
if (pDst->info.type == TSDB_DATA_TYPE_TIMESTAMP) {
|
||||
|
@ -361,7 +363,8 @@ static int32_t fillResultImpl(SFillInfo* pFillInfo, SSDataBlock* pBlock, int32_t
|
|||
} else if (pFillInfo->type == TSDB_FILL_LINEAR) {
|
||||
bool isNull = colDataIsNull_s(pSrc, pFillInfo->index);
|
||||
colDataSetVal(pDst, index, src, isNull);
|
||||
saveColData(pFillInfo->prev.pRowVal, i, src, isNull); // todo:
|
||||
SArray* p = FILL_IS_ASC_FILL(pFillInfo) ? pFillInfo->prev.pRowVal : pFillInfo->next.pRowVal;
|
||||
saveColData(p, i, src, isNull); // todo:
|
||||
} else if (pFillInfo->type == TSDB_FILL_NULL || pFillInfo->type == TSDB_FILL_NULL_F) {
|
||||
colDataSetNULL(pDst, index);
|
||||
} else if (pFillInfo->type == TSDB_FILL_NEXT) {
|
||||
|
|
|
@ -144,10 +144,61 @@ class TDTestCase:
|
|||
tdSql.query(sql)
|
||||
tdSql.checkRows(6)
|
||||
|
||||
def test_fill_with_order_by2(self):
|
||||
## window size: 5 minutes, with 6 rows in meters every 10 minutes
|
||||
sql = "select _wstart, count(*) from meters where ts >= '2018-09-20 00:00:00.000' and ts < '2018-09-20 01:00:00.000' interval(5m) fill(prev) order by _wstart asc;"
|
||||
tdSql.query(sql, queryTimes=1)
|
||||
tdSql.checkRows(12)
|
||||
tdSql.checkData(0, 1, 10)
|
||||
tdSql.checkData(1, 1, 10)
|
||||
tdSql.checkData(2, 1, 10)
|
||||
tdSql.checkData(3, 1, 10)
|
||||
tdSql.checkData(4, 1, 10)
|
||||
tdSql.checkData(5, 1, 10)
|
||||
tdSql.checkData(6, 1, 10)
|
||||
tdSql.checkData(7, 1, 10)
|
||||
tdSql.checkData(8, 1, 10)
|
||||
tdSql.checkData(9, 1, 10)
|
||||
tdSql.checkData(10, 1, 10)
|
||||
tdSql.checkData(11, 1, 10)
|
||||
|
||||
sql = "select _wstart, count(*) from meters where ts >= '2018-09-20 00:00:00.000' and ts < '2018-09-20 01:00:00.000' interval(5m) fill(prev) order by _wstart desc;"
|
||||
tdSql.query(sql, queryTimes=1)
|
||||
tdSql.checkRows(12)
|
||||
tdSql.checkData(0, 1, None)
|
||||
tdSql.checkData(1, 1, 10)
|
||||
tdSql.checkData(2, 1, 10)
|
||||
tdSql.checkData(3, 1, 10)
|
||||
tdSql.checkData(4, 1, 10)
|
||||
tdSql.checkData(5, 1, 10)
|
||||
tdSql.checkData(6, 1, 10)
|
||||
tdSql.checkData(7, 1, 10)
|
||||
tdSql.checkData(8, 1, 10)
|
||||
tdSql.checkData(9, 1, 10)
|
||||
tdSql.checkData(10, 1, 10)
|
||||
tdSql.checkData(11, 1, 10)
|
||||
|
||||
sql = "select _wstart, count(*) from meters where ts >= '2018-09-20 00:00:00.000' and ts < '2018-09-20 01:00:00.000' interval(5m) fill(linear) order by _wstart desc;"
|
||||
tdSql.query(sql, queryTimes=1)
|
||||
tdSql.checkRows(12)
|
||||
tdSql.checkData(0, 1, None)
|
||||
tdSql.checkData(1, 1, 10)
|
||||
tdSql.checkData(2, 1, 10)
|
||||
tdSql.checkData(3, 1, 10)
|
||||
tdSql.checkData(4, 1, 10)
|
||||
tdSql.checkData(5, 1, 10)
|
||||
tdSql.checkData(6, 1, 10)
|
||||
tdSql.checkData(7, 1, 10)
|
||||
tdSql.checkData(8, 1, 10)
|
||||
tdSql.checkData(9, 1, 10)
|
||||
tdSql.checkData(10, 1, 10)
|
||||
tdSql.checkData(11, 1, 10)
|
||||
|
||||
def run(self):
|
||||
self.prepareTestEnv()
|
||||
self.test_partition_by_with_interval_fill_prev_new_group_fill_error()
|
||||
self.test_fill_with_order_by()
|
||||
self.test_fill_with_order_by2()
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
|
|
Loading…
Reference in New Issue