91 lines
3.3 KiB
C
91 lines
3.3 KiB
C
/*
|
|
* 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/>.
|
|
*/
|
|
|
|
#ifndef TDENGINE_TUDF_H
|
|
#define TDENGINE_TUDF_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "os.h"
|
|
#include "taoserror.h"
|
|
|
|
enum {
|
|
TSDB_UDF_FUNC_NORMAL = 0,
|
|
TSDB_UDF_FUNC_INIT,
|
|
TSDB_UDF_FUNC_FINALIZE,
|
|
TSDB_UDF_FUNC_MERGE,
|
|
TSDB_UDF_FUNC_DESTROY,
|
|
TSDB_UDF_FUNC_MAX_NUM
|
|
};
|
|
|
|
typedef struct SUdfInit {
|
|
int32_t maybe_null; /* 1 if function can return NULL */
|
|
uint32_t decimals; /* for real functions */
|
|
uint64_t length; /* For string functions */
|
|
char* ptr; /* free pointer for function data */
|
|
int32_t const_item; /* 0 if result is independent of arguments */
|
|
|
|
// script like lua/javascript
|
|
void* script_ctx;
|
|
void (*destroyCtxFunc)(void* script_ctx);
|
|
} SUdfInit;
|
|
|
|
typedef struct SUdfInfo {
|
|
int32_t functionId; // system assigned function id
|
|
int32_t funcType; // scalar function or aggregate function
|
|
int8_t resType; // result type
|
|
int16_t resBytes; // result byte
|
|
int32_t contLen; // content length
|
|
int32_t bufSize; // interbuf size
|
|
char* name; // function name
|
|
void* handle; // handle loaded in mem
|
|
void* funcs[TSDB_UDF_FUNC_MAX_NUM]; // function ptr
|
|
|
|
// for script like lua/javascript only
|
|
int isScript;
|
|
void* pScriptCtx;
|
|
|
|
SUdfInit init;
|
|
char* content;
|
|
char* path;
|
|
} SUdfInfo;
|
|
|
|
// script
|
|
|
|
typedef int32_t (*scriptInitFunc)(void* pCtx);
|
|
typedef void (*scriptNormalFunc)(void* pCtx, char* data, int16_t iType, int16_t iBytes, int32_t numOfRows,
|
|
int64_t* ptList, int64_t key, char* dataOutput, char* tsOutput, int32_t* numOfOutput,
|
|
int16_t oType, int16_t oBytes);
|
|
typedef void (*scriptFinalizeFunc)(void* pCtx, int64_t key, char* dataOutput, int32_t* numOfOutput);
|
|
typedef void (*scriptMergeFunc)(void* pCtx, char* data, int32_t numOfRows, char* dataOutput, int32_t* numOfOutput);
|
|
typedef void (*scriptDestroyFunc)(void* pCtx);
|
|
|
|
// dynamic lib
|
|
typedef void (*udfNormalFunc)(char* data, int16_t itype, int16_t iBytes, int32_t numOfRows, int64_t* ts,
|
|
char* dataOutput, char* interBuf, char* tsOutput, int32_t* numOfOutput, int16_t oType,
|
|
int16_t oBytes, SUdfInit* buf);
|
|
typedef int32_t (*udfInitFunc)(SUdfInit* data);
|
|
typedef void (*udfFinalizeFunc)(char* dataOutput, char* interBuf, int32_t* numOfOutput, SUdfInit* buf);
|
|
typedef void (*udfMergeFunc)(char* data, int32_t numOfRows, char* dataOutput, int32_t* numOfOutput, SUdfInit* buf);
|
|
typedef void (*udfDestroyFunc)(SUdfInit* buf);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // TDENGINE_TUDF_H
|