    /*
     *  call-seq:
     *     BooleanClause.new(query, occur = :should) -> BooleanClause
     *
     *  Create a new BooleanClause object, wrapping the query +query+. +occur+
     *  must be one of +:must+, +:should+ or +:must_not+.
     */
    static VALUE
    frt_bc_init(int argc, VALUE *argv, VALUE self)
    {
        BooleanClause *bc;
        VALUE rquery, roccur;
        unsigned int occur = BC_SHOULD;
        Query *sub_q;
        if (rb_scan_args(argc, argv, "11", &rquery, &roccur) == 2) {
            occur = frt_get_occur(roccur);
        }
        Data_Get_Struct(rquery, Query, sub_q);
        REF(sub_q);
        bc = bc_new(sub_q, occur);
        Frt_Wrap_Struct(self, &frt_bc_mark, &frt_bc_free, bc);
        object_add(bc, self);
        return self;
    }