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);