X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzinfo.c;h=de9be50466c5f3ff1206678c08177f0730212d86;hb=eb8857cfa2ceaa2635f14888b95d6f71b8def045;hp=1deda6feaa51d3b26fd56dfcdbc7e5f44d966201;hpb=313737060e826ddd9687b340750b49ebe38db40e;p=idzebra-moved-to-github.git diff --git a/index/zinfo.c b/index/zinfo.c index 1deda6f..de9be50 100644 --- a/index/zinfo.c +++ b/index/zinfo.c @@ -1,10 +1,26 @@ -/* - * Copyright (C) 1994-2002, Index Data - * All rights reserved. - * Sebastian Hammer, Adam Dickmeiss - * - * $Id: zinfo.c,v 1.28 2002-05-03 13:49:04 adam Exp $ - */ +/* $Id: zinfo.c,v 1.36 2003-01-15 07:26:40 oleg Exp $ + Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 + Index Data Aps + +This file is part of the Zebra server. + +Zebra is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +Zebra is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Zebra; see the file LICENSE.zebra. If not, write to the +Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. +*/ + + #include #include @@ -78,6 +94,7 @@ struct zebraExplainInfo { int ordinalSU; int runNumber; int dirty; + int write_flag; Records records; data1_handle dh; Res res; @@ -139,12 +156,12 @@ static Record createRecord (Records records, int *sysno) return rec; } -void zebraExplain_flush (ZebraExplainInfo zei, int writeFlag, void *handle) +void zebraExplain_flush (ZebraExplainInfo zei, void *handle) { if (!zei) return; zei->updateHandle = handle; - if (writeFlag) + if (zei->write_flag) { struct zebDatabaseInfoB *zdi; zebAccessObject o; @@ -180,14 +197,14 @@ void zebraExplain_flush (ZebraExplainInfo zei, int writeFlag, void *handle) } } -void zebraExplain_close (ZebraExplainInfo zei, int writeFlag) +void zebraExplain_close (ZebraExplainInfo zei) { #if ZINFO_DEBUG - logf (LOG_LOG, "zebraExplain_close wr=%d", writeFlag); + yaz_log (LOG_LOG, "zebraExplain_close"); #endif if (!zei) return; - zebraExplain_flush (zei, writeFlag, zei->updateHandle); + zebraExplain_flush (zei, zei->updateHandle); nmem_destroy (zei->nmem); } @@ -274,6 +291,7 @@ ZebraExplainInfo zebraExplain_open ( logf (LOG_LOG, "zebraExplain_open wr=%d", writeFlag); #endif zei = (ZebraExplainInfo) nmem_malloc (nmem, sizeof(*zei)); + zei->write_flag = writeFlag; zei->updateHandle = updateHandle; zei->updateFunc = updateFunc; zei->dirty = 0; @@ -289,12 +307,17 @@ ZebraExplainInfo zebraExplain_open ( zei->categoryList->dirty = 0; zei->categoryList->data1_categoryList = NULL; - time (&our_time); - tm = localtime (&our_time); - sprintf (zei->date, "%04d%02d%02d%02d%02d%02d", - tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec); - + if ( atoi (res_get_def (res, "notimestamps", "0") )== 0) + { + time (&our_time); + tm = localtime (&our_time); + sprintf (zei->date, "%04d%02d%02d%02d%02d%02d", + tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, + tm->tm_hour, tm->tm_min, tm->tm_sec); + } else { + sprintf (zei->date, "%04d%02d%02d%02d%02d%02d", + 0, 0, 0, 0, 0, 0); + } zdip = &zei->databaseInfo; trec = rec_get (records, 1); /* get "root" record */ @@ -320,8 +343,8 @@ ZebraExplainInfo zebraExplain_open ( #if ZINFO_DEBUG data1_pr_tree (zei->dh, zei->data1_target, stderr); #endif - node_tgtinfo = data1_search_tag (zei->dh, zei->data1_target->child, - "targetInfo"); + node_tgtinfo = data1_search_tag (zei->dh, zei->data1_target, + "/targetInfo"); zebraExplain_mergeAccessInfo (zei, node_tgtinfo, &zei->accessInfo); @@ -395,6 +418,7 @@ ZebraExplainInfo zebraExplain_open ( np = np->child; assert (np && np->which == DATA1N_data); zei->runNumber = atoi_n (np->u.data.data, np->u.data.len); + yaz_log (LOG_DEBUG, "read runnumber = %d", zei->runNumber); *zdip = NULL; } rec_rm (&trec); @@ -423,14 +447,10 @@ ZebraExplainInfo zebraExplain_open ( nmem_destroy (zei->nmem); return 0; } - data1_pr_tree (zei->dh, zei->data1_target, stdout); - - node_tgtinfo = data1_search_tag (zei->dh, zei->data1_target->child, - "targetInfo"); + node_tgtinfo = data1_search_tag (zei->dh, zei->data1_target, + "/targetInfo"); assert (node_tgtinfo); - data1_pr_tree (zei->dh, zei->data1_target, stdout); - zebraExplain_initCommonInfo (zei, node_tgtinfo); zebraExplain_initAccessInfo (zei, node_tgtinfo); @@ -465,10 +485,8 @@ ZebraExplainInfo zebraExplain_open ( if (zcl->data1_categoryList) { - assert (zcl->data1_categoryList->child); - node_cl = data1_search_tag (zei->dh, - zcl->data1_categoryList->child, - "categoryList"); + node_cl = data1_search_tag (zei->dh, zcl->data1_categoryList, + "/categoryList"); assert (node_cl); zebraExplain_initCommonInfo (zei, node_cl); } @@ -489,8 +507,8 @@ static void zebraExplain_readAttributeDetails (ZebraExplainInfo zei, zad->data1_tree = read_sgml_rec (zei->dh, zei->nmem, rec); - node_adinfo = data1_search_tag (zei->dh, zad->data1_tree->child, - "attributeDetails"); + node_adinfo = data1_search_tag (zei->dh, zad->data1_tree, + "/attributeDetails"); node_zebra = data1_search_tag (zei->dh, node_adinfo->child, "zebraInfo"); node_list = data1_search_tag (zei->dh, node_zebra->child, @@ -554,8 +572,9 @@ static void zebraExplain_readDatabase (ZebraExplainInfo zei, zdi->data1_database = read_sgml_rec (zei->dh, zei->nmem, rec); - node_dbinfo = data1_search_tag (zei->dh, zdi->data1_database->child, - "databaseInfo"); + node_dbinfo = data1_search_tag (zei->dh, zdi->data1_database, + "/databaseInfo"); + assert (node_dbinfo); zebraExplain_mergeAccessInfo (zei, node_dbinfo, &zdi->accessInfo); node_zebra = data1_search_tag (zei->dh, node_dbinfo->child, @@ -591,11 +610,11 @@ int zebraExplain_curDatabase (ZebraExplainInfo zei, const char *database) assert (zei); if (zei->curDatabaseInfo && - !strcmp (zei->curDatabaseInfo->databaseName, database)) + !STRCASECMP (zei->curDatabaseInfo->databaseName, database)) return 0; for (zdi = zei->databaseInfo; zdi; zdi=zdi->next) { - if (!strcmp (zdi->databaseName, database_n)) + if (!STRCASECMP (zdi->databaseName, database_n)) break; } if (!zdi) @@ -623,7 +642,7 @@ int zebraExplain_curDatabase (ZebraExplainInfo zei, const char *database) static void zebraExplain_initCommonInfo (ZebraExplainInfo zei, data1_node *n) { - data1_node *c = data1_mk_tag (zei->dh, zei->nmem, "commonInfo", n); + data1_node *c = data1_mk_tag (zei->dh, zei->nmem, "commonInfo", 0, n); data1_mk_tag_data_text (zei->dh, c, "dateAdded", zei->date, zei->nmem); data1_mk_tag_data_text (zei->dh, c, "dateChanged", zei->date, zei->nmem); data1_mk_tag_data_text (zei->dh, c, "languageCode", "EN", zei->nmem); @@ -633,13 +652,14 @@ static void zebraExplain_updateCommonInfo (ZebraExplainInfo zei, data1_node *n) { data1_node *c = data1_search_tag (zei->dh, n->child, "commonInfo"); assert (c); - data1_mk_tag_data_text (zei->dh, c, "dateChanged", zei->date, zei->nmem); + data1_mk_tag_data_text_uni (zei->dh, c, "dateChanged", zei->date, + zei->nmem); } static void zebraExplain_initAccessInfo (ZebraExplainInfo zei, data1_node *n) { - data1_node *c = data1_mk_tag (zei->dh, zei->nmem, "accessInfo", n); - data1_node *d = data1_mk_tag (zei->dh, zei->nmem, "unitSystems", c); + data1_node *c = data1_mk_tag (zei->dh, zei->nmem, "accessInfo", 0, n); + data1_node *d = data1_mk_tag (zei->dh, zei->nmem, "unitSystems", 0, c); data1_mk_tag_data_text (zei->dh, d, "string", "ISO", zei->nmem); } @@ -689,7 +709,7 @@ int zebraExplain_newDatabase (ZebraExplainInfo zei, const char *database, assert (zei); for (zdi = zei->databaseInfo; zdi; zdi=zdi->next) { - if (!strcmp (zdi->databaseName, database_n)) + if (!STRCASECMP (zdi->databaseName, database_n)) break; } if (zdi) @@ -715,9 +735,9 @@ int zebraExplain_newDatabase (ZebraExplainInfo zei, const char *database, "\n"); if (!zdi->data1_database) return -2; - - node_dbinfo = data1_search_tag (zei->dh, zdi->data1_database->child, - "databaseInfo"); + + node_dbinfo = data1_search_tag (zei->dh, zdi->data1_database, + "/databaseInfo"); assert (node_dbinfo); zebraExplain_initCommonInfo (zei, node_dbinfo); @@ -754,9 +774,8 @@ int zebraExplain_newDatabase (ZebraExplainInfo zei, const char *database, "AttributeDetails\n" "\n"); - node_adinfo = - data1_search_tag (zei->dh, zdi->attributeDetails->data1_tree->child, - "attributeDetails"); + node_adinfo = data1_search_tag (zei->dh, zdi->attributeDetails->data1_tree, + "/attributeDetails"); assert (node_adinfo); zebraExplain_initCommonInfo (zei, node_adinfo); @@ -781,9 +800,9 @@ static void writeAttributeValueDetails (ZebraExplainInfo zei, if (set_ordinal != zsui->info.set) continue; node_attvalue = data1_mk_tag (zei->dh, zei->nmem, "attributeValue", - node_atvs); + 0 /* attr */, node_atvs); node_value = data1_mk_tag (zei->dh, zei->nmem, "value", - node_attvalue); + 0 /* attr */, node_attvalue); data1_mk_tag_data_int (zei->dh, node_value, "numeric", zsui->info.use, zei->nmem); } @@ -818,17 +837,18 @@ static void zebraExplain_writeCategoryList (ZebraExplainInfo zei, #endif drec = createRecord (zei->records, &sysno); - - node_ci = data1_search_tag (zei->dh, node_categoryList->child, - "categoryList"); + + node_ci = data1_search_tag (zei->dh, node_categoryList, + "/categoryList"); assert (node_ci); - node_ci = data1_mk_tag (zei->dh, zei->nmem, "categories", node_ci); + node_ci = data1_mk_tag (zei->dh, zei->nmem, "categories", 0 /* attr */, + node_ci); assert (node_ci); for (i = 0; category[i]; i++) { - data1_node *node_cat = data1_mk_tag (zei->dh, zei->nmem, - "category", node_ci); + data1_node *node_cat = data1_mk_tag (zei->dh, zei->nmem, "category", + 0 /* attr */, node_ci); data1_mk_tag_data_text (zei->dh, node_cat, "name", category[i], zei->nmem); @@ -872,8 +892,9 @@ static void zebraExplain_writeAttributeDetails (ZebraExplainInfo zei, drec = createRecord (zei->records, &zad->sysno); assert (zad->data1_tree); - node_adinfo = data1_search_tag (zei->dh, zad->data1_tree->child, - "attributeDetails"); + + node_adinfo = data1_search_tag (zei->dh, zad->data1_tree, + "/attributeDetails"); zebraExplain_updateCommonInfo (zei, node_adinfo); data1_mk_tag_data_text (zei->dh, node_adinfo, "name", @@ -902,7 +923,8 @@ static void zebraExplain_writeAttributeDetails (ZebraExplainInfo zei, break; set_min = set_ordinal; node_asd = data1_mk_tag (zei->dh, zei->nmem, - "attributeSetDetails", node_attributesBySet); + "attributeSetDetails", + 0 /* attr */, node_attributesBySet); attset = data1_attset_search_id (zei->dh, set_ordinal); if (!attset) @@ -926,13 +948,16 @@ static void zebraExplain_writeAttributeDetails (ZebraExplainInfo zei, oid, zei->nmem); node_abt = data1_mk_tag (zei->dh, zei->nmem, - "attributesByType", node_asd); + "attributesByType", + 0 /*attr */, node_asd); node_atd = data1_mk_tag (zei->dh, zei->nmem, - "attributeTypeDetails", node_abt); + "attributeTypeDetails", + 0 /* attr */, node_abt); data1_mk_tag_data_int (zei->dh, node_atd, "type", 1, zei->nmem); node_atvs = data1_mk_tag (zei->dh, zei->nmem, - "attributeValues", node_atd); + "attributeValues", + 0 /* attr */, node_atd); writeAttributeValueDetails (zei, zad, node_atvs, attset); } } @@ -948,7 +973,8 @@ static void zebraExplain_writeAttributeDetails (ZebraExplainInfo zei, int oid[OID_SIZE]; data1_node *node_attr; - node_attr = data1_mk_tag (zei->dh, zei->nmem, "attr", node_list); + node_attr = data1_mk_tag (zei->dh, zei->nmem, "attr", 0 /* attr */, + node_list); oident.proto = PROTO_Z3950; oident.oclass = CLASS_ATTSET; @@ -993,9 +1019,11 @@ static void zebraExplain_writeDatabase (ZebraExplainInfo zei, #endif drec = createRecord (zei->records, &zdi->sysno); assert (zdi->data1_database); - node_dbinfo = data1_search_tag (zei->dh, zdi->data1_database->child, - "databaseInfo"); + node_dbinfo = data1_search_tag (zei->dh, zdi->data1_database, + "/databaseInfo"); + + assert (node_dbinfo); zebraExplain_updateCommonInfo (zei, node_dbinfo); zebraExplain_updateAccessInfo (zei, node_dbinfo, zdi->accessInfo); @@ -1044,10 +1072,11 @@ static void writeAttributeValues (ZebraExplainInfo zei, data1_node *node_value; node_value = data1_mk_tag (zei->dh, zei->nmem, "attributeValue", - node_values); + 0 /* attr */, node_values); data1_mk_tag_data_text (zei->dh, node_value, "name", atts->name, zei->nmem); - node_value = data1_mk_tag (zei->dh, zei->nmem, "value", node_value); + node_value = data1_mk_tag (zei->dh, zei->nmem, "value", + 0 /* attr */, node_value); data1_mk_tag_data_int (zei->dh, node_value, "numeric", atts->value, zei->nmem); } @@ -1080,9 +1109,10 @@ static void zebraExplain_writeAttributeSet (ZebraExplainInfo zei, "AttributeSetInfo\n" "\n" ); - node_attinfo = data1_search_tag (zei->dh, node_root->child, - "attributeSetInfo"); + node_attinfo = data1_search_tag (zei->dh, node_root, + "/attributeSetInfo"); + assert (node_attinfo); zebraExplain_initCommonInfo (zei, node_attinfo); zebraExplain_updateCommonInfo (zei, node_attinfo); @@ -1103,7 +1133,7 @@ static void zebraExplain_writeAttributeSet (ZebraExplainInfo zei, data1_mk_tag_data_int (zei->dh, node_atttype, "type", 1, zei->nmem); node_values = data1_mk_tag (zei->dh, zei->nmem, - "attributeValues", node_atttype); + "attributeValues", 0 /* attr */, node_atttype); if (attset) writeAttributeValues (zei, node_values, attset); @@ -1138,8 +1168,8 @@ static void zebraExplain_writeTarget (ZebraExplainInfo zei, int key_flush) trec = rec_get (zei->records, 1); xfree (trec->info[recInfo_storeData]); - node_tgtinfo = data1_search_tag (zei->dh, zei->data1_target->child, - "targetInfo"); + node_tgtinfo = data1_search_tag (zei->dh, zei->data1_target, + "/targetInfo"); assert (node_tgtinfo); zebraExplain_updateCommonInfo (zei, node_tgtinfo); @@ -1154,12 +1184,12 @@ static void zebraExplain_writeTarget (ZebraExplainInfo zei, int key_flush) data1_mk_tag_data_text (zei->dh, node_zebra, "version", ZEBRAVER, zei->nmem); node_list = data1_mk_tag (zei->dh, zei->nmem, - "databaseList", node_zebra); + "databaseList", 0 /* attr */, node_zebra); for (zdi = zei->databaseInfo; zdi; zdi = zdi->next) { data1_node *node_db; node_db = data1_mk_tag (zei->dh, zei->nmem, - "database", node_list); + "database", 0 /* attr */, node_list); data1_mk_tag_data_text (zei->dh, node_db, "name", zdi->databaseName, zei->nmem); data1_mk_tag_data_int (zei->dh, node_db, "id", @@ -1307,7 +1337,9 @@ void zebraExplain_recordCountIncrement (ZebraExplainInfo zei, int adjust_num) int zebraExplain_runNumberIncrement (ZebraExplainInfo zei, int adjust_num) { if (adjust_num) + { zei->dirty = 1; + } return zei->runNumber += adjust_num; }