ExportXMLWordPrintable

    • Type: Improvement
    • Resolution: Fixed
    • Priority: Major
    • Component/s: None
    • None

      sequenceDefinitionMapで明示的に指定することで
      利用できるようにする。

      ; MEMBER = SEQ_MEMBER:dfcache(50)
      ; PURCHASE = SEQ_PURCHASE:dfcache()
      

      <前提>
      シーケンスのインクリメントを[50]にする方式:incrementWay
      シーケンスを一回のSQLで[50]回取得する方式:batchWay

      <基本>
      o dfcache()を指定しない限りキャッシュはしない
      o どんな状況であれ "cacheSize" が "1" 以下なら明示的な例外
      o decrementはキャッシュ機能をサポートしない(実行時例外)
      o serial型(PostgreSQL)でも明示的にdfpropに指定すれば利用可能

      <cacheSize省略 ":dfcache()" の場合>
      メタ情報から取得した "incrementSize" を "cacheSize" とし、
      "incrementWay" でキャッシュ処理する。
      ("incrementSize" が "1" 以下なら例外)

      <cacheSize指定 ":dfcache(50)" の場合>
      メタ情報から取得した "incrementSize" と指定された "cacheSize"
      が、一致していれば "incrementWay" でキャッシュ処理をする。
      一致してなくて "cacheSize / incrementSize" で割り切れる場合は、
      一回のシーケンス取得でunionを利用して "割った数の分をincrement" し、
      "batchWay" でキャッシュ処理をする。割り切れない場合は例外。

      そもそもメタ情報から "incrementSize" を取得できないDBMSの場合は、
      一致していることが大前提となり、"incrementWay" のみでキャッシュ処理する。
      (サポートしているDBは基本的にOK)

      そもそも一回のシーケンス取得でunionを利用することができないDBMSの場合は、
      一致していることが大前提となり、"incrementWay" のみでキャッシュ処理する。
      (DB2のみ...これはいいかな、仕方ない)
      但し、ズレは明示的な例外になるので恐れることはない

      <特徴>
      incrementSizeを取得できるDBMSなら、設定のズレによる変な動きはしない。
      何かがズレている場合は、自動生成時もしくは実行時に例外になる。
      さらに、incrementSizeが "1" のままでキャッシュを利用可能。

      <その他>
      PostgreSQLでincrementSizeが取得できていなかったのですが、
      "pgsql-jp: 40143" にて教えて頂きました(ありがとうございます)。
      "information_schema" からはやはり取得できなくて、
      "select increment_by from [sequence]" と実行することで取得できました。

            Assignee:
            jflute
            Reporter:
            jflute
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: