0
這是我第一次嘗試爲mysql創建一個udf。該文檔聲明my_func_init
在執行主函數之前被調用,但在我的環境中,這似乎不會發生。my_udf_init不叫
long long charmatch(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
{
return 42;
}
my_bool charmatch_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
{
if (args->arg_count != 2)
{
strncpy(message, "charmatch() requires two arguments", 34);
return EXIT_FAILURE;
// was return EXIT_SUCCESS;
}
if(args->arg_type[0] != STRING_RESULT)
{
strncpy(message, "argument 1 must be a string", 27);
return EXIT_FAILURE;
// was return EXIT_SUCCESS;
}
if(args->arg_type[0] != STRING_RESULT)
{
strncpy(message, "argument 2 must be a string", 27);
return EXIT_FAILURE;
// was return EXIT_SUCCESS;
}
return EXIT_SUCCESS;
}
正如你所看到的,我正在檢查是否有兩個參數。理論上SELECT CHARMATCH()
應該返回一條消息,說我必須設置兩個參數,但它不是:它返回42.
爲什麼它不返回消息?
編輯似乎問題是在我的返回值爲錯誤是0而不是1.我修正了它,現在調用SELECT CHARMATCH()
與錯誤數量的參數返回一個空集。爲什麼沒有顯示錯誤?
謝謝,那就是問題所在。我相應地更改了返回值,但不顯示錯誤消息。 – gilden
我的第二個猜測是,它與strncpy()有關,使用此函數,如果源文件中的C字符串的長度小於傳遞的數字,則目標將僅以空值終止。你可以嘗試將strncpy()的長度設置爲MYSQL_ERRMSG_SIZE嗎? – istepura
謝謝,它現在有效。 – gilden