feat(tsdb): read complex primary key from buf.
This commit is contained in:
parent
3d64b10350
commit
bc98f12798
|
@ -233,8 +233,8 @@ struct SValue {
|
||||||
union {
|
union {
|
||||||
int64_t val;
|
int64_t val;
|
||||||
struct {
|
struct {
|
||||||
uint32_t nData;
|
|
||||||
uint8_t *pData;
|
uint8_t *pData;
|
||||||
|
uint32_t nData;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -3339,9 +3339,18 @@ TSDBROW* getValidMemRow(SIterInfo* pIter, const SArray* pDelList, STsdbReader* p
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
TSDBROW* pRow = tsdbTbDataIterGet(pIter->iter);
|
|
||||||
TSDBKEY key = TSDBROW_KEY(pRow);
|
|
||||||
int32_t order = pReader->info.order;
|
int32_t order = pReader->info.order;
|
||||||
|
TSDBROW* pRow = tsdbTbDataIterGet(pIter->iter);
|
||||||
|
|
||||||
|
if (!pReader->pkChecked) {
|
||||||
|
STsdbRowKey k;
|
||||||
|
tsdbRowGetKey(pRow, &k);
|
||||||
|
|
||||||
|
pReader->pkComparFn = getComparFunc(k.key.pks[0].type, 0);
|
||||||
|
pReader->pkChecked = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
TSDBKEY key = TSDBROW_KEY(pRow);
|
||||||
if (outOfTimeWindow(key.ts, &pReader->info.window)) {
|
if (outOfTimeWindow(key.ts, &pReader->info.window)) {
|
||||||
pIter->hasVal = false;
|
pIter->hasVal = false;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -3519,6 +3528,20 @@ int32_t doMergeRowsInSttBlock(SSttBlockReader* pSttBlockReader, STableBlockScanI
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t pkComp(STsdbReader* pReader, TSDBROW* p1, TSDBROW* p2) {
|
||||||
|
STsdbRowKey k1 = {0}, k2 = {0};
|
||||||
|
|
||||||
|
if (pReader->pkComparFn == NULL) {
|
||||||
|
ASSERT(TSDBROW_TS(p1) != TSDBROW_TS(p2));
|
||||||
|
ASSERT(pReader->pkChecked);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
tsdbRowGetKey(p1, &k1);
|
||||||
|
tsdbRowGetKey(p2, &k2);
|
||||||
|
return pReader->pkComparFn(&k1.key.pks[0].val, &k2.key.pks[0].val);
|
||||||
|
}
|
||||||
|
|
||||||
int32_t doMergeMemTableMultiRows(TSDBROW* pRow, uint64_t uid, SIterInfo* pIter, SArray* pDelList, TSDBROW* pResRow,
|
int32_t doMergeMemTableMultiRows(TSDBROW* pRow, uint64_t uid, SIterInfo* pIter, SArray* pDelList, TSDBROW* pResRow,
|
||||||
STsdbReader* pReader, bool* freeTSRow) {
|
STsdbReader* pReader, bool* freeTSRow) {
|
||||||
TSDBROW* pNextRow = NULL;
|
TSDBROW* pNextRow = NULL;
|
||||||
|
@ -3539,7 +3562,7 @@ int32_t doMergeMemTableMultiRows(TSDBROW* pRow, uint64_t uid, SIterInfo* pIter,
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TSDBROW_TS(¤t) != TSDBROW_TS(pNextRow)) {
|
if (TSDBROW_TS(¤t) != TSDBROW_TS(pNextRow) || (pkComp(pReader, ¤t, pNextRow) != 0)) {
|
||||||
*pResRow = current;
|
*pResRow = current;
|
||||||
*freeTSRow = false;
|
*freeTSRow = false;
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
@ -3685,7 +3708,7 @@ static int32_t tsdbGetNextRowInMem(STableBlockScanInfo* pBlockScanInfo, STsdbRea
|
||||||
TSDBKEY ik = TSDBROW_KEY(piRow);
|
TSDBKEY ik = TSDBROW_KEY(piRow);
|
||||||
|
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
if (ik.ts != k.ts) {
|
if (ik.ts != k.ts || (pkComp(pReader, pRow, piRow) != 0)) {
|
||||||
if (((ik.ts < k.ts) && asc) || ((ik.ts > k.ts) && (!asc))) { // ik.ts < k.ts
|
if (((ik.ts < k.ts) && asc) || ((ik.ts > k.ts) && (!asc))) { // ik.ts < k.ts
|
||||||
code = doMergeMemTableMultiRows(piRow, uid, &pBlockScanInfo->iiter, pDelList, pResRow, pReader, freeTSRow);
|
code = doMergeMemTableMultiRows(piRow, uid, &pBlockScanInfo->iiter, pDelList, pResRow, pReader, freeTSRow);
|
||||||
} else if (((k.ts < ik.ts) && asc) || ((k.ts > ik.ts) && (!asc))) {
|
} else if (((k.ts < ik.ts) && asc) || ((k.ts > ik.ts) && (!asc))) {
|
||||||
|
@ -3704,8 +3727,7 @@ static int32_t tsdbGetNextRowInMem(STableBlockScanInfo* pBlockScanInfo, STsdbRea
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pBlockScanInfo->iter.hasVal && pRow != NULL) {
|
if (pBlockScanInfo->iter.hasVal && pRow != NULL) {
|
||||||
return doMergeMemTableMultiRows(pRow, pBlockScanInfo->uid, &pBlockScanInfo->iter, pDelList, pResRow, pReader,
|
return doMergeMemTableMultiRows(pRow, uid, &pBlockScanInfo->iter, pDelList, pResRow, pReader, freeTSRow);
|
||||||
freeTSRow);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pBlockScanInfo->iiter.hasVal && piRow != NULL) {
|
if (pBlockScanInfo->iiter.hasVal && piRow != NULL) {
|
||||||
|
|
|
@ -267,6 +267,8 @@ struct STsdbReader {
|
||||||
bool bFilesetDelimited; // duration by duration output
|
bool bFilesetDelimited; // duration by duration output
|
||||||
TsdReaderNotifyCbFn notifyFn;
|
TsdReaderNotifyCbFn notifyFn;
|
||||||
void* notifyParam;
|
void* notifyParam;
|
||||||
|
__compar_fn_t pkComparFn;
|
||||||
|
bool pkChecked;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct SBrinRecordIter {
|
typedef struct SBrinRecordIter {
|
||||||
|
|
Loading…
Reference in New Issue