refactor: do some internal refactor.
This commit is contained in:
parent
e3aabacf9a
commit
0c427b5f5b
|
@ -130,7 +130,7 @@ void tColDataInit(SColData *pColData, int16_t cid, int8_t type, int8_t smaOn)
|
||||||
void tColDataClear(SColData *pColData);
|
void tColDataClear(SColData *pColData);
|
||||||
int32_t tColDataAppendValue(SColData *pColData, SColVal *pColVal);
|
int32_t tColDataAppendValue(SColData *pColData, SColVal *pColVal);
|
||||||
void tColDataGetValue(SColData *pColData, int32_t iVal, SColVal *pColVal);
|
void tColDataGetValue(SColData *pColData, int32_t iVal, SColVal *pColVal);
|
||||||
uint8_t tColDataGetBitValue(SColData *pColData, int32_t iVal);
|
uint8_t tColDataGetBitValue(const SColData *pColData, int32_t iVal);
|
||||||
int32_t tColDataCopy(SColData *pColDataSrc, SColData *pColDataDest);
|
int32_t tColDataCopy(SColData *pColDataSrc, SColData *pColDataDest);
|
||||||
extern void (*tColDataCalcSMA[])(SColData *pColData, int64_t *sum, int64_t *max, int64_t *min, int16_t *numOfNull);
|
extern void (*tColDataCalcSMA[])(SColData *pColData, int64_t *sum, int64_t *max, int64_t *min, int16_t *numOfNull);
|
||||||
|
|
||||||
|
|
|
@ -1557,7 +1557,7 @@ void tColDataGetValue(SColData *pColData, int32_t iVal, SColVal *pColVal) {
|
||||||
tColDataGetValueImpl[pColData->flag](pColData, iVal, pColVal);
|
tColDataGetValueImpl[pColData->flag](pColData, iVal, pColVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t tColDataGetBitValue(SColData *pColData, int32_t iVal) {
|
uint8_t tColDataGetBitValue(const SColData *pColData, int32_t iVal) {
|
||||||
uint8_t v;
|
uint8_t v;
|
||||||
switch (pColData->flag) {
|
switch (pColData->flag) {
|
||||||
case HAS_NONE:
|
case HAS_NONE:
|
||||||
|
|
|
@ -910,7 +910,7 @@ static int32_t getEndPosInDataBlock(STsdbReader* pReader, SBlockData* pBlockData
|
||||||
return endPos;
|
return endPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void copyPrimaryTsCol(SBlockData* pBlockData, SFileBlockDumpInfo* pDumpInfo, SColumnInfoData* pColData,
|
static void copyPrimaryTsCol(const SBlockData* pBlockData, SFileBlockDumpInfo* pDumpInfo, SColumnInfoData* pColData,
|
||||||
int32_t dumpedRows, bool asc) {
|
int32_t dumpedRows, bool asc) {
|
||||||
if (asc) {
|
if (asc) {
|
||||||
memcpy(pColData->pData, &pBlockData->aTSKEY[pDumpInfo->rowIndex], dumpedRows * sizeof(int64_t));
|
memcpy(pColData->pData, &pBlockData->aTSKEY[pDumpInfo->rowIndex], dumpedRows * sizeof(int64_t));
|
||||||
|
@ -930,6 +930,97 @@ static void copyPrimaryTsCol(SBlockData* pBlockData, SFileBlockDumpInfo* pDumpIn
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// a faster version of copy procedure.
|
||||||
|
static void copyNumericCols(const SColData* pData, SFileBlockDumpInfo* pDumpInfo, SColumnInfoData* pColData,
|
||||||
|
int32_t dumpedRows, bool asc) {
|
||||||
|
uint8_t* p = NULL;
|
||||||
|
if (asc) {
|
||||||
|
p = pData->pData + tDataTypes[pData->type].bytes * pDumpInfo->rowIndex;
|
||||||
|
} else {
|
||||||
|
int32_t startIndex = pDumpInfo->rowIndex - dumpedRows + 1;
|
||||||
|
p = pData->pData + tDataTypes[pData->type].bytes * startIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t step = asc? 1:-1;
|
||||||
|
|
||||||
|
// make sure it is aligned to 8bit
|
||||||
|
ASSERT((((uint64_t)pColData->pData) & (0x8 - 1)) == 0);
|
||||||
|
|
||||||
|
// 1. copy data in a batch model
|
||||||
|
memcpy(pColData->pData, p, dumpedRows * tDataTypes[pData->type].bytes);
|
||||||
|
|
||||||
|
// 2. reverse the array list in case of descending order scan data block
|
||||||
|
if (!asc) {
|
||||||
|
switch(pColData->info.type) {
|
||||||
|
case TSDB_DATA_TYPE_TIMESTAMP:
|
||||||
|
case TSDB_DATA_TYPE_DOUBLE:
|
||||||
|
case TSDB_DATA_TYPE_BIGINT:
|
||||||
|
case TSDB_DATA_TYPE_UBIGINT:
|
||||||
|
{
|
||||||
|
int32_t mid = dumpedRows >> 1u;
|
||||||
|
int64_t* pts = (int64_t*)pColData->pData;
|
||||||
|
for (int32_t j = 0; j < mid; ++j) {
|
||||||
|
int64_t t = pts[j];
|
||||||
|
pts[j] = pts[dumpedRows - j - 1];
|
||||||
|
pts[dumpedRows - j - 1] = t;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDB_DATA_TYPE_BOOL:
|
||||||
|
case TSDB_DATA_TYPE_TINYINT:
|
||||||
|
case TSDB_DATA_TYPE_UTINYINT: {
|
||||||
|
int32_t mid = dumpedRows >> 1u;
|
||||||
|
int8_t* pts = (int8_t*)pColData->pData;
|
||||||
|
for (int32_t j = 0; j < mid; ++j) {
|
||||||
|
int64_t t = pts[j];
|
||||||
|
pts[j] = pts[dumpedRows - j - 1];
|
||||||
|
pts[dumpedRows - j - 1] = t;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDB_DATA_TYPE_SMALLINT:
|
||||||
|
case TSDB_DATA_TYPE_USMALLINT: {
|
||||||
|
int32_t mid = dumpedRows >> 1u;
|
||||||
|
int16_t* pts = (int16_t*)pColData->pData;
|
||||||
|
for (int32_t j = 0; j < mid; ++j) {
|
||||||
|
int64_t t = pts[j];
|
||||||
|
pts[j] = pts[dumpedRows - j - 1];
|
||||||
|
pts[dumpedRows - j - 1] = t;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDB_DATA_TYPE_FLOAT:
|
||||||
|
case TSDB_DATA_TYPE_INT:
|
||||||
|
case TSDB_DATA_TYPE_UINT: {
|
||||||
|
int32_t mid = dumpedRows >> 1u;
|
||||||
|
int32_t* pts = (int32_t*)pColData->pData;
|
||||||
|
for (int32_t j = 0; j < mid; ++j) {
|
||||||
|
int64_t t = pts[j];
|
||||||
|
pts[j] = pts[dumpedRows - j - 1];
|
||||||
|
pts[dumpedRows - j - 1] = t;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. if the null value exists, check items one-by-one
|
||||||
|
if (pData->flag != HAS_VALUE) {
|
||||||
|
int32_t rowIndex = 0;
|
||||||
|
|
||||||
|
for (int32_t j = pDumpInfo->rowIndex; rowIndex < dumpedRows; j += step, rowIndex++) {
|
||||||
|
uint8_t v = tColDataGetBitValue(pData, j);
|
||||||
|
if (v == 0 || v == 1) {
|
||||||
|
colDataSetNull_f(pColData->nullbitmap, rowIndex);
|
||||||
|
pColData->hasNull = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int32_t copyBlockDataToSDataBlock(STsdbReader* pReader, STableBlockScanInfo* pBlockScanInfo) {
|
static int32_t copyBlockDataToSDataBlock(STsdbReader* pReader, STableBlockScanInfo* pBlockScanInfo) {
|
||||||
SReaderStatus* pStatus = &pReader->status;
|
SReaderStatus* pStatus = &pReader->status;
|
||||||
SDataBlockIter* pBlockIter = &pStatus->blockIter;
|
SDataBlockIter* pBlockIter = &pStatus->blockIter;
|
||||||
|
@ -997,84 +1088,8 @@ static int32_t copyBlockDataToSDataBlock(STsdbReader* pReader, STableBlockScanIn
|
||||||
colDataAppendNNULL(pColData, 0, dumpedRows);
|
colDataAppendNNULL(pColData, 0, dumpedRows);
|
||||||
} else {
|
} else {
|
||||||
if (IS_MATHABLE_TYPE(pColData->info.type)) {
|
if (IS_MATHABLE_TYPE(pColData->info.type)) {
|
||||||
|
copyNumericCols(pData, pDumpInfo, pColData, dumpedRows, asc);
|
||||||
uint8_t* p = NULL;
|
} else { // varchar/nchar type
|
||||||
if (asc) {
|
|
||||||
p = pData->pData + tDataTypes[pData->type].bytes * pDumpInfo->rowIndex;
|
|
||||||
} else {
|
|
||||||
int32_t startIndex = pDumpInfo->rowIndex - dumpedRows + 1;
|
|
||||||
p = pData->pData + tDataTypes[pData->type].bytes * startIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
// make sure it is aligned to 8bit
|
|
||||||
ASSERT((((uint64_t)pColData->pData) & (0x8 - 1)) == 0);
|
|
||||||
memcpy(pColData->pData, p, dumpedRows * tDataTypes[pData->type].bytes);
|
|
||||||
|
|
||||||
if (!asc) {
|
|
||||||
switch(pColData->info.type) {
|
|
||||||
case TSDB_DATA_TYPE_TIMESTAMP:
|
|
||||||
case TSDB_DATA_TYPE_BIGINT:
|
|
||||||
case TSDB_DATA_TYPE_UBIGINT:
|
|
||||||
{
|
|
||||||
int32_t mid = dumpedRows >> 1u;
|
|
||||||
int64_t* pts = (int64_t*)pColData->pData;
|
|
||||||
for (int32_t j = 0; j < mid; ++j) {
|
|
||||||
int64_t t = pts[j];
|
|
||||||
pts[j] = pts[dumpedRows - j - 1];
|
|
||||||
pts[dumpedRows - j - 1] = t;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case TSDB_DATA_TYPE_BOOL:
|
|
||||||
case TSDB_DATA_TYPE_TINYINT:
|
|
||||||
case TSDB_DATA_TYPE_UTINYINT: {
|
|
||||||
int32_t mid = dumpedRows >> 1u;
|
|
||||||
int8_t* pts = (int8_t*)pColData->pData;
|
|
||||||
for (int32_t j = 0; j < mid; ++j) {
|
|
||||||
int64_t t = pts[j];
|
|
||||||
pts[j] = pts[dumpedRows - j - 1];
|
|
||||||
pts[dumpedRows - j - 1] = t;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case TSDB_DATA_TYPE_SMALLINT:
|
|
||||||
case TSDB_DATA_TYPE_USMALLINT: {
|
|
||||||
int32_t mid = dumpedRows >> 1u;
|
|
||||||
int16_t* pts = (int16_t*)pColData->pData;
|
|
||||||
for (int32_t j = 0; j < mid; ++j) {
|
|
||||||
int64_t t = pts[j];
|
|
||||||
pts[j] = pts[dumpedRows - j - 1];
|
|
||||||
pts[dumpedRows - j - 1] = t;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case TSDB_DATA_TYPE_INT:
|
|
||||||
case TSDB_DATA_TYPE_UINT: {
|
|
||||||
int32_t mid = dumpedRows >> 1u;
|
|
||||||
int32_t* pts = (int32_t*)pColData->pData;
|
|
||||||
for (int32_t j = 0; j < mid; ++j) {
|
|
||||||
int64_t t = pts[j];
|
|
||||||
pts[j] = pts[dumpedRows - j - 1];
|
|
||||||
pts[dumpedRows - j - 1] = t;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// null value exists, check one-by-one
|
|
||||||
if (pData->flag != HAS_VALUE) {
|
|
||||||
for (int32_t j = pDumpInfo->rowIndex; rowIndex < dumpedRows; j += step, rowIndex++) {
|
|
||||||
uint8_t v = tColDataGetBitValue(pData, j);
|
|
||||||
if (v == 0 || v == 1) {
|
|
||||||
colDataSetNull_f(pColData->nullbitmap, rowIndex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (int32_t j = pDumpInfo->rowIndex; rowIndex < dumpedRows; j += step) {
|
for (int32_t j = pDumpInfo->rowIndex; rowIndex < dumpedRows; j += step) {
|
||||||
tColDataGetValue(pData, j, &cv);
|
tColDataGetValue(pData, j, &cv);
|
||||||
doCopyColVal(pColData, rowIndex++, i, &cv, pSupInfo);
|
doCopyColVal(pColData, rowIndex++, i, &cv, pSupInfo);
|
||||||
|
|
|
@ -3022,6 +3022,7 @@ int32_t firstFunction(SqlFunctionCtx* pCtx) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (numOfElems == 0) {
|
if (numOfElems == 0) {
|
||||||
// save selectivity value for column consisted of all null values
|
// save selectivity value for column consisted of all null values
|
||||||
firstlastSaveTupleData(pCtx->pSrcBlock, pInput->startRowIndex, pCtx, pInfo);
|
firstlastSaveTupleData(pCtx->pSrcBlock, pInput->startRowIndex, pCtx, pInfo);
|
||||||
|
|
Loading…
Reference in New Issue