MCPcopy Create free account
hub / github.com/apache/cloudberry / GetRelationPublicationActions

Function GetRelationPublicationActions

src/backend/utils/cache/relcache.c:5814–5893  ·  view source on GitHub ↗

* Get publication actions for the given relation. */

Source from the content-addressed store, hash-verified

5812 * Get publication actions for the given relation.
5813 */
5814struct PublicationActions *
5815GetRelationPublicationActions(Relation relation)
5816{
5817 List *puboids;
5818 ListCell *lc;
5819 MemoryContext oldcxt;
5820 PublicationActions *pubactions = palloc0(sizeof(PublicationActions));
5821
5822 /*
5823 * If not publishable, it publishes no actions. (pgoutput_change() will
5824 * ignore it.)
5825 */
5826 if (!is_publishable_relation(relation))
5827 return pubactions;
5828
5829 if (relation->rd_pubactions)
5830 return memcpy(pubactions, relation->rd_pubactions,
5831 sizeof(PublicationActions));
5832
5833 /* Fetch the publication membership info. */
5834 puboids = GetRelationPublications(RelationGetRelid(relation));
5835 if (relation->rd_rel->relispartition)
5836 {
5837 /* Add publications that the ancestors are in too. */
5838 List *ancestors = get_partition_ancestors(RelationGetRelid(relation));
5839 ListCell *lc;
5840
5841 foreach(lc, ancestors)
5842 {
5843 Oid ancestor = lfirst_oid(lc);
5844
5845 puboids = list_concat_unique_oid(puboids,
5846 GetRelationPublications(ancestor));
5847 }
5848 }
5849 puboids = list_concat_unique_oid(puboids, GetAllTablesPublications());
5850
5851 foreach(lc, puboids)
5852 {
5853 Oid pubid = lfirst_oid(lc);
5854 HeapTuple tup;
5855 Form_pg_publication pubform;
5856
5857 tup = SearchSysCache1(PUBLICATIONOID, ObjectIdGetDatum(pubid));
5858
5859 if (!HeapTupleIsValid(tup))
5860 elog(ERROR, "cache lookup failed for publication %u", pubid);
5861
5862 pubform = (Form_pg_publication) GETSTRUCT(tup);
5863
5864 pubactions->pubinsert |= pubform->pubinsert;
5865 pubactions->pubupdate |= pubform->pubupdate;
5866 pubactions->pubdelete |= pubform->pubdelete;
5867 pubactions->pubtruncate |= pubform->pubtruncate;
5868
5869 ReleaseSysCache(tup);
5870
5871 /*

Callers 1

CheckCmdReplicaIdentityFunction · 0.85

Calls 13

is_publishable_relationFunction · 0.85
GetRelationPublicationsFunction · 0.85
get_partition_ancestorsFunction · 0.85
list_concat_unique_oidFunction · 0.85
GetAllTablesPublicationsFunction · 0.85
SearchSysCache1Function · 0.85
ObjectIdGetDatumFunction · 0.85
ReleaseSysCacheFunction · 0.85
MemoryContextSwitchToFunction · 0.85
palloc0Function · 0.50
foreachFunction · 0.50
pfreeFunction · 0.50

Tested by

no test coverage detected