enh: downgrade value type to speed filter
This commit is contained in:
parent
34aab8ea62
commit
c2d2f554f2
|
@ -31,7 +31,6 @@ typedef struct SOperatorValueType {
|
||||||
typedef struct SScalarCtx {
|
typedef struct SScalarCtx {
|
||||||
int32_t code;
|
int32_t code;
|
||||||
bool dual;
|
bool dual;
|
||||||
bool compOp;
|
|
||||||
SArray *pBlockList; /* element is SSDataBlock* */
|
SArray *pBlockList; /* element is SSDataBlock* */
|
||||||
SHashObj *pRes; /* element is SScalarParam */
|
SHashObj *pRes; /* element is SScalarParam */
|
||||||
void *param; // additional parameter (meta actually) for acquire value such as tbname/tags values
|
void *param; // additional parameter (meta actually) for acquire value such as tbname/tags values
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include "scalar.h"
|
#include "scalar.h"
|
||||||
#include "tudf.h"
|
#include "tudf.h"
|
||||||
#include "ttime.h"
|
#include "ttime.h"
|
||||||
|
#include "tcompare.h"
|
||||||
|
|
||||||
int32_t scalarGetOperatorParamNum(EOperatorType type) {
|
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
|
if (OP_TYPE_IS_NULL == type || OP_TYPE_IS_NOT_NULL == type || OP_TYPE_IS_TRUE == type || OP_TYPE_IS_NOT_TRUE == type
|
||||||
|
@ -222,10 +223,74 @@ void sclFreeParamList(SScalarParam *param, int32_t paramNum) {
|
||||||
void sclDowngradeValueType(SValueNode *valueNode) {
|
void sclDowngradeValueType(SValueNode *valueNode) {
|
||||||
switch (valueNode->node.resType.type) {
|
switch (valueNode->node.resType.type) {
|
||||||
case TSDB_DATA_TYPE_BIGINT: {
|
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;
|
||||||
}
|
}
|
||||||
case TSDB_DATA_TYPE_UBIGINT:
|
|
||||||
case TSDB_DATA_TYPE_DOUBLE:
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -243,10 +308,7 @@ int32_t sclInitParam(SNode* node, SScalarParam *param, SScalarCtx *ctx, int32_t
|
||||||
|
|
||||||
ASSERT(param->columnData == NULL);
|
ASSERT(param->columnData == NULL);
|
||||||
param->numOfRows = 1;
|
param->numOfRows = 1;
|
||||||
if (ctx->compOp && SCL_DOWNGRADE_DATETYPE(valueNode->node.resType.type)) {
|
|
||||||
sclDowngradeValueType(valueNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*int32_t code = */sclCreateColumnInfoData(&valueNode->node.resType, 1, param);
|
/*int32_t code = */sclCreateColumnInfoData(&valueNode->node.resType, 1, param);
|
||||||
if (TSDB_DATA_TYPE_NULL == valueNode->node.resType.type || valueNode->isNull) {
|
if (TSDB_DATA_TYPE_NULL == valueNode->node.resType.type || valueNode->isNull) {
|
||||||
colDataAppendNULL(param->columnData, 0);
|
colDataAppendNULL(param->columnData, 0);
|
||||||
|
@ -453,7 +515,6 @@ int32_t sclInitOperatorParams(SScalarParam **pParams, SOperatorNode *node, SScal
|
||||||
}
|
}
|
||||||
|
|
||||||
sclSetOperatorValueType(node, ctx);
|
sclSetOperatorValueType(node, ctx);
|
||||||
ctx->compOp = SCL_IS_COMPARISON_OPERATOR(node->opType);
|
|
||||||
|
|
||||||
SCL_ERR_JRET(sclInitParam(node->pLeft, ¶mList[0], ctx, rowNum));
|
SCL_ERR_JRET(sclInitParam(node->pLeft, ¶mList[0], ctx, rowNum));
|
||||||
if (paramNum > 1) {
|
if (paramNum > 1) {
|
||||||
|
@ -689,6 +750,10 @@ EDealRes sclRewriteNonConstOperator(SNode** pNode, SScalarCtx *ctx) {
|
||||||
return DEAL_RES_ERROR;
|
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))) {
|
if (node->pRight && (QUERY_NODE_VALUE == nodeType(node->pRight))) {
|
||||||
|
@ -706,6 +771,10 @@ EDealRes sclRewriteNonConstOperator(SNode** pNode, SScalarCtx *ctx) {
|
||||||
return DEAL_RES_ERROR;
|
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))) {
|
if (node->pRight && (QUERY_NODE_NODE_LIST == nodeType(node->pRight))) {
|
||||||
|
|
Loading…
Reference in New Issue