int kr_traversal_fields(T_DatasrcCur *ptDatasrcCur, DatasrcFieldPreFunc pre_func, DatasrcFieldFunc func, DatasrcFieldPostFunc post_func) { int iResult = 0, iFlag = 0, iCnt = 0; T_DatasrcFieldCur stDatasrcFieldCur = {0}; stDatasrcFieldCur.lInDatasrcId = ptDatasrcCur->lOutDatasrcId; iResult = dbsDatasrcFieldCur(dbsenv, KR_DBCUROPEN, &stDatasrcFieldCur); if (iResult != KR_DBOK) { fprintf(stderr, "dbsDatasrcFieldCur Open %ld Error!", \ ptDatasrcCur->lOutDatasrcId); return -1; } /* run datasrc_field_pre_func */ void *data = NULL; if (pre_func) { data = pre_func(ptDatasrcCur); } while(1) { iResult=dbsDatasrcFieldCur(dbsenv, KR_DBCURFETCH, &stDatasrcFieldCur); if (iResult != KR_DBNOTFOUND && iResult != KR_DBOK) { fprintf(stderr, "dbsDatasrcFieldCur Fetch Error[%d]![%s]:[%s]", iResult, dbsenv->sqlstate, dbsenv->sqlerrmsg); iFlag = -1; break; } else if (iResult == KR_DBNOTFOUND) { fprintf(stdout, "Load [%d]Fields Of Table[%ld] Totally!\n", \ iCnt, stDatasrcFieldCur.lInDatasrcId); break; } kr_string_rtrim(stDatasrcFieldCur.caOutFieldName); /* run datasrc_field_func */ if (func) { iFlag = func(&stDatasrcFieldCur, data); if (iFlag != 0) { fprintf(stderr, "run [%ld] datasrc_field_func failed!\n", stDatasrcFieldCur.lInDatasrcId); break; } } iCnt++; } /* run datasrc_field_post_func */ if (post_func) { post_func(data, iFlag); } iResult = dbsDatasrcFieldCur(dbsenv, KR_DBCURCLOSE, &stDatasrcFieldCur); if (iResult != KR_DBOK) { fprintf(stderr, "dbsDatasrcFieldCur Close Error!"); return -1; } return iFlag; }
int LoadShmSDI(T_DbsEnv *dbsenv, T_KRShmSDI *ptShmSDI) { int nRet = 0; int iResult = 0; int iCnt = 0; T_SdiCur stSdiCur = {0}; T_KRShmSDIDef *ptShmSDIDef = &ptShmSDI->stShmSDIDef[0]; iResult = dbsSdiCur(dbsenv, KR_DBCUROPEN, &stSdiCur); if (iResult != KR_DBOK) { KR_LOG(KR_LOGERROR, "dbsSdiCur Open Error!"); return -1; } while(1) { iResult=dbsSdiCur(dbsenv, KR_DBCURFETCH, &stSdiCur); if (iResult != KR_DBNOTFOUND && iResult != KR_DBOK) { KR_LOG(KR_LOGERROR, "dbsSdiCur Fetch Error!"); nRet = -1; break; } else if (iResult == KR_DBNOTFOUND) { KR_LOG(KR_LOGDEBUG, "Load [%d] SDIs Totally!", iCnt); break; } if (iCnt >= N_MAX_SDI_NUM) { KR_LOG(KR_LOGERROR, "Only [%d] SDIs Allowed!", N_MAX_SDI_NUM); nRet = -1; break; } memset(ptShmSDIDef, 0x00, sizeof(T_KRShmSDIDef)); ptShmSDIDef->lSdiId = stSdiCur.lOutSdiId; strncpy(ptShmSDIDef->caSdiName, \ kr_string_rtrim(stSdiCur.caOutSdiName), \ sizeof(ptShmSDIDef->caSdiName)); strncpy(ptShmSDIDef->caSdiDesc, \ kr_string_rtrim(stSdiCur.caOutSdiDesc), \ sizeof(ptShmSDIDef->caSdiDesc)); strncpy(ptShmSDIDef->caSdiType, \ kr_string_rtrim(stSdiCur.caOutSdiType), \ sizeof(ptShmSDIDef->caSdiType)); strncpy(ptShmSDIDef->caSdiValueType, \ kr_string_rtrim(stSdiCur.caOutSdiValueType), \ sizeof(ptShmSDIDef->caSdiValueType)); strncpy(ptShmSDIDef->caSdiAggrFunc, \ kr_string_rtrim(stSdiCur.caOutSdiAggrFunc), \ sizeof(ptShmSDIDef->caSdiAggrFunc)); strncpy(ptShmSDIDef->caSdiFreeFunc, \ kr_string_rtrim(stSdiCur.caOutSdiFreeFunc), \ sizeof(ptShmSDIDef->caSdiFreeFunc)); ptShmSDIDef->lStatisticsDatasrc = stSdiCur.lOutStatisticsDatasrc; ptShmSDIDef->lStatisticsIndex = stSdiCur.lOutStatisticsIndex; ptShmSDIDef->lStatisticsField = stSdiCur.lOutStatisticsField; ptShmSDIDef->lStatisticsLocation = stSdiCur.lOutStatisticsLocation; strncpy(ptShmSDIDef->caLocationProperty, \ kr_string_rtrim(stSdiCur.caOutLocationProperty), \ sizeof(ptShmSDIDef->caLocationProperty)); strncpy(ptShmSDIDef->caSdiFilterFormat, \ kr_string_rtrim(stSdiCur.caOutSdiFilterFormat), \ sizeof(ptShmSDIDef->caSdiFilterFormat)); strncpy(ptShmSDIDef->caSdiFilterString, \ kr_string_rtrim(stSdiCur.caOutSdiFilterString), \ sizeof(ptShmSDIDef->caSdiFilterString)); ptShmSDI->lSDIDefCnt++; ptShmSDIDef++; iCnt++; } ptShmSDI->tLastLoadTime = time(NULL); iResult = dbsSdiCur(dbsenv, KR_DBCURCLOSE, &stSdiCur); if (iResult != KR_DBOK) { KR_LOG(KR_LOGERROR, "dbsSdiCur Close Error!"); return -1; } return nRet; }
static int kr_traversal_datasrc(char *file_code) { int iResult = 0, iFlag = 0, iCnt = 0; T_DatasrcCur stDatasrcCur = {0}; iResult = dbsDatasrcCur(dbsenv, KR_DBCUROPEN, &stDatasrcCur); if (iResult != KR_DBOK) { fprintf(stderr, "dbsDatasrcCur Open Error[%d]!", iResult); return -1; } while(1) { iResult=dbsDatasrcCur(dbsenv, KR_DBCURFETCH, &stDatasrcCur); if (iResult != KR_DBNOTFOUND && iResult != KR_DBOK) { fprintf(stderr, "dbsDatasrcCur Fetch Error[%d]![%s]:[%s]", iResult, dbsenv->sqlstate, dbsenv->sqlerrmsg); iFlag = -1; break; } else if (iResult == KR_DBNOTFOUND) { fprintf(stdout, "Generated [%d] Tables Totally!\n", iCnt); break; } kr_string_rtrim(stDatasrcCur.caOutDatasrcName); kr_string_rtrim(stDatasrcCur.caOutDatasrcDesc); kr_string_rtrim(stDatasrcCur.caOutDatasrcFormat); /* Judge If datasrc matched */ if (gstArgs.datasrc_id != 0 && gstArgs.datasrc_id != stDatasrcCur.lOutDatasrcId) { continue; } for (int i=0; i<sizeof(gptIfaceFormat)/sizeof(T_KRIfaceFormat); ++i) { T_KRIfaceFormat *iface_format = &gptIfaceFormat[i]; /* Judge If file code matched */ if (strcasecmp(file_code, iface_format->file_code) != 0) { continue; } /* Judge If format name matched */ if (gstArgs.format_name[0] != '\0' && strcasecmp(gstArgs.format_name, iface_format->format_name)) { continue; } /* Traversal Fields */ iFlag = kr_traversal_fields(&stDatasrcCur, iface_format->datasrc_field_pre_func, iface_format->datasrc_field_func, iface_format->datasrc_field_post_func); if (iFlag != 0) { fprintf(stderr, "kr_traversal_fields [%ld] failed!\n", \ stDatasrcCur.lOutDatasrcId); break; } } iCnt++; } iResult = dbsDatasrcCur(dbsenv, KR_DBCURCLOSE, &stDatasrcCur); if (iResult != KR_DBOK) { fprintf(stderr, "dbsDatasrcCur Close Error!"); return -1; } return iFlag; }
int LoadShmSet(T_DbsEnv *dbsenv, T_KRShmSet *ptShmSet) { int nRet = 0; int iResult = 0; int iCnt = 0; T_SetDefCur stSetDefCur = {0}; T_KRShmSetDef *ptShmSetDef = &ptShmSet->stShmSetDef[0]; iResult = dbsSetDefCur(dbsenv, KR_DBCUROPEN, &stSetDefCur); if (iResult != KR_DBOK) { KR_LOG(KR_LOGERROR, "dbsSetDefCur Open Error!"); return -1; } while(1) { iResult=dbsSetDefCur(dbsenv, KR_DBCURFETCH, &stSetDefCur); if (iResult != KR_DBNOTFOUND && iResult != KR_DBOK) { KR_LOG(KR_LOGERROR, "dbsSetDefCur Fetch Error!"); nRet = -1; break; } else if (iResult == KR_DBNOTFOUND) { KR_LOG(KR_LOGDEBUG, "Load [%d] Sets Totally!", iCnt); break; } if (iCnt >= N_MAX_SET_NUM) { KR_LOG(KR_LOGERROR, "Only [%d] Sets Allowed!", N_MAX_SET_NUM); nRet = -1; break; } memset(ptShmSetDef, 0x00, sizeof(T_KRShmSetDef)); ptShmSetDef->lSetId = stSetDefCur.lOutSetId; strncpy(ptShmSetDef->caSetName, \ kr_string_rtrim(stSetDefCur.caOutSetName), \ sizeof(ptShmSetDef->caSetName)); strncpy(ptShmSetDef->caSetDesc, \ kr_string_rtrim(stSetDefCur.caOutSetDesc), \ sizeof(ptShmSetDef->caSetDesc)); strncpy(ptShmSetDef->caSetUsage, \ kr_string_rtrim(stSetDefCur.caOutSetUsage), \ sizeof(ptShmSetDef->caSetUsage)); strncpy(ptShmSetDef->caSetType, \ kr_string_rtrim(stSetDefCur.caOutSetType), \ sizeof(ptShmSetDef->caSetType)); strncpy(ptShmSetDef->caElementType, \ kr_string_rtrim(stSetDefCur.caOutElementType), \ sizeof(ptShmSetDef->caElementType)); ptShmSetDef->lElementLength = stSetDefCur.lOutElementLength; ptShmSet->lSetDefCnt++; ptShmSetDef++; iCnt++; } ptShmSet->tLastLoadTime = time(NULL); iResult = dbsSetDefCur(dbsenv, KR_DBCURCLOSE, &stSetDefCur); if (iResult != KR_DBOK) { KR_LOG(KR_LOGERROR, "dbsSetDefCur Close Error!"); return -1; } return nRet; }