diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/tsearch/dict_synonym.c | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/src/backend/tsearch/dict_synonym.c b/src/backend/tsearch/dict_synonym.c index 16eec98d8b2..6f263603d7a 100644 --- a/src/backend/tsearch/dict_synonym.c +++ b/src/backend/tsearch/dict_synonym.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/tsearch/dict_synonym.c,v 1.7 2008/01/01 19:45:52 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/tsearch/dict_synonym.c,v 1.8 2008/03/10 03:01:28 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -30,6 +30,7 @@ typedef struct { int len; /* length of syn array */ Syn *syn; + bool case_sensitive; } DictSyn; /* @@ -77,6 +78,7 @@ dsynonym_init(PG_FUNCTION_ARGS) DictSyn *d; ListCell *l; char *filename = NULL; + bool case_sensitive = false; FILE *fin; char *starti, *starto, @@ -90,6 +92,8 @@ dsynonym_init(PG_FUNCTION_ARGS) if (pg_strcasecmp("Synonyms", defel->defname) == 0) filename = defGetString(defel); + else if (pg_strcasecmp("CaseSensitive", defel->defname) == 0) + case_sensitive = defGetBoolean(defel); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), @@ -154,8 +158,16 @@ dsynonym_init(PG_FUNCTION_ARGS) } } - d->syn[cur].in = lowerstr(starti); - d->syn[cur].out = lowerstr(starto); + if (case_sensitive) + { + d->syn[cur].in = pstrdup(starti); + d->syn[cur].out = pstrdup(starto); + } + else + { + d->syn[cur].in = lowerstr(starti); + d->syn[cur].out = lowerstr(starto); + } cur++; @@ -168,6 +180,8 @@ skipline: d->len = cur; qsort(d->syn, d->len, sizeof(Syn), compareSyn); + d->case_sensitive = case_sensitive; + PG_RETURN_POINTER(d); } @@ -185,7 +199,11 @@ dsynonym_lexize(PG_FUNCTION_ARGS) if (len <= 0 || d->len <= 0) PG_RETURN_POINTER(NULL); - key.in = lowerstr_with_len(in, len); + if (d->case_sensitive) + key.in = pnstrdup(in, len); + else + key.in = lowerstr_with_len(in, len); + key.out = NULL; found = (Syn *) bsearch(&key, d->syn, d->len, sizeof(Syn), compareSyn); |