fix bug
This commit is contained in:
parent
3afb13a419
commit
d6c7c58be1
|
@ -4300,6 +4300,78 @@ static void doAddJoinTagsColumnsIntoTagList(SSqlCmd* pCmd, SQueryInfo* pQueryInf
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t validateTagCondExpr(SSqlCmd* pCmd, tExprNode *p) {
|
||||||
|
const char *msg1 = "tag type mismatch";
|
||||||
|
const char *msg2 = "invalid tag operator";
|
||||||
|
const char* msg3 = "not supported filter condition";
|
||||||
|
|
||||||
|
do {
|
||||||
|
if (p->nodeType != TSQL_NODE_EXPR) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!p->_node.pLeft || !p->_node.pRight) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IS_ARITHMETIC_OPTR(p->_node.optr)) {
|
||||||
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IS_RELATION_OPTR(p->_node.optr)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
tVariant * vVariant = NULL;
|
||||||
|
int32_t schemaType = -1;
|
||||||
|
|
||||||
|
if (p->_node.pLeft->nodeType == TSQL_NODE_VALUE && p->_node.pRight->nodeType == TSQL_NODE_COL) {
|
||||||
|
if (!p->_node.pRight->pSchema) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
vVariant = p->_node.pLeft->pVal->nType;
|
||||||
|
schemaType = p->_node.pRight->pSchema->type;
|
||||||
|
} else if (p->_node.pLeft->nodeType == TSQL_NODE_COL && p->_node.pRight->nodeType == TSQL_NODE_VALUE) {
|
||||||
|
if (!p->_node.pLeft->pSchema) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
vVariant = p->_node.pRight->pVal->nType;
|
||||||
|
schemaType = p->_node.pLeft->pSchema->type;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (schemaType >= TSDB_DATA_TYPE_TINYINT && schemaType <= TSDB_DATA_TYPE_BIGINT) {
|
||||||
|
schemaType = TSDB_DATA_TYPE_BIGINT;
|
||||||
|
} else if (schemaType == TSDB_DATA_TYPE_FLOAT || schemaType == TSDB_DATA_TYPE_DOUBLE) {
|
||||||
|
schemaType = TSDB_DATA_TYPE_DOUBLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t retVal = TSDB_CODE_SUCCESS;
|
||||||
|
if (schemaType == TSDB_DATA_TYPE_BINARY) {
|
||||||
|
char *tmp = (int64_t)calloc(1, (vVariant->nLen + 1) + TSDB_NCHAR_SIZE);
|
||||||
|
retVal = tVariantDump(vVariant, tmp, schemaType, false);
|
||||||
|
free(tmp);
|
||||||
|
} else if (schemaType == TSDB_DATA_TYPE_NCHAR) {
|
||||||
|
// pRight->val.nLen + 1 is larger than the actual nchar string length
|
||||||
|
char *tmp = (int64_t)calloc(1, (vVariant->nLen + 1) * TSDB_NCHAR_SIZE);
|
||||||
|
retVal = tVariantDump(vVariant, tmp, schemaType, false);
|
||||||
|
free(tmp);
|
||||||
|
} else {
|
||||||
|
double tmp;
|
||||||
|
retVal = tVariantDump(vVariant, (char*)&tmp, schemaType, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (retVal != TSDB_CODE_SUCCESS) {
|
||||||
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
|
||||||
|
}
|
||||||
|
}while (0);
|
||||||
|
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static int32_t getTagQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SCondExpr* pCondExpr, tSQLExpr** pExpr) {
|
static int32_t getTagQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SCondExpr* pCondExpr, tSQLExpr** pExpr) {
|
||||||
int32_t ret = TSDB_CODE_SUCCESS;
|
int32_t ret = TSDB_CODE_SUCCESS;
|
||||||
|
|
||||||
|
@ -4342,6 +4414,10 @@ static int32_t getTagQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SCondE
|
||||||
tsSetSTableQueryCond(&pQueryInfo->tagCond, uid, &bw);
|
tsSetSTableQueryCond(&pQueryInfo->tagCond, uid, &bw);
|
||||||
doCompactQueryExpr(pExpr);
|
doCompactQueryExpr(pExpr);
|
||||||
|
|
||||||
|
if (ret == TSDB_CODE_SUCCESS) {
|
||||||
|
ret = validateTagCondExpr(pCmd, p);
|
||||||
|
}
|
||||||
|
|
||||||
tSqlExprDestroy(p1);
|
tSqlExprDestroy(p1);
|
||||||
tExprTreeDestroy(p, NULL);
|
tExprTreeDestroy(p, NULL);
|
||||||
|
|
||||||
|
@ -4349,6 +4425,10 @@ static int32_t getTagQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SCondE
|
||||||
if (pQueryInfo->tagCond.pCond != NULL && taosArrayGetSize(pQueryInfo->tagCond.pCond) > 0 && !UTIL_TABLE_IS_SUPER_TABLE(pTableMetaInfo)) {
|
if (pQueryInfo->tagCond.pCond != NULL && taosArrayGetSize(pQueryInfo->tagCond.pCond) > 0 && !UTIL_TABLE_IS_SUPER_TABLE(pTableMetaInfo)) {
|
||||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), "filter on tag not supported for normal table");
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), "filter on tag not supported for normal table");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ret) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pCondExpr->pTagCond = NULL;
|
pCondExpr->pTagCond = NULL;
|
||||||
|
|
|
@ -430,7 +430,7 @@ static FORCE_INLINE int32_t convertToInteger(tVariant *pVariant, int64_t *result
|
||||||
}
|
}
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
if (IS_SIGNED_NUMERIC_TYPE(pVariant->nType)) {
|
if (IS_SIGNED_NUMERIC_TYPE(pVariant->nType) || (pVariant->nType == TSDB_DATA_TYPE_BOOL)) {
|
||||||
*result = pVariant->i64;
|
*result = pVariant->i64;
|
||||||
} else if (IS_UNSIGNED_NUMERIC_TYPE(pVariant->nType)) {
|
} else if (IS_UNSIGNED_NUMERIC_TYPE(pVariant->nType)) {
|
||||||
*result = pVariant->u64;
|
*result = pVariant->u64;
|
||||||
|
|
|
@ -163,6 +163,11 @@ do { \
|
||||||
#define TSDB_BINARY_OP_MULTIPLY 32
|
#define TSDB_BINARY_OP_MULTIPLY 32
|
||||||
#define TSDB_BINARY_OP_DIVIDE 33
|
#define TSDB_BINARY_OP_DIVIDE 33
|
||||||
#define TSDB_BINARY_OP_REMAINDER 34
|
#define TSDB_BINARY_OP_REMAINDER 34
|
||||||
|
|
||||||
|
|
||||||
|
#define IS_RELATION_OPTR(op) (((op) >= TSDB_RELATION_LESS) && ((op) <= TSDB_RELATION_IN))
|
||||||
|
#define IS_ARITHMETIC_OPTR(op) (((op) >= TSDB_BINARY_OP_ADD) && ((op) <= TSDB_BINARY_OP_REMAINDER))
|
||||||
|
|
||||||
#define TS_PATH_DELIMITER_LEN 1
|
#define TS_PATH_DELIMITER_LEN 1
|
||||||
|
|
||||||
#define TSDB_UNI_LEN 24
|
#define TSDB_UNI_LEN 24
|
||||||
|
|
Loading…
Reference in New Issue