Make initdb's selection of default text search configuration depend
authorTom Lane
Thu, 25 Oct 2007 20:22:53 +0000 (20:22 +0000)
committerTom Lane
Thu, 25 Oct 2007 20:22:53 +0000 (20:22 +0000)
only on the 'language' part of the locale name, ignoring the country code.
We may need to be smarter later when there are more built-in configurations,
but for now this is good enough and avoids having to bloat the table.

src/bin/initdb/initdb.c

index 1be891e86e2cc73835e9d76cebe40def4a3ef4ad..e3713cd64c89e54b46e2e118ff940cb8dfb07d29 100644 (file)
@@ -42,7 +42,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  * Portions taken from FreeBSD.
  *
- * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.148 2007/10/24 20:11:00 alvherre Exp $
+ * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.149 2007/10/25 20:22:53 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -719,7 +719,7 @@ get_encoding_id(char *encoding_name)
 
 /*
  * Support for determining the best default text search configuration.
- * We key this off LC_CTYPE, after stripping its encoding indicator if any.
+ * We key this off the first part of LC_CTYPE (ie, the language name).
  */
 struct tsearch_config_match
 {
@@ -729,39 +729,37 @@ struct tsearch_config_match
 
 static const struct tsearch_config_match tsearch_config_languages[] =
 {
-   {"danish", "da_DK"},
-   {"danish", "Danish_Denmark"},
-   {"dutch", "nl_NL"},
-   {"dutch", "Dutch_Netherlands"},
+   {"danish", "da"},
+   {"danish", "Danish"},
+   {"dutch", "nl"},
+   {"dutch", "Dutch"},
    {"english", "C"},
    {"english", "POSIX"},
-   {"english", "en_US"},
-   {"english", "English_America"},
-   {"english", "en_UK"},
-   {"english", "English_Britain"},
-   {"finnish", "fi_FI"},
-   {"finnish", "Finnish_Finland"},
-   {"french", "fr_FR"},
-   {"french", "French_France"},
-   {"german", "de_DE"},
-   {"german", "German_Germany"},
-   {"hungarian", "hu_HU"},
-   {"hungarian", "Hungarian_Hungary"},
-   {"italian", "it_IT"},
-   {"italian", "Italian_Italy"},
-   {"norwegian", "no_NO"},
-   {"norwegian", "Norwegian_Norway"},
-   {"portuguese", "pt_PT"},
-   {"portuguese", "Portuguese_Portugal"},
-   {"romanian", "ro_RO"},
-   {"russian", "ru_RU"},
-   {"russian", "Russian_Russia"},
-   {"spanish", "es_ES"},
-   {"spanish", "Spanish_Spain"},
-   {"swedish", "sv_SE"},
-   {"swedish", "Swedish_Sweden"},
-   {"turkish", "tr_TR"},
-   {"turkish", "Turkish_Turkey"},
+   {"english", "en"},
+   {"english", "English"},
+   {"finnish", "fi"},
+   {"finnish", "Finnish"},
+   {"french", "fr"},
+   {"french", "French"},
+   {"german", "de"},
+   {"german", "German"},
+   {"hungarian", "hu"},
+   {"hungarian", "Hungarian"},
+   {"italian", "it"},
+   {"italian", "Italian"},
+   {"norwegian", "no"},
+   {"norwegian", "Norwegian"},
+   {"portuguese", "pt"},
+   {"portuguese", "Portuguese"},
+   {"romanian", "ro"},
+   {"russian", "ru"},
+   {"russian", "Russian"},
+   {"spanish", "es"},
+   {"spanish", "Spanish"},
+   {"swedish", "sv"},
+   {"swedish", "Swedish"},
+   {"turkish", "tr"},
+   {"turkish", "Turkish"},
    {NULL, NULL}                /* end marker */
 };
 
@@ -777,15 +775,15 @@ find_matching_ts_config(const char *lc_type)
               *ptr;
 
    /*
-    * Convert lc_ctype to a language name by stripping ".utf8", "@euro", or
-    * what-have-you
+    * Convert lc_ctype to a language name by stripping everything after
+    * an underscore.  Just for paranoia, we also stop at '.' or '@'.
     */
    if (lc_type == NULL)
        langname = xstrdup("");
    else
    {
        ptr = langname = xstrdup(lc_type);
-       while (*ptr && *ptr != '.' && *ptr != '@')
+       while (*ptr && *ptr != '_' && *ptr != '.' && *ptr != '@')
            ptr++;
        *ptr = '\0';
    }