fix:[TS-5761] error for in operator
This commit is contained in:
parent
ed523c9c13
commit
fc14fe4455
|
@ -288,7 +288,7 @@ struct SScalarParam {
|
||||||
bool colAlloced;
|
bool colAlloced;
|
||||||
SColumnInfoData *columnData;
|
SColumnInfoData *columnData;
|
||||||
SHashObj *pHashFilter;
|
SHashObj *pHashFilter;
|
||||||
SHashObj *pHashFilterVar;
|
SHashObj *pHashFilterOthers;
|
||||||
int32_t hashValueType;
|
int32_t hashValueType;
|
||||||
void *param; // other parameter, such as meta handle from vnode, to extract table name/tag value
|
void *param; // other parameter, such as meta handle from vnode, to extract table name/tag value
|
||||||
int32_t numOfRows;
|
int32_t numOfRows;
|
||||||
|
|
|
@ -1298,7 +1298,6 @@ int32_t fltAddGroupUnitFromNode(void *pContext, SFilterInfo *info, SNode *tree,
|
||||||
|
|
||||||
if (node->opType == OP_TYPE_IN && (!IS_VAR_DATA_TYPE(type))) {
|
if (node->opType == OP_TYPE_IN && (!IS_VAR_DATA_TYPE(type))) {
|
||||||
SNodeListNode *listNode = (SNodeListNode *)node->pRight;
|
SNodeListNode *listNode = (SNodeListNode *)node->pRight;
|
||||||
SListCell *cell = listNode->pNodeList->pHead;
|
|
||||||
|
|
||||||
SScalarParam out = {.columnData = taosMemoryCalloc(1, sizeof(SColumnInfoData))};
|
SScalarParam out = {.columnData = taosMemoryCalloc(1, sizeof(SColumnInfoData))};
|
||||||
if (out.columnData == NULL) {
|
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
|
out.columnData->info.bytes = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes; // reserved space for simple_copy
|
||||||
|
|
||||||
int32_t overflowCount = 0;
|
int32_t overflowCount = 0;
|
||||||
for (int32_t i = 0; i < listNode->pNodeList->length; ++i) {
|
SNode* nodeItem = NULL;
|
||||||
SValueNode *valueNode = (SValueNode *)cell->pNode;
|
FOREACH(nodeItem, listNode->pNodeList) {
|
||||||
|
SValueNode *valueNode = (SValueNode *)nodeItem;
|
||||||
if (valueNode->node.resType.type != type) {
|
if (valueNode->node.resType.type != type) {
|
||||||
int32_t overflow = 0;
|
int32_t overflow = 0;
|
||||||
code = sclConvertValueToSclParam(valueNode, &out, &overflow);
|
code = sclConvertValueToSclParam(valueNode, &out, &overflow);
|
||||||
|
@ -1319,7 +1319,6 @@ int32_t fltAddGroupUnitFromNode(void *pContext, SFilterInfo *info, SNode *tree,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (overflow) {
|
if (overflow) {
|
||||||
cell = cell->pNext;
|
|
||||||
++overflowCount;
|
++overflowCount;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -1358,8 +1357,6 @@ int32_t fltAddGroupUnitFromNode(void *pContext, SFilterInfo *info, SNode *tree,
|
||||||
code = terrno;
|
code = terrno;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
cell = cell->pNext;
|
|
||||||
}
|
}
|
||||||
if(overflowCount == listNode->pNodeList->length) {
|
if(overflowCount == listNode->pNodeList->length) {
|
||||||
ctx->ignore = true;
|
ctx->ignore = true;
|
||||||
|
@ -4863,18 +4860,15 @@ EDealRes fltReviseRewriter(SNode **pNode, void *pContext) {
|
||||||
if (LIST_LENGTH(listNode->pNodeList) > 10 || OP_TYPE_NOT_IN == node->opType) {
|
if (LIST_LENGTH(listNode->pNodeList) > 10 || OP_TYPE_NOT_IN == node->opType) {
|
||||||
stat->scalarMode = true;
|
stat->scalarMode = true;
|
||||||
}
|
}
|
||||||
int32_t type = -1;
|
int32_t type = refNode->node.resType.type;
|
||||||
exprNode = &listNode->node;
|
exprNode = &listNode->node;
|
||||||
SListCell *cell = listNode->pNodeList->pHead;
|
SNode* nodeItem = NULL;
|
||||||
for (int32_t i = 0; i < listNode->pNodeList->length; ++i) {
|
FOREACH(nodeItem, listNode->pNodeList) {
|
||||||
SValueNode *valueNode = (SValueNode *)cell->pNode;
|
SValueNode *valueNode = (SValueNode *)nodeItem;
|
||||||
cell = cell->pNext;
|
int32_t tmp = vectorGetConvertType(type, valueNode->node.resType.type);
|
||||||
int32_t tmp = vectorGetConvertType(refNode->node.resType.type, valueNode->node.resType.type);
|
if (tmp != 0){
|
||||||
if (tmp != 0 && tmp != refNode->node.resType.type){
|
|
||||||
stat->scalarMode = true;
|
stat->scalarMode = true;
|
||||||
if (IS_NUMERIC_TYPE(tmp) && tmp > type){
|
type = tmp;
|
||||||
type = tmp;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5031,11 +5025,11 @@ int32_t fltSclBuildRangePoints(SFltSclOperator *oper, SArray *points) {
|
||||||
}
|
}
|
||||||
case OP_TYPE_IN: {
|
case OP_TYPE_IN: {
|
||||||
SNodeListNode *listNode = (SNodeListNode *)oper->valNode;
|
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 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};
|
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) {
|
SNode* nodeItem = NULL;
|
||||||
SValueNode *valueNode = (SValueNode *)cell->pNode;
|
FOREACH(nodeItem, listNode->pNodeList) {
|
||||||
|
SValueNode *valueNode = (SValueNode *)nodeItem;
|
||||||
SFltSclDatum valDatum;
|
SFltSclDatum valDatum;
|
||||||
FLT_ERR_RET(fltSclBuildDatumFromValueNode(&valDatum, valueNode));
|
FLT_ERR_RET(fltSclBuildDatumFromValueNode(&valDatum, valueNode));
|
||||||
if(valueNode->node.resType.type == TSDB_DATA_TYPE_FLOAT || valueNode->node.resType.type == TSDB_DATA_TYPE_DOUBLE) {
|
if(valueNode->node.resType.type == TSDB_DATA_TYPE_FLOAT || valueNode->node.resType.type == TSDB_DATA_TYPE_DOUBLE) {
|
||||||
|
@ -5045,7 +5039,6 @@ int32_t fltSclBuildRangePoints(SFltSclOperator *oper, SArray *points) {
|
||||||
minDatum.i = TMIN(minDatum.i, valDatum.i);
|
minDatum.i = TMIN(minDatum.i, valDatum.i);
|
||||||
maxDatum.i = TMAX(maxDatum.i, valDatum.i);
|
maxDatum.i = TMAX(maxDatum.i, valDatum.i);
|
||||||
}
|
}
|
||||||
cell = cell->pNext;
|
|
||||||
}
|
}
|
||||||
SFltSclPoint startPt = {.start = true, .excl = false, .val = minDatum};
|
SFltSclPoint startPt = {.start = true, .excl = false, .val = minDatum};
|
||||||
SFltSclPoint endPt = {.start = false, .excl = false, .val = maxDatum};
|
SFltSclPoint endPt = {.start = false, .excl = false, .val = maxDatum};
|
||||||
|
|
|
@ -116,7 +116,7 @@ _return:
|
||||||
SCL_RET(code);
|
SCL_RET(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
// processType = 0 means all type. 1 means number, 2 means var
|
// 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) {
|
int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type, int8_t processType) {
|
||||||
SHashObj *pObj = taosHashInit(256, taosGetDefaultHashFunction(type), true, false);
|
SHashObj *pObj = taosHashInit(256, taosGetDefaultHashFunction(type), true, false);
|
||||||
if (NULL == pObj) {
|
if (NULL == pObj) {
|
||||||
|
@ -128,7 +128,6 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type, int8_
|
||||||
|
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
SNodeListNode *nodeList = (SNodeListNode *)pNode;
|
SNodeListNode *nodeList = (SNodeListNode *)pNode;
|
||||||
SListCell *cell = nodeList->pNodeList->pHead;
|
|
||||||
SScalarParam out = {.columnData = taosMemoryCalloc(1, sizeof(SColumnInfoData))};
|
SScalarParam out = {.columnData = taosMemoryCalloc(1, sizeof(SColumnInfoData))};
|
||||||
if (out.columnData == NULL) {
|
if (out.columnData == NULL) {
|
||||||
SCL_ERR_JRET(terrno);
|
SCL_ERR_JRET(terrno);
|
||||||
|
@ -136,20 +135,13 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type, int8_
|
||||||
int32_t len = 0;
|
int32_t len = 0;
|
||||||
void *buf = NULL;
|
void *buf = NULL;
|
||||||
|
|
||||||
for (int32_t i = 0; i < nodeList->pNodeList->length; ++i) {
|
SNode* nodeItem = NULL;
|
||||||
SValueNode *valueNode = (SValueNode *)cell->pNode;
|
FOREACH(nodeItem, nodeList->pNodeList) {
|
||||||
|
SValueNode *valueNode = (SValueNode *)nodeItem;
|
||||||
if (IS_VAR_DATA_TYPE(valueNode->node.resType.type)){
|
if ((IS_VAR_DATA_TYPE(valueNode->node.resType.type) && (processType == 1 || processType == 3)) ||
|
||||||
if (processType == 1) {
|
(IS_INTEGER_TYPE(valueNode->node.resType.type) && (processType == 2 || processType == 3)) ||
|
||||||
cell = cell->pNext;
|
(IS_FLOAT_TYPE(valueNode->node.resType.type) && (processType == 2 || processType == 4))) {
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
} else{
|
|
||||||
if (processType == 2)
|
|
||||||
{
|
|
||||||
cell = cell->pNext;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (valueNode->node.resType.type != type) {
|
if (valueNode->node.resType.type != type) {
|
||||||
|
@ -172,7 +164,6 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type, int8_
|
||||||
}
|
}
|
||||||
|
|
||||||
if (overflow) {
|
if (overflow) {
|
||||||
cell = cell->pNext;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -198,7 +189,6 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type, int8_
|
||||||
}
|
}
|
||||||
|
|
||||||
colInfoDataCleanup(out.columnData, out.numOfRows);
|
colInfoDataCleanup(out.columnData, out.numOfRows);
|
||||||
cell = cell->pNext;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*data = pObj;
|
*data = pObj;
|
||||||
|
@ -245,9 +235,9 @@ void sclFreeParam(SScalarParam *param) {
|
||||||
param->pHashFilter = NULL;
|
param->pHashFilter = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (param->pHashFilterVar != NULL) {
|
if (param->pHashFilterOthers != NULL) {
|
||||||
taosHashCleanup(param->pHashFilterVar);
|
taosHashCleanup(param->pHashFilterOthers);
|
||||||
param->pHashFilterVar = NULL;
|
param->pHashFilterOthers = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -388,15 +378,15 @@ int32_t sclInitParam(SNode *node, SScalarParam *param, SScalarCtx *ctx, int32_t
|
||||||
SCL_RET(TSDB_CODE_QRY_INVALID_INPUT);
|
SCL_RET(TSDB_CODE_QRY_INVALID_INPUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t type = -1;
|
int32_t type = ctx->type.selfType;
|
||||||
SListCell *cell = nodeList->pNodeList->pHead;
|
SNode* nodeItem = NULL;
|
||||||
for (int32_t i = 0; i < nodeList->pNodeList->length; ++i) {
|
FOREACH(nodeItem, nodeList->pNodeList) {
|
||||||
SValueNode *valueNode = (SValueNode *)cell->pNode;
|
SValueNode *valueNode = (SValueNode *)nodeItem;
|
||||||
cell = cell->pNext;
|
int32_t tmp = vectorGetConvertType(type, valueNode->node.resType.type);
|
||||||
int32_t tmp = vectorGetConvertType(ctx->type.selfType, valueNode->node.resType.type);
|
if (tmp != 0){
|
||||||
if (tmp != 0 && IS_NUMERIC_TYPE(tmp) && tmp > type){
|
type = tmp;
|
||||||
type = tmp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (IS_NUMERIC_TYPE(type)){
|
if (IS_NUMERIC_TYPE(type)){
|
||||||
ctx->type.peerType = type;
|
ctx->type.peerType = type;
|
||||||
|
@ -404,7 +394,10 @@ int32_t sclInitParam(SNode *node, SScalarParam *param, SScalarCtx *ctx, int32_t
|
||||||
type = ctx->type.peerType;
|
type = ctx->type.peerType;
|
||||||
if (IS_VAR_DATA_TYPE(ctx->type.selfType) && IS_NUMERIC_TYPE(type)){
|
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->pHashFilter, node, type, 1));
|
||||||
SCL_ERR_RET(scalarGenerateSetFromList((void **)¶m->pHashFilterVar, node, ctx->type.selfType, 2));
|
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 {
|
} else {
|
||||||
SCL_ERR_RET(scalarGenerateSetFromList((void **)¶m->pHashFilter, node, type, 0));
|
SCL_ERR_RET(scalarGenerateSetFromList((void **)¶m->pHashFilter, node, type, 0));
|
||||||
}
|
}
|
||||||
|
@ -414,8 +407,8 @@ int32_t sclInitParam(SNode *node, SScalarParam *param, SScalarCtx *ctx, int32_t
|
||||||
if (taosHashPut(ctx->pRes, &node, POINTER_BYTES, param, sizeof(*param))) {
|
if (taosHashPut(ctx->pRes, &node, POINTER_BYTES, param, sizeof(*param))) {
|
||||||
taosHashCleanup(param->pHashFilter);
|
taosHashCleanup(param->pHashFilter);
|
||||||
param->pHashFilter = NULL;
|
param->pHashFilter = NULL;
|
||||||
taosHashCleanup(param->pHashFilterVar);
|
taosHashCleanup(param->pHashFilterOthers);
|
||||||
param->pHashFilterVar = NULL;
|
param->pHashFilterOthers = NULL;
|
||||||
sclError("taosHashPut nodeList failed, size:%d", (int32_t)sizeof(*param));
|
sclError("taosHashPut nodeList failed, size:%d", (int32_t)sizeof(*param));
|
||||||
return terrno;
|
return terrno;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1009,28 +1009,29 @@ int32_t vectorConvertSingleColImpl(const SScalarParam *pIn, SScalarParam *pOut,
|
||||||
}
|
}
|
||||||
|
|
||||||
int8_t gConvertTypes[TSDB_DATA_TYPE_MAX][TSDB_DATA_TYPE_MAX] = {
|
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 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,
|
/*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,
|
/*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, 7, 3, 4, 5, 7, 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, 7, 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, 7, 4, 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, 7, 5, 5, 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, 7, 6, 7, 6, 6, 6, 6, 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,
|
/*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,
|
/*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,
|
/*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,
|
/*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,
|
/*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,
|
/*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,
|
/*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,
|
/*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,
|
/*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,
|
/*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,
|
/*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,
|
/*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,
|
/*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};
|
/*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] = {
|
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*/
|
/*NULL BOOL TINY SMAL INT BIGI FLOA DOUB VARC TIM NCHA UTIN USMA UINT UBIG JSON VARB DECI BLOB MEDB GEOM*/
|
||||||
|
@ -1071,7 +1072,7 @@ int32_t vectorGetConvertType(int32_t type1, int32_t type2) {
|
||||||
|
|
||||||
int32_t vectorConvertSingleCol(SScalarParam *input, SScalarParam *output, int32_t type, int32_t startIndex,
|
int32_t vectorConvertSingleCol(SScalarParam *input, SScalarParam *output, int32_t type, int32_t startIndex,
|
||||||
int32_t numOfRows) {
|
int32_t numOfRows) {
|
||||||
if (input->columnData == NULL && (input->pHashFilter != NULL || input->pHashFilterVar != NULL)){
|
if (input->columnData == NULL && (input->pHashFilter != NULL || input->pHashFilterOthers != NULL)){
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
output->numOfRows = input->numOfRows;
|
output->numOfRows = input->numOfRows;
|
||||||
|
@ -2008,7 +2009,7 @@ int32_t doVectorCompare(SScalarParam *pLeft, SScalarParam *pLeftVar, SScalarPara
|
||||||
|
|
||||||
char *pLeftData = colDataGetData(pLeft->columnData, i);
|
char *pLeftData = colDataGetData(pLeft->columnData, i);
|
||||||
bool res = filterDoCompare(fp, optr, pLeftData, pRight->pHashFilter);
|
bool res = filterDoCompare(fp, optr, pLeftData, pRight->pHashFilter);
|
||||||
if (pLeftVar != NULL && taosHashGetSize(pRight->pHashFilterVar) > 0){
|
if (pLeftVar != NULL && taosHashGetSize(pRight->pHashFilterOthers) > 0){
|
||||||
do{
|
do{
|
||||||
if (optr == OP_TYPE_IN && res){
|
if (optr == OP_TYPE_IN && res){
|
||||||
break;
|
break;
|
||||||
|
@ -2017,7 +2018,7 @@ int32_t doVectorCompare(SScalarParam *pLeft, SScalarParam *pLeftVar, SScalarPara
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
pLeftData = colDataGetData(pLeftVar->columnData, i);
|
pLeftData = colDataGetData(pLeftVar->columnData, i);
|
||||||
res = filterDoCompare(fpVar, optr, pLeftData, pRight->pHashFilterVar);
|
res = filterDoCompare(fpVar, optr, pLeftData, pRight->pHashFilterOthers);
|
||||||
}while(0);
|
}while(0);
|
||||||
}
|
}
|
||||||
colDataSetInt8(pOut->columnData, i, (int8_t *)&res);
|
colDataSetInt8(pOut->columnData, i, (int8_t *)&res);
|
||||||
|
@ -2048,7 +2049,7 @@ int32_t vectorCompareImpl(SScalarParam *pLeft, SScalarParam *pRight, SScalarPara
|
||||||
SCL_ERR_JRET(vectorConvertCols(pLeft, pRight, &pLeftOut, &pRightOut, startIndex, numOfRows));
|
SCL_ERR_JRET(vectorConvertCols(pLeft, pRight, &pLeftOut, &pRightOut, startIndex, numOfRows));
|
||||||
param1 = (pLeftOut.columnData != NULL) ? &pLeftOut : pLeft;
|
param1 = (pLeftOut.columnData != NULL) ? &pLeftOut : pLeft;
|
||||||
param2 = (pRightOut.columnData != NULL) ? &pRightOut : pRight;
|
param2 = (pRightOut.columnData != NULL) ? &pRightOut : pRight;
|
||||||
if (pRight->pHashFilterVar != NULL){
|
if (pRight->pHashFilterOthers != NULL){
|
||||||
param3 = pLeft;
|
param3 = pLeft;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -152,8 +152,8 @@ uint32_t taosFloatHash(const char *key, uint32_t UNUSED_PARAM(len)) {
|
||||||
if (FLT_EQUAL(f, 0.0)) {
|
if (FLT_EQUAL(f, 0.0)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (fabs(f) < INT32_MAX) {
|
if (fabs(f) < FLT_MAX / BASE - DLT) {
|
||||||
int32_t t = (int32_t)(floor(f));
|
int32_t t = (int32_t)(round(BASE * (f + DLT)));
|
||||||
return (uint32_t)t;
|
return (uint32_t)t;
|
||||||
} else {
|
} else {
|
||||||
return 0x7fc00000;
|
return 0x7fc00000;
|
||||||
|
@ -168,8 +168,8 @@ uint32_t taosDoubleHash(const char *key, uint32_t UNUSED_PARAM(len)) {
|
||||||
if (FLT_EQUAL(f, 0.0)) {
|
if (FLT_EQUAL(f, 0.0)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (fabs(f) < INT32_MAX) {
|
if (fabs(f) < DBL_MAX / BASE - DLT) {
|
||||||
int32_t t = (int32_t)(floor(f));
|
int32_t t = (int32_t)(round(BASE * (f + DLT)));
|
||||||
return (uint32_t)t;
|
return (uint32_t)t;
|
||||||
} else {
|
} else {
|
||||||
return 0x7fc00000;
|
return 0x7fc00000;
|
||||||
|
|
|
@ -33,7 +33,18 @@ class TDTestCase:
|
||||||
tdSql.execute("INSERT INTO t2 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("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):
|
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.query(f"SELECT * FROM t1 WHERE c1 = 1.7")
|
||||||
tdSql.checkRows(0)
|
tdSql.checkRows(0)
|
||||||
tdSql.query(f"SELECT * FROM t1 WHERE c1 in (1.7, 2)")
|
tdSql.query(f"SELECT * FROM t1 WHERE c1 in (1.7, 2)")
|
||||||
|
|
|
@ -32,7 +32,18 @@ class TDTestCase:
|
||||||
tdSql.execute("INSERT INTO t2 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("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):
|
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.query(f"SELECT * FROM t1 WHERE c1 = 1.7")
|
||||||
tdSql.checkRows(0)
|
tdSql.checkRows(0)
|
||||||
tdSql.query(f"SELECT * FROM t1 WHERE c1 in (1.7, 2)")
|
tdSql.query(f"SELECT * FROM t1 WHERE c1 in (1.7, 2)")
|
||||||
|
|
Loading…
Reference in New Issue