more code
This commit is contained in:
parent
5a636ae577
commit
e2f99ba072
|
@ -52,6 +52,7 @@ target_sources(
|
||||||
"src/tsdb/tsdbDiskData.c"
|
"src/tsdb/tsdbDiskData.c"
|
||||||
"src/tsdb/tsdbCompress.c"
|
"src/tsdb/tsdbCompress.c"
|
||||||
"src/tsdb/tsdbCompact.c"
|
"src/tsdb/tsdbCompact.c"
|
||||||
|
"src/tsdb/tsdbMergeTree.c"
|
||||||
|
|
||||||
# tq
|
# tq
|
||||||
"src/tq/tq.c"
|
"src/tq/tq.c"
|
||||||
|
|
|
@ -620,6 +620,12 @@ struct SDataFReader {
|
||||||
uint8_t *aBuf[3];
|
uint8_t *aBuf[3];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int64_t suid;
|
||||||
|
int64_t uid;
|
||||||
|
TSDBROW row;
|
||||||
|
} SRowInfo;
|
||||||
|
|
||||||
// ========== inline functions ==========
|
// ========== inline functions ==========
|
||||||
static FORCE_INLINE int32_t tsdbKeyCmprFn(const void *p1, const void *p2) {
|
static FORCE_INLINE int32_t tsdbKeyCmprFn(const void *p1, const void *p2) {
|
||||||
TSDBKEY *pKey1 = (TSDBKEY *)p1;
|
TSDBKEY *pKey1 = (TSDBKEY *)p1;
|
||||||
|
|
|
@ -20,12 +20,6 @@ typedef struct {
|
||||||
STSchema *pTSchema;
|
STSchema *pTSchema;
|
||||||
} SSkmInfo;
|
} SSkmInfo;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int64_t suid;
|
|
||||||
int64_t uid;
|
|
||||||
TSDBROW row;
|
|
||||||
} SRowInfo;
|
|
||||||
|
|
||||||
typedef enum { MEMORY_DATA_ITER = 0, LAST_DATA_ITER } EDataIterT;
|
typedef enum { MEMORY_DATA_ITER = 0, LAST_DATA_ITER } EDataIterT;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -0,0 +1,133 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can use, redistribute, and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License, version 3
|
||||||
|
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "tsdb.h"
|
||||||
|
|
||||||
|
// SLDataIter =================================================
|
||||||
|
typedef struct {
|
||||||
|
SRBTreeNode node;
|
||||||
|
SBlockL *pBlockL;
|
||||||
|
SRowInfo *pRowInfo;
|
||||||
|
|
||||||
|
SDataFReader *pReader;
|
||||||
|
int32_t iLast;
|
||||||
|
int8_t backward;
|
||||||
|
SArray *aBlockL;
|
||||||
|
int32_t iBlockL;
|
||||||
|
SBlockData bData;
|
||||||
|
int32_t iRow;
|
||||||
|
SRowInfo rInfo;
|
||||||
|
} SLDataIter;
|
||||||
|
|
||||||
|
int32_t tLDataIterOpen(SLDataIter *pIter, SDataFReader *pReader, int32_t iLast, int8_t backward) {
|
||||||
|
int32_t code = 0;
|
||||||
|
|
||||||
|
pIter->pReader = pReader;
|
||||||
|
pIter->iLast = iLast;
|
||||||
|
pIter->backward = backward;
|
||||||
|
|
||||||
|
pIter->aBlockL = taosArrayInit(0, sizeof(SBlockL));
|
||||||
|
if (pIter->aBlockL == NULL) {
|
||||||
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
goto _exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
code = tBlockDataCreate(&pIter->bData);
|
||||||
|
if (code) goto _exit;
|
||||||
|
|
||||||
|
code = tsdbReadBlockL(pReader, iLast, pIter->aBlockL);
|
||||||
|
if (code) goto _exit;
|
||||||
|
|
||||||
|
if (backward) {
|
||||||
|
pIter->iBlockL = taosArrayGetSize(pIter->aBlockL) - 1;
|
||||||
|
} else {
|
||||||
|
pIter->iBlockL = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
_exit:
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
void tLDataIterClose(SLDataIter *pIter) {
|
||||||
|
tBlockDataDestroy(&pIter->bData, 1);
|
||||||
|
taosArrayDestroy(pIter->aBlockL);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern int32_t tsdbReadLastBlockEx(SDataFReader *pReader, int32_t iLast, SBlockL *pBlockL, SBlockData *pBlockData);
|
||||||
|
|
||||||
|
void tLDataIterNextBlock(SLDataIter *pIter) {
|
||||||
|
if (pIter->backward) {
|
||||||
|
pIter->iBlockL--;
|
||||||
|
} else {
|
||||||
|
pIter->iBlockL++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pIter->iBlockL >= 0 && pIter->iBlockL < taosArrayGetSize(pIter->aBlockL)) {
|
||||||
|
pIter->pBlockL = (SBlockL *)taosArrayGet(pIter->aBlockL, pIter->iBlockL);
|
||||||
|
} else {
|
||||||
|
pIter->pBlockL = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t tLDataIterNextRow(SLDataIter *pIter) {
|
||||||
|
int32_t code = 0;
|
||||||
|
|
||||||
|
if (pIter->backward) {
|
||||||
|
pIter->iRow--;
|
||||||
|
if (pIter->iRow < 0) {
|
||||||
|
pIter->iBlockL--;
|
||||||
|
|
||||||
|
if (pIter->iBlockL >= 0) {
|
||||||
|
code = tsdbReadLastBlockEx(pIter->pReader, pIter->iLast, taosArrayGet(pIter->aBlockL, pIter->iBlockL),
|
||||||
|
&pIter->bData);
|
||||||
|
if (code) goto _exit;
|
||||||
|
} else {
|
||||||
|
// TODO: no more data here
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
pIter->iRow++;
|
||||||
|
if (pIter->iRow >= pIter->bData.nRow) {
|
||||||
|
pIter->iBlockL++;
|
||||||
|
if (pIter->iBlockL < taosArrayGetSize(pIter->aBlockL)) {
|
||||||
|
code = tsdbReadLastBlockEx(pIter->pReader, pIter->iLast, taosArrayGet(pIter->aBlockL, pIter->iBlockL),
|
||||||
|
&pIter->bData);
|
||||||
|
if (code) goto _exit;
|
||||||
|
} else {
|
||||||
|
// TODO: not more data
|
||||||
|
goto _exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pIter->rInfo.suid = pIter->bData.suid;
|
||||||
|
pIter->rInfo.uid = pIter->bData.uid;
|
||||||
|
pIter->rInfo.row = tsdbRowFromBlockData(&pIter->bData, pIter->iRow);
|
||||||
|
|
||||||
|
_exit:
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
SRowInfo *tLDataIterGet(SLDataIter *pIter) {
|
||||||
|
// TODO
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// SMergeTree =================================================
|
||||||
|
typedef struct {
|
||||||
|
int8_t backward;
|
||||||
|
SRBTreeNode *pNode;
|
||||||
|
SRBTree rbt;
|
||||||
|
} SMergeTree;
|
Loading…
Reference in New Issue