X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzinfo.c;h=d678e67333916516614395b43b2aad1069ccb84d;hb=1b8e1d7dfece31918056f76819c18675ed6e781e;hp=669f36689754fdc3c0ccdf72586bc7c05c90cc1f;hpb=f7a35c8865bf897ea727edf97b8b3b996a2f5419;p=idzebra-moved-to-github.git diff --git a/index/zinfo.c b/index/zinfo.c index 669f366..d678e67 100644 --- a/index/zinfo.c +++ b/index/zinfo.c @@ -1,5 +1,5 @@ -/* $Id: zinfo.c,v 1.69 2006-09-15 10:45:13 adam Exp $ - Copyright (C) 1995-2006 +/* $Id: zinfo.c,v 1.78 2007-04-16 08:44:32 adam Exp $ + Copyright (C) 1995-2007 Index Data ApS This file is part of the Zebra server. @@ -53,7 +53,7 @@ struct zebSUInfoB { typedef struct zebAccessObjectB *zebAccessObject; struct zebAccessObjectB { void *handle; - SYSNO sysno; + zint sysno; Odr_oid *oid; zebAccessObject next; }; @@ -66,7 +66,7 @@ struct zebAccessInfoB { typedef struct { struct zebSUInfoB *SUInfo; - SYSNO sysno; + zint sysno; int dirty; int readFlag; data1_node *data1_tree; @@ -79,7 +79,7 @@ struct zebDatabaseInfoB { data1_node *data1_database; zint recordCount; /* records in db */ zint recordBytes; /* size of records */ - SYSNO sysno; /* sysno of database info */ + zint sysno; /* sysno of database info */ int readFlag; /* 1: read is needed when referenced; 0 if not */ int dirty; /* 1: database is dirty: write is needed */ struct zebDatabaseInfoB *next; @@ -94,7 +94,7 @@ struct zebraExplainAttset { struct zebraCategoryListInfo { int dirty; - SYSNO sysno; + zint sysno; data1_node *data1_categoryList; }; @@ -143,7 +143,7 @@ static void zebraExplain_writeCategoryList(ZebraExplainInfo zei, int key_flush); -static Record createRecord(Records records, SYSNO *sysno) +static Record createRecord(Records records, zint *sysno) { Record rec; if (*sysno) @@ -252,7 +252,7 @@ void zebraExplain_mergeOids (ZebraExplainInfo zei, data1_node *n, if (!ao) { ao = (zebAccessObject) nmem_malloc(zei->nmem, sizeof(*ao)); - ao->handle = NULL; + ao->handle = 0; ao->sysno = 1; ao->oid = oid; ao->next = *op; @@ -270,8 +270,8 @@ void zebraExplain_mergeAccessInfo(ZebraExplainInfo zei, data1_node *n, { *accessInfo = (zebAccessInfo) nmem_malloc(zei->nmem, sizeof(**accessInfo)); - (*accessInfo)->attributeSetIds = NULL; - (*accessInfo)->schemas = NULL; + (*accessInfo)->attributeSetIds = 0; + (*accessInfo)->schemas = 0; } else { @@ -356,20 +356,20 @@ ZebraExplainInfo zebraExplain_open( zei->updateFunc = updateFunc; zei->dirty = 0; zei->ordinalDatabase = 1; - zei->curDatabaseInfo = NULL; + zei->curDatabaseInfo = 0; zei->records = records; zei->nmem = nmem; zei->dh = dh; data1_get_absyn (zei->dh, "explain", DATA1_XPATH_INDEXING_DISABLE); - zei->attsets = NULL; + zei->attsets = 0; zei->res = res; zei->categoryList = (struct zebraCategoryListInfo *) nmem_malloc(zei->nmem, sizeof(*zei->categoryList)); zei->categoryList->sysno = 0; zei->categoryList->dirty = 0; - zei->categoryList->data1_categoryList = NULL; + zei->categoryList->data1_categoryList = 0; if ( atoi(res_get_def(res, "notimestamps", "0") )== 0) { @@ -409,11 +409,23 @@ ZebraExplainInfo zebraExplain_open( #endif node_tgtinfo = data1_search_tag(zei->dh, zei->data1_target, "/targetInfo"); + if (!node_tgtinfo) + { + yaz_log(YLOG_FATAL, "Node node_tgtinfo missing"); + nmem_destroy(zei->nmem); + return 0; + } zebraExplain_mergeAccessInfo(zei, node_tgtinfo, &zei->accessInfo); node_zebra = data1_search_tag(zei->dh, node_tgtinfo->child, "zebraInfo"); + if (!node_zebra) + { + yaz_log(YLOG_FATAL, "Node node_zebra missing"); + nmem_destroy(zei->nmem); + return 0; + } np = 0; if (node_zebra) { @@ -424,9 +436,9 @@ ZebraExplainInfo zebraExplain_open( } for(; np; np = np->next) { - data1_node *node_name = NULL; - data1_node *node_id = NULL; - data1_node *node_aid = NULL; + data1_node *node_name = 0; + data1_node *node_id = 0; + data1_node *node_aid = 0; data1_node *np2; if (np->which != DATA1N_tag || strcmp(np->u.tag.tag, "database")) continue; @@ -447,7 +459,7 @@ ZebraExplainInfo zebraExplain_open( nmem_malloc(zei->nmem, sizeof(**zdip)); (*zdip)->readFlag = 1; (*zdip)->dirty = 0; - (*zdip)->data1_database = NULL; + (*zdip)->data1_database = 0; (*zdip)->recordCount = 0; (*zdip)->recordBytes = 0; zebraExplain_mergeAccessInfo (zei, 0, &(*zdip)->accessInfo); @@ -465,7 +477,7 @@ ZebraExplainInfo zebraExplain_open( node_aid->u.data.len); (*zdip)->attributeDetails->readFlag = 1; (*zdip)->attributeDetails->dirty = 0; - (*zdip)->attributeDetails->SUInfo = NULL; + (*zdip)->attributeDetails->SUInfo = 0; zdip = &(*zdip)->next; } @@ -489,7 +501,7 @@ ZebraExplainInfo zebraExplain_open( assert (np && np->which == DATA1N_data); zei->runNumber = atoi_zn(np->u.data.data, np->u.data.len); yaz_log(YLOG_DEBUG, "read runnumber=" ZINT_FORMAT, zei->runNumber); - *zdip = NULL; + *zdip = 0; } rec_free(&trec); } @@ -497,7 +509,7 @@ ZebraExplainInfo zebraExplain_open( { data1_node *node_tgtinfo; - *zdip = NULL; + *zdip = 0; if (writeFlag) { char *sgml_buf; @@ -591,12 +603,12 @@ static void zebraExplain_readAttributeDetails(ZebraExplainInfo zei, "attrlist"); for (np = node_list->child; np; np = np->next) { - data1_node *node_str = NULL; - data1_node *node_ordinal = NULL; - data1_node *node_type = NULL; - data1_node *node_cat = NULL; - data1_node *node_doc_occurrences = NULL; - data1_node *node_term_occurrences = NULL; + data1_node *node_str = 0; + data1_node *node_ordinal = 0; + data1_node *node_type = 0; + data1_node *node_cat = 0; + data1_node *node_doc_occurrences = 0; + data1_node *node_term_occurrences = 0; data1_node *np2; if (np->which != DATA1N_tag || strcmp(np->u.tag.tag, "attr")) @@ -691,7 +703,7 @@ static void zebraExplain_readAttributeDetails(ZebraExplainInfo zei, node_ordinal->u.data.len); zsuip = &(*zsuip)->next; } - *zsuip = NULL; + *zsuip = 0; zad->readFlag = 0; rec_free(&rec); } @@ -855,8 +867,7 @@ static void zebraExplain_updateAccessInfo (ZebraExplainInfo zei, data1_node *n, if (!c) { data1_pr_tree (zei->dh, n, stdout); - exit (0); - assert (c); + zebra_exit("zebraExplain_updateAccessInfo"); } if ((p = accessInfo->attributeSetIds)) @@ -952,7 +963,7 @@ int zebraExplain_newDatabase (ZebraExplainInfo zei, const char *database, zdi->attributeDetails->readFlag = 0; zdi->attributeDetails->sysno = 0; zdi->attributeDetails->dirty = 1; - zdi->attributeDetails->SUInfo = NULL; + zdi->attributeDetails->SUInfo = 0; zdi->attributeDetails->data1_tree = data1_read_sgml (zei->dh, zei->nmem, "AttributeDetails\n" @@ -964,6 +975,8 @@ int zebraExplain_newDatabase (ZebraExplainInfo zei, const char *database, zebraExplain_initCommonInfo (zei, node_adinfo); + data1_mk_tag_data_text(zei->dh, node_adinfo, "name", database, zei->nmem); + return 0; } @@ -977,13 +990,13 @@ static void zebraExplain_writeCategoryList (ZebraExplainInfo zei, int i; Record drec; data1_node *node_ci, *node_categoryList; - SYSNO sysno = 0; + zint sysno = 0; static char *category[] = { "CategoryList", "TargetInfo", "DatabaseInfo", "AttributeDetails", - NULL + 0 }; assert (zcl); @@ -1049,6 +1062,7 @@ static void zebraExplain_writeAttributeDetails (ZebraExplainInfo zei, zad->dirty = 0; #if ZINFO_DEBUG yaz_log(YLOG_LOG, "zebraExplain_writeAttributeDetails"); + data1_pr_tree(zei->dh, zad->data1_tree, stderr); #endif drec = createRecord (zei->records, &zad->sysno); @@ -1060,16 +1074,14 @@ static void zebraExplain_writeAttributeDetails (ZebraExplainInfo zei, "/attributeDetails"); zebraExplain_updateCommonInfo (zei, node_adinfo); - data1_mk_tag_data_text (zei->dh, node_adinfo, "name", - databaseName, zei->nmem); + /* zebra info (private) .. no children yet.. so se don't index zebraInfo */ + node_zebra = data1_mk_tag_uni (zei->dh, zei->nmem, + "zebraInfo", node_adinfo); /* extract *searchable* keys from it. We do this here, because record count, etc. is affected */ if (key_flush) (*zei->updateFunc)(zei->updateHandle, drec, zad->data1_tree); - /* zebra info (private) */ - node_zebra = data1_mk_tag_uni (zei->dh, zei->nmem, - "zebraInfo", node_adinfo); node_list = data1_mk_tag_uni (zei->dh, zei->nmem, "attrlist", node_zebra); for (zsui = zad->SUInfo; zsui; zsui = zsui->next) @@ -1153,10 +1165,6 @@ static void zebraExplain_writeDatabase (ZebraExplainInfo zei, zebraExplain_updateCommonInfo (zei, node_dbinfo); zebraExplain_updateAccessInfo (zei, node_dbinfo, zdi->accessInfo); - /* extract *searchable* keys from it. We do this here, because - record count, etc. is affected */ - if (key_flush) - (*zei->updateFunc)(zei->updateHandle, drec, zdi->data1_database); /* record count */ node_count = data1_mk_tag_uni (zei->dh, zei->nmem, "recordCount", node_dbinfo); @@ -1166,6 +1174,11 @@ static void zebraExplain_writeDatabase (ZebraExplainInfo zei, /* zebra info (private) */ node_zebra = data1_mk_tag_uni (zei->dh, zei->nmem, "zebraInfo", node_dbinfo); + + /* extract *searchable* keys from it. We do this here, because + record count, etc. is affected */ + if (key_flush) + (*zei->updateFunc)(zei->updateHandle, drec, zdi->data1_database); data1_mk_tag_data_zint (zei->dh, node_zebra, "recordBytes", zdi->recordBytes, zei->nmem); @@ -1222,11 +1235,10 @@ static void zebraExplain_writeAttributeSet (ZebraExplainInfo zei, Record drec; data1_node *node_root, *node_attinfo, *node_attributes, *node_atttype; data1_node *node_values; - struct oident *entp; - struct data1_attset *attset = NULL; - - if ((entp = oid_getentbyoid (o->oid))) - attset = data1_attset_search_id (zei->dh, entp->value); + struct data1_attset *attset = 0; + + if (o->oid) + attset = data1_attset_search_id (zei->dh, o->oid); #if ZINFO_DEBUG yaz_log(YLOG_LOG, "zebraExplain_writeAttributeSet %s", @@ -1307,12 +1319,12 @@ static void zebraExplain_writeTarget (ZebraExplainInfo zei, int key_flush) zebraExplain_updateCommonInfo (zei, node_tgtinfo); zebraExplain_updateAccessInfo (zei, node_tgtinfo, zei->accessInfo); + node_zebra = data1_mk_tag_uni (zei->dh, zei->nmem, + "zebraInfo", node_tgtinfo); /* convert to "SGML" and write it */ if (key_flush) (*zei->updateFunc)(zei->updateHandle, trec, zei->data1_target); - node_zebra = data1_mk_tag_uni (zei->dh, zei->nmem, - "zebraInfo", node_tgtinfo); data1_mk_tag_data_text (zei->dh, node_zebra, "version", ZEBRAVER, zei->nmem); node_list = data1_mk_tag (zei->dh, zei->nmem, @@ -1360,10 +1372,10 @@ int zebraExplain_lookup_attr_str(ZebraExplainInfo zei, assert (zei->curDatabaseInfo); for (zsui = &zei->curDatabaseInfo->attributeDetails->SUInfo; *zsui; zsui = &(*zsui)->next) - if ((*zsui)->info.index_type == index_type - && (*zsui)->info.cat == cat - && (*zsui)->info.which == ZEB_SU_STR - && !yaz_matchstr((*zsui)->info.u.str, str)) + if ( (index_type == -1 || (*zsui)->info.index_type == index_type) + && (*zsui)->info.cat == cat + && (*zsui)->info.which == ZEB_SU_STR + && !yaz_matchstr((*zsui)->info.u.str, str)) { struct zebSUInfoB *zsui_this = *zsui; @@ -1509,7 +1521,7 @@ zebAccessObject zebraExplain_announceOid (ZebraExplainInfo zei, if (!ao) { ao = (zebAccessObject) nmem_malloc (zei->nmem, sizeof(*ao)); - ao->handle = NULL; + ao->handle = 0; ao->sysno = 0; ao->oid = odr_oiddup_nmem (zei->nmem, oid); ao->next = *op; @@ -1518,23 +1530,6 @@ zebAccessObject zebraExplain_announceOid (ZebraExplainInfo zei, return ao; } -void zebraExplain_addAttributeSet (ZebraExplainInfo zei, int set) -{ - oident oe; - int oid[OID_SIZE]; - - oe.proto = PROTO_Z3950; - oe.oclass = CLASS_ATTSET; - oe.value = (enum oid_value) set; - - if (oid_ent_to_oid (&oe, oid)) - { - zebraExplain_announceOid (zei, &zei->accessInfo->attributeSetIds, oid); - zebraExplain_announceOid (zei, &zei->curDatabaseInfo-> - accessInfo->attributeSetIds, oid); - } -} - struct zebSUInfoB *zebraExplain_add_sui_info(ZebraExplainInfo zei, zinfo_index_category_t cat, int index_type) @@ -1612,6 +1607,8 @@ RecordAttr *rec_init_attr (ZebraExplainInfo zei, Record rec) if (rec->info[recInfo_attr]) return (RecordAttr *) rec->info[recInfo_attr]; recordAttr = (RecordAttr *) xmalloc (sizeof(*recordAttr)); + + memset(recordAttr, '\0', sizeof(*recordAttr)); rec->info[recInfo_attr] = (char *) recordAttr; rec->size[recInfo_attr] = sizeof(*recordAttr);