Merge branch '3.0' into enh/TD-22715
This commit is contained in:
commit
02d0894d3e
|
@ -191,9 +191,9 @@ SHOW TABLE DISTRIBUTED table_name;
|
|||
|
||||
_block_dist: Total_Blocks=[5] Total_Size=[93.65 Kb] Average_size=[18.73 Kb] Compression_Ratio=[23.98 %]
|
||||
|
||||
Total_Blocks : 表d0 占用的 block 个数为 5 个
|
||||
Total_Blocks: 表 d0 占用的 block 个数为 5 个
|
||||
|
||||
Total_Size. : 表 d0 所有 block 在文件中占用的大小为 93.65 KB
|
||||
Total_Size: 表 d0 所有 block 在文件中占用的大小为 93.65 KB
|
||||
|
||||
Average_size: 平均每个 block 在文件中占用的空间大小为 18.73 KB
|
||||
|
||||
|
@ -204,15 +204,15 @@ Compression_Ratio: 数据压缩率 23.98%
|
|||
|
||||
_block_dist: Total_Rows=[20000] Inmem_Rows=[0] MinRows=[3616] MaxRows=[4096] Average_Rows=[4000]
|
||||
|
||||
Total_Rows: 统计表 d0 的所有行数 为20000 行
|
||||
Total_Rows: 统计表 d0 的所有行数 为20000 行(该数值仅供参考,不是精确的行数。获得精确的行数需要使用 count 函数)
|
||||
|
||||
Inmem_Rows: 表示仍然还存放在内存中的行数,即没有落盘的行数,为 0行,表示没有
|
||||
Inmem_Rows: 存储在写缓存中的数据行数(没有落盘),0 行表示内存缓存中没有数据
|
||||
|
||||
MinRows: BLOCK 中最小的行数,为 3616 行
|
||||
MinRows: BLOCK 中最小的行数,为 3616 行
|
||||
|
||||
MaxRows: BLOCK 中最大的行数,为 4096行
|
||||
MaxRows: BLOCK 中最大的行数,为 4096 行
|
||||
|
||||
Average_Rows: 每个 BLOCK 中的平均行数,为4000 行
|
||||
Average_Rows: 每个 BLOCK 中的平均行数,此时为 4000 行
|
||||
|
||||
|
||||
*************************** 3.row ***************************
|
||||
|
|
|
@ -1989,8 +1989,7 @@ static FORCE_INLINE int32_t tColDataUpdateValue20(SColData *pColData, uint8_t *p
|
|||
return 0;
|
||||
}
|
||||
static FORCE_INLINE int32_t tColDataUpdateValue30(SColData *pColData, uint8_t *pData, uint32_t nData, bool forward) {
|
||||
uint8_t bv = GET_BIT1(pColData->pBitMap, pColData->nVal - 1);
|
||||
if (bv == 0) { // NONE == > VALUE
|
||||
if (GET_BIT1(pColData->pBitMap, pColData->nVal - 1) == 0) { // NONE ==> VALUE
|
||||
pColData->numOfNone--;
|
||||
pColData->nVal--;
|
||||
if (pColData->numOfNone) {
|
||||
|
@ -1999,7 +1998,7 @@ static FORCE_INLINE int32_t tColDataUpdateValue30(SColData *pColData, uint8_t *p
|
|||
pColData->flag = HAS_NULL;
|
||||
return tColDataAppendValue20(pColData, pData, nData);
|
||||
}
|
||||
} else if (forward) { // NULL == > VALUE
|
||||
} else if (forward) { // NULL ==> VALUE
|
||||
pColData->numOfNull--;
|
||||
pColData->nVal--;
|
||||
if (pColData->numOfNull) {
|
||||
|
@ -2024,36 +2023,43 @@ static FORCE_INLINE int32_t tColDataUpdateValue32(SColData *pColData, uint8_t *p
|
|||
return 0;
|
||||
}
|
||||
static FORCE_INLINE int32_t tColDataUpdateValue40(SColData *pColData, uint8_t *pData, uint32_t nData, bool forward) {
|
||||
if (forward) {
|
||||
pColData->numOfValue--;
|
||||
if (forward) { // VALUE ==> VALUE
|
||||
pColData->nVal--;
|
||||
if (pColData->numOfValue) {
|
||||
return tColDataAppendValue40(pColData, pData, nData);
|
||||
if (IS_VAR_DATA_TYPE(pColData->type)) {
|
||||
pColData->nData = pColData->aOffset[pColData->nVal];
|
||||
} else {
|
||||
pColData->flag = 0;
|
||||
return tColDataAppendValue00(pColData, pData, nData);
|
||||
pColData->nData -= TYPE_BYTES[pColData->type];
|
||||
}
|
||||
return tColDataPutValue(pColData, pData, nData);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
static FORCE_INLINE int32_t tColDataUpdateValue42(SColData *pColData, uint8_t *pData, uint32_t nData, bool forward) {
|
||||
if (forward) {
|
||||
if (forward) { // VALUE ==> NULL
|
||||
pColData->numOfValue--;
|
||||
pColData->nVal--;
|
||||
if (pColData->numOfValue) {
|
||||
if (IS_VAR_DATA_TYPE(pColData->type)) {
|
||||
pColData->nData = pColData->aOffset[pColData->nVal];
|
||||
} else {
|
||||
pColData->nData -= TYPE_BYTES[pColData->type];
|
||||
}
|
||||
return tColDataAppendValue42(pColData, pData, nData);
|
||||
} else {
|
||||
pColData->flag = 0;
|
||||
pColData->nData = 0;
|
||||
return tColDataAppendValue02(pColData, pData, nData);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
static FORCE_INLINE int32_t tColDataUpdateValue50(SColData *pColData, uint8_t *pData, uint32_t nData, bool forward) {
|
||||
uint8_t bv = GET_BIT1(pColData->pBitMap, pColData->nVal - 1);
|
||||
if (bv == 0) { // NONE ==> VALUE
|
||||
if (GET_BIT1(pColData->pBitMap, pColData->nVal - 1) == 0) { // NONE ==> VALUE
|
||||
pColData->numOfNone--;
|
||||
pColData->nVal--;
|
||||
if (!IS_VAR_DATA_TYPE(pColData->type)) {
|
||||
pColData->nData -= TYPE_BYTES[pColData->type];
|
||||
}
|
||||
if (pColData->numOfNone) {
|
||||
return tColDataAppendValue50(pColData, pData, nData);
|
||||
} else {
|
||||
|
@ -2061,35 +2067,42 @@ static FORCE_INLINE int32_t tColDataUpdateValue50(SColData *pColData, uint8_t *p
|
|||
return tColDataAppendValue40(pColData, pData, nData);
|
||||
}
|
||||
} else if (forward) { // VALUE ==> VALUE
|
||||
pColData->numOfValue--;
|
||||
pColData->nVal--;
|
||||
if (pColData->numOfValue) {
|
||||
return tColDataAppendValue50(pColData, pData, nData);
|
||||
if (IS_VAR_DATA_TYPE(pColData->type)) {
|
||||
pColData->nData = pColData->aOffset[pColData->nVal];
|
||||
} else {
|
||||
pColData->flag = HAS_NONE;
|
||||
return tColDataAppendValue10(pColData, pData, nData);
|
||||
pColData->nData -= TYPE_BYTES[pColData->type];
|
||||
}
|
||||
return tColDataPutValue(pColData, pData, nData);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
static FORCE_INLINE int32_t tColDataUpdateValue52(SColData *pColData, uint8_t *pData, uint32_t nData, bool forward) {
|
||||
uint8_t bv = GET_BIT1(pColData->pBitMap, pColData->nVal - 1);
|
||||
if (bv == 0) { // NONE ==> NULL
|
||||
if (GET_BIT1(pColData->pBitMap, pColData->nVal - 1) == 0) { // NONE ==> NULL
|
||||
pColData->numOfNone--;
|
||||
pColData->nVal--;
|
||||
if (!IS_VAR_DATA_TYPE(pColData->type)) {
|
||||
pColData->nData -= TYPE_BYTES[pColData->type];
|
||||
}
|
||||
if (pColData->numOfNone) {
|
||||
return tColDataAppendValue52(pColData, pData, nData);
|
||||
} else {
|
||||
pColData->flag &= ~HAS_NONE;
|
||||
pColData->flag = HAS_VALUE;
|
||||
return tColDataAppendValue42(pColData, pData, nData);
|
||||
}
|
||||
} else if (forward) { // VALUE ==> NULL
|
||||
pColData->numOfValue--;
|
||||
pColData->nVal--;
|
||||
if (pColData->numOfValue) {
|
||||
if (IS_VAR_DATA_TYPE(pColData->type)) {
|
||||
pColData->nData = pColData->aOffset[pColData->nVal];
|
||||
} else {
|
||||
pColData->nData -= TYPE_BYTES[pColData->type];
|
||||
}
|
||||
return tColDataAppendValue52(pColData, pData, nData);
|
||||
} else {
|
||||
pColData->flag &= ~HAS_VALUE;
|
||||
pColData->flag = HAS_NONE;
|
||||
pColData->nData = 0;
|
||||
return tColDataAppendValue12(pColData, pData, nData);
|
||||
}
|
||||
}
|
||||
|
@ -2100,6 +2113,9 @@ static FORCE_INLINE int32_t tColDataUpdateValue60(SColData *pColData, uint8_t *p
|
|||
if (GET_BIT1(pColData->pBitMap, pColData->nVal - 1) == 0) { // NULL ==> VALUE
|
||||
pColData->numOfNull--;
|
||||
pColData->nVal--;
|
||||
if (!IS_VAR_DATA_TYPE(pColData->type)) {
|
||||
pColData->nData -= TYPE_BYTES[pColData->type];
|
||||
}
|
||||
if (pColData->numOfNull) {
|
||||
return tColDataAppendValue60(pColData, pData, nData);
|
||||
} else {
|
||||
|
@ -2107,14 +2123,13 @@ static FORCE_INLINE int32_t tColDataUpdateValue60(SColData *pColData, uint8_t *p
|
|||
return tColDataAppendValue40(pColData, pData, nData);
|
||||
}
|
||||
} else { // VALUE ==> VALUE
|
||||
pColData->numOfValue--;
|
||||
pColData->nVal--;
|
||||
if (pColData->numOfValue) {
|
||||
return tColDataAppendValue60(pColData, pData, nData);
|
||||
if (IS_VAR_DATA_TYPE(pColData->type)) {
|
||||
pColData->nData = pColData->aOffset[pColData->nVal];
|
||||
} else {
|
||||
pColData->flag = HAS_NULL;
|
||||
return tColDataAppendValue20(pColData, pData, nData);
|
||||
pColData->nData -= TYPE_BYTES[pColData->type];
|
||||
}
|
||||
return tColDataPutValue(pColData, pData, nData);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
@ -2124,9 +2139,15 @@ static FORCE_INLINE int32_t tColDataUpdateValue62(SColData *pColData, uint8_t *p
|
|||
pColData->numOfValue--;
|
||||
pColData->nVal--;
|
||||
if (pColData->numOfValue) {
|
||||
if (IS_VAR_DATA_TYPE(pColData->type)) {
|
||||
pColData->nData = pColData->aOffset[pColData->nVal];
|
||||
} else {
|
||||
pColData->nData -= TYPE_BYTES[pColData->type];
|
||||
}
|
||||
return tColDataAppendValue62(pColData, pData, nData);
|
||||
} else {
|
||||
pColData->flag = HAS_NULL;
|
||||
pColData->nData = 0;
|
||||
return tColDataAppendValue20(pColData, pData, nData);
|
||||
}
|
||||
}
|
||||
|
@ -2139,38 +2160,44 @@ static FORCE_INLINE int32_t tColDataUpdateValue70(SColData *pColData, uint8_t *p
|
|||
if (bv == 0) { // NONE ==> VALUE
|
||||
pColData->numOfNone--;
|
||||
pColData->nVal--;
|
||||
if (!IS_VAR_DATA_TYPE(pColData->type)) {
|
||||
pColData->nData -= TYPE_BYTES[pColData->type];
|
||||
}
|
||||
if (pColData->numOfNone) {
|
||||
return tColDataAppendValue70(pColData, pData, nData);
|
||||
} else {
|
||||
for (int32_t iVal = 0; iVal < pColData->nVal; ++iVal) {
|
||||
SET_BIT1(pColData->pBitMap, iVal, GET_BIT2(pColData->pBitMap, iVal) - 1);
|
||||
}
|
||||
pColData->flag &= ~HAS_NONE;
|
||||
pColData->flag = (HAS_VALUE | HAS_NULL);
|
||||
return tColDataAppendValue60(pColData, pData, nData);
|
||||
}
|
||||
} else if (bv == 1) { // NULL ==> VALUE
|
||||
if (forward) {
|
||||
pColData->numOfNull--;
|
||||
pColData->nVal--;
|
||||
if (!IS_VAR_DATA_TYPE(pColData->type)) {
|
||||
pColData->nData -= TYPE_BYTES[pColData->type];
|
||||
}
|
||||
if (pColData->numOfNull) {
|
||||
return tColDataAppendValue70(pColData, pData, nData);
|
||||
} else {
|
||||
for (int32_t iVal = 0; iVal < pColData->nVal; ++iVal) {
|
||||
SET_BIT1(pColData->pBitMap, iVal, GET_BIT2(pColData->pBitMap, iVal) ? 1 : 0);
|
||||
}
|
||||
pColData->flag &= ~HAS_NULL;
|
||||
pColData->flag = (HAS_VALUE | HAS_NONE);
|
||||
return tColDataAppendValue50(pColData, pData, nData);
|
||||
}
|
||||
}
|
||||
} else if (bv == 2) { // VALUE ==> VALUE
|
||||
if (forward) {
|
||||
pColData->numOfValue--;
|
||||
pColData->nVal--;
|
||||
if (pColData->numOfValue) {
|
||||
return tColDataAppendValue70(pColData, pData, nData);
|
||||
if (IS_VAR_DATA_TYPE(pColData->type)) {
|
||||
pColData->nData = pColData->aOffset[pColData->nVal];
|
||||
} else {
|
||||
return tColDataPutValue(pColData, pData, nData);
|
||||
pColData->nData -= TYPE_BYTES[pColData->type];
|
||||
}
|
||||
return tColDataPutValue(pColData, pData, nData);
|
||||
}
|
||||
} else {
|
||||
ASSERT(0);
|
||||
|
@ -2179,29 +2206,37 @@ static FORCE_INLINE int32_t tColDataUpdateValue70(SColData *pColData, uint8_t *p
|
|||
}
|
||||
static int32_t tColDataUpdateValue72(SColData *pColData, uint8_t *pData, uint32_t nData, bool forward) {
|
||||
uint8_t bv = GET_BIT2(pColData->pBitMap, pColData->nVal - 1);
|
||||
ASSERT(bv < 3);
|
||||
if (bv == 0) { // NONE ==> NULL
|
||||
pColData->numOfNone--;
|
||||
pColData->nVal--;
|
||||
if (!IS_VAR_DATA_TYPE(pColData->type)) {
|
||||
pColData->nData -= TYPE_BYTES[pColData->type];
|
||||
}
|
||||
if (pColData->numOfNone) {
|
||||
return tColDataAppendValue72(pColData, pData, nData);
|
||||
} else {
|
||||
for (int32_t iVal = 0; iVal < pColData->nVal; ++iVal) {
|
||||
SET_BIT1(pColData->pBitMap, iVal, GET_BIT2(pColData->pBitMap, iVal) - 1);
|
||||
}
|
||||
pColData->flag &= ~HAS_NONE;
|
||||
pColData->flag = (HAS_VALUE | HAS_NULL);
|
||||
return tColDataAppendValue62(pColData, pData, nData);
|
||||
}
|
||||
} else if (bv == 2 && forward) { // VALUE ==> NULL
|
||||
pColData->numOfValue--;
|
||||
pColData->nVal--;
|
||||
if (pColData->numOfValue) {
|
||||
if (IS_STR_DATA_TYPE(pColData->type)) {
|
||||
pColData->nData = pColData->aOffset[pColData->nVal];
|
||||
} else {
|
||||
pColData->nData -= TYPE_BYTES[pColData->type];
|
||||
}
|
||||
return tColDataAppendValue72(pColData, pData, nData);
|
||||
} else {
|
||||
for (int32_t iVal = 0; iVal < pColData->nVal; ++iVal) {
|
||||
SET_BIT1(pColData->pBitMap, iVal, GET_BIT2(pColData->pBitMap, iVal));
|
||||
}
|
||||
pColData->flag &= ~HAS_VALUE;
|
||||
pColData->flag = (HAS_NULL | HAS_NONE);
|
||||
pColData->nData = 0;
|
||||
return tColDataAppendValue32(pColData, pData, nData);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1687,53 +1687,50 @@ int32_t percentileFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
|
|||
double v = 0;
|
||||
|
||||
tMemBucket* pMemBucket = ppInfo->pMemBucket;
|
||||
if (pMemBucket == NULL || pMemBucket->total == 0) { // check for null
|
||||
code = TSDB_CODE_FAILED;
|
||||
goto _fin_error;
|
||||
}
|
||||
if (pMemBucket != NULL && pMemBucket->total > 0) { // check for null
|
||||
if (pCtx->numOfParams > 2) {
|
||||
char buf[512] = {0};
|
||||
size_t len = 1;
|
||||
|
||||
if (pCtx->numOfParams > 2) {
|
||||
char buf[512] = {0};
|
||||
size_t len = 1;
|
||||
varDataVal(buf)[0] = '[';
|
||||
for (int32_t i = 1; i < pCtx->numOfParams; ++i) {
|
||||
SVariant* pVal = &pCtx->param[i].param;
|
||||
|
||||
varDataVal(buf)[0] = '[';
|
||||
for (int32_t i = 1; i < pCtx->numOfParams; ++i) {
|
||||
SVariant* pVal = &pCtx->param[i].param;
|
||||
GET_TYPED_DATA(v, double, pVal->nType, &pVal->i);
|
||||
|
||||
int32_t code = getPercentile(pMemBucket, v, &ppInfo->result);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
goto _fin_error;
|
||||
}
|
||||
|
||||
if (i == pCtx->numOfParams - 1) {
|
||||
len += snprintf(varDataVal(buf) + len, sizeof(buf) - VARSTR_HEADER_SIZE - len, "%.6lf]", ppInfo->result);
|
||||
} else {
|
||||
len += snprintf(varDataVal(buf) + len, sizeof(buf) - VARSTR_HEADER_SIZE - len, "%.6lf, ", ppInfo->result);
|
||||
}
|
||||
}
|
||||
|
||||
int32_t slotId = pCtx->pExpr->base.resSchema.slotId;
|
||||
SColumnInfoData* pCol = taosArrayGet(pBlock->pDataBlock, slotId);
|
||||
|
||||
varDataSetLen(buf, len);
|
||||
colDataAppend(pCol, pBlock->info.rows, buf, false);
|
||||
|
||||
tMemBucketDestroy(pMemBucket);
|
||||
return pResInfo->numOfRes;
|
||||
} else {
|
||||
SVariant* pVal = &pCtx->param[1].param;
|
||||
|
||||
GET_TYPED_DATA(v, double, pVal->nType, &pVal->i);
|
||||
|
||||
int32_t code = getPercentile(pMemBucket, v, &ppInfo->result);
|
||||
code = getPercentile(pMemBucket, v, &ppInfo->result);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
goto _fin_error;
|
||||
}
|
||||
|
||||
if (i == pCtx->numOfParams - 1) {
|
||||
len += snprintf(varDataVal(buf) + len, sizeof(buf) - VARSTR_HEADER_SIZE - len, "%.6lf]", ppInfo->result);
|
||||
} else {
|
||||
len += snprintf(varDataVal(buf) + len, sizeof(buf) - VARSTR_HEADER_SIZE - len, "%.6lf, ", ppInfo->result);
|
||||
}
|
||||
tMemBucketDestroy(pMemBucket);
|
||||
return functionFinalize(pCtx, pBlock);
|
||||
}
|
||||
|
||||
int32_t slotId = pCtx->pExpr->base.resSchema.slotId;
|
||||
SColumnInfoData* pCol = taosArrayGet(pBlock->pDataBlock, slotId);
|
||||
|
||||
varDataSetLen(buf, len);
|
||||
colDataAppend(pCol, pBlock->info.rows, buf, false);
|
||||
|
||||
tMemBucketDestroy(pMemBucket);
|
||||
return pResInfo->numOfRes;
|
||||
} else {
|
||||
SVariant* pVal = &pCtx->param[1].param;
|
||||
|
||||
GET_TYPED_DATA(v, double, pVal->nType, &pVal->i);
|
||||
|
||||
code = getPercentile(pMemBucket, v, &ppInfo->result);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
goto _fin_error;
|
||||
}
|
||||
|
||||
tMemBucketDestroy(pMemBucket);
|
||||
return functionFinalize(pCtx, pBlock);
|
||||
}
|
||||
|
||||
_fin_error:
|
||||
|
|
Loading…
Reference in New Issue