X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fzoom-c.c;h=c01ccb83fd3c4f69749ba1c0af7d0a76e37ec620;hb=6fff59263797b6dd62a12fd389543cb3b5416d5b;hp=148b54e1312596030c62f6a26cb5c89377753974;hpb=626ee9b09c95c3585c432623c042872b0d1fea92;p=yaz-moved-to-github.git diff --git a/src/zoom-c.c b/src/zoom-c.c index 148b54e..c01ccb8 100644 --- a/src/zoom-c.c +++ b/src/zoom-c.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: zoom-c.c,v 1.69 2006-04-19 10:05:03 adam Exp $ + * $Id: zoom-c.c,v 1.72 2006-05-10 07:34:38 adam Exp $ */ /** * \file zoom-c.c @@ -634,6 +634,7 @@ void ZOOM_resultset_addref (ZOOM_resultset r) ZOOM_resultset ZOOM_resultset_create () { + int i; ZOOM_resultset r = (ZOOM_resultset) xmalloc (sizeof(*r)); initlog(); @@ -648,7 +649,8 @@ ZOOM_resultset ZOOM_resultset_create () r->schema = 0; r->count = 0; r->step = 0; - r->record_cache = 0; + for (i = 0; irecord_hash[i] = 0; r->r_sort_spec = 0; r->query = 0; r->connection = 0; @@ -794,18 +796,21 @@ ZOOM_resultset_sort1(ZOOM_resultset r, ZOOM_API(void) ZOOM_resultset_cache_reset(ZOOM_resultset r) { - ZOOM_record_cache rc; - - for (rc = r->record_cache; rc; rc = rc->next) + int i; + for (i = 0; irec.wrbuf_marc) - wrbuf_free (rc->rec.wrbuf_marc, 1); - if (rc->rec.wrbuf_iconv) - wrbuf_free (rc->rec.wrbuf_iconv, 1); - if (rc->rec.wrbuf_opac) - wrbuf_free (rc->rec.wrbuf_opac, 1); + ZOOM_record_cache rc; + for (rc = r->record_hash[i]; rc; rc = rc->next) + { + if (rc->rec.wrbuf_marc) + wrbuf_free (rc->rec.wrbuf_marc, 1); + if (rc->rec.wrbuf_iconv) + wrbuf_free (rc->rec.wrbuf_iconv, 1); + if (rc->rec.wrbuf_opac) + wrbuf_free (rc->rec.wrbuf_opac, 1); + } + r->record_hash[i] = 0; } - r->record_cache = 0; } ZOOM_API(void) @@ -918,8 +923,8 @@ ZOOM_resultset_records (ZOOM_resultset r, ZOOM_record *recs, if (!r) return ; - yaz_log(log_api, "%p ZOOM_resultset_records r=%p start=%d count=%d", - r, r, start, count); + yaz_log(log_api, "%p ZOOM_resultset_records r=%p start=%ld count=%ld", + r, r, (long) start, (long) count); if (count && recs) force_present = 1; ZOOM_resultset_retrieve (r, force_present, start, count); @@ -1150,7 +1155,7 @@ static zoom_ret ZOOM_connection_send_init (ZOOM_connection c) ZOOM_options_get(c->options, "implementationName"), odr_prepend(c->odr_out, "ZOOM-C", ireq->implementationName)); - version = odr_strdup(c->odr_out, "$Revision: 1.69 $"); + version = odr_strdup(c->odr_out, "$Revision: 1.72 $"); if (strlen(version) > 10) /* check for unexpanded CVS strings */ version[strlen(version)-2] = '\0'; ireq->implementationVersion = odr_prepend(c->odr_out, @@ -1584,7 +1589,15 @@ ZOOM_resultset_record (ZOOM_resultset r, size_t pos) if (!rec) { - ZOOM_resultset_retrieve (r, 1, pos, 1); + /* + * MIKE: I think force_sync should always be zero, but I don't + * want to make this change until I get the go-ahead from + * Adam, in case something depends on the old synchronous + * behaviour. + */ + int force_sync = 1; + if (getenv("ZOOM_RECORD_NO_FORCE_SYNC")) force_sync = 0; + ZOOM_resultset_retrieve (r, force_sync, pos, 1); rec = ZOOM_resultset_record_immediate (r, pos); } return rec; @@ -1973,6 +1986,13 @@ static int strcmp_null(const char *v1, const char *v2) return strcmp(v1, v2); } +static size_t record_hash(int pos) +{ + if (pos < 0) + pos = 0; + return pos % RECORD_HASH_SIZE; +} + static void record_cache_add (ZOOM_resultset r, Z_NamePlusRecord *npr, int pos) { @@ -1985,7 +2005,7 @@ static void record_cache_add (ZOOM_resultset r, Z_NamePlusRecord *npr, ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_RECV_RECORD); ZOOM_connection_put_event(r->connection, event); - for (rc = r->record_cache; rc; rc = rc->next) + for (rc = r->record_hash[record_hash(pos)]; rc; rc = rc->next) { if (pos == rc->pos) { @@ -2023,8 +2043,8 @@ static void record_cache_add (ZOOM_resultset r, Z_NamePlusRecord *npr, rc->schema = 0; rc->pos = pos; - rc->next = r->record_cache; - r->record_cache = rc; + rc->next = r->record_hash[record_hash(pos)]; + r->record_hash[record_hash(pos)] = rc; } static ZOOM_record record_cache_lookup (ZOOM_resultset r, int pos) @@ -2035,7 +2055,7 @@ static ZOOM_record record_cache_lookup (ZOOM_resultset r, int pos) const char *syntax = ZOOM_resultset_option_get (r, "preferredRecordSyntax"); - for (rc = r->record_cache; rc; rc = rc->next) + for (rc = r->record_hash[record_hash(pos)]; rc; rc = rc->next) { if (pos == rc->pos) {