-void init_recordGroup (struct recordGroup *rg) {
- assert(rg);
- yaz_log(LOG_API,"init_recordGroup");
- rg->groupName = NULL;
- rg->databaseName = NULL;
- rg->path = NULL;
- rg->recordId = NULL;
- rg->recordType = NULL;
- rg->flagStoreData = -1;
- rg->flagStoreKeys = -1;
- rg->flagRw = 1;
- rg->databaseNamePath = 0;
- rg->explainDatabase = 0;
- rg->fileVerboseLimit = 100000;
- rg->followLinks = -1;
-}
-
-
-/* This is from extract.c... it seems useful, when extract_rec_in mem is
- called... and in general... Should be moved to somewhere else */
-void res_get_recordGroup (ZebraHandle zh,
- struct recordGroup *rGroup,
- const char *ext) {
- char gprefix[128];
- char ext_res[128];
-
- yaz_log(LOG_API,"res_get_recordGroup e=%s",ext);
- if (!rGroup->groupName || !*rGroup->groupName)
- *gprefix = '\0';
- else
- sprintf (gprefix, "%s.", rGroup->groupName);
-
- /* determine file type - depending on extension */
- if (!rGroup->recordType) {
- sprintf (ext_res, "%srecordType.%s", gprefix, ext);
- if (!(rGroup->recordType = res_get (zh->res, ext_res))) {
- sprintf (ext_res, "%srecordType", gprefix);
- rGroup->recordType = res_get (zh->res, ext_res);
- }
- }
- /* determine match criteria */
- if (!rGroup->recordId) {
- sprintf (ext_res, "%srecordId.%s", gprefix, ext);
- if (!(rGroup->recordId = res_get (zh->res, ext_res))) {
- sprintf (ext_res, "%srecordId", gprefix);
- rGroup->recordId = res_get (zh->res, ext_res);
- }
- }
-
- /* determine database name */
- if (!rGroup->databaseName) {
- sprintf (ext_res, "%sdatabase.%s", gprefix, ext);
- if (!(rGroup->databaseName = res_get (zh->res, ext_res))) {
- sprintf (ext_res, "%sdatabase", gprefix);
- rGroup->databaseName = res_get (zh->res, ext_res);
- }
- }
- if (!rGroup->databaseName)
- rGroup->databaseName = "Default";
-
- /* determine if explain database */
- sprintf (ext_res, "%sexplainDatabase", gprefix);
- rGroup->explainDatabase =
- atoi (res_get_def (zh->res, ext_res, "0"));
-
- /* storeData */
- if (rGroup->flagStoreData == -1) {
- const char *sval;
- sprintf (ext_res, "%sstoreData.%s", gprefix, ext);
- if (!(sval = res_get (zh->res, ext_res))) {
- sprintf (ext_res, "%sstoreData", gprefix);
- sval = res_get (zh->res, ext_res);
- }
- if (sval)
- rGroup->flagStoreData = atoi (sval);
- }
- if (rGroup->flagStoreData == -1) rGroup->flagStoreData = 0;
-
- /* storeKeys */
- if (rGroup->flagStoreKeys == -1) {
- const char *sval;
-
- sprintf (ext_res, "%sstoreKeys.%s", gprefix, ext);
- sval = res_get (zh->res, ext_res);
- if (!sval) {
- sprintf (ext_res, "%sstoreKeys", gprefix);
- sval = res_get (zh->res, ext_res);
- }
- if (!sval) sval = res_get (zh->res, "storeKeys");
- if (sval) rGroup->flagStoreKeys = atoi (sval);
- }
- if (rGroup->flagStoreKeys == -1) rGroup->flagStoreKeys = 0;
-
-}
-
-
-/* almost the same as zebra_records_retrieve ... but how did it work?
- I mean for multiple records ??? CHECK ??? */
-void api_records_retrieve (ZebraHandle zh, ODR stream,
- const char *setname, Z_RecordComposition *comp,
- oid_value input_format, int num_recs,
- ZebraRetrievalRecord *recs)
-{
- ZebraPosSet poset;
- int i, *pos_array;
- yaz_log(LOG_API,"api_records_retrieve s=%s n=%d",setname,num_recs);
-
- if (!zh->res)
- {
- zh->errCode = 30;
- zh->errString = odr_strdup (stream, setname);
- return;
- }
-
- zh->errCode = 0;
-
- if (zebra_begin_read (zh))
- return;
-
- pos_array = (int *) xmalloc (num_recs * sizeof(*pos_array));
- for (i = 0; i<num_recs; i++)
- pos_array[i] = recs[i].position;
- poset = zebraPosSetCreate (zh, setname, num_recs, pos_array);
- if (!poset)
- {
- logf (LOG_DEBUG, "zebraPosSetCreate error");
- zh->errCode = 30;
- zh->errString = nmem_strdup (stream->mem, setname);
- }
- else
- {
- for (i = 0; i<num_recs; i++)
- {
- if (poset[i].term)
- {
- recs[i].errCode = 0;
- recs[i].format = VAL_SUTRS;
- recs[i].len = strlen(poset[i].term);
- recs[i].buf = poset[i].term;
- recs[i].base = poset[i].db;
- recs[i].sysno = 0;
-
- }
- else if (poset[i].sysno)
- {
- /* changed here ??? CHECK ??? */
- char *b;
- recs[i].errCode =
- zebra_record_fetch (zh, poset[i].sysno, poset[i].score,
- stream, input_format, comp,
- &recs[i].format,
- &b,
- &recs[i].len,
- &recs[i].base);
- recs[i].buf = (char *) odr_malloc(stream,recs[i].len);
- memcpy(recs[i].buf, b, recs[i].len);
- recs[i].errString = 0; /* Hmmm !!! we should get this */
- recs[i].sysno = poset[i].sysno;
- recs[i].score = poset[i].score;
- }
- else
- {
- char num_str[20];