Merge pull request #16428 from taosdata/fix/downgradeType
enh: downgrade value type to speed up filter
This commit is contained in:
commit
369c80b785
|
@ -45,6 +45,8 @@ typedef struct SScalarCtx {
|
|||
#define SCL_IS_CONST_CALC(_ctx) (NULL == (_ctx)->pBlockList)
|
||||
//#define SCL_IS_NULL_VALUE_NODE(_node) ((QUERY_NODE_VALUE == nodeType(_node)) && (TSDB_DATA_TYPE_NULL == ((SValueNode *)_node)->node.resType.type) && (((SValueNode *)_node)->placeholderNo <= 0))
|
||||
#define SCL_IS_NULL_VALUE_NODE(_node) ((QUERY_NODE_VALUE == nodeType(_node)) && (TSDB_DATA_TYPE_NULL == ((SValueNode *)_node)->node.resType.type))
|
||||
#define SCL_IS_COMPARISON_OPERATOR(_opType) ((_opType) >= OP_TYPE_GREATER_THAN && (_opType) < OP_TYPE_IS_NOT_UNKNOWN)
|
||||
#define SCL_DOWNGRADE_DATETYPE(_type) ((_type) == TSDB_DATA_TYPE_BIGINT || TSDB_DATA_TYPE_DOUBLE == (_type) || (_type) == TSDB_DATA_TYPE_UBIGINT)
|
||||
|
||||
#define sclFatal(...) qFatal(__VA_ARGS__)
|
||||
#define sclError(...) qError(__VA_ARGS__)
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include "scalar.h"
|
||||
#include "tudf.h"
|
||||
#include "ttime.h"
|
||||
#include "tcompare.h"
|
||||
|
||||
int32_t scalarGetOperatorParamNum(EOperatorType type) {
|
||||
if (OP_TYPE_IS_NULL == type || OP_TYPE_IS_NOT_NULL == type || OP_TYPE_IS_TRUE == type || OP_TYPE_IS_NOT_TRUE == type
|
||||
|
@ -219,6 +220,82 @@ void sclFreeParamList(SScalarParam *param, int32_t paramNum) {
|
|||
taosMemoryFree(param);
|
||||
}
|
||||
|
||||
void sclDowngradeValueType(SValueNode *valueNode) {
|
||||
switch (valueNode->node.resType.type) {
|
||||
case TSDB_DATA_TYPE_BIGINT: {
|
||||
int8_t i8 = valueNode->datum.i;
|
||||
if (i8 == valueNode->datum.i) {
|
||||
valueNode->node.resType.type = TSDB_DATA_TYPE_TINYINT;
|
||||
*(int8_t*)&valueNode->typeData = i8;
|
||||
break;
|
||||
}
|
||||
int16_t i16 = valueNode->datum.i;
|
||||
if (i16 == valueNode->datum.i) {
|
||||
valueNode->node.resType.type = TSDB_DATA_TYPE_SMALLINT;
|
||||
*(int16_t*)&valueNode->typeData = i16;
|
||||
break;
|
||||
}
|
||||
int32_t i32 = valueNode->datum.i;
|
||||
if (i32 == valueNode->datum.i) {
|
||||
valueNode->node.resType.type = TSDB_DATA_TYPE_INT;
|
||||
*(int32_t*)&valueNode->typeData = i32;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TSDB_DATA_TYPE_UBIGINT:{
|
||||
uint8_t u8 = valueNode->datum.i;
|
||||
if (u8 == valueNode->datum.i) {
|
||||
int8_t i8 = valueNode->datum.i;
|
||||
if (i8 == valueNode->datum.i) {
|
||||
valueNode->node.resType.type = TSDB_DATA_TYPE_TINYINT;
|
||||
*(int8_t*)&valueNode->typeData = i8;
|
||||
} else {
|
||||
valueNode->node.resType.type = TSDB_DATA_TYPE_UTINYINT;
|
||||
*(uint8_t*)&valueNode->typeData = u8;
|
||||
}
|
||||
break;
|
||||
}
|
||||
uint16_t u16 = valueNode->datum.i;
|
||||
if (u16 == valueNode->datum.i) {
|
||||
int16_t i16 = valueNode->datum.i;
|
||||
if (i16 == valueNode->datum.i) {
|
||||
valueNode->node.resType.type = TSDB_DATA_TYPE_SMALLINT;
|
||||
*(int16_t*)&valueNode->typeData = i16;
|
||||
} else {
|
||||
valueNode->node.resType.type = TSDB_DATA_TYPE_USMALLINT;
|
||||
*(uint16_t*)&valueNode->typeData = u16;
|
||||
}
|
||||
break;
|
||||
}
|
||||
uint32_t u32 = valueNode->datum.i;
|
||||
if (u32 == valueNode->datum.i) {
|
||||
int32_t i32 = valueNode->datum.i;
|
||||
if (i32 == valueNode->datum.i) {
|
||||
valueNode->node.resType.type = TSDB_DATA_TYPE_INT;
|
||||
*(int32_t*)&valueNode->typeData = i32;
|
||||
} else {
|
||||
valueNode->node.resType.type = TSDB_DATA_TYPE_UINT;
|
||||
*(uint32_t*)&valueNode->typeData = u32;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TSDB_DATA_TYPE_DOUBLE: {
|
||||
float f = valueNode->datum.d;
|
||||
if (FLT_EQUAL(f, valueNode->datum.d)) {
|
||||
valueNode->node.resType.type = TSDB_DATA_TYPE_FLOAT;
|
||||
*(float*)&valueNode->typeData = f;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t sclInitParam(SNode* node, SScalarParam *param, SScalarCtx *ctx, int32_t *rowNum) {
|
||||
switch (nodeType(node)) {
|
||||
case QUERY_NODE_LEFT_VALUE: {
|
||||
|
@ -675,6 +752,10 @@ EDealRes sclRewriteNonConstOperator(SNode** pNode, SScalarCtx *ctx) {
|
|||
return DEAL_RES_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
if (SCL_IS_COMPARISON_OPERATOR(node->opType) && SCL_DOWNGRADE_DATETYPE(valueNode->node.resType.type)) {
|
||||
sclDowngradeValueType(valueNode);
|
||||
}
|
||||
}
|
||||
|
||||
if (node->pRight && (QUERY_NODE_VALUE == nodeType(node->pRight))) {
|
||||
|
@ -692,6 +773,10 @@ EDealRes sclRewriteNonConstOperator(SNode** pNode, SScalarCtx *ctx) {
|
|||
return DEAL_RES_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
if (SCL_IS_COMPARISON_OPERATOR(node->opType) && SCL_DOWNGRADE_DATETYPE(valueNode->node.resType.type)) {
|
||||
sclDowngradeValueType(valueNode);
|
||||
}
|
||||
}
|
||||
|
||||
if (node->pRight && (QUERY_NODE_NODE_LIST == nodeType(node->pRight))) {
|
||||
|
|
Loading…
Reference in New Issue