1

MySQL Docs ( http://dev.mysql.com/doc/refman/5.0/en/adding-udf.html ) 中有一条语句困扰着我:

“UDF 包含成为正在运行的服务器一部分的代码,因此当您编写 UDF 时,您会受到任何和所有适用于编写服务器代码的约束的约束。例如,如果您尝试使用来自libstdc++ 库 "

如果使用 C++ 标准库函数编写 UDF,为什么会出现问题?
这是否意味着我注定要使用普通的旧 C 来编写我的 UDF?(请说不)

4

2 回答 2

2

特别是,您的 UDF 不得允许抛出任何 C++ 异常。在从 UDF 返回之前,必须捕获所有异常。这通常需要尝试/捕获任何进入 C++ 代码的 UDF,如果您特别偏执,包括“catch (...)”子句。

于 2009-06-18T17:02:34.187 回答
0

对 libstdc++ 完全没有任何知识,但是通过“例如”位表示此警告不仅适用于 libstdc++,我建议这意味着一般要警惕标准库,因为它们可能会执行不会执行的操作在 UDF 环境中工作。

例如(回到 C 语言)strtok 在调用之间维护本地状态,这意味着如果您尝试使用它同时处理两个不同的字符串,则必须对其使用进行序列化或面临其结果的损坏。因此 strtok 无法在像 UDF 这样的环境中工作,在这种环境中,您无法控制函数的调用位置和时间。

因此,我会说应该避免在多线程环境中不起作用的任何事情。

但请注意,以上纯属我的推测,并非基于现实。

于 2009-04-08T12:15:40.343 回答