more code

This commit is contained in:
Hongze Cheng 2024-04-08 14:36:47 +08:00
parent 7c75ad38fc
commit a990224e96
1 changed files with 46 additions and 18 deletions

View File

@ -3107,11 +3107,27 @@ static int32_t tColDataCopyRowAppend(SColData *aFromColData, int32_t iFromRow, S
return code; return code;
} }
static FORCE_INLINE void tColDataArrGetRowKey(SColData *aColData, int32_t nColData, int32_t iRow, SRowKey *key) {
SColVal cv;
key->ts = ((TSKEY *)aColData[0].pData)[iRow];
key->numOfPKs = 0;
for (int i = 1; i < nColData; i++) {
if (aColData[i].cflag & COL_IS_KEY) {
ASSERT(aColData->flag == HAS_VALUE);
tColDataGetValue4(&aColData[i], iRow, &cv);
key->pks[key->numOfPKs++] = cv.value;
} else {
break;
}
}
}
static int32_t tColDataMergeSortMerge(SColData *aColData, int32_t start, int32_t mid, int32_t end, int32_t nColData) { static int32_t tColDataMergeSortMerge(SColData *aColData, int32_t start, int32_t mid, int32_t end, int32_t nColData) {
SColData *aDstColData = NULL; SColData *aDstColData = NULL;
TSKEY *aKey = (TSKEY *)aColData[0].pData; int32_t i = start, j = mid + 1, k = 0;
SRowKey keyi, keyj;
int32_t i = start, j = mid + 1, k = 0;
if (end > start) { if (end > start) {
aDstColData = taosMemoryCalloc(1, sizeof(SColData) * nColData); aDstColData = taosMemoryCalloc(1, sizeof(SColData) * nColData);
@ -3121,30 +3137,25 @@ static int32_t tColDataMergeSortMerge(SColData *aColData, int32_t start, int32_t
if (aDstColData == NULL) { if (aDstColData == NULL) {
return TSDB_CODE_OUT_OF_MEMORY; return TSDB_CODE_OUT_OF_MEMORY;
} }
/*
for (int32_t i = 0; i < nColData; i++) {
tColDataCopy(&aColData[i], &aDstColData[i], tColDataDefaultMalloc, NULL);
}
*/
} }
tColDataArrGetRowKey(aColData, nColData, i, &keyi);
tColDataArrGetRowKey(aColData, nColData, j, &keyj);
while (i <= mid && j <= end) { while (i <= mid && j <= end) {
if (aKey[i] <= aKey[j]) { if (tRowKeyCompare(&keyi, &keyj) <= 0) {
// tColDataCopyRow(aColData, i++, aDstColData, k++);
tColDataCopyRowAppend(aColData, i++, aDstColData, nColData); tColDataCopyRowAppend(aColData, i++, aDstColData, nColData);
tColDataArrGetRowKey(aColData, nColData, i, &keyi);
} else { } else {
// tColDataCopyRow(aColData, j++, aDstColData, k++);
tColDataCopyRowAppend(aColData, j++, aDstColData, nColData); tColDataCopyRowAppend(aColData, j++, aDstColData, nColData);
tColDataArrGetRowKey(aColData, nColData, j, &keyj);
} }
} }
while (i <= mid) { while (i <= mid) {
// tColDataCopyRow(aColData, i++, aDstColData, k++);
tColDataCopyRowAppend(aColData, i++, aDstColData, nColData); tColDataCopyRowAppend(aColData, i++, aDstColData, nColData);
} }
while (j <= end) { while (j <= end) {
// tColDataCopyRow(aColData, j++, aDstColData, k++);
tColDataCopyRowAppend(aColData, j++, aDstColData, nColData); tColDataCopyRowAppend(aColData, j++, aDstColData, nColData);
} }
@ -3391,12 +3402,16 @@ static void tColDataMergeImpl(SColData *pColData, int32_t iStart, int32_t iEnd /
} }
static void tColDataMerge(SColData *aColData, int32_t nColData) { static void tColDataMerge(SColData *aColData, int32_t nColData) {
int32_t iStart = 0; int32_t iStart = 0;
SRowKey keyStart, keyEnd;
for (;;) { for (;;) {
if (iStart >= aColData[0].nVal - 1) break; if (iStart >= aColData[0].nVal - 1) break;
tColDataArrGetRowKey(aColData, nColData, iStart, &keyStart);
int32_t iEnd = iStart + 1; int32_t iEnd = iStart + 1;
while (iEnd < aColData[0].nVal) { while (iEnd < aColData[0].nVal) {
if (((TSKEY *)aColData[0].pData)[iEnd] != ((TSKEY *)aColData[0].pData)[iStart]) break; tColDataArrGetRowKey(aColData, nColData, iEnd, &keyEnd);
if (tRowKeyCompare(&keyStart, &keyEnd) != 0) break;
iEnd++; iEnd++;
} }
@ -3410,6 +3425,7 @@ static void tColDataMerge(SColData *aColData, int32_t nColData) {
iStart++; iStart++;
} }
} }
void tColDataSortMerge(SArray *colDataArr) { void tColDataSortMerge(SArray *colDataArr) {
int32_t nColData = TARRAY_SIZE(colDataArr); int32_t nColData = TARRAY_SIZE(colDataArr);
SColData *aColData = (SColData *)TARRAY_DATA(colDataArr); SColData *aColData = (SColData *)TARRAY_DATA(colDataArr);
@ -3423,11 +3439,17 @@ void tColDataSortMerge(SArray *colDataArr) {
int8_t doSort = 0; int8_t doSort = 0;
int8_t doMerge = 0; int8_t doMerge = 0;
// scan ------- // scan -------
TSKEY *aKey = (TSKEY *)aColData[0].pData; SRowKey lastKey;
tColDataArrGetRowKey(aColData, nColData, 0, &lastKey);
for (int32_t iVal = 1; iVal < aColData[0].nVal; ++iVal) { for (int32_t iVal = 1; iVal < aColData[0].nVal; ++iVal) {
if (aKey[iVal] > aKey[iVal - 1]) { SRowKey key;
tColDataArrGetRowKey(aColData, nColData, iVal, &key);
int32_t c = tRowKeyCompare(&lastKey, &key);
if (c < 0) {
lastKey = key;
continue; continue;
} else if (aKey[iVal] < aKey[iVal - 1]) { } else if (c > 0) {
doSort = 1; doSort = 1;
break; break;
} else { } else {
@ -3441,11 +3463,17 @@ void tColDataSortMerge(SArray *colDataArr) {
} }
if (doMerge != 1) { if (doMerge != 1) {
tColDataArrGetRowKey(aColData, nColData, 0, &lastKey);
for (int32_t iVal = 1; iVal < aColData[0].nVal; ++iVal) { for (int32_t iVal = 1; iVal < aColData[0].nVal; ++iVal) {
if (aKey[iVal] == aKey[iVal - 1]) { SRowKey key;
tColDataArrGetRowKey(aColData, nColData, iVal, &key);
int32_t c = tRowKeyCompare(&lastKey, &key);
if (c == 0) {
doMerge = 1; doMerge = 1;
break; break;
} }
lastKey = key;
} }
} }