X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fyaz-cql2rpn.cpp;h=2354b8bb014bd2d0143eb8c44ccf6dffe6f754b3;hb=71cc5e5d95d48ec001af3130c10b99dc9d4664b3;hp=d97f9f0e94980c0a0caa08af4eb674c0d326d3b4;hpb=4c758111f1ff5a815888f70a4c4335ab149f5608;p=yazpp-moved-to-github.git diff --git a/src/yaz-cql2rpn.cpp b/src/yaz-cql2rpn.cpp index d97f9f0..2354b8b 100644 --- a/src/yaz-cql2rpn.cpp +++ b/src/yaz-cql2rpn.cpp @@ -2,12 +2,14 @@ * Copyright (c) 1998-2004, Index Data. * See the file LICENSE for details. * - * $Id: yaz-cql2rpn.cpp,v 1.5 2004-11-30 21:10:30 adam Exp $ + * $Id: yaz-cql2rpn.cpp,v 1.14 2007-03-20 07:54:11 adam Exp $ */ -#include +#include #include -#include +#include + +using namespace yazpp_1; Yaz_cql2rpn::Yaz_cql2rpn() { @@ -17,62 +19,74 @@ Yaz_cql2rpn::Yaz_cql2rpn() Yaz_cql2rpn::~Yaz_cql2rpn() { if (m_transform) - cql_transform_close(m_transform); + cql_transform_close(m_transform); } void Yaz_cql2rpn::set_pqf_file(const char *fname) { if (!m_transform) - m_transform = cql_transform_open_fname(fname); + m_transform = cql_transform_open_fname(fname); +} + + +bool Yaz_cql2rpn::parse_spec_file(const char *fname, int *error) +{ + *error = 0; + cql_transform_close(m_transform); + m_transform = cql_transform_open_fname(fname); + return m_transform ? true : false; } int Yaz_cql2rpn::query_transform(const char *cql_query, - Z_RPNQuery **rpnquery, ODR o, - char **addinfop) + Z_RPNQuery **rpnquery, ODR o, + char **addinfop) { const char *addinfo = 0; if (!m_transform) - return -3; + return -3; CQL_parser cp = cql_parser_create(); int r = cql_parser_string(cp, cql_query); if (r) { - yaz_log(YLOG_LOG, "CQL Parse Error"); - r = 10; + r = 10; } else { - char rpn_buf[1024]; - r = cql_transform_buf(m_transform, cql_parser_result(cp), - rpn_buf, sizeof(rpn_buf)-1); - if (!r) - { - YAZ_PQF_Parser pp = yaz_pqf_create(); + char rpn_buf[10240]; + r = cql_transform_buf(m_transform, cql_parser_result(cp), + rpn_buf, sizeof(rpn_buf)-1); + if (!r) + { + YAZ_PQF_Parser pp = yaz_pqf_create(); - *rpnquery = yaz_pqf_parse(pp, o, rpn_buf); - if (!*rpnquery) - { - size_t off; - const char *pqf_msg; - int code = yaz_pqf_error(pp, &pqf_msg, &off); - yaz_log(YLOG_WARN, "PQF Parser Error %s (code %d)", - pqf_msg, code); - r = -1; - } - yaz_pqf_destroy(pp); - } - else - { - r = cql_transform_error(m_transform, &addinfo); - yaz_log(YLOG_LOG, "CQL Transform Error %d %s", r, - addinfo ? addinfo : ""); - } - } + *rpnquery = yaz_pqf_parse(pp, o, rpn_buf); + if (!*rpnquery) + { + size_t off; + const char *pqf_msg; + yaz_pqf_error(pp, &pqf_msg, &off); + r = -1; + } + yaz_pqf_destroy(pp); + } + else + { + r = cql_transform_error(m_transform, &addinfo); + } + } cql_parser_destroy(cp); if (addinfo) - *addinfop = odr_strdup(o, addinfo); + *addinfop = odr_strdup(o, addinfo); else - *addinfop = 0; + *addinfop = 0; return r; } +/* + * Local variables: + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +