148 Z_GDU *gdu = package.request().get();
150 if (gdu && gdu->which == Z_GDU_Z3950 && gdu->u.z3950->which ==
151 Z_APDU_searchRequest)
153 Z_APDU *apdu_req = gdu->u.z3950;
154 Z_SearchRequest *sr = gdu->u.z3950->u.searchRequest;
155 if (
reverse && sr->query && sr->query->which == Z_Query_type_1)
159 WRBUF cql = wrbuf_alloc();
161 int r =
m_cql2rpn.rpn2cql_transform(sr->query->u.type_1, cql,
166 odr.create_searchResponse(apdu_req, r, addinfo);
167 package.response() = f_apdu;
172 Z_External *ext = (Z_External *)
173 odr_malloc(odr,
sizeof(*ext));
174 ext->direct_reference = odr_oiddup(odr,
175 yaz_oid_userinfo_cql);
176 ext->indirect_reference = 0;
178 ext->which = Z_External_CQL;
179 ext->u.cql = odr_strdup(odr, wrbuf_cstr(cql));
181 sr->query->which = Z_Query_type_104;
182 sr->query->u.type_104 = ext;
184 package.request() = gdu;
188 if (!
reverse && sr->query && sr->query->which == Z_Query_type_104 &&
189 sr->query->u.type_104->which == Z_External_CQL)
192 Z_RPNQuery *rpnquery = 0;
195 int r =
m_cql2rpn.query_transform(sr->query->u.type_104->u.cql,
201 odr.create_searchResponse(
203 YAZ_BIB1_PERMANENT_SYSTEM_ERROR,
204 "cql_rpn: missing CQL to RPN configuration");
205 package.response() = f_apdu;
210 int error_code = yaz_diag_srw_to_bib1(r);
213 odr.create_searchResponse(apdu_req, error_code, addinfo);
214 package.response() = f_apdu;
220 sr->query->which = Z_Query_type_1;
221 sr->query->u.type_1 = rpnquery;
222 package.request() = gdu;