tudf.h 3.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/*
 * 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

19 20 21 22 23 24 25
#ifdef __cplusplus
extern "C" {
#endif

#include "os.h"
#include "taoserror.h"

26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
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);

86 87 88 89
#ifdef __cplusplus
}
#endif

90
#endif  // TDENGINE_TUDF_H