アプリケーションのバックエンドでもUDFを利用します。UDFを利用することでコードが読みやすくなるからです。リスト6のset_class_id()関数は毎回異なる値を交互に返す関数です。
リスト6(再掲)
//SQLite用の関数
function set_class_id(){
static $x = 0;
$class = 'unshaded';
if(($x % 2) == 0){
$class = "shaded";
}
$x++;
return $class;
}
...
$db = new SQLiteDatabasePlus('../dbdir/resources.sqlite');
$db->createFunction('class_id','set_class_id',0);
$sql = "SELECT id, url, email, ".
"(precedingcopy || '' || linktext || ' ' || ".
"followingcopy) ".
"AS copy , linktext, reviewed, class_id() ".
"AS classid ".
"FROM tblresources ".
"ORDER BY id DESC ".
"LIMIT $recordoffset,". PERPAGE;
//arrayQuery()メソッドの使用
$resultarray = $db->arrayQuery($sql);
...
この値をtrタグのid要素として使用すると影付きかどうかを指定することができるので、テーブルの行のデザインを交互に変えることが簡単にできます。この処理についてもPHPで処理するよりもずっとわかりやすく、コードが見やすくなります。UDFは簡単に使えるので、非常によく使うことになるでしょう。
UDFをデータベースに永続的に追加するということではできませんが、SQLiteの関数の少なさ、特に日付関係の関数の少なさをカバーすることができるでしょう。実際に、筆者が作成したビューでは日付の引き算は簡単に実装されています。というのも上記の例で出てきたSUBDATE()関数のように特有のシンタックスなどが含まれないからです。
|