Merge pull request #29114 from taosdata/fix/TS-5761-main
fix:[TS-5761] error for in operator
This commit is contained in:
commit
3462292780
|
@ -288,6 +288,7 @@ struct SScalarParam {
|
|||
bool colAlloced;
|
||||
SColumnInfoData *columnData;
|
||||
SHashObj *pHashFilter;
|
||||
SHashObj *pHashFilterOthers;
|
||||
int32_t hashValueType;
|
||||
void *param; // other parameter, such as meta handle from vnode, to extract table name/tag value
|
||||
int32_t numOfRows;
|
||||
|
|
|
@ -40,7 +40,7 @@ pDst need to freed in caller
|
|||
int32_t scalarCalculate(SNode *pNode, SArray *pBlockList, SScalarParam *pDst);
|
||||
|
||||
int32_t scalarGetOperatorParamNum(EOperatorType type);
|
||||
int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type);
|
||||
int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type, int8_t processType);
|
||||
|
||||
int32_t vectorGetConvertType(int32_t type1, int32_t type2);
|
||||
int32_t vectorConvertSingleColImpl(const SScalarParam *pIn, SScalarParam *pOut, int32_t *overflow, int32_t startIndex, int32_t numOfRows);
|
||||
|
|
|
@ -326,7 +326,7 @@ static int32_t sifInitParam(SNode *node, SIFParam *param, SIFCtx *ctx) {
|
|||
indexError("invalid length for node:%p, length: %d", node, LIST_LENGTH(nl->pNodeList));
|
||||
SIF_ERR_RET(TSDB_CODE_QRY_INVALID_INPUT);
|
||||
}
|
||||
SIF_ERR_RET(scalarGenerateSetFromList((void **)¶m->pFilter, node, nl->node.resType.type));
|
||||
SIF_ERR_RET(scalarGenerateSetFromList((void **)¶m->pFilter, node, nl->node.resType.type, 0));
|
||||
if (taosHashPut(ctx->pRes, &node, POINTER_BYTES, param, sizeof(*param))) {
|
||||
taosHashCleanup(param->pFilter);
|
||||
param->pFilter = NULL;
|
||||
|
|
|
@ -143,7 +143,7 @@ int32_t sclConvertToTsValueNode(int8_t precision, SValueNode* valueNode);
|
|||
#define GET_PARAM_PRECISON(_c) ((_c)->columnData->info.precision)
|
||||
|
||||
void sclFreeParam(SScalarParam* param);
|
||||
int32_t doVectorCompare(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pOut, int32_t startIndex, int32_t numOfRows,
|
||||
int32_t doVectorCompare(SScalarParam* pLeft, SScalarParam *pLeftVar, SScalarParam* pRight, SScalarParam *pOut, int32_t startIndex, int32_t numOfRows,
|
||||
int32_t _ord, int32_t optr);
|
||||
int32_t vectorCompareImpl(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pOut, int32_t startIndex, int32_t numOfRows,
|
||||
int32_t _ord, int32_t optr);
|
||||
|
|
|
@ -1298,7 +1298,6 @@ int32_t fltAddGroupUnitFromNode(void *pContext, SFilterInfo *info, SNode *tree,
|
|||
|
||||
if (node->opType == OP_TYPE_IN && (!IS_VAR_DATA_TYPE(type))) {
|
||||
SNodeListNode *listNode = (SNodeListNode *)node->pRight;
|
||||
SListCell *cell = listNode->pNodeList->pHead;
|
||||
|
||||
SScalarParam out = {.columnData = taosMemoryCalloc(1, sizeof(SColumnInfoData))};
|
||||
if (out.columnData == NULL) {
|
||||
|
@ -1308,8 +1307,9 @@ int32_t fltAddGroupUnitFromNode(void *pContext, SFilterInfo *info, SNode *tree,
|
|||
out.columnData->info.bytes = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes; // reserved space for simple_copy
|
||||
|
||||
int32_t overflowCount = 0;
|
||||
for (int32_t i = 0; i < listNode->pNodeList->length; ++i) {
|
||||
SValueNode *valueNode = (SValueNode *)cell->pNode;
|
||||
SNode* nodeItem = NULL;
|
||||
FOREACH(nodeItem, listNode->pNodeList) {
|
||||
SValueNode *valueNode = (SValueNode *)nodeItem;
|
||||
if (valueNode->node.resType.type != type) {
|
||||
int32_t overflow = 0;
|
||||
code = sclConvertValueToSclParam(valueNode, &out, &overflow);
|
||||
|
@ -1319,7 +1319,6 @@ int32_t fltAddGroupUnitFromNode(void *pContext, SFilterInfo *info, SNode *tree,
|
|||
}
|
||||
|
||||
if (overflow) {
|
||||
cell = cell->pNext;
|
||||
++overflowCount;
|
||||
continue;
|
||||
}
|
||||
|
@ -1358,8 +1357,6 @@ int32_t fltAddGroupUnitFromNode(void *pContext, SFilterInfo *info, SNode *tree,
|
|||
code = terrno;
|
||||
break;
|
||||
}
|
||||
|
||||
cell = cell->pNext;
|
||||
}
|
||||
if(overflowCount == listNode->pNodeList->length) {
|
||||
ctx->ignore = true;
|
||||
|
@ -2228,7 +2225,7 @@ int32_t fltInitValFieldData(SFilterInfo *info) {
|
|||
}
|
||||
|
||||
if (unit->compare.optr == OP_TYPE_IN) {
|
||||
FLT_ERR_RET(scalarGenerateSetFromList((void **)&fi->data, fi->desc, type));
|
||||
FLT_ERR_RET(scalarGenerateSetFromList((void **)&fi->data, fi->desc, type, 0));
|
||||
if (fi->data == NULL) {
|
||||
fltError("failed to convert in param");
|
||||
FLT_ERR_RET(TSDB_CODE_APP_ERROR);
|
||||
|
@ -4765,7 +4762,7 @@ EDealRes fltReviseRewriter(SNode **pNode, void *pContext) {
|
|||
return DEAL_RES_CONTINUE;
|
||||
}
|
||||
|
||||
if (node->opType == OP_TYPE_NOT_IN || node->opType == OP_TYPE_NOT_LIKE || node->opType > OP_TYPE_IS_NOT_NULL ||
|
||||
if (node->opType == OP_TYPE_NOT_LIKE || node->opType > OP_TYPE_IS_NOT_NULL ||
|
||||
node->opType == OP_TYPE_NOT_EQUAL) {
|
||||
stat->scalarMode = true;
|
||||
return DEAL_RES_CONTINUE;
|
||||
|
@ -4839,7 +4836,7 @@ EDealRes fltReviseRewriter(SNode **pNode, void *pContext) {
|
|||
}
|
||||
}
|
||||
|
||||
if (OP_TYPE_IN == node->opType && QUERY_NODE_NODE_LIST != nodeType(node->pRight)) {
|
||||
if ((OP_TYPE_IN == node->opType || OP_TYPE_NOT_IN == node->opType) && QUERY_NODE_NODE_LIST != nodeType(node->pRight)) {
|
||||
fltError("invalid IN operator node, rightType:%d", nodeType(node->pRight));
|
||||
stat->code = TSDB_CODE_APP_ERROR;
|
||||
return DEAL_RES_ERROR;
|
||||
|
@ -4847,25 +4844,37 @@ EDealRes fltReviseRewriter(SNode **pNode, void *pContext) {
|
|||
|
||||
SColumnNode *refNode = (SColumnNode *)node->pLeft;
|
||||
SExprNode *exprNode = NULL;
|
||||
if (OP_TYPE_IN != node->opType) {
|
||||
if (OP_TYPE_IN != node->opType && OP_TYPE_NOT_IN != node->opType) {
|
||||
SValueNode *valueNode = (SValueNode *)node->pRight;
|
||||
if (FILTER_GET_FLAG(stat->info->options, FLT_OPTION_TIMESTAMP) &&
|
||||
TSDB_DATA_TYPE_UBIGINT == valueNode->node.resType.type && valueNode->datum.u <= INT64_MAX) {
|
||||
valueNode->node.resType.type = TSDB_DATA_TYPE_BIGINT;
|
||||
}
|
||||
exprNode = &valueNode->node;
|
||||
int32_t type = vectorGetConvertType(refNode->node.resType.type, exprNode->resType.type);
|
||||
if (0 != type && type != refNode->node.resType.type) {
|
||||
stat->scalarMode = true;
|
||||
}
|
||||
} else {
|
||||
SNodeListNode *listNode = (SNodeListNode *)node->pRight;
|
||||
if (LIST_LENGTH(listNode->pNodeList) > 10) {
|
||||
if (LIST_LENGTH(listNode->pNodeList) > 10 || OP_TYPE_NOT_IN == node->opType) {
|
||||
stat->scalarMode = true;
|
||||
return DEAL_RES_CONTINUE;
|
||||
}
|
||||
int32_t type = refNode->node.resType.type;
|
||||
exprNode = &listNode->node;
|
||||
}
|
||||
int32_t type = vectorGetConvertType(refNode->node.resType.type, exprNode->resType.type);
|
||||
if (0 != type && type != refNode->node.resType.type) {
|
||||
stat->scalarMode = true;
|
||||
return DEAL_RES_CONTINUE;
|
||||
SNode* nodeItem = NULL;
|
||||
FOREACH(nodeItem, listNode->pNodeList) {
|
||||
SValueNode *valueNode = (SValueNode *)nodeItem;
|
||||
int32_t tmp = vectorGetConvertType(type, valueNode->node.resType.type);
|
||||
if (tmp != 0){
|
||||
stat->scalarMode = true;
|
||||
type = tmp;
|
||||
}
|
||||
|
||||
}
|
||||
if (IS_NUMERIC_TYPE(type)){
|
||||
exprNode->resType.type = type;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5016,11 +5025,11 @@ int32_t fltSclBuildRangePoints(SFltSclOperator *oper, SArray *points) {
|
|||
}
|
||||
case OP_TYPE_IN: {
|
||||
SNodeListNode *listNode = (SNodeListNode *)oper->valNode;
|
||||
SListCell *cell = listNode->pNodeList->pHead;
|
||||
SFltSclDatum minDatum = {.kind = FLT_SCL_DATUM_KIND_INT64, .i = INT64_MAX, .type = oper->colNode->node.resType};
|
||||
SFltSclDatum maxDatum = {.kind = FLT_SCL_DATUM_KIND_INT64, .i = INT64_MIN, .type = oper->colNode->node.resType};
|
||||
for (int32_t i = 0; i < listNode->pNodeList->length; ++i) {
|
||||
SValueNode *valueNode = (SValueNode *)cell->pNode;
|
||||
SNode* nodeItem = NULL;
|
||||
FOREACH(nodeItem, listNode->pNodeList) {
|
||||
SValueNode *valueNode = (SValueNode *)nodeItem;
|
||||
SFltSclDatum valDatum;
|
||||
FLT_ERR_RET(fltSclBuildDatumFromValueNode(&valDatum, valueNode));
|
||||
if(valueNode->node.resType.type == TSDB_DATA_TYPE_FLOAT || valueNode->node.resType.type == TSDB_DATA_TYPE_DOUBLE) {
|
||||
|
@ -5030,7 +5039,6 @@ int32_t fltSclBuildRangePoints(SFltSclOperator *oper, SArray *points) {
|
|||
minDatum.i = TMIN(minDatum.i, valDatum.i);
|
||||
maxDatum.i = TMAX(maxDatum.i, valDatum.i);
|
||||
}
|
||||
cell = cell->pNext;
|
||||
}
|
||||
SFltSclPoint startPt = {.start = true, .excl = false, .val = minDatum};
|
||||
SFltSclPoint endPt = {.start = false, .excl = false, .val = maxDatum};
|
||||
|
|
|
@ -116,7 +116,8 @@ _return:
|
|||
SCL_RET(code);
|
||||
}
|
||||
|
||||
int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) {
|
||||
// processType = 0 means all type. 1 means number, 2 means var, 3 means float, 4 means var&integer
|
||||
int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type, int8_t processType) {
|
||||
SHashObj *pObj = taosHashInit(256, taosGetDefaultHashFunction(type), true, false);
|
||||
if (NULL == pObj) {
|
||||
sclError("taosHashInit failed, size:%d", 256);
|
||||
|
@ -127,7 +128,6 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) {
|
|||
|
||||
int32_t code = 0;
|
||||
SNodeListNode *nodeList = (SNodeListNode *)pNode;
|
||||
SListCell *cell = nodeList->pNodeList->pHead;
|
||||
SScalarParam out = {.columnData = taosMemoryCalloc(1, sizeof(SColumnInfoData))};
|
||||
if (out.columnData == NULL) {
|
||||
SCL_ERR_JRET(terrno);
|
||||
|
@ -135,8 +135,14 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) {
|
|||
int32_t len = 0;
|
||||
void *buf = NULL;
|
||||
|
||||
for (int32_t i = 0; i < nodeList->pNodeList->length; ++i) {
|
||||
SValueNode *valueNode = (SValueNode *)cell->pNode;
|
||||
SNode* nodeItem = NULL;
|
||||
FOREACH(nodeItem, nodeList->pNodeList) {
|
||||
SValueNode *valueNode = (SValueNode *)nodeItem;
|
||||
if ((IS_VAR_DATA_TYPE(valueNode->node.resType.type) && (processType == 1 || processType == 3)) ||
|
||||
(IS_INTEGER_TYPE(valueNode->node.resType.type) && (processType == 2 || processType == 3)) ||
|
||||
(IS_FLOAT_TYPE(valueNode->node.resType.type) && (processType == 2 || processType == 4))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (valueNode->node.resType.type != type) {
|
||||
out.columnData->info.type = type;
|
||||
|
@ -158,7 +164,6 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) {
|
|||
}
|
||||
|
||||
if (overflow) {
|
||||
cell = cell->pNext;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -184,7 +189,6 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) {
|
|||
}
|
||||
|
||||
colInfoDataCleanup(out.columnData, out.numOfRows);
|
||||
cell = cell->pNext;
|
||||
}
|
||||
|
||||
*data = pObj;
|
||||
|
@ -230,6 +234,11 @@ void sclFreeParam(SScalarParam *param) {
|
|||
taosHashCleanup(param->pHashFilter);
|
||||
param->pHashFilter = NULL;
|
||||
}
|
||||
|
||||
if (param->pHashFilterOthers != NULL) {
|
||||
taosHashCleanup(param->pHashFilterOthers);
|
||||
param->pHashFilterOthers = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t sclCopyValueNodeValue(SValueNode *pNode, void **res) {
|
||||
|
@ -369,17 +378,37 @@ int32_t sclInitParam(SNode *node, SScalarParam *param, SScalarCtx *ctx, int32_t
|
|||
SCL_RET(TSDB_CODE_QRY_INVALID_INPUT);
|
||||
}
|
||||
|
||||
int32_t type = vectorGetConvertType(ctx->type.selfType, ctx->type.peerType);
|
||||
if (type == 0) {
|
||||
type = nodeList->node.resType.type;
|
||||
int32_t type = ctx->type.selfType;
|
||||
SNode* nodeItem = NULL;
|
||||
FOREACH(nodeItem, nodeList->pNodeList) {
|
||||
SValueNode *valueNode = (SValueNode *)nodeItem;
|
||||
int32_t tmp = vectorGetConvertType(type, valueNode->node.resType.type);
|
||||
if (tmp != 0){
|
||||
type = tmp;
|
||||
}
|
||||
|
||||
}
|
||||
if (IS_NUMERIC_TYPE(type)){
|
||||
ctx->type.peerType = type;
|
||||
}
|
||||
type = ctx->type.peerType;
|
||||
if (IS_VAR_DATA_TYPE(ctx->type.selfType) && IS_NUMERIC_TYPE(type)){
|
||||
SCL_ERR_RET(scalarGenerateSetFromList((void **)¶m->pHashFilter, node, type, 1));
|
||||
SCL_ERR_RET(scalarGenerateSetFromList((void **)¶m->pHashFilterOthers, node, ctx->type.selfType, 2));
|
||||
} else if (IS_INTEGER_TYPE(ctx->type.selfType) && IS_FLOAT_TYPE(type)){
|
||||
SCL_ERR_RET(scalarGenerateSetFromList((void **)¶m->pHashFilter, node, type, 3));
|
||||
SCL_ERR_RET(scalarGenerateSetFromList((void **)¶m->pHashFilterOthers, node, ctx->type.selfType, 4));
|
||||
} else {
|
||||
SCL_ERR_RET(scalarGenerateSetFromList((void **)¶m->pHashFilter, node, type, 0));
|
||||
}
|
||||
|
||||
SCL_ERR_RET(scalarGenerateSetFromList((void **)¶m->pHashFilter, node, type));
|
||||
param->hashValueType = type;
|
||||
param->colAlloced = true;
|
||||
if (taosHashPut(ctx->pRes, &node, POINTER_BYTES, param, sizeof(*param))) {
|
||||
taosHashCleanup(param->pHashFilter);
|
||||
param->pHashFilter = NULL;
|
||||
taosHashCleanup(param->pHashFilterOthers);
|
||||
param->pHashFilterOthers = NULL;
|
||||
sclError("taosHashPut nodeList failed, size:%d", (int32_t)sizeof(*param));
|
||||
return terrno;
|
||||
}
|
||||
|
@ -512,14 +541,15 @@ int32_t sclInitParamList(SScalarParam **pParams, SNodeList *pParamList, SScalarC
|
|||
}
|
||||
|
||||
if (0 == *rowNum) {
|
||||
taosMemoryFreeClear(paramList);
|
||||
sclFreeParamList(paramList, *paramNum);
|
||||
paramList = NULL;
|
||||
}
|
||||
|
||||
*pParams = paramList;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
|
||||
_return:
|
||||
taosMemoryFreeClear(paramList);
|
||||
sclFreeParamList(paramList, *paramNum);
|
||||
SCL_RET(code);
|
||||
}
|
||||
|
||||
|
@ -588,7 +618,6 @@ int32_t sclInitOperatorParams(SScalarParam **pParams, SOperatorNode *node, SScal
|
|||
SCL_ERR_JRET(sclInitParam(node->pLeft, ¶mList[0], ctx, rowNum));
|
||||
setTzCharset(¶mList[0], node->tz, node->charsetCxt);
|
||||
if (paramNum > 1) {
|
||||
TSWAP(ctx->type.selfType, ctx->type.peerType);
|
||||
SCL_ERR_JRET(sclInitParam(node->pRight, ¶mList[1], ctx, rowNum));
|
||||
setTzCharset(¶mList[1], node->tz, node->charsetCxt);
|
||||
}
|
||||
|
|
|
@ -1009,28 +1009,29 @@ int32_t vectorConvertSingleColImpl(const SScalarParam *pIn, SScalarParam *pOut,
|
|||
}
|
||||
|
||||
int8_t gConvertTypes[TSDB_DATA_TYPE_MAX][TSDB_DATA_TYPE_MAX] = {
|
||||
/* NULL BOOL TINY SMAL INT BIG FLOA DOUB VARC TIME NCHA UTIN USMA UINT UBIG JSON VARB DECI BLOB MEDB GEOM*/
|
||||
/*NULL*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/*BOOL*/ 0, 0, 2, 3, 4, 5, 6, 7, 5, 9, 7, 11, 12, 13, 14, 0, -1, 0, 0, 0, -1,
|
||||
/*TINY*/ 0, 0, 0, 3, 4, 5, 6, 7, 5, 9, 7, 3, 4, 5, 7, 0, -1, 0, 0, 0, -1,
|
||||
/*SMAL*/ 0, 0, 0, 0, 4, 5, 6, 7, 5, 9, 7, 3, 4, 5, 7, 0, -1, 0, 0, 0, -1,
|
||||
/*INT */ 0, 0, 0, 0, 0, 5, 6, 7, 5, 9, 7, 4, 4, 5, 7, 0, -1, 0, 0, 0, -1,
|
||||
/*BIGI*/ 0, 0, 0, 0, 0, 0, 6, 7, 5, 9, 7, 5, 5, 5, 7, 0, -1, 0, 0, 0, -1,
|
||||
/*FLOA*/ 0, 0, 0, 0, 0, 0, 0, 7, 7, 6, 7, 6, 6, 6, 6, 0, -1, 0, 0, 0, -1,
|
||||
/*DOUB*/ 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, -1, 0, 0, 0, -1,
|
||||
/*VARC*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 8, 7, 7, 7, 7, 0, 16, 0, 0, 0, 20,
|
||||
/*TIME*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 7, 0, -1, 0, 0, 0, -1,
|
||||
/*NCHA*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 16, 0, 0, 0, -1,
|
||||
/*UTIN*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 14, 0, -1, 0, 0, 0, -1,
|
||||
/*USMA*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 0, -1, 0, 0, 0, -1,
|
||||
/*UINT*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, -1, 0, 0, 0, -1,
|
||||
/*UBIG*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1,
|
||||
/*JSON*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1,
|
||||
/*VARB*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1,-1, -1,
|
||||
/*DECI*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1,
|
||||
/*BLOB*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1,
|
||||
/*MEDB*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1,
|
||||
/*GEOM*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0};
|
||||
/*NULL BOOL TINY SMAL INT BIG FLOA DOUB VARC TIME NCHA UTIN USMA UINT UBIG JSON VARB DECI BLOB MEDB GEOM*/
|
||||
/*NULL*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/*BOOL*/ 0, 0, 2, 3, 4, 5, 6, 7, 5, 9, 5, 11, 12, 13, 14, 0, -1, 0, 0, 0, -1,
|
||||
/*TINY*/ 0, 0, 0, 3, 4, 5, 6, 7, 5, 9, 5, 3, 4, 5, 7, 0, -1, 0, 0, 0, -1,
|
||||
/*SMAL*/ 0, 0, 0, 0, 4, 5, 6, 7, 5, 9, 5, 3, 4, 5, 7, 0, -1, 0, 0, 0, -1,
|
||||
/*INT */ 0, 0, 0, 0, 0, 5, 6, 7, 5, 9, 5, 4, 4, 5, 7, 0, -1, 0, 0, 0, -1,
|
||||
/*BIGI*/ 0, 0, 0, 0, 0, 0, 6, 7, 5, 9, 5, 5, 5, 5, 7, 0, -1, 0, 0, 0, -1,
|
||||
/*FLOA*/ 0, 0, 0, 0, 0, 0, 0, 7, 6, 6, 6, 6, 6, 6, 6, 0, -1, 0, 0, 0, -1,
|
||||
/*DOUB*/ 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, -1, 0, 0, 0, -1,
|
||||
/*VARC*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 8, 7, 7, 7, 7, 0, 16, 0, 0, 0, 20,
|
||||
/*TIME*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 7, 0, -1, 0, 0, 0, -1,
|
||||
/*NCHA*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 16, 0, 0, 0, -1,
|
||||
/*UTIN*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 14, 0, -1, 0, 0, 0, -1,
|
||||
/*USMA*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 0, -1, 0, 0, 0, -1,
|
||||
/*UINT*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, -1, 0, 0, 0, -1,
|
||||
/*UBIG*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1,
|
||||
/*JSON*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1,
|
||||
/*VARB*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1,
|
||||
/*DECI*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1,
|
||||
/*BLOB*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1,
|
||||
/*MEDB*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1,
|
||||
/*GEOM*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
int8_t gDisplyTypes[TSDB_DATA_TYPE_MAX][TSDB_DATA_TYPE_MAX] = {
|
||||
/*NULL BOOL TINY SMAL INT BIGI FLOA DOUB VARC TIM NCHA UTIN USMA UINT UBIG JSON VARB DECI BLOB MEDB GEOM*/
|
||||
|
@ -1071,6 +1072,9 @@ int32_t vectorGetConvertType(int32_t type1, int32_t type2) {
|
|||
|
||||
int32_t vectorConvertSingleCol(SScalarParam *input, SScalarParam *output, int32_t type, int32_t startIndex,
|
||||
int32_t numOfRows) {
|
||||
if (input->columnData == NULL && (input->pHashFilter != NULL || input->pHashFilterOthers != NULL)){
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
output->numOfRows = input->numOfRows;
|
||||
|
||||
SDataType t = {.type = type};
|
||||
|
@ -1101,36 +1105,18 @@ int32_t vectorConvertCols(SScalarParam *pLeft, SScalarParam *pRight, SScalarPara
|
|||
int8_t type = 0;
|
||||
int32_t code = 0;
|
||||
|
||||
SScalarParam *param1 = NULL, *paramOut1 = NULL;
|
||||
SScalarParam *param2 = NULL, *paramOut2 = NULL;
|
||||
SScalarParam *param1 = pLeft, *paramOut1 = pLeftOut;
|
||||
SScalarParam *param2 = pRight, *paramOut2 = pRightOut;
|
||||
|
||||
// always convert least data
|
||||
if (IS_VAR_DATA_TYPE(leftType) && IS_VAR_DATA_TYPE(rightType) && (pLeft->numOfRows != pRight->numOfRows) &&
|
||||
leftType != TSDB_DATA_TYPE_JSON && rightType != TSDB_DATA_TYPE_JSON) {
|
||||
param1 = pLeft;
|
||||
param2 = pRight;
|
||||
paramOut1 = pLeftOut;
|
||||
paramOut2 = pRightOut;
|
||||
|
||||
if (pLeft->numOfRows > pRight->numOfRows) {
|
||||
type = leftType;
|
||||
} else {
|
||||
type = rightType;
|
||||
}
|
||||
} else {
|
||||
// we only define half value in the convert-matrix, so make sure param1 always less equal than param2
|
||||
if (leftType < rightType) {
|
||||
param1 = pLeft;
|
||||
param2 = pRight;
|
||||
paramOut1 = pLeftOut;
|
||||
paramOut2 = pRightOut;
|
||||
} else {
|
||||
param1 = pRight;
|
||||
param2 = pLeft;
|
||||
paramOut1 = pRightOut;
|
||||
paramOut2 = pLeftOut;
|
||||
}
|
||||
|
||||
type = vectorGetConvertType(GET_PARAM_TYPE(param1), GET_PARAM_TYPE(param2));
|
||||
if (0 == type) {
|
||||
return TSDB_CODE_SUCCESS;
|
||||
|
@ -1986,13 +1972,14 @@ int32_t doVectorCompareImpl(SScalarParam *pLeft, SScalarParam *pRight, SScalarPa
|
|||
return code;
|
||||
}
|
||||
|
||||
int32_t doVectorCompare(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *pOut, int32_t startIndex,
|
||||
int32_t doVectorCompare(SScalarParam *pLeft, SScalarParam *pLeftVar, SScalarParam *pRight, SScalarParam *pOut, int32_t startIndex,
|
||||
int32_t numOfRows, int32_t _ord, int32_t optr) {
|
||||
int32_t i = 0;
|
||||
int32_t step = ((_ord) == TSDB_ORDER_ASC) ? 1 : -1;
|
||||
int32_t lType = GET_PARAM_TYPE(pLeft);
|
||||
int32_t rType = GET_PARAM_TYPE(pRight);
|
||||
__compar_fn_t fp = NULL;
|
||||
__compar_fn_t fpVar = NULL;
|
||||
int32_t compRows = 0;
|
||||
if (lType == rType) {
|
||||
SCL_ERR_RET(filterGetCompFunc(&fp, lType, optr));
|
||||
|
@ -2000,6 +1987,9 @@ int32_t doVectorCompare(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam
|
|||
fp = filterGetCompFuncEx(lType, rType, optr);
|
||||
}
|
||||
|
||||
if (pLeftVar != NULL) {
|
||||
SCL_ERR_RET(filterGetCompFunc(&fpVar, GET_PARAM_TYPE(pLeftVar), optr));
|
||||
}
|
||||
if (startIndex < 0) {
|
||||
i = ((_ord) == TSDB_ORDER_ASC) ? 0 : TMAX(pLeft->numOfRows, pRight->numOfRows) - 1;
|
||||
pOut->numOfRows = TMAX(pLeft->numOfRows, pRight->numOfRows);
|
||||
|
@ -2019,6 +2009,18 @@ int32_t doVectorCompare(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam
|
|||
|
||||
char *pLeftData = colDataGetData(pLeft->columnData, i);
|
||||
bool res = filterDoCompare(fp, optr, pLeftData, pRight->pHashFilter);
|
||||
if (pLeftVar != NULL && taosHashGetSize(pRight->pHashFilterOthers) > 0){
|
||||
do{
|
||||
if (optr == OP_TYPE_IN && res){
|
||||
break;
|
||||
}
|
||||
if (optr == OP_TYPE_NOT_IN && !res){
|
||||
break;
|
||||
}
|
||||
pLeftData = colDataGetData(pLeftVar->columnData, i);
|
||||
res = filterDoCompare(fpVar, optr, pLeftData, pRight->pHashFilterOthers);
|
||||
}while(0);
|
||||
}
|
||||
colDataSetInt8(pOut->columnData, i, (int8_t *)&res);
|
||||
if (res) {
|
||||
pOut->numOfQualified++;
|
||||
|
@ -2036,6 +2038,7 @@ int32_t vectorCompareImpl(SScalarParam *pLeft, SScalarParam *pRight, SScalarPara
|
|||
SScalarParam pRightOut = {0};
|
||||
SScalarParam *param1 = NULL;
|
||||
SScalarParam *param2 = NULL;
|
||||
SScalarParam *param3 = NULL;
|
||||
int32_t code = TSDB_CODE_SUCCESS;
|
||||
setTzCharset(&pLeftOut, pLeft->tz, pLeft->charsetCxt);
|
||||
setTzCharset(&pRightOut, pLeft->tz, pLeft->charsetCxt);
|
||||
|
@ -2046,9 +2049,12 @@ int32_t vectorCompareImpl(SScalarParam *pLeft, SScalarParam *pRight, SScalarPara
|
|||
SCL_ERR_JRET(vectorConvertCols(pLeft, pRight, &pLeftOut, &pRightOut, startIndex, numOfRows));
|
||||
param1 = (pLeftOut.columnData != NULL) ? &pLeftOut : pLeft;
|
||||
param2 = (pRightOut.columnData != NULL) ? &pRightOut : pRight;
|
||||
if (pRight->pHashFilterOthers != NULL){
|
||||
param3 = pLeft;
|
||||
}
|
||||
}
|
||||
|
||||
SCL_ERR_JRET(doVectorCompare(param1, param2, pOut, startIndex, numOfRows, _ord, optr));
|
||||
SCL_ERR_JRET(doVectorCompare(param1, param3, param2, pOut, startIndex, numOfRows, _ord, optr));
|
||||
|
||||
_return:
|
||||
sclFreeParam(&pLeftOut);
|
||||
|
|
|
@ -2106,7 +2106,7 @@ TEST(columnTest, int_column_in_double_list) {
|
|||
SNode *pLeft = NULL, *pRight = NULL, *listNode = NULL, *opNode = NULL;
|
||||
int32_t leftv[5] = {1, 2, 3, 4, 5};
|
||||
double rightv1 = 1.1, rightv2 = 2.2, rightv3 = 3.3;
|
||||
bool eRes[5] = {true, true, true, false, false};
|
||||
bool eRes[5] = {false, false, false, false, false};
|
||||
SSDataBlock *src = NULL;
|
||||
int32_t rowNum = sizeof(leftv) / sizeof(leftv[0]);
|
||||
int32_t code = TSDB_CODE_SUCCESS;
|
||||
|
|
|
@ -218,6 +218,8 @@
|
|||
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/slimit.py -Q 2
|
||||
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/slimit.py -Q 3
|
||||
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/slimit.py -Q 4
|
||||
,,n,system-test,./pytest.sh python3 ./test.py -f 2-query/ts-5761.py
|
||||
,,n,system-test,./pytest.sh python3 ./test.py -f 2-query/ts-5761-scalemode.py
|
||||
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ts-5712.py
|
||||
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ts-4233.py
|
||||
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ts-4233.py -Q 2
|
||||
|
|
|
@ -44,7 +44,7 @@ if $data20 != @ Time Range: [-9223372036854775808, 9223372036854775807]@ th
|
|||
endi
|
||||
|
||||
sql select * from tb1 where fbool in (0, 3);
|
||||
if $rows != 5 then
|
||||
if $rows != 3 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
|
@ -69,7 +69,7 @@ if $rows != 10 then
|
|||
endi
|
||||
|
||||
sql select * from st1 where tbool in (0, 3);
|
||||
if $rows != 15 then
|
||||
if $rows != 5 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
|
|
|
@ -0,0 +1,150 @@
|
|||
import taos
|
||||
|
||||
from util.log import *
|
||||
from util.sql import *
|
||||
from util.cases import *
|
||||
from util.dnodes import *
|
||||
from util.common import *
|
||||
|
||||
class TDTestCase:
|
||||
updatecfgDict = {'filterScalarMode':1}
|
||||
def init(self, conn, logSql, replicaVar=1):
|
||||
self.replicaVar = int(replicaVar)
|
||||
tdLog.debug(f"start to excute {__file__}")
|
||||
tdSql.init(conn.cursor(), True)
|
||||
self.dbname = 'db'
|
||||
self.stbname = 'st'
|
||||
|
||||
def prepareData(self):
|
||||
# db
|
||||
tdSql.execute(f"create database db;")
|
||||
tdSql.execute(f"use db")
|
||||
|
||||
# super tableUNSIGNED
|
||||
tdSql.execute("CREATE TABLE st( time TIMESTAMP, c1 BIGINT, c2 smallint, c3 double, c4 int UNSIGNED, c5 bool, c6 binary(32), c7 nchar(32)) tags(t1 binary(32), t2 nchar(32))")
|
||||
tdSql.execute("create table t1 using st tags('1', '1.7')")
|
||||
tdSql.execute("create table t2 using st tags('0', '')")
|
||||
tdSql.execute("create table t3 using st tags('1', 'er')")
|
||||
|
||||
# create index for all tags
|
||||
tdSql.execute("INSERT INTO t1 VALUES (1641024000000, 1, 1, 1, 1, 1, '1', '1.7')")
|
||||
tdSql.execute("INSERT INTO t1 VALUES (1641024000001, 0, 0, 1.7, 0, 0, '0', '')")
|
||||
tdSql.execute("INSERT INTO t1 VALUES (1641024000002, 1, 1, 1, 1, 1, '1', 'er')")
|
||||
tdSql.execute("INSERT INTO t2 VALUES (1641024000002, 1, 1, 1, 1, 1, '1', 'er')")
|
||||
tdSql.execute("INSERT INTO t3 VALUES (1641024000002, 1, 1, 1, 1, 1, '1', 'er')")
|
||||
|
||||
tdSql.execute("CREATE TABLE stt( time TIMESTAMP, c1 BIGINT, c2 timestamp, c3 int, c4 int UNSIGNED, c5 bool, c6 binary(32), c7 nchar(32)) tags(t1 binary(32), t2 nchar(32))")
|
||||
tdSql.execute("create table tt1 using stt tags('1', '1.7')")
|
||||
|
||||
# create index for all tags
|
||||
tdSql.execute("INSERT INTO tt1 VALUES (1641024000000, 9223372036854775807, 1641024000000, 1, 1, 1, '1', '1.7')")
|
||||
|
||||
def check(self):
|
||||
tdSql.query(f"SELECT * FROM tt1 WHERE c1 in (1.7, 9223372036854775803, '')")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM tt1 WHERE c1 = 9223372036854775803")
|
||||
tdSql.checkRows(0)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c1 = 1.7")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c1 in (1.7, 2)")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c1 not in (1.7, 2)")
|
||||
tdSql.checkRows(3)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c2 = 1.7")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c2 in (1.7, 2)")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c2 not in (1.7, 2)")
|
||||
tdSql.checkRows(3)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c3 = 1.7")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c3 in (1.7, 2)")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c3 not in (1.7, 2)")
|
||||
tdSql.checkRows(2)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c4 = 1.7")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c4 in (1.7, 2)")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c4 not in (1.7, 2)")
|
||||
tdSql.checkRows(3)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c5 = 1.7")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c5 in (1.7, 2)")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c5 not in (1.7, 2)")
|
||||
tdSql.checkRows(3)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 = 1.7")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 in (1.7, 2)")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 not in (1.7, 2)")
|
||||
tdSql.checkRows(3)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 = 1")
|
||||
tdSql.checkRows(2)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 in (1, 2)")
|
||||
tdSql.checkRows(2)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 not in (1, 2)")
|
||||
tdSql.checkRows(1)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 = 0")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 in (0, 2)")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 not in (0, 2)")
|
||||
tdSql.checkRows(2)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 not in (0, 2, 'sef')")
|
||||
tdSql.checkRows(2)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 = 1.7")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 in (1.7, 2)")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 not in (1.7, 2)")
|
||||
tdSql.checkRows(2)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 = 0")
|
||||
tdSql.checkRows(2)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 in (0, 2)")
|
||||
tdSql.checkRows(2)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 not in (0, 2)")
|
||||
tdSql.checkRows(1)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 = ''")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 in ('', 2)")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 not in ('', 2)")
|
||||
tdSql.checkRows(2)
|
||||
|
||||
tdSql.query(f"SELECT * FROM st WHERE t2 in ('', 2)")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM st WHERE t2 not in ('', 2)")
|
||||
tdSql.checkRows(4)
|
||||
|
||||
tdSql.query(f"SELECT * FROM st WHERE t1 in ('d343', 0, 2)")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM st WHERE t1 in (0, 2)")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM st WHERE t1 not in (0, 2)")
|
||||
tdSql.checkRows(4)
|
||||
|
||||
def run(self):
|
||||
self.prepareData()
|
||||
self.check()
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
tdLog.success(f"{__file__} successfully executed")
|
||||
|
||||
|
||||
|
||||
tdCases.addLinux(__file__, TDTestCase())
|
||||
tdCases.addWindows(__file__, TDTestCase())
|
|
@ -0,0 +1,149 @@
|
|||
import taos
|
||||
|
||||
from util.log import *
|
||||
from util.sql import *
|
||||
from util.cases import *
|
||||
from util.dnodes import *
|
||||
from util.common import *
|
||||
|
||||
class TDTestCase:
|
||||
def init(self, conn, logSql, replicaVar=1):
|
||||
self.replicaVar = int(replicaVar)
|
||||
tdLog.debug(f"start to excute {__file__}")
|
||||
tdSql.init(conn.cursor(), True)
|
||||
self.dbname = 'db'
|
||||
self.stbname = 'st'
|
||||
|
||||
def prepareData(self):
|
||||
# db
|
||||
tdSql.execute(f"create database db;")
|
||||
tdSql.execute(f"use db")
|
||||
|
||||
# super tableUNSIGNED
|
||||
tdSql.execute("CREATE TABLE st( time TIMESTAMP, c1 BIGINT, c2 smallint, c3 double, c4 int UNSIGNED, c5 bool, c6 binary(32), c7 nchar(32)) tags(t1 binary(32), t2 nchar(32))")
|
||||
tdSql.execute("create table t1 using st tags('1', '1.7')")
|
||||
tdSql.execute("create table t2 using st tags('0', '')")
|
||||
tdSql.execute("create table t3 using st tags('1', 'er')")
|
||||
|
||||
# create index for all tags
|
||||
tdSql.execute("INSERT INTO t1 VALUES (1641024000000, 1, 1, 1, 1, 1, '1', '1.7')")
|
||||
tdSql.execute("INSERT INTO t1 VALUES (1641024000001, 0, 0, 1.7, 0, 0, '0', '')")
|
||||
tdSql.execute("INSERT INTO t1 VALUES (1641024000002, 1, 1, 1, 1, 1, '1', 'er')")
|
||||
tdSql.execute("INSERT INTO t2 VALUES (1641024000002, 1, 1, 1, 1, 1, '1', 'er')")
|
||||
tdSql.execute("INSERT INTO t3 VALUES (1641024000002, 1, 1, 1, 1, 1, '1', 'er')")
|
||||
|
||||
tdSql.execute("CREATE TABLE stt( time TIMESTAMP, c1 BIGINT, c2 timestamp, c3 int, c4 int UNSIGNED, c5 bool, c6 binary(32), c7 nchar(32)) tags(t1 binary(32), t2 nchar(32))")
|
||||
tdSql.execute("create table tt1 using stt tags('1', '1.7')")
|
||||
|
||||
# create index for all tags
|
||||
tdSql.execute("INSERT INTO tt1 VALUES (1641024000000, 9223372036854775807, 1641024000000, 1, 1, 1, '1', '1.7')")
|
||||
|
||||
def check(self):
|
||||
tdSql.query(f"SELECT * FROM tt1 WHERE c1 in (1.7, 9223372036854775803, '')")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM tt1 WHERE c1 = 9223372036854775803")
|
||||
tdSql.checkRows(0)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c1 = 1.7")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c1 in (1.7, 2)")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c1 not in (1.7, 2)")
|
||||
tdSql.checkRows(3)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c2 = 1.7")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c2 in (1.7, 2)")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c2 not in (1.7, 2)")
|
||||
tdSql.checkRows(3)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c3 = 1.7")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c3 in (1.7, 2)")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c3 not in (1.7, 2)")
|
||||
tdSql.checkRows(2)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c4 = 1.7")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c4 in (1.7, 2)")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c4 not in (1.7, 2)")
|
||||
tdSql.checkRows(3)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c5 = 1.7")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c5 in (1.7, 2)")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c5 not in (1.7, 2)")
|
||||
tdSql.checkRows(3)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 = 1.7")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 in (1.7, 2)")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 not in (1.7, 2)")
|
||||
tdSql.checkRows(3)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 = 1")
|
||||
tdSql.checkRows(2)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 in (1, 2)")
|
||||
tdSql.checkRows(2)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 not in (1, 2)")
|
||||
tdSql.checkRows(1)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 = 0")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 in (0, 2)")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 not in (0, 2)")
|
||||
tdSql.checkRows(2)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c6 not in (0, 2, 'sef')")
|
||||
tdSql.checkRows(2)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 = 1.7")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 in (1.7, 2)")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 not in (1.7, 2)")
|
||||
tdSql.checkRows(2)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 = 0")
|
||||
tdSql.checkRows(2)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 in (0, 2)")
|
||||
tdSql.checkRows(2)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 not in (0, 2)")
|
||||
tdSql.checkRows(1)
|
||||
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 = ''")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 in ('', 2)")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM t1 WHERE c7 not in ('', 2)")
|
||||
tdSql.checkRows(2)
|
||||
|
||||
tdSql.query(f"SELECT * FROM st WHERE t2 in ('', 2)")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM st WHERE t2 not in ('', 2)")
|
||||
tdSql.checkRows(4)
|
||||
|
||||
tdSql.query(f"SELECT * FROM st WHERE t1 in ('d343', 0, 2)")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM st WHERE t1 in (0, 2)")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query(f"SELECT * FROM st WHERE t1 not in (0, 2)")
|
||||
tdSql.checkRows(4)
|
||||
|
||||
def run(self):
|
||||
self.prepareData()
|
||||
self.check()
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
tdLog.success(f"{__file__} successfully executed")
|
||||
|
||||
|
||||
|
||||
tdCases.addLinux(__file__, TDTestCase())
|
||||
tdCases.addWindows(__file__, TDTestCase())
|
Loading…
Reference in New Issue