提交 a4cb6467 编写于 作者: H Hongze Cheng

more progress

上级 21237655
...@@ -48,7 +48,7 @@ int metaDropTable(SMeta *pMeta, tb_uid_t uid); ...@@ -48,7 +48,7 @@ int metaDropTable(SMeta *pMeta, tb_uid_t uid);
int metaCommit(SMeta *pMeta); int metaCommit(SMeta *pMeta);
// For Query // For Query
int metaGetTableInfo(SMeta *pMeta, char *tbname, STableMetaMsg **ppMsg); STbCfg *metaGetTableInfo(SMeta *pMeta, char *tbname);
// Options // Options
void metaOptionsInit(SMetaCfg *pMetaCfg); void metaOptionsInit(SMetaCfg *pMetaCfg);
......
...@@ -45,6 +45,7 @@ int vnodeProcessFetchReq(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) { ...@@ -45,6 +45,7 @@ int vnodeProcessFetchReq(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) {
} }
static int vnodeGetTableMeta(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) { static int vnodeGetTableMeta(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) {
#if 0
STableInfoMsg *pReq = (STableInfoMsg *)(pMsg->pCont); STableInfoMsg *pReq = (STableInfoMsg *)(pMsg->pCont);
STableMetaMsg *pRspMsg; STableMetaMsg *pRspMsg;
int ret; int ret;
...@@ -63,5 +64,6 @@ static int vnodeGetTableMeta(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) { ...@@ -63,5 +64,6 @@ static int vnodeGetTableMeta(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) {
// TODO // TODO
(*pRsp)->pCont = pRspMsg; (*pRsp)->pCont = pRspMsg;
#endif
return 0; return 0;
} }
\ No newline at end of file
...@@ -60,7 +60,9 @@ static int metaCtbIdxCb(DB *pIdx, const DBT *pKey, const DBT *pValue, DBT * ...@@ -60,7 +60,9 @@ static int metaCtbIdxCb(DB *pIdx, const DBT *pKey, const DBT *pValue, DBT *
static int metaEncodeTbInfo(void **buf, STbCfg *pTbCfg); static int metaEncodeTbInfo(void **buf, STbCfg *pTbCfg);
static void * metaDecodeTbInfo(void *buf, STbCfg *pTbCfg); static void * metaDecodeTbInfo(void *buf, STbCfg *pTbCfg);
static void metaClearTbCfg(STbCfg *pTbCfg); static void metaClearTbCfg(STbCfg *pTbCfg);
static SSchemaWrapper *metaGetTableSchema(SMeta *pMeta, tb_uid_t uid, int32_t sver); static SSchemaWrapper *metaGetTableSchema(SMeta *pMeta, tb_uid_t uid, int32_t sver, bool isinline);
static STbCfg * metaGetTbInfoByUid(SMeta *pMeta, tb_uid_t uid);
static STbCfg * metaGetTbInfoByName(SMeta *pMeta, char *tbname, tb_uid_t *uid);
#define BDB_PERR(info, code) fprintf(stderr, info " reason: %s", db_strerror(code)) #define BDB_PERR(info, code) fprintf(stderr, info " reason: %s", db_strerror(code))
...@@ -437,86 +439,89 @@ static void metaClearTbCfg(STbCfg *pTbCfg) { ...@@ -437,86 +439,89 @@ static void metaClearTbCfg(STbCfg *pTbCfg) {
} }
/* ------------------------ FOR QUERY ------------------------ */ /* ------------------------ FOR QUERY ------------------------ */
int metaGetTableInfo(SMeta *pMeta, char *tbname, STableMetaMsg **ppMsg) { STbCfg *metaGetTableInfo(SMeta *pMeta, char *tbname) {
#if 0 STbCfg * pTbCfg = NULL;
STbCfg * pStbCfg = NULL;
tb_uid_t uid;
int32_t sver = 0;
SSchemaWrapper *pSW;
pTbCfg = metaGetTbInfoByName(pMeta, tbname, &uid);
if (pTbCfg == NULL) {
return NULL;
}
if (pTbCfg->type == META_CHILD_TABLE) {
uid = pTbCfg->ctbCfg.suid;
}
pSW = metaGetTableSchema(pMeta, uid, 0, false);
if (pSW == NULL) {
return NULL;
}
return pTbCfg;
}
static STbCfg *metaGetTbInfoByUid(SMeta *pMeta, tb_uid_t uid) {
STbCfg * pTbCfg = NULL;
SMetaDB *pDB = pMeta->pDB;
DBT key = {0}; DBT key = {0};
DBT value = {0}; DBT value = {0};
SMetaDB * pMetaDB = pMeta->pDB;
int ret; int ret;
STbCfg tbCfg;
SSchemaKey schemaKey;
DBT key1 = {0};
DBT value1 = {0};
uint32_t ncols;
void * pBuf;
int tlen;
STableMetaMsg *pMsg;
SSchema * pSchema;
key.data = tbname; // Set key/value
key.size = strlen(tbname) + 1; key.data = &uid;
key.size = sizeof(uid);
ret = pMetaDB->pNameIdx->get(pMetaDB->pNameIdx, NULL, &key, &value, 0); // Query
ret = pDB->pTbDB->get(pDB->pTbDB, NULL, &key, &value, 0);
if (ret != 0) { if (ret != 0) {
// TODO return NULL;
return -1;
} }
metaDecodeTbInfo(value.data, &tbCfg); // Decode
pTbCfg = (STbCfg *)malloc(sizeof(*pTbCfg));
if (pTbCfg == NULL) {
return NULL;
}
switch (tbCfg.type) { metaDecodeTbInfo(value.data, pTbCfg);
case META_SUPER_TABLE:
schemaKey.uid = tbCfg.stbCfg.suid;
schemaKey.sver = 0;
key1.data = &schemaKey; return pTbCfg;
key1.size = sizeof(schemaKey); }
ret = pMetaDB->pSchemaDB->get(pMetaDB->pSchemaDB, &key1, &value1, NULL, 0); static STbCfg *metaGetTbInfoByName(SMeta *pMeta, char *tbname, tb_uid_t *uid) {
if (ret != 0) { STbCfg * pTbCfg = NULL;
// TODO SMetaDB *pDB = pMeta->pDB;
return -1; DBT key = {0};
} DBT pkey = {0};
pBuf = value1.data; DBT pvalue = {0};
pBuf = taosDecodeFixedU32(pBuf, &ncols); int ret;
tlen = sizeof(STableMetaMsg) + (tbCfg.stbCfg.nTagCols + ncols) * sizeof(SSchema); // Set key/value
pMsg = calloc(1, tlen); key.data = tbname;
if (pMsg == NULL) { key.size = strlen(tbname);
terrno = TSDB_CODE_OUT_OF_MEMORY;
return -1; // Query
ret = pDB->pNameIdx->pget(pDB->pNameIdx, NULL, &key, &pkey, &pvalue, 0);
if (ret != 0) {
return NULL;
} }
strcpy(pMsg->tbFname, tbCfg.name); // Decode
pMsg->numOfTags = tbCfg.stbCfg.nTagCols; *uid = *(tb_uid_t *)(pkey.data);
pMsg->numOfColumns = ncols; pTbCfg = (STbCfg *)malloc(sizeof(*pTbCfg));
pMsg->tableType = tbCfg.type; if (pTbCfg == NULL) {
pMsg->sversion = 0; return NULL;
pMsg->tversion = 0;
pMsg->suid = tbCfg.stbCfg.suid;
pMsg->tuid = tbCfg.stbCfg.suid;
memcpy(pMsg->pSchema, tbCfg.stbCfg.pSchema, sizeof(SSchema) * tbCfg.stbCfg.nCols);
memcpy(POINTER_SHIFT(pMsg->pSchema, sizeof(SSchema) * tbCfg.stbCfg.nCols), tbCfg.stbCfg.pTagSchema,
sizeof(SSchema) * tbCfg.stbCfg.nTagCols);
break;
case META_CHILD_TABLE:
ASSERT(0);
break;
case META_NORMAL_TABLE:
ASSERT(0);
break;
default:
ASSERT(0);
break;
} }
*ppMsg = pMsg; metaDecodeTbInfo(pvalue.data, pTbCfg);
#endif return pTbCfg;
return 0;
} }
static SSchemaWrapper *metaGetTableSchema(SMeta *pMeta, tb_uid_t uid, int32_t sver) { static SSchemaWrapper *metaGetTableSchema(SMeta *pMeta, tb_uid_t uid, int32_t sver, bool isinline) {
uint32_t nCols; uint32_t nCols;
SSchemaWrapper *pSW = NULL; SSchemaWrapper *pSW = NULL;
SMetaDB * pDB = pMeta->pDB; SMetaDB * pDB = pMeta->pDB;
...@@ -540,12 +545,24 @@ static SSchemaWrapper *metaGetTableSchema(SMeta *pMeta, tb_uid_t uid, int32_t sv ...@@ -540,12 +545,24 @@ static SSchemaWrapper *metaGetTableSchema(SMeta *pMeta, tb_uid_t uid, int32_t sv
// Decode the schema // Decode the schema
pBuf = value.data; pBuf = value.data;
taosDecodeFixedI32(&pBuf, &nCols); taosDecodeFixedI32(&pBuf, &nCols);
if (isinline) {
pSW = (SSchemaWrapper *)malloc(sizeof(*pSW) + sizeof(SSchema) * nCols); pSW = (SSchemaWrapper *)malloc(sizeof(*pSW) + sizeof(SSchema) * nCols);
if (pSW == NULL) { if (pSW == NULL) {
return NULL; return NULL;
} }
pSW->pSchema = POINTER_SHIFT(pSW, sizeof(*pSW)); pSW->pSchema = POINTER_SHIFT(pSW, sizeof(*pSW));
} else {
pSW = (SSchemaWrapper *)malloc(sizeof(*pSW));
if (pSW == NULL) {
return NULL;
}
pSW->pSchema = (SSchema *)malloc(sizeof(SSchema) * nCols);
if (pSW->pSchema == NULL) {
free(pSW);
return NULL;
}
}
for (int i = 0; i < nCols; i++) { for (int i = 0; i < nCols; i++) {
pSchema = pSW->pSchema + i; pSchema = pSW->pSchema + i;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册