* Sebastian Hammer, Adam Dickmeiss
*
* $Log: zsets.c,v $
- * Revision 1.15 1998-03-05 08:45:14 adam
+ * Revision 1.17 1998-06-23 15:33:36 adam
+ * Added feature to specify sort criteria in query (type 7 specifies
+ * sort flags).
+ *
+ * Revision 1.16 1998/05/20 10:12:24 adam
+ * Implemented automatic EXPLAIN database maintenance.
+ * Modified Zebra to work with ASN.1 compiled version of YAZ.
+ *
+ * Revision 1.15 1998/03/05 08:45:14 adam
* New result set model and modular ranking system. Moved towards
* descent server API. System information stored as "SGML" records.
*
struct zset_sort_info {
int max_entries;
int num_entries;
+ struct zset_sort_entry *all_entries;
struct zset_sort_entry **entries;
};
s->sort_info->max_entries = 1000;
s->sort_info->entries = xmalloc (sizeof(*s->sort_info->entries) *
s->sort_info->max_entries);
+ s->sort_info->all_entries = xmalloc (sizeof(*s->sort_info->all_entries) *
+ s->sort_info->max_entries);
for (i = 0; i < s->sort_info->max_entries; i++)
- s->sort_info->entries[i] = xmalloc (sizeof(**s->sort_info->entries));
+ s->sort_info->entries[i] = s->sort_info->all_entries + i;
resultSetRank (zh, s->sort_info, rset, hits);
return s;
}
for (s = zh->sets; s; s = s1)
{
- int i;
s1 = s->next;
- for (i = 0; i < s->sort_info->max_entries; i++)
- xfree (s->sort_info->entries[i]);
+ xfree (s->sort_info->all_entries);
+ xfree (s->sort_info->entries);
xfree (s->sort_info);
rset_delete (s->rset);
}
if (!rel)
break;
- if (criteria[j].relation == 'D')
+ if (criteria[j].relation == 'A')
{
if (rel > 0)
break;
}
- else if (criteria[j].relation == 'A')
+ else if (criteria[j].relation == 'D')
{
if (rel < 0)
break;
}
void resultSetSort (ZebraHandle zh, ODR stream,
- int num_input_setnames, char **input_setnames,
- char *output_setname, Z_SortKeySpecList *sort_sequence,
- int *sort_status)
+ int num_input_setnames, const char **input_setnames,
+ const char *output_setname,
+ Z_SortKeySpecList *sort_sequence, int *sort_status)
{
ZebraSet sset;
RSET rset;
zh->errCode = 230;
return;
}
+ logf (LOG_DEBUG, "result set sort input=%s output=%s",
+ *input_setnames, output_setname);
sset = resultSetGet (zh, input_setnames[0]);
if (!sset)
{
zh->errCode = 30;
- zh->errString = input_setnames[0];
+ zh->errString = nmem_strdup (stream->mem, input_setnames[0]);
return;
}
if (!(rset = sset->rset))
{
zh->errCode = 30;
- zh->errString = input_setnames[0];
+ zh->errString = nmem_strdup (stream->mem, input_setnames[0]);
return;
}
num_criteria = sort_sequence->num_specs;