/*
 * call-seq:
 *    conn.lo_open( oid, [mode] ) -> Fixnum
 *
 * Open a large object of _oid_. Returns a large object descriptor 
 * instance on success. The _mode_ argument specifies the mode for
 * the opened large object,which is either +INV_READ+, or +INV_WRITE+.
 *
 * If _mode_ is omitted, the default is +INV_READ+.
 */
static VALUE
pgconn_loopen(argc, argv, self)
    int argc;
    VALUE *argv;
    VALUE self;
{
    Oid lo_oid;
    int fd, mode;
    VALUE nmode, selfid;
    PGconn *conn = get_pgconn(self);

    rb_scan_args(argc, argv, "11", &selfid, &nmode);
    lo_oid = NUM2INT(selfid);
        if(NIL_P(nmode))
        mode = INV_READ;
    else
                mode = NUM2INT(nmode);

    if((fd = lo_open(conn, lo_oid, mode)) < 0) {
        rb_raise(rb_ePGError, "can't open large object");
    }
    return INT2FIX(fd);
}