BLOB
BLOB (Binary Large OBjects) フィールド・変数・式とは、連続した可変長バイトであり、各バイトを個々にアドレス指定可能な 1つのまとまったオブジェクトとして取り扱うことができます。 サポートされている BLOB のサイズは空 (長さがNULL) から、最大 2,147,483,647 バイト (2GB) までです。
デフォルトで、4D は BLOB の最大サイズを 2GB に設定していますが、OS や空き容量によっては、この制限サイズが小さくなる場合があります。
BLOB は全体がメモリにロードされます。 BLOB 変数はメモリ内にだけ保持され、存在します。 BLOB フィールドは、レコードの他フィールドと同様に、ディスクからメモリにロードされます。
大量のデータを保持できる他のフィールドタイプ (ピクチャーなど) と同様に、レコードを更新してもBLOBフィールドはメモリに複製されません。 したがって、Old
および Modified
コマンドをBLOBフィールドに適用しても、返される結果は意味を持ちません。
引数渡し、ポインター、および戻り値
4D の BLOB は、4D コマンドまたは 4D プラグインの引数として渡すことができます。 また、BLOB はユーザーメソッドのパラメーターに渡したり、関数の戻り値にすることもできます。
ポインターを使用して、BLOB をメソッドに渡すことも出来ます。その場合は BLOB へのポインターを定義し、そのポインターをパラメーターとして渡します。
**例: **
// BLOB タイプの変数を定義します
C_BLOB(anyBlobVar)
// 4Dコマンドに引数として BLOB を渡します
SET BLOB SIZE(anyBlobVar;1024*1024)
// プラグインに BLOB を引数として渡します
$errCode:=Do Something With This BLOB(anyBlobVar)
// BLOB を引数として渡し、戻り値をBLOBで受け取ります
C_BLOB(retrieveBlob)
retrieveBlob:=Fill_Blob(anyBlobVar)
// BLOB のポインターをメソッドに渡します
COMPUTE BLOB(->anyBlobVar)
プラグイン開発にあたっての注意: BLOB 引数は “&O” (数字の0ではなく、アルファベットの"O") として宣言します。
代入
BLOB は相互に代入することができます。
**例: **
// BLOB 型の変数を二つ宣言します
C_BLOB(vBlobA;vBlobB)
// 一つ目の BLOB に10K のサイズを割り当てます
SET BLOB SIZE(vBlobA;10*1024)
// 一つ目の BLOB を二つ目の BLOB に代入します
vBlobB:=vBlobA
ただし、BLOB に演算子を適用することはできません。
BLOB のアドレス指定
中カッコ {...} を使用し、BLOB の各バイトを個別にアドレス指定することができます。 BLOB 内では、各バイトに 0 から N-1 の番号が割り当てられています。N は BLOB のサイズです。 例:
// BLOB を定義します
C_BLOB(vBlob)
// BLOB のサイズを 256バイトに設定します
SET BLOB SIZE(vBlob;256)
// 次のループは、BLOB の 256バイトをゼロに初期化します
For(vByte;0;BLOB size(vBlob)-1)
vBlob{vByte}:=0
End for
BLOB の各バイトはすべて個別にアドレス指定できるため、BLOB フィールドまたは変数には実際のところ何でも格納できます。