TDengine/source/libs/function/src/tfunctionInt.c

68 lines
2.1 KiB
C
Raw Normal View History

2022-08-10 12:12:32 +00:00
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "os.h"
#include "taosdef.h"
#include "thash.h"
2022-10-13 06:15:42 +00:00
#include "tmsg.h"
2022-08-10 12:12:32 +00:00
#include "ttypes.h"
#include "function.h"
#include "tcompression.h"
#include "tdatablock.h"
#include "tfunctionInt.h"
#include "thistogram.h"
#include "tpercentile.h"
#include "ttszip.h"
#include "tudf.h"
2022-10-13 06:15:42 +00:00
void cleanupResultRowEntry(struct SResultRowEntryInfo* pCell) { pCell->initialized = false; }
2022-08-10 12:12:32 +00:00
int32_t getNumOfResult(SqlFunctionCtx* pCtx, int32_t num, SSDataBlock* pResBlock) {
int32_t maxRows = 0;
for (int32_t j = 0; j < num; ++j) {
2022-10-13 06:15:42 +00:00
SResultRowEntryInfo* pResInfo = GET_RES_INFO(&pCtx[j]);
2022-08-10 12:12:32 +00:00
if (pResInfo != NULL && maxRows < pResInfo->numOfRes) {
maxRows = pResInfo->numOfRes;
}
}
blockDataEnsureCapacity(pResBlock, maxRows);
2022-10-13 06:15:42 +00:00
for (int32_t i = 0; i < num; ++i) {
2022-08-10 12:12:32 +00:00
SColumnInfoData* pCol = taosArrayGet(pResBlock->pDataBlock, i);
2022-10-13 06:15:42 +00:00
SResultRowEntryInfo* pResInfo = GET_RES_INFO(&pCtx[i]);
2022-08-10 12:12:32 +00:00
if (pResInfo->numOfRes == 0) {
2022-10-13 06:15:42 +00:00
for (int32_t j = 0; j < pResInfo->numOfRes; ++j) {
2023-02-20 02:04:08 +00:00
colDataSetVal(pCol, j, NULL, true); // TODO add set null data api
2022-08-10 12:12:32 +00:00
}
} else {
for (int32_t j = 0; j < pResInfo->numOfRes; ++j) {
2023-02-20 02:04:08 +00:00
colDataSetVal(pCol, j, GET_ROWCELL_INTERBUF(pResInfo), false);
2022-08-10 12:12:32 +00:00
}
}
}
pResBlock->info.rows = maxRows;
return maxRows;
}
bool isRowEntryCompleted(struct SResultRowEntryInfo* pEntry) {
return pEntry->complete;
}
2022-10-13 06:15:42 +00:00
bool isRowEntryInitialized(struct SResultRowEntryInfo* pEntry) { return pEntry->initialized; }