【问题标题】:Writing a MySQL UDF using C++ STL functionality使用 C++ STL 功能编写 MySQL UDF
【发布时间】:2009-04-08 11:57:47
【问题描述】:

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

“UDF 包含成为正在运行的服务器的一部分的代码,因此当您编写 UDF 时,您会受到其他适用于编写服务器代码的所有约束条件的约束。例如,您可以如果您尝试使用 libstdc++ 库中的函数会遇到问题"

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

【问题讨论】:

    标签: c++ mysql user-defined-functions


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      对 libstdc++ 一无所知,但通过“例如”位表示此警告适用于 libstdc++ 以外的范围,我建议这意味着一般要警惕标准库,因为它们可能会执行以下操作在 UDF 环境中不起作用。

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

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

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

      【讨论】:

      • 哦,所以问题是线程安全。现在事情变得更有意义了。我记得STL在使用线程的时候遇到了一些问题。
      猜你喜欢
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 2011-05-12
      • 2012-02-23
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多