mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-24 18:55:04 +08:00
Allow isolation tests to specify multiple setup blocks.
Each setup block is run as a single PQexec submission, and some statements such as VACUUM cannot be combined with others in such a block. Backpatch to 9.2. Kevin Grittner and Tom Lane
This commit is contained in:
parent
63f1ccd838
commit
c63f309cca
@ -49,8 +49,12 @@ subdirectory. A test specification consists of four parts, in this order:
|
||||
setup { <SQL> }
|
||||
|
||||
The given SQL block is executed once, in one session only, before running
|
||||
the test. Create any test tables or other required objects here. This
|
||||
part is optional.
|
||||
the test. Create any test tables or other required objects here. This
|
||||
part is optional. Multiple setup blocks are allowed if needed; each is
|
||||
run separately, in the given order. (The reason for allowing multiple
|
||||
setup blocks is that each block is run as a single PQexec submission,
|
||||
and some statements such as VACUUM cannot be combined with others in such
|
||||
a block.)
|
||||
|
||||
teardown { <SQL> }
|
||||
|
||||
|
@ -512,9 +512,9 @@ run_permutation(TestSpec * testspec, int nsteps, Step ** steps)
|
||||
printf("\n");
|
||||
|
||||
/* Perform setup */
|
||||
if (testspec->setupsql)
|
||||
for (i = 0; i < testspec->nsetupsqls; i++)
|
||||
{
|
||||
res = PQexec(conns[0], testspec->setupsql);
|
||||
res = PQexec(conns[0], testspec->setupsqls[i]);
|
||||
if (PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||
{
|
||||
fprintf(stderr, "setup failed: %s", PQerrorMessage(conns[0]));
|
||||
|
@ -42,7 +42,8 @@ typedef struct
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char *setupsql;
|
||||
char **setupsqls;
|
||||
int nsetupsqls;
|
||||
char *teardownsql;
|
||||
Session **sessions;
|
||||
int nsessions;
|
||||
|
@ -35,7 +35,9 @@ TestSpec parseresult; /* result of parsing is left here */
|
||||
} ptr_list;
|
||||
}
|
||||
|
||||
%type <ptr_list> setup_list
|
||||
%type <str> opt_setup opt_teardown
|
||||
%type <str> setup
|
||||
%type <ptr_list> step_list session_list permutation_list opt_permutation_list
|
||||
%type <ptr_list> string_list
|
||||
%type <session> session
|
||||
@ -48,12 +50,13 @@ TestSpec parseresult; /* result of parsing is left here */
|
||||
%%
|
||||
|
||||
TestSpec:
|
||||
opt_setup
|
||||
setup_list
|
||||
opt_teardown
|
||||
session_list
|
||||
opt_permutation_list
|
||||
{
|
||||
parseresult.setupsql = $1;
|
||||
parseresult.setupsqls = (char **) $1.elements;
|
||||
parseresult.nsetupsqls = $1.nelements;
|
||||
parseresult.teardownsql = $2;
|
||||
parseresult.sessions = (Session **) $3.elements;
|
||||
parseresult.nsessions = $3.nelements;
|
||||
@ -62,9 +65,28 @@ TestSpec:
|
||||
}
|
||||
;
|
||||
|
||||
setup_list:
|
||||
/* EMPTY */
|
||||
{
|
||||
$$.elements = NULL;
|
||||
$$.nelements = 0;
|
||||
}
|
||||
| setup_list setup
|
||||
{
|
||||
$$.elements = realloc($1.elements,
|
||||
($1.nelements + 1) * sizeof(void *));
|
||||
$$.elements[$1.nelements] = $2;
|
||||
$$.nelements = $1.nelements + 1;
|
||||
}
|
||||
;
|
||||
|
||||
opt_setup:
|
||||
/* EMPTY */ { $$ = NULL; }
|
||||
| SETUP sqlblock { $$ = $2; }
|
||||
| setup { $$ = $1; }
|
||||
;
|
||||
|
||||
setup:
|
||||
SETUP sqlblock { $$ = $2; }
|
||||
;
|
||||
|
||||
opt_teardown:
|
||||
|
Loading…
Reference in New Issue
Block a user