summaryrefslogtreecommitdiffstats
path: root/src/test/isolation/isolationtester.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/isolation/isolationtester.h')
-rw-r--r--src/test/isolation/isolationtester.h93
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 */