Blogプログラミング・IT関連。知っていると便利なこと、気になって調査したこと、はまったけど解決できたことなど。レコード取得)を紹介しました。今回は、Queryに関する情報をまとめておきます。様々なqueryの動作を確認するために、予め10件程度のデータをデータベースに格納しておきます。以下、コードになります。"Gender"TemplateHaskellが生成したコードは、生成したのと同じmodule内で使用することはできないため、別ファイルで定義。()このプログラムを実行するとカレントディレクトリに10人分のデータが登録されたperson.dbというデータベースファイルが生成されます。PersonのリストをmapMで一括insertしています。IDを用いた単純な値(レコード)の取得:getIDに対応する値がMaybeでラップされて返される。値が存在しない場合はNothing。person.hsのmainに以下のコードを追加すれば、getの動作を確認できます。Personの内容を表示しています。idに1を指定すると"Michael"のデータが返されます。idに100を指定した場合は該当するレコードが存在しないためNothingが返されます。UNIQUE制約のキーを用いた値(レコード)の取得:getBygetとほぼ同じ。異なるのは以下の2点のみ。IDの代わりにUNIQUE制約フィールドを表すUnique値を用いるValueの代わりにIDとValueが格納されたEntityが返されるperson.hsのmainを以下のように書き換えると、getByの動作を確認できます。nooneprint_entityでEntityの内容を表示しています。"Cyndy"という名前でgetByした場合には"Cyndyl"のデータが返されます。value..."という文字列が出力されます。member(/<-.)AND/ORの表現AND:一つのリストの中にならべた条件はANDOR:リストとリストを(||.)で結ぶSelectOptソート条件(Asc/Desc)取得開始位置(OffsetBy)取得結果数(LimitTo)selectListのサンプルです。found厄年に該当する人を名前順に並べて取得して表示するコードです。GenderにMail/Femail以外を指定したり、PersonAgeに数値以外の型を指定するとコンパイル時の型チェックでエラーを検出してくれます。SQL直書きによる検索:rawQuerySQLを直に指定して検索することも可能です。[PersistValue]mainの中に以下のコードを追加するとSQLを直に与えて、結果を得ることができます。