Fixes for sys/stat.h on Windows.
[yaz-moved-to-github.git] / src / querytowrbuf.c
index 64b2ddc..a120e88 100644 (file)
@@ -1,12 +1,10 @@
-/*
- * Copyright (C) 1995-2007, Index Data ApS
- * All rights reserved.
- *
- * $Id: querytowrbuf.c,v 1.9 2007-04-12 13:52:57 adam Exp $
+/* This file is part of the YAZ toolkit.
+ * Copyright (C) 1995-2008 Index Data
+ * See the file LICENSE for details.
  */
 
 /** \file querytowrbuf.c
-    \brief Query to WRBUF (to strings)
+    \brief Convert Z39.50 Z_Query to PQF (as WRBUF string)
  */
 
 #include <stdio.h>
@@ -16,7 +14,7 @@
 #include <yaz/querytowrbuf.h>
 #include <yaz/oid_db.h>
 
-static void yaz_term_to_wrbuf(WRBUF b, const char *term, int len)
+void yaz_encode_pqf_term(WRBUF b, const char *term, int len)
 {
     int i;
     for (i = 0; i < len; i++)
@@ -110,13 +108,13 @@ static void yaz_apt_to_wrbuf(WRBUF b, const Z_AttributesPlusTerm *zapt)
     switch (zapt->term->which)
     {
     case Z_Term_general:
-        yaz_term_to_wrbuf(b, (const char *)zapt->term->u.general->buf,
-                          zapt->term->u.general->len);
+        yaz_encode_pqf_term(b, (const char *)zapt->term->u.general->buf,
+                            zapt->term->u.general->len);
         break;
     case Z_Term_characterString:
         wrbuf_printf(b, "@term string ");
-        yaz_term_to_wrbuf(b, zapt->term->u.characterString,
-                          strlen(zapt->term->u.characterString));
+        yaz_encode_pqf_term(b, zapt->term->u.characterString,
+                            strlen(zapt->term->u.characterString));
         break;
     case Z_Term_numeric:
         wrbuf_printf(b, "@term numeric %d ", *zapt->term->u.numeric);
@@ -174,8 +172,8 @@ static void yaz_rpnstructure_to_wrbuf(WRBUF b, const Z_RPNStructure *zs)
         else if (zs->u.simple->which == Z_Operand_resultSetId)
         {
             wrbuf_printf(b, "@set ");
-            yaz_term_to_wrbuf(b, zs->u.simple->u.resultSetId,
-                              strlen(zs->u.simple->u.resultSetId));
+            yaz_encode_pqf_term(b, zs->u.simple->u.resultSetId,
+                                strlen(zs->u.simple->u.resultSetId));
         }
         else
             wrbuf_printf (b, "(unknown simple structure)");
@@ -225,13 +223,33 @@ void yaz_query_to_wrbuf(WRBUF b, const Z_Query *q)
 }
 
 void yaz_scan_to_wrbuf(WRBUF b, const Z_AttributesPlusTerm *zapt,
-                       const int *attrbute_set)
+                       const Odr_oid *attrbute_set)
 {
     /* should print attr set here */
     wrbuf_printf(b, "RPN ");
     yaz_apt_to_wrbuf(b, zapt);
 }
 
+void wrbuf_diags(WRBUF b, int num_diagnostics,Z_DiagRec **diags)
+{
+    /* we only dump the first diag - that keeps the log cleaner. */
+    wrbuf_printf(b," ERROR ");
+    if (diags[0]->which != Z_DiagRec_defaultFormat)
+        wrbuf_printf(b,"(diag not in default format?)");
+    else
+    {
+        Z_DefaultDiagFormat *e=diags[0]->u.defaultFormat;
+        if (e->condition)
+            wrbuf_printf(b, "%d ",*e->condition);
+        else
+            wrbuf_printf(b, "?? ");
+        if ((e->which==Z_DefaultDiagFormat_v2Addinfo) && (e->u.v2Addinfo))
+            wrbuf_printf(b,"%s ",e->u.v2Addinfo);
+        else if ((e->which==Z_DefaultDiagFormat_v3Addinfo) && (e->u.v3Addinfo))
+            wrbuf_printf(b,"%s ",e->u.v3Addinfo);
+    }
+}
+
 /*
  * Local variables:
  * c-basic-offset: 4