/*
- * Copyright (C) 1994-1998, Index Data I/S
+ * Copyright (C) 1994-1999, Index Data
* All rights reserved.
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: zebramap.c,v $
- * Revision 1.9 1998-04-02 14:35:30 adam
+ * Revision 1.12 1999-02-12 13:29:25 adam
+ * Implemented position-flag for registers.
+ *
+ * Revision 1.11 1998/10/13 20:09:19 adam
+ * Changed call to readconf_line.
+ *
+ * Revision 1.10 1998/06/23 15:33:37 adam
+ * Added feature to specify sort criteria in query (type 7 specifies
+ * sort flags).
+ *
+ * Revision 1.9 1998/04/02 14:35:30 adam
* First version of Zebra that works with compiled ASN.1.
*
* Revision 1.8 1998/03/05 08:42:44 adam
struct zebra_map {
unsigned reg_id;
int completeness;
+ int positioned;
int type;
union {
struct {
char line[512];
char *argv[10];
int argc;
+ int lineno = 0;
struct zebra_map **zm = 0, *zp;
if (!(f = yaz_path_fopen(zms->tabpath, name, "r")))
logf(LOG_WARN|LOG_ERRNO, "%s", name);
return ;
}
- while ((argc = readconf_line(f, line, 512, argv, 10)))
+ while ((argc = readconf_line(f, &lineno, line, 512, argv, 10)))
{
if (!yaz_matchstr (argv[0], "index") && argc == 2)
{
(*zm)->maptab = NULL;
(*zm)->type = ZEBRA_MAP_TYPE_INDEX;
(*zm)->completeness = 0;
+ (*zm)->positioned = 1;
}
else if (!yaz_matchstr (argv[0], "sort") && argc == 2)
{
(*zm)->u.sort.entry_size = 80;
(*zm)->maptab = NULL;
(*zm)->completeness = 0;
+ (*zm)->positioned = 0;
}
else if (zm && !yaz_matchstr (argv[0], "charmap") && argc == 2)
{
{
(*zm)->completeness = atoi (argv[1]);
}
+ else if (zm && !yaz_matchstr (argv[0], "position") && argc == 2)
+ {
+ (*zm)->positioned = atoi (argv[1]);
+ }
else if (zm && !yaz_matchstr (argv[0], "entrysize") && argc == 2)
{
if ((*zm)->type == ZEBRA_MAP_TYPE_SORT)
return 0;
}
+int zebra_maps_is_positioned (ZebraMaps zms, unsigned reg_id)
+{
+ struct zebra_map *zm = zebra_map_get (zms, reg_id);
+ if (zm)
+ return zm->positioned;
+ return 0;
+}
+
int zebra_maps_is_sort (ZebraMaps zms, unsigned reg_id)
{
struct zebra_map *zm = zebra_map_get (zms, reg_id);
int zebra_maps_attr (ZebraMaps zms, Z_AttributesPlusTerm *zapt,
unsigned *reg_id, char **search_type, char **rank_type,
- int *complete_flag)
+ int *complete_flag, int *sort_flag)
{
AttrType completeness;
AttrType structure;
AttrType relation;
+ AttrType sort_relation;
int completeness_value;
int structure_value;
int relation_value;
+ int sort_relation_value;
attr_init_APT (&structure, zapt, 4);
attr_init_APT (&completeness, zapt, 6);
attr_init_APT (&relation, zapt, 2);
+ attr_init_APT (&sort_relation, zapt, 7);
completeness_value = attr_find (&completeness, NULL);
structure_value = attr_find (&structure, NULL);
relation_value = attr_find (&relation, NULL);
+ sort_relation_value = attr_find (&sort_relation, NULL);
if (completeness_value == 2 || completeness_value == 3)
*complete_flag = 1;
*complete_flag = 0;
*reg_id = 0;
+ *sort_flag = (sort_relation_value > 0) ? 1 : 0;
*search_type = "phrase";
*rank_type = "void";
if (relation_value == 102)
break;
case 109: /* numeric string */
*reg_id = 'n';
- *search_type = "phrase";
+ *search_type = "numeric";
break;
case 104: /* urx */
*reg_id = 'u';