Esempio n. 1
0
static int rpn2solr_structure(solr_transform_t ct,
                              void (*pr)(const char *buf, void *client_data),
                              void *client_data,
                              Z_RPNStructure *q, int nested,
                              WRBUF w)
{
    if (q->which == Z_RPNStructure_simple)
    {
        if (q->u.simple->which != Z_Operand_APT)
            return YAZ_BIB1_RESULT_SET_UNSUPP_AS_A_SEARCH_TERM;
        else
            return rpn2solr_simple(ct, pr, client_data,
                                   q->u.simple->u.attributesPlusTerm, w, 0);
    }
    else
    {
        Z_Operator *op = q->u.complex->roperator;
        Z_AttributesPlusTerm *apt1, *apt2;
        int r;

        if (check_range(ct, q->u.complex, &apt1, &apt2))
            return rpn2solr_simple(ct, pr, client_data, apt1, w, apt2);
        if (nested)
            pr("(", client_data);

        r = rpn2solr_structure(ct, pr, client_data, q->u.complex->s1, 1, w);
        if (r)
            return r;
        switch (op->which)
        {
        case Z_Operator_and:
            pr(" AND ", client_data);
            break;
        case Z_Operator_or:
            pr(" OR ", client_data);
            break;
        case Z_Operator_and_not:
            pr(" AND NOT ", client_data);
            break;
        case Z_Operator_prox:
            return YAZ_BIB1_UNSUPP_SEARCH;
        }
        r = rpn2solr_structure(ct, pr, client_data, q->u.complex->s2, 1, w);
        if (nested)
            pr(")", client_data);
        return r;
    }
}
Esempio n. 2
0
int solr_transform_rpn2solr_stream_r(solr_transform_t ct,
                                     WRBUF addinfo,
                                     void (*pr)(const char *buf, void *client_data),
                                     void *client_data,
                                     Z_RPNQuery *q)
{
    int r = rpn2solr_structure(ct, pr, client_data, q->RPNStructure,
                               /* nested*/ 0, addinfo);
    if (!r)
        wrbuf_rewind(addinfo);
    return r;
}
Esempio n. 3
0
File: rpn2solr.c Progetto: nla/yaz
int solr_transform_rpn2solr_stream(solr_transform_t ct,
                                   void (*pr)(const char *buf, void *client_data),
                                   void *client_data,
                                   Z_RPNQuery *q)
{
    int r;
    WRBUF w = wrbuf_alloc();
    solr_transform_set_error(ct, 0, 0);
    r = rpn2solr_structure(ct, pr, client_data, q->RPNStructure, 0, w);
    wrbuf_destroy(w);
    return r;
}
Esempio n. 4
0
File: rpn2solr.c Progetto: nla/yaz
static int rpn2solr_structure(solr_transform_t ct,
                              void (*pr)(const char *buf, void *client_data),
                              void *client_data,
                              Z_RPNStructure *q, int nested,
                              WRBUF w)
{
    if (q->which == Z_RPNStructure_simple)
        return rpn2solr_simple(ct, pr, client_data, q->u.simple, w);
    else
    {
        Z_Operator *op = q->u.complex->roperator;
        int r;

        if (nested)
            pr("(", client_data);

        r = rpn2solr_structure(ct, pr, client_data, q->u.complex->s1, 1, w);
        if (r)
            return r;
        switch(op->which)
        {
        case  Z_Operator_and:
            pr(" AND ", client_data);
            break;
        case  Z_Operator_or:
            pr(" OR ", client_data);
            break;
        case  Z_Operator_and_not:
            pr(" AND NOT ", client_data);
            break;
        case  Z_Operator_prox:
            solr_transform_set_error(ct, YAZ_BIB1_UNSUPP_SEARCH, 0);
            return -1;
        }
        r = rpn2solr_structure(ct, pr, client_data, q->u.complex->s2, 1, w);
        if (nested)
            pr(")", client_data);
        return r;
    }
}