24.4.2.2 집계 함수를위한 UDF 호출 순서
이 섹션에서는 통합 UDF를 만들 때 정의해야하는 다양한 함수에 대해 설명합니다. 섹션 24.3.2 "새로운 사용자 정의 함수 추가" 에는 MySQL이이 함수를 호출 순서가 기재되어 있습니다.
xxx_reset()
이 함수는 MySQL이 새로운 그룹에서 첫 번째 행을 발견했을 때 호출됩니다. 이것은 모든 내부 요약 변수를 리셋하고 지정된
UDF_ARGS
인수를 그룹의 내부 요약 값의 첫 번째 값으로 사용합니다.xxx_reset()
는 다음과 같이 선언합니다.void xxx_reset(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
MySQL 5.6에서는
xxx_reset()
는 필요 없는지 사용되지 않고 UDF 인터페이스는 대신xxx_clear()
가 사용됩니다. 그러나 이전 버전의 서버에서 UDF를 동작시키는 경우xxx_reset()
와xxx_clear()
을 모두 정의 할 수 있습니다. (두 함수를 포함하면xxx_reset()
함수는 모든 변수를 재설정xxx_clear()
를 호출하고 나서,xxx_add()
를 호출UDF_ARGS
인수를 그룹의 첫 번째 값으로 추가함으로써 많은 경우 내부적으로 구현할 수 있습니다.)xxx_clear()
이 함수는 MySQL에서 요약 결과를 재설정 할 필요가있는 경우에 불려갑니다. 이것은 새로운 그룹이 될 때마다 가장 먼저 호출되지만 일치하는 행이없는 쿼리의 값을 재설정하기 위해 호출 될 수도 있습니다.
xxx_clear()
는 다음과 같이 선언합니다.void xxx_clear(UDF_INIT *initid, char *is_null, char *error);
is_null
은xxx_clear()
를 호출하기 전에CHAR(0)
을 가리 키도록 설정됩니다.처리에 문제가있을 경우는
error
인수가 가리키는 변수에 값을 저장할 수 있습니다.error
는 스트링 버퍼가 아니라 단일 바이트 변수를 가리 킵니다.xxx_clear()
는 MySQL 5.6에서 필요합니다.xxx_add()
이 함수는 같은 그룹에 속하는 모든 행에 대해 호출됩니다. 이것은
UDF_ARGS
인수의 값을 내부 요약 변수에 추가하는 데 사용합니다.void xxx_add(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
통합 UDF의 xxx()
함수는 비 집약 UDF와 마찬가지로 선언하십시오. 섹션 24.3.2.1 "간단한 함수를위한 UDF 호출 순서" 를 참조하십시오.
통합 UDF의 경우, MySQL은 그룹의 모든 행이 처리 된 후 xxx()
함수를 호출합니다. 일반적으로 여기 UDF_ARGS
인수에 액세스 할 수없고 내부 요약 변수에 따라 값을 반환합니다.
xxx()
에서 반환 처리는 비 집약 UDF와 같이 실시합니다. 섹션 24.3.2.4 "UDF의 반환 및 오류 처리" 를 참조하십시오.
xxx_reset()
함수 및 xxx_add()
함수는 UDF_ARGS
인수를 비 집약 UDF 함수와 마찬가지로 처리합니다. 섹션 24.3.2.3 "UDF 인수의 처리" 를 참조하십시오.
is_null
및 error
포인터 인수는 xxx_reset()
, xxx_clear()
, xxx_add()
및 xxx()
에 대한 모든 호출 동일합니다. 이것을 사용하면 오류가 발생했거나 xxx()
함수가 NULL
을 반환 여부를 기억할 수 있습니다. 문자열을 *error
에 저장하지 마십시오. error
는 스트링 버퍼가 아니라 단일 바이트 변수를 가리 킵니다.
*is_null
은 ( xxx_clear()
를 호출하기 전에) 그룹마다 리셋됩니다. *error
가 재설정되는 것은 아닙니다.
xxx()
가 반환 될 때 *is_null
또는 *error
가 설정되어 있다면, MySQL은 그룹 함수의 결과로서 NULL
을 반환합니다.