fix(query): fix timediff/timetruncate/to_unixtimestamp handling NULL value and empty string
TD-14802 TD-14803
This commit is contained in:
parent
d57da814cc
commit
f3b8bc8152
|
@ -415,7 +415,11 @@ int32_t convertStringToTimestamp(int16_t type, char *inputData, int64_t timePrec
|
||||||
if (type == TSDB_DATA_TYPE_BINARY) {
|
if (type == TSDB_DATA_TYPE_BINARY) {
|
||||||
newColData = taosMemoryCalloc(1, charLen + 1);
|
newColData = taosMemoryCalloc(1, charLen + 1);
|
||||||
memcpy(newColData, varDataVal(inputData), charLen);
|
memcpy(newColData, varDataVal(inputData), charLen);
|
||||||
taosParseTime(newColData, timeVal, charLen, (int32_t)timePrec, 0);
|
bool ret = taosParseTime(newColData, timeVal, charLen, (int32_t)timePrec, 0);
|
||||||
|
if (ret != TSDB_CODE_SUCCESS) {
|
||||||
|
taosMemoryFree(newColData);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
taosMemoryFree(newColData);
|
taosMemoryFree(newColData);
|
||||||
} else if (type == TSDB_DATA_TYPE_NCHAR) {
|
} else if (type == TSDB_DATA_TYPE_NCHAR) {
|
||||||
newColData = taosMemoryCalloc(1, charLen / TSDB_NCHAR_SIZE + 1);
|
newColData = taosMemoryCalloc(1, charLen / TSDB_NCHAR_SIZE + 1);
|
||||||
|
@ -425,7 +429,11 @@ int32_t convertStringToTimestamp(int16_t type, char *inputData, int64_t timePrec
|
||||||
return TSDB_CODE_FAILED;
|
return TSDB_CODE_FAILED;
|
||||||
}
|
}
|
||||||
newColData[len] = 0;
|
newColData[len] = 0;
|
||||||
taosParseTime(newColData, timeVal, len + 1, (int32_t)timePrec, 0);
|
bool ret = taosParseTime(newColData, timeVal, len + 1, (int32_t)timePrec, 0);
|
||||||
|
if (ret != TSDB_CODE_SUCCESS) {
|
||||||
|
taosMemoryFree(newColData);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
taosMemoryFree(newColData);
|
taosMemoryFree(newColData);
|
||||||
} else {
|
} else {
|
||||||
return TSDB_CODE_FAILED;
|
return TSDB_CODE_FAILED;
|
||||||
|
|
|
@ -869,7 +869,11 @@ int32_t toUnixtimestampFunction(SScalarParam *pInput, int32_t inputNum, SScalarP
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t timeVal = 0;
|
int64_t timeVal = 0;
|
||||||
convertStringToTimestamp(type, input, timePrec, &timeVal);
|
int32_t ret = convertStringToTimestamp(type, input, timePrec, &timeVal);
|
||||||
|
if (ret != TSDB_CODE_SUCCESS) {
|
||||||
|
colDataAppendNULL(pOutput->columnData, i);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
colDataAppend(pOutput->columnData, i, (char *)&timeVal, false);
|
colDataAppend(pOutput->columnData, i, (char *)&timeVal, false);
|
||||||
input += varDataTLen(input);
|
input += varDataTLen(input);
|
||||||
|
@ -904,7 +908,11 @@ int32_t timeTruncateFunction(SScalarParam *pInput, int32_t inputNum, SScalarPara
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_VAR_DATA_TYPE(type)) { /* datetime format strings */
|
if (IS_VAR_DATA_TYPE(type)) { /* datetime format strings */
|
||||||
convertStringToTimestamp(type, input, TSDB_TIME_PRECISION_NANO, &timeVal);
|
int32_t ret = convertStringToTimestamp(type, input, TSDB_TIME_PRECISION_NANO, &timeVal);
|
||||||
|
if (ret != TSDB_CODE_SUCCESS) {
|
||||||
|
colDataAppendNULL(pOutput->columnData, i);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
//If converted value is less than 10digits in second, use value in second instead
|
//If converted value is less than 10digits in second, use value in second instead
|
||||||
int64_t timeValSec = timeVal / 1000000000;
|
int64_t timeValSec = timeVal / 1000000000;
|
||||||
if (timeValSec < 1000000000) {
|
if (timeValSec < 1000000000) {
|
||||||
|
@ -1100,7 +1108,11 @@ int32_t timeDiffFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *p
|
||||||
|
|
||||||
int32_t type = GET_PARAM_TYPE(&pInput[k]);
|
int32_t type = GET_PARAM_TYPE(&pInput[k]);
|
||||||
if (IS_VAR_DATA_TYPE(type)) { /* datetime format strings */
|
if (IS_VAR_DATA_TYPE(type)) { /* datetime format strings */
|
||||||
convertStringToTimestamp(type, input[k], TSDB_TIME_PRECISION_NANO, &timeVal[k]);
|
int32_t ret = convertStringToTimestamp(type, input[k], TSDB_TIME_PRECISION_NANO, &timeVal[k]);
|
||||||
|
if (ret != TSDB_CODE_SUCCESS) {
|
||||||
|
colDataAppendNULL(pOutput->columnData, i);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
} else if (type == TSDB_DATA_TYPE_BIGINT || type == TSDB_DATA_TYPE_TIMESTAMP) { /* unix timestamp or ts column*/
|
} else if (type == TSDB_DATA_TYPE_BIGINT || type == TSDB_DATA_TYPE_TIMESTAMP) { /* unix timestamp or ts column*/
|
||||||
GET_TYPED_DATA(timeVal[k], int64_t, type, input[k]);
|
GET_TYPED_DATA(timeVal[k], int64_t, type, input[k]);
|
||||||
if (type == TSDB_DATA_TYPE_TIMESTAMP) {
|
if (type == TSDB_DATA_TYPE_TIMESTAMP) {
|
||||||
|
|
Loading…
Reference in New Issue