fix:modify dot to underline in schemaless supertable name
This commit is contained in:
parent
d7bb7e111d
commit
2714db10bd
|
@ -258,6 +258,7 @@ int32_t smlParseInfluxString(SSmlHandle *info, char *sql, char *sqlEnd, SSmlLine
|
||||||
int32_t smlParseTelnetString(SSmlHandle *info, char *sql, char *sqlEnd, SSmlLineInfo *elements);
|
int32_t smlParseTelnetString(SSmlHandle *info, char *sql, char *sqlEnd, SSmlLineInfo *elements);
|
||||||
int32_t smlParseJSON(SSmlHandle *info, char *payload);
|
int32_t smlParseJSON(SSmlHandle *info, char *payload);
|
||||||
|
|
||||||
|
void smlStrReplace(char* src, int32_t len);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -114,6 +114,14 @@ inline bool smlDoubleToInt64OverFlow(double num) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void smlStrReplace(char* src, int32_t len){
|
||||||
|
for(int i = 0; i < len; i++){
|
||||||
|
if(src[i] == '.'){
|
||||||
|
src[i] = '_';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int32_t smlBuildInvalidDataMsg(SSmlMsgBuf *pBuf, const char *msg1, const char *msg2) {
|
int32_t smlBuildInvalidDataMsg(SSmlMsgBuf *pBuf, const char *msg1, const char *msg2) {
|
||||||
if (pBuf->buf) {
|
if (pBuf->buf) {
|
||||||
memset(pBuf->buf, 0, pBuf->len);
|
memset(pBuf->buf, 0, pBuf->len);
|
||||||
|
@ -838,6 +846,7 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) {
|
||||||
char *measure = taosMemoryMalloc(superTableLen);
|
char *measure = taosMemoryMalloc(superTableLen);
|
||||||
memcpy(measure, superTable, superTableLen);
|
memcpy(measure, superTable, superTableLen);
|
||||||
PROCESS_SLASH_IN_MEASUREMENT(measure, superTableLen);
|
PROCESS_SLASH_IN_MEASUREMENT(measure, superTableLen);
|
||||||
|
smlStrReplace(measure, superTableLen);
|
||||||
memset(pName.tname, 0, TSDB_TABLE_NAME_LEN);
|
memset(pName.tname, 0, TSDB_TABLE_NAME_LEN);
|
||||||
memcpy(pName.tname, measure, superTableLen);
|
memcpy(pName.tname, measure, superTableLen);
|
||||||
taosMemoryFree(measure);
|
taosMemoryFree(measure);
|
||||||
|
@ -1051,7 +1060,8 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) {
|
||||||
taosMemoryFreeClear(sTableData->tableMeta);
|
taosMemoryFreeClear(sTableData->tableMeta);
|
||||||
sTableData->tableMeta = pTableMeta;
|
sTableData->tableMeta = pTableMeta;
|
||||||
uDebug("SML:0x%" PRIx64 "modify schema uid:%" PRIu64 ", sversion:%d, tversion:%d", info->id, pTableMeta->uid,
|
uDebug("SML:0x%" PRIx64 "modify schema uid:%" PRIu64 ", sversion:%d, tversion:%d", info->id, pTableMeta->uid,
|
||||||
pTableMeta->sversion, pTableMeta->tversion) tmp = (SSmlSTableMeta **)taosHashIterate(info->superTables, tmp);
|
pTableMeta->sversion, pTableMeta->tversion);
|
||||||
|
tmp = (SSmlSTableMeta **)taosHashIterate(info->superTables, tmp);
|
||||||
}
|
}
|
||||||
uDebug("SML:0x%" PRIx64 " smlModifyDBSchemas end success, format:%d, needModifySchema:%d", info->id, info->dataFormat,
|
uDebug("SML:0x%" PRIx64 " smlModifyDBSchemas end success, format:%d, needModifySchema:%d", info->id, info->dataFormat,
|
||||||
info->needModifySchema);
|
info->needModifySchema);
|
||||||
|
@ -1394,7 +1404,14 @@ static int32_t smlInsertData(SSmlHandle *info) {
|
||||||
SSmlTableInfo **oneTable = (SSmlTableInfo **)taosHashIterate(info->childTables, NULL);
|
SSmlTableInfo **oneTable = (SSmlTableInfo **)taosHashIterate(info->childTables, NULL);
|
||||||
while (oneTable) {
|
while (oneTable) {
|
||||||
SSmlTableInfo *tableData = *oneTable;
|
SSmlTableInfo *tableData = *oneTable;
|
||||||
tstrncpy(pName.tname, tableData->sTableName, tableData->sTableNameLen + 1);
|
|
||||||
|
int measureLen = tableData->sTableNameLen;
|
||||||
|
char *measure = (char *)taosMemoryMalloc(tableData->sTableNameLen);
|
||||||
|
memcpy(measure, tableData->sTableName, tableData->sTableNameLen);
|
||||||
|
PROCESS_SLASH_IN_MEASUREMENT(measure, measureLen);
|
||||||
|
smlStrReplace(measure, measureLen);
|
||||||
|
|
||||||
|
tstrncpy(pName.tname, measure, measureLen + 1);
|
||||||
|
|
||||||
if (info->pRequest->tableList == NULL) {
|
if (info->pRequest->tableList == NULL) {
|
||||||
info->pRequest->tableList = taosArrayInit(1, sizeof(SName));
|
info->pRequest->tableList = taosArrayInit(1, sizeof(SName));
|
||||||
|
@ -1411,6 +1428,7 @@ static int32_t smlInsertData(SSmlHandle *info) {
|
||||||
|
|
||||||
code = smlCheckAuth(info, &conn, pName.tname, AUTH_TYPE_WRITE);
|
code = smlCheckAuth(info, &conn, pName.tname, AUTH_TYPE_WRITE);
|
||||||
if(code != TSDB_CODE_SUCCESS){
|
if(code != TSDB_CODE_SUCCESS){
|
||||||
|
taosMemoryFree(measure);
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1418,6 +1436,7 @@ static int32_t smlInsertData(SSmlHandle *info) {
|
||||||
code = catalogGetTableHashVgroup(info->pCatalog, &conn, &pName, &vg);
|
code = catalogGetTableHashVgroup(info->pCatalog, &conn, &pName, &vg);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
uError("SML:0x%" PRIx64 " catalogGetTableHashVgroup failed. table name: %s", info->id, tableData->childTableName);
|
uError("SML:0x%" PRIx64 " catalogGetTableHashVgroup failed. table name: %s", info->id, tableData->childTableName);
|
||||||
|
taosMemoryFree(measure);
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
taosHashPut(info->pVgHash, (const char *)&vg.vgId, sizeof(vg.vgId), (char *)&vg, sizeof(vg));
|
taosHashPut(info->pVgHash, (const char *)&vg.vgId, sizeof(vg.vgId), (char *)&vg, sizeof(vg));
|
||||||
|
@ -1426,6 +1445,7 @@ static int32_t smlInsertData(SSmlHandle *info) {
|
||||||
(SSmlSTableMeta **)taosHashGet(info->superTables, tableData->sTableName, tableData->sTableNameLen);
|
(SSmlSTableMeta **)taosHashGet(info->superTables, tableData->sTableName, tableData->sTableNameLen);
|
||||||
if (unlikely(NULL == pMeta || NULL == (*pMeta)->tableMeta)) {
|
if (unlikely(NULL == pMeta || NULL == (*pMeta)->tableMeta)) {
|
||||||
uError("SML:0x%" PRIx64 " NULL == pMeta. table name: %s", info->id, tableData->childTableName);
|
uError("SML:0x%" PRIx64 " NULL == pMeta. table name: %s", info->id, tableData->childTableName);
|
||||||
|
taosMemoryFree(measure);
|
||||||
return TSDB_CODE_SML_INTERNAL_ERROR;
|
return TSDB_CODE_SML_INTERNAL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1435,11 +1455,6 @@ static int32_t smlInsertData(SSmlHandle *info) {
|
||||||
uDebug("SML:0x%" PRIx64 " smlInsertData table:%s, uid:%" PRIu64 ", format:%d", info->id, pName.tname,
|
uDebug("SML:0x%" PRIx64 " smlInsertData table:%s, uid:%" PRIu64 ", format:%d", info->id, pName.tname,
|
||||||
tableData->uid, info->dataFormat);
|
tableData->uid, info->dataFormat);
|
||||||
|
|
||||||
int measureLen = tableData->sTableNameLen;
|
|
||||||
char *measure = (char *)taosMemoryMalloc(tableData->sTableNameLen);
|
|
||||||
memcpy(measure, tableData->sTableName, tableData->sTableNameLen);
|
|
||||||
PROCESS_SLASH_IN_MEASUREMENT(measure, measureLen);
|
|
||||||
|
|
||||||
code = smlBindData(info->pQuery, info->dataFormat, tableData->tags, (*pMeta)->cols, tableData->cols,
|
code = smlBindData(info->pQuery, info->dataFormat, tableData->tags, (*pMeta)->cols, tableData->cols,
|
||||||
(*pMeta)->tableMeta, tableData->childTableName, measure, measureLen, info->ttl, info->msgBuf.buf,
|
(*pMeta)->tableMeta, tableData->childTableName, measure, measureLen, info->ttl, info->msgBuf.buf,
|
||||||
info->msgBuf.len);
|
info->msgBuf.len);
|
||||||
|
|
|
@ -157,6 +157,7 @@ static int32_t smlParseTagKv(SSmlHandle *info, char **sql, char *sqlEnd, SSmlLin
|
||||||
measure = (char *)taosMemoryMalloc(currElement->measureLen);
|
measure = (char *)taosMemoryMalloc(currElement->measureLen);
|
||||||
memcpy(measure, currElement->measure, currElement->measureLen);
|
memcpy(measure, currElement->measure, currElement->measureLen);
|
||||||
PROCESS_SLASH_IN_MEASUREMENT(measure, measureLen);
|
PROCESS_SLASH_IN_MEASUREMENT(measure, measureLen);
|
||||||
|
smlStrReplace(measure, measureLen);
|
||||||
}
|
}
|
||||||
STableMeta *pTableMeta = smlGetMeta(info, measure, measureLen);
|
STableMeta *pTableMeta = smlGetMeta(info, measure, measureLen);
|
||||||
if (currElement->measureEscaped) {
|
if (currElement->measureEscaped) {
|
||||||
|
@ -365,6 +366,7 @@ static int32_t smlParseColKv(SSmlHandle *info, char **sql, char *sqlEnd, SSmlLin
|
||||||
measure = (char *)taosMemoryMalloc(currElement->measureLen);
|
measure = (char *)taosMemoryMalloc(currElement->measureLen);
|
||||||
memcpy(measure, currElement->measure, currElement->measureLen);
|
memcpy(measure, currElement->measure, currElement->measureLen);
|
||||||
PROCESS_SLASH_IN_MEASUREMENT(measure, measureLen);
|
PROCESS_SLASH_IN_MEASUREMENT(measure, measureLen);
|
||||||
|
smlStrReplace(measure, measureLen);
|
||||||
}
|
}
|
||||||
STableMeta *pTableMeta = smlGetMeta(info, measure, measureLen);
|
STableMeta *pTableMeta = smlGetMeta(info, measure, measureLen);
|
||||||
if (currElement->measureEscaped) {
|
if (currElement->measureEscaped) {
|
||||||
|
|
|
@ -101,6 +101,15 @@ class TDTestCase:
|
||||||
|
|
||||||
tdSql.query(f"desc {dbname}.macylr")
|
tdSql.query(f"desc {dbname}.macylr")
|
||||||
tdSql.checkRows(25)
|
tdSql.checkRows(25)
|
||||||
|
|
||||||
|
tdSql.query(f"select * from ts3724._stb_2")
|
||||||
|
tdSql.checkRows(1)
|
||||||
|
|
||||||
|
tdSql.query(f"select * from ts3724.stb_2")
|
||||||
|
tdSql.checkRows(1)
|
||||||
|
|
||||||
|
tdSql.query(f"select * from ts3724.stb2_")
|
||||||
|
tdSql.checkRows(1)
|
||||||
return
|
return
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
|
|
@ -1522,6 +1522,36 @@ int sml_ts2385_Test() {
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int sml_ts3724_Test() {
|
||||||
|
TAOS *taos = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||||
|
|
||||||
|
TAOS_RES *pRes = taos_query(taos, "drop database if exists ts3724");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
pRes = taos_query(taos, "create database if not exists ts3724");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
const char *sql[] = {
|
||||||
|
"stb.2,t1=1 f1=283i32 1632299372000",
|
||||||
|
".stb2,t1=1 f1=106i32 1632299378000",
|
||||||
|
"stb2.,t1=1 f1=106i32 1632299378000",
|
||||||
|
};
|
||||||
|
|
||||||
|
pRes = taos_query(taos, "use ts3724");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
pRes = taos_schemaless_insert(taos, (char **)sql, sizeof(sql) / sizeof(sql[0]), TSDB_SML_LINE_PROTOCOL,
|
||||||
|
TSDB_SML_TIMESTAMP_MILLI_SECONDS);
|
||||||
|
|
||||||
|
int code = taos_errno(pRes);
|
||||||
|
printf("%s result0:%s\n", __FUNCTION__, taos_errstr(pRes));
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
taos_close(taos);
|
||||||
|
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
if (argc == 2) {
|
if (argc == 2) {
|
||||||
taos_options(TSDB_OPTION_CONFIGDIR, argv[1]);
|
taos_options(TSDB_OPTION_CONFIGDIR, argv[1]);
|
||||||
|
@ -1579,5 +1609,8 @@ int main(int argc, char *argv[]) {
|
||||||
ASSERT(!ret);
|
ASSERT(!ret);
|
||||||
ret = sml_19221_Test();
|
ret = sml_19221_Test();
|
||||||
ASSERT(!ret);
|
ASSERT(!ret);
|
||||||
|
ret = sml_ts3724_Test();
|
||||||
|
ASSERT(!ret);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue