diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index 63e009ed0a..f30a74bf11 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -225,12 +225,16 @@ int32_t colDataMergeCol(SColumnInfoData* pColumnInfoData, uint32_t numOfRow1, co // Handle the bitmap char* p = taosMemoryRealloc(pColumnInfoData->varmeta.offset, sizeof(int32_t) * (numOfRow1 + numOfRow2)); if (p == NULL) { - // TODO + return TSDB_CODE_OUT_OF_MEMORY; } pColumnInfoData->varmeta.offset = (int32_t*)p; for (int32_t i = 0; i < numOfRow2; ++i) { - pColumnInfoData->varmeta.offset[i + numOfRow1] = pSource->varmeta.offset[i] + pColumnInfoData->varmeta.length; + if (pSource->varmeta.offset[i] == -1) { + pColumnInfoData->varmeta.offset[i + numOfRow1] = -1; + } else { + pColumnInfoData->varmeta.offset[i + numOfRow1] = pSource->varmeta.offset[i] + pColumnInfoData->varmeta.length; + } } // copy data @@ -239,7 +243,7 @@ int32_t colDataMergeCol(SColumnInfoData* pColumnInfoData, uint32_t numOfRow1, co if (pColumnInfoData->varmeta.allocLen < len + oldLen) { char* tmp = taosMemoryRealloc(pColumnInfoData->pData, len + oldLen); if (tmp == NULL) { - return TSDB_CODE_VND_OUT_OF_MEMORY; + return TSDB_CODE_OUT_OF_MEMORY; } pColumnInfoData->pData = tmp; diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index cee84c65d0..f1995b723d 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -5005,6 +5005,7 @@ static int32_t handleLimitOffset(SOperatorInfo* pOperator, SSDataBlock* pBlock) return PROJECT_RETRIEVE_DONE; } + // todo optimize performance // If there are slimit/soffset value exists, multi-round result can not be packed into one group, since the // they may not belong to the same group the limit/offset value is not valid in this case. if (pRes->info.rows >= pOperator->resultInfo.threshold || pProjectInfo->slimit.offset != -1 || pProjectInfo->slimit.limit != -1) { diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index cb514e974a..463764e713 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -548,8 +548,8 @@ static EDealRes translateOperator(STranslateContext* pCxt, SOperatorNode* pOp) { return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_WRONG_VALUE_TYPE, ((SExprNode*)(pOp->pRight))->aliasName); } if ((TSDB_DATA_TYPE_TIMESTAMP == ldt.type && TSDB_DATA_TYPE_TIMESTAMP == rdt.type) || - (TSDB_DATA_TYPE_TIMESTAMP == ldt.type && IS_VAR_DATA_TYPE(rdt.type)) || - (TSDB_DATA_TYPE_TIMESTAMP == rdt.type && IS_VAR_DATA_TYPE(ldt.type))) { + (TSDB_DATA_TYPE_TIMESTAMP == ldt.type && (IS_VAR_DATA_TYPE(rdt.type) || IS_FLOAT_TYPE(rdt.type))) || + (TSDB_DATA_TYPE_TIMESTAMP == rdt.type && (IS_VAR_DATA_TYPE(ldt.type) || IS_FLOAT_TYPE(ldt.type)))) { return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_WRONG_VALUE_TYPE, ((SExprNode*)(pOp->pRight))->aliasName); } diff --git a/source/libs/scalar/src/sclfunc.c b/source/libs/scalar/src/sclfunc.c index 28514c3605..94b84c5861 100644 --- a/source/libs/scalar/src/sclfunc.c +++ b/source/libs/scalar/src/sclfunc.c @@ -133,7 +133,12 @@ static int32_t doScalarFunctionUnique(SScalarParam *pInput, int32_t inputNum, SS colDataAppendNULL(pOutputData, i); continue; } - out[i] = valFn(getValueFn(pInputData->pData, i)); + double result = valFn(getValueFn(pInputData->pData, i)); + if (isinf(result) || isnan(result)) { + colDataAppendNULL(pOutputData, i); + } else { + out[i] = result; + } } pOutput->numOfRows = pInput->numOfRows; @@ -162,7 +167,12 @@ static int32_t doScalarFunctionUnique2(SScalarParam *pInput, int32_t inputNum, S colDataAppendNULL(pOutputData, i); continue; } - out[i] = valFn(getValueFn[0](pInputData[0]->pData, i), getValueFn[1](pInputData[1]->pData, 0)); + double result = valFn(getValueFn[0](pInputData[0]->pData, i), getValueFn[1](pInputData[1]->pData, 0)); + if (isinf(result) || isnan(result)) { + colDataAppendNULL(pOutputData, i); + } else { + out[i] = result; + } } pOutput->numOfRows = pInput->numOfRows; diff --git a/tests/system-test/0-others/taosShell.py b/tests/system-test/0-others/taosShell.py index 3c3508a5c3..fa94dea656 100644 --- a/tests/system-test/0-others/taosShell.py +++ b/tests/system-test/0-others/taosShell.py @@ -70,11 +70,12 @@ class TDTestCase: # 'serverPort': 7080, 'firstEp': 'trd02:7080'} hostname = socket.gethostname() serverPort = '7080' - clientCfgDict = {'serverPort': '', 'firstEp': '', 'secondEp':''} - clientCfgDict["serverPort"] = serverPort - clientCfgDict["firstEp"] = hostname + ':' + serverPort - clientCfgDict["secondEp"] = hostname + ':' + serverPort - + rpcDebugFlagVal = '143' + clientCfgDict = {'serverPort': '', 'firstEp': '', 'secondEp':'', 'rpcDebugFlag':'135'} + clientCfgDict["serverPort"] = serverPort + clientCfgDict["firstEp"] = hostname + ':' + serverPort + clientCfgDict["secondEp"] = hostname + ':' + serverPort + clientCfgDict["rpcDebugFlag"] = rpcDebugFlagVal updatecfgDict = {'clientCfg': {}, 'serverPort': '', 'firstEp': '', 'secondEp':''} updatecfgDict["clientCfg"] = clientCfgDict @@ -109,8 +110,8 @@ class TDTestCase: # time.sleep(2) tdSql.query("create user testpy pass 'testpy'") - hostname = socket.gethostname() - tdLog.info ("hostname: %s" % hostname) + #hostname = socket.gethostname() + #tdLog.info ("hostname: %s" % hostname) buildPath = self.getBuildPath() if (buildPath == ""): @@ -126,8 +127,9 @@ class TDTestCase: keyDict = {'h':'', 'P':'6030', 'p':'testpy', 'u':'testpy', 'a':'', 'A':'', 'c':'', 'C':'', 's':'', 'r':'', 'f':'', \ 'k':'', 't':'', 'n':'', 'l':'1024', 'N':'100', 'V':'', 'd':'db', 'w':'30', '-help':'', '-usage':'', '?':''} - keyDict['h'] = hostname + keyDict['h'] = self.hostname keyDict['c'] = cfgPath + keyDict['P'] = self.serverPort tdLog.printNoPrefix("================================ parameter: -h") newDbName="dbh" @@ -312,9 +314,25 @@ class TDTestCase: if retCode != "TAOS_OK": tdLog.exit("taos -C fail") - print ("-C return content:\n ", retVal) - + #print ("-C return content:\n ", retVal) + totalCfgItem = {"firstEp":['', '', ''], } + for line in retVal.splitlines(): + strList = line.split() + if (len(strList) > 2): + totalCfgItem[strList[1]] = strList + + #print ("dict content:\n ", totalCfgItem) + firstEp = keyDict["h"] + ':' + keyDict['P'] + if (totalCfgItem["firstEp"][2] != firstEp) and (totalCfgItem["firstEp"][0] != 'cfg_file'): + tdLog.exit("taos -C return firstEp error!") + + if (totalCfgItem["rpcDebugFlag"][2] != self.rpcDebugFlagVal) and (totalCfgItem["rpcDebugFlag"][0] != 'cfg_file'): + tdLog.exit("taos -C return rpcDebugFlag error!") + + count = os.cpu_count() + if (totalCfgItem["numOfCores"][2] != count) and (totalCfgItem["numOfCores"][0] != 'default'): + tdLog.exit("taos -C return numOfCores error!") def stop(self): tdSql.close() diff --git a/tests/system-test/fulltest.sh b/tests/system-test/fulltest.sh index 30477722ab..9a4f780ab2 100755 --- a/tests/system-test/fulltest.sh +++ b/tests/system-test/fulltest.sh @@ -1,6 +1,9 @@ #!/bin/bash set -e +#python3 ./test.py -f 0-others/taosShell.py + + #python3 ./test.py -f 2-query/between.py #python3 ./test.py -f 2-query/distinct.py python3 ./test.py -f 2-query/varchar.py