fix:[TS-5761] error for in operator
This commit is contained in:
parent
1db40d873c
commit
58582d0910
|
@ -4848,6 +4848,7 @@ EDealRes fltReviseRewriter(SNode **pNode, void *pContext) {
|
||||||
}
|
}
|
||||||
|
|
||||||
SColumnNode *refNode = (SColumnNode *)node->pLeft;
|
SColumnNode *refNode = (SColumnNode *)node->pLeft;
|
||||||
|
int32_t type = refNode->node.resType.type;
|
||||||
SExprNode *exprNode = NULL;
|
SExprNode *exprNode = NULL;
|
||||||
if (OP_TYPE_IN != node->opType) {
|
if (OP_TYPE_IN != node->opType) {
|
||||||
SValueNode *valueNode = (SValueNode *)node->pRight;
|
SValueNode *valueNode = (SValueNode *)node->pRight;
|
||||||
|
@ -4856,6 +4857,7 @@ EDealRes fltReviseRewriter(SNode **pNode, void *pContext) {
|
||||||
valueNode->node.resType.type = TSDB_DATA_TYPE_BIGINT;
|
valueNode->node.resType.type = TSDB_DATA_TYPE_BIGINT;
|
||||||
}
|
}
|
||||||
exprNode = &valueNode->node;
|
exprNode = &valueNode->node;
|
||||||
|
type = vectorGetConvertType(refNode->node.resType.type, exprNode->resType.type);
|
||||||
} else {
|
} else {
|
||||||
SNodeListNode *listNode = (SNodeListNode *)node->pRight;
|
SNodeListNode *listNode = (SNodeListNode *)node->pRight;
|
||||||
if (LIST_LENGTH(listNode->pNodeList) > 10) {
|
if (LIST_LENGTH(listNode->pNodeList) > 10) {
|
||||||
|
@ -4863,8 +4865,19 @@ EDealRes fltReviseRewriter(SNode **pNode, void *pContext) {
|
||||||
return DEAL_RES_CONTINUE;
|
return DEAL_RES_CONTINUE;
|
||||||
}
|
}
|
||||||
exprNode = &listNode->node;
|
exprNode = &listNode->node;
|
||||||
|
SListCell *cell = listNode->pNodeList->pHead;
|
||||||
|
for (int32_t i = 0; i < listNode->pNodeList->length; ++i) {
|
||||||
|
SValueNode *valueNode = (SValueNode *)cell->pNode;
|
||||||
|
cell = cell->pNext;
|
||||||
|
if (IS_NUMERIC_TYPE(valueNode->node.resType.type) && IS_NUMERIC_TYPE(type)) {
|
||||||
|
int32_t tmp = vectorGetConvertType(type, valueNode->node.resType.type);
|
||||||
|
if (tmp != 0){
|
||||||
|
type = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exprNode->resType.type = type;
|
||||||
}
|
}
|
||||||
int32_t type = vectorGetConvertType(refNode->node.resType.type, exprNode->resType.type);
|
|
||||||
if (0 != type && type != refNode->node.resType.type) {
|
if (0 != type && type != refNode->node.resType.type) {
|
||||||
stat->scalarMode = true;
|
stat->scalarMode = true;
|
||||||
return DEAL_RES_CONTINUE;
|
return DEAL_RES_CONTINUE;
|
||||||
|
|
|
@ -1718,9 +1718,6 @@ static int32_t sclGetCompOperatorResType(SOperatorNode *pOp) {
|
||||||
return TSDB_CODE_TSC_INVALID_OPERATION;
|
return TSDB_CODE_TSC_INVALID_OPERATION;
|
||||||
}
|
}
|
||||||
((SExprNode *)(pOp->pRight))->resType = ldt;
|
((SExprNode *)(pOp->pRight))->resType = ldt;
|
||||||
if (IS_NUMERIC_TYPE(ldt.type)){
|
|
||||||
((SExprNode *)(pOp->pRight))->resType.type = TSDB_DATA_TYPE_DOUBLE;
|
|
||||||
}
|
|
||||||
} else if (nodesIsRegularOp(pOp)) {
|
} else if (nodesIsRegularOp(pOp)) {
|
||||||
if (pOp->pRight == NULL) {
|
if (pOp->pRight == NULL) {
|
||||||
return TSDB_CODE_TSC_INVALID_OPERATION;
|
return TSDB_CODE_TSC_INVALID_OPERATION;
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
import taos
|
import taos
|
||||||
|
|
||||||
from util.log import *
|
from util.log import *
|
||||||
|
@ -22,21 +21,26 @@ class TDTestCase:
|
||||||
tdSql.execute(f"use db")
|
tdSql.execute(f"use db")
|
||||||
|
|
||||||
# super tableUNSIGNED
|
# super tableUNSIGNED
|
||||||
tdSql.execute("CREATE TABLE t1( time TIMESTAMP, c1 BIGINT, c2 smallint, c3 double, c4 int UNSIGNED, c5 bool);")
|
tdSql.execute("CREATE TABLE t1( time TIMESTAMP, c1 BIGINT, c2 smallint, c3 double, c4 int UNSIGNED, c5 bool, c6 binary(32), c7 nchar(32));")
|
||||||
|
|
||||||
# create index for all tags
|
# create index for all tags
|
||||||
tdSql.execute("INSERT INTO t1 VALUES (1641024000000, 1, 1, 1, 1, 1)")
|
tdSql.execute("INSERT INTO t1 VALUES (1641024000000, 1, 1, 1, 1, 1, '1', '1')")
|
||||||
|
|
||||||
def check(self):
|
def check(self):
|
||||||
tdSql.query(f"SELECT * FROM t1 WHERE c1 in (1.7)")
|
tdSql.query(f"SELECT * FROM t1 WHERE c1 in (1.7, 2)")
|
||||||
tdSql.checkRows(0)
|
tdSql.checkRows(0)
|
||||||
tdSql.query(f"SELECT * FROM t1 WHERE c2 in (1.7)")
|
tdSql.query(f"SELECT * FROM t1 WHERE c2 in (1.7, 2)")
|
||||||
tdSql.checkRows(0)
|
tdSql.checkRows(0)
|
||||||
tdSql.query(f"SELECT * FROM t1 WHERE c3 in (1.7)")
|
tdSql.query(f"SELECT * FROM t1 WHERE c3 in (1.7, 2)")
|
||||||
tdSql.checkRows(0)
|
tdSql.checkRows(0)
|
||||||
tdSql.query(f"SELECT * FROM t1 WHERE c4 in (1.7)")
|
tdSql.query(f"SELECT * FROM t1 WHERE c4 in (1.7, 2)")
|
||||||
tdSql.checkRows(0)
|
tdSql.checkRows(0)
|
||||||
tdSql.query(f"SELECT * FROM t1 WHERE c5 in (1.7)")
|
tdSql.query(f"SELECT * FROM t1 WHERE c5 in (1.7, 2)")
|
||||||
|
tdSql.checkRows(1)
|
||||||
|
|
||||||
|
tdSql.query(f"SELECT * FROM t1 WHERE c6 in (1.7, 2)")
|
||||||
|
tdSql.checkRows(0)
|
||||||
|
tdSql.query(f"SELECT * FROM t1 WHERE c7 in (1, 2)")
|
||||||
tdSql.checkRows(1)
|
tdSql.checkRows(1)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
@ -50,4 +54,4 @@ class TDTestCase:
|
||||||
|
|
||||||
|
|
||||||
tdCases.addLinux(__file__, TDTestCase())
|
tdCases.addLinux(__file__, TDTestCase())
|
||||||
tdCases.addWindows(__file__, TDTestCase())
|
tdCases.addWindows(__file__, TDTestCase())
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
import taos
|
import taos
|
||||||
|
|
||||||
from util.log import *
|
from util.log import *
|
||||||
|
@ -21,21 +20,26 @@ class TDTestCase:
|
||||||
tdSql.execute(f"use db")
|
tdSql.execute(f"use db")
|
||||||
|
|
||||||
# super tableUNSIGNED
|
# super tableUNSIGNED
|
||||||
tdSql.execute("CREATE TABLE t1( time TIMESTAMP, c1 BIGINT, c2 smallint, c3 double, c4 int UNSIGNED, c5 bool);")
|
tdSql.execute("CREATE TABLE t1( time TIMESTAMP, c1 BIGINT, c2 smallint, c3 double, c4 int UNSIGNED, c5 bool, c6 binary(32), c7 nchar(32));")
|
||||||
|
|
||||||
# create index for all tags
|
# create index for all tags
|
||||||
tdSql.execute("INSERT INTO t1 VALUES (1641024000000, 1, 1, 1, 1, 1)")
|
tdSql.execute("INSERT INTO t1 VALUES (1641024000000, 1, 1, 1, 1, 1, '1', '1')")
|
||||||
|
|
||||||
def check(self):
|
def check(self):
|
||||||
tdSql.query(f"SELECT * FROM t1 WHERE c1 in (1.7)")
|
tdSql.query(f"SELECT * FROM t1 WHERE c1 in (1.7, 2)")
|
||||||
tdSql.checkRows(0)
|
tdSql.checkRows(0)
|
||||||
tdSql.query(f"SELECT * FROM t1 WHERE c2 in (1.7)")
|
tdSql.query(f"SELECT * FROM t1 WHERE c2 in (1.7, 2)")
|
||||||
tdSql.checkRows(0)
|
tdSql.checkRows(0)
|
||||||
tdSql.query(f"SELECT * FROM t1 WHERE c3 in (1.7)")
|
tdSql.query(f"SELECT * FROM t1 WHERE c3 in (1.7, 2)")
|
||||||
tdSql.checkRows(0)
|
tdSql.checkRows(0)
|
||||||
tdSql.query(f"SELECT * FROM t1 WHERE c4 in (1.7)")
|
tdSql.query(f"SELECT * FROM t1 WHERE c4 in (1.7, 2)")
|
||||||
tdSql.checkRows(0)
|
tdSql.checkRows(0)
|
||||||
tdSql.query(f"SELECT * FROM t1 WHERE c5 in (1.7)")
|
tdSql.query(f"SELECT * FROM t1 WHERE c5 in (1.7, 2)")
|
||||||
|
tdSql.checkRows(1)
|
||||||
|
|
||||||
|
tdSql.query(f"SELECT * FROM t1 WHERE c6 in (1.7, 2)")
|
||||||
|
tdSql.checkRows(0)
|
||||||
|
tdSql.query(f"SELECT * FROM t1 WHERE c7 in (1, 2)")
|
||||||
tdSql.checkRows(1)
|
tdSql.checkRows(1)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
@ -49,4 +53,4 @@ class TDTestCase:
|
||||||
|
|
||||||
|
|
||||||
tdCases.addLinux(__file__, TDTestCase())
|
tdCases.addLinux(__file__, TDTestCase())
|
||||||
tdCases.addWindows(__file__, TDTestCase())
|
tdCases.addWindows(__file__, TDTestCase())
|
Loading…
Reference in New Issue