]> granicus.if.org Git - postgresql/commitdiff
Adjust pgbench so it won't spit up on non-select queries returning
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 22 Jan 2007 02:17:30 +0000 (02:17 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 22 Jan 2007 02:17:30 +0000 (02:17 +0000)
tuples, which is entirely possible with custom scripts (consider
RETURNING, EXPLAIN, etc).

contrib/pgbench/pgbench.c

index 14cad08515e961b6ac0f9d6abb709bab6d33ee91..5a7dc32f9aadff0c117ec1fd0e1373012d2124d4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $PostgreSQL: pgsql/contrib/pgbench/pgbench.c,v 1.60 2007/01/10 01:18:40 ishii Exp $
+ * $PostgreSQL: pgsql/contrib/pgbench/pgbench.c,v 1.61 2007/01/22 02:17:30 tgl Exp $
  *
  * pgbench: a simple benchmark program for PostgreSQL
  * written by Tatsuo Ishii
@@ -243,17 +243,23 @@ discard_response(CState * state)
 
 /* check to see if the SQL result was good */
 static int
-check(CState * state, PGresult *res, int n, int good)
+check(CState *state, PGresult *res, int n)
 {
        CState     *st = &state[n];
 
-       if (res && PQresultStatus(res) != good)
+       switch (PQresultStatus(res))
        {
-               fprintf(stderr, "Client %d aborted in state %d: %s", n, st->state, PQerrorMessage(st->con));
-               remains--;                              /* I've aborted */
-               PQfinish(st->con);
-               st->con = NULL;
-               return (-1);
+               case PGRES_COMMAND_OK:
+               case PGRES_TUPLES_OK:
+                       /* OK */
+                       break;
+               default:
+                       fprintf(stderr, "Client %d aborted in state %d: %s",
+                                       n, st->state, PQerrorMessage(st->con));
+                       remains--;                              /* I've aborted */
+                       PQfinish(st->con);
+                       st->con = NULL;
+                       return (-1);
        }
        return (0);                                     /* OK */
 }
@@ -461,15 +467,10 @@ top:
                if (commands[st->state]->type == SQL_COMMAND)
                {
                        res = PQgetResult(st->con);
-                       if (pg_strncasecmp(commands[st->state]->argv[0], "select", 6) != 0)
-                       {
-                               if (check(state, res, n, PGRES_COMMAND_OK))
-                                       return;
-                       }
-                       else
+                       if (check(state, res, n))
                        {
-                               if (check(state, res, n, PGRES_TUPLES_OK))
-                                       return;
+                               PQclear(res);
+                               return;
                        }
                        PQclear(res);
                        discard_response(st);