Class VariableOrderBySyntaxConvertor

java.lang.Object
nablarch.core.db.statement.sqlconvertor.SqlConvertorSupport
nablarch.core.db.statement.sqlconvertor.VariableOrderBySyntaxConvertor
All Implemented Interfaces:
SqlConvertor

public class VariableOrderBySyntaxConvertor extends SqlConvertorSupport
SQL文の可変ORDER BY構文を変換するクラス。
  • Constructor Details

    • VariableOrderBySyntaxConvertor

      public VariableOrderBySyntaxConvertor()
  • Method Details

    • convert

      public String convert(String sql, Object obj)
      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
       
       
      Parameters:
      sql - SQL文
      obj - 検索条件をもつオブジェクト
      Returns:
      可変ORDER BY構文を変換したSQL文