diff --git a/src/client/src/tscAsync.c b/src/client/src/tscAsync.c index 10878ee37fc8eb8b2717973657965f3e26b1d31d..99104ed68cae4526ba2ef6b1c9a4c52c56885e4d 100644 --- a/src/client/src/tscAsync.c +++ b/src/client/src/tscAsync.c @@ -331,7 +331,7 @@ void tscProcessAsyncRes(SSchedMsg *pMsg) { // pCmd may be released, so cache pCmd->command int cmd = pCmd->command; - int code = pRes->code;// ? -pRes->code : pRes->numOfRows; + int code = pRes->code; // in case of async insert, restore the user specified callback function bool shouldFree = tscShouldFreeAsyncSqlObj(pSql); diff --git a/src/client/src/tscParseInsert.c b/src/client/src/tscParseInsert.c index 3e4c0d4fa4d3d11112638d53364667520541a84b..b8c12bbbdc79f9a34ed33d3915175c91f0fe7cb0 100644 --- a/src/client/src/tscParseInsert.c +++ b/src/client/src/tscParseInsert.c @@ -1293,7 +1293,16 @@ int tsParseInsertSql(SSqlObj *pSql) { int tsParseSql(SSqlObj *pSql, bool initialParse) { int32_t ret = TSDB_CODE_SUCCESS; - tscTrace("continue parse sql: %s", pSql->asyncTblPos); + + if (initialParse) { + char* p = pSql->sqlstr; + pSql->sqlstr = NULL; + + tscFreeSqlObjPartial(pSql); + pSql->sqlstr = p; + } else { + tscTrace("continue parse sql: %s", pSql->asyncTblPos); + } if (tscIsInsertOrImportData(pSql->sqlstr)) { /* @@ -1302,8 +1311,6 @@ int tsParseSql(SSqlObj *pSql, bool initialParse) { * the error handle callback function can rightfully restore the user defined function (fp) */ if (initialParse) { - tscFreeSqlCmdData(&pSql->cmd); - // replace user defined callback function with multi-insert proxy function pSql->fetchFp = pSql->fp; pSql->fp = (void(*)())tscHandleMultivnodeInsert; @@ -1316,10 +1323,6 @@ int tsParseSql(SSqlObj *pSql, bool initialParse) { return ret; } - if (initialParse) { - tscFreeSqlCmdData(&pSql->cmd); - } - SSqlInfo SQLInfo = {0}; tSQLParse(&SQLInfo, pSql->sqlstr); diff --git a/src/client/src/tscSql.c b/src/client/src/tscSql.c index 953f8b9bac0b30bf3b0c7b6a6b2aff4b7231c068..a3cc785876c42458bc1bf1d157fe04759e89f27e 100644 --- a/src/client/src/tscSql.c +++ b/src/client/src/tscSql.c @@ -293,7 +293,7 @@ int taos_query(TAOS *taos, const char *sqlstr) { SSqlObj* pSql = pObj->pSql; size_t sqlLen = strlen(sqlstr); - doAsyncQuery(pObj, pObj->pSql, waitForQueryRsp, taos, sqlstr, sqlLen); + doAsyncQuery(pObj, pSql, waitForQueryRsp, taos, sqlstr, sqlLen); // wait for the callback function to post the semaphore sem_wait(&pSql->rspSem); diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index ae1f4058fabe9f191ee87998c42fbb7eadba958a..0b60c1d55c8feaa9550af178691dd98eb189a23d 100644 --- a/src/client/src/tscUtil.c +++ b/src/client/src/tscUtil.c @@ -466,9 +466,14 @@ void tscFreeSqlObjPartial(SSqlObj* pSql) { tscFreeSqlResult(pSql); tfree(pSql->pSubs); - pSql->numOfSubs = 0; + + taosHashCleanup(pSql->pTableHashList); pSql->freed = 0; + pSql->numOfSubs = 0; + pSql->pTableHashList = NULL; + pSql->asyncTblPos = NULL; + tscFreeSqlCmdData(pCmd); tscTrace("%p partially free sqlObj completed", pSql);