ページの先頭行へ戻る
Big Data Integration ServerV1.4.0 検索編アプリケーション開発ガイド
FUJITSU Software

9.4.2 C APIの記述例

1つのトランザクションを扱うC APIの場合の記述例について、以下に示します。

/*以下のように用意されていることを仮定しています      */
/* personData :追加したい従業員の情報                */
/* query      :検索式                                */
/* returnQuery:リターン式                            */
/* updateData :更新データ                            */
/* pResultId  :レコードIDを保持する構造体配列        */
/* pUpdateId  :更新用レコードIDを設定する構造体配列  */

/* コネクションハンドルの割当て */
ret = ShunAllocHandle(NULL, &ConH);
if(ret != SHUN_SUCCESS) {
   error("ShunAllocHandle ", ConH);
   return;
}
/* ホスト名・ポート番号・Shunsaku Fileを指定してコネクションを確立 */
ret = ShunConnect(ConH, "DirSvr1", 23101, "FileA");
if(ret != SHUN_SUCCESS) {
   error("ShunConnect ", ConH);
   return;
}
/* 追加用のデータ操作ハンドル割当て */
ret = ShunAllocHandle(ConH, &insertStmtH);
if(ret != SHUN_SUCCESS) {
   error("ShunAllocHandle ", ConH);
   return;
}
/* 自動コミットを無効に切替え */
ret = ShunSetConnectAttr(ConH, SHUN_ATTR_AUTOCOMMIT, SHUN_FALSE);
if(ret != SHUN_SUCCESS) {
   error("ShunSetConnectAttr ", ConH);
   return;
}
/* データ追加 */
ret = ShunInsert(insertStmtH, 1, personData);
if(ret != SHUN_SUCCESS) {
   error("ShunInsert ", insertStmtH);
   return;
}
/*追加用のデータ操作ハンドルの解放 */
ret = ShunFreeHandle(insertStmtH);
if(ret != SHUN_SUCCESS) {
   error("ShunFreeHandle ", insertStmtH);
   return;
}
/* Shunsaku FileをFileDに切替え */ 
ret = ShunSetShunsakuFile(ConH, "FileD");
if(ret != SHUN_SUCCESS) {
   error("ShunSetShunsakuFile", ConH);
   return;
}
/* 検索用のデータ操作ハンドル割当て */
ret = ShunAllocHandle(ConH, &searchStmtH);
if(ret != SHUN_SUCCESS) {
   error("ShunAllocHandle ", ConH);
   return;
}
/* 検索を実行 */
ret = ShunSearch(searchStmtH, 1, NULL, 0, 30, query, returnQuery,
                 NULL, &Hit_Cnt, &Return_Cnt, &Returnable_Cnt,
                 &Rec_Id_Out, &Data, &First_Pos, &Last_Pos);
if(ret != SHUN_SUCCESS) {
   error("ShunSearch ", searchStmtH);
   return;
}
/* レコードIDを保持 */
for(i=0; i< Return_Cnt; i++) {
    pResultId[i] = Rec_Id_Out[i];
}
/* 検索用のデータ操作ハンドルの解放 */
ret = ShunFreeHandle(searchStmtH);
if(ret != SHUN_SUCCESS) {
   error("ShunFreeHandle ", searchStmtH);
   return;
}
/* 更新用のデータ操作ハンドル割当て */
ret = ShunAllocHandle(ConH, &updateStmtH);
if(ret != SHUN_SUCCESS) {
   error("ShunAllocHandle ", ConH);
   return;
}
/* 0番目のデータを更新対象とする */
pUpdateId[0] = pResultId[0];
/* データを更新 */
ret = ShunUpdateRecId(updateStmtH, 1, pUpdateId,updateData);
if(ret != SHUN_SUCCESS) {
  error("ShunUpdateRecId", updateStmtH);
  return;
}
/* 更新用のデータ操作ハンドルの解放 */
ret = ShunFreeHandle(updateStmtH);
if(ret != SHUN_SUCCESS) {
   error("ShunFreeHandle ", updateStmtH);
   return;
}
/*  トランザクション終了 */
ret = ShunCommit(ConH);
if(ret != SHUN_SUCCESS) {
   error("ShunCommit ", ConH);
   return;
}
/* コネクションの切断*/
ret = ShunDisconnect(ConH);
if(ret != SHUN_SUCCESS) {
   error("ShunDisconnect", ConH);
   return;
}
/* コネクションハンドルの解放 */
ret = ShunFreeHandle(ConH);
if(ret != SHUN_SUCCESS) {
   error("ShunAllocHandle ", ConH);
   return;
}

/* エラー発生時の処理 */
void error(char* func, SHUNHANDLE handle) {
  printf( "%s:abnormal end\n", func );
  ShunGetErrorMessage(handle, &Err_Level, &Err_Msg);
  printf("エラーレベル = %d\n", Err_Level);
  printf("エラーメッセージ = %s\n", Err_Msg);
  if(ConH != NULL)
  {
    ret = ShunRollback(ConH);
  }
  ret = ShunFreeHandle(ConH); 
  return;
}