From ab61df9e527dcedbd3bbefbcb8b634b0b72f2ad5 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 21 Oct 2009 20:38:58 +0000 Subject: Remove regex_flavor GUC, so that regular expressions are always "advanced" style by default. Per discussion, there seems to be hardly anything that really relies on being able to change the regex flavor, so the ability to select it via embedded options ought to be enough for any stragglers. Also, if we didn't remove the GUC, we'd really be morally obligated to mark the regex functions non-immutable, which'd possibly create performance issues. --- src/backend/utils/adt/regexp.c | 56 ++++++++++++++---------------------------- 1 file changed, 18 insertions(+), 38 deletions(-) (limited to 'src/backend/utils/adt/regexp.c') diff --git a/src/backend/utils/adt/regexp.c b/src/backend/utils/adt/regexp.c index 118d42d2a0a..6c09531f2ff 100644 --- a/src/backend/utils/adt/regexp.c +++ b/src/backend/utils/adt/regexp.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/regexp.c,v 1.83 2009/10/10 03:50:15 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/regexp.c,v 1.84 2009/10/21 20:38:58 tgl Exp $ * * Alistair Crooks added the code for the regex caching * agc - cached the regular expressions used - there's a good chance @@ -39,10 +39,6 @@ (PG_NARGS() > (_n) ? PG_GETARG_TEXT_PP(_n) : NULL) -/* GUC-settable flavor parameter */ -int regex_flavor = REG_ADVANCED; - - /* all the options of interest for regex functions */ typedef struct pg_re_flags { @@ -347,8 +343,8 @@ RE_compile_and_execute(text *text_re, char *dat, int dat_len, static void parse_re_flags(pg_re_flags *flags, text *opts) { - /* regex_flavor is always folded into the compile flags */ - flags->cflags = regex_flavor; + /* regex flavor is always folded into the compile flags */ + flags->cflags = REG_ADVANCED; flags->glob = false; if (opts) @@ -414,16 +410,6 @@ parse_re_flags(pg_re_flags *flags, text *opts) } -/* - * report whether regex_flavor is currently BASIC - */ -bool -regex_flavor_is_basic(void) -{ - return (regex_flavor == REG_BASIC); -} - - /* * interface routines called by the function manager */ @@ -437,7 +423,7 @@ nameregexeq(PG_FUNCTION_ARGS) PG_RETURN_BOOL(RE_compile_and_execute(p, NameStr(*n), strlen(NameStr(*n)), - regex_flavor, + REG_ADVANCED, 0, NULL)); } @@ -450,7 +436,7 @@ nameregexne(PG_FUNCTION_ARGS) PG_RETURN_BOOL(!RE_compile_and_execute(p, NameStr(*n), strlen(NameStr(*n)), - regex_flavor, + REG_ADVANCED, 0, NULL)); } @@ -463,7 +449,7 @@ textregexeq(PG_FUNCTION_ARGS) PG_RETURN_BOOL(RE_compile_and_execute(p, VARDATA_ANY(s), VARSIZE_ANY_EXHDR(s), - regex_flavor, + REG_ADVANCED, 0, NULL)); } @@ -476,7 +462,7 @@ textregexne(PG_FUNCTION_ARGS) PG_RETURN_BOOL(!RE_compile_and_execute(p, VARDATA_ANY(s), VARSIZE_ANY_EXHDR(s), - regex_flavor, + REG_ADVANCED, 0, NULL)); } @@ -496,7 +482,7 @@ nameicregexeq(PG_FUNCTION_ARGS) PG_RETURN_BOOL(RE_compile_and_execute(p, NameStr(*n), strlen(NameStr(*n)), - regex_flavor | REG_ICASE, + REG_ADVANCED | REG_ICASE, 0, NULL)); } @@ -509,7 +495,7 @@ nameicregexne(PG_FUNCTION_ARGS) PG_RETURN_BOOL(!RE_compile_and_execute(p, NameStr(*n), strlen(NameStr(*n)), - regex_flavor | REG_ICASE, + REG_ADVANCED | REG_ICASE, 0, NULL)); } @@ -522,7 +508,7 @@ texticregexeq(PG_FUNCTION_ARGS) PG_RETURN_BOOL(RE_compile_and_execute(p, VARDATA_ANY(s), VARSIZE_ANY_EXHDR(s), - regex_flavor | REG_ICASE, + REG_ADVANCED | REG_ICASE, 0, NULL)); } @@ -535,7 +521,7 @@ texticregexne(PG_FUNCTION_ARGS) PG_RETURN_BOOL(!RE_compile_and_execute(p, VARDATA_ANY(s), VARSIZE_ANY_EXHDR(s), - regex_flavor | REG_ICASE, + REG_ADVANCED | REG_ICASE, 0, NULL)); } @@ -555,7 +541,7 @@ textregexsubstr(PG_FUNCTION_ARGS) eo; /* Compile RE */ - re = RE_compile_and_cache(p, regex_flavor); + re = RE_compile_and_cache(p, REG_ADVANCED); /* * We pass two regmatch_t structs to get info about the overall match and @@ -611,7 +597,7 @@ textregexreplace_noopt(PG_FUNCTION_ARGS) text *r = PG_GETARG_TEXT_PP(2); regex_t *re; - re = RE_compile_and_cache(p, regex_flavor); + re = RE_compile_and_cache(p, REG_ADVANCED); PG_RETURN_TEXT_P(replace_text_regexp(s, (void *) re, r, false)); } @@ -684,12 +670,10 @@ similar_escape(PG_FUNCTION_ARGS) /*---------- * We surround the transformed input string with - * ***:^(?: ... )$ - * which is bizarre enough to require some explanation. "***:" is a - * director prefix to force the regex to be treated as an ARE regardless - * of the current regex_flavor setting. We need "^" and "$" to force - * the pattern to match the entire input string as per SQL99 spec. The - * "(?:" and ")" are a non-capturing set of parens; we have to have + * ^(?: ... )$ + * which requires some explanation. We need "^" and "$" to force + * the pattern to match the entire input string as per SQL99 spec. + * The "(?:" and ")" are a non-capturing set of parens; we have to have * parens in case the string contains "|", else the "^" and "$" will * be bound into the first and last alternatives which is not what we * want, and the parens must be non capturing because we don't want them @@ -701,13 +685,9 @@ similar_escape(PG_FUNCTION_ARGS) * We need room for the prefix/postfix plus as many as 2 output bytes per * input byte */ - result = (text *) palloc(VARHDRSZ + 10 + 2 * plen); + result = (text *) palloc(VARHDRSZ + 6 + 2 * plen); r = VARDATA(result); - *r++ = '*'; - *r++ = '*'; - *r++ = '*'; - *r++ = ':'; *r++ = '^'; *r++ = '('; *r++ = '?'; -- cgit v1.2.3