/*
* call-seq:
* conn.getline()
*
* Reads a line from the backend server into internal buffer.
* Returns +nil+ for EOF, +0+ for success, +1+ for buffer overflowed.
* You need to ensure single "." from backend to confirm transmission completion.
* The sample program <tt>psql.rb</tt> (see source for postgres) treats this copy protocol right.
*/
static VALUE
pgconn_getline(obj)
VALUE obj;
{
PGconn *conn = get_pgconn(obj);
VALUE str;
long size = BUFSIZ;
long bytes = 0;
int ret;
str = rb_tainted_str_new(0, size);
for (;;) {
ret = PQgetline(conn, RSTRING_PTR(str) + bytes, size - bytes);
switch (ret) {
case EOF:
return Qnil;
case 0:
rb_str_resize(str, strlen(StringValuePtr(str)));
return str;
}
bytes += BUFSIZ;
size += BUFSIZ;
rb_str_resize(str, size);
}
return Qnil;
}