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