[td-13039] fix compiler error.
This commit is contained in:
parent
b9c33dade2
commit
6cd2d69d14
|
@ -21,85 +21,80 @@ int32_t absFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutpu
|
|||
|
||||
switch (type) {
|
||||
case TSDB_DATA_TYPE_FLOAT: {
|
||||
float *in = (float *)pInputData->pData;
|
||||
float *out = (float *)pOutputData->pData;
|
||||
for (int32_t i = 0; i < pOutput->numOfRows; ++i) {
|
||||
if (colDataIsNull_f(pInputData->nullbitmap, i)) {
|
||||
colDataAppendNULL(pOutputData, i);
|
||||
continue;
|
||||
}
|
||||
|
||||
float *in = (float *)pInputData->pData;
|
||||
float *out = (float *)pOutputData;
|
||||
in[i] = (out[i] > 0)? out[i] : -out[i];
|
||||
out[i] = (in[i] > 0)? in[i] : -in[i];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case TSDB_DATA_TYPE_DOUBLE: {
|
||||
double *in = (double *)pInputData->pData;
|
||||
double *out = (double *)pOutputData->pData;
|
||||
for (int32_t i = 0; i < pOutput->numOfRows; ++i) {
|
||||
if (colDataIsNull_f(pInputData->nullbitmap, i)) {
|
||||
colDataAppendNULL(pOutputData, i);
|
||||
continue;
|
||||
}
|
||||
|
||||
double *in = (double *)pInputData->pData;
|
||||
double *out = (double *)pOutputData;
|
||||
in[i] = (out[i] > 0)? out[i] : -out[i];
|
||||
out[i] = (in[i] > 0)? in[i] : -in[i];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case TSDB_DATA_TYPE_TINYINT: {
|
||||
int8_t *in = (int8_t *)pInputData->pData;
|
||||
int8_t *out = (int8_t *)pOutputData->pData;
|
||||
for (int32_t i = 0; i < pOutput->numOfRows; ++i) {
|
||||
if (colDataIsNull_f(pInputData->nullbitmap, i)) {
|
||||
colDataAppendNULL(pOutputData, i);
|
||||
continue;
|
||||
}
|
||||
|
||||
int8_t *in = (int8_t *)pInputData->pData;
|
||||
int8_t *out = (int8_t *)pOutputData;
|
||||
in[i] = (out[i] > 0)? out[i] : -out[i];
|
||||
out[i] = (in[i] > 0)? in[i] : -in[i];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case TSDB_DATA_TYPE_SMALLINT: {
|
||||
int16_t *in = (int16_t *)pInputData->pData;
|
||||
int16_t *out = (int16_t *)pOutputData->pData;
|
||||
for (int32_t i = 0; i < pOutput->numOfRows; ++i) {
|
||||
if (colDataIsNull_f(pInputData->nullbitmap, i)) {
|
||||
colDataAppendNULL(pOutputData, i);
|
||||
continue;
|
||||
}
|
||||
|
||||
int16_t *in = (int16_t *)pInputData->pData;
|
||||
int16_t *out = (int16_t *)pOutputData;
|
||||
in[i] = (out[i] > 0)? out[i] : -out[i];
|
||||
out[i] = (in[i] > 0)? in[i] : -in[i];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case TSDB_DATA_TYPE_INT: {
|
||||
int32_t *in = (int32_t *)pInputData->pData;
|
||||
int32_t *out = (int32_t *)pOutputData->pData;
|
||||
|
||||
for (int32_t i = 0; i < pOutput->numOfRows; ++i) {
|
||||
if (colDataIsNull_f(pInputData->nullbitmap, i)) {
|
||||
colDataAppendNULL(pOutputData, i);
|
||||
continue;
|
||||
}
|
||||
|
||||
int32_t *in = (int32_t *)pInputData->pData;
|
||||
int32_t *out = (int32_t *)pOutputData;
|
||||
in[i] = (out[i] > 0) ? out[i] : -out[i];
|
||||
out[i] = (in[i] > 0)? in[i] : -in[i];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case TSDB_DATA_TYPE_BIGINT: {
|
||||
int64_t *in = (int64_t *)pInputData->pData;
|
||||
int64_t *out = (int64_t *)pOutputData->pData;
|
||||
for (int32_t i = 0; i < pOutput->numOfRows; ++i) {
|
||||
if (colDataIsNull_f(pInputData->nullbitmap, i)) {
|
||||
colDataAppendNULL(pOutputData, i);
|
||||
continue;
|
||||
}
|
||||
|
||||
int64_t *in = (int64_t *)pInputData->pData;
|
||||
int64_t *out = (int64_t *)pOutputData;
|
||||
in[i] = (out[i] > 0) ? out[i] : -out[i];
|
||||
out[i] = (in[i] > 0)? in[i] : -in[i];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -114,6 +109,7 @@ int32_t absFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutpu
|
|||
}
|
||||
|
||||
int32_t logFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
#if 0
|
||||
if (inputNum != 2 || !IS_NUMERIC_TYPE(pInput[0].type) || !IS_NUMERIC_TYPE(pInput[1].type)) {
|
||||
return TSDB_CODE_FAILED;
|
||||
}
|
||||
|
@ -149,11 +145,13 @@ int32_t logFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutpu
|
|||
}
|
||||
|
||||
taosMemoryFree(input);
|
||||
#endif
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t powFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
#if 0
|
||||
if (inputNum != 2 || !IS_NUMERIC_TYPE(pInput[0].type) || !IS_NUMERIC_TYPE(pInput[1].type)) {
|
||||
return TSDB_CODE_FAILED;
|
||||
}
|
||||
|
@ -192,11 +190,12 @@ int32_t powFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutpu
|
|||
}
|
||||
|
||||
taosMemoryFree(input);
|
||||
|
||||
#endif
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t sqrtFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
#if 0
|
||||
if (inputNum != 1 || !IS_NUMERIC_TYPE(pInput->type)) {
|
||||
return TSDB_CODE_FAILED;
|
||||
}
|
||||
|
@ -223,11 +222,12 @@ int32_t sqrtFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
double result = sqrt(v);
|
||||
SET_TYPED_DATA(output, pOutput->type, result);
|
||||
}
|
||||
|
||||
#endif
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t sinFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
#if 0
|
||||
if (inputNum != 1 || !IS_NUMERIC_TYPE(pInput->type)) {
|
||||
return TSDB_CODE_FAILED;
|
||||
}
|
||||
|
@ -254,11 +254,13 @@ int32_t sinFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutpu
|
|||
double result = sin(v);
|
||||
SET_TYPED_DATA(output, pOutput->type, result);
|
||||
}
|
||||
#endif
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t cosFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
#if 0
|
||||
if (inputNum != 1 || !IS_NUMERIC_TYPE(pInput->type)) {
|
||||
return TSDB_CODE_FAILED;
|
||||
}
|
||||
|
@ -285,11 +287,12 @@ int32_t cosFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutpu
|
|||
double result = cos(v);
|
||||
SET_TYPED_DATA(output, pOutput->type, result);
|
||||
}
|
||||
|
||||
#endif
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t tanFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
#if 0
|
||||
if (inputNum != 1 || !IS_NUMERIC_TYPE(pInput->type)) {
|
||||
return TSDB_CODE_FAILED;
|
||||
}
|
||||
|
@ -316,11 +319,12 @@ int32_t tanFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutpu
|
|||
double result = tan(v);
|
||||
SET_TYPED_DATA(output, pOutput->type, result);
|
||||
}
|
||||
|
||||
#endif
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t asinFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
#if 0
|
||||
if (inputNum != 1 || !IS_NUMERIC_TYPE(pInput->type)) {
|
||||
return TSDB_CODE_FAILED;
|
||||
}
|
||||
|
@ -347,11 +351,12 @@ int32_t asinFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
double result = asin(v);
|
||||
SET_TYPED_DATA(output, pOutput->type, result);
|
||||
}
|
||||
|
||||
#endif
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t acosFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
#if 0
|
||||
if (inputNum != 1 || !IS_NUMERIC_TYPE(pInput->type)) {
|
||||
return TSDB_CODE_FAILED;
|
||||
}
|
||||
|
@ -378,11 +383,12 @@ int32_t acosFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
double result = acos(v);
|
||||
SET_TYPED_DATA(output, pOutput->type, result);
|
||||
}
|
||||
|
||||
#endif
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t atanFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
#if 0
|
||||
if (inputNum != 1 || !IS_NUMERIC_TYPE(pInput->type)) {
|
||||
return TSDB_CODE_FAILED;
|
||||
}
|
||||
|
@ -409,147 +415,149 @@ int32_t atanFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
double result = atan(v);
|
||||
SET_TYPED_DATA(output, pOutput->type, result);
|
||||
}
|
||||
|
||||
#endif
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
//TODO use callback function [ceilf, ceil]
|
||||
int32_t ceilFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
if (inputNum != 1 || !IS_NUMERIC_TYPE(pInput->type)) {
|
||||
int32_t type = GET_PARAM_TYPE(pInput);
|
||||
if (inputNum != 1 || !IS_NUMERIC_TYPE(type)) {
|
||||
return TSDB_CODE_FAILED;
|
||||
}
|
||||
|
||||
char *input = NULL, *output = NULL;
|
||||
for (int32_t i = 0; i < pOutput->num; ++i) {
|
||||
if (pInput->num == 1) {
|
||||
input = pInput->data;
|
||||
} else {
|
||||
input = pInput->data + i * pInput->bytes;
|
||||
}
|
||||
output = pOutput->data + i * pOutput->bytes;
|
||||
SColumnInfoData *pInputData = pInput->columnData;
|
||||
SColumnInfoData *pOutputData = pOutput->columnData;
|
||||
|
||||
if (isNull(input, pInput->type)) {
|
||||
setNull(output, pOutput->type, pOutput->bytes);
|
||||
switch (type) {
|
||||
case TSDB_DATA_TYPE_FLOAT: {
|
||||
float *in = (float *)pInputData->pData;
|
||||
float *out = (float *)pOutputData->pData;
|
||||
|
||||
for (int32_t i = 0; i < pOutput->numOfRows; ++i) {
|
||||
if (colDataIsNull_f(pInputData->nullbitmap, i)) {
|
||||
colDataAppendNULL(pOutputData, i);
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (pInput->type) {
|
||||
case TSDB_DATA_TYPE_FLOAT: {
|
||||
float v;
|
||||
GET_TYPED_DATA(v, float, pInput->type, input);
|
||||
float result = ceilf(v);
|
||||
SET_TYPED_DATA(output, pOutput->type, result);
|
||||
out[i] = ceilf(in[i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case TSDB_DATA_TYPE_DOUBLE: {
|
||||
double v;
|
||||
GET_TYPED_DATA(v, double, pInput->type, input);
|
||||
double result = ceil(v);
|
||||
SET_TYPED_DATA(output, pOutput->type, result);
|
||||
double *in = (double *)pInputData->pData;
|
||||
double *out = (double *)pOutputData->pData;
|
||||
|
||||
for (int32_t i = 0; i < pOutput->numOfRows; ++i) {
|
||||
if (colDataIsNull_f(pInputData->nullbitmap, i)) {
|
||||
colDataAppendNULL(pOutputData, i);
|
||||
continue;
|
||||
}
|
||||
out[i] = ceil(in[i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
memcpy(output, input, pInput->bytes);
|
||||
break;
|
||||
}
|
||||
colDataAssign(pOutputData, pInputData, pInput->numOfRows);
|
||||
}
|
||||
}
|
||||
|
||||
pOutput->numOfRows = pInput->numOfRows;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t floorFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
assignBasicParaInfo(pOutput, pInput);
|
||||
if (inputNum != 1 || !IS_NUMERIC_TYPE(pInput->type)) {
|
||||
int32_t type = GET_PARAM_TYPE(pInput);
|
||||
if (inputNum != 1 || !IS_NUMERIC_TYPE(type)) {
|
||||
return TSDB_CODE_FAILED;
|
||||
}
|
||||
|
||||
char *input = NULL, *output = NULL;
|
||||
for (int32_t i = 0; i < pOutput->num; ++i) {
|
||||
if (pInput->num == 1) {
|
||||
input = pInput->data;
|
||||
} else {
|
||||
input = pInput->data + i * pInput->bytes;
|
||||
}
|
||||
output = pOutput->data + i * pOutput->bytes;
|
||||
SColumnInfoData *pInputData = pInput->columnData;
|
||||
SColumnInfoData *pOutputData = pOutput->columnData;
|
||||
|
||||
if (isNull(input, pInput->type)) {
|
||||
setNull(output, pOutput->type, pOutput->bytes);
|
||||
switch (type) {
|
||||
case TSDB_DATA_TYPE_FLOAT: {
|
||||
float *in = (float *)pInputData->pData;
|
||||
float *out = (float *)pOutputData->pData;
|
||||
|
||||
for (int32_t i = 0; i < pOutput->numOfRows; ++i) {
|
||||
if (colDataIsNull_f(pInputData->nullbitmap, i)) {
|
||||
colDataAppendNULL(pOutputData, i);
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (pInput->type) {
|
||||
case TSDB_DATA_TYPE_FLOAT: {
|
||||
float v;
|
||||
GET_TYPED_DATA(v, float, pInput->type, input);
|
||||
float result = floorf(v);
|
||||
SET_TYPED_DATA(output, pOutput->type, result);
|
||||
out[i] = floorf(in[i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case TSDB_DATA_TYPE_DOUBLE: {
|
||||
double v;
|
||||
GET_TYPED_DATA(v, double, pInput->type, input);
|
||||
double result = floor(v);
|
||||
SET_TYPED_DATA(output, pOutput->type, result);
|
||||
double *in = (double *)pInputData->pData;
|
||||
double *out = (double *)pOutputData->pData;
|
||||
|
||||
for (int32_t i = 0; i < pOutput->numOfRows; ++i) {
|
||||
if (colDataIsNull_f(pInputData->nullbitmap, i)) {
|
||||
colDataAppendNULL(pOutputData, i);
|
||||
continue;
|
||||
}
|
||||
out[i] = floor(in[i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
memcpy(output, input, pInput->bytes);
|
||||
break;
|
||||
}
|
||||
colDataAssign(pOutputData, pInputData, pInput->numOfRows);
|
||||
}
|
||||
}
|
||||
|
||||
pOutput->numOfRows = pInput->numOfRows;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t roundFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
assignBasicParaInfo(pOutput, pInput);
|
||||
if (inputNum != 1 || !IS_NUMERIC_TYPE(pInput->type)) {
|
||||
int32_t type = GET_PARAM_TYPE(pInput);
|
||||
if (inputNum != 1 || !IS_NUMERIC_TYPE(type)) {
|
||||
return TSDB_CODE_FAILED;
|
||||
}
|
||||
|
||||
char *input = NULL, *output = NULL;
|
||||
for (int32_t i = 0; i < pOutput->num; ++i) {
|
||||
if (pInput->num == 1) {
|
||||
input = pInput->data;
|
||||
} else {
|
||||
input = pInput->data + i * pInput->bytes;
|
||||
}
|
||||
output = pOutput->data + i * pOutput->bytes;
|
||||
SColumnInfoData *pInputData = pInput->columnData;
|
||||
SColumnInfoData *pOutputData = pOutput->columnData;
|
||||
|
||||
if (isNull(input, pInput->type)) {
|
||||
setNull(output, pOutput->type, pOutput->bytes);
|
||||
switch (type) {
|
||||
case TSDB_DATA_TYPE_FLOAT: {
|
||||
float *in = (float *)pInputData->pData;
|
||||
float *out = (float *)pOutputData->pData;
|
||||
|
||||
for (int32_t i = 0; i < pOutput->numOfRows; ++i) {
|
||||
if (colDataIsNull_f(pInputData->nullbitmap, i)) {
|
||||
colDataAppendNULL(pOutputData, i);
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (pInput->type) {
|
||||
case TSDB_DATA_TYPE_FLOAT: {
|
||||
float v;
|
||||
GET_TYPED_DATA(v, float, pInput->type, input);
|
||||
float result = roundf(v);
|
||||
SET_TYPED_DATA(output, pOutput->type, result);
|
||||
out[i] = roundf(in[i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case TSDB_DATA_TYPE_DOUBLE: {
|
||||
double v;
|
||||
GET_TYPED_DATA(v, double, pInput->type, input);
|
||||
double result = round(v);
|
||||
SET_TYPED_DATA(output, pOutput->type, result);
|
||||
double *in = (double *)pInputData->pData;
|
||||
double *out = (double *)pOutputData->pData;
|
||||
|
||||
for (int32_t i = 0; i < pOutput->numOfRows; ++i) {
|
||||
if (colDataIsNull_f(pInputData->nullbitmap, i)) {
|
||||
colDataAppendNULL(pOutputData, i);
|
||||
continue;
|
||||
}
|
||||
out[i] = round(in[i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
memcpy(output, input, pInput->bytes);
|
||||
break;
|
||||
}
|
||||
colDataAssign(pOutputData, pInputData, pInput->numOfRows);
|
||||
}
|
||||
}
|
||||
|
||||
pOutput->numOfRows = pInput->numOfRows;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -671,153 +679,3 @@ static void reverseCopy(char* dest, const char* src, int16_t type, int32_t numOf
|
|||
}
|
||||
}
|
||||
|
||||
static void setScalarFuncParam(SScalarParam* param, int32_t type, int32_t bytes, void* pInput, int32_t numOfRows) {
|
||||
// param->bytes = bytes;
|
||||
// param->type = type;
|
||||
// param->num = numOfRows;
|
||||
// param->data = pInput;
|
||||
}
|
||||
|
||||
#if 0
|
||||
int32_t evaluateExprNodeTree(tExprNode* pExprs, int32_t numOfRows, SScalarFuncParam* pOutput, void* param,
|
||||
char* (*getSourceDataBlock)(void*, const char*, int32_t)) {
|
||||
if (pExprs == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
tExprNode* pLeft = pExprs->_node.pLeft;
|
||||
tExprNode* pRight = pExprs->_node.pRight;
|
||||
|
||||
/* the left output has result from the left child syntax tree */
|
||||
SScalarFuncParam leftOutput = {0};
|
||||
SScalarFuncParam rightOutput = {0};
|
||||
|
||||
if (pLeft->nodeType == TEXPR_BINARYEXPR_NODE || pLeft->nodeType == TEXPR_UNARYEXPR_NODE) {
|
||||
leftOutput.data = taosMemoryMalloc(sizeof(int64_t) * numOfRows);
|
||||
evaluateExprNodeTree(pLeft, numOfRows, &leftOutput, param, getSourceDataBlock);
|
||||
}
|
||||
|
||||
// the right output has result from the right child syntax tree
|
||||
if (pRight->nodeType == TEXPR_BINARYEXPR_NODE || pRight->nodeType == TEXPR_UNARYEXPR_NODE) {
|
||||
rightOutput.data = taosMemoryMalloc(sizeof(int64_t) * numOfRows);
|
||||
evaluateExprNodeTree(pRight, numOfRows, &rightOutput, param, getSourceDataBlock);
|
||||
}
|
||||
|
||||
if (pExprs->nodeType == TEXPR_BINARYEXPR_NODE) {
|
||||
_bin_scalar_fn_t OperatorFn = getBinScalarOperatorFn(pExprs->_node.optr);
|
||||
|
||||
SScalarFuncParam left = {0}, right = {0};
|
||||
if (pLeft->nodeType == TEXPR_BINARYEXPR_NODE || pLeft->nodeType == TEXPR_UNARYEXPR_NODE) {
|
||||
setScalarFuncParam(&left, leftOutput.type, leftOutput.bytes, leftOutput.data, leftOutput.num);
|
||||
} else if (pLeft->nodeType == TEXPR_COL_NODE) {
|
||||
SSchema* pschema = pLeft->pSchema;
|
||||
char* pLeftInputData = getSourceDataBlock(param, pschema->name, pschema->colId);
|
||||
setScalarFuncParam(&right, pschema->type, pschema->bytes, pLeftInputData, numOfRows);
|
||||
} else if (pLeft->nodeType == TEXPR_VALUE_NODE) {
|
||||
SVariant* pVar = pRight->pVal;
|
||||
setScalarFuncParam(&left, pVar->nType, pVar->nLen, &pVar->i, 1);
|
||||
}
|
||||
|
||||
if (pRight->nodeType == TEXPR_BINARYEXPR_NODE || pRight->nodeType == TEXPR_UNARYEXPR_NODE) {
|
||||
setScalarFuncParam(&right, rightOutput.type, rightOutput.bytes, rightOutput.data, rightOutput.num);
|
||||
} else if (pRight->nodeType == TEXPR_COL_NODE) { // exprLeft + columnRight
|
||||
SSchema* pschema = pRight->pSchema;
|
||||
char* pInputData = getSourceDataBlock(param, pschema->name, pschema->colId);
|
||||
setScalarFuncParam(&right, pschema->type, pschema->bytes, pInputData, numOfRows);
|
||||
} else if (pRight->nodeType == TEXPR_VALUE_NODE) { // exprLeft + 12
|
||||
SVariant* pVar = pRight->pVal;
|
||||
setScalarFuncParam(&right, pVar->nType, pVar->nLen, &pVar->i, 1);
|
||||
}
|
||||
|
||||
void* outputBuf = pOutput->data;
|
||||
if (isStringOp(pExprs->_node.optr)) {
|
||||
outputBuf = taosMemoryRealloc(pOutput->data, (left.bytes + right.bytes) * left.num);
|
||||
}
|
||||
|
||||
OperatorFn(&left, &right, outputBuf, TSDB_ORDER_ASC);
|
||||
// Set the result info
|
||||
setScalarFuncParam(pOutput, TSDB_DATA_TYPE_DOUBLE, sizeof(double), outputBuf, numOfRows);
|
||||
} else if (pExprs->nodeType == TEXPR_UNARYEXPR_NODE) {
|
||||
_unary_scalar_fn_t OperatorFn = getUnaryScalarOperatorFn(pExprs->_node.optr);
|
||||
SScalarFuncParam left = {0};
|
||||
|
||||
if (pLeft->nodeType == TEXPR_BINARYEXPR_NODE || pLeft->nodeType == TEXPR_UNARYEXPR_NODE) {
|
||||
setScalarFuncParam(&left, leftOutput.type, leftOutput.bytes, leftOutput.data, leftOutput.num);
|
||||
} else if (pLeft->nodeType == TEXPR_COL_NODE) {
|
||||
SSchema* pschema = pLeft->pSchema;
|
||||
char* pLeftInputData = getSourceDataBlock(param, pschema->name, pschema->colId);
|
||||
setScalarFuncParam(&left, pschema->type, pschema->bytes, pLeftInputData, numOfRows);
|
||||
} else if (pLeft->nodeType == TEXPR_VALUE_NODE) {
|
||||
SVariant* pVar = pLeft->pVal;
|
||||
setScalarFuncParam(&left, pVar->nType, pVar->nLen, &pVar->i, 1);
|
||||
}
|
||||
|
||||
// reserve enough memory buffer
|
||||
if (isBinaryStringOp(pExprs->_node.optr)) {
|
||||
void* outputBuf = taosMemoryRealloc(pOutput->data, left.bytes * left.num);
|
||||
assert(outputBuf != NULL);
|
||||
pOutput->data = outputBuf;
|
||||
}
|
||||
|
||||
OperatorFn(&left, pOutput);
|
||||
}
|
||||
|
||||
taosMemoryFreeClear(leftOutput.data);
|
||||
taosMemoryFreeClear(rightOutput.data);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//SScalarFunctionInfo scalarFunc[8] = {
|
||||
// {"ceil", FUNCTION_TYPE_SCALAR, FUNCTION_CEIL, tceil},
|
||||
// {"floor", FUNCTION_TYPE_SCALAR, FUNCTION_FLOOR, tfloor},
|
||||
// {"abs", FUNCTION_TYPE_SCALAR, FUNCTION_ABS, _tabs},
|
||||
// {"round", FUNCTION_TYPE_SCALAR, FUNCTION_ROUND, tround},
|
||||
// {"length", FUNCTION_TYPE_SCALAR, FUNCTION_LENGTH, tlength},
|
||||
// {"concat", FUNCTION_TYPE_SCALAR, FUNCTION_CONCAT, tconcat},
|
||||
// {"ltrim", FUNCTION_TYPE_SCALAR, FUNCTION_LTRIM, tltrim},
|
||||
// {"rtrim", FUNCTION_TYPE_SCALAR, FUNCTION_RTRIM, trtrim},
|
||||
//};
|
||||
|
||||
void setScalarFunctionSupp(struct SScalarFunctionSupport* sas, SExprInfo *pExprInfo, SSDataBlock* pSDataBlock) {
|
||||
sas->numOfCols = (int32_t) pSDataBlock->info.numOfCols;
|
||||
sas->pExprInfo = pExprInfo;
|
||||
if (sas->colList != NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
sas->colList = taosMemoryCalloc(1, pSDataBlock->info.numOfCols*sizeof(SColumnInfo));
|
||||
for(int32_t i = 0; i < sas->numOfCols; ++i) {
|
||||
SColumnInfoData* pColData = taosArrayGet(pSDataBlock->pDataBlock, i);
|
||||
sas->colList[i] = pColData->info;
|
||||
}
|
||||
|
||||
sas->data = taosMemoryCalloc(sas->numOfCols, POINTER_BYTES);
|
||||
|
||||
// set the input column data
|
||||
for (int32_t f = 0; f < pSDataBlock->info.numOfCols; ++f) {
|
||||
SColumnInfoData *pColumnInfoData = taosArrayGet(pSDataBlock->pDataBlock, f);
|
||||
sas->data[f] = pColumnInfoData->pData;
|
||||
}
|
||||
}
|
||||
|
||||
SScalarFunctionSupport* createScalarFuncSupport(int32_t num) {
|
||||
SScalarFunctionSupport* pSupp = taosMemoryCalloc(num, sizeof(SScalarFunctionSupport));
|
||||
return pSupp;
|
||||
}
|
||||
|
||||
void destroyScalarFuncSupport(struct SScalarFunctionSupport* pSupport, int32_t num) {
|
||||
if (pSupport == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
for(int32_t i = 0; i < num; ++i) {
|
||||
SScalarFunctionSupport* pSupp = &pSupport[i];
|
||||
taosMemoryFreeClear(pSupp->data);
|
||||
taosMemoryFreeClear(pSupp->colList);
|
||||
}
|
||||
|
||||
taosMemoryFreeClear(pSupport);
|
||||
}
|
||||
|
|
|
@ -279,7 +279,7 @@ static FORCE_INLINE void varToBool(char *buf, SScalarParam* pOut, int32_t rowInd
|
|||
|
||||
int32_t vectorConvertFromVarData(SScalarParam* pIn, SScalarParam* pOut, int32_t inType, int32_t outType) {
|
||||
int32_t bufSize = pIn->columnData->info.bytes;
|
||||
char *tmp = malloc(bufSize);
|
||||
char *tmp = taosMemoryMalloc(bufSize);
|
||||
|
||||
_bufConverteFunc func = NULL;
|
||||
if (TSDB_DATA_TYPE_BOOL == outType) {
|
||||
|
|
Loading…
Reference in New Issue