#ifdef HAVE_CONFIG_H #include "config.h" #endif #include <unistd.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <limits.h> #include <mysql.h> #include "kwset.h" kwset_t fss_set = NULL; char fss_prepare_init(UDF_INIT * initid, UDF_ARGS * args, char *message) { if (args->arg_count != 1) { strcpy(message, "fss_prepare() requires one argument"); return 1; } args->arg_type[0] = STRING_RESULT; return 0; } int fss_prepare_add(UDF_INIT * initid, UDF_ARGS * args, char *is_null, char *error) { kwsincr(fss_set, strdup(args->args[0]), args->lengths[0]); *is_null = 1; return 0; } void fss_prepare_clear(UDF_INIT * initid, char *is_null, char *error) { if(fss_set) kwsfree(fss_set); fss_set = kwsalloc(NULL); } long long fss_prepare(UDF_INIT * initid, UDF_ARGS * args, char *is_null, char *error) { const char *err = kwsprep(fss_set); if (err) { strcpy(error,err); return 1; } *is_null = 0; return 0; } char fss_search_init(UDF_INIT * initd, UDF_ARGS * args, char *message) { if (args->arg_count != 1) { strcpy(message, "fss_search() requires one argument"); return 1; } args->arg_type[0] = STRING_RESULT; if (!fss_set) { strcpy(message, "Please use fss_prepare() to set needles"); return 1; } return 0; } long long fss_search(UDF_INIT * initid, UDF_ARGS * args, char *is_null, char *error) { struct kwsmatch m; bzero(&m, sizeof(m)); if (!fss_set) { strcpy(error, "Please use fss_prepare() to set needles"); *error=1; return 0; } size_t match_pos = kwsexec(fss_set, args->args[0], args->lengths[0], &m); if (match_pos == (size_t) - 1) { return 0; } else { return 1; } }