17.00 - 17.05 - FNC_SetNullBitVector - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1147-170K-JPN
Language
日本語 (日本)

目的

呼び出し側で事前に割り当てられたNullBitVector内の1つのビット、またはすべてのビットを設定します。

構文

void
FNC_SetNullBitVector ( NullBitVecType *NullBitVector,
                       int             indexValue,
                       int             presenceValue,
                       long            bufSize)
NullBitVecType *NullBitVector
NullBitVectorの配列。この配列は、呼び出し側で事前に割り当てられます。
NullBitVectorへのアクセスに使用するデータ型は、sqltypes_td.hで次のように定義されています。
typedef unsigned char NullBitVecType;
int indexValue
整数値。次のいずれかの値を設定します。
  • 単一のビットを変更する(indexValue ≥ 0、ARRAYの行優先順で指定します)。
  • -1は、NullBitVectorのすべてのビットを変更することを意味します。
int presenceValue
設定するプレゼンス ビット(indexValueで指定)の値。indexValueが-1の場合は、NullBitVectorのすべてのビットがpresenceValueの値に変更されます。有効な値は1または0です。
long bufSize
呼び出し側で割り当てられたNullBitVectorのサイズ(バイト単位)。呼び出し側は割り当て後に、すべてのバイトを0に設定することでNullBitVectorを初期化します。

使用上の注意

FNC_SetNullBitVectorは、入力としてNullBitVectorindexValuepresenceValue、およびbufSizeを受け取り、NullBitVectorの個別のビットまたはすべてのビットにプレゼンス ビットを設定します。この関数を呼び出して、次のいずれかの操作を実行します。

目的 indexValueに設定する値 presenceValueに設定する値
1つのビットをPRESENTに設定する 変更するビット 1
すべてのビットをPRESENTに設定する -1 1
1つのビットをNOT PRESENTに設定する 変更するビット 0
すべてのビットをNOT PRESENTに設定する -1 0

NullBitVectorの使用方法についての詳細は、NullBitVectorの検査と設定を参照してください。

FNC_SetNullBitVectorの使用例

この例では、FNC_GetArrayTypeInfoを呼び出してARRAYの必要な情報を取得してから、新しいベクタを割り当てます。その後で、FNC_SetNullBitVectorを呼び出して、すべてのビットを「存在しない」に設定します。

void ArrayUDF ( ARRAY_HANDLE  *ary_handle,
                char           sqlstate[6])
{
    NullBitVecType *NullBitVector;
    array_info_t arrayInfo;
    long nullVecBufSize;
    bounds_t arrayScope[FNC_ARRAYMAXDIMENSIONS];

    /* Call FNC_GetArrayTypeInfo first to find out the number of */
    /* elements in the array. */
    FNC_GetArrayTypeInfo(*ary_handle,
                         &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);

    /* Set all bits in NullBitVector to 0 (not present) */
    FNC_SetNullBitVector(NullBitVector, -1, 0, nullVecBufSize);
    ...
}