Only read from pg_dist_partkeys column

pull/5193/head
Jelte Fennema 2021-06-09 12:15:18 +02:00
parent 3e96d3a736
commit bb347de6a5
1 changed files with 21 additions and 37 deletions

View File

@ -1238,18 +1238,16 @@ BuildCitusTableCacheEntry(Oid relationId)
cacheEntry->relationId = relationId; cacheEntry->relationId = relationId;
cacheEntry->partitionMethod = datumArray[Anum_pg_dist_partition_partmethod - 1]; cacheEntry->partitionMethod = datumArray[Anum_pg_dist_partition_partmethod - 1];
Datum partitionKeyDatum = datumArray[Anum_pg_dist_partition_partkey - 1];
bool partitionKeyIsNull = isNullArray[Anum_pg_dist_partition_partkey - 1];
Datum partitionKeysDatum = datumArray[Anum_pg_dist_partition_partkeys - 1]; Datum partitionKeysDatum = datumArray[Anum_pg_dist_partition_partkeys - 1];
bool partitionKeysIsNull = isNullArray[Anum_pg_dist_partition_partkeys - 1]; bool partitionKeysIsNull = isNullArray[Anum_pg_dist_partition_partkeys - 1];
/* note that for reference tables partitionKeyIsNull is true */ /* note that for reference tables partitionKeyIsNull is true */
if (!partitionKeyIsNull)
{
oldContext = MemoryContextSwitchTo(MetadataCacheMemoryContext);
Assert(!partitionKeysIsNull);
if (!partitionKeysIsNull) if (!partitionKeysIsNull)
{ {
Assert(!isNullArray[Anum_pg_dist_partition_partkey - 1]);
oldContext = MemoryContextSwitchTo(MetadataCacheMemoryContext);
ArrayType *partitionKeysArray = DatumGetArrayTypeP(partitionKeysDatum); ArrayType *partitionKeysArray = DatumGetArrayTypeP(partitionKeysDatum);
int partitionKeysCount = ArrayObjectCount(partitionKeysArray); int partitionKeysCount = ArrayObjectCount(partitionKeysArray);
Datum *partitionKeysArrayDatum = DeconstructArrayObject(partitionKeysArray); Datum *partitionKeysArrayDatum = DeconstructArrayObject(partitionKeysArray);
@ -1269,28 +1267,14 @@ BuildCitusTableCacheEntry(Oid relationId)
lappend(cacheEntry->partitionColumns, partitionNode); lappend(cacheEntry->partitionColumns, partitionNode);
} }
/* cacheEntry->partitionColumn = linitial(cacheEntry->partitionColumns);
* TODO: uncomment once fixed cacheEntry->partitionKeyString = linitial(cacheEntry->partitionKeyStrings);
* cacheEntry->partitionColumn = linitial(cacheEntry->partitionColumns);
* cacheEntry->partitionKeyString = linitial(cacheEntry->partitionKeyStrings);
*/
}
/* get the string representation of the partition column Var */
cacheEntry->partitionKeyString = TextDatumGetCString(partitionKeyDatum);
/* convert the string to a Node and ensure it is a Var */
Node *partitionNode = stringToNode(cacheEntry->partitionKeyString);
Assert(IsA(partitionNode, Var));
cacheEntry->partitionColumn = (Var *) partitionNode;
MemoryContextSwitchTo(oldContext); MemoryContextSwitchTo(oldContext);
} }
else else
{ {
Assert(partitionKeysIsNull); Assert(isNullArray[Anum_pg_dist_partition_partkey - 1]);
cacheEntry->partitionKeyString = NULL; cacheEntry->partitionKeyString = NULL;
} }