未验证 提交 928cbcec 编写于 作者: G Ganlin Zhao 提交者: GitHub

Merge pull request #11252 from taosdata/feature/3.0_glzhao

[TD-14241]<feature>: substr function refactor
...@@ -576,29 +576,6 @@ int32_t stubCheckAndGetResultType(SFunctionNode* pFunc) { ...@@ -576,29 +576,6 @@ int32_t stubCheckAndGetResultType(SFunctionNode* pFunc) {
} }
pFunc->node.resType = (SDataType) { .bytes = paraBytes, .type = paraType }; pFunc->node.resType = (SDataType) { .bytes = paraBytes, .type = paraType };
break; break;
//int32_t paraTypeFirst, totalBytes = 0, sepBytes = 0;
//int32_t firstParamIndex = 0;
//if (pFunc->funcType == FUNCTION_TYPE_CONCAT_WS) {
// firstParamIndex = 1;
// SColumnNode* pSep = nodesListGetNode(pFunc->pParameterList, 0);
// sepBytes = pSep->node.resType.type;
//}
//for (int32_t i = firstParamIndex; i < pFunc->pParameterList->length; ++i) {
// SColumnNode* pParam = nodesListGetNode(pFunc->pParameterList, i);
// int32_t paraType = pParam->node.resType.type;
// if (i == firstParamIndex) {
// paraTypeFirst = paraType;
// }
// if (paraType != paraTypeFirst) {
// return TSDB_CODE_FAILED;
// }
// //TODO: for constants also needs numOfRows
// totalBytes += pParam->node.resType.bytes;
//}
////TODO: need to get numOfRows to decide how much space separator needed. Currently set to 100.
//totalBytes += sepBytes * (pFunc->pParameterList->length - 2) * 100;
//pFunc->node.resType = (SDataType) { .bytes = totalBytes, .type = paraTypeFirst };
//break;
} }
case FUNCTION_TYPE_LOWER: case FUNCTION_TYPE_LOWER:
case FUNCTION_TYPE_UPPER: case FUNCTION_TYPE_UPPER:
......
...@@ -609,7 +609,7 @@ int32_t substrFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu ...@@ -609,7 +609,7 @@ int32_t substrFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu
char *input = pInputData->pData; char *input = pInputData->pData;
char *output = NULL; char *output = NULL;
int32_t outputLen = pInputData->varmeta.length; int32_t outputLen = pInputData->varmeta.length * pInput->numOfRows;
char *outputBuf = taosMemoryCalloc(outputLen, 1); char *outputBuf = taosMemoryCalloc(outputLen, 1);
output = outputBuf; output = outputBuf;
...@@ -630,12 +630,12 @@ int32_t substrFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu ...@@ -630,12 +630,12 @@ int32_t substrFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu
startPosBytes = MAX(startPosBytes, 0); startPosBytes = MAX(startPosBytes, 0);
} }
subLen = MIN(subLen, len - startPosBytes); int32_t resLen = MIN(subLen, len - startPosBytes);
if (subLen > 0) { if (resLen > 0) {
memcpy(varDataVal(output), varDataVal(input) + startPosBytes, subLen); memcpy(varDataVal(output), varDataVal(input) + startPosBytes, resLen);
} }
varDataSetLen(output, subLen); varDataSetLen(output, resLen);
colDataAppend(pOutputData, i , output, false); colDataAppend(pOutputData, i , output, false);
input += varDataTLen(input); input += varDataTLen(input);
output += varDataTLen(output); output += varDataTLen(output);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册