MySQL の const propagation とユーザ定義関数の参照透過性

MySQL の const propagation が、ルートから辿っていける const (ただし間に AND か OR が挟まってもよい) しか最適化の対象としていなかったので、ボトムアップなパッチを書いた (完全じゃないけど) 。
MySQL Lists: internals: Re: Const propagation within a non-const expression

ちなみに MySQL の UDF (ユーザー定義関数) には、関数の値が SQL のクエリ実行中に引数の値によらず定数かどうかを表すフラグ const_item があると書いてある。
MySQL :: MySQL 8.0 Reference Manual :: 29.4.2.1 UDF Calling Sequences for Simple Functions

これだけだと意味不明だけど、ソースを読んでいくと、const_item は in/out で、UDF の引数がすべて定数の場合のみデフォルトで 1 になるということがわかる。つまり、標準的な UDF は参照透過性を期待されていて、そうじゃない場合のみオーバーライドしろ、ということ。

このあたり、ちょっと関数型言語の香りがする。