ARの定義

active_record.rb
ActiveRecord::Base.class_eval
  include ...
end

active_record.rbはこうなってます。
正直、ぱっと見何やってんのかわからなかった。
なぜ、下のような定義ではないのか。

class ActiveRecord::Base
  include ...
end


(そうぞう)
クラスのincludeはオブジェクトを生成する時点で呼ばれて、
moduleのメソッドが使えるオブジェクトを生成するのではないだろか。
includeしたmoduleのメソッドはオブジェクトからしか使えない。
えっと、つまりincludeしたmoduleのメソッドはインスタンスメソッドになる。


でも、includeしたmoduleのメソッドをクラスメソッドにしたかったから、
クラスを定義した時点でincludeを実行して(class_eval)、includeが実行されたときに呼ばれるmodule側で
self.append_features(base)が実行されて、このappend_featuresの中で呼んだクラスのクラスメソッドとしている。
というような気がするけど意識朦朧。


こちらこちらを参考にしました。

ファンクション・ベース索引

ファンクション・ベース索引を使う際に設定しておかなければならない初期化パラメータのことを忘れていた。

ファンクション・ベース索引を使用するためには、以下の設定を行うか、
SQL中に明示的にHINT句を指定する必要があります。

初期化パラメータ「QUERY_REWRITE_ENABLED=TRUE」、初期化パラメータ
「QUERY_REWRITE_INTEGRITY=ENFORCED」 注1 
初期化パラメータ「COMPATIBLE」が8.1以上 
索引が作成された表の統計情報が取得され、コストベースのアプローチを使用する 
注1:初期化パラメータ 
SQL関数を使用したファンクション・ベース索引の場合には、
デフォルト値(ENFORCED)でも使用できます。
しかし、ユーザー定義関数を使用したファンクション・ベース索引の場合には、
「QUERY_REWRITE_INTEGRITY=TRUSTED」と設定した場合のみ使用できます。 


こちらから。