Query *index_get_query(Index *self, char *qstr) { int i; FieldInfos *fis; ensure_searcher_open(self); fis = self->ir->fis; for (i = fis->size - 1; i >= 0; i--) { hs_add(self->qp->all_fields, (char *)fis->fields[i]->name); } return qp_parse(self->qp, qstr); }
static void test_qp_prefix_query(TestCase *tc, void *data) { QParser *parser; Query *q; (void)data; parser = qp_new(letter_analyzer_new(true)); qp_add_field(parser, I("xx"), true, true); q = qp_parse(parser, "asdg*"); Aiequal(PREFIX_QUERY, q->type); q_deref(q); q = qp_parse(parser, "a?dg*"); Aiequal(WILD_CARD_QUERY, q->type); q_deref(q); q = qp_parse(parser, "a*dg*"); Aiequal(WILD_CARD_QUERY, q->type); q_deref(q); q = qp_parse(parser, "asdg*a"); Aiequal(WILD_CARD_QUERY, q->type); q_deref(q); qp_destroy(parser); }
/* * call-seq: * query_parser.parse(query_string) -> Query * * Parse a query string returning a Query object if parsing was successful. * Will raise a QueryParseException if unsuccessful. */ static VALUE frt_qp_parse(VALUE self, VALUE rstr) { const char *msg = NULL; volatile VALUE rq; GET_QP; rstr = rb_obj_as_string(rstr); TRY rq = frt_get_q(qp_parse(qp, RSTRING(rstr)->ptr)); break; default: msg = xcontext.msg; HANDLED(); XENDTRY if (msg) { rb_raise(cQueryParseException, msg); } return rq; }