/* * call-seq: * conn.get_copy_data( [ async = false ] ) -> String * * Return a string containing one row of data, +nil+ * if the copy is done, or +false+ if the call would * block (only possible if _async_ is true). * */ static VALUE pgconn_get_copy_data( argc, argv, self ) int argc; VALUE *argv; VALUE self; { VALUE async_in; VALUE error; VALUE result_str; int ret; int async; char *buffer; PGconn *conn = get_pgconn(self); if (rb_scan_args(argc, argv, "01", &async_in) == 0) async = 0; else async = (async_in == Qfalse || async_in == Qnil) ? 0 : 1; ret = PQgetCopyData(conn, &buffer, async); if(ret == -2) { // error error = rb_exc_new2(rb_ePGError, PQerrorMessage(conn)); rb_iv_set(error, "@connection", self); rb_exc_raise(error); } if(ret == -1) { // No data left return Qnil; } if(ret == 0) { // would block return Qfalse; } result_str = rb_tainted_str_new(buffer, ret); PQfreemem(buffer); return result_str; }