From ebd6256ea93c379eaf40f3c2ad20815d678120cd Mon Sep 17 00:00:00 2001 From: hjxilinx Date: Sat, 4 Apr 2020 18:07:45 +0800 Subject: [PATCH] [TD-98] --- src/client/src/tscAsync.c | 2 +- src/client/src/tscParseInsert.c | 17 ++++++++++------- src/client/src/tscSql.c | 2 +- src/client/src/tscUtil.c | 7 ++++++- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/client/src/tscAsync.c b/src/client/src/tscAsync.c index 10878ee37f..99104ed68c 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 3e4c0d4fa4..b8c12bbbdc 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 953f8b9bac..a3cc785876 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 ae1f4058fa..0b60c1d55c 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); -- GitLab