未验证 提交 5413c640 编写于 作者: D dapan1121 提交者: GitHub

Merge pull request #20982 from taosdata/fix/TS-2754

fix: support INTERP with boolean type
......@@ -2661,7 +2661,7 @@ static int32_t setExprInfoForFunctions(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SS
}
} else if (f == TSDB_FUNC_INTERP) {
int32_t t1 = pSchema->type;
if (!IS_NUMERIC_TYPE(t1)) {
if (!IS_NUMERIC_TYPE(t1) && (t1 != TSDB_DATA_TYPE_BOOL)) {
invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg1);
return -1;
}
......@@ -6875,7 +6875,7 @@ int32_t validateFillNode(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SSqlNode* pSqlNo
if ((!isTimeWindowQuery(pQueryInfo)) && (!pointInterp)) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg5);
}
if (QUERY_IS_JOIN_QUERY(pQueryInfo->type) && (!pointInterp)) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg7);
}
......@@ -6891,9 +6891,9 @@ int32_t validateFillNode(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SSqlNode* pSqlNo
if (pItem->pVar.nType != TSDB_DATA_TYPE_BINARY) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2);
}
size_t numOfFields = tscNumOfFields(pQueryInfo);
if (pQueryInfo->fillVal == NULL) {
pQueryInfo->fillVal = calloc(numOfFields, sizeof(int64_t));
pQueryInfo->numOfFillVal = (int32_t)numOfFields;
......@@ -6954,7 +6954,7 @@ int32_t validateFillNode(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SSqlNode* pSqlNo
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg4);
}
}
if ((num < numOfFields) || ((num - 1 < numOfFields) && pointInterp)) {
tVariantListItem* lastItem = taosArrayGetLast(pFillToken);
......@@ -6990,13 +6990,13 @@ int32_t validateRangeNode(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNode* pSqlN
const char *msg0 = "invalid usage of range clause";
const char* msg1 = "invalid timestamp in range";
SSqlCmd* pCmd = &pSql->cmd;
bool interpQuery = tscIsPointInterpQuery(pQueryInfo);
if ((!interpQuery) && (pSqlNode->pRange.start || pSqlNode->pRange.end)) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg0);
}
if (pSqlNode->pRange.start == NULL || pSqlNode->pRange.end == NULL) {
pQueryInfo->range.skey = INT64_MIN;
pQueryInfo->range.ekey = INT64_MIN;
......
......@@ -670,7 +670,7 @@ static int32_t convertToBool(tVariant *pVariant, int64_t *pDest) {
if ((ret = convertToBoolImpl(pVariant->pz, pVariant->nLen)) < 0) {
return ret;
}
*pDest = ret;
} else if (pVariant->nType == TSDB_DATA_TYPE_NCHAR) {
int32_t ret = 0;
......@@ -681,7 +681,7 @@ static int32_t convertToBool(tVariant *pVariant, int64_t *pDest) {
} else if (pVariant->nType == TSDB_DATA_TYPE_NULL) {
*pDest = TSDB_DATA_BOOL_NULL;
}
assert(*pDest == TSDB_TRUE || *pDest == TSDB_FALSE || *pDest == TSDB_DATA_BOOL_NULL);
return 0;
}
......@@ -702,7 +702,7 @@ int32_t tVariantDumpEx(tVariant *pVariant, char *payload, int16_t type, bool inc
if (converted) {
*converted = false;
}
if (pVariant == NULL || (pVariant->nType != 0 && !isValidDataType(pVariant->nType))) {
return -1;
}
......@@ -719,7 +719,7 @@ int32_t tVariantDumpEx(tVariant *pVariant, char *payload, int16_t type, bool inc
*(int8_t *)payload = (int8_t)result;
break;
}
case TSDB_DATA_TYPE_TINYINT: {
if (convertToInteger(pVariant, &result, type, true, false, converted) < 0) {
SET_EXT_INFO(converted, result, INT8_MIN + 1, INT8_MAX, extInfo);
......@@ -730,14 +730,14 @@ int32_t tVariantDumpEx(tVariant *pVariant, char *payload, int16_t type, bool inc
}
case TSDB_DATA_TYPE_UTINYINT: {
if (convertToInteger(pVariant, &result, type, false, false, converted) < 0) {
if (convertToInteger(pVariant, &result, type, false, false, converted) < 0) {
SET_EXT_INFO(converted, result, 0, UINT8_MAX - 1, extInfo);
return -1;
}
*((uint8_t *)payload) = (uint8_t) result;
break;
}
case TSDB_DATA_TYPE_SMALLINT: {
if (convertToInteger(pVariant, &result, type, true, false, converted) < 0) {
SET_EXT_INFO(converted, result, INT16_MIN + 1, INT16_MAX, extInfo);
......@@ -755,7 +755,7 @@ int32_t tVariantDumpEx(tVariant *pVariant, char *payload, int16_t type, bool inc
*((uint16_t *)payload) = (uint16_t)result;
break;
}
case TSDB_DATA_TYPE_INT: {
if (convertToInteger(pVariant, &result, type, true, false, converted) < 0) {
SET_EXT_INFO(converted, result, INT32_MIN + 1, INT32_MAX, extInfo);
......@@ -773,7 +773,7 @@ int32_t tVariantDumpEx(tVariant *pVariant, char *payload, int16_t type, bool inc
*((uint32_t *)payload) = (uint32_t)result;
break;
}
case TSDB_DATA_TYPE_BIGINT: {
if (convertToInteger(pVariant, &result, type, true, false, converted) < 0) {
SET_EXT_INFO(converted, (int64_t)result, INT64_MIN + 1, INT64_MAX, extInfo);
......
......@@ -3,7 +3,6 @@ sql connect
sql use db;
sql_error SELECT INTERP(c7) FROM tb1;
sql_error SELECT INTERP(c8) FROM tb1;
sql_error SELECT INTERP(c9) FROM tb1;
sql_error SELECT INTERP(c1,c8) FROM tb1;
......
......@@ -2358,3 +2358,789 @@ endi
if $data96 != tb2 then
return -1
endi
sql SELECT INTERP(c7) FROM tb2 RANGE('2021-10-20 10:00:00','2021-10-20 10:00:14') EVERY(1s) FILL(NULL);
if $rows != 15 then
return -1
endi
if $data00 != @21-10-20 10:00:00.000@ then
return -1
endi
print $data01
print $data11
print $data21
print $data31
print $data41
if $data01 != 1 then
return -1
endi
if $data10 != @21-10-20 10:00:01.000@ then
return -1
endi
if $data11 != NULL then
return -1
endi
if $data20 != @21-10-20 10:00:02.000@ then
return -1
endi
if $data21 != 1 then
return -1
endi
if $data30 != @21-10-20 10:00:03.000@ then
return -1
endi
if $data31 != NULL then
return -1
endi
if $data40 != @21-10-20 10:00:04.000@ then
return -1
endi
if $data41 != 0 then
return -1
endi
if $data50 != @21-10-20 10:00:05.000@ then
return -1
endi
if $data51 != NULL then
return -1
endi
if $data60 != @21-10-20 10:00:06.000@ then
return -1
endi
if $data61 != 0 then
return -1
endi
if $data70 != @21-10-20 10:00:07.000@ then
return -1
endi
if $data71 != NULL then
return -1
endi
if $data80 != @21-10-20 10:00:08.000@ then
return -1
endi
if $data81 != NULL then
return -1
endi
if $data90 != @21-10-20 10:00:09.000@ then
return -1
endi
if $data91 != NULL then
return -1
endi
sql SELECT INTERP(c7) FROM tb2 RANGE('2021-10-20 10:00:00','2021-10-20 10:00:14') EVERY(1s) FILL(PREV);
if $rows != 15 then
return -1
endi
if $data00 != @21-10-20 10:00:00.000@ then
return -1
endi
if $data01 != 1 then
return -1
endi
if $data10 != @21-10-20 10:00:01.000@ then
return -1
endi
if $data11 != 1 then
return -1
endi
if $data20 != @21-10-20 10:00:02.000@ then
return -1
endi
if $data21 != 1 then
return -1
endi
if $data30 != @21-10-20 10:00:03.000@ then
return -1
endi
if $data31 != 1 then
return -1
endi
if $data40 != @21-10-20 10:00:04.000@ then
return -1
endi
if $data41 != 0 then
return -1
endi
if $data50 != @21-10-20 10:00:05.000@ then
return -1
endi
if $data51 != 0 then
return -1
endi
if $data60 != @21-10-20 10:00:06.000@ then
return -1
endi
if $data61 != 0 then
return -1
endi
if $data70 != @21-10-20 10:00:07.000@ then
return -1
endi
if $data71 != 0 then
return -1
endi
if $data80 != @21-10-20 10:00:08.000@ then
return -1
endi
if $data81 != 0 then
return -1
endi
if $data90 != @21-10-20 10:00:09.000@ then
return -1
endi
if $data91 != 0 then
return -1
endi
sql SELECT INTERP(c7) FROM tb2 RANGE('2021-10-20 10:00:00','2021-10-20 10:00:14') EVERY(1s) FILL(NEXT);
if $rows != 15 then
return -1
endi
if $data00 != @21-10-20 10:00:00.000@ then
return -1
endi
if $data01 != 1 then
return -1
endi
if $data10 != @21-10-20 10:00:01.000@ then
return -1
endi
if $data11 != 1 then
return -1
endi
if $data20 != @21-10-20 10:00:02.000@ then
return -1
endi
if $data21 != 1 then
return -1
endi
if $data30 != @21-10-20 10:00:03.000@ then
return -1
endi
if $data31 != 0 then
return -1
endi
if $data40 != @21-10-20 10:00:04.000@ then
return -1
endi
if $data41 != 0 then
return -1
endi
if $data50 != @21-10-20 10:00:05.000@ then
return -1
endi
if $data51 != 0 then
return -1
endi
if $data60 != @21-10-20 10:00:06.000@ then
return -1
endi
if $data61 != 0 then
return -1
endi
if $data70 != @21-10-20 10:00:07.000@ then
return -1
endi
if $data71 != 1 then
return -1
endi
if $data80 != @21-10-20 10:00:08.000@ then
return -1
endi
if $data81 != 1 then
return -1
endi
if $data90 != @21-10-20 10:00:09.000@ then
return -1
endi
if $data91 != 1 then
return -1
endi
sql SELECT INTERP(c7) FROM tb2 RANGE('2021-10-20 10:00:00','2021-10-20 10:00:14') EVERY(1s) FILL(VALUE, 1);
if $rows != 15 then
return -1
endi
if $data00 != @21-10-20 10:00:00.000@ then
return -1
endi
if $data01 != 1 then
return -1
endi
if $data10 != @21-10-20 10:00:01.000@ then
return -1
endi
if $data11 != 1 then
return -1
endi
if $data20 != @21-10-20 10:00:02.000@ then
return -1
endi
if $data21 != 1 then
return -1
endi
if $data30 != @21-10-20 10:00:03.000@ then
return -1
endi
if $data31 != 1 then
return -1
endi
if $data40 != @21-10-20 10:00:04.000@ then
return -1
endi
if $data41 != 0 then
return -1
endi
if $data50 != @21-10-20 10:00:05.000@ then
return -1
endi
if $data51 != 1 then
return -1
endi
if $data60 != @21-10-20 10:00:06.000@ then
return -1
endi
if $data61 != 0 then
return -1
endi
if $data70 != @21-10-20 10:00:07.000@ then
return -1
endi
if $data71 != 1 then
return -1
endi
if $data80 != @21-10-20 10:00:08.000@ then
return -1
endi
if $data81 != 1 then
return -1
endi
if $data90 != @21-10-20 10:00:09.000@ then
return -1
endi
if $data91 != 1 then
return -1
endi
sql SELECT INTERP(c7) FROM tb2 RANGE('2021-10-20 10:00:00','2021-10-20 10:00:14') EVERY(1s) FILL(VALUE, 1.5);
if $rows != 15 then
return -1
endi
if $data00 != @21-10-20 10:00:00.000@ then
return -1
endi
if $data01 != 1 then
return -1
endi
if $data10 != @21-10-20 10:00:01.000@ then
return -1
endi
if $data11 != 1 then
return -1
endi
if $data20 != @21-10-20 10:00:02.000@ then
return -1
endi
if $data21 != 1 then
return -1
endi
if $data30 != @21-10-20 10:00:03.000@ then
return -1
endi
if $data31 != 1 then
return -1
endi
if $data40 != @21-10-20 10:00:04.000@ then
return -1
endi
if $data41 != 0 then
return -1
endi
if $data50 != @21-10-20 10:00:05.000@ then
return -1
endi
if $data51 != 1 then
return -1
endi
if $data60 != @21-10-20 10:00:06.000@ then
return -1
endi
if $data61 != 0 then
return -1
endi
if $data70 != @21-10-20 10:00:07.000@ then
return -1
endi
if $data71 != 1 then
return -1
endi
if $data80 != @21-10-20 10:00:08.000@ then
return -1
endi
if $data81 != 1 then
return -1
endi
if $data90 != @21-10-20 10:00:09.000@ then
return -1
endi
if $data91 != 1 then
return -1
endi
sql SELECT INTERP(c7) FROM tb2 RANGE('2021-10-20 10:00:00','2021-10-20 10:00:14') EVERY(1s) FILL(VALUE, 1);
if $rows != 15 then
return -1
endi
if $data00 != @21-10-20 10:00:00.000@ then
return -1
endi
if $data01 != 1 then
return -1
endi
if $data10 != @21-10-20 10:00:01.000@ then
return -1
endi
if $data11 != 1 then
return -1
endi
if $data20 != @21-10-20 10:00:02.000@ then
return -1
endi
if $data21 != 1 then
return -1
endi
if $data30 != @21-10-20 10:00:03.000@ then
return -1
endi
if $data31 != 1 then
return -1
endi
if $data40 != @21-10-20 10:00:04.000@ then
return -1
endi
if $data41 != 0 then
return -1
endi
if $data50 != @21-10-20 10:00:05.000@ then
return -1
endi
if $data51 != 1 then
return -1
endi
if $data60 != @21-10-20 10:00:06.000@ then
return -1
endi
if $data61 != 0 then
return -1
endi
if $data70 != @21-10-20 10:00:07.000@ then
return -1
endi
if $data71 != 1 then
return -1
endi
if $data80 != @21-10-20 10:00:08.000@ then
return -1
endi
if $data81 != 1 then
return -1
endi
if $data90 != @21-10-20 10:00:09.000@ then
return -1
endi
if $data91 != 1 then
return -1
endi
sql SELECT INTERP(c7) FROM tb2 RANGE('2021-10-20 10:00:00','2021-10-20 10:00:14') EVERY(1s) FILL(VALUE, 0);
if $rows != 15 then
return -1
endi
if $data00 != @21-10-20 10:00:00.000@ then
return -1
endi
if $data01 != 1 then
return -1
endi
if $data10 != @21-10-20 10:00:01.000@ then
return -1
endi
if $data11 != 0 then
return -1
endi
if $data20 != @21-10-20 10:00:02.000@ then
return -1
endi
if $data21 != 1 then
return -1
endi
if $data30 != @21-10-20 10:00:03.000@ then
return -1
endi
if $data31 != 0 then
return -1
endi
if $data40 != @21-10-20 10:00:04.000@ then
return -1
endi
if $data41 != 0 then
return -1
endi
if $data50 != @21-10-20 10:00:05.000@ then
return -1
endi
if $data51 != 0 then
return -1
endi
if $data60 != @21-10-20 10:00:06.000@ then
return -1
endi
if $data61 != 0 then
return -1
endi
if $data70 != @21-10-20 10:00:07.000@ then
return -1
endi
if $data71 != 0 then
return -1
endi
if $data80 != @21-10-20 10:00:08.000@ then
return -1
endi
if $data81 != 0 then
return -1
endi
if $data90 != @21-10-20 10:00:09.000@ then
return -1
endi
if $data91 != 0 then
return -1
endi
sql SELECT INTERP(c7) FROM tb2 RANGE('2021-10-20 10:00:00','2021-10-20 10:00:14') EVERY(1s) FILL(VALUE, 0.0);
if $rows != 15 then
return -1
endi
if $data00 != @21-10-20 10:00:00.000@ then
return -1
endi
if $data01 != 1 then
return -1
endi
if $data10 != @21-10-20 10:00:01.000@ then
return -1
endi
if $data11 != 0 then
return -1
endi
if $data20 != @21-10-20 10:00:02.000@ then
return -1
endi
if $data21 != 1 then
return -1
endi
if $data30 != @21-10-20 10:00:03.000@ then
return -1
endi
if $data31 != 0 then
return -1
endi
if $data40 != @21-10-20 10:00:04.000@ then
return -1
endi
if $data41 != 0 then
return -1
endi
if $data50 != @21-10-20 10:00:05.000@ then
return -1
endi
if $data51 != 0 then
return -1
endi
if $data60 != @21-10-20 10:00:06.000@ then
return -1
endi
if $data61 != 0 then
return -1
endi
if $data70 != @21-10-20 10:00:07.000@ then
return -1
endi
if $data71 != 0 then
return -1
endi
if $data80 != @21-10-20 10:00:08.000@ then
return -1
endi
if $data81 != 0 then
return -1
endi
if $data90 != @21-10-20 10:00:09.000@ then
return -1
endi
if $data91 != 0 then
return -1
endi
sql SELECT INTERP(c7) FROM tb2 RANGE('2021-10-20 10:00:00','2021-10-20 10:00:14') EVERY(1s) FILL(VALUE, 0);
if $rows != 15 then
return -1
endi
if $data00 != @21-10-20 10:00:00.000@ then
return -1
endi
if $data01 != 1 then
return -1
endi
if $data10 != @21-10-20 10:00:01.000@ then
return -1
endi
if $data11 != 0 then
return -1
endi
if $data20 != @21-10-20 10:00:02.000@ then
return -1
endi
if $data21 != 1 then
return -1
endi
if $data30 != @21-10-20 10:00:03.000@ then
return -1
endi
if $data31 != 0 then
return -1
endi
if $data40 != @21-10-20 10:00:04.000@ then
return -1
endi
if $data41 != 0 then
return -1
endi
if $data50 != @21-10-20 10:00:05.000@ then
return -1
endi
if $data51 != 0 then
return -1
endi
if $data60 != @21-10-20 10:00:06.000@ then
return -1
endi
if $data61 != 0 then
return -1
endi
if $data70 != @21-10-20 10:00:07.000@ then
return -1
endi
if $data71 != 0 then
return -1
endi
if $data80 != @21-10-20 10:00:08.000@ then
return -1
endi
if $data81 != 0 then
return -1
endi
if $data90 != @21-10-20 10:00:09.000@ then
return -1
endi
if $data91 != 0 then
return -1
endi
sql SELECT INTERP(c7) FROM tb2 RANGE('2021-10-20 10:00:00','2021-10-20 10:00:14') EVERY(1s) FILL(VALUE, 'abc');
if $rows != 15 then
return -1
endi
if $data00 != @21-10-20 10:00:00.000@ then
return -1
endi
if $data01 != 1 then
return -1
endi
if $data10 != @21-10-20 10:00:01.000@ then
return -1
endi
if $data11 != 0 then
return -1
endi
if $data20 != @21-10-20 10:00:02.000@ then
return -1
endi
if $data21 != 1 then
return -1
endi
if $data30 != @21-10-20 10:00:03.000@ then
return -1
endi
if $data31 != 0 then
return -1
endi
if $data40 != @21-10-20 10:00:04.000@ then
return -1
endi
if $data41 != 0 then
return -1
endi
if $data50 != @21-10-20 10:00:05.000@ then
return -1
endi
if $data51 != 0 then
return -1
endi
if $data60 != @21-10-20 10:00:06.000@ then
return -1
endi
if $data61 != 0 then
return -1
endi
if $data70 != @21-10-20 10:00:07.000@ then
return -1
endi
if $data71 != 0 then
return -1
endi
if $data80 != @21-10-20 10:00:08.000@ then
return -1
endi
if $data81 != 0 then
return -1
endi
if $data90 != @21-10-20 10:00:09.000@ then
return -1
endi
if $data91 != 0 then
return -1
endi
sql SELECT INTERP(c7) FROM tb2 RANGE('2021-10-20 10:00:00','2021-10-20 10:00:14') EVERY(1s) FILL(VALUE, NULL);
if $rows != 15 then
return -1
endi
if $data00 != @21-10-20 10:00:00.000@ then
return -1
endi
if $data01 != 1 then
return -1
endi
if $data10 != @21-10-20 10:00:01.000@ then
return -1
endi
if $data11 != NULL then
return -1
endi
if $data20 != @21-10-20 10:00:02.000@ then
return -1
endi
if $data21 != 1 then
return -1
endi
if $data30 != @21-10-20 10:00:03.000@ then
return -1
endi
if $data31 != NULL then
return -1
endi
if $data40 != @21-10-20 10:00:04.000@ then
return -1
endi
if $data41 != 0 then
return -1
endi
if $data50 != @21-10-20 10:00:05.000@ then
return -1
endi
if $data51 != NULL then
return -1
endi
if $data60 != @21-10-20 10:00:06.000@ then
return -1
endi
if $data61 != 0 then
return -1
endi
if $data70 != @21-10-20 10:00:07.000@ then
return -1
endi
if $data71 != NULL then
return -1
endi
if $data80 != @21-10-20 10:00:08.000@ then
return -1
endi
if $data81 != NULL then
return -1
endi
if $data90 != @21-10-20 10:00:09.000@ then
return -1
endi
if $data91 != NULL then
return -1
endi
sql SELECT INTERP(c7) FROM tb2 RANGE('2021-10-20 10:00:00','2021-10-20 10:00:14') EVERY(1s) FILL(LINEAR);
if $rows != 15 then
return -1
endi
if $data00 != @21-10-20 10:00:00.000@ then
return -1
endi
if $data01 != 1 then
return -1
endi
if $data10 != @21-10-20 10:00:01.000@ then
return -1
endi
if $data11 != 1 then
return -1
endi
if $data20 != @21-10-20 10:00:02.000@ then
return -1
endi
if $data21 != 1 then
return -1
endi
if $data30 != @21-10-20 10:00:03.000@ then
return -1
endi
if $data31 != 0 then
return -1
endi
if $data40 != @21-10-20 10:00:04.000@ then
return -1
endi
if $data41 != 0 then
return -1
endi
if $data50 != @21-10-20 10:00:05.000@ then
return -1
endi
if $data51 != 0 then
return -1
endi
if $data60 != @21-10-20 10:00:06.000@ then
return -1
endi
if $data61 != 0 then
return -1
endi
if $data70 != @21-10-20 10:00:07.000@ then
return -1
endi
if $data71 != 0 then
return -1
endi
if $data80 != @21-10-20 10:00:08.000@ then
return -1
endi
if $data81 != 0 then
return -1
endi
if $data90 != @21-10-20 10:00:09.000@ then
return -1
endi
if $data91 != 0 then
return -1
endi
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册