/* * call-seq: * conn.lastval -> Integer * * Returns the sequence value returned by the last call to the PostgreSQL function <tt>nextval(sequence_name)</tt>. Equivalent to <tt>conn.query('select lastval()').first.first</tt>. * * This functionality is only available with PostgreSQL 8.1 and newer. * See the PostgreSQL documentation on lastval[http://www.postgresql.org/docs/current/interactive/functions-sequence.html] for more information. */ static VALUE pgconn_lastval(obj) VALUE obj; { PGconn *conn = get_pgconn(obj); PGresult *result; VALUE lastval, error; result = PQexec(conn, "select lastval()"); if (!result) rb_raise(rb_ePGError, PQerrorMessage(conn)); switch (PQresultStatus(result)) { case PGRES_TUPLES_OK: lastval = rb_cstr2inum(PQgetvalue(result, 0, 0), 10); PQclear(result); return lastval; case PGRES_BAD_RESPONSE: case PGRES_FATAL_ERROR: case PGRES_NONFATAL_ERROR: error = rb_str_new2(PQresultErrorMessage(result)); PQclear(result); rb_raise(rb_ePGError, StringValuePtr(error)); default: PQclear(result); rb_raise(rb_ePGError, "unknown lastval"); } }