Brogram – MySQL UDF para verificar se STR1 contém todas as palavras de STR2

Deveria ter feito isso no código do aplicativo, mas onde está a diversão nisso

#ifdef STANDARD
/* STANDARD is defined, don't use any mysql functions */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#ifdef __WIN__
typedef unsigned __int64 ulonglong;/* Microsofts 64 bit types */
typedef __int64 longlong;
#else
typedef unsigned long long ulonglong;
typedef long long longlong;
#endif /*__WIN__*/
#else
#include <my_global.h>
#include <my_sys.h>
#if defined(MYSQL_SERVER)
#include <m_string.h>/* To get strmov() */
#else
/* when compiled as standalone */
#include <string.h>
#define strmov(a,b) stpcpy(a,b)
#define bzero(a,b) memset(a,0,b)
#define memcpy_fixed(a,b,c) memcpy(a,b,c)
#endif
#endif
#include <mysql.h>
#include <ctype.h>

#ifdef HAVE_DLOPEN

#if !defined(HAVE_GETHOSTBYADDR_R) || !defined(HAVE_SOLARIS_STYLE_GETHOST)
static pthread_mutex_t LOCK_hostname;
#endif

char *trim(char *str);
my_bool str_match_init
(UDF_INIT *initid, UDF_ARGS *args, char *message);
double str_match(UDF_INIT *initid, UDF_ARGS *args,
__attribute__
((unused)) char *result,
unsigned long *length,
__attribute__
((unused)) char *is_null,
__attribute__
((unused)) char *error);
void str_match_deinit(UDF_INIT *initid);



my_bool str_match_init
(UDF_INIT *initid, UDF_ARGS *args, char *message){

if (args->arg_count != 2)
{
strncpy
(message,
"two arguments must be supplied: str_match('text','matching string').",
MYSQL_ERRMSG_SIZE
);
return 1;
}

args
->arg_type[0] = STRING_RESULT;
args
->arg_type[1] = STRING_RESULT;

return 0;

}



double str_match(UDF_INIT *initid, UDF_ARGS *args,
__attribute__
((unused)) char *result,
unsigned long *length,
__attribute__
((unused)) char *is_null,
__attribute__
((unused)) char *error){

//Split the second string using strtok
char * pch;
int match = 1;
char *trimm;
pch
= strtok (args->args[1]," ");
while (pch != NULL)
{
//pch contains the token, trim it and match with large string
trimm
= trim(pch);
if((trimm!=0 && pch!= 0) &&NULL == strstr(args->args[0],trimm)){
match
= 0;
break;
}

pch
= strtok (NULL, " ");
}
if(match == 1)
return 1;
else
return 0;

}


char *trim(char *str)
{
size_t len = 0;
char *frontp = str - 1;
char *endp = NULL;

if( str == NULL )
return NULL;

if( str[0] == '' )
return str;

len
= strlen(str);
endp
= str + len;

while( isspace(*(++frontp)) );
while( isspace(*(--endp)) && endp != frontp );

if( str + len - 1 != endp )
*(endp + 1) = '';
else if( frontp != str && endp == frontp )
*str = '';

endp
= str;
if( frontp != str )
{
while( *frontp ) *endp++ = *frontp++;
*endp = '';
}


return str;
}



void str_match_deinit(UDF_INIT *initid)
{

}

#endif /* HAVE_DLOPEN */

Mais aqui http://dev.mysql.com/doc/refman/5.1/en/adding-functions.html