|
|
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Objectjavax.servlet.jsp.tagext.TagSupport
javax.servlet.jsp.tagext.BodyTagSupport
org.opengion.hayabusa.taglib.CommonTagSupport
org.opengion.hayabusa.taglib.TableMergeTag
public class TableMergeTag
2つの DBTableModel の 集合処理を行うタグです。 マスタとスレーブのそれぞれの DBTableModel を取得し、マージ、差分、排他などの データ処理を行います。結果を、指定の tableId と scope に書き出します。 マスタテーブルは、masterTableId と masterScope より取り出します。スレーブテーブルは、 slaveTableId と slaveScope より取り出します。 取り出された DBTableModel は、マスタテーブルに対して、スレーブテーブル情報を参照する形で行われ、 結果はマスタテーブルに上書きされる形で行われます。 指定できるアクションは、全体集合(UNION_ALL)、和集合(UNION)、積集合(INTERSECT)、 差集合(MINUS)、差分集合(DIFFERENCE)、列合成(UNION_CLM)、 列追加(ADD_CLM)、 グループ(GROUP)です。 列合成と列追加、グループ以外の処理では、カラム順とカラム数は同数でなければなりません。 primaryKeys や unionClms などの指定のキー名は、マスタテーブルに存在する必要があります。 マスタテーブルと同じカラム番号でスレーブテーブルよりデータを読み出します。 (カラム名や属性は、異なってもかまいませんが、マスタテーブルに準拠します。) また、単独(マスタテーブルのみ)で、和集合と同等の、グループ(GROUP)を使用すると、指定の カラムでのユニーク化を行うことが可能になります。グループ処理では、先行優先とし、 2回目に現れた情報を削除することになります。グループ が指定された場合は、 スレーブテーブルは無視されます。いずれの処理においても、集合処理を行う主キーで 一旦グループ化されます。全体集合(UNION_ALL)で処理する場合でも、主キーがユニークで ない場合は、マスター、スレーブの各テーブルで一旦グループ化された後で、マージされます。 (マージ後には、同一主キーを持つ行は存在します。) 全体集合(UNION_ALL)の場合のみ、mergeKeys を指定する必要はありません。その場合は、 キーなしのため、マスターとスレーブのテーブルを単に合成するだけになります。 処理前後でのDBTableModelの件数は、以下の変数で取得することが可能です。 処理前のマスターテーブル : {@DB.MASTER_COUNT} 処理前のスレーブテーブル : {@DB.SLAVE_COUNT} 処理後 : {@DB.COUNT}
●形式: ・<og:tableMerge action = "UNION_ALL|UNION|INTERSECT|MINUS|DIFFERENCE|UNION_CLM|ADD_CLM|GROUP|UNION_SELROW" tableId = "DEFAULT" 出力テーブルの tableId scope = "session" 出力テーブルの scope masterTableId = "DEFAULT" マスタテーブルの tableId masterScope = "session" マスタテーブルの scope slaveTableId = "DEFAULT" スレーブテーブルの tableId slaveScope = "request" スレーブテーブルの scope masterKeys = "AA,BB,CC" マスタテーブルの集合処理を行う主キー slaveKeys = "AA,BB,CC" スレーブテーブルの集合処理を行う主キー(null時=masterKeys) diffKeys = "DD,EE" マスタテーブルのDIFFERENCE時の差分カラム名 unionClms = "DD,EE" UNION_CLM,ADD_CLM時にスレーブからマスタへ追加するカラム名 modifyClms = "FF,GG" DIFFERENCE時にスレーブからマスタへ値を更新するカラム名 noSideEffect = "false" テーブルモデルに対する副作用(true:ない/false:ある) useDiffData = "true" DIFFERENCE時に差分のスレーブデータを追加するかどうか useCheckOnly = "false" マスタテーブルの選択行のデータのみを対象に処理を行うかどうか display = "true" 処理概要を表示するかどうか /> ●body:なし ●使用例 例1)デフォルト以外に必要な属性のみ指定するサンプル <og:tableMerge action="UNION" slaveScope = "request" masterKeys = "AA,BB,CC" /> ・出力先、マスターともに初期値は、tableId="DEFAULT" scope="session" です。 スレーブは、tableId か scope をける必要がある為、scope="request" を指定しています。 比較するカラム名は、マスタ、スレーブ同じであれば、マスタのみ指定でかまいません。 例2)マスタ、スレーブともメモリに残らないように request で作成します。 <og:tableMerge action="INTERSECT" masterScope = "request" slaveScope = "request" slaveTableId = "SLAVE" masterKeys = "AA,BB,CC" /> ・マスタ、スレーブともメモリに残らないように request で作成した場合は、 どちらかの TableId を変える必要があります。 出力先は初期値の、tableId="DEFAULT" scope="session" です。
3.8.0.9 (2005/10/17) 新規追加 |
フィールドの概要 | |
---|---|
static java.lang.String |
ACT_ADD_CLM
action 引数に渡す事の出来る アクションコマンド 列合成"ADD_CLM" |
static java.lang.String |
ACT_DIFFERENCE
action 引数に渡す事の出来る アクションコマンド 差分集合"DIFFERENCE" |
static java.lang.String |
ACT_GROUP
action 引数に渡す事の出来る アクションコマンド グループ "GROUP" |
static java.lang.String |
ACT_INTERSECT
action 引数に渡す事の出来る アクションコマンド 積集合 "INTERSECT" |
static java.lang.String |
ACT_MINUS
action 引数に渡す事の出来る アクションコマンド 差集合"MINUS" |
static java.lang.String |
ACT_UNION
action 引数に渡す事の出来る アクションコマンド 和集合 "UNION" |
static java.lang.String |
ACT_UNION_ALL
action 引数に渡す事の出来る アクションコマンド 全体集合 "UNION_ALL" |
static java.lang.String |
ACT_UNION_CLM
action 引数に渡す事の出来る アクションコマンド 列合成"UNION_CLM" |
static java.lang.String |
ACT_UNION_SELROW
action 引数に渡す事の出来る アクションコマンド グループ "UNION_SELROW" |
static java.lang.String |
CMD_NEW
command 引数に渡す事の出来る コマンド 新規 "NEW" |
static java.lang.String |
CMD_RENEW
command 引数に渡す事の出来る コマンド 再検索 "RENEW" |
クラス javax.servlet.jsp.tagext.BodyTagSupport から継承されたフィールド |
---|
bodyContent |
クラス javax.servlet.jsp.tagext.TagSupport から継承されたフィールド |
---|
id, pageContext |
インタフェース javax.servlet.jsp.tagext.BodyTag から継承されたフィールド |
---|
EVAL_BODY_BUFFERED, EVAL_BODY_TAG |
インタフェース javax.servlet.jsp.tagext.IterationTag から継承されたフィールド |
---|
EVAL_BODY_AGAIN |
インタフェース javax.servlet.jsp.tagext.Tag から継承されたフィールド |
---|
EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE |
コンストラクタの概要 | |
---|---|
TableMergeTag()
|
メソッドの概要 | |
---|---|
int |
doEndTag()
Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 |
protected void |
release2()
タグリブオブジェクトをリリースします。 |
void |
setAction(java.lang.String action)
【TAG】アクションを指定します(UNION_ALL|UNION|INTERSECT|MINUS|DIFFERENCE|UNION_CLM|ADD_CLM|GROUP|UNION_SELROW)。 |
void |
setCommand(java.lang.String cmd)
【TAG】コマンド(NEW,RENEW)をセットします(初期値:NEW)。 |
void |
setDiffKeys(java.lang.String diffKeys)
【TAG】マスタテーブルのDIFFERENCE時の差分カラム名を(CSV形式)指定します。 |
void |
setDisplay(java.lang.String flag)
【TAG】マージの結果を表示するかどうかを指定します(初期値:true)。 |
void |
setMasterKeys(java.lang.String masterKeys)
【TAG】マスタテーブルの集合処理を行う主キーを指定します。 |
void |
setMasterScope(java.lang.String masterScope)
【TAG】マスタテーブルのscopeを指定します(初期値:session)。 |
void |
setMasterTableId(java.lang.String masterTableId)
【TAG】マスタテーブルのtableIdを指定します(初期値:HybsSystem.TBL_MDL_KEY)。 |
void |
setModifyClms(java.lang.String modifyClms)
【TAG】スレーブからマスタへ値を更新するカラム名をCSV形式で指定します。 |
void |
setNoSideEffect(java.lang.String noSideEffect)
【TAG】テーブルモデルに対する副作用(true:ない/false:ある)を指定します(初期値:false:ある)。 |
void |
setScope(java.lang.String scope)
【TAG】出力先のscopeを指定します(初期値:session)。 |
void |
setSlaveKeys(java.lang.String slaveKeys)
【TAG】スレーブテーブルの集合処理を行う主キーを指定します。 |
void |
setSlaveScope(java.lang.String slaveScope)
【TAG】スレーブテーブルのscopeを指定します(初期値:session)。 |
void |
setSlaveTableId(java.lang.String slaveTableId)
【TAG】スレーブテーブルのtableIdを指定します(初期値:HybsSystem.TBL_MDL_KEY)。 |
void |
setTableId(java.lang.String tableId)
【TAG】出力先のtableIdを指定します(初期値:HybsSystem.TBL_MDL_KEY)。 |
void |
setUnionClms(java.lang.String unionClms)
【TAG】スレーブからマスタへ追加するカラム名をCSV形式で指定します。 |
void |
setUseCheckOnly(java.lang.String flag)
【TAG】マスタテーブルの選択行のデータのみを対象に処理を行うかどうかを指定します(初期値:false)。 |
void |
setUseDiffData(java.lang.String flag)
【TAG】差分のスレーブデータを結果テーブルに追加するかどうかを指定します(初期値:true)。 |
java.lang.String |
toString()
このオブジェクトの文字列表現を返します。 |
クラス javax.servlet.jsp.tagext.BodyTagSupport から継承されたメソッド |
---|
doInitBody, getBodyContent, getPreviousOut, release, setBodyContent |
クラス javax.servlet.jsp.tagext.TagSupport から継承されたメソッド |
---|
findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
インタフェース javax.servlet.jsp.tagext.Tag から継承されたメソッド |
---|
getParent, setPageContext, setParent |
フィールドの詳細 |
---|
public static final java.lang.String ACT_UNION_ALL
public static final java.lang.String ACT_UNION
public static final java.lang.String ACT_INTERSECT
public static final java.lang.String ACT_MINUS
public static final java.lang.String ACT_DIFFERENCE
public static final java.lang.String ACT_UNION_CLM
public static final java.lang.String ACT_ADD_CLM
public static final java.lang.String ACT_GROUP
public static final java.lang.String ACT_UNION_SELROW
public static final java.lang.String CMD_NEW
public static final java.lang.String CMD_RENEW
コンストラクタの詳細 |
---|
public TableMergeTag()
メソッドの詳細 |
---|
public int doEndTag()
javax.servlet.jsp.tagext.Tag
内の doEndTag
CommonTagSupport
内の doEndTag
4.3.2.0 (2008/09/11) UNION_SELROWアクション対応 |
4.3.3.0 (2008/10/01) 処理前後のテーブル件数を取得できるようにする |
4.3.3.1 (2008/10/08) スレーブのnullチェック追加 |
protected void release2()
CommonTagSupport
内の release2
public void setCommand(java.lang.String cmd)
cmd
- コマンド(public static final 宣言されている文字列)コマンドは,HTMLから(get/post)指定されますので,CMD_xxx で設定される フィールド定数値のいづれかを、指定できます。 初期値は NEW です。 |
public void setAction(java.lang.String action)
action
- アクション(UNION_ALL|UNION|INTERSECT|MINUS|DIFFERENCE|UNION_CLM|ADD_CLM|GROUP|UNION_SELROW)指定できるアクションは、全体集合(UNION_ALL)、全体集合(挿入位置指定)(UNION_SELROW)、和集合(UNION)
、積集合(INTERSECT)、差集合(MINUS)、差分集合(DIFFERENCE)、列合成(UNION_CLM)、列追加(ADD_CLM)、 グループ(GROUP)です。
列合成とグループ以外の処理では、カラム順とカラム数は同数でなければなりません。
primaryKeys や unionClms などの指定のキー名は、マスタテーブルに存在する必要があります。
マスタテーブルと同じカラム番号でスレーブテーブルよりデータを読み出します。
(カラム名や属性は、異なってもかまいませんが、マスタテーブルに準拠します。)
また、単独(マスタテーブルのみ)で、和集合と同等の、グループ(GROUP)を使用すると、指定の
カラムでのユニーク化を行うことが可能になります。グループ処理では、先行優先とし、
2回目に現れた情報を削除することになります。グループ が指定された場合は、
スレーブテーブルは無視されます。いずれの処理においても、集合処理を行う主キーで
一旦グループ化されます。全体集合(UNION_ALL)で処理する場合でも、主キーがユニークで
ない場合は、マスター、スレーブの各テーブルで一旦グループ化された後で、マージされます。
(マージ後には、同一主キーを持つ行は存在します。)
全体集合(UNION_ALL)の場合のみ、mergeKeys を指定する必要はありません。その場合は、
キーなしのため、マスターとスレーブのテーブルを単に合成するだけになります。
|
public void setTableId(java.lang.String tableId)
tableId
- 出力先のtableId集合処理結果の DBTableModel をメモリにセットする場合のキー(tableId)を指定します。 初期値は、HybsSystem.TBL_MDL_KEY です。 |
public void setScope(java.lang.String scope)
CommonTagSupport
内の setScope
scope
- 出力先のscope集合処理結果の DBTableModel をメモリにセットする場合のスコープを指定します。 ここでは、マスタやスレーブのスコープ設定が必要な為、superクラスのメソッドを オーバーライドしてこのオブジェクト内でキープしています。 初期値は、session です。 |
public void setMasterTableId(java.lang.String masterTableId)
masterTableId
- マスタテーブルのtableId集合処理のマスタとなる DBTableModel をメモリから取り出す場合のキー(tableId)を指定します。 初期値は、HybsSystem.TBL_MDL_KEY です。 |
public void setMasterScope(java.lang.String masterScope)
masterScope
- マスタテーブルのscope集合処理のマスタとなる DBTableModel をメモリから取り出す場合のスコープを指定します。 初期値は、session です。 |
public void setMasterKeys(java.lang.String masterKeys)
masterKeys
- マスタテーブルの主キーをCSV形式で指定集合処理を行う場合の、カラム名を、カンマ区切り文字(CSV形式)で指定します。 このキーの組み合わせを元に、集合処理の突合せを行います。 なお、アクションがグループ(GROUP)以外の処理では、マスタとスレーブのカラム数と 並び順は、同じでなければなりません。カラム名は、各々別々でもかまいません。 アクションが全体集合(UNION_ALL)以外の場合は、必須属性になります。 |
public void setSlaveKeys(java.lang.String slaveKeys)
slaveKeys
- スレーブテーブルの主キーをCSV形式で指定集合処理を行う場合の、カラム名を、カンマ区切り文字(CSV形式)で指定します。 このキーの組み合わせを元に、集合処理の突合せを行います。 なお、アクションがグループ(GROUP)以外の処理では、マスタとスレーブのカラム数と 並び順は、同じでなければなりません。カラム名は、各々別々でもかまいません。 null の場合は、masterKeys と同じとします。 |
public void setDiffKeys(java.lang.String diffKeys)
diffKeys
- マスタテーブルの差分カラム名をCSV形式で指定setMasterKeys( String )
アクションが差分処理(DIFFERENCE)の場合に、差分チェックを行うカラム名を、 カンマ区切り文字(CSV形式)で指定します。 差分処理とは、masterKeys で指定されたキーでは、マスタ、スレーブともに存在し かつ、このキー(diffKeys)で指定されたキーの値が異なるマスタレコードを 抜き出します。 つまり、主キーは存在し、属性が異なる情報のピックアップになりますので、 データ更新(UPDATE)対象を見つける場合に使用できます。 アクションが差分処理(DIFFERENCE)の場合は、必須属性になります。 |
public void setSlaveTableId(java.lang.String slaveTableId)
slaveTableId
- スレーブテーブルのtableId集合処理のスレーブとなる DBTableModel をメモリから取り出す場合のキー(tableId)を指定します。 なお、アクションがグループ(GROUP)の場合は、スレーブテーブルは使用されません。 初期値は、HybsSystem.TBL_MDL_KEY です。 |
public void setSlaveScope(java.lang.String slaveScope)
slaveScope
- スレーブテーブルのscope集合処理のスレーブとなる DBTableModel をメモリから取り出す場合のスコープを指定します。 なお、アクションがグループ(GROUP)の場合は、スレーブテーブルは使用されません。 初期値は、session です。 |
public void setUnionClms(java.lang.String unionClms)
unionClms
- 列合成するカラム名をCSV形式で指定アクションが列合成(UNION_CLM)または列追加(ADD_CLM)の場合に使用されます。 列合成(UNION_CLM)は、マスタとスレーブの主キーに対して、ここで指定のスレーブの カラム列名を、マスタの列に追加します。主キーがマッチしない行に関しては、 カラムの初期値が適用されたデータを作成します。 列追加(ADD_CLM)は、マスタテーブルに指定のカラムを追加するだけです、スレーブテーブルは 参照しません。よって、主キーも指定不要です。 |
public void setModifyClms(java.lang.String modifyClms)
modifyClms
- 値を更新するカラム名をCSV形式で指定アクションが差分処理(DIFFERENCE)の場合に、結果にマスタテーブルが抜き出されますが、 更新する場合に、スレーブ特有のユニークキー(例:UNIQ)を用いて更新する場合、 指定のカラム値は、スレーブの値にセットしておきたい場合があります。 ここでは、指定のカラムについて、値だけスレーブからマスタへセットします。 なお、値の更新については、マスタとスレーブが同一キーという制約があります。 |
public void setNoSideEffect(java.lang.String noSideEffect)
noSideEffect
- テーブルモデルに対する副作用(true:ない/false:ある)すべての処理で、DBTableModel に対して、ユニーク化やグループ化などの集合処理を 行う過程で、マスタテーブルに対して直接処理を行うと、副作用が発生します。 同様に、スレーブテーブルにおいても、一旦キー列でグループ化されるため、副作用が 発生します。これは、無駄なメモリ領域の確保と、テーブル(マスタ、スレーブとも)の コピー処理時間の節約になります。初期値の設定も副作用がある状態になっています。 ところが、都合によっては、色々な action を連続して行いたい場合など、毎回、 データベースを検索するよりもメモリ上でコピーしたほうが都合がよいケースでは、 副作用が出ないように、noSideEffect="true" に設定します。 ただし、マスタ、スレーブともテーブルをコピーを行い、結果のテーブルも派生する為、 通常、2つの領域(マスタと結果は同じテーブルに書かれる)で良い所を、5つの領域が 作成されます。 初期値は、副作用がある(noSideEffect="false")です。 |
public void setUseDiffData(java.lang.String flag)
flag
- String スレーブデータを結果テーブルに追加するかどうか(初期値:true)アクションが差分処理(DIFFERENCE)の場合に、結果にマスタテーブルが抜き出されますが、 差分対象のスレーブデータと比較したい場合があります。 このフラグを true にセットすると、書込み禁止属性が付いた状態で、スレーブデータが 結果テーブルに追加されます。 なお、この処理では、通常と異なり、マスタテーブルにはグループ化の副作用は発生しますが、 結果テーブルは新規に作成され、先頭行に必ず WRITABLE カラムが付加されます。 初期値は、true:追加する です。 |
public void setUseCheckOnly(java.lang.String flag)
flag
- String マスタテーブルの選択行のデータのみを対象に処理を行うかどうか(初期値:false)処理対象のマスタテーブルについて、選択行が指定された場合に、選択行のみを処理対象に するか、全件を対象にするかを指定します。 積集合や差分集合など通常は、全件を対象にすることになりますが、列合成や列追加など、 マスタテーブルに対してのみ作用を及ぼす処理では、選択行のみを対象に処理を行う事が 考えられます。その場合、初期グループ化と同じで、対象とする行が選択行のみになります。 初期値は、false:全件対象 です。 |
public void setDisplay(java.lang.String flag)
flag
- String 接続の結果を表示するかどうか(初期値:false)true で、マージ結果を表示します。 false では、何も表示しません(初期値:true) マスタテーブルの件数は、通常、キーでグループ化されるため、入力件数と異なります。 同様に、スレーブ件数も異なります。結果の件数は、処理結果が現実的かどうかの 判断に使用されます。 初期値は、true:表示する です。 |
public java.lang.String toString()
CommonTagSupport
内の toString
|
openGion 5.1.1.2 | ||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |