未验证 提交 bb0207ef 编写于 作者: S shenglian-zhou 提交者: GitHub

Merge pull request #9830 from taosdata/fix/TD-12909

Fix/td 12909  for illegal SQL such as "select * from st where tag1 >sum(1)"
...@@ -5662,6 +5662,15 @@ static int32_t validateTagCondExpr(SSqlCmd* pCmd, tExprNode *p) { ...@@ -5662,6 +5662,15 @@ static int32_t validateTagCondExpr(SSqlCmd* pCmd, tExprNode *p) {
break; break;
} }
int32_t retVal = TSDB_CODE_SUCCESS;
if (p->_node.pLeft && (retVal = validateTagCondExpr(pCmd, p->_node.pLeft)) != TSDB_CODE_SUCCESS) {
return retVal;
}
if (p->_node.pRight && (retVal = validateTagCondExpr(pCmd, p->_node.pRight)) != TSDB_CODE_SUCCESS) {
return retVal;
}
if (IS_ARITHMETIC_OPTR(p->_node.optr)) { if (IS_ARITHMETIC_OPTR(p->_node.optr)) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg1); return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg1);
} }
...@@ -5697,8 +5706,6 @@ static int32_t validateTagCondExpr(SSqlCmd* pCmd, tExprNode *p) { ...@@ -5697,8 +5706,6 @@ static int32_t validateTagCondExpr(SSqlCmd* pCmd, tExprNode *p) {
schemaType = TSDB_DATA_TYPE_DOUBLE; schemaType = TSDB_DATA_TYPE_DOUBLE;
} }
int32_t retVal = TSDB_CODE_SUCCESS;
int32_t bufLen = 0; int32_t bufLen = 0;
if (IS_NUMERIC_TYPE(vVariant->nType)) { if (IS_NUMERIC_TYPE(vVariant->nType)) {
bufLen = 60; // The maximum length of string that a number is converted to. bufLen = 60; // The maximum length of string that a number is converted to.
......
...@@ -927,7 +927,9 @@ int32_t filterAddUnit(SFilterInfo *info, uint8_t optr, SFilterFieldId *left, SFi ...@@ -927,7 +927,9 @@ int32_t filterAddUnit(SFilterInfo *info, uint8_t optr, SFilterFieldId *left, SFi
SFilterField *val = FILTER_UNIT_RIGHT_FIELD(info, u); SFilterField *val = FILTER_UNIT_RIGHT_FIELD(info, u);
assert(FILTER_GET_FLAG(val->flag, FLD_TYPE_VALUE)); assert(FILTER_GET_FLAG(val->flag, FLD_TYPE_VALUE));
} else { } else {
assert(optr == TSDB_RELATION_ISNULL || optr == TSDB_RELATION_NOTNULL || optr == FILTER_DUMMY_EMPTY_OPTR); if(optr != TSDB_RELATION_ISNULL && optr != TSDB_RELATION_NOTNULL && optr != FILTER_DUMMY_EMPTY_OPTR){
return -1;
}
} }
SFilterField *col = FILTER_UNIT_LEFT_FIELD(info, u); SFilterField *col = FILTER_UNIT_LEFT_FIELD(info, u);
...@@ -1257,7 +1259,8 @@ int32_t filterAddGroupUnitFromNode(SFilterInfo *info, tExprNode* tree, SArray *g ...@@ -1257,7 +1259,8 @@ int32_t filterAddGroupUnitFromNode(SFilterInfo *info, tExprNode* tree, SArray *g
} else { } else {
filterAddFieldFromNode(info, tree->_node.pRight, &right); filterAddFieldFromNode(info, tree->_node.pRight, &right);
filterAddUnit(info, tree->_node.optr, &left, &right, &uidx); ret = filterAddUnit(info, tree->_node.optr, &left, &right, &uidx);
CHK_LRET(ret != TSDB_CODE_SUCCESS, TSDB_CODE_QRY_APP_ERROR, "invalid where condition");
SFilterGroup fgroup = {0}; SFilterGroup fgroup = {0};
filterAddUnitToGroup(&fgroup, uidx); filterAddUnitToGroup(&fgroup, uidx);
...@@ -1574,7 +1577,9 @@ void filterDumpInfoToString(SFilterInfo *info, const char *msg, int32_t options) ...@@ -1574,7 +1577,9 @@ void filterDumpInfoToString(SFilterInfo *info, const char *msg, int32_t options)
SFilterField *left = FILTER_UNIT_LEFT_FIELD(info, unit); SFilterField *left = FILTER_UNIT_LEFT_FIELD(info, unit);
SSchema *sch = left->desc; SSchema *sch = left->desc;
if (unit->compare.optr >= TSDB_RELATION_INVALID && unit->compare.optr <= TSDB_RELATION_CONTAINS){
len = sprintf(str, "UNIT[%d] => [%d][%s] %s [", i, sch->colId, sch->name, gOptrStr[unit->compare.optr].str); len = sprintf(str, "UNIT[%d] => [%d][%s] %s [", i, sch->colId, sch->name, gOptrStr[unit->compare.optr].str);
}
if (unit->right.type == FLD_TYPE_VALUE && FILTER_UNIT_OPTR(unit) != TSDB_RELATION_IN) { if (unit->right.type == FLD_TYPE_VALUE && FILTER_UNIT_OPTR(unit) != TSDB_RELATION_IN) {
SFilterField *right = FILTER_UNIT_RIGHT_FIELD(info, unit); SFilterField *right = FILTER_UNIT_RIGHT_FIELD(info, unit);
...@@ -1591,7 +1596,9 @@ void filterDumpInfoToString(SFilterInfo *info, const char *msg, int32_t options) ...@@ -1591,7 +1596,9 @@ void filterDumpInfoToString(SFilterInfo *info, const char *msg, int32_t options)
if (unit->compare.optr2) { if (unit->compare.optr2) {
strcat(str, " && "); strcat(str, " && ");
if (unit->compare.optr2 >= TSDB_RELATION_INVALID && unit->compare.optr2 <= TSDB_RELATION_CONTAINS){
sprintf(str + strlen(str), "[%d][%s] %s [", sch->colId, sch->name, gOptrStr[unit->compare.optr2].str); sprintf(str + strlen(str), "[%d][%s] %s [", sch->colId, sch->name, gOptrStr[unit->compare.optr2].str);
}
if (unit->right2.type == FLD_TYPE_VALUE && FILTER_UNIT_OPTR(unit) != TSDB_RELATION_IN) { if (unit->right2.type == FLD_TYPE_VALUE && FILTER_UNIT_OPTR(unit) != TSDB_RELATION_IN) {
SFilterField *right = FILTER_UNIT_RIGHT2_FIELD(info, unit); SFilterField *right = FILTER_UNIT_RIGHT2_FIELD(info, unit);
......
...@@ -86,17 +86,21 @@ class TDTestCase: ...@@ -86,17 +86,21 @@ class TDTestCase:
tdSql.query("select count(*) from st where hostname between 'abc' and 'def'") tdSql.query("select count(*) from st where hostname between 'abc' and 'def'")
tdSql.error("select count(*) from st where hostname between 1 and 2 or sum(1)") tdSql.error("select count(*) from st where hostname between 1 and 2 or sum(1)")
tdSql.execute("select count(*) from st where hostname < max(123)") tdSql.error("select count(*) from st where hostname < max(123)")
tdSql.execute("select count(*) from st where hostname < max('abc')") tdSql.error("select count(*) from st where hostname < max('abc')")
tdSql.execute("select count(*) from st where hostname < max(min(123))") tdSql.error("select count(*) from st where hostname < max(min(123))")
tdSql.execute("select count(*) from st where hostname < sum('abc')") tdSql.error("select count(*) from st where hostname < sum('abc')")
tdSql.execute("select count(*) from st where hostname < sum(min(123))") tdSql.error("select count(*) from st where hostname < sum(min(123))")
tdSql.execute("select count(*) from st where hostname < diff('abc')") tdSql.error("select count(*) from st where hostname < diff('abc')")
tdSql.execute("select count(*) from st where hostname < diff(min(123))") tdSql.error("select count(*) from st where hostname < diff(min(123))")
tdSql.error("select count(*) from st where hostname < tbname")
tdSql.error("select count(*) from st where ts > 0 and tbname in ('d1', 'd2') and tbname-2")
tdSql.query("select count(*) from st where id > 10000000000000")
def stop(self): def stop(self):
tdSql.close() tdSql.close()
......
...@@ -20,6 +20,7 @@ python3 ./test.py -f 2-query/TD-12344.py ...@@ -20,6 +20,7 @@ python3 ./test.py -f 2-query/TD-12344.py
#python3 ./test.py -f 2-query/TD-12594.py #python3 ./test.py -f 2-query/TD-12594.py
python3 ./test.py -f 2-query/TD-12614.py python3 ./test.py -f 2-query/TD-12614.py
python3 ./test.py -f 2-query/function_elapsed.py python3 ./test.py -f 2-query/function_elapsed.py
python3 ./test.py -f 2-query/TD-12909.py
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册