Created
September 23, 2012 13:27
-
-
Save winash/3770948 to your computer and use it in GitHub Desktop.
String match contains all UDF for mysql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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 arguement 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); | |
printf("%s",trimm); | |
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] == '\0' ) | |
return str; | |
len = strlen(str); | |
endp = str + len; | |
while( isspace(*(++frontp)) ); | |
while( isspace(*(--endp)) && endp != frontp ); | |
if( str + len - 1 != endp ) | |
*(endp + 1) = '\0'; | |
else if( frontp != str && endp == frontp ) | |
*str = '\0'; | |
endp = str; | |
if( frontp != str ) | |
{ | |
while( *frontp ) *endp++ = *frontp++; | |
*endp = '\0'; | |
} | |
return str; | |
} | |
void str_match_deinit(UDF_INIT *initid) | |
{ | |
} | |
#endif /* HAVE_DLOPEN */ | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment