X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fseshigh.c;h=d1205adb4cb465441ac470b0e4fa2fc1f12f9707;hb=1f41a1d415d2ab138050a96020ed39caa0c4e323;hp=a0d79fa7760afd31130989b3dcbc5c807361ed3a;hpb=ee6ab2ee3a9ee1a8c65d7272ec7fba1d886f5af0;p=yaz-moved-to-github.git diff --git a/src/seshigh.c b/src/seshigh.c index a0d79fa..d1205ad 100644 --- a/src/seshigh.c +++ b/src/seshigh.c @@ -735,29 +735,7 @@ static int srw_bend_fetch(association *assoc, int pos, 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, "\n" - " info:srw/diagnostic/1/%d\n", code); - if (rr.errstring) - sprintf(record->recordData_buf + strlen(record->recordData_buf), - "
%s
\n", rr.errstring); - if (message) - sprintf(record->recordData_buf + strlen(record->recordData_buf), - " %s\n", message); - sprintf(record->recordData_buf + strlen(record->recordData_buf), - "
\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) @@ -765,7 +743,8 @@ static int srw_bend_fetch(association *assoc, int pos, 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) { @@ -788,8 +767,7 @@ static int cql2pqf(ODR odr, const char *cql, cql_transform_t ct, r = cql_parser_string(cp, cql); if (r) { - /* CQL syntax error */ - srw_errcode = 10; + srw_errcode = YAZ_SRW_QUERY_SYNTAX_ERROR; } if (!r) { @@ -798,7 +776,7 @@ static int cql2pqf(ODR odr, const char *cql, cql_transform_t ct, 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) { @@ -813,7 +791,7 @@ static int cql2pqf(ODR odr, const char *cql, cql_transform_t ct, 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 { @@ -835,14 +813,14 @@ static int cql2pqf_scan(ODR odr, const char *cql, cql_transform_t ct, 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; @@ -858,7 +836,7 @@ static int ccl2pqf(ODR odr, const Odr_oct *ccl, CCL_bibset bibset, 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; @@ -2542,11 +2520,9 @@ static Z_Records *pack_records(association *a, char *setname, int start, *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;