EssMergeDatabaseData

2つ以上のデータ・スライスを1つのデータ・スライスにマージします。オプションで、プライマリ・データベース・スライスを除外できます。

この関数は、集約ストレージ・データベースにのみ適用されます。

構文

            ESS_FUNC_M EssMergeDatabaseData (
            hCtx, AppName, DbName, ulOptions
            );
         
パラメータデータ型説明

hCtx

ESS_HCTX_T

APIコンテキスト・ハンドル。

AppName

ESS_STR_T

NULLを使用します。関数は常に現在選択されているデータベースに適用されます。

DbName

ESS_STR_T

NULLを使用します。関数は常に現在選択されているデータベースに適用されます。

ulOptions

ESS_ULONG_T

次の定数のいずれかになります:

  • #define ESS_MERGE_DATABASE_DATA_ALL 1: すべてのデータ・スライスを1つにマージします。

  • #define ESS_MERGE_DATABASE_DATA_INCREMENTAL 2: すべての増分スライスを1つにマージにしますが、プライマリ・スライスとはマージしません。実行後、スライスは2つになります。

戻り値

正常終了の場合は0が戻され、それ以外の場合はエラー・コードが戻されます。

         void TestMergeDatabaseData(ESS_HCTX_T hCtx, ESS_STR_T AppName, ESS_STR_T DbName)
{
        ESS_STS_T               sts = ESS_STS_NOERR;
        ESS_SHORT_T             isAbortOnError;
        ESS_OBJDEF_T    Rules;
        ESS_OBJDEF_T    Data;
        ESS_PMBRERR_T   pMbrErr = NULL;
        ESS_PMBRUSER_T  pMbrUser = NULL;
        ESS_ULONG_T             ulBufferId;
        ESS_ULONG_T             ulDuplicateAggregationMethod;
        ESS_ULONG_T             ulOptionsFlags;
        ESS_ULONG_T             ulSize;
        ESS_ULONG_T             ulBufferCnt;
        ESS_ULONG_T             ulCommitType ;
        ESS_ULONG_T             ulActionType;
        ESS_ULONG_T             ulOptions;
        ESS_ULONG_T             ulBufferIdAry[1];
        ESS_ULONG_T             options;

        printf("\nCreate the buffer:\n");
        ulDuplicateAggregationMethod = ESS_ASO_DATA_LOAD_BUFFER_DUPLICATES_ADD;
        ulOptionsFlags = ESS_ASO_DATA_LOAD_BUFFER_IGNORE_MISSING_VALUES;
        ulSize = 100;
        ulBufferId = 1;
        sts = EssLoadBufferInit(hCtx, AppName, DbName, ulBufferId, ulDuplicateAggregationMethod, 
                ulOptionsFlags, ulSize);
        printf("EssLoadBufferInit sts: %ld\n", sts);

        /* Server object */
        Rules.hCtx     = hCtx;
        Rules.AppName  = AppName;
        Rules.DbName   = DbName;
        Rules.ObjType  = ESS_OBJTYPE_RULES;
        Rules.FileName = "ddldinaq";
        Data.hCtx      = hCtx;
        Data.AppName   = AppName;
        Data.DbName    = DbName;
        Data.ObjType   = ESS_OBJTYPE_TEXT;
        Data.FileName  = "ddldinaq_slice1a";
        isAbortOnError = ESS_TRUE; 

        printf("\nLoad into buffer:\n");
        sts = EssImportASO (hCtx, &Rules, &Data, &pMbrErr, pMbrUser, isAbortOnError, ulBufferId);
        printf("EssImportASO sts: %ld\n",sts);
        if(pMbrErr)
              EssFreeMbrErr(hCtx, pMbrErr);

        ulBufferCnt = 1;
        ulBufferIdAry[0] = ulBufferId;
        ulCommitType = ESS_ASO_DATA_LOAD_BUFFER_STORE_DATA;
        ulActionType = ESS_ASO_DATA_LOAD_BUFFER_COMMIT;
        printf("\Create a new slice:\n");
        ulOptions = ESS_ASO_DATA_LOAD_INCR_TO_NEW_SLICE;
        sts = EssLoadBufferTerm(hCtx, AppName, DbName, ulBufferCnt, ulBufferIdAry, ulCommitType,
                ulActionType, ulOptions);
        printf("EssLoadBufferTerm sts: %ld\n",sts);

        options = ESS_MERGE_DATABASE_DATA_ALL;
        printf("\nMerge all data into one slice:\n");
        sts = EssMergeDatabaseData(hCtx, AppName, DbName, options);
        printf("EssMergeDatabaseData sts: %ld\n",sts);
}
      

関連トピック