-/* $Id: attribute.c,v 1.23 2006-05-19 13:49:34 adam Exp $
- Copyright (C) 1995-2006
+/* $Id: attribute.c,v 1.28 2007-01-15 15:10:16 adam Exp $
+ Copyright (C) 1995-2007
Index Data ApS
This file is part of the Zebra server.
for more details.
You should have received a copy of the GNU General Public License
-along with Zebra; see the file LICENSE.zebra. If not, write to the
-Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
*/
#include <stdio.h>
ZEBRA_RES zebra_attr_list_get_ord(ZebraHandle zh,
Z_AttributeList *attr_list,
+ zinfo_index_category_t cat,
int index_type,
oid_value curAttributeSet,
int *ord)
zebra_setError(zh, YAZ_BIB1_UNSUPP_USE_ATTRIBUTE, 0);
return ZEBRA_FAIL;
}
- *ord = zebraExplain_lookup_attr_str(zh->reg->zei, index_type, use_string);
+ *ord = zebraExplain_lookup_attr_str(zh->reg->zei, cat,
+ index_type, use_string);
if (*ord == -1)
{
if (use_value < 0)
oid_value curAttributeSet,
int *ord)
{
+ ZEBRA_RES res = ZEBRA_OK;
+ AttrType relation;
+ int relation_value;
+ zinfo_index_category_t cat = zinfo_index_category_index;
+
+ attr_init_APT(&relation, zapt, 2);
+ relation_value = attr_find(&relation, NULL);
+
+ if (relation_value == 103) /* always matches */
+ cat = zinfo_index_category_alwaysmatches;
+
if (!xpath_use)
- return zebra_attr_list_get_ord(zh, zapt->attributes,
- index_type, curAttributeSet, ord);
+ {
+ res = zebra_attr_list_get_ord(zh, zapt->attributes,
+ cat, index_type,
+ curAttributeSet, ord);
+ /* use attribute not found. But it the relation is
+ always matches and the regulare index attribute is found
+ return a different diagnostic */
+ if (res != ZEBRA_OK &&
+ relation_value == 103
+ && zebra_attr_list_get_ord(
+ zh, zapt->attributes,
+ zinfo_index_category_index, index_type,
+ curAttributeSet, ord) == ZEBRA_OK)
+ zebra_setError_zint(zh, YAZ_BIB1_UNSUPP_RELATION_ATTRIBUTE, 103);
+ }
else
{
- *ord = zebraExplain_lookup_attr_str(zh->reg->zei, index_type,
+ *ord = zebraExplain_lookup_attr_str(zh->reg->zei, cat, index_type,
xpath_use);
if (*ord == -1)
{
yaz_log(YLOG_LOG, "zebra_apt_get_ord FAILED xpath=%s index_type=%c",
xpath_use, index_type);
zebra_setError(zh, YAZ_BIB1_UNSUPP_USE_ATTRIBUTE, 0);
- return ZEBRA_FAIL;
+ res = ZEBRA_FAIL;
}
else
{
yaz_log(YLOG_LOG, "zebra_apt_get_ord OK xpath=%s index_type=%c",
xpath_use, index_type);
+
}
- return ZEBRA_OK;
}
+ return res;
}
ZEBRA_RES zebra_sort_get_ord(ZebraHandle zh,
*numerical = 1;
if (zebra_attr_list_get_ord(zh, sortAttributes->list,
- 's', VAL_BIB1, ord)== ZEBRA_OK)
- return ZEBRA_OK;
- if (zebra_attr_list_get_ord(zh, sortAttributes->list,
- 'S', VAL_BIB1, ord)== ZEBRA_OK)
+ zinfo_index_category_sort,
+ -1 /* any index */, VAL_BIB1, ord)== ZEBRA_OK)
return ZEBRA_OK;
return ZEBRA_FAIL;
}