feat: get latest schema
This commit is contained in:
parent
b350d0025d
commit
c55b402777
|
@ -155,44 +155,52 @@ int metaTbCursorNext(SMTbCursor *pTbCur) {
|
||||||
}
|
}
|
||||||
|
|
||||||
SSchemaWrapper *metaGetTableSchema(SMeta *pMeta, tb_uid_t uid, int32_t sver, bool isinline) {
|
SSchemaWrapper *metaGetTableSchema(SMeta *pMeta, tb_uid_t uid, int32_t sver, bool isinline) {
|
||||||
void *pKey = NULL;
|
void *pData = NULL;
|
||||||
void *pVal = NULL;
|
int nData = 0;
|
||||||
int kLen = 0;
|
int64_t version;
|
||||||
int vLen = 0;
|
SSchemaWrapper schema = {0};
|
||||||
int ret;
|
SSchemaWrapper *pSchema = NULL;
|
||||||
SSkmDbKey skmDbKey;
|
SDecoder dc = {0};
|
||||||
SSchemaWrapper *pSW = NULL;
|
|
||||||
SSchema *pSchema = NULL;
|
|
||||||
void *pBuf;
|
|
||||||
SDecoder coder = {0};
|
|
||||||
|
|
||||||
// fetch
|
|
||||||
skmDbKey.uid = uid;
|
|
||||||
skmDbKey.sver = sver;
|
|
||||||
pKey = &skmDbKey;
|
|
||||||
kLen = sizeof(skmDbKey);
|
|
||||||
metaRLock(pMeta);
|
metaRLock(pMeta);
|
||||||
ret = tdbTbGet(pMeta->pSkmDb, pKey, kLen, &pVal, &vLen);
|
if (sver < 0) {
|
||||||
metaULock(pMeta);
|
if (tdbTbGet(pMeta->pUidIdx, &uid, sizeof(uid), &pData, &nData) < 0) {
|
||||||
if (ret < 0) {
|
goto _err;
|
||||||
return NULL;
|
}
|
||||||
|
|
||||||
|
version = *(int64_t *)pData;
|
||||||
|
|
||||||
|
tdbTbGet(pMeta->pTbDb, &(STbDbKey){.uid = uid, .version = version}, sizeof(STbDbKey), &pData, &nData);
|
||||||
|
|
||||||
|
SMetaEntry me = {0};
|
||||||
|
tDecoderInit(&dc, pData, nData);
|
||||||
|
metaDecodeEntry(&dc, &me);
|
||||||
|
if (me.type == TSDB_SUPER_TABLE) {
|
||||||
|
pSchema = tCloneSSchemaWrapper(&me.stbEntry.schemaRow);
|
||||||
|
} else if (me.type == TSDB_NORMAL_TABLE) {
|
||||||
|
} else {
|
||||||
|
ASSERT(0);
|
||||||
|
}
|
||||||
|
tDecoderClear(&dc);
|
||||||
|
} else {
|
||||||
|
if (tdbTbGet(pMeta->pSkmDb, &(SSkmDbKey){.uid = uid, .sver = sver}, sizeof(SSkmDbKey), &pData, &nData) < 0) {
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
|
tDecoderInit(&dc, pData, nData);
|
||||||
|
tDecodeSSchemaWrapper(&dc, &schema);
|
||||||
|
pSchema = tCloneSSchemaWrapper(&schema);
|
||||||
|
tDecoderClear(&dc);
|
||||||
}
|
}
|
||||||
|
|
||||||
// decode
|
metaULock(pMeta);
|
||||||
pBuf = pVal;
|
tdbFree(pData);
|
||||||
pSW = taosMemoryMalloc(sizeof(SSchemaWrapper));
|
return pSchema;
|
||||||
|
|
||||||
tDecoderInit(&coder, pVal, vLen);
|
_err:
|
||||||
tDecodeSSchemaWrapper(&coder, pSW);
|
metaULock(pMeta);
|
||||||
pSchema = taosMemoryMalloc(sizeof(SSchema) * pSW->nCols);
|
tdbFree(pData);
|
||||||
memcpy(pSchema, pSW->pSchema, sizeof(SSchema) * pSW->nCols);
|
return NULL;
|
||||||
tDecoderClear(&coder);
|
|
||||||
|
|
||||||
pSW->pSchema = pSchema;
|
|
||||||
|
|
||||||
tdbFree(pVal);
|
|
||||||
|
|
||||||
return pSW;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct SMCtbCursor {
|
struct SMCtbCursor {
|
||||||
|
|
Loading…
Reference in New Issue