/* GetRangeTblKind returns rtekind of a RTE, be it an extended one or not. */ CitusRTEKind GetRangeTblKind(RangeTblEntry *rte) { CitusRTEKind rteKind = CITUS_RTE_RELATION /* invalid */; switch (rte->rtekind) { /* directly rtekind if it's not possibly an extended RTE */ case RTE_RELATION: case RTE_SUBQUERY: case RTE_JOIN: case RTE_VALUES: case RTE_CTE: { rteKind = (CitusRTEKind) rte->rtekind; break; } case RTE_FUNCTION: { /* * Extract extra data - correct even if a plain RTE_FUNCTION, not * an extended one, ExtractRangeTblExtraData handles that case * transparently. */ ExtractRangeTblExtraData(rte, &rteKind, NULL, NULL, NULL); break; } } return rteKind; }
/* * ModifyRangeTblExtraData sets the RTE extra data fields for the passed * fields, leaving the current values in place for the ones not specified. * * rteKind has to be specified, fragmentSchemaName, fragmentTableName, * tableIdList can be set to NULL/NIL respectively to leave the current values * in-place. */ void ModifyRangeTblExtraData(RangeTblEntry *rte, CitusRTEKind rteKind, char *fragmentSchemaName, char *fragmentTableName, List *tableIdList) { /* load existing values for the arguments not specifying a new value */ ExtractRangeTblExtraData(rte, NULL, fragmentSchemaName == NULL ? &fragmentSchemaName : NULL, fragmentTableName == NULL ? &fragmentTableName : NULL, tableIdList == NIL ? &tableIdList : NULL); SetRangeTblExtraData(rte, rteKind, fragmentSchemaName, fragmentTableName, tableIdList); }