Написание MySQL UDF с использованием C ++ STL - PullRequest
1 голос
/ 08 апреля 2009

В MySQL Docs есть утверждение (http://dev.mysql.com/doc/refman/5.0/en/adding-udf.html), которое беспокоит меня:

"UDF содержит код, который становится частью работающего сервера, поэтому, когда вы пишете UDF, вы связаны любыми и всеми ограничениями, которые в противном случае применяются к написанию серверного кода. Например, вы можете возникают проблемы, если вы пытаетесь использовать функции из библиотеки libstdc ++ ."

Почему могут возникнуть проблемы, если вы используете стандартные библиотечные функции C ++ для написания UDF ??
Значит ли это, что я осужден использовать старый C для написания своих UDF ?? (пожалуйста, скажите нет)

Ответы [ 2 ]

2 голосов
/ 18 июня 2009

В частности, ваш UDF не должен позволять выбрасывать ЛЮБЫЕ исключения C ++. Все исключения должны быть перехвачены до возвращения из вашего UDF. Как правило, для этого требуется try / catch вокруг любой UDF, входящей в код C ++, включая выражение «catch (...)», если вы особенно параноик.

0 голосов
/ 08 апреля 2009

Не имея никаких знаний о libstdc ++, но следуя биту «Например», означающему, что это предупреждение применимо не только к libstdc ++, я хотел бы предложить, чтобы это означало быть осторожным со стандартными библиотеками в целом, поскольку они могут приводить к не будет работать в среде UDF.

Например (возвращаясь к C) strtok поддерживает локальное состояние между вызовами, что означает, что вы должны сериализовать его использование или столкнуться с искажением его результатов, если вы пытались использовать его для работы с двумя разными строками одновременно. Таким образом, strtok не будет работать в среде, подобной UDF, где вы не можете контролировать, где и когда вызывается функция.

Таким образом, я бы сказал, что следует избегать всего, что не работает в многопоточной среде.

Но учтите, что вышеизложенное основано исключительно на моих предположениях и не основано на реальности.

...