#include <yaz/srw.h>
#include <yaz/matchstr.h>
#include <yaz/yaz-iconv.h>
+#include <yaz/log.h>
#include "sru-p.h"
odr_intdup(o,
odr_atoi(
(const char *) attr->children->content));
+ yaz_log(YLOG_DEBUG, "SOLR total results: %d ", atoi( attr->children->content));
}
else if (!strcmp((const char *) attr->name, "start"))
{
start = odr_atoi((const char *) attr->children->content);
+ yaz_log(YLOG_DEBUG, "SOLR start: %d ", atoi( attr->children->content));
}
}
}
for (node = ptr->children; node; node = node->next)
if (node->type == XML_ELEMENT_NODE)
sr->num_records++;
+ yaz_log(YLOG_DEBUG, "SOLR results in response: %d ", sr->num_records);
sr->records = odr_malloc(o, sizeof(*sr->records) * sr->num_records);
record->recordData_buf = odr_malloc(o, buf->use + 1);
memcpy(record->recordData_buf, buf->content, buf->use);
record->recordData_buf[buf->use] = '\0';
- record->recordPosition = odr_intdup(o, start + offset);
+ // TODO Solve the real problem: Making the recordPosition 1-based due to "funny" code in zoom-sru
+ record->recordPosition = odr_intdup(o, start + offset + 1);
+ yaz_log(YLOG_DEBUG, "SOLR pos=" ODR_INT_PRINTF, *record->recordPosition);
xmlBufferFree(buf);
}
else
{
- if (res->numberOfRecords)
+ if (res->numberOfRecords) {
resultset->size = *res->numberOfRecords;
+ yaz_log(YLOG_DEBUG, "res numberOfRecords " ODR_INT_PRINTF, *res->numberOfRecords);
+ }
for (i = 0; i<res->num_records; i++)
{
int pos;
Z_NamePlusRecord *npr = (Z_NamePlusRecord *)
odr_malloc(c->odr_in, sizeof(Z_NamePlusRecord));
-
+ /*
+ * TODO This does not work with 0-based recordPositions.
+ * We will iterate over one twice
+ */
if (res->records[i].recordPosition &&
*res->records[i].recordPosition > 0)
pos = *res->records[i].recordPosition - 1;
else
pos = *start + i;
+ yaz_log(YLOG_DEBUG, "pos %d start %d ", pos, *start);
sru_rec = &res->records[i];
*start += i;
if (*count + *start > resultset->size)
*count = resultset->size - *start;
+ yaz_log(YLOG_DEBUG, "SRU result set size " ODR_INT_PRINTF " start %d count %d", resultset->size, *start, *count);
if (*count < 0)
*count = 0;
-
nmem = odr_extract_mem(c->odr_in);
nmem_transfer(odr_getmem(resultset->odr), nmem);
nmem_destroy(nmem);