/*
- * Copyright (C) 1995-1998, Index Data I/S
+ * Copyright (C) 1995-1998, Index Data
* All rights reserved.
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: zrpn.c,v $
- * Revision 1.82 1998-06-26 11:16:40 quinn
+ * Revision 1.85 1998-09-22 10:03:43 adam
+ * Changed result sets to be persistent in the sense that they can
+ * be re-searched if needed.
+ * Fixed memory leak in rsm_or.
+ *
+ * Revision 1.84 1998/09/18 12:41:00 adam
+ * Fixed bug with numerical relations.
+ *
+ * Revision 1.83 1998/09/02 13:53:19 adam
+ * Extra parameter decode added to search routines to implement
+ * persistent queries.
+ *
+ * Revision 1.82 1998/06/26 11:16:40 quinn
* Added support (un-optimised) for left and left/right truncation
*
* Revision 1.81 1998/06/24 12:16:14 adam
}
else
{
- strcpy (dst, "((-");
+ strcpy (dst, "(-(");
islt = 0;
}
val = -val;
}
static RSET rpn_sort_spec (ZebraHandle zh, Z_AttributesPlusTerm *zapt,
- oid_value attributeSet, ODR stream,
+ oid_value attributeSet, NMEM stream,
Z_SortKeySpecList *sort_sequence,
const char *rank_type)
{
if (!sort_sequence->specs)
{
sort_sequence->num_specs = 10;
- sort_sequence->specs = odr_malloc (stream, sort_sequence->num_specs *
- sizeof(*sort_sequence->specs));
+ sort_sequence->specs = nmem_malloc (stream, sort_sequence->num_specs *
+ sizeof(*sort_sequence->specs));
for (i = 0; i<sort_sequence->num_specs; i++)
sort_sequence->specs[i] = 0;
}
if (!oid_ent_to_oid (&oe, oid))
return 0;
- sks = odr_malloc (stream, sizeof(*sks));
- sks->sortElement = odr_malloc (stream, sizeof(*sks->sortElement));
+ sks = nmem_malloc (stream, sizeof(*sks));
+ sks->sortElement = nmem_malloc (stream, sizeof(*sks->sortElement));
sks->sortElement->which = Z_SortElement_generic;
- sk = sks->sortElement->u.generic = odr_malloc (stream, sizeof(*sk));
+ sk = sks->sortElement->u.generic = nmem_malloc (stream, sizeof(*sk));
sk->which = Z_SortKey_sortAttributes;
- sk->u.sortAttributes = odr_malloc (stream, sizeof(*sk->u.sortAttributes));
+ sk->u.sortAttributes = nmem_malloc (stream, sizeof(*sk->u.sortAttributes));
sk->u.sortAttributes->id = oid;
sk->u.sortAttributes->list =
- odr_malloc (stream, sizeof(*sk->u.sortAttributes->list));
+ nmem_malloc (stream, sizeof(*sk->u.sortAttributes->list));
sk->u.sortAttributes->list->num_attributes = 1;
sk->u.sortAttributes->list->attributes =
- odr_malloc (stream, sizeof(*sk->u.sortAttributes->list->attributes));
+ nmem_malloc (stream, sizeof(*sk->u.sortAttributes->list->attributes));
ae = *sk->u.sortAttributes->list->attributes =
- odr_malloc (stream, sizeof(**sk->u.sortAttributes->list->attributes));
+ nmem_malloc (stream, sizeof(**sk->u.sortAttributes->list->attributes));
ae->attributeSet = 0;
- ae->attributeType = odr_malloc (stream, sizeof(*ae->attributeType));
+ ae->attributeType = nmem_malloc (stream, sizeof(*ae->attributeType));
*ae->attributeType = 1;
ae->which = Z_AttributeValue_numeric;
- ae->value.numeric = odr_malloc (stream, sizeof(*ae->value.numeric));
+ ae->value.numeric = nmem_malloc (stream, sizeof(*ae->value.numeric));
*ae->value.numeric = use_value;
- sks->sortRelation = odr_malloc (stream, sizeof(*sks->sortRelation));
+ sks->sortRelation = nmem_malloc (stream, sizeof(*sks->sortRelation));
if (sort_relation_value == 1)
*sks->sortRelation = Z_SortRelation_ascending;
else if (sort_relation_value == 2)
else
*sks->sortRelation = Z_SortRelation_ascending;
- sks->caseSensitivity = odr_malloc (stream, sizeof(*sks->caseSensitivity));
+ sks->caseSensitivity = nmem_malloc (stream, sizeof(*sks->caseSensitivity));
*sks->caseSensitivity = 0;
sks->missingValueAction = 0;
static RSET rpn_search_APT (ZebraHandle zh, Z_AttributesPlusTerm *zapt,
- oid_value attributeSet, ODR stream,
+ oid_value attributeSet, NMEM stream,
Z_SortKeySpecList *sort_sequence,
int num_bases, char **basenames)
{
}
static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs,
- oid_value attributeSet, ODR stream,
+ oid_value attributeSet, NMEM stream,
Z_SortKeySpecList *sort_sequence,
int num_bases, char **basenames)
{
#ifdef ASN_COMPILED
if (*zop->u.prox->u.known != Z_ProxUnit_word)
{
- char *val = odr_malloc (stream, 16);
+ char *val = nmem_malloc (stream, 16);
zh->errCode = 132;
zh->errString = val;
sprintf (val, "%d", *zop->u.prox->u.known);
#else
if (*zop->u.prox->proximityUnitCode != Z_ProxUnit_word)
{
- char *val = odr_malloc (stream, 16);
+ char *val = nmem_malloc (stream, 16);
zh->errCode = 132;
zh->errString = val;
sprintf (val, "%d", *zop->u.prox->proximityUnitCode);
return r;
}
-void rpn_search (ZebraHandle zh, ODR stream,
+
+RSET rpn_search (ZebraHandle zh, NMEM nmem,
Z_RPNQuery *rpn, int num_bases, char **basenames,
- const char *setname)
+ const char *setname,
+ ZebraSet sset)
{
RSET rset;
oident *attrset;
zh->errString = NULL;
zh->hits = 0;
- sort_sequence = odr_malloc (stream, sizeof(*sort_sequence));
+ sort_sequence = nmem_malloc (nmem, sizeof(*sort_sequence));
sort_sequence->num_specs = 10;
- sort_sequence->specs = odr_malloc (stream, sort_sequence->num_specs *
+ sort_sequence->specs = nmem_malloc (nmem, sort_sequence->num_specs *
sizeof(*sort_sequence->specs));
for (i = 0; i<sort_sequence->num_specs; i++)
sort_sequence->specs[i] = 0;
attrset = oid_getentbyoid (rpn->attributeSetId);
attributeSet = attrset->value;
- rset = rpn_search_structure (zh, rpn->RPNStructure, attributeSet, stream,
- sort_sequence,
- num_bases, basenames);
+ rset = rpn_search_structure (zh, rpn->RPNStructure, attributeSet,
+ nmem, sort_sequence, num_bases, basenames);
if (!rset)
- return;
+ return 0;
- resultSetAdd (zh, setname, 1, rset, &zh->hits);
if (zh->errCode)
logf (LOG_DEBUG, "search error: %d", zh->errCode);
-
+
for (i = 0; sort_sequence->specs[i]; i++)
;
sort_sequence->num_specs = i;
- if (i)
- resultSetSort (zh, stream, 1, &setname, setname, sort_sequence,
- &sort_status);
+ if (!i)
+ resultSetRank (zh, sset, rset);
+ else
+ {
+ logf (LOG_DEBUG, "resultSetSortSingle in rpn_search");
+ resultSetSortSingle (zh, nmem, sset, rset,
+ sort_sequence, &sort_status);
+ if (zh->errCode)
+ {
+ logf (LOG_DEBUG, "resultSetSortSingle status = %d", zh->errCode);
+ }
+ }
+ return rset;
}
struct scan_info_entry {
return 0;
}
-static void scan_term_untrans (ZebraHandle zh, ODR stream, int reg_type,
+static void scan_term_untrans (ZebraHandle zh, NMEM stream, int reg_type,
char **dst, const char *src)
{
char term_dst[1024];
term_untrans (zh, reg_type, term_dst, src);
- *dst = odr_malloc (stream, strlen(term_dst)+1);
+ *dst = nmem_malloc (stream, strlen(term_dst)+1);
strcpy (*dst, term_dst);
}
}
if (j0 == -1)
break;
- scan_term_untrans (zh, stream, reg_id,
+ scan_term_untrans (zh, stream->mem, reg_id,
&glist[i+before].term, mterm);
rset = rset_trunc (zh, &scan_info_array[j0].list[ptr[j0]].isam_p, 1,
glist[i+before].term, strlen(glist[i+before].term),
if (j0 == -1)
break;
- scan_term_untrans (zh, stream, reg_id,
+ scan_term_untrans (zh, stream->mem, reg_id,
&glist[before-1-i].term, mterm);
rset = rset_trunc