● UDF(User Defined Function : 사용자 정의 함수) 추가 방법
UDF는 C나 C++언어로 작성해야 합니다.
따라서 이 절은 C나 C++언어에 기초적인 이해가 있는 분을 대상으로 합니다.
UDF 만드는 과정 :
1. C/C++로 함수를 만든다.
2. 공유 라이브러리로 소스를 컴파일 한다.
3. MySQL에서 CREATE FUNCTION을 이용하여 만든 함수를 등록시킨다.
▶ MySQL과 C/C++의 자료형 구별하기
MySQL 자료형과 C/C++ 자료형의 관계 MySQL Type C/C++ Type
---------------------------------
STRING char* INTEGET long long REAL double
▶
UDF 만드는 방법 xxx() : UDF의 기본 함수. 실제 함수의 기능을 한다.
xxx_init() : xxx() 함수를 초기화하는 함수. 메모리를 할당하거나 인자들을 검사한다. 꼭 필요한 것은 아님
xxx_deinit() : xxx_init()에서 메모리를 할당하였으면 xxx_dainit()에서 할당한 메모리를 해제해야 한다.꼭 필요한 함수는 아니다.
▶ xxx() 함수
▶ UDF_INIT 구조체 : 다음과 같이 정의되어 있다.
typedef struct st_udf_init {
my_bool maybe_null;
/* 1 if function can return NULL*/
unsigned int decimals;
/* for real function */
unsigned int max_length;
/* free pointer for function data */
my_bool const_item;
/* 0 if result is independent of arguments */
}
UDF_INIT;
▶ UDF_ARGS : 중요한 구조체로 다음과 같이 정의 되 있다.
typedef struct st_udf_args {
unsigned int arg_count;
/* Number of arguments */
enum Item_result *arg_type;
/* Pointer to item_results */
char **arg니
/* Pointer to argument */
unsigned long *lengths;
/* Length of string arguments */
char * maybe_null;
/* Set to 1 for all maybe_null args */
}
UDF_ARGS;
※ arg_count : 함수로 넘어온 인자들의 개수
※ arg_type : 각 인자의 자료형
※ args : 실제 함수 인자의 값이 저장되어 있는 변수 UDF를 만드는 소스코드가 있지만 따로 공부하기로 하자!!!
▶ 컴파일 방법 : 임의로 getgrade라는 udf를 생각하자!!
$ gcc -shared -o getgrade.so getgrade.c
컴파일을 이렇게 하면 getgrade.so 라는 공유 라이브러리 파일이 생기고 이 파일을 /usr/lib 디렉토리로 복사한다.
▶ GETGRADE() 등록
mysql> CREATE FUNCTION GETGRADE RETURN STRING SONAME "getgrade.so";
▶ UDF 사용해 보기
UDF는 C나 C++언어로 작성해야 합니다.
따라서 이 절은 C나 C++언어에 기초적인 이해가 있는 분을 대상으로 합니다.
UDF 만드는 과정 :
1. C/C++로 함수를 만든다.
2. 공유 라이브러리로 소스를 컴파일 한다.
3. MySQL에서 CREATE FUNCTION을 이용하여 만든 함수를 등록시킨다.
▶ MySQL과 C/C++의 자료형 구별하기
MySQL 자료형과 C/C++ 자료형의 관계 MySQL Type C/C++ Type
---------------------------------
STRING char* INTEGET long long REAL double
▶
UDF 만드는 방법 xxx() : UDF의 기본 함수. 실제 함수의 기능을 한다.
xxx_init() : xxx() 함수를 초기화하는 함수. 메모리를 할당하거나 인자들을 검사한다. 꼭 필요한 것은 아님
xxx_deinit() : xxx_init()에서 메모리를 할당하였으면 xxx_dainit()에서 할당한 메모리를 해제해야 한다.꼭 필요한 함수는 아니다.
▶ xxx() 함수
▶ UDF_INIT 구조체 : 다음과 같이 정의되어 있다.
typedef struct st_udf_init {
my_bool maybe_null;
/* 1 if function can return NULL*/
unsigned int decimals;
/* for real function */
unsigned int max_length;
/* free pointer for function data */
my_bool const_item;
/* 0 if result is independent of arguments */
}
UDF_INIT;
▶ UDF_ARGS : 중요한 구조체로 다음과 같이 정의 되 있다.
typedef struct st_udf_args {
unsigned int arg_count;
/* Number of arguments */
enum Item_result *arg_type;
/* Pointer to item_results */
char **arg니
/* Pointer to argument */
unsigned long *lengths;
/* Length of string arguments */
char * maybe_null;
/* Set to 1 for all maybe_null args */
}
UDF_ARGS;
※ arg_count : 함수로 넘어온 인자들의 개수
※ arg_type : 각 인자의 자료형
※ args : 실제 함수 인자의 값이 저장되어 있는 변수 UDF를 만드는 소스코드가 있지만 따로 공부하기로 하자!!!
▶ 컴파일 방법 : 임의로 getgrade라는 udf를 생각하자!!
$ gcc -shared -o getgrade.so getgrade.c
컴파일을 이렇게 하면 getgrade.so 라는 공유 라이브러리 파일이 생기고 이 파일을 /usr/lib 디렉토리로 복사한다.
▶ GETGRADE() 등록
mysql> CREATE FUNCTION GETGRADE RETURN STRING SONAME "getgrade.so";
▶ UDF 사용해 보기