1 /* This file is part of the yazpp toolkit.
2 * Copyright (C) 1998-2013 Index Data and Mike Taylor
3 * See the file LICENSE for details.
10 #include <yaz/diagsrw.h>
11 #include <yaz/pquery.h>
12 #include <yazpp/cql2rpn.h>
14 using namespace yazpp_1;
16 Yaz_cql2rpn::Yaz_cql2rpn()
21 Yaz_cql2rpn::~Yaz_cql2rpn()
24 cql_transform_close(m_transform);
27 void Yaz_cql2rpn::set_pqf_file(const char *fname)
30 m_transform = cql_transform_open_fname(fname);
34 bool Yaz_cql2rpn::parse_spec_file(const char *fname, int *error)
37 cql_transform_close(m_transform);
38 m_transform = cql_transform_open_fname(fname);
39 return m_transform ? true : false;
42 int Yaz_cql2rpn::query_transform(const char *cql_query,
43 Z_RPNQuery **rpnquery, ODR o,
46 const char *addinfo = 0;
49 CQL_parser cp = cql_parser_create();
51 int r = cql_parser_string(cp, cql_query);
54 r = YAZ_SRW_QUERY_SYNTAX_ERROR;
58 WRBUF w = wrbuf_alloc();
59 r = cql_transform(m_transform, cql_parser_result(cp), wrbuf_vp_puts, w);
62 YAZ_PQF_Parser pp = yaz_pqf_create();
64 *rpnquery = yaz_pqf_parse(pp, o, wrbuf_cstr(w));
69 yaz_pqf_error(pp, &pqf_msg, &off);
76 r = cql_transform_error(m_transform, &addinfo);
80 cql_parser_destroy(cp);
81 *addinfop = odr_strdup_null(o, addinfo);
87 * c-file-style: "Stroustrup"
88 * indent-tabs-mode: nil
90 * vim: shiftwidth=4 tabstop=8 expandtab