Martin Pitt [2008-12-02  5:29 -0800]:
> Tom Lane [2008-12-01 19:51 -0500]:
> > I can't see any reason whatever to not put them into
> > ${sharepath}/tsearch_data/.  It's not like you're expecting to be
> > able to share them with other applications.
> 
> Oh, forgot yesterday, there is one case: the data can be shared
> between the 8.3, 8.4, and any future version. (In Debian/Ubuntu you
> can install different 8.x versions in parallel)
> 
> But that can easily be achieved in the distro packaging by adding
> symlinks, so if you prefer just looking for
> ${sharedir}/tsearch_data/system_ll_cc.affix, that would still work for
> me.

Right, so I changed the patch accordingly.

Thanks,

Martin
-- 
Martin Pitt                        | http://www.piware.de
Ubuntu Developer (www.ubuntu.com)  | Debian Developer  (www.debian.org)
# Description: If a tsearch/stem dictionary is not found in sharedir/tsearch_data/ll_cc.{dict,affix}, fall back to sharedir/tsearch_data/system_ll_cc.{dict,affix}, where postgresql-common creates them from system directories.
# Ubuntu: https://launchpad.net/bugs/301770
diff -Nur -x '*.orig' -x '*~' postgresql-8.3/build-tree/postgresql-8.3.5/src/backend/tsearch/ts_utils.c postgresql-8.3.new/build-tree/postgresql-8.3.5/src/backend/tsearch/ts_utils.c
--- postgresql-8.3.5/src/backend/tsearch/ts_utils.c	2008-06-19 09:52:31.000000000 -0700
+++ postgresql-8.3.5/src/backend/tsearch/ts_utils.c	2008-12-05 12:48:02.000000000 -0800
@@ -15,6 +15,7 @@
 #include "postgres.h"
 
 #include <ctype.h>
+#include <unistd.h>
 
 #include "miscadmin.h"
 #include "tsearch/ts_locale.h"
@@ -36,7 +37,7 @@
 							const char *extension)
 {
 	char		sharepath[MAXPGPATH];
-	char	   *result;
+	char	   *result, *system_result;
 
 	/*
 	 * We limit the basename to contain a-z, 0-9, and underscores.	This may
@@ -58,6 +59,21 @@
 	snprintf(result, MAXPGPATH, "%s/tsearch_data/%s.%s",
 			 sharepath, basename, extension);
 
+	/* fall back to a system-supplied one */
+	if (access(result, R_OK) != 0)
+	{
+		system_result = palloc(MAXPGPATH);
+		snprintf(system_result, MAXPGPATH, "%s/tsearch_data/system_%s.%s",
+			 sharepath, basename, extension);
+		if (access(system_result, R_OK) == 0)
+		{
+			pfree(result);
+			result = system_result;
+		} 
+		else
+			pfree(system_result);
+	}
+
 	return result;
 }
 

Attachment: signature.asc
Description: Digital signature

Reply via email to