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

目的

MBR (最小外接矩形)タイプを定義するxmin、ymin、xmax、およびymax座標を表わす4つの倍精度値を含むバッファを返します。

構文

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

使用上の注意

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

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

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

CREATE TYPE MBR_ARRAY AS DOUBLE PRECISION ARRAY[4];
CREATE FUNCTION mbrUDF1(P1 MBR)
RETURNS MBR_ARRAY
NO SQL
PARAMETER STYLE SQL
DETERMINISTIC
LANGUAGE C
EXTERNAL NAME 'CS!mbrUDF1!mbrUDF1.c';

void mbrUDF1 (GEO_HANDLE* mbr_handle,
              ARRAY_HANDLE* resultArray,
              int* indicator_thismbr,
              int* indicator_Result,
              char       sqlstate[6],
              SQL_TEXT   extname[129],
              SQL_TEXT   specific_name[129],
              SQL_TEXT   error_message[257] )
{
     double* mbrBuffer;
     int returnSize;
     int mbrBufferSize;
     array_info_t arrayInfo;
     bounds_t arrayScope[FNC_MAXARRAYDIMENSIONS];
     NullBitVecType    *NullBitVector;

     mbrBufferSize = 4 * SIZEOF_DOUBLE_PRECISION;
     mbrBuffer = (double*)FNC_Malloc(mbrBufferSize);
     /* Get the MBR value */
      FNC_MBRGetValue(*mbr_handle,mbrBuffer,&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*)mbrBuffer,
                       mbrBufferSize, NullBitVector,1);

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