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