Added zebra_octet_term_encoding that specifies encoding for search
authorAdam Dickmeiss <adam@indexdata.dk>
Tue, 21 Dec 2004 22:00:57 +0000 (22:00 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Tue, 21 Dec 2004 22:00:57 +0000 (22:00 +0000)
octet string search terms. Default record encoding is NULL - not
ISO-8859-1. This potentially breaks some applications, but it allows
for _no_ character set conversion for MARC records and others.

include/idzebra/api.h
index/zebraapi.c
index/zserver.c

index 53ae58d..3cbb498 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: api.h,v 1.4 2004-12-02 17:27:03 adam Exp $
+/* $Id: api.h,v 1.5 2004-12-21 22:00:57 adam Exp $
    Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
    Index Data Aps
 
    Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
    Index Data Aps
 
@@ -255,6 +255,12 @@ int zebra_register_statistics (ZebraHandle zh, int dumpdict);
 YAZ_EXPORT
 int zebra_record_encoding (ZebraHandle zh, const char *encoding);
 
 YAZ_EXPORT
 int zebra_record_encoding (ZebraHandle zh, const char *encoding);
 
+YAZ_EXPORT
+int zebra_record_encoding (ZebraHandle zh, const char *encoding);
+
+YAZ_EXPORT
+int zebra_octet_term_encoding(ZebraHandle zh, const char *encoding);
+
 /* Resources */
 YAZ_EXPORT
 int zebra_set_resource(ZebraHandle zh, const char *name, const char *value);
 /* Resources */
 YAZ_EXPORT
 int zebra_set_resource(ZebraHandle zh, const char *name, const char *value);
index 3389125..94964fd 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: zebraapi.c,v 1.144 2004-12-10 12:37:07 heikki Exp $
+/* $Id: zebraapi.c,v 1.145 2004-12-21 22:00:57 adam Exp $
    Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
    Index Data Aps
 
    Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
    Index Data Aps
 
@@ -49,7 +49,6 @@ static int log_level_initialized=0;
 static Res zebra_open_res (ZebraHandle zh);
 static void zebra_close_res (ZebraHandle zh);
 
 static Res zebra_open_res (ZebraHandle zh);
 static void zebra_close_res (ZebraHandle zh);
 
-
 static void zebra_chdir (ZebraService zs)
 {
     const char *dir ;
 static void zebra_chdir (ZebraService zs)
 {
     const char *dir ;
@@ -125,7 +124,6 @@ ZebraHandle zebra_open (ZebraService zs)
     zh->shadow_enable = 1;
 
     default_encoding = res_get_def(zs->global_res, "encoding", "ISO-8859-1");
     zh->shadow_enable = 1;
 
     default_encoding = res_get_def(zs->global_res, "encoding", "ISO-8859-1");
-    zh->record_encoding = xstrdup (default_encoding);
 
     zh->iconv_to_utf8 =
         yaz_iconv_open ("UTF-8", default_encoding);
 
     zh->iconv_to_utf8 =
         yaz_iconv_open ("UTF-8", default_encoding);
@@ -138,6 +136,8 @@ ZebraHandle zebra_open (ZebraService zs)
         yaz_log (YLOG_WARN, "iconv: UTF-8 to %s unsupported",
            default_encoding);
 
         yaz_log (YLOG_WARN, "iconv: UTF-8 to %s unsupported",
            default_encoding);
 
+    zh->record_encoding = 0;
+
     zebra_mutex_cond_lock (&zs->session_lock);
 
     zh->next = zs->sessions;
     zebra_mutex_cond_lock (&zs->session_lock);
 
     zh->next = zs->sessions;
@@ -1870,28 +1870,18 @@ int zebra_shadow_enable (ZebraHandle zh, int value)
     return 0;
 }
 
     return 0;
 }
 
-int zebra_record_encoding (ZebraHandle zh, const char *encoding)
+int zebra_octet_term_encoding(ZebraHandle zh, const char *encoding)
 {
     ASSERTZH;
     assert(encoding);
 {
     ASSERTZH;
     assert(encoding);
-    yaz_log(log_level,"zebra_record_encoding");
-    zh->errCode=0;
-    xfree (zh->record_encoding);
-
-    /*
-     * Fixme!
-     * Something about charset aliases. Oleg???
-     */
+    yaz_log(log_level,"zebra_octet_term_encoding");
+    zh->errCode = 0;
 
     if (zh->iconv_to_utf8 != 0)
         yaz_iconv_close(zh->iconv_to_utf8);
     if (zh->iconv_from_utf8 != 0)
         yaz_iconv_close(zh->iconv_from_utf8);
     
 
     if (zh->iconv_to_utf8 != 0)
         yaz_iconv_close(zh->iconv_to_utf8);
     if (zh->iconv_from_utf8 != 0)
         yaz_iconv_close(zh->iconv_from_utf8);
     
-    zh->record_encoding = xstrdup (encoding);
-    
-    yaz_log(YLOG_DEBUG, "Reset record encoding: %s", encoding);
-    
     zh->iconv_to_utf8 =
         yaz_iconv_open ("UTF-8", encoding);
     if (zh->iconv_to_utf8 == 0)
     zh->iconv_to_utf8 =
         yaz_iconv_open ("UTF-8", encoding);
     if (zh->iconv_to_utf8 == 0)
@@ -1904,6 +1894,18 @@ int zebra_record_encoding (ZebraHandle zh, const char *encoding)
     return 0;
 }
 
     return 0;
 }
 
+int zebra_record_encoding (ZebraHandle zh, const char *encoding)
+{
+    ASSERTZH;
+    yaz_log(log_level,"zebra_record_encoding");
+    zh->errCode = 0;
+    xfree (zh->record_encoding);
+    zh->record_encoding = 0;
+    if (encoding)
+       zh->record_encoding = xstrdup (encoding);
+    return 0;
+}
+
 int zebra_set_resource(ZebraHandle zh, const char *name, const char *value)
 {
     ASSERTZH;
 int zebra_set_resource(ZebraHandle zh, const char *name, const char *value)
 {
     ASSERTZH;
index ad2aa5a..3077ed1 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: zserver.c,v 1.125 2004-12-13 20:51:30 adam Exp $
+/* $Id: zserver.c,v 1.126 2004-12-21 22:00:57 adam Exp $
    Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
    Index Data Aps
 
    Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
    Index Data Aps
 
@@ -153,7 +153,8 @@ bend_initresult *bend_init (bend_initrequest *q)
                          charsets[i], right_name);
                 odr_set_charset (q->stream, right_name, "UTF-8");
                 if (selected)
                          charsets[i], right_name);
                 odr_set_charset (q->stream, right_name, "UTF-8");
                 if (selected)
-                    zebra_record_encoding (zh, right_name);
+                    zebra_record_encoding(zh, right_name);
+               zebra_octet_term_encoding(zh, right_name);
                q->charneg_response =
                    yaz_set_response_charneg (q->stream, charsets[i],
                                               0, selected);
                q->charneg_response =
                    yaz_set_response_charneg (q->stream, charsets[i],
                                               0, selected);