C++用 O/Rマッパー Template. [詳解]
#include <trdormapi.h>
公開型 | |
typedef std::vector < boost::shared_ptr< T > > | collection_vec_type |
公開メンバ関数 | |
activeObject (idatabaseManager *mgr) | |
activeObject (database_ptr &db, short mode=TD_OPEN_NORMAL) | |
activeObject (idatabaseManager *mgr, const _TCHAR *tableName) | |
activeObject (database_ptr &db, const _TCHAR *tableName, short mode=TD_OPEN_NORMAL) | |
activeObject (database *db, const _TCHAR *tableName, short mode=TD_OPEN_NORMAL) | |
activeObject (database_ptr &db, short tableIndex, short mode=TD_OPEN_NORMAL) | |
activeObject (database *db, short tableIndex, short mode=TD_OPEN_NORMAL) | |
~activeObject () | |
activeObject & | alias (const _TCHAR *src, const _TCHAR *dst) |
void | del () |
template<class T2 > | |
void | del (T2 &mdl, bool setKeyValueFromObj=true) |
table::eFindType | direction (const pq_handle &q) |
table::eFindType | direction (const queryBase &q) |
activeObject & | index (int v) |
template<class T2 > | |
void | insert (T2 &mdl) |
template<class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 > | |
activeObject & | keyValue (const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4, const T5 kv5, const T6 kv6, const T7 kv7) |
activeObject & | option (int v) |
pq_handle | prepare (queryBase &q, bool serverPrepare=false) |
template<class Query > | |
activeObject & | read (collection_vec_type &mdls, Query &q, validationFunc func) |
template<class Query > | |
activeObject & | read (collection_vec_type &mdls, Query &q) |
template<class Container , class Query > | |
activeObject & | read (Container &mdls, Query &q) |
template<class Container , class Query > | |
activeObject & | read (Container &mdls, Query &q, validationFunc func) |
template<class T2 > | |
void | read (T2 &mdl, bool setKeyValueFromObj=true) |
template<class Container > | |
void | readEach (Container &mdls, queryBase &q, bool sorted=false, bzs::rtl::exception *e=NULL) |
template<class BaseContainer , class T2 > | |
void | readEach (BaseContainer &mdls, T *(T2::*func)() const, queryBase &q) |
template<class BaseContainer , class T2 > | |
void | readEach (BaseContainer &mdls, T *(T2::*func)() const, queryBase &q, bzs::rtl::exception &e) |
template<class Container > | |
void | readEach (Container &mdls, bool sorted=false, bzs::rtl::exception *e=NULL) |
template<class BaseContainer , class T2 > | |
void | readEach (BaseContainer &mdls, T *(T2::*func)() const) |
template<class BaseContainer , class T2 > | |
void | readEach (BaseContainer &mdls, T *(T2::*func)() const, bzs::rtl::exception &e) |
template<class Any_Map_type , class Query > | |
activeObject & | readMap (Any_Map_type &map, Query &q) |
template<class Any_Map_type , class Query > | |
activeObject & | readMap (Any_Map_type &map, Query &q, validationFunc func) |
template<class Any_Map_type > | |
activeObject & | readMapMore (Any_Map_type &map) |
activeObject & | readMore (collection_vec_type &mdls) |
template<class Container > | |
activeObject & | readMore (Container &mdls) |
activeObject & | resetAlias () |
template<class T2 > | |
void | save (T2 &mdl, bool setKeyValueFromObj=true) |
table_ptr | table () const |
template<class T2 > | |
void | update (T2 &mdl, bool setKeyValueFromObj=true) |
限定公開変数類 | |
fdNmaeAlias | m_alias |
FDI * | m_fdi |
MAP | m_map |
int | m_option |
table_ptr | m_tb |
C++用 O/Rマッパー Template.
テーブルの更新や読み取り結果を、ユーザー定義のクラスとそのコレクションを通じて行えるようにします。
このテンプレートを使用するには、ユーザー定義のクラスとそのコレクションに合わせた以下の2つのクラスが必要です。
それぞれのクラスの詳細は ___ を参照してください。
std::vector< boost::shared_ptr< T > > collection_vec_type |
読み取りオペレーションの結果を返す、汎用コレクション型。
使用できるコレクション型はこの型に限りません。
|
inlineexplicit |
コンストラクタ。 idatabaseManager を渡して生成します。内部では idatabaseManager::table() を使用してテーブルを生成します。
テーブル名は MAP::getTableName() 関数で取得されます。
mgr | idatabaseManager 型のインスタンスで idatabaseManager::table() でテーブルが取得可能な状態で渡します。 |
|
inlineexplicit |
コンストラクタ。 database_ptr を渡して生成します。
テーブル名は MAP::getTableName() 関数で取得されます。
db | database_ptr 型のインスタンスでデータベースをオープン済みの状態で渡します。 |
mode | テーブルがオープンされる際に使用するモードを指定します。 |
|
inlineexplicit |
コンストラクタ。 idatabaseManager を渡して生成します。内部では idatabaseManager::table() を使用してテーブルを生成します。
テーブル名はtableNameで直接指定されたものが使用されます。
mgr | idatabaseManager 型のインスタンスで idatabaseManager::table() でテーブルが取得可能な状態で渡します。 |
tableName | このオブジェクトで使用するテーブル名を指定します。 |
|
inlineexplicit |
コンストラクタ。 database_ptr を渡して生成します。
テーブル名はtableNameで直接指定されたものが使用されます。
db | database_ptr 型のインスタンスでデータベースをオープン済みの状態で渡します。 |
tableName | このオブジェクトで使用するテーブル名を指定します。 |
mode | テーブルがオープンされる際に使用するモードを指定します。 |
|
inlineexplicit |
コンストラクタ。 database* を渡して生成します。
テーブル名はtableNameで直接指定されたものが使用されます。
db | database* 型のインスタンスでデータベースをオープン済みの状態で渡します。 |
tableName | このオブジェクトで使用するテーブル名を指定します。 |
mode | テーブルがオープンされる際に使用するモードを指定します。 |
|
inlineexplicit |
コンストラクタ。 database_ptr を渡して生成します。
テーブルはtableIndexで直接指定されたものが使用されます。
db | database_ptr 型のインスタンスでデータベースをオープン済みの状態で渡します。 |
tableIndex | このオブジェクトで使用するテーブル番号を指定します。 |
mode | テーブルがオープンされる際に使用するモードを指定します。 |
|
inlineexplicit |
コンストラクタ。 database* を渡して生成します。
テーブルはtableIndexで直接指定されたものが使用されます。
db | database* 型のインスタンスでデータベースをオープン済みの状態で渡します。 |
tableIndex | このオブジェクトで使用するテーブル番号を指定します。 |
mode | テーブルがオープンされる際に使用するモードを指定します。 |
|
inline |
デストラクタ。
|
inline |
フィールド名の別名をセットします。
複数の別名を定義するには、この関数を繰り返し呼び出してください。
O/Rマップの場合MAPクラス内でフィールドとメンバのマップがされるため、aliasは使用されません。ただし、query が渡される場合に、そこで使用されるフィールド名に別名を指定することができるようになります。
また、別名を指定した場合、query で元の名前を使用することはできません。
src | 既存のフィールド名を指定します。 |
dst | 別名を指定します。 |
|
inline |
keyValue() でセットされたキー値のレコードを削除します。
エラーが発生すると、bzs::rtl::exception がスローされます。
|
inline |
mdlで指定したオブジェジェクトから読み取ったキー値のレコードを削除します。 setKeyValueFromObjがfalseの場合は、 keyValue() でセットされたキー値のレコードを削除します。
どちらの場合も削除前にmdlにレコードを読み取ります。
mdl | 削除するキー値の入ったオブジェクトを指定します。 |
setKeyValueFromObj | レコードの検索にに際し、trueの場合はmdlのキー値を使用します。falseの場合は keyValue() でセットされたキー値を使用します。 |
|
inline |
qで指定されたクエリーの検索方向を返します。
|
inline |
qで指定されたクエリーの検索方向を返します。
|
inline |
この後のオペレーションで使用される、テーブルのインデックス番号をセットします。
v | テーブルのインデックス番号 |
|
inline |
mdlで指定したオブジェジェクトの内容をテーブルにインサートします。
エラーが発生すると、bzs::rtl::exception がスローされます。
mdl | インサートする内容を持つオブジェクトを指定します。 |
|
inline |
index() で指定したキー値をセットします。マルチセグメントキーの場合は、セグメントの順番どおりに左のパラメータから順に、必要な分だけ値をセットします。引数はテンプレートで table::setFV() 関数でオーバーロードされた型を使用できます。
引数はマルチセグメントキーの最大セグメント数である8個まで指定できます。セグメント数以上の必要のない部分は省略可能です。
|
inline |
オプションをセットします。このオプションは readMap() の実装からMAP::init() の最初のパラメータとして渡されます。
MAP内でユーザーの指示した異なる振る舞いなどを実装できます。
このクラス内でこの値が使用されることはありません。
v | オプションの値 |
|
inline |
クエリーをキャッシュして、使用時に識別するプリペアードクエリーハンドルを返します。
[in] | q | あらかじめ、条件を指定したクエリーをセットします。条件の値には後で値をセットするプレースホルダとして"?"を複数使用することができます。 |
[in] | serverPrepare | このクエリーをサーバーにキャッシュするかどうかを指定します。 falseを指定するとクライアント側でのみキャッシュします。 |
|
inline |
read(Container &mdls, Query &q) のオーバーロードです。
activeObject::collection_vec_type 型のコレクションに qで指定された読み取りクエリーまたはプリペアードクエリーの結果を返します。
また、func で指定されたクライアントフィルターでレコードをフィルタリングします。
事前に index() および keyValue() を使ってインデックス番号と読み取り開始位置を示すキー値を設定しておく必要があります。
activeObject::collection_vec_typeはvectorの汎用コレクションです。
mdls | 結果を受け取るコレクションを指定します。 |
q | 読み取りクエリーまたはプリペアードクエリーを指定します。この処理はサーバー側で行われるフィルタリングです。 |
func | ユーザー定義型のクライアントフィルターを指定します。内部では filterdFindIterator クラスが使用されます。フィルター関数の詳細は filterdFindIterator を参照してください。 |
|
inline |
read(Container &mdls, Query &q) のオーバーロードです。
activeObject::collection_vec_type 型のコレクションに qで指定された読み取りクエリーまたはプリペアードクエリーの結果を返します。
事前に index() および keyValue() を使ってインデックス番号と読み取り開始位置を示すキー値を設定しておく必要があります。
activeObject::collection_vec_typeはvectorの汎用コレクションです。
mdls | 結果を受け取るコレクションを指定します。 |
q | 読み取りクエリーまたはプリペアードクエリーを指定します。この処理はサーバー側で行われるフィルタリングです。 |
|
inline |
Container 型のコレクションに qで指定された読み取りクエリーまたはプリペアードクエリーの結果を返します。
事前に index() および keyValue() を使ってインデックス番号と読み取り開始位置を示すキー値を設定しておく必要があります。
Containerは、vectorではないユーザーオリジナルコレクションです。
mdls | 結果を受け取るコレクションを指定します。 |
q | 読み取りクエリーまたはプリペアードクエリーを指定します。この処理はサーバー側で行われるフィルタリングです。 |
|
inline |
read(Container &mdls, Query &q) のオーバーロードです。
Container 型のコレクションに qで指定された読み取りクエリーまたはプリペアードクエリーの結果を返します。
また、func で指定されたクライアントフィルターでフィルタリングします。
事前に index() および keyValue() を使ってインデックス番号と読み取り開始位置を示すキー値を設定しておく必要があります。
Containerは、vectorではないユーザーオリジナルコレクションです。
mdls | 結果を受け取るコレクションを指定します。 |
q | 読み取りクエリーまたはプリペアードクエリーを指定します。この処理はサーバー側で行われるフィルタリングです。 |
func | ユーザー定義型のクライアントフィルターを指定します。内部では filterdFindIterator クラスが使用されます。フィルター関数の詳細は filterdFindIterator を参照してください。 |
|
inline |
mdlで指定したオブジェジェクトから読み取ったキー値でレコードを読み取ります。 setKeyValueFromObjがfalseの場合は、 keyValue() でセットされたキー値のレコードを読み取ります。
レコードが見つからない場合も含め、エラーが発生すると、bzs::rtl::exception がスローされます。
mdl | 読み取るレコードのキー値の入ったオブジェクトを指定します。 |
setKeyValueFromObj | レコードの検索にに際し、trueの場合はmdlのキー値を使用します。falseの場合は keyValue() でセットされたキー値を使用します。 |
|
inline |
Container 型のコレクションの各オブジェクトで指定されたキー値を使って、各オブジェクトを読み取ります。read(T2 &mdl, bool setKeyValueFromOb) の複数処理版です。 qで指定できるのはフィールドのselectのみです。それ以外のwhere() and_() or_() limit() reject() などで指定された値はすべて無視されます。
mdls | キー値が入ったオブジェクトのコレクションを渡します。また、それぞれの読み取り結果が返されます。 |
q | クエリーを指定します。 select() と optimize() で指定した値のみ有効です。 |
sorted | mdlsが事前に index() で指定されたキー順にソートされている場合は、trueを指定してください。最適化のためのソート処理がバイパスされより高速に処理できます。 |
e | 読み取りに失敗した場合、ここで指定したパラメータに例外をセットして返します。このとき処理は中止されず最後まで継続されます。このパラメータNULLの場合は、即時に例外をスローします。 |
|
inline |
BaseContainer 型のコレクションの各オブジェクトから、T2::*func() で取得できるこのテーブルに関連するオブジェクト(T 型)に設定されたキー値を使って、各オブジェクトを読み取ります。 たとえば、BaseContainerが usersで user->group() でグループオブジェクトを取得できるとすると、T2::*func()は user::group() です。内部ではusersからすべての、user->group()を呼び出し groupsを作成します。このgroupsを readEach (Container &mdls, ...)関数に渡します。 qで指定できるのはフィールドのselectのみです。それ以外のwhere() and_() or_() limit() reject() などで指定された値はすべて無視されます。
mdls | mdl::func() でこのテーブルに関連するオブジェクトを取り出せるコレクションを指定します。取り出したオブジェクトには、index() で指定したキー値がセットされている必要があります。また、それぞれの読み取り結果が返されます。 |
func | mdl::func()でこのテーブルに関連するオブジェクトを取り出せる関数を指定します。 |
q | クエリーを指定します。 select() と optimize() で指定した値のみ有効です。 |
|
inline |
readEach(BaseContainer &mdls, T *(T2::*func)() const, queryBase &q) のオーバーロードです。
追加で例外の受け取りを後で行うことができます。
mdls | mdl::func() でこのテーブルに関連するオブジェクトを取り出せるコレクションを指定します。取り出したオブジェクトには、index() で指定したキー値がセットされている必要があります。また、それぞれの読み取り結果が返されます。 |
func | mdl::func()でこのテーブルに関連するオブジェクトを取り出せる関数を指定します。 |
q | クエリーを指定します。 select() と optimize() で指定した値のみ有効です。 |
e | 読み取りに失敗した場合、ここで指定したパラメータに例外をセットして返します。このとき処理は中止されず最後まで継続されます。このパラメータNULLの場合は、即時に例外をスローします。 |
|
inline |
Container 型のコレクションの各オブジェクトで指定されたキー値を使って、各オブジェクトを読み取ります。read(T2 &mdl, bool setKeyValueFromOb) の複数処理版です。 内部では、table::find() オペレーションを使わず、 table::seek() のみを使用して実装されます。P.SQLでの使用のために容易されています。
mdls | キー値が入ったオブジェクトのコレクションを渡します。また、それぞれの読み取り結果が返されます。 |
sorted | mdlsが事前に index() で指定されたキー順にソートされている場合は、trueを指定してください。最適化のためのソート処理がバイパスされより高速に処理できます。 |
e | 読み取りに失敗した場合、ここで指定したパラメータに例外をセットして返します。このとき処理は中止されず最後まで継続されます。このパラメータNULLの場合は、即時に例外をスローします。 |
|
inline |
readEach(BaseContainer &mdls, T *(T2::*func)() const, queryBase &q) のオーバーロードです。
P.SQLの場合クエリは指定できません。この関数はP.SQLのために用意されています。
|
inline |
readEach(BaseContainer &mdls, T *(T2::*func)() const, queryBase &q) のオーバーロードです。
詳しくはそのほかのオーバーロードを参照してください。
|
inline |
read(Container &mdls, Query &q) 関数の内部で使用されています。MAPオブジェクトを指定することができます。 そのほかは、 read(Container &mdls, Query &q) 関数と同様です。
|
inline |
read(Container &mdls, Query &q, validationFunc func) 関数の内部で使用されています。MAPオブジェクトを指定することができます。 そのほかは、 read(Container &mdls, Query &q, validationFunc func) 関数と同様です。
|
inline |
readMore(Container &mdls) 関数の内部で使用されています。MAPオブジェクトを指定することができます。 そのほかは、 readMore(Container &mdls) 関数と同様です。
|
inline |
直前の read() がクエリの reject() または limit() によって検索が中止されていた場合、 最後に検索したレコードのその続きから前回のクエリーの内容で読み取りを行います。
mdls | 結果を受け取る mdls collection_vec_typeオブジェクトを指定します。 |
mdls で指定する mdlsは空でなければなりません。空でない場合は clear() が呼び出され初期化されます。
また、このテーブルに対する直前のオペレーションは activeObject::read() でなければなりません。それ以外のオペレーションの後で、この関数を呼び出した時の動作は不定です。
直前の read() がクエリの reject() または limit()以外の理由で終了していた場合、この関数を呼び出しても何も読み取られません。検索の終了ステータスの詳細は、 table::statReasonOfFind() を参照してください。
|
inline |
直前の read() がクエリの reject() または limit() によって検索が中止されていた場合、 最後に検索したレコードのその続きから前回のクエリーの内容で読み取りを行います。
mdls | 結果を受け取る mdls Containerオブジェクトを指定します。 |
mdls で指定する mdlsは空でなければなりません。空でない場合は clear() が呼び出され初期化されます。
また、このテーブルに対する直前のオペレーションは activeObject::read() でなければなりません。それ以外のオペレーションの後で、この関数を呼び出した時の動作は不定です。
直前の read() がクエリの reject() または limit()以外の理由で終了していた場合、この関数を呼び出しても何も読み取られません。検索の終了ステータスの詳細は、 table::statReasonOfFind() を参照してください。
|
inline |
alias() で指定した別名をすべてクリアし無効にします。
|
inline |
mdlで指定したオブジェジェクトから読み取ったキー値のレコードがあれば変更し、無ければ追加します。 setKeyValueFromObjがfalseの場合は、 keyValue() でセットされたキー値のレコードを検索します。
エラーが発生すると、bzs::rtl::exception がスローされます。
mdl | 更新または追加する値の入ったオブジェクトを指定します。 |
setKeyValueFromObj | レコードの検索にに際し、trueの場合はmdlのキー値を使用します。falseの場合は keyValue() でセットされたキー値を使用します。 |
|
inline |
mdlで指定したオブジェジェクトから読み取ったキー値のレコードがあれば変更します。 setKeyValueFromObj がfalseの場合は、keyValue() でセットされたキー値のレコードを検索します。
レコードが見つからない場合も含めエラーが発生すると、bzs::rtl::exception がスローされます。
mdl | 更新する値の入ったオブジェクトを指定します。 |
setKeyValueFromObj | レコードの検索にに際し、trueの場合はmdlのキー値を使用します。falseの場合は keyValue() でセットされたキー値を使用します。 |
|
protected |
別名を保持する fdNmaeAlias 型のコレクション。
|
protected |
FDI*型のインスタンス。
|
protected |
MAP型のインスタンス。
|
protected |
option() で設定された オプションを保持します。
|
protected |
内部でテーブルアクセスで使用されるtable_ptr。