MODULE = Search::Xapian  		PACKAGE = Search::Xapian::Query		

PROTOTYPES: ENABLE

Query *
new1(term);
    string	term
    CODE:
        RETVAL = new Query(term);
    OUTPUT:
        RETVAL

Query *
new2sv(op, subq);
    int		op
    string	subq
    CODE:
        RETVAL = new Query( (Query::op) op, subq );
    OUTPUT:
        RETVAL

Query *
new2obj(op, subq);
    int		op
    Query *	subq
    CODE:
        RETVAL = new Query( (Query::op) op, *subq );
    OUTPUT:
        RETVAL

Query *
newXsv(op, ...);
    int		op
    PREINIT:
        vector<string> terms;
    CODE:
        for( int i = 1; i <= items; i++ ) {
            SV *sv = ST (i);
	    if( SvOK(sv) && SvPOK(sv) ) {
		string term = SvPV_nolen(sv);
	        terms.push_back(term);
	    }
        }
	try {
            RETVAL = new Query( (Query::op) op, terms.begin(), terms.end() );
        }
        catch (const Error &error) {
            croak( "Exception: %s", error.get_msg().c_str() );
        }
    OUTPUT:
        RETVAL

Query *
newXobj(op, ...);
    int		op
    PREINIT:
        vector<Query> queries;
    CODE:
        for( int i = 1; i <= items; i++ ) {
            SV *sv = ST (i);
	    if( sv_isobject(sv) ) {
		Query *query = (Query*) SvIV((SV*) SvRV(sv));
	        queries.push_back(*query);
	    }
        }
	try {
            RETVAL = new Query( (Query::op) op, queries.begin(), queries.end() );
        }
        catch (const Error &error) {
            croak( "Exception: %s", error.get_msg().c_str() );
        }
    OUTPUT:
        RETVAL

termcount
Query::get_length()

TermIterator *
Query::get_terms_begin()
    CODE:
        RETVAL = new TermIterator();
        *RETVAL = THIS->get_terms_begin();
    OUTPUT:
        RETVAL

TermIterator *
Query::get_terms_end()
    CODE:
        RETVAL = new TermIterator();
        *RETVAL = THIS->get_terms_begin();
    OUTPUT:
        RETVAL

bool
Query::empty()

bool
Query::is_empty()

string
Query::get_description()

void
Query::DESTROY()