>
> You really should be returning a value at the point since the function
> signature defines a return type. If not the function should be void,
> which it cannot be in this context since it is used for boolean tests
> elsewhere. The returns in question are all part of error blocks and
> should return false.
>
OK I got your point, I missed the part managing with CState, which is tested
after doCustom.
Another version of the patch is attached with this email.
I must be doing something wrong when I am running this script. It is
> still throwing errors. Would you mind showing me the pgbench command you
> used to run it?
>
> Of course, here it is the list of commands I use:
pgbench -i dbname (in case your database is called dbname)
pgbench -c 10 -t 10 -f transaction_file_name.data dbname (customer and
transaction numbers can also bet set as you want).
Regards,
--
Michael Paquier
NTT OSSC
--- postgresql-8.4.0.orig/contrib/pgbench/pgbench.c 2009-09-17 09:07:24.000000000 +0900
+++ postgresql-8.4.0/contrib/pgbench/pgbench.c 2009-09-18 13:24:33.000000000 +0900
@@ -120,6 +120,7 @@ typedef struct
} Variable;
#define MAX_FILES 128 /* max number of SQL script files allowed */
+#define SHELL_COMMAND_SIZE 256 /* maximum size allowed for shell command */
/*
* structures used in custom query mode
@@ -984,7 +985,47 @@ top:
st->listen = 1;
}
+ else if (pg_strcasecmp(argv[0], "shell") == 0)
+ {
+ int j,
+ retval,
+ retvalglob;
+ char commandLoc[SHELL_COMMAND_SIZE];
+
+ retval = snprintf(commandLoc,SHELL_COMMAND_SIZE-1,"%s",argv[1]);
+ if (retval < 0
+ || retval > SHELL_COMMAND_SIZE-1)
+ {
+ fprintf(stderr, "Error launching shell command: too many characters\n");
+ st->ecnt++;
+ return;
+ }
+ retvalglob = retval;
+ for (j = 2; j < argc; j++)
+ {
+ char *commandLoc2 = strdup(commandLoc);
+ retval = snprintf(commandLoc,SHELL_COMMAND_SIZE-1,"%s %s", commandLoc2, argv[j]);
+ retvalglob += retval;
+ if (retval < 0
+ || retvalglob > SHELL_COMMAND_SIZE-1)
+ {
+ fprintf(stderr, "Error launching shell command: too many characters\n");
+ free(commandLoc2);
+ st->ecnt++;
+ return;
+ }
+ free(commandLoc2);
+ }
+ retval = system(commandLoc);
+ if (retval < 0)
+ {
+ fprintf(stderr, "Error launching shell command: command not launched");
+ st->ecnt++;
+ return;
+ }
+ st->listen = 1;
+ }
goto top;
}
}
@@ -1280,6 +1321,14 @@ process_commands(char *buf)
fprintf(stderr, "%s: extra argument \"%s\" ignored\n",
my_commands->argv[0], my_commands->argv[j]);
}
+ else if (pg_strcasecmp(my_commands->argv[0], "shell") == 0)
+ {
+ if (my_commands->argc < 1)
+ {
+ fprintf(stderr, "%s: missing command\n", my_commands->argv[0]);
+ return NULL;
+ }
+ }
else
{
fprintf(stderr, "Invalid command %s\n", my_commands->argv[0]);
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers