MySQL、"UDF" の名称を "Loadable Function" に変更

 MySQLのリファレンスマニュアルは日々更新されているのですが、本日、ちょっと大きめの用語の変更が加えられました。

 その変更とは、今まで User-Defined Function (UDF) と呼ばれていたものがすべて、Loadable Function になった、というものです。本日時点ではとりあえずマニュアル上の表記のみの変更であり、最新の MySQL 8.0.25 であっても特に動作が変更されたというものではありませんが、今後徐々に変化していくものと思われます。

 なお自画自賛ですが、この日記は、おそらくこの用語に関する世界で一番早い情報です。:-)

マニュアルの変更

 リファレンスマニュアルで、膨大な量の "UDF", "User-Defined Function" の表記が廃止され、ほぼすべてが本日の変更で "Loadable Function" に置き換えられました。一部、performance_schema の名前やモジュールの名前等に udf の表記は残っていますが、表題や説明文などはすべて置き換えが完了している模様です。確認をしながら結構大変な作業だと思いますが、こういう運営をきちんとしてくれるドキュメントチームが機能していることが、MySQLの魅力でもあると感じました。

変更の背景(想像)

 呼び方が変更された理由については想像するしかありませんが、UDF(ユーザ定義関数) という呼び方が、いかにも一般ユーザが作るものという印象が強いからかと想像しました。もちろん一般ユーザも自由に作って、自分のMySQLに機能を追加できるものなのですが、今は、(Enterpriseの) asymmetric_encrypt() 関数などの asymmetric_* 関数群やkeyring関係の関数など、公式のUDFもあるので、「ユーザ定義」という名称よりは「読み込み可能な」と称するのが適切と判断したのでしょう。

関連情報の追加

 マニュアルには、
9.6 Query Attributes に "Query Attribute Loadable Functions" の記述が追加されています。
https://dev.mysql.com/doc/refman/8.0/en/query-attributes.html


 Loadable Function の説明(元 UDF の説明)は、こちらです。
https://dev.mysql.com/doc/refman/8.0/en/function-loading.html


用語の整理

 User-Defined Function (UDF) が Loadable Function へと変更されたのに合わせて、今まで単純に SQL Function と称されることもあった関数たちは、built-in function または native function と明示的に呼ばれることになったようです。もちろん元々より built-in (native) function という名称はあったものなので、こちらは、Loadable Function に対する用語の確認といったところです。

performance_shcema は

MySQL 8.0.25時点ではもちろん、performance_schema のテーブル名や列名は変わっていません。今後どのように変更していくのか(MySQL 8.0 の中で付け替えが発生するのか、並行するのか、このままでいくのか等)注目です。

mysql> use performance_schema;
mysql> SELECT * FROM user_defined_functions;
+-------------------------------------------------+-----------------+----------+-------------+-----------------+
| UDF_NAME                                        | UDF_RETURN_TYPE | UDF_TYPE | UDF_LIBRARY | UDF_USAGE_COUNT |
+-------------------------------------------------+-----------------+----------+-------------+-----------------+
| asynchronous_connection_failover_delete_source  | char            | function | NULL        |               1 |
| asynchronous_connection_failover_add_source     | char            | function | NULL        |               1 |
| mysqlx_get_prepared_statement_id                | integer         | function | NULL        |               1 |
| mysqlx_generate_document_id                     | char            | function | NULL        |               1 |
| asynchronous_connection_failover_delete_managed | char            | function | NULL        |               1 |
| mysqlx_error                                    | char            | function | NULL        |               1 |
| innodb_redo_log_archive_flush                   | integer         | function | NULL        |               1 |
| innodb_redo_log_archive_stop                    | integer         | function | NULL        |               1 |
| asynchronous_connection_failover_add_managed    | char            | function | NULL        |               1 |
| innodb_redo_log_archive_start                   | integer         | function | NULL        |               1 |
+-------------------------------------------------+-----------------+----------+-------------+-----------------+
10 rows in set (0.01 sec)


f:id:sakaik:20210513150648p:plain