Added support for Surrogate Diagnostics for Scan Term entries.
authorAdam Dickmeiss <adam@indexdata.dk>
Tue, 13 Oct 1998 16:12:23 +0000 (16:12 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Tue, 13 Oct 1998 16:12:23 +0000 (16:12 +0000)
include/backend.h
server/seshigh.c
ztest/ztest.c

index d31fc72..2cd4745 100644 (file)
  * OF THIS SOFTWARE.
  *
  * $Log: backend.h,v $
- * Revision 1.22  1998-09-02 12:41:51  adam
+ * Revision 1.23  1998-10-13 16:12:23  adam
+ * Added support for Surrogate Diagnostics for Scan Term entries.
+ *
+ * Revision 1.22  1998/09/02 12:41:51  adam
  * Added decode stream in bend search structures.
  *
  * Revision 1.21  1998/07/20 12:38:41  adam
@@ -157,8 +160,10 @@ typedef struct
 } bend_scanrequest;
 
 struct scan_entry {
-    char *term;
-    int occurrences;
+    char *term;         /* the returned scan term */
+    int occurrences;    /* no of occurrences or -1 if error (see below) */
+    int errcode;        /* Bib-1 diagnostic code; only used when occur.= -1 */
+    char *errstring;    /* Additional string */
 };
 
 typedef enum {
index 5421432..0a54b65 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: seshigh.c,v $
- * Revision 1.80  1998-09-02 12:41:53  adam
+ * Revision 1.81  1998-10-13 16:12:24  adam
+ * Added support for Surrogate Diagnostics for Scan Term entries.
+ *
+ * Revision 1.80  1998/09/02 12:41:53  adam
  * Added decode stream in bend search structures.
  *
  * Revision 1.79  1998/08/19 16:10:08  adam
@@ -885,11 +888,15 @@ static void set_addinfo (Z_DefaultDiagFormat *dr, char *addinfo)
 static Z_Records *diagrec(association *assoc, int error, char *addinfo)
 {
     int oid[OID_SIZE];
-    Z_Records *rec = (Z_Records *)odr_malloc (assoc->encode, sizeof(*rec));
+    Z_Records *rec = (Z_Records *)
+       odr_malloc (assoc->encode, sizeof(*rec));
     oident bib1;
-    int *err = (int *)odr_malloc (assoc->encode, sizeof(*err));
-    Z_DiagRec *drec = (Z_DiagRec *)odr_malloc (assoc->encode, sizeof(*drec));
-    Z_DefaultDiagFormat *dr = (Z_DefaultDiagFormat *)odr_malloc (assoc->encode, sizeof(*dr));
+    int *err = (int *)
+       odr_malloc (assoc->encode, sizeof(*err));
+    Z_DiagRec *drec = (Z_DiagRec *)
+       odr_malloc (assoc->encode, sizeof(*drec));
+    Z_DefaultDiagFormat *dr = (Z_DefaultDiagFormat *)
+       odr_malloc (assoc->encode, sizeof(*dr));
 
     bib1.proto = assoc->proto;
     bib1.oclass = CLASS_DIAGSET;
@@ -1512,23 +1519,43 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd)
                Odr_oct *o;
                
                tab[i] = e = (Z_Entry *)odr_malloc(assoc->encode, sizeof(*e));
-               e->which = Z_Entry_termInfo;
-               e->u.termInfo = t = (Z_TermInfo *)odr_malloc(assoc->encode, sizeof(*t));
-               t->suggestedAttributes = 0;
-               t->displayTerm = 0;
-               t->alternativeTerm = 0;
-               t->byAttributes = 0;
-               t->otherTermInfo = 0;
-               t->globalOccurrences = &srs->entries[i].occurrences;
-               t->term = (Z_Term *)odr_malloc(assoc->encode, sizeof(*t->term));
-               t->term->which = Z_Term_general;
-               t->term->u.general = o = (Odr_oct *)odr_malloc(assoc->encode,
-                   sizeof(Odr_oct));
-               o->buf = (unsigned char *)odr_malloc(assoc->encode, o->len = o->size =
-                   strlen(srs->entries[i].term));
-               memcpy(o->buf, srs->entries[i].term, o->len);
-               logf(LOG_DEBUG, "  term #%d: '%s' (%d)", i,
-                   srs->entries[i].term, srs->entries[i].occurrences);
+               if (srs->entries[i].occurrences >= 0)
+               {
+                   e->which = Z_Entry_termInfo;
+                   e->u.termInfo = t = (Z_TermInfo *)
+                       odr_malloc(assoc->encode, sizeof(*t));
+                   t->suggestedAttributes = 0;
+                   t->displayTerm = 0;
+                   t->alternativeTerm = 0;
+                   t->byAttributes = 0;
+                   t->otherTermInfo = 0;
+                   t->globalOccurrences = &srs->entries[i].occurrences;
+                   t->term = (Z_Term *)
+                       odr_malloc(assoc->encode, sizeof(*t->term));
+                   t->term->which = Z_Term_general;
+                   t->term->u.general = o =
+                       (Odr_oct *)odr_malloc(assoc->encode, sizeof(Odr_oct));
+                   o->buf = (unsigned char *)
+                       odr_malloc(assoc->encode, o->len = o->size =
+                                  strlen(srs->entries[i].term));
+                   memcpy(o->buf, srs->entries[i].term, o->len);
+                   logf(LOG_DEBUG, "  term #%d: '%s' (%d)", i,
+                        srs->entries[i].term, srs->entries[i].occurrences);
+               }
+               else
+               {
+                   Z_Records *zrecords = diagrec (assoc,
+                                                  srs->entries[i].errcode,
+                                                  srs->entries[i].errstring);
+                   logf(LOG_DEBUG, "  term sd code=%d addinfo=%s",
+                        srs->entries[i].errcode,
+                        (srs->entries[i].errstring?srs->entries[i].errstring :
+                         "<null>"));
+                   assert (zrecords->which == Z_Records_NSD);
+                   e->which = Z_Entry_surrogateDiagnostic;
+                   e->u.surrogateDiagnostic =
+                       zrecords->u.nonSurrogateDiagnostic;
+               }
            }
        }
     }
index 06e2a58..e6ce6a2 100644 (file)
@@ -7,7 +7,10 @@
  *    Chas Woodfield, Fretwell Downing Datasystems.
  *
  * $Log: ztest.c,v $
- * Revision 1.13  1998-08-19 16:10:09  adam
+ * Revision 1.14  1998-10-13 16:12:25  adam
+ * Added support for Surrogate Diagnostics for Scan Term entries.
+ *
+ * Revision 1.13  1998/08/19 16:10:09  adam
  * Changed som member names of DeleteResultSetRequest/Response.
  *
  * Revision 1.12  1998/07/20 12:38:44  adam
@@ -260,7 +263,8 @@ bend_fetchresult *bend_fetch(void *handle, bend_fetchrequest *q, int *fd)
  */
 bend_scanresult *bend_scan(void *handle, bend_scanrequest *q, int *fd)
 {
-    bend_scanresult *r = (bend_scanresult *) odr_malloc (q->stream, sizeof(*r));
+    bend_scanresult *r = (bend_scanresult *)
+       odr_malloc (q->stream, sizeof(*r));
     static FILE *f = 0;
     static struct scan_entry list[200];
     static char entries[200][80];
@@ -317,8 +321,19 @@ bend_scanresult *bend_scan(void *handle, bend_scanrequest *q, int *fd)
                po = pos - r->term_position + r->num_entries + 1; /* find pos */
                if (po < 0)
                    po += 200;
-               list[r->num_entries].term = entries[po];
-               list[r->num_entries].occurrences = hits[po];
+
+               if (!strcmp (term, "sd") && r->num_entries == 2)
+               {
+                   list[r->num_entries].term = entries[pos];
+                   list[r->num_entries].occurrences = -1;
+                   list[r->num_entries].errcode = 233;
+                   list[r->num_entries].errstring = "SD for Scan Term";
+               }
+               else
+               {
+                   list[r->num_entries].term = entries[po];
+                   list[r->num_entries].occurrences = hits[po];
+               }
            }
        }
        else if (r->num_entries)