2016-07-27 5 views
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 

答えて

1

誰もが興味を持っている場合には、迅速な "パッチ" は、文字列にキャストすることです:

SELECT CAST(PHPParse(`serialized_infos`, '22') AS CHAR CHARACTER SET utf8) as date1 FROM invoices 
関連する問題