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)