SQL文の可変ORDER BY構文を変換する。
可変ORDER BY構文の仕様は下記のとおり。
$sort(フィールド名) {(ケース1)(ケース2)・・・(ケースn)}
ケース: ORDER BY句の切り替え候補を表す。
候補を一意に識別するソートIDとORDER BY句に指定する文字列(以降はケース本体と称す)を記述する。
どの候補にも一致しない場合に使用するデフォルトのケースには、ソートIDに"default"を指定する。
フィールド名: 検索条件オブジェクトからソートIDを取得する際に使用するフィールド名を表す。
ケース部分の仕様は下記のとおり。
- 各ケースは、ソートIDとケース本体を半角丸括弧で囲んで表現する。
- ソートIDとケース本体は、半角スペースで区切る。
- ソートIDには半角スペースを使用不可とする。ケース本体には半角スペースを使用できる。
- 括弧開き以降で最初に登場する文字列をソートIDとする。
- ソートID以降で括弧閉じまでの間をケース本体とする。
- ソートIDおよびケース本体はトリミングする。
検索条件オブジェクトからフィールド名で指定された値を取得し、
取得した値が一致するケースのケース本体をORDER BY句としてSQL文に追加する。
取得した値が一致するケースが存在しない、かつデフォルトのケースが存在する場合は、
デフォルトのケース本体をORDER BY句としてSQL文に追加する。
取得した値が一致するケースが存在しない、かつデフォルトのケースも存在しない場合は、
可変ORDER BY構文を削除しただけのSQL文を返す。
下記に例を示す。
デフォルトのケースを指定したSQL文の場合
SELECT * FROM USER WHERE USER_ID = :userId
$sort(sortId) {(1 USER_ID ASC) (2 USER_ID DESC) (3 USER_ID, KANJI_NAME ASC) (4 USER_ID, KANJI_NAME DESC) (default USER_ID ASC)}
sortId = 1:
SELECT * FROM USER WHERE USER_ID = :userId ORDER BY USER_ID ASC
sortId = 4:
SELECT * FROM USER WHERE USER_ID = :userId ORDER BY USER_ID, KANJI_NAME DESC
sortId = null:
SELECT * FROM USER WHERE USER_ID = :userId ORDER BY USER_ID ASC
デフォルトのケースを指定しないSQL文の場合
SELECT * FROM USER WHERE USER_ID = :userId
$sort(sortId) {(1 USER_ID ASC) (2 USER_ID DESC) (3 USER_ID, KANJI_NAME ASC) (4 USER_ID, KANJI_NAME DESC)}
sortId = null:
SELECT * FROM USER WHERE USER_ID = :userId