From 285e7aa179a6081531be3274772b89e8989fd107 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Thu, 26 Sep 2013 18:02:17 +0400 Subject: MDEV-4425 REGEXP enhancements --- client/mysqltest.cc | 52 +++++++++++++++++++++++++--------------------------- 1 file changed, 25 insertions(+), 27 deletions(-) (limited to 'client/mysqltest.cc') diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 30b83c940fe..99a89dd52c3 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -44,7 +44,7 @@ #include #include #include -#include "my_regex.h" /* Our own version of regex */ +#include /* pcreposix regex library */ #ifdef HAVE_SYS_WAIT_H #include #endif @@ -250,12 +250,12 @@ static const char *opt_suite_dir, *opt_overlay_dir; static size_t suite_dir_len, overlay_dir_len; /* Precompiled re's */ -static my_regex_t ps_re; /* the query can be run using PS protocol */ -static my_regex_t sp_re; /* the query can be run as a SP */ -static my_regex_t view_re; /* the query can be run as a view*/ +static regex_t ps_re; /* the query can be run using PS protocol */ +static regex_t sp_re; /* the query can be run as a SP */ +static regex_t view_re; /* the query can be run as a view*/ static void init_re(void); -static int match_re(my_regex_t *, char *); +static int match_re(regex_t *, char *); static void free_re(void); static char *get_string(char **to_ptr, char **from_ptr, @@ -7246,13 +7246,13 @@ void str_to_file(const char *fname, char *str, int size) } -void check_regerr(my_regex_t* r, int err) +void check_regerr(regex_t* r, int err) { char err_buf[1024]; if (err) { - my_regerror(err,r,err_buf,sizeof(err_buf)); + regerror(err,r,err_buf,sizeof(err_buf)); die("Regex error: %s\n", err_buf); } } @@ -8544,19 +8544,18 @@ char *re_eprint(int err) { static char epbuf[100]; size_t len __attribute__((unused))= - my_regerror(REG_ITOA|err, (my_regex_t *)NULL, epbuf, sizeof(epbuf)); + regerror(REG_ITOA|err, (regex_t *)NULL, epbuf, sizeof(epbuf)); assert(len <= sizeof(epbuf)); return(epbuf); } -void init_re_comp(my_regex_t *re, const char* str) +void init_re_comp(regex_t *re, const char* str) { - int err= my_regcomp(re, str, (REG_EXTENDED | REG_ICASE | REG_NOSUB), - &my_charset_latin1); + int err= regcomp(re, str, (REG_EXTENDED | REG_ICASE | REG_NOSUB | REG_DOTALL)); if (err) { char erbuf[100]; - int len= my_regerror(err, re, erbuf, sizeof(erbuf)); + int len= regerror(err, re, erbuf, sizeof(erbuf)); die("error %s, %d/%d `%s'\n", re_eprint(err), (int)len, (int)sizeof(erbuf), erbuf); } @@ -8601,7 +8600,7 @@ void init_re(void) } -int match_re(my_regex_t *re, char *str) +int match_re(regex_t *re, char *str) { while (my_isspace(charset_info, *str)) str++; @@ -8613,7 +8612,7 @@ int match_re(my_regex_t *re, char *str) str= comm_end + 2; } - int err= my_regexec(re, str, (size_t)0, NULL, 0); + int err= regexec(re, str, (size_t)0, NULL, 0); if (err == 0) return 1; @@ -8622,7 +8621,7 @@ int match_re(my_regex_t *re, char *str) { char erbuf[100]; - int len= my_regerror(err, re, erbuf, sizeof(erbuf)); + int len= regerror(err, re, erbuf, sizeof(erbuf)); die("error %s, %d/%d `%s'\n", re_eprint(err), (int)len, (int)sizeof(erbuf), erbuf); } @@ -8631,10 +8630,9 @@ int match_re(my_regex_t *re, char *str) void free_re(void) { - my_regfree(&ps_re); - my_regfree(&sp_re); - my_regfree(&view_re); - my_regex_end(); + regfree(&ps_re); + regfree(&sp_re); + regfree(&view_re); } /****************************************************************************/ @@ -10071,13 +10069,13 @@ void free_replace_regex() int reg_replace(char** buf_p, int* buf_len_p, char *pattern, char *replace, char *string, int icase) { - my_regex_t r; - my_regmatch_t *subs; + regex_t r; + regmatch_t *subs; char *replace_end; char *buf= *buf_p; int len; int buf_len, need_buf_len; - int cflags= REG_EXTENDED; + int cflags= REG_EXTENDED | REG_DOTALL; int err_code; char *res_p,*str_p,*str_end; @@ -10096,13 +10094,13 @@ int reg_replace(char** buf_p, int* buf_len_p, char *pattern, if (icase) cflags|= REG_ICASE; - if ((err_code= my_regcomp(&r,pattern,cflags,&my_charset_latin1))) + if ((err_code= regcomp(&r,pattern,cflags))) { check_regerr(&r,err_code); return 1; } - subs= (my_regmatch_t*)my_malloc(sizeof(my_regmatch_t) * (r.re_nsub+1), + subs= (regmatch_t*)my_malloc(sizeof(regmatch_t) * (r.re_nsub+1), MYF(MY_WME+MY_FAE)); *res_p= 0; @@ -10113,14 +10111,14 @@ int reg_replace(char** buf_p, int* buf_len_p, char *pattern, while (!err_code) { /* find the match */ - err_code= my_regexec(&r,str_p, r.re_nsub+1, subs, + err_code= regexec(&r,str_p, r.re_nsub+1, subs, (str_p == string) ? REG_NOTBOL : 0); /* if regular expression error (eg. bad syntax, or out of memory) */ if (err_code && err_code != REG_NOMATCH) { check_regerr(&r,err_code); - my_regfree(&r); + regfree(&r); return 1; } @@ -10233,7 +10231,7 @@ int reg_replace(char** buf_p, int* buf_len_p, char *pattern, } } my_free(subs); - my_regfree(&r); + regfree(&r); *res_p= 0; *buf_p= buf; *buf_len_p= buf_len; -- cgit v1.2.1 From 7fe391adbffa442a6f9588e2cde70fe9b4dc08d9 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Fri, 27 Sep 2013 16:29:05 +0400 Subject: Fixing compilation failure on Windows. "PCRE_STATIC" must be defined before including pcre.h to avoid linking errors: - unresolved external symbol __imp_regerror - unresolved external symbol __imp_pcre_exec --- client/mysqltest.cc | 1 + 1 file changed, 1 insertion(+) (limited to 'client/mysqltest.cc') diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 99a89dd52c3..a87dc54091f 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -44,6 +44,7 @@ #include #include #include +#define PCRE_STATIC 1 /* Important on Windows */ #include /* pcreposix regex library */ #ifdef HAVE_SYS_WAIT_H #include -- cgit v1.2.1 From 038554ec96a48b9c3071ecef7e27509635febdc9 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Mon, 30 Sep 2013 13:51:05 +0400 Subject: Always include the local copy of pcre.h and pcreposix.h instead of the system installed (if any). --- client/mysqltest.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'client/mysqltest.cc') diff --git a/client/mysqltest.cc b/client/mysqltest.cc index a87dc54091f..347a2e4f736 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -45,7 +45,7 @@ #include #include #define PCRE_STATIC 1 /* Important on Windows */ -#include /* pcreposix regex library */ +#include "pcreposix.h" /* pcreposix regex library */ #ifdef HAVE_SYS_WAIT_H #include #endif -- cgit v1.2.1