データベースアクセス基本クラス (nocopyable) [詳解]
#include <nsDatabase.h>
公開メンバ関数 | |
nsdatabase () | |
void | abortTrn () |
void | beginSnapshot (short bias=CONSISTENT_READ, binlogPos *bpos=NULL) |
void | beginTrn (short bias=SINGLELOCK_NOGAP+NOWAIT_WRITE) |
BTRCALLID_PTR | btrvFunc () |
uchar_td * | clientID () const |
bool | connect (const _TCHAR *uri, bool newConnection=false) |
void | createTable (fileSpec *pfs, uint_td len, const _TCHAR *uri, short_td mode=-1) |
bool | disconnect (const _TCHAR *uri=_T("")) |
bool | disconnectForReconnectTest () |
virtual void | dropTable (const _TCHAR *uri) |
int | enableTrn () const |
void | endSnapshot () |
void | endTrn () |
void | getBtrVersion (btrVersions *versions, uchar_td *posblk) |
char * | getCreateViewSql (const _TCHAR *name, char *retbuf, uint_td *size) |
bool | isAssociate () const |
virtual bool | isOpened () const |
bool | isReconnected () const |
bool | isTransactdUri (const _TCHAR *uri) |
bool | isUseTransactd () const |
bool | localSharing () const |
short | lockWaitCount () const |
short | lockWaitTime () const |
short | openTableCount () const |
void | readDatabaseDirectory (_TCHAR *retbuf, uchar_td len) |
bool | reconnect () |
int | refCount () const |
virtual void | release () |
void | rename (const _TCHAR *oldUri, const _TCHAR *newUri) |
void | setLocalSharing (bool v) |
void | setLockWaitCount (short v) |
void | setLockWaitTime (short v) |
void | setUseLongFilename (bool value) |
bool | setUseTransactd () |
short | stat () const |
_TCHAR * | statMsg (_TCHAR *retbuf) |
void | swapTablename (const _TCHAR *uri1, const _TCHAR *uri2) |
short_td | tdapErr (HWND hWnd, _TCHAR *retbuf=NULL) |
ushort_td | trxIsolationServer () const |
ushort_td | trxLockWaitTimeoutServer () const |
_TCHAR * | uri () const |
bool | uriMode () const |
bool | useLongFilename () |
静的公開メンバ関数 | |
static bool | enableAutoReconnect () |
static unsigned int | execCodePage () |
static bool | registerHaNameResolver (HANAME_RESOLVER_PTR func) |
static void | setEnableAutoReconnect (bool v) |
static void | setExecCodePage (unsigned int codepage) |
static bool | trnsactionFlushWaitStatus () |
静的公開変数類 | |
static const int | maxtables = 150 |
限定公開メンバ関数 | |
virtual | ~nsdatabase () |
void | addref () |
bool | checkAssociate () |
nsdatabase * | clone () const |
void | doReconnect (nstable *tb) |
virtual bool | doReopenDatabaseSchema () |
bool | findTable (nstable *tb) |
virtual void * | getExtendBufferForOpen (uint_td &size) |
void | internalRelease () |
nsdatabase & | operator= (const nsdatabase &) |
void | registerTable (nstable *tb) |
void | reset () |
void | resetSnapshot () |
void | setAssociate () |
virtual bool | setUri (const _TCHAR *uri) |
nstable ** | tables () |
short | tdap (ushort_td op, void *posb, void *data, uint_td *datalen, void *keybuf, keylen_td keylen, char_td keyNum) |
short | tdapEx (ushort_td op, void *posb, void *data, uint_td *datalen, void *keybuf, keylen_td keylen, char_td keyNum) |
void | unregisterTable (nstable *tb) |
静的限定公開メンバ関数 | |
static const char * | toServerUri (char *buf, int buflen, const _TCHAR *src, bool trd) |
限定公開変数類 | |
BTRCALLID_PTR | m_btrcallid |
short | m_stat |
データベースアクセス基本クラス (nocopyable)
nsdatabaseは、主に以下の役割を持ちます。
このクラスは、テーブルに関する詳細な情報を持ちません。詳細な情報を持つのはこのクラスを継承した database クラスです。
このクラスを直接生成することはほとんどありません。通常は database クラスを使用します。
このクラスはコピーできません。
|
protectedvirtual |
デストラクタ
nsdatabase | ( | ) |
コンストラクタ
void abortTrn | ( | ) |
トランザクションを中止します。 beginTrn()以降に行った変更はすべてロールバックされます。
実行結果はstat()で取得します。成功するとゼロが返ります。
|
protected |
インスタンスへの参照数を+1します。
スナップショットを開始します。スナップショットは読み取り専用のトランザクションです。 スナップショットは endSnapshot() で終了します。
スナップショット中にテーブルを閉じることはできません。 スナップショット中に nstable::close() を呼び出すと、STATUS_ALREADY_INSNAPSHOT エラーが返ります。 テーブルを閉じる前に必ずスナップショットを終了してください。
実行結果はstat()で取得します。成功するとゼロが返ります。
[in] | bias | CONSISTENT_READ、CONSISTENT_READ_WITH_BINLOG_POS、MULTILOCK_GAP_SHARE、MULTILOCK_NOGAP_SHAREのいずれかの値を指定します。
|
[out] | bpos | biasにCONSISTENT_READ_WITH_BINLOG_POSを指定する場合はbinlogPosのポインターを渡します。 |
bias値にMULTILOCK_NOGAP_SHAREを指定した場合、 nstable::unlock() によって直前に読み取ったレコードのロックを解除することができます。MULTILOCK_GAP_SHAREの場合ロック解除はできません。 nstable::unlock() を呼び出しても無視されます。 table::find() activeTable::read() activeTable::join() activeTable::outerJoin() でまとめて複数のレコードを読み取った場合、それらのロックを後でアンロックすることはできません。アンロックできるのは直前に読み取ったレコードのみです。細かくロック、アンロックの制御を行いたい場合は、 seek系オペレーションを使用してください。 この関数はPSQLでは使用できません。使用しても何の効果もありません。
void beginTrn | ( | short | bias = SINGLELOCK_NOGAP + NOWAIT_WRITE | ) |
トランザクションを開始します。トランザクション中に読み取ったレコードは、biasで指定した値に従ってレコードロックされます。 終了時に、 endTrn() または abortTrn() を呼び出すことで一連の更新をアトミックな処理にできます。
bias | SINGLELOCK_NOGAP、MULTILOCK_NOGAP、MULTILOCK_GAPのいずれかの値を指定できます。デフォルト値にあるNOWAIT_WRITEは PSQLでのみ有効でTransactdでは効果を持ちません。
|
ロックの競合が発生しロックできなかった場合は、 stat() にSTATUS_LOCK_ERRORが返ります。 実行結果はstat()で取得します。成功するとゼロが返ります。
PSQLにおけるバイアス値はPSQLのマニュアルを参照してください。
|
inline |
BTRCALLID関数のアドレスを返します。dllがロードできないまたはされていない場合はNULLを返します。
|
protected |
このデータベースが、アソシエイトdatabaseかどうかを調べてそうである場合はfalseを返します。また m_statにSTATUS_NOSUPPORT_OPをセットします。
uchar_td * clientID | ( | ) | const |
このデータベースのクライアントIDを返します。
|
protected |
クローンオブジェクトを作成して返します。
bool connect | ( | const _TCHAR * | uri, |
bool | newConnection = false |
||
) |
このメソッドはPSQLの場合はLoginを実行します。詳しくはPSQLのマニュアルを参照してください。
以下はTransactdでの内容です。
uriで指定したサーバーへの接続を探し(無ければければ新しい接続を作成し)、その接続の参照カウンタを一つ増やします。 既にこの nsdatabase に接続があった場合は事前に接続の参照カウンタを一つ減らします(参照カウンタがゼロになったら切断します)。 既にデータベースが開かれていた場合は、接続に失敗し stat() は STATUS_DB_YET_OPEN を返します。 uriの内容は open()を参照してください。uriではスキーマテーブルの部分を省略することもできます。
例 "tdap://servername/database"
connectメソッドの呼び出しは必ずしも必要ではありません。 open()が呼び出された時点でネットワーク接続がなければ自動で connect処理が行われます。
[in] | uri | 接続するデータベースのuriを指定します。 |
[in] | newConnection | このスレッドで使用している接続とは別に新しい接続を作成する場合はtrueを指定します。falseを指定すると、既にそのデータベースに接続がある場合それを共有します。 |
ネットワーク接続はスレッドごとに別の接続が張られます。 コネクションプールを作成したい場合、newConnectionでtrueを指定するとあらかじめ別々のコネクションを持つ databaseオブジェクトを持つことができます。
void createTable | ( | fileSpec * | pfs, |
uint_td | len, | ||
const _TCHAR * | uri, | ||
short_td | mode = -1 |
||
) |
uriで指定されたテーブルルpfsの定義に基づいて作成します。このテーブルはスキーマを持たないテーブルです。 mysqlへのSQLでアクセスはダミーのフィールドを通じてのみアクセスできます。 このメソッドで作成するテーブルは、SQLから利用を行わないテーブルのみ使用します。
bool disconnect | ( | const _TCHAR * | uri = _T("") | ) |
このメソッドはPSQLの場合はLogoutを実行します。詳しくはPSQLのマニュアルを参照してください。
以下はTransactdでの内容です。
このデータベースが使用している接続の参照カウントを一つ減らします。 接続の参照数がゼロになるとサーバーとのネットワーク接続を切断します。
disconnectメソッドの呼び出しは必ずしも必要ではありません。 close()が呼び出された時点で接続があれば自動で disconnect処理が行われます。
[in] | uri | 使用されません。 空の文字列を指定します。 |
bool disconnectForReconnectTest | ( | ) |
現在のネットワーク接続を強制的に切断します。切断に伴うリカバリー処理は一切ありません。
この切断処理はネットワーク障害をエミュレートします。
このメソッドは通常のアプリケーションでは使用しません。 reconnect() のテストのためにのみあります。
|
protected |
tbで指定されたテーブルを再接続します。
|
inlineprotectedvirtual |
databaseで再実装されています。
|
virtual |
uriで指定されたテーブルを削除します。 実行結果はstat()で取得します。成功するとゼロが返ります。
databaseで再実装されています。
|
inlinestatic |
ネットワークエラーが発生した際に、自動再接続処理を行うかどうかを返します。
bool enableTrn | ( | ) | const |
現在トランザクションが開始されているかどうかを返します。
void endSnapshot | ( | ) |
スナップショットを終了します。
実行結果はstat()で取得します。成功するとゼロが返ります。
void endTrn | ( | ) |
トランザクションをコミットします。
実行結果はstat()で取得します。成功するとゼロが返ります。
|
static |
setExecCodePage()で指定された実行環境で使用するマルチバイト文字コードのコードページを取得します。
|
protected |
tbで指定されたテーブルを、このデータベースオブジェクトで開かれたテーブルリストから探して有効であればtrueを返します。
void getBtrVersion | ( | btrVersions * | versions, |
uchar_td * | posblk | ||
) |
posblkで指定したテーブルのサーバーとクラインアントモジュールのバージョンを取得します。
[out] | versions | btrVersions[3] 構造体の先頭アドレスを指定します。必ずsizeof(btrVersions) × 3以上のサイズを確保してください。 |
posblk | 既に開いているテーブルの posblk()パラメータを渡します。 |
実行が成功すると先頭の構造体にクライアントモジュールのバージョンが、3番目の構造体にサーバーモジュールのバージョンが返されます。 PSQLでローカルエンジンがある場合は2番目の構造体にバージョンが返されます。
取得が成功したかどうかは stat()で取得します。成功するとゼロが返ります。
char * getCreateViewSql | ( | const _TCHAR * | name, |
char * | retbuf, | ||
uint_td * | size | ||
) |
nameで指定したviewの生成 SQL文を取得します。
Trnasactdではviewを扱いませんが、データベースのコピーを行う際に既存のviewもコピーしたい場合があります。 そのような用途のために、viewを生成SQLを取得できます。
name | 取得したい viewの名前を指定します。 |
rebuf | 結果を受け取るバッファの先頭アドレスを指定します。 |
size | 結果を受け取るバッファの長さのアドレスを指定します。 |
|
inlineprotectedvirtual |
テーブルをオープンする際に拡張情報を受け取るバッファを返します。
[out] | size | バッファのサイズを返します。 |
|
inlineprotected |
インラインで nsdatabase::release() を呼び出します。
bool isAssociate | ( | ) | const |
このデータベースが、 database::createAssociate() によって生成されたアソシエイトdatabaseかどうかを返します。
|
inlinevirtual |
データベースがオープンされているかどうかを返します。
databaseで再実装されています。
bool isReconnected | ( | ) | const |
このデータベースが再接続されたかどうかを返します。
この値がtrueの場合、table::setQuery() でサーバーにキャッシュされたクエリーが無効になり、 非サーバーキャッシュクエリーとして実行されます。
bool isTransactdUri | ( | const _TCHAR * | uri | ) |
uriで指定したURIはtransactdを使用するプロトコル tdap:://かどうかを返します。
bool isUseTransactd | ( | ) | const |
m_btrcallidの関数アドレスは、trnsctcl.dllのBTRVCALLID関数のアドレスかどうかを返します。
bool localSharing | ( | ) | const |
PSQLの6.15以前のローカルエンジンにおいて、ファイル共有モードを使用するかどうかを返します。
short lockWaitCount | ( | ) | const |
トランザクション内でレコードを更新する際に対象のレコードがロックされていた場合、更新の再試行を試みる回数を返します。
short lockWaitTime | ( | ) | const |
トランザクション内でレコードを更新する際に対象のレコードがロックされていた場合、更新の再試行を試みる際にwaitする時間をミリ秒で返します。
short openTableCount | ( | ) | const |
現在開かれているテーブル数を返します。
|
protected |
コピーコンストラクタは実装されません。
void readDatabaseDirectory | ( | _TCHAR * | retbuf, |
uchar_td | len | ||
) |
データベースのディレクトリをサーバーに問い合わせてretbufに返します。
[out] | retbuf | 問い合わせ結果を受け取るバッファのアドレスを指定します。 |
[in] | len | retbufで指定したバッファの長さを指定します。 |
bool reconnect | ( | ) |
一度接続が正常に成功したコネックションが、ネットワーク障害などによってエラーを返した際に再接続 を行います。
このメソッドを呼び出すと、以下の処理が順行われます。
int refCount | ( | ) | const |
インスタンスへの参照数を返します。
|
static |
tdclc_xxライブラリのネットワーク層に仮想ホスト名に対する名前解決のための関数を登録します。 登録を解消する場合はfuncにNULLをセットして呼び出します。
この関数はC/C++言語からのみ使用可能で、PHP、Ruby、ComなどC++ライブラリのラッパーからは使用できません。
HANAME_RESOLVER_PTRのプロトタイプは const char* (__STDCALL* HANAME_RESOLVER_PTR)(const char* vhost, const char* port, char* retBuf, unsigned int& opt); で、引数vhostで指定された仮想ホスト名に対する実ホスト名をretBufにコピーして返す関数を指定します。retBufのサイズはMAX_PATH(260)の固定サイズです。
optは入力・出力両方で使用します。
以下はopt引数の説明です。
|
protected |
tbで指定されたテーブルをこのデータベースオブジェクトが管理するオープンテーブルリストに加えます。
|
virtual |
インスタンスへの参照数を-1します。参照数がゼロになると delete this を呼び出します。
databaseで再実装されています。
void rename | ( | const _TCHAR * | oldUri, |
const _TCHAR * | newUri | ||
) |
oldUriで指定されたテーブルの名前をnewUriで指定された名前に変更します。 実行結果はstat()で取得します。成功するとゼロが返ります。
|
protected |
データベース接続をリセットします。開いているテーブルはすべて閉じられます。 使用していた接続が他のクライアントに使用されていなければ、データベースの接続が切断されます。
|
protected |
スナップショットカウンターを強制的に1にし、endSnapshot()を呼び出してスナップショットを強制終了させます。
|
protected |
このデータベースがアソシエイトdatabaseであるとマークします。
|
inlinestatic |
ネットワークエラーが発生した際に、自動再接続処理を行うかどうかを指定します。
この設定値は registerHaNameResolver() によっても設定されます。 有効な関数が登録された場合場合は true 、NULLが指定された場合はfalseが設定されます。 registerHaNameResolver() はTHNRによって使用されますので、THNRを使用している場合はこの関数を呼び出さないでください。
|
static |
実行環境で使用するマルチバイト文字コードのコードページを指定します。
void setLocalSharing | ( | bool | v | ) |
PSQLの6.15以前のローカルエンジンにおいて、ファイル共有モードを使用するかどうかを設定します。
v | ファイル共有モードを有効にする場合trueを指定します。 |
void setLockWaitCount | ( | short | v | ) |
トランザクション内でレコードを更新する際に対象のレコードがロックされていた場合、更新の再試行を試みる回数を設定します。
void setLockWaitTime | ( | short | v | ) |
トランザクション内でレコードを更新する際に対象のレコードがロックされていた場合、更新の再試行を試みる際にwaitする時間をミリ秒で設定します。
|
protectedvirtual |
データベーススキーマのuriをセットします。
void setUseLongFilename | ( | bool | value | ) |
windowsで長いファイル名を使用するかどうかを指定します。 linuxではこの値は無視されます。 デフォルト値は、nsdatabaseのコンストラクタでサーバーのバージョンを取得して自動でセットされます。
古いP.SQLを除いてtrueにセットされます。
bool setUseTransactd | ( | ) |
このデータベースでtransactdを使用する場合に呼び出します。 この関数が呼ばれると、trnsctcl.dllをロードして m_btrcallidにtrnsctcl.dllのBTRVCALLID関数のアドレスをセットします。 以降tdap呼び出しはtransactdに送られます。
short stat | ( | ) | const |
各種オペレーションの実行結果を返します。成功するとセロを返します。
|
inline |
最後に行った処理のエラーメッセージを取得します。
[out] | retbuf | エラーメッセージを受け取るバッファを指定します。バッファ長さは必ず512バイト以上 を確保してください。 |
void swapTablename | ( | const _TCHAR * | uri1, |
const _TCHAR * | uri2 | ||
) |
uri1で指定されたテーブルの名前をuri2で指定された名前と入れ替えます。 実行結果はstat()で取得します。成功するとゼロが返ります。
|
protected |
このデータベースによって開かれているテーブルリストへのポインタを返します。
|
inlineprotected |
tdclc_xxライブラリのtdap呼び出しを実行します。 実行結果はstat()で取得します。成功するとゼロが返ります。 この関数は内部で再接続処理が行われることはありません。
short_td tdapErr | ( | HWND | hWnd, |
_TCHAR * | retbuf = NULL |
||
) |
最後に行った処理のエラーメッセージを取得します。
hWnd | 親ウィンドウハンドルを指定します。ハンドルを指定すると自動でmessageBoxをにてエラーを表示します。 | |
[out] | retbuf | エラーメッセージを受け取るバッファを指定します。バッファ長さは必ず512バイト以上 を確保してください。 |
|
protected |
tdclc_xxライブラリのtdap呼び出しを実行します。 実行結果はstat()で取得します。成功するとゼロが返ります。 この関数は内部でエラーの内容と設定条件によって再接続処理を行います。
|
staticprotected |
srcで指定したuriをtransactdサーバーに渡すuriに変換します。transactdでは uriをUTF8で受け取るためあらかじめUTF8に変換します。
buf | 変換後のuriを受け取るバッファの先頭アドレスを指定します。 |
buflen | bufで指定したバッファの長さを指定します。 |
src | 変換前(CP_ACP)のuriを渡します。 |
trd | 現在のコンテキストがtransactdをターゲットにしているかどうかを指定します。 |
|
static |
トランザクションの完了から8秒以下の場合trueを返します。 mobile PCなどでスタンバイに移行する際データベースにデータがフラッシュされるまでスタンバイをwaitしたほうが良い事があります。 そのような場合にスタンバイメッセージとトラップしてこの関数を呼び出します。 この関数はWindowsでのみ有効です。
ushort_td trxIsolationServer | ( | ) | const |
サーバーのトランザクション分離レベルの設定値 ( transactd_transaction_isolation )を返します。 返された値の意味は以下の通りです。
ushort_td trxLockWaitTimeoutServer | ( | ) | const |
サーバーのロックタイムアウトの設定値 ( transactd_lock_wait_timeout )の秒数を返します。
|
protected |
registerTable() で行った登録を解除します。
_TCHAR * uri | ( | ) | const |
このデータベースのuriを返します。
bool uriMode | ( | ) | const |
データベースの指定が btrv:// または tdap://で始まるuriで指定されているかどうかを返します。 PSQLのデータベースの場合 c:\database\schemaNameなどのファイルシステムの指定方法もあるため それと区別したいときに使用します。
bool useLongFilename | ( | ) |
windowsで長いファイル名を使用するかどうかを返します。
|
protected |
BTRCALLID関数のアドレスを保持します。
|
protected |
このクラスに対する操作の結果を表します。
|
static |
1つのインスタンスで管理できるテーブルの最大数の定数。 デフォルトでは50に設定されています。
1つのデータベースで同時にオープンできるテーブルの最大数