diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-02-06 20:25:33 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-02-06 20:25:33 +0000 |
commit | 77ede8900d96647a8293d76d08c0c5d47cc1049e (patch) | |
tree | 79b54813dc073aa4c4c4d9877ed6c3a38068df1f /src/backend/utils/adt/regexp.c | |
parent | 465ed56531aa41536925d2169a7c3c99f9860eb8 (diff) | |
download | postgresql-77ede8900d96647a8293d76d08c0c5d47cc1049e.tar.gz postgresql-77ede8900d96647a8293d76d08c0c5d47cc1049e.zip |
Create a GUC variable REGEX_FLAVOR to control the type of regular
expression accepted by the regex operators, per discussion yesterday.
Along the way, reduce deadlock_timeout from PGC_POSTMASTER to PGC_SIGHUP
category. It is probably best to insist that all backends share the same
setting, but that doesn't mean it has to be frozen at startup.
Diffstat (limited to 'src/backend/utils/adt/regexp.c')
-rw-r--r-- | src/backend/utils/adt/regexp.c | 52 |
1 files changed, 42 insertions, 10 deletions
diff --git a/src/backend/utils/adt/regexp.c b/src/backend/utils/adt/regexp.c index 604e55d4145..56f78422bcc 100644 --- a/src/backend/utils/adt/regexp.c +++ b/src/backend/utils/adt/regexp.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/regexp.c,v 1.44 2003/02/05 17:41:32 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/regexp.c,v 1.45 2003/02/06 20:25:33 tgl Exp $ * * Alistair Crooks added the code for the regex caching * agc - cached the regular expressions used - there's a good chance @@ -34,6 +34,10 @@ #include "utils/builtins.h" +/* GUC-settable flavor parameter */ +static int regex_flavor = REG_ADVANCED; + + /* * We cache precompiled regular expressions using a "self organizing list" * structure, in which recently-used items tend to be near the front. @@ -217,6 +221,34 @@ RE_compile_and_execute(text *text_re, unsigned char *dat, int dat_len, /* + * assign_regex_flavor - GUC hook to validate and set REGEX_FLAVOR + */ +const char * +assign_regex_flavor(const char *value, + bool doit, bool interactive) +{ + if (strcasecmp(value, "advanced") == 0) + { + if (doit) + regex_flavor = REG_ADVANCED; + } + else if (strcasecmp(value, "extended") == 0) + { + if (doit) + regex_flavor = REG_EXTENDED; + } + else if (strcasecmp(value, "basic") == 0) + { + if (doit) + regex_flavor = REG_BASIC; + } + else + return NULL; /* fail */ + return value; /* OK */ +} + + +/* * interface routines called by the function manager */ @@ -229,7 +261,7 @@ nameregexeq(PG_FUNCTION_ARGS) PG_RETURN_BOOL(RE_compile_and_execute(p, (unsigned char *) NameStr(*n), strlen(NameStr(*n)), - REG_ADVANCED, + regex_flavor, 0, NULL)); } @@ -242,7 +274,7 @@ nameregexne(PG_FUNCTION_ARGS) PG_RETURN_BOOL(!RE_compile_and_execute(p, (unsigned char *) NameStr(*n), strlen(NameStr(*n)), - REG_ADVANCED, + regex_flavor, 0, NULL)); } @@ -255,7 +287,7 @@ textregexeq(PG_FUNCTION_ARGS) PG_RETURN_BOOL(RE_compile_and_execute(p, (unsigned char *) VARDATA(s), VARSIZE(s) - VARHDRSZ, - REG_ADVANCED, + regex_flavor, 0, NULL)); } @@ -268,7 +300,7 @@ textregexne(PG_FUNCTION_ARGS) PG_RETURN_BOOL(!RE_compile_and_execute(p, (unsigned char *) VARDATA(s), VARSIZE(s) - VARHDRSZ, - REG_ADVANCED, + regex_flavor, 0, NULL)); } @@ -288,7 +320,7 @@ nameicregexeq(PG_FUNCTION_ARGS) PG_RETURN_BOOL(RE_compile_and_execute(p, (unsigned char *) NameStr(*n), strlen(NameStr(*n)), - REG_ICASE | REG_ADVANCED, + regex_flavor | REG_ICASE, 0, NULL)); } @@ -301,7 +333,7 @@ nameicregexne(PG_FUNCTION_ARGS) PG_RETURN_BOOL(!RE_compile_and_execute(p, (unsigned char *) NameStr(*n), strlen(NameStr(*n)), - REG_ICASE | REG_ADVANCED, + regex_flavor | REG_ICASE, 0, NULL)); } @@ -314,7 +346,7 @@ texticregexeq(PG_FUNCTION_ARGS) PG_RETURN_BOOL(RE_compile_and_execute(p, (unsigned char *) VARDATA(s), VARSIZE(s) - VARHDRSZ, - REG_ICASE | REG_ADVANCED, + regex_flavor | REG_ICASE, 0, NULL)); } @@ -327,7 +359,7 @@ texticregexne(PG_FUNCTION_ARGS) PG_RETURN_BOOL(!RE_compile_and_execute(p, (unsigned char *) VARDATA(s), VARSIZE(s) - VARHDRSZ, - REG_ICASE | REG_ADVANCED, + regex_flavor | REG_ICASE, 0, NULL)); } @@ -353,7 +385,7 @@ textregexsubstr(PG_FUNCTION_ARGS) match = RE_compile_and_execute(p, (unsigned char *) VARDATA(s), VARSIZE(s) - VARHDRSZ, - REG_ADVANCED, + regex_flavor, 2, pmatch); /* match? then return the substring matching the pattern */ |