-
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]" と実行することで取得できました。