Add citus.copy_format OIDs to metadata cache

pull/1853/head
Marco Slot 2017-12-04 18:49:43 +01:00
parent 66f9f1d6cd
commit cbbd418af2
2 changed files with 51 additions and 7 deletions

View File

@ -122,6 +122,8 @@ typedef struct MetadataCacheData
Oid extraDataContainerFuncId; Oid extraDataContainerFuncId;
Oid workerHashFunctionId; Oid workerHashFunctionId;
Oid extensionOwner; Oid extensionOwner;
Oid binaryCopyFormatId;
Oid textCopyFormatId;
Oid primaryNodeRoleId; Oid primaryNodeRoleId;
Oid secondaryNodeRoleId; Oid secondaryNodeRoleId;
Oid unavailableNodeRoleId; Oid unavailableNodeRoleId;
@ -197,6 +199,7 @@ static void CachedRelationLookup(const char *relationName, Oid *cachedOid);
static ShardPlacement * ResolveGroupShardPlacement( static ShardPlacement * ResolveGroupShardPlacement(
GroupShardPlacement *groupShardPlacement, ShardCacheEntry *shardEntry); GroupShardPlacement *groupShardPlacement, ShardCacheEntry *shardEntry);
static WorkerNode * LookupNodeForGroup(uint32 groupid); static WorkerNode * LookupNodeForGroup(uint32 groupid);
static Oid LookupEnumValueId(Oid typeId, char *valueName);
/* exports for SQL callable functions */ /* exports for SQL callable functions */
@ -1872,6 +1875,34 @@ CitusCopyFormatTypeId(void)
} }
/* return oid of the 'binary' citus_copy_format enum value */
Oid
BinaryCopyFormatId(void)
{
if (MetadataCache.binaryCopyFormatId == InvalidOid)
{
Oid copyFormatTypeId = CitusCopyFormatTypeId();
MetadataCache.binaryCopyFormatId = LookupEnumValueId(copyFormatTypeId, "binary");
}
return MetadataCache.binaryCopyFormatId;
}
/* return oid of the 'text' citus_copy_format enum value */
Oid
TextCopyFormatId(void)
{
if (MetadataCache.textCopyFormatId == InvalidOid)
{
Oid copyFormatTypeId = CitusCopyFormatTypeId();
MetadataCache.textCopyFormatId = LookupEnumValueId(copyFormatTypeId, "text");
}
return MetadataCache.textCopyFormatId;
}
/* return oid of the citus_extradata_container(internal) function */ /* return oid of the citus_extradata_container(internal) function */
Oid Oid
CitusExtraDataContainerFuncId(void) CitusExtraDataContainerFuncId(void)
@ -2040,17 +2071,27 @@ LookupNodeRoleValueId(char *valueName)
} }
else else
{ {
Datum nodeRoleIdDatum = ObjectIdGetDatum(nodeRoleTypId); Oid valueId = LookupEnumValueId(nodeRoleTypId, valueName);
Datum valueDatum = CStringGetDatum(valueName);
Datum valueIdDatum = DirectFunctionCall2(enum_in, valueDatum, nodeRoleIdDatum);
Oid valueId = DatumGetObjectId(valueIdDatum);
return valueId; return valueId;
} }
} }
/*
* LookupEnumValueId looks up the OID of an enum value.
*/
static Oid
LookupEnumValueId(Oid typeId, char *valueName)
{
Datum typeIdDatum = ObjectIdGetDatum(typeId);
Datum valueDatum = CStringGetDatum(valueName);
Datum valueIdDatum = DirectFunctionCall2(enum_in, valueDatum, typeIdDatum);
Oid valueId = DatumGetObjectId(valueIdDatum);
return valueId;
}
/* return the Oid of the 'primary' nodeRole enum value */ /* return the Oid of the 'primary' nodeRole enum value */
Oid Oid
PrimaryNodeRoleId(void) PrimaryNodeRoleId(void)

View File

@ -131,10 +131,13 @@ extern Oid CitusReadIntermediateResultFuncId(void);
extern Oid CitusExtraDataContainerFuncId(void); extern Oid CitusExtraDataContainerFuncId(void);
extern Oid CitusWorkerHashFunctionId(void); extern Oid CitusWorkerHashFunctionId(void);
/* nodeRole enum oids */ /* enum oids */
extern Oid PrimaryNodeRoleId(void); extern Oid PrimaryNodeRoleId(void);
extern Oid SecondaryNodeRoleId(void); extern Oid SecondaryNodeRoleId(void);
extern Oid UnavailableNodeRoleId(void); extern Oid UnavailableNodeRoleId(void);
extern Oid CitusCopyFormatTypeId(void);
extern Oid TextCopyFormatId(void);
extern Oid BinaryCopyFormatId(void);
/* user related functions */ /* user related functions */
extern Oid CitusExtensionOwner(void); extern Oid CitusExtensionOwner(void);