diff --git a/src/client/src/tscAsync.c b/src/client/src/tscAsync.c index c51ba6148a5ea7f8fbcc4ee5ebf399f26e8990ec..2570f473ed80c98893653f5c862f1a29c8b7933e 100644 --- a/src/client/src/tscAsync.c +++ b/src/client/src/tscAsync.c @@ -343,6 +343,10 @@ void tscAsyncResultOnError(SSqlObj* pSql) { int tscSendMsgToServer(SSqlObj *pSql); void tscClearTableMeta(SSqlObj *pSql); +static void freeElem(void* p) { + tfree(*(char**)p); +} + void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) { SSqlObj* pSql = (SSqlObj*)taosAcquireRef(tscObjRef, (int64_t)param); if (pSql == NULL) return; @@ -362,13 +366,22 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) { tscAllocPayload(&pSql->cmd, (int)sz + 1); memcpy(tscGetErrorMsgPayload(&pSql->cmd), tscGetErrorMsgPayload(&sub->cmd), sz); } else if (code == TSDB_CODE_MND_INVALID_TABLE_NAME) { - if (sub->cmd.command == TSDB_SQL_MULTI_META) { + if (pSql->cmd.command == TSDB_SQL_MULTI_META && pSql->cmd.hashedTableNames) { tscClearTableMeta(pSql); + taosArrayDestroyEx(&pSql->cmd.hashedTableNames, freeElem); + pSql->cmd.hashedTableNames = NULL; } } goto _error; } + if (pSql->cmd.command == TSDB_SQL_MULTI_META) { + if (pSql->cmd.hashedTableNames) { + taosArrayDestroyEx(&pSql->cmd.hashedTableNames, freeElem); + pSql->cmd.hashedTableNames = NULL; + } + } + tscDebug("0x%"PRIx64" get %s successfully", pSql->self, msg); if (pSql->pStream == NULL) { SQueryInfo *pQueryInfo = tscGetQueryInfo(pCmd); diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 7026ab32eb519c05868f0048b47cd508daf0bf9b..2a22988e747595b8e3b93f627683502fa22f71eb 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -9914,7 +9914,6 @@ int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo) { SQueryInfo* pQueryInfo = tscGetQueryInfo(pCmd); pCmd->pTableMetaMap = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_NO_LOCK); - pCmd->hashedTableNames = taosArrayInit(4, POINTER_BYTES); tableNameList = taosArrayInit(4, sizeof(SName)); size_t size = taosArrayGetSize(pInfo->list); @@ -9983,8 +9982,14 @@ int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo) { taosArrayPush(pVgroupList, &t); tscDebug("0x%"PRIx64" failed to retrieve stable %s vgroup id list in cache, try fetch from mnode", pSql->self, name); - char* tb = strdup(name); - taosArrayPush(pCmd->hashedTableNames, &tb); + if (pCmd->hashedTableNames == NULL) { + pCmd->hashedTableNames = taosArrayInit(4, POINTER_BYTES); + } + + if (pCmd->hashedTableNames) { + char* tb = strdup(name); + taosArrayPush(pCmd->hashedTableNames, &tb); + } } else { tFilePage* pdata = (tFilePage*) pv; pVgroupIdList = taosArrayInit((size_t) pdata->num, sizeof(int32_t)); diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index 1ec5369267c26aefca8130fbadd592210c75c0c3..c385e37fb96d7e23ac7d1527e5a8e60654925a64 100644 --- a/src/client/src/tscUtil.c +++ b/src/client/src/tscUtil.c @@ -1631,10 +1631,6 @@ void destroyTableNameList(SInsertStatementParam* pInsertParam) { tfree(pInsertParam->pTableNameList); } -static void freeElem(void* p) { - tfree(*(char**)p); -} - void tscResetSqlCmd(SSqlCmd* pCmd, bool clearCachedMeta, uint64_t id) { SSqlObj *pSql = (SSqlObj*)taosAcquireRef(tscObjRef, id); pCmd->command = 0; @@ -1650,10 +1646,6 @@ void tscResetSqlCmd(SSqlCmd* pCmd, bool clearCachedMeta, uint64_t id) { tfree(pCmd->insertParam.tagData.data); pCmd->insertParam.tagData.dataLen = 0; - if (pCmd->hashedTableNames) { - taosArrayDestroyEx(&pCmd->hashedTableNames, freeElem); - } - tscFreeQueryInfo(pCmd, clearCachedMeta, id); pCmd->pTableMetaMap = tscCleanupTableMetaMap(pCmd->pTableMetaMap); taosReleaseRef(tscObjRef, id);