diff --git a/src/client/inc/tsclient.h b/src/client/inc/tsclient.h index 1d06d38264..1726090e12 100644 --- a/src/client/inc/tsclient.h +++ b/src/client/inc/tsclient.h @@ -252,7 +252,6 @@ typedef struct { uint32_t allocSize; char * payload; int payloadLen; - int64_t globalLimit; SQueryInfo **pQueryInfo; int32_t numOfClause; diff --git a/src/client/src/tscAsync.c b/src/client/src/tscAsync.c index ad60635afe..7b1a1a6074 100644 --- a/src/client/src/tscAsync.c +++ b/src/client/src/tscAsync.c @@ -133,7 +133,7 @@ static void tscProcessAsyncFetchRowsProxy(void *param, TAOS_RES *tres, int numOf // local reducer has handle this situation during super table non-projection query. if (pCmd->command != TSDB_SQL_RETRIEVE_METRIC) { - pRes->numOfTotal += pRes->numOfRows; + pRes->numOfTotalInCurrentClause += pRes->numOfRows; } (*pSql->fetchFp)(param, tres, numOfRows); diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 70ebced203..06eb4a6088 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -521,18 +521,12 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) { pCmd->command = pQueryInfo1->command; // if there is only one element, the limit of clause is the limit of global result. - if (pCmd->numOfClause == 1) { - pCmd->globalLimit = pQueryInfo1->clauseLimit; - } else { // check the output fields information, column name and column type - pCmd->globalLimit = -1; + for(int32_t i = 1; i < pCmd->numOfClause; ++i) { + SQueryInfo* pQueryInfo2 = tscGetQueryInfoDetail(pCmd, i); - for(int32_t i = 1; i < pCmd->numOfClause; ++i) { - SQueryInfo* pQueryInfo2 = tscGetQueryInfoDetail(pCmd, i); - - int32_t ret = tscFieldInfoCompare(&pQueryInfo1->fieldsInfo, &pQueryInfo2->fieldsInfo); - if (ret != 0) { - return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1); - } + int32_t ret = tscFieldInfoCompare(&pQueryInfo1->fieldsInfo, &pQueryInfo2->fieldsInfo); + if (ret != 0) { + return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1); } } diff --git a/src/client/src/tscSql.c b/src/client/src/tscSql.c index b89c6e49b0..7d5d1d242f 100644 --- a/src/client/src/tscSql.c +++ b/src/client/src/tscSql.c @@ -543,12 +543,12 @@ static void **tscBuildResFromSubqueries(SSqlObj *pSql) { pRes->numOfTotalInCurrentClause++; break; - } else { // continue retrieve data from vnode - if (!tscHashRemainDataInSubqueryResultSet(pSql)) { // free all sub sqlobj + } else {// continue retrieve data from vnode + if (!tscHashRemainDataInSubqueryResultSet(pSql)) { tscTrace("%p at least one subquery exhausted, free all other %d subqueries", pSql, pSql->numOfSubs - 1); - SSubqueryState *pState = NULL; - + + // free all sub sqlobj for (int32_t i = 0; i < pSql->numOfSubs; ++i) { SSqlObj *pChildObj = pSql->pSubs[i]; if (pChildObj == NULL) { @@ -716,7 +716,7 @@ int taos_fetch_block(TAOS_RES *res, TAOS_ROW *rows) { } int taos_select_db(TAOS *taos, const char *db) { - char sql[64]; + char sql[256] = {0}; STscObj *pObj = (STscObj *)taos; if (pObj == NULL || pObj->signature != pObj) { @@ -724,8 +724,7 @@ int taos_select_db(TAOS *taos, const char *db) { return TSDB_CODE_DISCONNECTED; } - sprintf(sql, "use %s", db); - + snprintf(sql, tListLen(sql), "use %s", db); return taos_query(taos, sql); } diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index 19016497ac..037763afd7 100644 --- a/src/client/src/tscUtil.c +++ b/src/client/src/tscUtil.c @@ -2057,12 +2057,15 @@ void tscTryQueryNextVnode(SSqlObj *pSql, __async_cb_func_t fp) { // in case of async query, set the callback function void* fp1 = pSql->fp; + pSql->fp = fp; + if (fp1 != NULL) { assert(fp != NULL); - pSql->fp = fp; } int32_t ret = tscProcessSql(pSql); // todo check for failure + + // in case of async query, return now if (fp != NULL) { return; }