Merge branch 'feature/3.0_liaohj' of github.com:taosdata/TDengine into feature/vnode
This commit is contained in:
commit
37b562837f
|
@ -435,42 +435,14 @@ TEST(testCase, connect_Test) {
|
||||||
// taos_close(pConn);
|
// taos_close(pConn);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
TEST(testCase, show_table_Test) {
|
//TEST(testCase, show_table_Test) {
|
||||||
TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
|
||||||
assert(pConn != NULL);
|
|
||||||
|
|
||||||
TAOS_RES* pRes = taos_query(pConn, "use abc1");
|
|
||||||
taos_free_result(pRes);
|
|
||||||
|
|
||||||
pRes = taos_query(pConn, "show tables");
|
|
||||||
if (taos_errno(pRes) != 0) {
|
|
||||||
printf("failed to show vgroups, reason:%s\n", taos_errstr(pRes));
|
|
||||||
taos_free_result(pRes);
|
|
||||||
ASSERT_TRUE(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
TAOS_ROW pRow = NULL;
|
|
||||||
TAOS_FIELD* pFields = taos_fetch_fields(pRes);
|
|
||||||
int32_t numOfFields = taos_num_fields(pRes);
|
|
||||||
|
|
||||||
char str[512] = {0};
|
|
||||||
while((pRow = taos_fetch_row(pRes)) != NULL) {
|
|
||||||
int32_t code = taos_print_row(str, pRow, pFields, numOfFields);
|
|
||||||
printf("%s\n", str);
|
|
||||||
}
|
|
||||||
|
|
||||||
taos_free_result(pRes);
|
|
||||||
taos_close(pConn);
|
|
||||||
}
|
|
||||||
|
|
||||||
//TEST(testCase, create_multiple_tables) {
|
|
||||||
// TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
// TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||||
// assert(pConn != NULL);
|
// assert(pConn != NULL);
|
||||||
//
|
//
|
||||||
// TAOS_RES* pRes = taos_query(pConn, "use abc1");
|
// TAOS_RES* pRes = taos_query(pConn, "use abc1");
|
||||||
// taos_free_result(pRes);
|
// taos_free_result(pRes);
|
||||||
//
|
//
|
||||||
// pRes = taos_query(pConn, "create table t_2 using st1 tags(1) t_3 using st2 tags(2)");
|
// pRes = taos_query(pConn, "show tables");
|
||||||
// if (taos_errno(pRes) != 0) {
|
// if (taos_errno(pRes) != 0) {
|
||||||
// printf("failed to show vgroups, reason:%s\n", taos_errstr(pRes));
|
// printf("failed to show vgroups, reason:%s\n", taos_errstr(pRes));
|
||||||
// taos_free_result(pRes);
|
// taos_free_result(pRes);
|
||||||
|
@ -490,3 +462,31 @@ TEST(testCase, show_table_Test) {
|
||||||
// taos_free_result(pRes);
|
// taos_free_result(pRes);
|
||||||
// taos_close(pConn);
|
// taos_close(pConn);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
TEST(testCase, create_multiple_tables) {
|
||||||
|
TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||||
|
assert(pConn != NULL);
|
||||||
|
|
||||||
|
TAOS_RES* pRes = taos_query(pConn, "use abc1");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
pRes = taos_query(pConn, "create table t_2 using st1 tags(1) t_3 using st1 tags(2)");
|
||||||
|
if (taos_errno(pRes) != 0) {
|
||||||
|
printf("failed to show vgroups, reason:%s\n", taos_errstr(pRes));
|
||||||
|
taos_free_result(pRes);
|
||||||
|
ASSERT_TRUE(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
TAOS_ROW pRow = NULL;
|
||||||
|
TAOS_FIELD* pFields = taos_fetch_fields(pRes);
|
||||||
|
int32_t numOfFields = taos_num_fields(pRes);
|
||||||
|
|
||||||
|
char str[512] = {0};
|
||||||
|
while((pRow = taos_fetch_row(pRes)) != NULL) {
|
||||||
|
int32_t code = taos_print_row(str, pRow, pFields, numOfFields);
|
||||||
|
printf("%s\n", str);
|
||||||
|
}
|
||||||
|
|
||||||
|
taos_free_result(pRes);
|
||||||
|
taos_close(pConn);
|
||||||
|
}
|
||||||
|
|
|
@ -321,6 +321,11 @@ int32_t doCheckForCreateTable(SSqlInfo* pInfo, SMsgBuf* pMsgBuf) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef struct SVgroupTablesBatch {
|
||||||
|
SVCreateTbBatchReq req;
|
||||||
|
SVgroupInfo info;
|
||||||
|
} SVgroupTablesBatch;
|
||||||
|
|
||||||
int32_t doCheckForCreateCTable(SSqlInfo* pInfo, SParseBasicCtx* pCtx, SMsgBuf* pMsgBuf, char** pOutput, int32_t* len,
|
int32_t doCheckForCreateCTable(SSqlInfo* pInfo, SParseBasicCtx* pCtx, SMsgBuf* pMsgBuf, char** pOutput, int32_t* len,
|
||||||
SEpSet* pEpSet) {
|
SEpSet* pEpSet) {
|
||||||
const char* msg1 = "invalid table name";
|
const char* msg1 = "invalid table name";
|
||||||
|
@ -330,17 +335,14 @@ int32_t doCheckForCreateCTable(SSqlInfo* pInfo, SParseBasicCtx* pCtx, SMsgBuf* p
|
||||||
|
|
||||||
SCreateTableSql* pCreateTable = pInfo->pCreateTableInfo;
|
SCreateTableSql* pCreateTable = pInfo->pCreateTableInfo;
|
||||||
|
|
||||||
|
SHashObj* pVgroupHashmap = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), false, HASH_NO_LOCK);
|
||||||
|
|
||||||
// super table name, create table by using dst
|
// super table name, create table by using dst
|
||||||
int32_t numOfTables = (int32_t)taosArrayGetSize(pCreateTable->childTableInfo);
|
size_t numOfTables = taosArrayGetSize(pCreateTable->childTableInfo);
|
||||||
for (int32_t j = 0; j < numOfTables; ++j) {
|
for (int32_t j = 0; j < numOfTables; ++j) {
|
||||||
SCreatedTableInfo* pCreateTableInfo = taosArrayGet(pCreateTable->childTableInfo, j);
|
SCreatedTableInfo* pCreateTableInfo = taosArrayGet(pCreateTable->childTableInfo, j);
|
||||||
|
|
||||||
SToken* pSTableNameToken = &pCreateTableInfo->stbName;
|
SToken* pSTableNameToken = &pCreateTableInfo->stbName;
|
||||||
|
|
||||||
char buf[TSDB_TABLE_FNAME_LEN];
|
|
||||||
SToken sTblToken;
|
|
||||||
sTblToken.z = buf;
|
|
||||||
|
|
||||||
int32_t code = parserValidateNameToken(pSTableNameToken);
|
int32_t code = parserValidateNameToken(pSTableNameToken);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
return buildInvalidOperationMsg(pMsgBuf, msg1);
|
return buildInvalidOperationMsg(pMsgBuf, msg1);
|
||||||
|
@ -460,12 +462,13 @@ int32_t doCheckForCreateCTable(SSqlInfo* pInfo, SParseBasicCtx* pCtx, SMsgBuf* p
|
||||||
|
|
||||||
for (int32_t i = 0; i < numOfInputTag; ++i) {
|
for (int32_t i = 0; i < numOfInputTag; ++i) {
|
||||||
SSchema* pSchema = &pTagSchema[i];
|
SSchema* pSchema = &pTagSchema[i];
|
||||||
SToken* pItem = taosArrayGet(pValList, i);
|
|
||||||
|
|
||||||
char tmpTokenBuf[TSDB_MAX_TAGS_LEN] = {0};
|
|
||||||
SKvParam param = {.builder = &kvRowBuilder, .schema = pSchema};
|
|
||||||
|
|
||||||
char* endPtr = NULL;
|
char* endPtr = NULL;
|
||||||
|
char tmpTokenBuf[TSDB_MAX_TAGS_LEN] = {0};
|
||||||
|
|
||||||
|
SKvParam param = {.builder = &kvRowBuilder, .schema = pSchema};
|
||||||
|
|
||||||
|
SToken* pItem = taosArrayGet(pValList, i);
|
||||||
code = parseValueToken(&endPtr, pItem, pSchema, tinfo.precision, tmpTokenBuf, KvRowAppend, ¶m, pMsgBuf);
|
code = parseValueToken(&endPtr, pItem, pSchema, tinfo.precision, tmpTokenBuf, KvRowAppend, ¶m, pMsgBuf);
|
||||||
|
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
@ -478,7 +481,7 @@ int32_t doCheckForCreateCTable(SSqlInfo* pInfo, SParseBasicCtx* pCtx, SMsgBuf* p
|
||||||
SKVRow row = tdGetKVRowFromBuilder(&kvRowBuilder);
|
SKVRow row = tdGetKVRowFromBuilder(&kvRowBuilder);
|
||||||
tdDestroyKVRowBuilder(&kvRowBuilder);
|
tdDestroyKVRowBuilder(&kvRowBuilder);
|
||||||
if (row == NULL) {
|
if (row == NULL) {
|
||||||
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
return TSDB_CODE_QRY_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
tdSortKVRowByColIdx(row);
|
tdSortKVRowByColIdx(row);
|
||||||
|
@ -489,31 +492,36 @@ int32_t doCheckForCreateCTable(SSqlInfo* pInfo, SParseBasicCtx* pCtx, SMsgBuf* p
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SVgroupInfo info = {0};
|
||||||
|
catalogGetTableHashVgroup(pCtx->pCatalog, pCtx->pTransporter, &pCtx->mgmtEpSet, &tableName, &info);
|
||||||
|
|
||||||
struct SVCreateTbReq req = {0};
|
struct SVCreateTbReq req = {0};
|
||||||
req.type = TD_CHILD_TABLE;
|
req.type = TD_CHILD_TABLE;
|
||||||
req.name = strdup(tNameGetTableName(&tableName));
|
req.name = strdup(tNameGetTableName(&tableName));
|
||||||
req.ctbCfg.suid = pSuperTableMeta->suid;
|
req.ctbCfg.suid = pSuperTableMeta->suid;
|
||||||
req.ctbCfg.pTag = row;
|
req.ctbCfg.pTag = row;
|
||||||
|
|
||||||
int32_t serLen = sizeof(SMsgHead) + tSerializeSVCreateTbReq(NULL, &req);
|
// pEpSet->inUse = info.inUse;
|
||||||
char* buf1 = calloc(1, serLen);
|
// pEpSet->numOfEps = info.numOfEps;
|
||||||
*pOutput = buf1;
|
// for (int32_t i = 0; i < pEpSet->numOfEps; ++i) {
|
||||||
buf1 += sizeof(SMsgHead);
|
// pEpSet->port[i] = info.epAddr[i].port;
|
||||||
tSerializeSVCreateTbReq((void*)&buf1, &req);
|
// tstrncpy(pEpSet->fqdn[i], info.epAddr[i].fqdn, tListLen(pEpSet->fqdn[i]));
|
||||||
*len = serLen;
|
// }
|
||||||
|
// ((SMsgHead*)(*pOutput))->vgId = htonl(info.vgId);
|
||||||
|
// ((SMsgHead*)(*pOutput))->contLen = htonl(serLen);
|
||||||
|
SVgroupTablesBatch *pTableBatch = taosHashGet(pVgroupHashmap, &info.vgId, sizeof(info.vgId));
|
||||||
|
if (pTableBatch == NULL) {
|
||||||
|
SVgroupTablesBatch tBatch = {0};
|
||||||
|
tBatch.info = info;
|
||||||
|
|
||||||
SVgroupInfo info = {0};
|
tBatch.req.pArray = taosArrayInit(4, sizeof(struct SVCreateTbReq));
|
||||||
catalogGetTableHashVgroup(pCtx->pCatalog, pCtx->pTransporter, &pCtx->mgmtEpSet, &tableName, &info);
|
taosArrayPush(tBatch.req.pArray, &req);
|
||||||
|
|
||||||
pEpSet->inUse = info.inUse;
|
taosHashPut(pVgroupHashmap, &info.vgId, sizeof(info.vgId), &tBatch, sizeof(tBatch));
|
||||||
pEpSet->numOfEps = info.numOfEps;
|
} else { // add to the correct vgroup
|
||||||
for (int32_t i = 0; i < pEpSet->numOfEps; ++i) {
|
assert(info.vgId == pTableBatch->info.vgId);
|
||||||
pEpSet->port[i] = info.epAddr[i].port;
|
taosArrayPush(pTableBatch->req.pArray, &req);
|
||||||
tstrncpy(pEpSet->fqdn[i], info.epAddr[i].fqdn, tListLen(pEpSet->fqdn[i]));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
((SMsgHead*)(*pOutput))->vgId = htonl(info.vgId);
|
|
||||||
((SMsgHead*)(*pOutput))->contLen = htonl(serLen);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
|
Loading…
Reference in New Issue