more code
This commit is contained in:
parent
7c75ad38fc
commit
a990224e96
|
@ -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;
|
int32_t i = start, j = mid + 1, k = 0;
|
||||||
|
SRowKey keyi, keyj;
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue