• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 1. MySQL 내부 사양
    2. MySQL 플러그인 API
    3. 플러그인을 위한 MySQL서비스
    4. MySQL에 새로운 함수 추가
    1. 사용자 정의 함수 인터페이스 기능
    2. 새로운 사용자 정의 함수 추가
    3. 새로운 Native 함수의 추가
    5. MySQL 디버그 및 이식
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

24.4.3 새로운 Native 함수의 추가

새로운 네이티브 MySQL 함수를 추가하려면 여기에서 설명하는 절차를 사용합니다. 이 단계에서는 소스 배포판을 사용해야합니다. 네이티브 함수를 바이너리 배포판에 추가 할 수 없습니다. 이 경우 MySQL 소스 코드를 변경하여 변경된 소스에서 MySQL을 컴파일 할 필요가 있기 때문입니다. 다른 버전의 MySQL로 마이그레이션하는 경우 (예를 들어, 새 버전이 출시 된 경우) 새 버전을 사용하여이 절차를 반복해야합니다.

슬레이브 서버로 복제되는 문에 새로운 네이티브 함수를 참조하는 경우, 모든 슬레이브 서버에서 함수를 사용할 수 있도록해야합니다. 그렇지 않으면, 슬레이브에서 그 함수를 호출하려고 할 때 복제가 슬레이브로 실패합니다.

새로운 네이티브 함수를 추가하려면 다음 단계에 따라 sql 디렉토리의 소스 파일을 변경합니다.

  1. item_create.cc 함수에 대한 서브 클래스를 작성합니다.

    • 함수가 고정 된 수의 인수를받는 경우, 함수가받는 인수의 수 (0,1,2 또는 3 개)에 따라 Create_func_arg0 , Create_func_arg1 , Create_func_arg2 또는 Create_func_arg3 의 서브 클래스를 각각 작성합니다. 예를 들어, Create_func_uuid , Create_func_abs , Create_func_pow 및 Create_func_lpad 클래스를 참조하십시오.

    • 함수가받는 인수의 수가 가변의 경우 Create_native_func 의 서브 클래스를 작성합니다. 예를 들어, Create_func_concat 를 참조하십시오.

  2. SQL 문에서 함수를 참조 할 수있는 이름을 지정하려면 다음 배열에 행을 추가하여 item_create.cc 에 이름을 등록합니다.

    static Native_func_registry func_array[]
    

    같은 함수에 여러 이름을 등록 할 수 있습니다. 예를 들어, "LCASE" 및 "LOWER" 행을 참조하십시오. 이들은 Create_func_lcase 의 별칭입니다.

  3. item_func.h 에 함수가 숫자 나 문자열 중 하나를 반환 여부에 따라 Item_num_func 또는 Item_str_func 에서 상속하는 클래스를 선언합니다.

  4. item_func.cc 에 숫자 함수 또는 문자열 함수 중 하나를 정의할지에 따라 다음 중 하나의 선언을 추가합니다.

    double   Item_func_newname::val()
    longlong Item_func_newname::val_int()
    String  *Item_func_newname::Str(String *str)
    

    표준 항목 ( Item_num_func 등)에서 객체를 상속하는 경우, 그 함수 중 하나를 정의하는 것만으로 종종 부모 개체에서 다른 함수가 제공됩니다. 예를 들어, Item_str_func 클래스는 ::str() 에 의해 반환 된 값에 대해서 atof() 를 실행하는 val() 함수를 정의하고 있습니다.

  5. 함수 결정되지 않는 경우는 함수의 결과를 캐시하지 않음을 나타 내기 위해 다음 문을 항목의 생성자에 포함됩니다.

    current_thd->lex->safe_to_cache_query=0;
    

    함수 결정되지 않는 상태는 인수의 값이 고정되어 있어도 호출마다 다른 결과가 반환 될 수있는 경우입니다.

  6. 많은 경우 다음 객체 함​​수도 정의합니다.

    void Item_func_newname::fix_length_and_dec()
    

    이 함수는 지정된 인수에 따라 적어도 max_length 을 계산합니다. max_length 는 함수가 반환 할 수있는 최대 문자 수입니다. 메인 함수가 NULL 값을 돌려 줄 수없는 경우,이 함수 maybe_null = 0 도 설정합니다. 이 함수는 인수의 maybe_null 변수를 체크하여 함수의 인수 중 하나가 NULL 을 반환 할 수 있는지 여부를 확인할 수 있습니다. 이를 수행하는 방법의 전형적인 예는 Item_func_mod::fix_length_and_dec 를 참조하십시오.

모든 함수는 스레드로부터 안전해야합니다. 즉, 함수 내에서 상호 배타적 잠금으로 보호하지 않고 글로벌 변수 나 정적 변수를 사용하지 마십시오.

::val() , ::val_int() 또는 ::str() 에서 NULL 을 반환하는 경우 null_value 을 1로 설정하고 0을 반환합니다.

::str() 오브젝트 함수는주의해야 할 추가 고려 사항이 있습니다.

  • String *str 인수는 결과를 저장하는 데 사용할 수있는 문자열 버퍼를 제공합니다. ( String 형의 자세한 내용은 sql_string.h 파일을 참조하십시오.)

  • ::str() 함수는 결과가 유지되는 문자열을 반환하거나 결과가 NULL 의 경우 (char*) 0 을 반환합니다.

  • 현재 모든 문자열 함수는 절대적으로 필요한 경우를 제외하고 메모리 할당을 피하려고합니다.


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved