prepared statement에서 bind 변수에 데이터를 바인딩하기 위하여 사용되는 함수이다. 이때, 주어진 a_type의 value의 값을 실제 바인딩되어야 하는 타입으로 변환하여 저장한다. 이후, cci_execute()가 호출될 때 저장된 데이터가 서버로 전송된다. 같은 index에 대해서 여러 번 cci_bind_param()을 호출할 경우 마지막으로 설정한 값이 유효하다.
데이터베이스에 NULL을 바인딩할 경우 다음의 두 가지 형태를 가질 수 있다.
flag에 CCI_BIND_PTR이 설정되어 있을 경우 value 변수의 포인터만 복사하고(shallow copy) 값은 복사하지 않는다. flag가 설정되지 않는 경우 메모리를 할당하여 value 변수의 값을 복사(deep copy)한다. 만약 같은 메모리 버퍼를 이용하여 여러 개의 컬럼을 바인딩할 경우라면, CCI_BIND_PTR flag를 설정하지 않아야 한다.
T_CCI_A_TYPE은 CCI 응용 프로그램 내에서 사용되는 C 언어의 타입을 의미하며, int, float 등의 primitive 타입과 T_CCI_BIT, T_CCI_DATE 등의 CCI 가 정의한 user-defined 타입으로 구성된다. 각 타입에 대한 식별자는 아래의 표와 같이 정의되어 있다.
a_type |
value 타입 |
---|---|
CCI_A_TYPE_STR |
char** |
CCI_A_TYPE_INT |
int* |
CCI_A_TYPE_FLOAT |
float* |
CCI_A_TYPE_DOUBLE |
double* |
CCI_A_TYPE_BIT |
T_CCI_BIT* |
CCI_A_TYPE_SET |
T_CCI_SET* |
CCI_A_TYPE_DATE |
T_CCI_DATE* |
CCI_A_TYPE_BIGINT |
int64_t* |
CCI_A_TYPE_BLOB |
T_CCI_BLOB |
CCI_A_TYPE_CLOB |
T_CCI_CLOB |
또한, T_CCI_U_TYPE은 CUBRID 데이터베이스에서 지원하는 타입을 의미하며, 각 타입에 대한 식별자 정의는 아래 표를 참고한다. cci_bind_param() 함수에서 이 두 타입이 사용되는 이유는 C 언어가 이해하는 A 타입의 데이터를 데이터베이스가 이해할 수 있는 U 타입의 데이터로 변환하기 위한 정보를 전달하기 위해서이다. T_CCI_A_TYPE 및 T_CCI_U_TYPE enum은 모두 cas_cci.h 파일에 정의되어 있다.
u_type |
value 타입 |
---|---|
CCI_U_TYPE_CHAR |
char** |
CCI_U_TYPE_STRING |
char** |
CCI_U_TYPE_NCHAR |
char** |
CCI_U_TYPE_VARNCHAR |
char** |
CCI_U_TYPE_BIT |
T_CCI_BIT* |
CCI_U_TYPE_VARBIT |
T_CCI_BIT* |
CCI_U_TYPE_NUMERIC |
char** |
CCI_U_TYPE_INT |
int* |
CCI_U_TYPE_SHORT |
int* |
CCI_U_TYPE_MONETARY |
Double* |
CCI_U_TYPE_FLOAT |
float* |
CCI_U_TYPE_DOUBLE |
Double* |
CCI_U_TYPE_DATE |
T_CCI_DATE* |
CCI_U_TYPE_TIME |
T_CCI_DATE* |
CCI_U_TYPE_TIMESTAMP |
T_CCI_DATE* |
CCI_U_TYPE_OBJECT |
char** |
CCI_U_TYPE_BIGINT |
int64_t* |
CCI_U_TYPE_DATETIME |
T_CCI_DATE* |
int cci_bind_param(int req_handle, int index, T_CCI_A_TYPE a_type, void *value, T_CCI_U_TYPE u_type, char flag)