char **attset)
{
int i;
-
if (!qa)
return 0;
for (i = 0; qa[i]; i++)
{
+ int got_type = 0;
struct ccl_rpn_attr *q = ccl_qual_get_attr(qa[i]);
- while (q)
+ for (; q; q = q->next)
{
- if (q->type == type && q->kind == CCL_RPN_ATTR_NUMERIC &&
- q->value.numeric == value)
+ if (q->type == type && q->kind == CCL_RPN_ATTR_NUMERIC)
{
- if (attset)
- *attset = q->set;
- return 1;
+ got_type = 1;
+ if (q->value.numeric == value)
+ {
+ if (attset)
+ *attset = q->set;
+ return 1;
+ }
}
- q = q->next;
}
+ if (got_type)
+ return 0;
}
return 0;
}
{
struct ccl_rpn_node *p;
size_t i;
- int relation_value = -1;
- int position_value = -1;
int structure_value = -1;
- int truncation_value = -1;
- int completeness_value = -1;
int left_trunc = 0;
int right_trunc = 0;
{
struct ccl_rpn_attr *attr;
for (attr = ccl_qual_get_attr(qa[i]); attr; attr = attr->next)
- if (attr->type != 1 || !attr_use || attr == attr_use)
+ if (attr->type == 1 && attr_use && attr != attr_use)
+ continue;
+ else
{
switch (attr->kind)
{
{ /* deal only with REAL attributes (positive) */
switch (attr->type)
{
- case CCL_BIB1_REL:
- if (relation_value != -1)
- continue;
- relation_value = attr->value.numeric;
- break;
- case CCL_BIB1_POS:
- if (position_value != -1)
- continue;
- position_value = attr->value.numeric;
- break;
case CCL_BIB1_STR:
if (structure_value != -1)
continue;
structure_value = attr->value.numeric;
break;
- case CCL_BIB1_TRU:
- if (truncation_value != -1)
- continue;
- truncation_value = attr->value.numeric;
- break;
- case CCL_BIB1_COM:
- if (completeness_value != -1)
- continue;
- completeness_value = attr->value.numeric;
- break;
}
ccl_add_attr_numeric(p, attr->set, attr->type,
attr->value.numeric);
YAZ_CHECK(tst_ccl_query(bibset, "s2=a b?", 0));
YAZ_CHECK(tst_ccl_query(bibset, "s2=a b? c", 0));
+ YAZ_CHECK(tst_ccl_query(bibset, "z=(ti=b)", "@attr 4=2 @attr 1=4 b "));
+ YAZ_CHECK(tst_ccl_query(bibset, "z=(ti=b?)",
+ "@attr 5=1 @attr 4=2 @attr 1=4 b "));
+ YAZ_CHECK(tst_ccl_query(bibset, "z=(a? and ti=b? and c?)",
+ "@and @and "
+ "@attr 5=104 a? "
+ "@attr 5=1 @attr 4=2 @attr 1=4 b "
+ "@attr 5=104 c? "));
+
ccl_qual_rm(&bibset);
}