Added SRU decode of maximumTerms, responsePosition and extraRequestData
[yaz-moved-to-github.git] / src / srw.c
index 0461f2f..f8896c6 100644 (file)
--- a/src/srw.c
+++ b/src/srw.c
@@ -1,8 +1,8 @@
 /*
- * Copyright (c) 2002-2004, Index Data.
+ * Copyright (c) 2002-2005, Index Data.
  * See the file LICENSE for details.
  *
- * $Id: srw.c,v 1.29 2005-01-08 01:20:19 adam Exp $
+ * $Id: srw.c,v 1.31 2005-01-11 10:48:47 adam Exp $
  */
 /**
  * \file srw.c
@@ -353,6 +353,7 @@ static int yaz_srw_term(ODR o, xmlNodePtr pptr, Z_SRW_scanTerm *term,
        term->value = 0;
        term->numberOfRecords = 0;
        term->displayTerm = 0;
+       term->whereInList = 0;
        for (ptr = pptr->children; ptr; ptr = ptr->next)
        {
            if (match_xsd_string(ptr, "value", o,  &term->value))
@@ -363,14 +364,18 @@ static int yaz_srw_term(ODR o, xmlNodePtr pptr, Z_SRW_scanTerm *term,
            else if (match_xsd_string(ptr, "displayTerm", o, 
                                      &term->displayTerm))
                ;
+           else if (match_xsd_string(ptr, "whereInList", o, 
+                                     &term->whereInList))
+               ;
        }
     }
     else if (o->direction == ODR_ENCODE)
     {
        xmlNodePtr ptr = pptr;
        add_xsd_string(ptr, "value", term->value);
-       add_xsd_integer(ptr, "value", term->numberOfRecords);
+       add_xsd_integer(ptr, "numberOfRecords", term->numberOfRecords);
        add_xsd_string(ptr, "displayTerm", term->displayTerm);
+       add_xsd_string(ptr, "whereInList", term->whereInList);
     }
     return 0;
 }
@@ -620,6 +625,11 @@ int yaz_srw_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data,
                else if (match_xsd_string(ptr, "scanClause", o,
                                     &req->scanClause.cql))
                    ;
+               else if (match_xsd_string(ptr, "pScanClause", o,
+                                         &req->scanClause.cql))
+               {
+                   req->query_type = Z_SRW_query_type_pqf;
+               }
                else if (match_xsd_integer(ptr, "responsePosition", o,
                                           &req->responsePosition))
                    ;