0
私は、MySQL 5.7.13(Linux)の中でユーザー定義関数を使用して問題が生じています:MySQLのUDFの戻りINTの代わりにSTRING
この機能は、使用してMySQLに定義されています。
CREATE FUNCTION PHPParse RETURNS STRING SONAME 'php_parser.so'
C (& C++)ファイルには、次のとおりです。
my_bool PHPParse_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
void PHPParse_deinit(UDF_INIT *initid);
char* PHPParse(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error);
my_bool PHPParse_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
{
initid->maybe_null = 1;
if (args->arg_count != 2 || args->arg_type[0] != STRING_RESULT || args->arg_type[1] != STRING_RESULT)
{
strcpy(message,"PHPParse (p_field_name, p_php_parser_string)");
return 1;
}
initid->max_length=256;
return 0;
}
char* PHPParse(UDF_INIT *initid MY_ATTRIBUTE((unused)), UDF_ARGS *args, char *result, unsigned long *length,char *is_null, char *error MY_ATTRIBUTE((unused)))
{
*is_null = 0;
memcpy(result,"begginning",10);
*length= (unsigned long)(10);
return result;
}
私は、次のSQLクエリを使用する場合:
は私が間違っているをbegginning返すことを想定するだろうが
date:
62656767696e6e696e67
62656767696e6e696e67
62656767696e6e696e67
62656767696e6e696e67
etc...
:0
SELECT PHPParse('hello','222') as `date` FROM invoices ;
私はこの結果を得ますか?
P.S は、コマンドをコンパイルします。
g++ -std=c++11 -fPIC -shared -I/usr/include/mysql -o /usr/lib64/mysql/plugin/php_parser.so include/PHPSerializedDataLoader.cpp PHPParse.cc