From 74900ff04e876d2bf596d9781816915e82a367cc Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Tue, 28 Dec 2021 16:22:35 +0800 Subject: [PATCH] more work --- include/dnode/vnode/meta/meta.h | 2 +- source/dnode/vnode/meta/src/metaBDBImpl.c | 74 +++++++++++++++++++++-- 2 files changed, 69 insertions(+), 7 deletions(-) diff --git a/include/dnode/vnode/meta/meta.h b/include/dnode/vnode/meta/meta.h index 067682af1a..cc5eabf3bf 100644 --- a/include/dnode/vnode/meta/meta.h +++ b/include/dnode/vnode/meta/meta.h @@ -48,7 +48,7 @@ int metaDropTable(SMeta *pMeta, tb_uid_t uid); int metaCommit(SMeta *pMeta); // For Query -int metaGetTableInfo(SMeta *pMeta, const char *tbname, STableMetaMsg **ppMsg); +int metaGetTableInfo(SMeta *pMeta, char *tbname, STableMetaMsg **ppMsg); // Options void metaOptionsInit(SMetaCfg *pMetaCfg); diff --git a/source/dnode/vnode/meta/src/metaBDBImpl.c b/source/dnode/vnode/meta/src/metaBDBImpl.c index e2137ebbdf..a8d8b67fd4 100644 --- a/source/dnode/vnode/meta/src/metaBDBImpl.c +++ b/source/dnode/vnode/meta/src/metaBDBImpl.c @@ -431,17 +431,79 @@ static void metaClearTbCfg(STbCfg *pTbCfg) { } /* ------------------------ FOR QUERY ------------------------ */ -int metaGetTableInfo(SMeta *pMeta, const char *tbname, STableMetaMsg **ppMsg) { - DBT key = {0}; - DBT value = {0}; - SMetaDB *pMetaDB = pMeta->pDB; +int metaGetTableInfo(SMeta *pMeta, char *tbname, STableMetaMsg **ppMsg) { + DBT key = {0}; + DBT value = {0}; + SMetaDB * pMetaDB = pMeta->pDB; + int ret; + STbCfg tbCfg; + SSchemaKey schemaKey; + DBT key1 = {0}; + DBT value1 = {0}; + uint32_t ncols; + void * pBuf; + int tlen; + STableMetaMsg *pMsg; key.data = tbname; key.size = strlen(tbname) + 1; - pMetaDB->pNameIdx->get(pMetaDB->pNameIdx, NULL, &key, &value, 0); + ret = pMetaDB->pNameIdx->get(pMetaDB->pNameIdx, NULL, &key, &value, 0); + if (ret != 0) { + // TODO + return -1; + } - // TODO: construct the message body + metaDecodeTbInfo(value.data, &tbCfg); + + switch (tbCfg.type) { + case META_SUPER_TABLE: + schemaKey.uid = tbCfg.stbCfg.suid; + schemaKey.sver = 0; + + key1.data = &schemaKey; + key1.size = sizeof(schemaKey); + + ret = pMetaDB->pSchemaDB->get(pMetaDB->pSchemaDB, &key1, &value1, NULL, 0); + if (ret != 0) { + // TODO + return -1; + } + pBuf = value1.data; + pBuf = taosDecodeFixedU32(pBuf, &ncols); + + tlen = sizeof(STableMetaMsg) + (tbCfg.stbCfg.nTagCols + ncols) * sizeof(SSchema); + pMsg = calloc(1, tlen); + if (pMsg == NULL) { + terrno = TSDB_CODE_OUT_OF_MEMORY; + return -1; + } + + strcpy(pMsg->tbFname, tbCfg.name); + pMsg->numOfTags = tbCfg.stbCfg.nTagCols; + pMsg->numOfColumns = ncols; + pMsg->tableType = tbCfg.type; + pMsg->sversion = 0; + pMsg->tversion = 0; + pMsg->suid = tbCfg.stbCfg.suid; + pMsg->tuid = tbCfg.stbCfg.suid; + for (size_t i = 0; i < tbCfg.stbCfg.nTagCols; i++) { + + } + + break; + case META_CHILD_TABLE: + ASSERT(0); + break; + case META_NORMAL_TABLE: + ASSERT(0); + break; + default: + ASSERT(0); + break; + } + + *ppMsg = pMsg; return 0; } \ No newline at end of file