-/*
- * Copyright (C) 1995-2007, Index Data ApS
+/* This file is part of the YAZ toolkit.
+ * Copyright (C) 1995-2008 Index Data
* See the file LICENSE for details.
- *
- * $Id: seshigh.c,v 1.128 2007-09-11 08:37:53 adam Exp $
*/
/**
* \file seshigh.c
if (rr.errcode && rr.surrogate_flag)
{
int code = yaz_diag_bib1_to_srw(rr.errcode);
- const char *message = yaz_diag_srw_str(code);
- int len = 200;
- if (message)
- len += strlen(message);
- if (rr.errstring)
- len += strlen(rr.errstring);
-
- record->recordData_buf = (char *) odr_malloc(o, len);
-
- sprintf(record->recordData_buf, "<diagnostic "
- "xmlns=\"http://www.loc.gov/zing/srw/diagnostic/\">\n"
- " <uri>info:srw/diagnostic/1/%d</uri>\n", code);
- if (rr.errstring)
- sprintf(record->recordData_buf + strlen(record->recordData_buf),
- " <details>%s</details>\n", rr.errstring);
- if (message)
- sprintf(record->recordData_buf + strlen(record->recordData_buf),
- " <message>%s</message>\n", message);
- sprintf(record->recordData_buf + strlen(record->recordData_buf),
- "</diagnostic>\n");
- record->recordData_len = strlen(record->recordData_buf);
- record->recordPosition = odr_intdup(o, pos);
- record->recordSchema = "info:srw/schema/1/diagnostics-v1.1";
+ yaz_mk_sru_surrogate(o, record, pos, code, rr.errstring);
return 0;
}
else if (rr.len >= 0)
record->recordData_buf = rr.record;
record->recordData_len = rr.len;
record->recordPosition = odr_intdup(o, pos);
- record->recordSchema = odr_strdup_null(o, rr.schema);
+ record->recordSchema = odr_strdup_null(
+ o, rr.schema ? rr.schema : srw_req->recordSchema);
}
if (rr.errcode)
{
r = cql_parser_string(cp, cql);
if (r)
{
- /* CQL syntax error */
- srw_errcode = 10;
+ srw_errcode = YAZ_SRW_QUERY_SYNTAX_ERROR;
}
if (!r)
{
cql_parser_result(cp),
rpn_buf, sizeof(rpn_buf)-1);
if (r)
- srw_errcode = cql_transform_error(ct, &add);
+ srw_errcode = cql_transform_error(ct, &add);
}
if (!r)
{
int code = yaz_pqf_error(pp, &pqf_msg, &off);
yaz_log(YLOG_WARN, "PQF Parser Error %s (code %d)",
pqf_msg, code);
- srw_errcode = 10;
+ srw_errcode = YAZ_SRW_QUERY_SYNTAX_ERROR;
}
else
{
if (srw_error)
return srw_error;
if (query.which != Z_Query_type_1 && query.which != Z_Query_type_101)
- return 10; /* bad query type */
+ return YAZ_SRW_QUERY_SYNTAX_ERROR; /* bad query type */
rpn = query.u.type_1;
if (!rpn->RPNStructure)
- return 10; /* must be structure */
+ return YAZ_SRW_QUERY_SYNTAX_ERROR; /* must be structure */
if (rpn->RPNStructure->which != Z_RPNStructure_simple)
- return 10; /* must be simple */
+ return YAZ_SRW_QUERY_SYNTAX_ERROR; /* must be simple */
if (rpn->RPNStructure->u.simple->which != Z_Operand_APT)
- return 10; /* must be attributes plus term node .. */
+ return YAZ_SRW_QUERY_SYNTAX_ERROR; /* must be be attributes + term */
memcpy(result, rpn->RPNStructure->u.simple->u.attributesPlusTerm,
sizeof(*result));
return 0;
ccl0 = odr_strdupn(odr, (char*) ccl->buf, ccl->len);
if ((node = ccl_find_str(bibset, ccl0, &errcode, &pos)) == 0) {
bsrr->errstring = (char*) ccl_err_msg(errcode);
- return 10; /* Query syntax error */
+ return YAZ_SRW_QUERY_SYNTAX_ERROR; /* Query syntax error */
}
bsrr->query->which = Z_Query_type_1;
*next = freq.last_in_set ? 0 : recno + 1;
- /* backend should be able to signal whether error is system-wide
- or only pertaining to current record */
if (freq.errcode)
{
- if (!freq.surrogate_flag)
+ if (!freq.surrogate_flag) /* non-surrogate diagnostic i.e. global */
{
char s[20];
*pres = Z_PresentStatus_failure;