#include #include #include #include using namespace std; struct nametest_info { bool isConstant; char* buffer; }; extern "C" { my_bool nametest_init(UDF_INIT *initid, UDF_ARGS *args, char *message); void nametest_deinit(UDF_INIT *initid); char* nametest(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error); } my_bool nametest_init(UDF_INIT *initid, UDF_ARGS *args, char *message) { if(args->arg_count != 1) { strmov(message, "nametest() takes 1 argument"); return 1; } if(args->arg_type[0] != STRING_RESULT) { strmov(message, "nametest() requires 1 string"); return 1; } nametest_info *info = new nametest_info(); if(!info) { strmov(message, "Couldn't allocate memory for call"); return 1; } char* buffer = new char[4000]; if(!buffer) { delete info; strmov(message, "Couldn't allocate memory for call"); return 1; } info->buffer = buffer; if(args->args[0]) { initid->const_item = 1; strncpy(buffer, args->args[0], args->lengths[0]); buffer[args->lengths[0]] = '\0'; cout << "name = " << buffer << " length = " << args->lengths[0] << " args = " << args->args[0] << endl; info->isConstant = true; } else { info->isConstant = false; initid->maybe_null = 1; } return 0; } void nametest_deinit(UDF_INIT *initid) { if(initid->ptr) { nametest_info *info = (nametest_info *) initid->ptr; if(info->buffer) delete[] info->buffer; delete info; } } char* nametest(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error) { *is_null = 0; return "TESTING"; }