Merge pull request #11881 from taosdata/fix/TD-15132
fix(query): fix taosshell crash when arithmetic operation with NULL concstant
This commit is contained in:
commit
e15d78e2e8
|
@ -86,8 +86,10 @@ static FORCE_INLINE _getDoubleValue_fn_t getVectorDoubleValueFn(int32_t srcType)
|
|||
p = getVectorDoubleValue_JSON;
|
||||
} else if (srcType == TSDB_DATA_TYPE_BOOL) {
|
||||
p = getVectorDoubleValue_BOOL;
|
||||
} else if (srcType == TSDB_DATA_TYPE_NULL) {
|
||||
p = NULL;
|
||||
} else {
|
||||
assert(0);
|
||||
ASSERT(0);
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
|
|
@ -591,21 +591,25 @@ EDealRes sclRewriteOperator(SNode** pNode, SScalarCtx *ctx) {
|
|||
|
||||
SValueNode *res = (SValueNode *)nodesMakeNode(QUERY_NODE_VALUE);
|
||||
if (NULL == res) {
|
||||
sclError("make value node failed");
|
||||
sclFreeParam(&output);
|
||||
sclError("make value node failed");
|
||||
sclFreeParam(&output);
|
||||
ctx->code = TSDB_CODE_QRY_OUT_OF_MEMORY;
|
||||
return DEAL_RES_ERROR;
|
||||
}
|
||||
|
||||
res->node.resType = node->node.resType;
|
||||
res->translate = true;
|
||||
|
||||
int32_t type = output.columnData->info.type;
|
||||
if (IS_VAR_DATA_TYPE(type)) { // todo refactor
|
||||
res->datum.p = output.columnData->pData;
|
||||
output.columnData->pData = NULL;
|
||||
if (colDataIsNull_s(output.columnData, 0)) {
|
||||
res->node.resType.type = TSDB_DATA_TYPE_NULL;
|
||||
} else {
|
||||
memcpy(nodesGetValueFromNode(res), output.columnData->pData, tDataTypes[type].bytes);
|
||||
res->node.resType = node->node.resType;
|
||||
int32_t type = output.columnData->info.type;
|
||||
if (IS_VAR_DATA_TYPE(type)) { // todo refactor
|
||||
res->datum.p = output.columnData->pData;
|
||||
output.columnData->pData = NULL;
|
||||
} else {
|
||||
memcpy(nodesGetValueFromNode(res), output.columnData->pData, tDataTypes[type].bytes);
|
||||
}
|
||||
}
|
||||
|
||||
nodesDestroyNode(*pNode);
|
||||
|
@ -628,7 +632,7 @@ EDealRes sclConstantsRewriter(SNode** pNode, void* pContext) {
|
|||
|
||||
if (QUERY_NODE_OPERATOR == nodeType(*pNode)) {
|
||||
return sclRewriteOperator(pNode, ctx);
|
||||
}
|
||||
}
|
||||
|
||||
return DEAL_RES_CONTINUE;
|
||||
}
|
||||
|
@ -636,7 +640,7 @@ EDealRes sclConstantsRewriter(SNode** pNode, void* pContext) {
|
|||
EDealRes sclWalkFunction(SNode* pNode, SScalarCtx *ctx) {
|
||||
SFunctionNode *node = (SFunctionNode *)pNode;
|
||||
SScalarParam output = {0};
|
||||
|
||||
|
||||
ctx->code = sclExecFunction(node, ctx, &output);
|
||||
if (ctx->code) {
|
||||
return DEAL_RES_ERROR;
|
||||
|
@ -653,7 +657,7 @@ EDealRes sclWalkFunction(SNode* pNode, SScalarCtx *ctx) {
|
|||
EDealRes sclWalkLogic(SNode* pNode, SScalarCtx *ctx) {
|
||||
SLogicConditionNode *node = (SLogicConditionNode *)pNode;
|
||||
SScalarParam output = {0};
|
||||
|
||||
|
||||
ctx->code = sclExecLogic(node, ctx, &output);
|
||||
if (ctx->code) {
|
||||
return DEAL_RES_ERROR;
|
||||
|
|
|
@ -150,34 +150,36 @@ int64_t getVectorBigintValue_JSON(void *src, int32_t index){
|
|||
|
||||
_getBigintValue_fn_t getVectorBigintValueFn(int32_t srcType) {
|
||||
_getBigintValue_fn_t p = NULL;
|
||||
if(srcType==TSDB_DATA_TYPE_TINYINT) {
|
||||
p = getVectorBigintValue_TINYINT;
|
||||
}else if(srcType==TSDB_DATA_TYPE_UTINYINT) {
|
||||
p = getVectorBigintValue_UTINYINT;
|
||||
}else if(srcType==TSDB_DATA_TYPE_SMALLINT) {
|
||||
p = getVectorBigintValue_SMALLINT;
|
||||
}else if(srcType==TSDB_DATA_TYPE_USMALLINT) {
|
||||
p = getVectorBigintValue_USMALLINT;
|
||||
}else if(srcType==TSDB_DATA_TYPE_INT) {
|
||||
p = getVectorBigintValue_INT;
|
||||
}else if(srcType==TSDB_DATA_TYPE_UINT) {
|
||||
p = getVectorBigintValue_UINT;
|
||||
}else if(srcType==TSDB_DATA_TYPE_BIGINT) {
|
||||
p = getVectorBigintValue_BIGINT;
|
||||
}else if(srcType==TSDB_DATA_TYPE_UBIGINT) {
|
||||
p = getVectorBigintValue_UBIGINT;
|
||||
}else if(srcType==TSDB_DATA_TYPE_FLOAT) {
|
||||
p = getVectorBigintValue_FLOAT;
|
||||
}else if(srcType==TSDB_DATA_TYPE_DOUBLE) {
|
||||
p = getVectorBigintValue_DOUBLE;
|
||||
}else if(srcType==TSDB_DATA_TYPE_TIMESTAMP) {
|
||||
p = getVectorBigintValue_BIGINT;
|
||||
}else if(srcType==TSDB_DATA_TYPE_BOOL) {
|
||||
p = getVectorBigintValue_BOOL;
|
||||
}else if(srcType==TSDB_DATA_TYPE_JSON) {
|
||||
p = getVectorBigintValue_JSON;
|
||||
}else {
|
||||
assert(0);
|
||||
if (srcType==TSDB_DATA_TYPE_TINYINT) {
|
||||
p = getVectorBigintValue_TINYINT;
|
||||
} else if (srcType==TSDB_DATA_TYPE_UTINYINT) {
|
||||
p = getVectorBigintValue_UTINYINT;
|
||||
} else if (srcType==TSDB_DATA_TYPE_SMALLINT) {
|
||||
p = getVectorBigintValue_SMALLINT;
|
||||
} else if (srcType==TSDB_DATA_TYPE_USMALLINT) {
|
||||
p = getVectorBigintValue_USMALLINT;
|
||||
} else if (srcType==TSDB_DATA_TYPE_INT) {
|
||||
p = getVectorBigintValue_INT;
|
||||
} else if (srcType==TSDB_DATA_TYPE_UINT) {
|
||||
p = getVectorBigintValue_UINT;
|
||||
} else if (srcType==TSDB_DATA_TYPE_BIGINT) {
|
||||
p = getVectorBigintValue_BIGINT;
|
||||
} else if (srcType==TSDB_DATA_TYPE_UBIGINT) {
|
||||
p = getVectorBigintValue_UBIGINT;
|
||||
} else if (srcType==TSDB_DATA_TYPE_FLOAT) {
|
||||
p = getVectorBigintValue_FLOAT;
|
||||
} else if (srcType==TSDB_DATA_TYPE_DOUBLE) {
|
||||
p = getVectorBigintValue_DOUBLE;
|
||||
} else if (srcType==TSDB_DATA_TYPE_TIMESTAMP) {
|
||||
p = getVectorBigintValue_BIGINT;
|
||||
} else if (srcType==TSDB_DATA_TYPE_BOOL) {
|
||||
p = getVectorBigintValue_BOOL;
|
||||
} else if (srcType==TSDB_DATA_TYPE_JSON) {
|
||||
p = getVectorBigintValue_JSON;
|
||||
} else if (srcType==TSDB_DATA_TYPE_NULL){
|
||||
p = NULL;
|
||||
} else {
|
||||
ASSERT(0);
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
@ -1594,7 +1596,7 @@ _bin_scalar_fn_t getBinScalarOperatorFn(int32_t binFunctionId) {
|
|||
case OP_TYPE_JSON_CONTAINS:
|
||||
return vectorJsonContains;
|
||||
default:
|
||||
assert(0);
|
||||
ASSERT(0);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue