1 /*------------------------------------------------------------------------- 2 * 3 * shardinterval_utils.h 4 * 5 * Declarations for public utility functions related to shard intervals. 6 * 7 * Copyright (c) Citus Data, Inc. 8 * 9 *------------------------------------------------------------------------- 10 */ 11 12 #ifndef SHARDINTERVAL_UTILS_H_ 13 #define SHARDINTERVAL_UTILS_H_ 14 15 #include "distributed/metadata_utility.h" 16 #include "distributed/metadata_cache.h" 17 #include "nodes/primnodes.h" 18 19 #define INVALID_SHARD_INDEX -1 20 21 /* OperatorCacheEntry contains information for each element in OperatorCache */ 22 typedef struct ShardIntervalCompareFunctionCacheEntry 23 { 24 Var *partitionColumn; 25 char partitionMethod; 26 FmgrInfo *functionInfo; 27 } ShardIntervalCompareFunctionCacheEntry; 28 29 /* 30 * SortShardIntervalContext is the context parameter in SortShardIntervalArray 31 */ 32 typedef struct SortShardIntervalContext 33 { 34 FmgrInfo *comparisonFunction; 35 Oid collation; 36 } SortShardIntervalContext; 37 38 extern ShardInterval ** SortShardIntervalArray(ShardInterval **shardIntervalArray, int 39 shardCount, Oid collation, 40 FmgrInfo *shardIntervalSortCompareFunction); 41 extern int CompareShardIntervals(const void *leftElement, const void *rightElement, 42 SortShardIntervalContext *sortContext); 43 extern int CompareShardIntervalsById(const void *leftElement, const void *rightElement); 44 extern int CompareShardPlacementsByShardId(const void *leftElement, 45 const void *rightElement); 46 extern int CompareRelationShards(const void *leftElement, 47 const void *rightElement); 48 extern int ShardIndex(ShardInterval *shardInterval); 49 extern int CalculateUniformHashRangeIndex(int hashedValue, int shardCount); 50 extern ShardInterval * FindShardInterval(Datum partitionColumnValue, 51 CitusTableCacheEntry *cacheEntry); 52 extern int FindShardIntervalIndex(Datum searchedValue, CitusTableCacheEntry *cacheEntry); 53 extern int SearchCachedShardInterval(Datum partitionColumnValue, 54 ShardInterval **shardIntervalCache, 55 int shardCount, Oid shardIntervalCollation, 56 FmgrInfo *compareFunction); 57 extern bool SingleReplicatedTable(Oid relationId); 58 59 60 #endif /* SHARDINTERVAL_UTILS_H_ */ 61