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 <yaz/sortspec.h>
13 #include <yazpp/cql2rpn.h>
15 using namespace yazpp_1;
17 Yaz_cql2rpn::Yaz_cql2rpn()
22 Yaz_cql2rpn::~Yaz_cql2rpn()
25 cql_transform_close(m_transform);
28 void Yaz_cql2rpn::set_pqf_file(const char *fname)
31 m_transform = cql_transform_open_fname(fname);
35 bool Yaz_cql2rpn::parse_spec_file(const char *fname, int *error)
38 cql_transform_close(m_transform);
39 m_transform = cql_transform_open_fname(fname);
40 return m_transform ? true : false;
43 int Yaz_cql2rpn::query_transform(const char *cql_query,
44 Z_RPNQuery **rpnquery, ODR o,
47 const char *addinfo = 0;
50 CQL_parser cp = cql_parser_create();
52 int r = cql_parser_string(cp, cql_query);
55 r = YAZ_SRW_QUERY_SYNTAX_ERROR;
59 WRBUF pqf = wrbuf_alloc();
60 r = cql_transform(m_transform, cql_parser_result(cp),
64 WRBUF sortkeys = wrbuf_alloc();
65 WRBUF sortspec = wrbuf_alloc();
66 if (cql_sortby_to_sortkeys(cql_parser_result(cp),
67 wrbuf_vp_puts, sortkeys))
69 r = YAZ_SRW_UNSUPP_SORT_TYPE;
73 yaz_srw_sortkeys_to_sort_spec(wrbuf_cstr(sortkeys), sortspec);
74 Z_SortKeySpecList *sksl =
75 yaz_sort_spec(o, wrbuf_cstr(sortspec));
77 yaz_sort_spec_to_type7(sksl, pqf);
79 wrbuf_destroy(sortspec);
80 wrbuf_destroy(sortkeys);
82 YAZ_PQF_Parser pp = yaz_pqf_create();
84 *rpnquery = yaz_pqf_parse(pp, o, wrbuf_cstr(pqf));
89 yaz_pqf_error(pp, &pqf_msg, &off);
96 r = cql_transform_error(m_transform, &addinfo);
100 cql_parser_destroy(cp);
101 *addinfop = odr_strdup_null(o, addinfo);
107 * c-file-style: "Stroustrup"
108 * indent-tabs-mode: nil
110 * vim: shiftwidth=4 tabstop=8 expandtab