fix: fix constant comparision precision error
This commit is contained in:
parent
6d27154803
commit
dcf77f2529
|
@ -1038,23 +1038,29 @@ bool sclContainsAggFuncNode(SNode *pNode) {
|
||||||
return aggFunc;
|
return aggFunc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int8_t sclGetOpValueNodeTsPrecision(SNode *pLeft, SNode *pRight) {
|
||||||
|
int8_t lPrec = ((SExprNode *)pLeft)->resType.precision;
|
||||||
|
int8_t rPrec = ((SExprNode *)pRight)->resType.precision;
|
||||||
|
|
||||||
|
return TMAX(lPrec, rPrec);
|
||||||
|
}
|
||||||
|
|
||||||
int32_t sclConvertOpValueNodeTs(SOperatorNode *node, SScalarCtx *ctx) {
|
int32_t sclConvertOpValueNodeTs(SOperatorNode *node, SScalarCtx *ctx) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
|
||||||
if (node->pLeft && SCL_IS_VAR_VALUE_NODE(node->pLeft)) {
|
if (node->pLeft && SCL_IS_VAR_VALUE_NODE(node->pLeft)) {
|
||||||
if (node->pRight && (TSDB_DATA_TYPE_TIMESTAMP == ((SExprNode *)node->pRight)->resType.type)) {
|
if (node->pRight && (TSDB_DATA_TYPE_TIMESTAMP == ((SExprNode *)node->pRight)->resType.type)) {
|
||||||
SCL_ERR_JRET(sclConvertToTsValueNode(((SExprNode *)node->pRight)->resType.precision, (SValueNode*)node->pLeft));
|
SCL_ERR_JRET(sclConvertToTsValueNode(sclGetOpValueNodeTsPrecision(node->pLeft, node->pRight), (SValueNode*)node->pLeft));
|
||||||
}
|
}
|
||||||
} else if (node->pRight && SCL_IS_NOTNULL_CONST_NODE(node->pRight)) {
|
} else if (node->pRight && SCL_IS_NOTNULL_CONST_NODE(node->pRight)) {
|
||||||
if (node->pLeft && (TSDB_DATA_TYPE_TIMESTAMP == ((SExprNode *)node->pLeft)->resType.type)) {
|
if (node->pLeft && (TSDB_DATA_TYPE_TIMESTAMP == ((SExprNode *)node->pLeft)->resType.type)) {
|
||||||
if (SCL_IS_VAR_VALUE_NODE(node->pRight)) {
|
if (SCL_IS_VAR_VALUE_NODE(node->pRight)) {
|
||||||
SCL_ERR_JRET(sclConvertToTsValueNode(((SExprNode *)node->pLeft)->resType.precision, (SValueNode*)node->pRight));
|
SCL_ERR_JRET(sclConvertToTsValueNode(sclGetOpValueNodeTsPrecision(node->pLeft, node->pRight), (SValueNode*)node->pRight));
|
||||||
} else if (QUERY_NODE_NODE_LIST == node->pRight->type) {
|
} else if (QUERY_NODE_NODE_LIST == node->pRight->type) {
|
||||||
SNode* pNode;
|
SNode* pNode;
|
||||||
FOREACH(pNode, ((SNodeListNode*)node->pRight)->pNodeList) {
|
FOREACH(pNode, ((SNodeListNode*)node->pRight)->pNodeList) {
|
||||||
if (SCL_IS_VAR_VALUE_NODE(pNode)) {
|
if (SCL_IS_VAR_VALUE_NODE(pNode)) {
|
||||||
SCL_ERR_JRET(sclConvertToTsValueNode(((SExprNode *)node->pLeft)->resType.precision, (SValueNode*)pNode));
|
SCL_ERR_JRET(sclConvertToTsValueNode(sclGetOpValueNodeTsPrecision(node->pLeft, pNode), (SValueNode*)pNode));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue