この例では、memset()を呼び出して、新しいNullBitVectorのすべてのバイトを0に設定することで初期化します。このNullBitVectorは、phonenumbers_ary型のARRAY用に呼び出し側で事前に割り当てられています。この操作に必要な情報は、FNC_GetArrayTypeInfoを呼び出すことで取得します。その後で、FNC_SetNullBitVectorByElemIndexを呼び出して、1つのビットを「存在しない」に設定します。
ここに示す例は、次の2-D ARRAY定義を基にしています。
/* Oracle-compatible and Teradata syntax respectively: */
CREATE TYPE myArray AS VARRAY(1:20)(1:20) OF INTEGER;
CREATE TYPE myArray AS INTEGER ARRAY[1:20][1:20];
void ArrayUDF ( ARRAY_HANDLE *a,
char sqlstate[6])
{
NullBitVecType *NullBitVector;
array_info_t arrayInfo;
long nullVecBufSize;
int aryIndex[FNC_ARRAYMAXDIMENSIONS];
bounds_t arrayScope[FNC_ARRAYMAXDIMENSIONS];
/* Call FNC_GetArrayTypeInfo first to find out the number of */
/* elements in the array. */
FNC_GetArrayTypeInfo(*a,
&arrayInfo,
arrayScope);
(arrayInfo.totalNumElements % 8 == 0) ?
(nullVecBufSize = arrayInfo.totalNumElements / 8) :
(nullVecBufSize = arrayInfo.totalNumElements / 8) + 1;
/* Allocate a new NullBitVector array. */
NullBitVector = (NullBitVecType*)FNC_malloc(nullVecBufSize);
/* Initialize the NullBitVector to default values */
memset(NullBitVector, 0, nullVecBufSize);
/* Set one bit in NullBitVector to 1 (present) */
aryIndex[0] = 1;
aryIndex[1] = 1;
FNC_SetNullBitVectorByElemIndex(NullBitVector, aryIndex, 1,
nullVecBufSize, arrayScope, arrayInfo.numDimensions);
...
}