-/*
- * Copyright (C) 1995-2007, Index Data ApS
- * All rights reserved.
- *
- * $Id: querytowrbuf.c,v 1.9 2007-04-12 13:52:57 adam Exp $
+/* This file is part of the YAZ toolkit.
+ * Copyright (C) 1995-2008 Index Data
+ * See the file LICENSE for details.
*/
/** \file querytowrbuf.c
- \brief Query to WRBUF (to strings)
+ \brief Convert Z39.50 Z_Query to PQF (as WRBUF string)
*/
#include <stdio.h>
#include <yaz/querytowrbuf.h>
#include <yaz/oid_db.h>
-static void yaz_term_to_wrbuf(WRBUF b, const char *term, int len)
+void yaz_encode_pqf_term(WRBUF b, const char *term, int len)
{
int i;
for (i = 0; i < len; i++)
switch (zapt->term->which)
{
case Z_Term_general:
- yaz_term_to_wrbuf(b, (const char *)zapt->term->u.general->buf,
- zapt->term->u.general->len);
+ yaz_encode_pqf_term(b, (const char *)zapt->term->u.general->buf,
+ zapt->term->u.general->len);
break;
case Z_Term_characterString:
wrbuf_printf(b, "@term string ");
- yaz_term_to_wrbuf(b, zapt->term->u.characterString,
- strlen(zapt->term->u.characterString));
+ yaz_encode_pqf_term(b, zapt->term->u.characterString,
+ strlen(zapt->term->u.characterString));
break;
case Z_Term_numeric:
wrbuf_printf(b, "@term numeric %d ", *zapt->term->u.numeric);
else if (zs->u.simple->which == Z_Operand_resultSetId)
{
wrbuf_printf(b, "@set ");
- yaz_term_to_wrbuf(b, zs->u.simple->u.resultSetId,
- strlen(zs->u.simple->u.resultSetId));
+ yaz_encode_pqf_term(b, zs->u.simple->u.resultSetId,
+ strlen(zs->u.simple->u.resultSetId));
}
else
wrbuf_printf (b, "(unknown simple structure)");
}
void yaz_scan_to_wrbuf(WRBUF b, const Z_AttributesPlusTerm *zapt,
- const int *attrbute_set)
+ const Odr_oid *attrbute_set)
{
/* should print attr set here */
wrbuf_printf(b, "RPN ");
yaz_apt_to_wrbuf(b, zapt);
}
+void wrbuf_diags(WRBUF b, int num_diagnostics,Z_DiagRec **diags)
+{
+ /* we only dump the first diag - that keeps the log cleaner. */
+ wrbuf_printf(b," ERROR ");
+ if (diags[0]->which != Z_DiagRec_defaultFormat)
+ wrbuf_printf(b,"(diag not in default format?)");
+ else
+ {
+ Z_DefaultDiagFormat *e=diags[0]->u.defaultFormat;
+ if (e->condition)
+ wrbuf_printf(b, "%d ",*e->condition);
+ else
+ wrbuf_printf(b, "?? ");
+ if ((e->which==Z_DefaultDiagFormat_v2Addinfo) && (e->u.v2Addinfo))
+ wrbuf_printf(b,"%s ",e->u.v2Addinfo);
+ else if ((e->which==Z_DefaultDiagFormat_v3Addinfo) && (e->u.v3Addinfo))
+ wrbuf_printf(b,"%s ",e->u.v3Addinfo);
+ }
+}
+
/*
* Local variables:
* c-basic-offset: 4