24.4.2.3 UDF 인수의 처리
args
매개 변수는 다음과 같은 멤버를 가진 UDF_ARGS
구조체를 가리 킵니다.
unsigned int arg_count
인수의 수입니다. 특정 수의 인수를 사용하여 함수를 호출 할 필요가있는 경우는 초기화 함수에서이 값을 검사합니다. 예 :
if (args->arg_count != 2) { strcpy(message,"XXX() requires two arguments"); return 1; }
배열 인 기타
UDF_ARGS
멤버 값의 경우, 배열 참조는 제로베이스입니다. 즉, 0에서args->arg_count
- 1까지의 인덱스 값을 사용하여 배열 멤버를 참조합니다.enum Item_result *arg_type
각 인수의 형태를 포함하는 배열의 포인터. 지정 가능한 형태의 값은
STRING_RESULT
,INT_RESULT
,REAL_RESULT
및DECIMAL_RESULT
입니다.인수가 기대하고있는 형태 인 것을 확인하고 그렇지 않은 경우 오류를 반환하려면 초기화 함수에서
arg_type
배열을 확인합니다. 예 :if (args->arg_type[0] != STRING_RESULT || args->arg_type[1] != INT_RESULT) { strcpy(message,"XXX() requires a string and an integer"); return 1; }
DECIMAL_RESULT
형의 인수는 문자열로 전달되기 때문에STRING_RESULT
값과 마찬가지로 이것들을 처리해야합니다.함수의 인수가 특정 형태 인 것을 요구하는 대신 초기화 함수를 사용하여
arg_type
요소를 필요한 형태로 설정할 수 있습니다. 이렇게하면 MySQL이xxx()
의 각 호출에서 인수를 그 형태에 강제로 변경합니다. 예를 들어, 처음 두 개의 인수가 각각 문자열과 정수로 강제로 지정하려면xxx_init()
에서 다음 작업을 수행합니다.args->arg_type[0] = STRING_RESULT; args->arg_type[1] = INT_RESULT;
1.3
,DECIMAL
컬럼 값 등의 정확한 치형의 10 진수 인수는DECIMAL_RESULT
형으로 전달됩니다. 그러나 값은 문자열로 전달됩니다. 수치를 받으려면 초기화 함수를 사용하여 인수가REAL_RESULT
값에 강제로 변경되도록 지정합니다.args->arg_type[2] = REAL_RESULT;
char **args
args->args
는 함수에 전달 된 인수의 일반적인 성질에 대한 정보를 초기화 함수에 통지합니다. 상수 인수i
의 경우args->args[i]
는 인수 값을 가리 킵니다. (값에 올바르게 액세스하는 방법에 대해서는 다음의 설명을 참조하십시오.) 비 정수 인수의 경우args->args[i]
는0
입니다. 상수 인수는3
, 44*7-2
,SIN(3.14)
등의 정수만을 사용한 식입니다. 비 정수 인수는 행에 따라 변화 할 수있는 값을 참조하는 식이고, 컬럼 명, 비 정수 인수를 지정하여 호출되는 함수 등이 있습니다.메인 함수에 대한 각 호출에서
args->args
는 현재 처리되고있는 행에 대해 전달되는 실제 인수가 포함되어 있습니다.인수
i
가NULL
의 경우args->args[i]
는 제로 포인터 (0)입니다. 인수가NULL
이 아닌 경우 함수는 인수를 다음과 같이 볼 수 있습니다.STRING_RESULT
인자는 문자열 포인터와 길이로 지정 이진 데이터 또는 길이의 데이터를 처리 할 수 있습니다. 문자열의 내용은args->args[i]
로 취득 할 문자열의 길이는args->lengths[i]
입니다. 문자열이 제로로 끝나는 것으로 가정하지 마십시오.INT_RESULT
형의 인수의 경우args->args[i]
를long long
값으로 변환해야합니다.long long int_val; int_val = *((long long*) args->args[i]);
REAL_RESULT
형의 인수의 경우args->args[i]
를double
값으로 변환해야합니다.double real_val; real_val = *((double*) args->args[i]);
DECIMAL_RESULT
형의 인수의 경우 값은 문자열로 전달되기 때문에STRING_RESULT
값과 동일하게 처리되도록하십시오.ROW_RESULT
인수는 구현되어 있지 않습니다.
unsigned long *lengths
초기화 함수의 경우
lengths
배열은 각 인수의 최대 문자열 길이를 보여줍니다. 이러한 변경하지 마십시오. 메인 함수의 각 호출에서lengths
에는 현재 처리 된 행에 대해 전달 된 문자열 인수의 실제 길이가 포함되어 있습니다.INT_RESULT
형 또는REAL_RESULT
형의 인수의 경우는lengths
에는 (초기화 함수의 경우와 마찬가지로) 인수의 최대 길이가 포함되어 있습니다.char *maybe_null
초기화 함수에서
maybe_null
배열은 각 인수에 대한 인수 값이 NULL의 경우가 있는지 여부를 나타냅니다 (없으면 0, 및 경우 1).char **attributes
args->attributes
는 UDF 인수의 이름에 대한 정보를 알려줍니다. 인수i
의 경우 속성 이름은args->attributes[i]
의 문자열로 얻을 수 속성의 길이는args->attribute_lengths[i]
입니다. 문자열이 제로로 끝나는 것으로 가정하지 마십시오.기본적으로 UDF 인수 이름은 인수를 지정하는 데 사용되는 식의 텍스트입니다. UDF의 경우, 인수는 옵션의
[AS]
절이 포함되어있는 경우도 있고,이 경우의 인수 이름은alias_name
alias_name
입니다. 따라서 각 인수의attributes
값은 별칭이 지정되어 있는지에 따라 다릅니다.UDF
my_udf()
가 다음과 같이 호출합니다.SELECT my_udf(expr1, expr2 AS alias1, expr3 alias2);
이 경우
attributes
배열 및attribute_lengths
배열의 값은 다음과 같습니다.args->attributes[0] = "expr1" args->attribute_lengths[0] = 5 args->attributes[1] = "alias1" args->attribute_lengths[1] = 6 args->attributes[2] = "alias2" args->attribute_lengths[2] = 6
unsigned long *attribute_lengths
attribute_lengths
배열은 각 속성 이름의 길이를 보여줍니다.