2016-07-27 24 views
0

Ich habe ein Problem, eine benutzerdefinierte Funktion in MySQL mit 5.7.13 (Linux):mysql UDF Rückkehr INT statt STRING

Diese Funktion wird in mysql definiert werden:

CREATE FUNCTION PHPParse RETURNS STRING SONAME 'php_parser.so' 

Die C (& C++) Datei sind die folgenden:

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; 
} 

Wenn ich die folgende SQL-Abfrage:

SELECT PHPParse('hello','222') as `date` FROM invoices ; 

ich dieses Ergebnis:

date: 
62656767696e6e696e67 
62656767696e6e696e67 
62656767696e6e696e67 
62656767696e6e696e67 
etc... 

Während angenommen werden, würde begginning

Wo Rückkehr bin ich falsch?

P. S Compile-Befehl:

g++ -std=c++11 -fPIC -shared -I/usr/include/mysql -o /usr/lib64/mysql/plugin/php_parser.so include/PHPSerializedDataLoader.cpp PHPParse.cc 

Antwort

1

Falls jemand interessiert ist, ein schnelles "Patch" ist zu bespannen werfen:

SELECT CAST(PHPParse(`serialized_infos`, '22') AS CHAR CHARACTER SET utf8) as date1 FROM invoices