17.00 - 17.05 - FNC_MBBGetValue - 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
日本語 (日本)

目的

MBB(最小外接ボックス)型を定義するxmin、ymin、zmin、xmax、ymax、およびzmax座標を表わす6つの倍精度値を含むバッファを返します。

構文規則

void
FNC_MBBGetValue(GEO_HANDLE    mbbHandle,
                double *      mbbBuffer,
                int *         mbbSize  )
GEO_HANDLE mbbHandle
外部ルーチンへの入力パラメータとして定義されたMBB型へのハンドル。
double* mbbBuffer
MBBを定義する6つの倍精度値を保持するバッファへのポインタ。
int* mbbSize
mbbBufferバッファで返される値のバイト単位のサイズ。

使用上の注意

FNC_MBRGetValueは、MBB型のxmin、ymin、zmin、xmax、ymax、およびzmaxの値を取得します。値は6つの倍精度値としてmbbBufferに返されます。関数の呼び出し側は、6つの倍精度値を保持するために十分なmbbBufferバッファのメモリを割り当てる必要があります。

例: FNC呼び出しを使用してMBB型の値を取得する

次の関数はMBB型パラメータを取得し、MBBを定義するxmin、ymin、zmin、xmax、ymax、およびzmaxの値を表わす6つの倍精度値の配列を返します。

CREATE TYPE MBB_ARRAY AS DOUBLE PRECISION ARRAY[6];
CREATE FUNCTION mbbUDF1(P1 MBB)
RETURNS MBB_ARRAY
NO SQL
PARAMETER STYLE SQL
DETERMINISTIC
LANGUAGE C
EXTERNAL NAME 'CS!mbbUDF1!mbbUDF1.c';

void mbbUDF1 (GEO_HANDLE* mbb_handle,
              ARRAY_HANDLE* resultArray,
              int* indicator_thismbb,
              int* indicator_Result,
              char       sqlstate[6],
              SQL_TEXT   extname[129],
              SQL_TEXT   specific_name[129],
              SQL_TEXT   error_message[257] )
{
     double* mbbBuffer;
     int returnSize;
     int mbbBufferSize;
     array_info_t arrayInfo;
     bounds_t arrayScope[FNC_MAXARRAYDIMENSIONS];
     NullBitVecType    *NullBitVector;

     mbbBufferSize = 6 * SIZEOF_DOUBLE_PRECISION;
     mbbBuffer = (double*)FNC_Malloc(mbbBufferSize);
     /* Get the MBB value */
      FNC_MBBGetValue(*mbb_handle,mbbBuffer,&returnSize); 

      /* get element type information for the ARRAY */
      FNC_GetArrayTypeInfo(*((ARRAY_HANDLE*)resultArray),
                           &arrayInfo,
                           arrayScope);     
     /* Allocate a new NullBitVector */
      NullBitVector = (NullBitVecType*)FNC_malloc(1);

      /* Set array elements within the range. */
      FNC_SetArrayElementsWithMultiValues(
                      *((ARRAY_HANDLE*)resultArray),
                       arrayScope,
                      (void*)mbbBuffer,
                       mbbBufferSize, NullBitVector,1);

    *indicator_Result = 0;
     FNC_free(NullBitVector);
     FNC_free(mbbBuffer);
}