1 /*
2  * relation_access_tracking.h
3  *
4  * Function declartions for transaction access tracking.
5  *
6  * Copyright (c) Citus Data, Inc.
7  */
8 
9 #ifndef RELATION_ACCESS_TRACKING_H_
10 #define RELATION_ACCESS_TRACKING_H_
11 
12 #include "distributed/metadata_utility.h"
13 #include "distributed/multi_physical_planner.h" /* access Task struct */
14 #include "distributed/placement_connection.h"
15 
16 /* Config variables managed via guc.c */
17 extern bool EnforceForeignKeyRestrictions;
18 
19 
20 /* forward declare, to avoid dependency on ShardPlacement definition */
21 struct ShardPlacement;
22 
23 typedef enum RelationAccessMode
24 {
25 	RELATION_NOT_ACCESSED,
26 
27 	/* only valid for reference tables */
28 	RELATION_REFERENCE_ACCESSED,
29 
30 	/*
31 	 * Only valid for distributed tables and set
32 	 * if table is accessed in parallel mode
33 	 */
34 	RELATION_PARALLEL_ACCESSED
35 } RelationAccessMode;
36 
37 extern void AllocateRelationAccessHash(void);
38 extern void ResetRelationAccessHash(void);
39 extern void RecordRelationAccessIfNonDistTable(Oid relationId,
40 											   ShardPlacementAccessType accessType);
41 extern void RecordParallelRelationAccessForTaskList(List *taskList);
42 extern void RecordParallelSelectAccess(Oid relationId);
43 extern void RecordParallelModifyAccess(Oid relationId);
44 extern void RecordParallelDDLAccess(Oid relationId);
45 extern RelationAccessMode GetRelationDDLAccessMode(Oid relationId);
46 extern RelationAccessMode GetRelationDMLAccessMode(Oid relationId);
47 extern RelationAccessMode GetRelationSelectAccessMode(Oid relationId);
48 extern bool ShouldRecordRelationAccess(void);
49 extern bool ParallelQueryExecutedInTransaction(void);
50 
51 
52 #endif /* RELATION_ACCESS_TRACKING_H_ */
53