1

MySQL ドキュメント ( http://dev.mysql.com/doc/refman/5.0/en/adding-udf.html ) には、私を悩ませているステートメントがあります。

「UDF には実行中のサーバーの一部になるコードが含まれているため、UDF を作成すると、サーバー コードの作成に適用されるすべての制約に拘束されます。たとえば、次の関数を使用しようとすると問題が発生する可能性があります。 libstdc++ ライブラリ. "

C++ 標準ライブラリ関数を使用して UDF を記述すると、なぜ問題が発生するのでしょうか??
これは、UDF を作成するのに普通の古い C を使用することを非難されているということですか?? (いいえと言ってください)

4

2 に答える 2

2

特に、UDF は C++ 例外のスローを許可してはなりません。UDF から戻る前に、すべての例外をキャッチする必要があります。これには通常、C++ コードに入る UDF の周りに try/catch が必要です。これには、特に偏執的である場合は "catch (...)" 句が含まれます。

于 2009-06-18T17:02:34.187 に答える
0

libstdc++ の知識はまったくありませんが、「たとえば」ビットを使用すると、この警告が libstdc++ 以外にも適用されることを意味しますUDF 環境で作業します。

たとえば、(C に戻って) strtok は呼び出し間でローカル状態を維持します。つまり、2 つの異なる文字列を同時に操作するために使用しようとすると、その使用をシリアル化するか、結果の破損に直面する必要があります。したがって、strtok は、関数が呼び出される場所とタイミングを制御できない UDF のような環境では機能しません。

したがって、マルチスレッド環境で機能しないものは避けるべきだと言えます。

ただし、上記は完全に私の推測に基づくものであり、現実に基づくものではないことに注意してください。

于 2009-04-08T12:15:40.343 に答える