/*
* call-seq:
* conn.exec( sql )
*
* Sends SQL query request specified by _sql_ to the PostgreSQL.
* Returns a PGresult instance on success.
* On failure, it raises a PGError exception.
*/
static VALUE
pgconn_exec(obj, str)
VALUE obj, str;
{
PGconn *conn = get_pgconn(obj);
PGresult *result;
int status;
char *msg;
Check_Type(str, T_STRING);
result = PQexec(conn, STR2CSTR(str));
if (!result) {
rb_raise(rb_ePGError, PQerrorMessage(conn));
}
status = PQresultStatus(result);
switch (status) {
case PGRES_TUPLES_OK:
case PGRES_COPY_OUT:
case PGRES_COPY_IN:
case PGRES_EMPTY_QUERY:
case PGRES_COMMAND_OK: /* no data will be received */
return pgresult_new(result);
case PGRES_BAD_RESPONSE:
case PGRES_FATAL_ERROR:
case PGRES_NONFATAL_ERROR:
msg = PQerrorMessage(conn);
break;
default:
msg = "internal error : unknown result status.";
break;
}
PQclear(result);
rb_raise(rb_ePGError, msg);
}