aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/tsearch/dict_synonym.c26
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);