Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
e71a8234
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
e71a8234
编写于
4月 06, 2023
作者:
S
shenglian zhou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
enhance: refactor c plugin udf init
上级
3d8776e2
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
41 addition
and
27 deletion
+41
-27
source/libs/function/src/udfd.c
source/libs/function/src/udfd.c
+41
-27
未找到文件。
source/libs/function/src/udfd.c
浏览文件 @
e71a8234
...
...
@@ -53,15 +53,7 @@ int32_t udfdCPluginOpen(SScriptUdfEnvItem *items, int numItems) { return 0; }
int32_t
udfdCPluginClose
()
{
return
0
;
}
int32_t
udfdCPluginUdfInit
(
SScriptUdfInfo
*
udf
,
void
**
pUdfCtx
)
{
int32_t
err
=
0
;
SUdfCPluginCtx
*
udfCtx
=
taosMemoryCalloc
(
1
,
sizeof
(
SUdfCPluginCtx
));
err
=
uv_dlopen
(
udf
->
path
,
&
udfCtx
->
lib
);
if
(
err
!=
0
)
{
fnError
(
"can not load library %s. error: %s"
,
udf
->
path
,
uv_strerror
(
err
));
return
TSDB_CODE_UDF_LOAD_UDF_FAILURE
;
}
const
char
*
udfName
=
udf
->
name
;
const
char
*
udfdCPluginUdfInitLoadInitDestoryFuncs
(
SUdfCPluginCtx
*
udfCtx
,
const
char
*
udfName
)
{
char
initFuncName
[
TSDB_FUNC_NAME_LEN
+
5
]
=
{
0
};
char
*
initSuffix
=
"_init"
;
strcpy
(
initFuncName
,
udfName
);
...
...
@@ -73,31 +65,53 @@ int32_t udfdCPluginUdfInit(SScriptUdfInfo *udf, void **pUdfCtx) {
strcpy
(
destroyFuncName
,
udfName
);
strncat
(
destroyFuncName
,
destroySuffix
,
strlen
(
destroySuffix
));
uv_dlsym
(
&
udfCtx
->
lib
,
destroyFuncName
,
(
void
**
)(
&
udfCtx
->
destroyFunc
));
return
udfName
;
}
void
udfdCPluginUdfInitLoadAggFuncs
(
SUdfCPluginCtx
*
udfCtx
,
const
char
*
udfName
)
{
char
processFuncName
[
TSDB_FUNC_NAME_LEN
]
=
{
0
};
strcpy
(
processFuncName
,
udfName
);
uv_dlsym
(
&
udfCtx
->
lib
,
processFuncName
,
(
void
**
)(
&
udfCtx
->
aggProcFunc
));
char
startFuncName
[
TSDB_FUNC_NAME_LEN
+
6
]
=
{
0
};
char
*
startSuffix
=
"_start"
;
strncpy
(
startFuncName
,
processFuncName
,
sizeof
(
startFuncName
));
strncat
(
startFuncName
,
startSuffix
,
strlen
(
startSuffix
));
uv_dlsym
(
&
udfCtx
->
lib
,
startFuncName
,
(
void
**
)(
&
udfCtx
->
aggStartFunc
));
char
finishFuncName
[
TSDB_FUNC_NAME_LEN
+
7
]
=
{
0
};
char
*
finishSuffix
=
"_finish"
;
strncpy
(
finishFuncName
,
processFuncName
,
sizeof
(
finishFuncName
));
strncat
(
finishFuncName
,
finishSuffix
,
strlen
(
finishSuffix
));
uv_dlsym
(
&
udfCtx
->
lib
,
finishFuncName
,
(
void
**
)(
&
udfCtx
->
aggFinishFunc
));
char
mergeFuncName
[
TSDB_FUNC_NAME_LEN
+
6
]
=
{
0
};
char
*
mergeSuffix
=
"_merge"
;
strncpy
(
mergeFuncName
,
processFuncName
,
sizeof
(
mergeFuncName
));
strncat
(
mergeFuncName
,
mergeSuffix
,
strlen
(
mergeSuffix
));
uv_dlsym
(
&
udfCtx
->
lib
,
mergeFuncName
,
(
void
**
)(
&
udfCtx
->
aggMergeFunc
));
}
int32_t
udfdCPluginUdfInit
(
SScriptUdfInfo
*
udf
,
void
**
pUdfCtx
)
{
int32_t
err
=
0
;
SUdfCPluginCtx
*
udfCtx
=
taosMemoryCalloc
(
1
,
sizeof
(
SUdfCPluginCtx
));
err
=
uv_dlopen
(
udf
->
path
,
&
udfCtx
->
lib
);
if
(
err
!=
0
)
{
fnError
(
"can not load library %s. error: %s"
,
udf
->
path
,
uv_strerror
(
err
));
return
TSDB_CODE_UDF_LOAD_UDF_FAILURE
;
}
const
char
*
udfName
=
udf
->
name
;
udfdCPluginUdfInitLoadInitDestoryFuncs
(
udfCtx
,
udfName
);
if
(
udf
->
funcType
==
UDF_FUNC_TYPE_SCALAR
)
{
char
processFuncName
[
TSDB_FUNC_NAME_LEN
]
=
{
0
};
strcpy
(
processFuncName
,
udfName
);
uv_dlsym
(
&
udfCtx
->
lib
,
processFuncName
,
(
void
**
)(
&
udfCtx
->
scalarProcFunc
));
}
else
if
(
udf
->
funcType
==
UDF_FUNC_TYPE_AGG
)
{
char
processFuncName
[
TSDB_FUNC_NAME_LEN
]
=
{
0
};
strcpy
(
processFuncName
,
udfName
);
uv_dlsym
(
&
udfCtx
->
lib
,
processFuncName
,
(
void
**
)(
&
udfCtx
->
aggProcFunc
));
char
startFuncName
[
TSDB_FUNC_NAME_LEN
+
6
]
=
{
0
};
char
*
startSuffix
=
"_start"
;
strncpy
(
startFuncName
,
processFuncName
,
sizeof
(
startFuncName
));
strncat
(
startFuncName
,
startSuffix
,
strlen
(
startSuffix
));
uv_dlsym
(
&
udfCtx
->
lib
,
startFuncName
,
(
void
**
)(
&
udfCtx
->
aggStartFunc
));
char
finishFuncName
[
TSDB_FUNC_NAME_LEN
+
7
]
=
{
0
};
char
*
finishSuffix
=
"_finish"
;
strncpy
(
finishFuncName
,
processFuncName
,
sizeof
(
finishFuncName
));
strncat
(
finishFuncName
,
finishSuffix
,
strlen
(
finishSuffix
));
uv_dlsym
(
&
udfCtx
->
lib
,
finishFuncName
,
(
void
**
)(
&
udfCtx
->
aggFinishFunc
));
char
mergeFuncName
[
TSDB_FUNC_NAME_LEN
+
6
]
=
{
0
};
char
*
mergeSuffix
=
"_merge"
;
strncpy
(
mergeFuncName
,
processFuncName
,
sizeof
(
mergeFuncName
));
strncat
(
mergeFuncName
,
mergeSuffix
,
strlen
(
mergeSuffix
));
uv_dlsym
(
&
udfCtx
->
lib
,
mergeFuncName
,
(
void
**
)(
&
udfCtx
->
aggMergeFunc
));
udfdCPluginUdfInitLoadAggFuncs
(
udfCtx
,
udfName
);
}
int32_t
code
=
0
;
if
(
udfCtx
->
initFunc
)
{
code
=
(
udfCtx
->
initFunc
)();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录