static int compare(cql_transform_t ct, const char *pqf, const char *cql) { int ret = 0; ODR odr = odr_createmem(ODR_ENCODE); WRBUF w = wrbuf_alloc(); Z_RPNQuery *q = p_query_rpn(odr, pqf); if (q) { int r = cql_transform_rpn2cql_wrbuf(ct, w, q); if (r != 0) { /* transform error */ yaz_log(YLOG_LOG, "%s -> Error %d", pqf, r); if (!cql) /* also expected error? */ ret = 1; } else if (r == 0) { yaz_log(YLOG_LOG, "%s -> %s", pqf, wrbuf_cstr(w)); if (cql && !strcmp(wrbuf_cstr(w), cql)) { ret = 1; } } } wrbuf_destroy(w); odr_destroy(odr); return ret; }
static int compare2(cql_transform_t ct, const char *pqf, const char *cql, int expected_error) { int ret = 0; ODR odr = odr_createmem(ODR_ENCODE); WRBUF w = wrbuf_alloc(); Z_RPNQuery *q = p_query_rpn(odr, pqf); if (q) { int r = cql_transform_rpn2cql_wrbuf(ct, w, q); if (r != 0) { const char *addinfo = 0; int err = cql_transform_error(ct, &addinfo); /* transform error */ yaz_log(YLOG_LOG, "%s -> Error %d", pqf, r); if (err == 0) ; else if (err == expected_error) { if (addinfo && cql && !strcmp(addinfo, cql)) ret = 1; else if (!addinfo && !cql) ret = 1; } } else if (r == 0) { yaz_log(YLOG_LOG, "%s -> %s", pqf, wrbuf_cstr(w)); if (!expected_error) ret = 1; else if (cql && !strcmp(wrbuf_cstr(w), cql)) { ret = 1; } else { yaz_log(YLOG_WARN, " expected: %s", cql ? cql : "null"); yaz_log(YLOG_WARN, " got: %s", wrbuf_cstr(w)); } } } wrbuf_destroy(w); odr_destroy(odr); return ret; }