diff options
Diffstat (limited to 'src/test/isolation/isolationtester.h')
-rw-r--r-- | src/test/isolation/isolationtester.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/test/isolation/isolationtester.h b/src/test/isolation/isolationtester.h new file mode 100644 index 0000000..596041d --- /dev/null +++ b/src/test/isolation/isolationtester.h @@ -0,0 +1,93 @@ +/*------------------------------------------------------------------------- + * + * isolationtester.h + * include file for isolation tests + * + * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * src/test/isolation/isolationtester.h + * + *------------------------------------------------------------------------- + */ +#ifndef ISOLATIONTESTER_H +#define ISOLATIONTESTER_H + +/* + * The structs declared here are used in the output of specparse.y. + * Except where noted, all fields are set in the grammar and not + * changed thereafter. + */ +typedef struct Step Step; + +typedef struct +{ + char *name; + char *setupsql; + char *teardownsql; + Step **steps; + int nsteps; +} Session; + +struct Step +{ + char *name; + char *sql; + /* These fields are filled by check_testspec(): */ + int session; /* identifies owning session */ + bool used; /* has step been used in a permutation? */ +}; + +typedef enum +{ + PSB_ONCE, /* force step to wait once */ + PSB_OTHER_STEP, /* wait for another step to complete first */ + PSB_NUM_NOTICES /* wait for N notices from another session */ +} PermutationStepBlockerType; + +typedef struct +{ + char *stepname; + PermutationStepBlockerType blocktype; + int num_notices; /* only used for PSB_NUM_NOTICES */ + /* These fields are filled by check_testspec(): */ + Step *step; /* link to referenced step (if any) */ + /* These fields are runtime workspace: */ + int target_notices; /* total notices needed from other session */ +} PermutationStepBlocker; + +typedef struct +{ + char *name; /* name of referenced Step */ + PermutationStepBlocker **blockers; + int nblockers; + /* These fields are filled by check_testspec(): */ + Step *step; /* link to referenced Step */ +} PermutationStep; + +typedef struct +{ + int nsteps; + PermutationStep **steps; +} Permutation; + +typedef struct +{ + char **setupsqls; + int nsetupsqls; + char *teardownsql; + Session **sessions; + int nsessions; + Permutation **permutations; + int npermutations; +} TestSpec; + +extern TestSpec parseresult; + +extern int spec_yyparse(void); + +extern int spec_yylex(void); +extern void spec_yyerror(const char *str); + +#endif /* ISOLATIONTESTER_H */ |