X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=wais-tcl.c;h=d61dd1ff29819ce05edb6790bd636ec88a5ffc4e;hb=4ccc8ab7a1f708af5fd89c71771040eaf6e6da4a;hp=20a5aff63a4ed97fcc01e959add2db7253d2db18;hpb=00c3f4aa3544517faf05260bf5f3e8d676229d83;p=ir-tcl-moved-to-github.git diff --git a/wais-tcl.c b/wais-tcl.c index 20a5aff..d61dd1f 100644 --- a/wais-tcl.c +++ b/wais-tcl.c @@ -5,7 +5,16 @@ * Wais extension to IrTcl * * $Log: wais-tcl.c,v $ - * Revision 1.2 1996-03-07 12:43:44 adam + * Revision 1.5 1996-03-15 14:40:23 adam + * Bug fix: do_responseStatus called Tcl_AppendElement when interp was 0. + * + * Revision 1.4 1996/03/11 17:39:48 adam + * 40 documents are retrieved by default (maxDocs=40). + * + * Revision 1.3 1996/03/08 16:46:44 adam + * Doesn't use documentID to determine positions in present-response. + * + * Revision 1.2 1996/03/07 12:43:44 adam * Better error handling. WAIS target closed before failback is invoked. * * Revision 1.1 1996/02/29 15:28:08 adam @@ -63,6 +72,7 @@ typedef struct { char *diag; char *addinfo; int maxDocs; + int presentOffset; } WaisSetTcl_Obj; static void wais_obj_delete (ClientData clientData); @@ -153,17 +163,6 @@ static WaisTcl_Record *wais_lookup_record_pos_bf (WaisSetTcl_Obj *p, int pos) return NULL; } -static WaisTcl_Record *wais_lookup_record_id (WaisSetTcl_Obj *p, any *id) -{ - WaisTcl_Records *recs; - - for (recs = p->records; recs; recs = recs->next) - if (recs->record->documentID->size == id->size && - !memcmp (recs->record->documentID->bytes, id->bytes, id->size)) - return recs->record; - return NULL; -} - static void wais_delete_record (WaisTcl_Record *rec) { freeAny (rec->documentID); @@ -223,11 +222,11 @@ static void wais_add_record_brief (WaisSetTcl_Obj *p, } static void wais_add_record_full (WaisSetTcl_Obj *p, - any *documentID, + int position, any *documentText) { WaisTcl_Record *rec; - rec = wais_lookup_record_id (p, documentID); + rec = wais_lookup_record_pos (p, position); if (!rec) { @@ -245,6 +244,13 @@ static void wais_add_record_full (WaisSetTcl_Obj *p, static void wais_handle_search_response (WaisSetTcl_Obj *p, SearchResponseAPDU *responseAPDU) { + logf (LOG_DEBUG, "- SearchStatus=%d", responseAPDU->SearchStatus); + logf (LOG_DEBUG, "- ResultCount=%d", responseAPDU->ResultCount); + logf (LOG_DEBUG, "- NumberOfRecordsReturned=%d", + responseAPDU->NumberOfRecordsReturned); + logf (LOG_DEBUG, "- ResultSetStatus=%d", responseAPDU->ResultSetStatus); + logf (LOG_DEBUG, "- PresentStatus=%d", responseAPDU->PresentStatus); + if (responseAPDU->DatabaseDiagnosticRecords) { WAISSearchResponse *ddr = responseAPDU->DatabaseDiagnosticRecords; @@ -258,14 +264,17 @@ static void wais_handle_search_response (WaisSetTcl_Obj *p, if (!p->irtcl_set_obj->resultCount) { +#if 1 if (responseAPDU->NumberOfRecordsReturned > responseAPDU->ResultCount) p->irtcl_set_obj->resultCount = responseAPDU->NumberOfRecordsReturned; else +#endif p->irtcl_set_obj->resultCount = responseAPDU->ResultCount; } + logf (LOG_DEBUG, "resultCount=%d", p->irtcl_set_obj->resultCount); free (p->diag); p->diag = NULL; free (p->addinfo); @@ -291,7 +300,7 @@ static void wais_handle_search_response (WaisSetTcl_Obj *p, for (i = 0; ddr->DocHeaders[i]; i++) { WAISDocumentHeader *head = ddr->DocHeaders[i]; - + logf (LOG_DEBUG, "%4d -->%.*s<--", i+1, head->DocumentID->size, head->DocumentID->bytes); wais_add_record_brief (p, i+1, head->DocumentID, @@ -305,14 +314,9 @@ static void wais_handle_search_response (WaisSetTcl_Obj *p, int i; logf (LOG_DEBUG, "Adding text entries"); for (i = 0; ddr->Text[i]; i++) - { - logf (LOG_DEBUG, " -->%.*s<--", - ddr->Text[i]->DocumentID->size, - ddr->Text[i]->DocumentID->bytes); wais_add_record_full (p, - ddr->Text[i]->DocumentID, + p->presentOffset + i, ddr->Text[i]->DocumentText); - } } freeWAISSearchResponse (ddr); } @@ -732,6 +736,7 @@ static int do_present (void *o, Tcl_Interp *interp, int argc, char **argv) any *waisQuery; SearchAPDU *waisSearch; DocObj **docObjs; + any refID; if (argc <= 0) return TCL_OK; @@ -742,6 +747,7 @@ static int do_present (void *o, Tcl_Interp *interp, int argc, char **argv) } else start = 1; + obj->presentOffset = start; if (argc >= 4) { if (Tcl_GetInt (interp, argv[3], &number) == TCL_ERROR) @@ -758,6 +764,9 @@ static int do_present (void *o, Tcl_Interp *interp, int argc, char **argv) element_names[1] = ES_DocumentText; element_names[2] = NULL; + refID.size = 1; + refID.bytes = "3"; + docObjs = ir_tcl_malloc (sizeof(*docObjs) * (number+1)); for (i = 0; iresult = "present request out of range"; return TCL_ERROR; } - docObjs[i] = makeDocObjUsingLines (rec->documentID, "TEXT", 0, - rec->lines); + docObjs[i] = makeDocObjUsingBytes (rec->documentID, "TEXT", 0, + rec->documentLength); } docObjs[i] = NULL; waisQuery = makeWAISTextQuery (docObjs); @@ -785,7 +794,7 @@ static int do_present (void *o, Tcl_Interp *interp, int argc, char **argv) obj->irtcl_set_obj->set_inher.databaseNames, QT_TextRetrievalQuery, /* query type */ element_names, /* element name */ - NULL, /* reference ID */ + &refID, /* reference ID */ waisQuery); left = p->max_out; @@ -829,6 +838,7 @@ static int do_search (void *o, Tcl_Interp *interp, int argc, char **argv) interp->result = "wrong # args"; return TCL_ERROR; } + obj->presentOffset = 1; if (argc == 4) { docObjs = ir_tcl_malloc (2 * sizeof(*docObjs)); @@ -920,6 +930,7 @@ static int do_responseStatus (void *o, Tcl_Interp *interp, { free (obj->diag); free (obj->addinfo); + return TCL_OK; } if (obj->diag) { @@ -944,7 +955,7 @@ static int do_maxDocs (void *o, Tcl_Interp *interp, int argc, char **argv) if (argc <= 0) { - obj->maxDocs = 100; + obj->maxDocs = 40; return TCL_OK; } return ir_tcl_get_set_int (&obj->maxDocs, interp, argc, argv);