4. iLoader API#
iLoader API 개요#
Altibase iLoader API는 Altibase 데이터베이스의 데이터를 다운로드 또는 업드로하는 함수들로 구성되어 있으며, 이를 사용해서 응용프로그램을 개발할 수 있다. 데이터는 테이블 단위로 다운로드하거나 업로드 할 수 있다. iLoader API는 iLoader 유틸리티와 같은 기능을 제공한다. 이 툴에 대한 자세한 설명은 iLoader User's Manual 을 참고한다.
다음의 표에 iLoader API의 함수를 정리하였다.
함수 이름 | 설명 |
---|---|
altibase_iloader_init | iLoader 핸들을 할당한다 |
altibase_iloader_final | 핸들과 관련된 모든 자원과 핸들을 해제한다 |
altibase_iloader_options_init | 옵션 구조체를 기본값으로 초기화한다 |
altibase_iloader_formout | 테이블 포맷 파일 (FORM 파일)을 생성한다 |
altibase_iloader_dataout | 데이터베이스의 테이블로부터 데이터를 다운로드해서 파일에 저장한다 |
altibase_iloader_datain | 테이블로 데이터를 업로드한다 |
CallbackFunctionName | 사용자 정의 콜백 함수 |
iLoader API 사용#
헤더 파일#
응용 프로그램에서 포함해야 하는 헤더파일이다.
$ALTIBASE_HOME/include/iloaderApi.h
라이브러리 파일#
iLoader API를 사용해서 작성한 응용 프로그램의 빌드시 필요한 라이브러리 파일은 $ALTIBASE_HOME/lib 디렉터리에 존재한다. iLoader API 응용프로그램은 다음의 라이브러리 파일을 반드시 링크해야 한다.
-
UNIX
libiloader.a, libodbccli.a
샘플#
iLoader API를 사용해서 작성한 샘플 응용 프로그램은 $ALTIBASE_HOME/sample/ILOADERAPI 디렉터리에서 찾을 수 있다.
iLoader API 데이터 구조체#
이 절은 iLoader API로 응용프로그램 작성 시 사용해야 할 C 데이터 타입을 설명한다. 이들 데이터 타입은 위의 절에서 언급한 헤더파일에 정의되어 있다.
데이터 타입은 다음과 같다.
- iLoader 핸들
- 에러 구조체
- 로그 구조체
- 옵션 구조체
- iLoader API 열거형 (enum)
iLoader 핸들#
iLoader 핸들은 iLoader API 라이브러리 내에 정의된 자료형을 참조한다. 이 자료형은 iLoader API를 사용하는 응용프로그램의 동작과 관련된 정보를 저장하고 있다.
- ALTIBASE_ILOADER_HANDLE
iLoader 핸들. 이는 데이터 다운로드, 업로드 및 FORM 파일 생성시에 주로 사용된다.
iLoader 핸들은 altibase_iloader_init() 으로 할당하고, altibase_iloader_final()로 해제할 수 있다.
에러 구조체#
-
ALTIBASE_ILOADER_ERROR
이는 iLoader API로 작성된 응용프로그램 실행 중 발생한 오류를 진단할 수 있는 정보를 저장하는 데 사용되는 구조체이다. 이 구조체는 다음과 같이 정의되어 있다.typedef struct ALTIBASE_ILOADER_ERROR { int errorCode; /* Error Code */ char *errorState; /* SQLSTATE Code */ char *errorMessage; /* Error Message */ } ALTIBASE_ILOADER_ERROR;
로그 구조체#
iLoader API 는 iLoader 의 진행 상태를 로깅하는 데 사용하도록 다음의 두 구조체를 제공한다.
-
ALTIBASE_ILOADER_LOG
이는 iLoader 작업 수행 중 오류가 발생할 때마다 응용프로그램의 콜백 함수로 전달되는 구조체이다.
이는 또한 iLoader 작업의 완료시에도 콜백 함수로 전달된다. 이 시점에는 record, recordData, recordColCount, 및 errorMgr 멤버는 전달되지 않는다.
이 구조체의 목적은 iLoader 작업 수행 중 발생한 오류를 보고하고, 어떤 작업의 수행 결과와 관련된 정보를 제공하는 데 있다. 이 구조체는 다음과 같이 정의되어 있다.typedef struct ALTIBASE_ILOADER_LOG { char tableName[50]; int totalCount; int loadCount; int errorCount; int record; char **recordData; int recordColCount; ALTIBASE_ILOADER_ERROR errorMgr; } ALTIBASE_ILOADER_LOG;
멤버 설명 tableName 업로드 또는 다운로드 중인 테이블의 이름 totalCount 업로드 또는 다운로드를 시도한 행의 총 개수 loadCount 업로드 또는 다운로드에 성공한 행의 총 개수 errorCount 오류 발생으로 인해 업로드 또는 다운로드를 하지 못한 행의 총 개수. 오류가 발생했을 때, 이 값은 현재 오류는 포함하지 않는다. 즉, 이 값은 현재 오류 이전에 발생했던 모든 오류의 개수이다. record 오류 발생 시, 이는 업로드 또는 다운로드를 하지 못한 레코드의 위치를 알려준다. recordData 오류 발생 시, 이는 업로드 또는 다운로드를 하지 못한 레코드의 칼럼 데이터를 나타낸다. recordColCount 오류 발생 시, 이는 업로드 또는 다운로드를 하지 못한 레코드의 칼럼 개수를 알려준다. errorMgr 오류 발생 시, 이는 오류에 대한 정보를 담고 있는 에러 구조체를 가리킨다. -
ALTIBASE_ILOADER_STATIC_LOG
이 구조체는 iLoader 작업 수행 중 주기적으로 호출되는 응용프로그램의 콜백 함수로 전달된다. 전달하는 주기는 옵션 구조체의 setRowFrequency 옵션으로 설정할 있다.
이 구조체는 iLoader 작업에 대한 통계 정보를 전달하는 데 사용된다. 이 통계 정보는 작업 시작 시각, 업로드 또는 다운로드한 행의 총 개수, 업로드 또는 다운로드에 성공한 행의 개수, 오류 발생으로 인해 업로드 또는 다운로드에 실패한 행의 개수이다. 이 구조체는 다음과 같이 정의되어 있다.typedef struct ALTIBASE_ILOADER_STATISTIC_LOG { char tableName[50]; time_t startTime; int totalCount; int loadCount; int errorCount; } ALTIBASE_ILOADER_STATISTIC_LOG;
멤버 설명 tableName 업로드 또는 다운로드 중인 테이블의 이름 startTime 업로드 또는 다운로드 작업을 시작한 시각 totalCount 업로드할 행의 총 개수. 이 멤버는 데이터 다운로드시에는 사용되지 않는다. loadCount 업로드 또는 다운로드에 성공한 행의 총 개수 errorCount 오류 발생으로 인해 업로드 또는 다운로드를 하지 못한 행의 총 개수
옵션 구조체#
-
ALTIBASE_ILOADER_OPTION_V1
이 구조체의 대부분의 멤버는 iLoader 유틸리티의 옵션과 대응한다. 대응하는 옵션은 각 멤버에 주석을 달아놓았다. iLoader 옵션에 대한 자세한 설명은 iLoader User's Manual을 참고하기 바란다.
iloBool, iloLoadeMode, iloDirectMode 와 ALTIBASE_ILOADER_LOG_TYPE 열거형의 정의는 "iLoader API 열거형"을 참고한다. 이 구조체는 다음과 같이 정의되어 있다.typedef struct ALTIBASE_ILOADER_OPTIONS_V1 { int version; char loginID[128 * 2]; /* -u login_id */ char password[128]; /* -p password */ char serverName[128]; /* -s server_name */ int portNum; /* -port port_no */ char NLS[128]; /* -nls_use characterset */ char DBName[128]; char tableOwner[50]; char tableName[50]; /* -T table_name */ char formFile[1024]; /* -f formatfile */ char dataFile[32][1024]; /* -d datafile */ int dataFileNum; int firstRow; /* -F firstrow */ int lastRow; /* -L lastrow */ char fieldTerm[11]; /* -t field_term */ char rowTerm[11]; /* -r row_term */ char enclosingChar[11]; /* -e enclosing_term */ iloBool useLobFile; /* -lob use_lob_file */ iloBool useSeparateFile; /* -lob use_separate_file */ char lobFileSize[11]; /* -lob log_file_size */ char lobIndicator[11]; /* -lob lob_indicator*/ iloBool replication; /* -replication true/false */ iloLoadMode loadModeType; /* -mode mode_type */ char bad[1024]; /* -bad bad_file */ char log[1024]; /* -log log_file */ int splitRowCount; /* -split n */ int errorCount; /* -errors count */ int arrayCount; /* -array array_size */ int commitUnit; /* -commit commit_unit */ iloBool atomic; /* -atomic */ iloDirectMode directLog; /* -direct log/nolog */ int parallelCount; /* -parallel count */ int readSize; /* -readSize size */ iloBool informix; iloBool flock; iloBool mssql; iloBool getTotalRowCount; int setRowFrequency; } ALTIBASE_ILOADER_OPTIONS_V1;
멤버 설명 version 이 값은 altibase_iloader_options_init() 함수의 version 인자와 같은 값이어야 한다. tableOwner 테이블 소유자의 이름을 지정하는데 사용된다. loadModeType ILO_APPEND: iLoader의 -mode 옵션에 쓸 수 있는 값 중 APPEND 와 동일하다.
ILO_REPLACE: iLoader의 -mode 옵션에 쓸 수 있는 값 중 REPLACE 와 동일하다.
ILO_TRUNCATE: iLoader의 -mode 옵션에 쓸 수 있는 값 중 TRUNCATE 와 동일하다.
기본값은 ILO_APPEND이다.atomic Atomic Array INSERT를 사용할 것인지를 지정하는데 사용된다.
ILO_TRUE 또는 ILO_FALSE 중의 하나일 수 있다. 기본값은 ILO_FALSE이다.directLog Direct-path INSERT를 사용할 것인지를 지정하는데 사용된다.
이 값이 ILO_DIRECT_NONE이면, Direct-Path INSERT는 사용되지 않는다.
이 값이 ILO_DIRECT_LOG이면, 로깅 모드로 Direct-Path INSERT를 실행한다.
이 값이 ILO_DIRECT_NOLOG이면, 노로깅 모드로 Direct-Path INSERT를 실행한다.
기본값은 ILO_DIRECT_NONE이다.dataFileNum 이 구조체의 dataFile 멤버에 몇 개의 데이터파일이 지정되는지 그 개수를 명시하는데 사용된다. getTotalRowCount 데이터 파일 내의 행의 총 개수를 구해서 데이터 업로드시에 ALTIBASE_ILOADER_STATISTIC_LOG 구조체의 totalCount 멤버에 이 값을 설정할 것인지를 지정한다.
ILO_TRUE 또는 ILO_FALSE 중의 하나일 수 있다. 기본값은 ILO_FALSE이다.setRowFrequency 여기에 명시한 개수만큼의 행이 업로드 또는 다운로드 될 때마다 사용자 콜백 함수가 호출된다. 기본값은 0이다. 이 값이 0이면, 콜백 함수는 호출되지 않는다.
iLoader API 열거형 (enum)#
typedef enum
{
ILO_FALSE = 0, /* false */
ILO_TRUE = 1 /* true */
} iloBool;
typedef enum
{
ILO_APPEND,
ILO_REPLACE,
ILO_TRUNCATE
} iloLoadMode;
typedef enum
{
ILO_DIRECT_NONE,
ILO_DIRECT_LOG,
ILO_DIRECT_NOLOG
} iloDirectMode;
typedef enum
{
ILO_LOG,
ILO_STATISTIC_LOG
} ALTIBASE_ILOADER_LOG_TYPE;
iLoader API#
이 절은 iLoader API의 각 함수를 자세히 설명한다.
각 함수마다 다음의 항목이 제공된다.
-
함수명
-
구문
-
인자
-
결과값
-
설명
-
진단
-
관련 함수
-
예제
altibase_iloader_datain#
이 함수는 데이터를 데이터베이스 테이블로 업로드하는데 사용된다.
구문#
int altibase_iloader_datain (
ALTIBASE_ILOADER_HANDLE * handle,
int version
void * options
ALTIBASE_ILOADER_CALLBACK logCallback,
ALTIBASE_ILOADER_ERROR * error );
인자#
인자 | 입출력 | 설명 |
---|---|---|
handle | 입력 | iLoader 핸들을 가리키는 포인터 |
version | 입력 | iLoader API의 버전 |
options | 입력 | 옵션 구조체를 가리키는 포인터 |
logCallback | 입력 | 로그 콜백 함수 이름으로 사용자 정의 함수일 것이다. 이 값은 NULL일 수 있다. |
error | 출력 | 오류 진단을 위한 정보를 반환하는 에러 구조체를 가리키는 포인터이다. 이 구조체에 대한 자세한 설명은 "에러 구조체"를 참고한다. |
결과값#
ALTIBASE_ILO_SUCCESS, ALTIBASE_ILO_ERROR, 또는 ALTIBASE_ILO_WARNING
업로드 작업이 끝까지 성공했지만 하나 이상의 오류가 발생했다면 ALTIBASE_ILO_WARNING이 반환된다.
진단#
altibase_iloader_datain()이 ALTIBASE_ILO_ERROR 또는 ALTIBASE_ILO_WARNING을 반환할 때, 에러에 대한 정보는 error 인자에 반환된다.
설명#
altibase_iloader_datain() 은 파일의 데이터를 데이터베이스 테이블로 업로드하는 데 사용된다.
version 인자의 값은 ALTIBASE_ILOADER_V1 이어야 한다.
사용자 정의 로그 콜백 함수를 사용하면, logCallback 인자에 그 함수의 이름을 입력한다. 사용자 정의 로그 콜백 함수를 사용하지 않으면, logCallback 인자에 NULL을 지정한다.
관련 함수#
- altibase_iloader_init
- altibase_iloader_options_init
- altibase_iloader_formout
- altibase_iloader_final
예제#
다음의 예제는 데이터 업로드 시에 포맷 파일과 데이터 파일을 어떻게 명시하는지를 보여준다. 직접 iLoader 유틸리티를 사용하는 것과 응용프로그램 내에서 iLoader API를 사용하는 것 모두 아래에 예를 들었다.
-
iLoader 유틸리티를 사용해서 데이터 업로드
iloader in -s 127.0.0.1 -u sys -p manager -f t1.fmt -d t1.dat
-
응용 프로그램 내에서 iLoader API를 사용해서 데이터 업로드
int main() { ALTIBASE_ILOADER_HANDLE handle = ALTIBASE_ILOADER_NULL_HANDLE; ALTIBASE_ILOADER_OPTIONS_V1 opt; ALTIBASE_ILOADER_ERROR err; int rc; /* Allocate an ILOADER handle */ rc = altibase_iloader_init(&handle); if ( rc != ALTIBASE_ILO_SUCCESS ) { printf("altibase_iloader_init() failed: %d\n", rc); return 1; } /* Initialize an option structure */ altibase_iloader_options_init(ALTIBASE_ILOADER_V1, &opt); strcpy(opt.serverName, "127.0.0.1"); strcpy(opt.loginID, "sys"); strcpy(opt.password, "manager"); strcpy(opt.formFile, "t1.fmt"); strcpy(opt.dataFile[0], "t1.dat"); opt.dataFileNum = 1; /* Upload data */ rc = altibase_iloader_datain(&handle, ALTIBASE_ILOADER_V1, &opt, NULL, &err); if ( rc == ALTIBASE_ILO_SUCCESS ) { printf("SUCCESS\n"); } else { printf("ERR-%05X [%s] %s\n", err.errorCode, err.errorState, err.errorMessage); } if ( handle != ALTIBASE_ILOADER_NULL_HANDLE ) { altibase_iloader_final(&handle); } return 0; }
altibase_iloader_dataout#
이 함수는 데이터베이스 테이블에서 데이터를 다운로드하여 파일에 그 데이터를 저장하는데 사용된다.
구문#
int altibase_iloader_dataout (
ALTIBASE_ILOADER_HANDLE * handle,
int version
void * options
ALTIBASE_ILOADER_CALLBACK logCallback,
ALTIBASE_ILOADER_ERROR * error );
인자#
인자 | 입출력 | 설명 |
---|---|---|
handle | 입력 | iLoader 핸들을 가리키는 포인터 |
version | 입력 | iLoader API의 버전 |
options | 입력 | 옵션 구조체를 가리키는 포인터 |
logCallback | 입력 | 로그 콜백 함수 이름으로 사용자 정의 함수일 것이다. 이 값은 NULL일 수 있다. |
error | 출력 | 오류 진단을 위한 정보를 반환하는 에러 구조체를 가리키는 포인터이다. 이 구조체에 대한 자세한 설명은 "에러 구조체"를 참고한다. |
결과값#
ALTIBASE_ILO_SUCCESS 또는 ALTIBASE_ILO_ERROR
진단#
altibase_iloader_dataout()이 ALTIBASE_ILO_ERROR 을 반환할 때, 에러에 대한 정보는 error 인자에 반환된다.
설명#
altibase_iloader_ dataout() 은 데이터베이스 테이블에서 데이터를 다운로드하여 파일에 그 데이터를 저장하는데 사용된다.
version 인자의 값은 ALTIBASE_ILOADER_V1 이어야 한다.
사용자 정의 로그 콜백 함수를 사용하면, logCallback 인자에 그 함수의 이름을 입력한다. 사용자 정의 로그 콜백 함수를 사용하지 않으면, logCallback 인자에 NULL을 지정한다.
관련 함수#
- altibase_iloader_init
- altibase_iloader_options_init
- altibase_iloader_formout
- altibase_iloader_final
예제#
다음의 예제는 데이터 다운로드 시에 포맷 파일과 데이터 파일을 어떻게 명시하는지를 보여준다. 직접 iLoader 유틸리티를 사용하는 것과 응용프로그램 내에서 iLoader API를 사용하는 것 모두 아래에 예를 들었다.
-
iLoader 유틸리티를 사용해서 데이터 다운로드
iloader out -s 127.0.0.1 -u sys -p manager -f t1.fmt -d t1.dat
-
응용 프로그램 내에서 iLoader API를 사용해서 데이터 다운로드
int main() { ALTIBASE_ILOADER_HANDLE handle = ALTIBASE_ILOADER_NULL_HANDLE; ALTIBASE_ILOADER_OPTIONS_V1 opt; ALTIBASE_ILOADER_ERROR err; int rc; /* Allocate an iLoader handle */ rc = altibase_iloader_init(&handle); if ( rc != ALTIBASE_ILO_SUCCESS ) { printf("altibase_iloader_init() failed: %d\n", rc); return 1; } /* Initialize an option structure */ altibase_iloader_options_init(ALTIBASE_ILOADER_V1, &opt); strcpy(opt.serverName, "127.0.0.1"); strcpy(opt.loginID, "sys"); strcpy(opt.password, "manager"); strcpy(opt.formFile, "t1.fmt"); strcpy(opt.dataFile[0], "t1.dat"); opt.dataFileNum = 1; /* Download data */ rc = altibase_iloader_dataout(&handle, ALTIBASE_ILOADER_V1, &opt, NULL, &err); if ( rc == ALTIBASE_ILO_SUCCESS ) { printf("SUCCESS\n"); } else { printf("ERR-%05X [%s] %s\n", err.errorCode, err.errorState, err.errorMessage); } if ( handle != ALTIBASE_ILOADER_NULL_HANDLE ) { altibase_iloader_final(&handle); } return 0; }
altibase_iloader_final#
이 함수는 핸들과 그 핸들과 관련된 모든 자원을 해제한다.
구문#
int altibase_iloader_final (ALTIBASE_ILOADER_HANDLE * handle );
인자#
인자 | 입출력 | 설명 |
---|---|---|
handle | 입력 | 해제할 iLoader 핸들을 가리키는 포인터 |
결과값#
ALTIBASE_ILO_SUCCESS 또는 ALTIBASE_ILO_ERROR
설명#
altibase_iloader_final()은 지정한 iLoader핸들에 연결된 자원을 해제한다. 해제된 핸들은 프로그램 내에서 더 이상 사용할 수 없다.
관련 함수#
altibase_iloader_init
예제#
altibase_iloader_init 을 참고한다.
altibase_iloader_formout#
이 함수는 테이블의 포맷 파일 (즉, FORM 파일)을 생성하는데 사용된다.
구문#
int altibase_iloader_formout (
ALTIBASE_ILOADER_HANDLE * handle,
int version
void * options
ALTIBASE_ILOADER_ERROR * error );
인자#
인자 | 입출력 | 설명 |
---|---|---|
handle | 입력 | iLoader 핸들을 가리키는 포인터 |
version | 입력 | iLoader API의 버전 |
options | 입력 | 옵션 구조체를 가리키는 포인터 |
error | 출력 | 오류 진단을 위한 정보를 반환하는 에러 구조체를 가리키는 포인터이다. 이 구조체에 대한 자세한 설명은 "에러 구조체"를 참고한다. |
결과값#
ALTIBASE_ILO_SUCCESS 또는 ALTIBASE_ILO_ERROR
진단#
altibase_iloader_formout()이 ALTIBASE_ILO_ERROR 을 반환할 때, 에러에 대한 정보는 error 인자에 반환된다.
설명#
altibase_iloader_formout()은 데이터베이스 테이블의 정의를 담고 있는 포맷 파일 (즉, FORM 파일)을 생성하는데 사용된다.
이 함수는 altibase_iloader_init() 과 altibase_iloader_options_init() 이 호출된 후에 호출해야 한다.
version 인자의 값은 ALTIBASE_ILOADER_V1이어야 한다.
관련 함수#
- altibase_iloader_init
- altibase_iloader_options_init
- altibase_iloader_datain
- altibase_iloader_dataout
- altibase_iloader_final
예제#
다음의 예제는 테이블 T1의 포맷 파일을 생성하는 방법을 보여준다. 직접 iLoader 유틸리티를 사용하는 것과 응용프로그램 내에서 iLoader API를 사용하는 것 모두 아래에 예를 들었다.
-
iLoader 유틸리티를 사용해서 포맷 파일 생성
iloader formout -s 127.0.0.1 -u sys -p manager -T T1 -f t1.fmt
-
응용 프로그램 내에서 iLoader API를 사용해서 포맷 파일 생성
int main() { ALTIBASE_ILOADER_HANDLE handle = ALTIBASE_ILOADER_NULL_HANDLE; ALTIBASE_ILOADER_OPTIONS_V1 opt; ALTIBASE_ILOADER_ERROR err; int rc; /* Allocate an iLoader handle */ rc = altibase_iloader_init(&handle); if ( rc != ALTIBASE_ILO_SUCCESS ) { printf("Failed to altibase_iloader_init() failed: %d\n", rc); return 1; } /* Initialize an option structure */ altibase_iloader_options_init(ALTIBASE_ILOADER_V1, &opt); strcpy(opt.serverName, "127.0.0.1"); strcpy(opt.loginID, "sys"); strcpy(opt.password, "manager"); strcpy(opt.tableName, "t1"); strcpy(opt.formFile, "t1.fmt"); /* formout */ rc = altibase_iloader_formout(&handle, ALTIBASE_ILOADER_V1, &opt, &err); if ( rc == ALTIBASE_ILO_SUCCESS ) { printf("SUCCESS\n"); } else { printf("ERR-%05X [%s] %s\n", err.errorCode, err.errorState, err.errorMessage); } if ( handle != ALTIBASE_ILOADER_NULL_HANDLE ) { altibase_iloader_final(&handle); } return 0; }
altibase_iloader_init#
이 함수는 iLoader 핸들을 할당한다.
구문#
int altibase_iloader_init (ALTIBASE_ILOADER_HANDLE * handle );
인자#
인자 | 입출력 | 설명 |
---|---|---|
handle | 출력 | 새로 할당된 데이터 구조체에 대한 핸들이 반환될 버퍼를 가리키는 포인터 |
결과값#
ALTIBASE_ILO_SUCCESS 또는 ALTIBASE_ILO_ERROR
설명#
altibase_iloader_init()은 테이블 포맷 파일 생성, 데이터 다운로드 또는 데이터 업로드시에 사용되는 핸들을 할당한다.
하나의 핸들은 한 프로세스 내의 여러 쓰레드에서 공유할 수 없다.
관련 함수#
- altibase_iloader_datain
- altibase_iloader_dataout
- altibase_iloader_formout
- altibase_iloader_final
예제#
int main()
{
ALTIBASE_ILOADER_HANDLE handle = ALTIBASE_ILOADER_NULL_HANDLE;
int rc;
rc = altibase_iloader_init( &handle );
if ( rc != ILOADER_SUCCESS )
{
printf( "altibase_iloader_init() failed: %d\n",rc );
}
/* ... omit ... */
if( handle != ALTIBASE_ILOADER_NULL_HANDLE )
{
altibase_iloader_final( &handle );
}
return 0;
}
altibase_iloader_options_init#
이 함수는 옵션 구조체를 기본값으로 초기화한다.
구문#
int altibase_iloader_options_init (
int version,
void * options );
인자#
인자 | 입출력 | 설명 |
---|---|---|
handle | 입력 | iLoader 핸들을 가리키는 포인터 |
options | 입력 | 옵션 구조체를 가리키는 포인터 |
결과값#
ALTIBASE_ILO_SUCCESS 또는 ALTIBASE_ILO_ERROR
설명#
altibase_iloader_options_init()은 옵션 구조체를 기본값으로 초기화한다. 기본값에 대한 설명은 "옵션 구조체" 또는 iLoader User's Manual을 참고한다.
옵션 구조체는 옵션 구조체의 값을 셋팅하기 전에 이 함수를 사용해서 먼저 초기화되어야 한다.
관련 함수#
altibase_iloader_init
예제#
altibase_iloader_datain 과 altibase_iloader_dataout 함수의 예제를 참고한다.
CallbackFunctionName#
이 함수는 iLoader API를 사용한 응용프로그램의 실행 중에 발생하는 로그 정보를 사용자가 처리할 수 있게 해주는 사용자 정의 콜백 함수이다.
구문#
int CallbackFuncationName (
ALTIBASE_ILOADER_LOG_TYPE type,
void * log );
인자#
인자 | 입출력 | 설명 |
---|---|---|
type | 입력 | 반환되는 로그 구조체의 타입. 이 값은 ILO_LOG 또는 ILO_STATISTIC_LOG 중 하나이다. |
log | 입력 | 로그 구조체를 가리키는 포인터이다. type 값에 따라서, 이 인자는 ALTIBASE_ILOADER_LOG 구조체 또는 ALTIBASE_ILOADER_STATISTIC_LOG 구조체를 가리키는 포인터일 수 있다. type이 ILO_LOG이면 log는 ALTIBASE_ILOADER_LOG 구조체를 가리키는 포인터이고, type이 ILO_STATISTIC_LOG이면 log는 ALTIBASE_ILOADER_STATISTIC_LOG 구조체를 가리키는 포인터이다. 이 구조체에 대한 설명은 "로그 구조체"를 참고한다. |
결과값#
사용자 정의 콜백 함수가 호출될 때 type 인자에 ILO_STATISTIC_LOG가 넘어오고 그 콜백 함수가 0 이외의 값을 반환하면, 진행중이던 업로드 또는 다운로드 작업은 중단된다.
설명#
Altibase iLoader API 는 iLoader API 호출 외에 사용자 지정 코드를 실행할 수 있도록 해 준다. 이 기능은 사용자가 iLoader 로그에 기반하여 응용프로그램의 실행을 제어하는 것을 가능하게 한다. altibase_iloader_datain() 또는 altibase_iloader_dataout()를 호출할 때, 사용자 정의 함수인 콜백 함수를 등록할 수 있다. 콜백 함수가 호출될 때 콜백 함수는 다음의 iLoader 로그 정보를 받게 된다: 작업 시작 시각, 업로드 또는 다운로드를 시도한 행의 총 개수, 업로드 또는 다운로드에 성공한 행의 총 개수 및 오류 발생으로 인해 업로드 또는 다운로드 하지 못한 행의 총 개수.
응용프로그램의 콜백 함수는 다음 시점에 호출된다.
-
업로드 또는 다운로드 작업 중 오류가 발생했을 때:
이 시점에 콜백 함수로 전달되는 구조체는 ILO_LOG (ALTIBASE_ILOADER_LOG) 이다. ALTIBASE_ILOADER_LOG 구조체는 errorCode 멤버를 가지고 있는 에러 구조체를 포함한다. 이 멤버의 값이 0이 아니면, 에러가 발생했음을 의미한다. -
altibase_iloader_datain() 또는 altibase_iloader_dataout() 호출로 iLoader 작업이 완료되었을 때:
이 시점에 콜백 함수로 전달되는 구조체는 ILO_LOG (ALTIBASE_ILOADER_LOG)이다. 이 로그 구조체의 record 멤버의 값이 0이면, 수행이 완료되었음을 의미한다. -
옵션 구조체의 setRowFrequency에 설정한 행의 수만큼 업로드 또는 다운로드 할 때마다:
이 시점에 콜백 함수로 전달되는 구조체는 ILO_STATISTIC_LOG (ALTIBASE_ILOADER_STATISTIC_LOG)이다.
사용자 정의 콜백 함수가 0 외의 값을 반환하면, 현재 수행 중인 업로드 또는 다운로드 작업이 중단된다. 이 때는 로그 구조체의 loadCount 값이 틀릴 수 있다.
비록 사용자 콜백 함수가 setRowFrequency 멤버에 지정된 행의 수 만큼 업로드 또는 다운로드 될 때마다 호출될 것이라고 했지만, 다음의 원인으로 인해 작동이 안 될 수도 있다.- 옵션 구조체의 arrayCount 멤버의 값이 1보다 크게 설정되었을 때, 사용자 콜백 함수는 업로드 작업 수행 중에 호출되지 않을 수 있다.
- 옵션 구조체의 parallelCount 멤버의 값이 1보다 크게 설정되었을 때, 사용자 콜백 함수는 여러 쓰레드간의 동기화와 관련된 이유로 인해 호출되지 않을 수 있다.
관련 함수#
- altibase_iloader_datain
- altibase_iloader_dataout
예제#
-
사용자 콜백 함수 정의
int print_callback ( ALTIBASE_ILOADER_LOG_TYPE type, void *log) { int i; ALTIBASE_ILOADER_LOG *slog; ALTIBASE_ILOADER_STATISTIC_LOG *statisticlog; if ( type == ILO_LOG ) { slog = (ALTIBASE_ILOADER_LOG *) log; if ( slog->record == 0 ) { printf("LOG Total Count : %d\n", slog->totalCount); printf("LOG Load Count : %d\n", slog->loadCount); printf("LOG Error Count : %d\n", slog->errorCount); } else { printf("LOG %d\n", slog->record); for (i = 0; i < slog->recordColCount; i++) { printf(" [%d] : %s\n", i, slog->recordData[i]); } } if ( slog->errorMgr.errorCode != 0 ) { printf(" ERR-%05X [%s] %s\n", slog->errorMgr.errorCode, slog->errorMgr.errorState, slog->errorMgr.errorMessage); } } else if ( type == ILO_STATISTIC_LOG ) { statisticlog = (ALTIBASE_ILOADER_STATISTIC_LOG *) log; printf("STATISTIC LOG Start Time : %s\n", ctime(&statisticlog->startTime)); printf("STATISTIC LOG Table Name : %s\n", statisticlog->tableName ); printf("STATISTIC LOG Total Count : %d\n", statisticlog->totalCount ); printf("STATISTIC LOG Load Count : %d\n", statisticlog->loadCount); printf("STATISTIC LOG Error Count : %d\n", statisticlog->errorCount); } return 0; }
-
사용자 콜백 함수 등록
/* upload data */ altibase_iloader_datain(&handle, ALTIBASE_ILOADER_V1, &opt, print_callback, &err);