mirror of
https://github.com/postgres/postgres.git
synced 2025-05-03 22:24:49 +03: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
fb18e4dd07
commit
8e39fd97f1
@ -50,7 +50,11 @@ setup { <SQL> }
|
|||||||
|
|
||||||
The given SQL block is executed once, in one session only, before running
|
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
|
the test. Create any test tables or other required objects here. This
|
||||||
part is optional.
|
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> }
|
teardown { <SQL> }
|
||||||
|
|
||||||
|
@ -512,9 +512,9 @@ run_permutation(TestSpec * testspec, int nsteps, Step ** steps)
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
/* Perform setup */
|
/* 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)
|
if (PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "setup failed: %s", PQerrorMessage(conns[0]));
|
fprintf(stderr, "setup failed: %s", PQerrorMessage(conns[0]));
|
||||||
|
@ -42,7 +42,8 @@ typedef struct
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
char *setupsql;
|
char **setupsqls;
|
||||||
|
int nsetupsqls;
|
||||||
char *teardownsql;
|
char *teardownsql;
|
||||||
Session **sessions;
|
Session **sessions;
|
||||||
int nsessions;
|
int nsessions;
|
||||||
|
@ -35,7 +35,9 @@ TestSpec parseresult; /* result of parsing is left here */
|
|||||||
} ptr_list;
|
} ptr_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
%type <ptr_list> setup_list
|
||||||
%type <str> opt_setup opt_teardown
|
%type <str> opt_setup opt_teardown
|
||||||
|
%type <str> setup
|
||||||
%type <ptr_list> step_list session_list permutation_list opt_permutation_list
|
%type <ptr_list> step_list session_list permutation_list opt_permutation_list
|
||||||
%type <ptr_list> string_list
|
%type <ptr_list> string_list
|
||||||
%type <session> session
|
%type <session> session
|
||||||
@ -48,12 +50,13 @@ TestSpec parseresult; /* result of parsing is left here */
|
|||||||
%%
|
%%
|
||||||
|
|
||||||
TestSpec:
|
TestSpec:
|
||||||
opt_setup
|
setup_list
|
||||||
opt_teardown
|
opt_teardown
|
||||||
session_list
|
session_list
|
||||||
opt_permutation_list
|
opt_permutation_list
|
||||||
{
|
{
|
||||||
parseresult.setupsql = $1;
|
parseresult.setupsqls = (char **) $1.elements;
|
||||||
|
parseresult.nsetupsqls = $1.nelements;
|
||||||
parseresult.teardownsql = $2;
|
parseresult.teardownsql = $2;
|
||||||
parseresult.sessions = (Session **) $3.elements;
|
parseresult.sessions = (Session **) $3.elements;
|
||||||
parseresult.nsessions = $3.nelements;
|
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:
|
opt_setup:
|
||||||
/* EMPTY */ { $$ = NULL; }
|
/* EMPTY */ { $$ = NULL; }
|
||||||
| SETUP sqlblock { $$ = $2; }
|
| setup { $$ = $1; }
|
||||||
|
;
|
||||||
|
|
||||||
|
setup:
|
||||||
|
SETUP sqlblock { $$ = $2; }
|
||||||
;
|
;
|
||||||
|
|
||||||
opt_teardown:
|
opt_teardown:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user