13.25 Refクラス

SQL REF値のC++プログラミング言語によるマッピングです。このマッピングは、データベースにあるSQL構造型の値への参照です。

各REF値には、参照先オブジェクトの一意の識別子があります。SQL REF値は、参照するSQL構造型のかわりに使用できます。また、表の列値または構造型の属性値として使用できます。

SQL REF値は、SQL構造型への論理ポインタであるため、デフォルトの場合、Refオブジェクトも論理ポインタです。したがって、RefオブジェクトとしてSQL REF値を取得しても、クライアントの構造型の属性をマテリアライズしません。

NULLRefオブジェクトに対する有効なメソッドは、isNull()およびoperator=()のみです。

Refオブジェクトは永続記憶域に保存でき、operator*()operator->()またはptr()メソッドによって間接参照されます。Tは、PObjectから導出したクラスであることが必要です。次の項では、T*PObject*が同じ意味で使用されています。

表13-35 Refクラスで使用される列挙値

属性 オプション
LockOptions
  • OCCI_LOCK_NONEは、Refオブジェクトに対するロック設定を消去します。

  • OCCI_LOCK_Xは、オブジェクトがロックされていて、オブジェクトが別のセッションによってロックされる場合はロックが利用できるようになるまで待機する必要があることを示します。

  • OCCI_LOCK_X_NOWAITは、オブジェクトがロックされていて、オブジェクトが別のセッションによってロックされる場合にはエラーが戻されることを示します。

PrefetchOption
  • OCCI_MAX_PREFETCH_DEPTHは、フェッチが最大の深さまで実行されることを示します。

表13-36 Refメソッドの概要

メソッド 概要

Ref()

Refオブジェクトのコンストラクタです。

clear()

参照を消去します。

getConnection()

このRefが作成された元の接続を戻します。

isClear()

Refが消去されているかどうかをチェックします。

isNull()

RefNULLかどうかをチェックします。

markDelete()

参照オブジェクトに削除済マークを設定します。

operator->()

Refを間接参照し、必要に応じてオブジェクトを確保します。

operator*()

Refを間接参照し、必要に応じてオブジェクトを確保またはフェッチします。

operator==()

Refとポインタが同じオブジェクトを参照しているかどうかをチェックします。

operator!=()

Refとポインタが異なるオブジェクトを参照しているかどうかをチェックします。

operator=()

代入演算子です。

ptr()

PObjectへのポインタを戻します。Refを間接参照し、必要に応じてオブジェクトを確保またはフェッチします。

setLock()

参照元オブジェクトにロック・オプションを設定します。

setNull()

RefをNULLに設定します。

setPrefetch()

複合オブジェクト検索のプリフェッチ・オプションを設定します。

unmarkDelete()

参照先オブジェクトの削除マークを解除します。

13.25.1 Ref()

Refオブジェクトのコンストラクタです。

構文 説明
Ref();

NULLのRefを作成します。

Ref(
   const Ref<T> &src);

Refのコピーを作成します。

パラメータ 説明
src

コピーするRefを指定します。

13.25.2 clear()

このメソッドは、Refオブジェクトを消去します。

構文

void clear();

13.25.3 getConnection()

Refオブジェクトがインスタンス化された元の接続を戻します。

構文

const Connection *getConnection() const;

13.25.4 isClear()

このメソッドは、Refオブジェクトが消去されているかどうかをチェックします。

構文

bool isClear() const;

13.25.5 isNull()

このメソッドは、RefオブジェクトがNULLかどうかをテストします。RefオブジェクトがNULLの場合はTRUEを、それ以外の場合はFALSEを戻します。

構文

bool isNull() const;

13.25.6 markDelete()

このメソッドは、参照オブジェクトに削除済マークを設定します。

構文

void markDelete();

13.25.7 operator->()

このメソッドは、Refオブジェクトを間接参照し、必要に応じて参照オブジェクトを確保またはフェッチします。参照先オブジェクトのプリフェッチ属性が設定されている場合は、結果的にオブジェクトのグラフのプリフェッチとなる場合があります。

構文 説明
T *operator->();

constでないRefオブジェクトを間接参照し、確保またはフェッチします。

const T *operator->() const;

constRefオブジェクトを間接参照し、確保またはフェッチします。

13.25.8 operator*()

このメソッドは、Refオブジェクトを間接参照し、必要に応じて参照オブジェクトを確保またはフェッチします。参照先オブジェクトのプリフェッチ属性が設定されている場合は、結果的にオブジェクトのグラフのプリフェッチとなる場合があります。オブジェクトを削除する必要はありません。有効範囲外になると、デストラクタが自動的にコールされます。

構文 説明
T& operator*();

constでないRefオブジェクトを間接参照し、確保またはフェッチします。

const T& operator*() const;

constRefオブジェクトを間接参照し、確保またはフェッチします。

13.25.9 operator==()

このメソッドは、2つのRefオブジェクトが同じオブジェクトを参照しているかどうかを確認します。2つのRefオブジェクトが同じオブジェクトを参照している場合はTRUEを、それ以外の場合はFALSEを戻します。

構文

bool operator == (
   const Ref<T> &ref) const;
パラメータ 説明
ref

比較するオブジェクトのRefオブジェクトを指定します。

13.25.10 operator!=()

このメソッドは、2つのRefオブジェクトが同じオブジェクトを参照しているかどうかを確認します。2つのRefオブジェクトが同じオブジェクトを参照していない場合はTRUEを、それ以外の場合はFALSEを戻します。

構文

bool operator!= (
   const Ref<T> &ref) const;
パラメータ 説明
ref

比較するオブジェクトのRefオブジェクトを指定します。

13.25.11 operator=()

RefまたはオブジェクトをRefに割り当てます。最初の場合は複数のRefが割り当てられ、2番目の場合はRefがオブジェクトから作成され、その後に割り当てられます。

構文 説明
Ref<T>& operator=(
   const Ref<T> &src);

RefRefに割り当てます。

Ref<T>& operator=(
   const T *)obj;

Refをオブジェクトに割り当てます。

パラメータ 説明
src

割り当てられるソースのRefオブジェクトを指定します。

obj

Refオブジェクトが割り当てられるソース・オブジェクトのポインタを指定します。

13.25.12 ptr()

PObjectへのポインタを戻します。この演算子はRefを間接参照し、必要に応じてオブジェクトを確保またはフェッチします。Refのプリフェッチ属性が設定されている場合は、結果的にオブジェクトのグラフのプリフェッチとなる場合があります。

構文 説明
T *ptr();

constでないRefオブジェクトのポインタを戻します。

const T *ptr() const;

constRefオブジェクトのポインタを戻します。

13.25.13 setLock()

このメソッドは、間接参照する場合のオブジェクトのロック方法を指定します。

構文

void setLock(lockOptions);
引数 説明
lockOptions

ロック・オプションを指定します(表13-35LockOptionsの定義を参照)。

13.25.14 setNull()

このメソッドは、RefオブジェクトをNULLに設定します。

構文

void setNull();

13.25.15 setPrefetch()

複合オブジェクト検索のプリフェッチ・オプションを設定します。このメソッドは、Refを介して到達できる(推移閉包)すべてのオブジェクトをプリフェッチする場合のレベルを指定します。選択した属性の型のみをプリフェッチする場合は、このメソッドの最初のバージョンを使用します。このメソッドは、参照先のオブジェクトのどのRef属性をオブジェクトのプリフェッチ用にたどるか(複合オブジェクト検索)、およびどのレベルまでそれらのリンクをたどるかを指定します。

構文 説明
void setPrefetch(
   const string &typeName,
   unsigned int depth);

型名とレベルを使用して、複合オブジェクト検索のプリフェッチ・オプションを設定します。

void setPrefetch(
   unsigned int depth);

レベルのみを使用して、複合オブジェクト検索のプリフェッチ・オプションを設定します。

void setPrefetch(
   const string &schName,
   const string &typeName,
   unsigned int depth);

スキーマ、型名およびレベルを使用して、複合オブジェクト検索のプリフェッチ・オプションを設定します。

void setPrefetch(
   const UString &schName,
   const UString &typeName,
   unsigned int depth);

スキーマ、型名およびレベル、さらにUStringのサポートを使用して、複合オブジェクト検索のプリフェッチ・オプションを設定します。

パラメータ 説明
typeName

プリフェッチするRef属性の型を指定します。

schName

プリフェッチするRef属性のスキーマ名を指定します。

depth

リンクをたどる深さのレベルを指定します。PrefetchOptionを使用できます。表13-35の定義を参照してください。

13.25.16 unmarkDelete()

このメソッドは、参照オブジェクトの使用済および削除用マークを解除します。

構文

void unmarkDelete();