77 *
88 *
99 * IDENTIFICATION
10- * $PostgreSQL: pgsql/src/backend/tsearch/dict_synonym.c,v 1.7 2008/01/01 19:45:52 momjian Exp $
10+ * $PostgreSQL: pgsql/src/backend/tsearch/dict_synonym.c,v 1.8 2008/03/10 03:01:28 tgl Exp $
1111 *
1212 *-------------------------------------------------------------------------
1313 */
@@ -30,6 +30,7 @@ typedef struct
3030{
3131 int len ; /* length of syn array */
3232 Syn * syn ;
33+ bool case_sensitive ;
3334} DictSyn ;
3435
3536/*
@@ -77,6 +78,7 @@ dsynonym_init(PG_FUNCTION_ARGS)
7778 DictSyn * d ;
7879 ListCell * l ;
7980 char * filename = NULL ;
81+ bool case_sensitive = false;
8082 FILE * fin ;
8183 char * starti ,
8284 * starto ,
@@ -90,6 +92,8 @@ dsynonym_init(PG_FUNCTION_ARGS)
9092
9193 if (pg_strcasecmp ("Synonyms" , defel -> defname ) == 0 )
9294 filename = defGetString (defel );
95+ else if (pg_strcasecmp ("CaseSensitive" , defel -> defname ) == 0 )
96+ case_sensitive = defGetBoolean (defel );
9397 else
9498 ereport (ERROR ,
9599 (errcode (ERRCODE_INVALID_PARAMETER_VALUE ),
@@ -154,8 +158,16 @@ dsynonym_init(PG_FUNCTION_ARGS)
154158 }
155159 }
156160
157- d -> syn [cur ].in = lowerstr (starti );
158- d -> syn [cur ].out = lowerstr (starto );
161+ if (case_sensitive )
162+ {
163+ d -> syn [cur ].in = pstrdup (starti );
164+ d -> syn [cur ].out = pstrdup (starto );
165+ }
166+ else
167+ {
168+ d -> syn [cur ].in = lowerstr (starti );
169+ d -> syn [cur ].out = lowerstr (starto );
170+ }
159171
160172 cur ++ ;
161173
@@ -168,6 +180,8 @@ dsynonym_init(PG_FUNCTION_ARGS)
168180 d -> len = cur ;
169181 qsort (d -> syn , d -> len , sizeof (Syn ), compareSyn );
170182
183+ d -> case_sensitive = case_sensitive ;
184+
171185 PG_RETURN_POINTER (d );
172186}
173187
@@ -185,7 +199,11 @@ dsynonym_lexize(PG_FUNCTION_ARGS)
185199 if (len <= 0 || d -> len <= 0 )
186200 PG_RETURN_POINTER (NULL );
187201
188- key .in = lowerstr_with_len (in , len );
202+ if (d -> case_sensitive )
203+ key .in = pnstrdup (in , len );
204+ else
205+ key .in = lowerstr_with_len (in , len );
206+
189207 key .out = NULL ;
190208
191209 found = (Syn * ) bsearch (& key , d -> syn , d -> len , sizeof (Syn ), compareSyn );
0 commit comments