diff --git a/src/backend/distributed/commands/create_distributed_table.c b/src/backend/distributed/commands/create_distributed_table.c index b8c810d55..f66da0e86 100644 --- a/src/backend/distributed/commands/create_distributed_table.c +++ b/src/backend/distributed/commands/create_distributed_table.c @@ -67,7 +67,7 @@ static bool LocalTableEmpty(Oid tableId); static void ErrorIfNotSupportedConstraint(Relation relation, char distributionMethod, Var *distributionColumn); static void InsertPgDistPartition(Oid relationId, char distributionMethod, - Node *distributionKey, uint32 colocationId); + Var *distributionColumn, uint32 colocationId); static void CreateTruncateTrigger(Oid relationId); static uint32 ColocationId(int shardCount, int replicationFactor, Oid distributionColumnType); @@ -111,7 +111,6 @@ create_distributed_table(PG_FUNCTION_ARGS) Relation distributedRelation = NULL; Relation pgDistColocation = NULL; - Node *distributionKey = NULL; Var *distributionColumn = NULL; char *distributionColumnName = NULL; int distributionColumnType = 0; @@ -129,9 +128,8 @@ create_distributed_table(PG_FUNCTION_ARGS) /* get distribution column type */ distributionColumnName = text_to_cstring(distributionColumnText); distributedRelation = relation_open(relationId, AccessShareLock); - distributionKey = BuildDistributionKeyFromColumnName(distributedRelation, - distributionColumnName); - distributionColumn = (Var *) distributionKey; + distributionColumn = BuildDistributionKeyFromColumnName(distributedRelation, + distributionColumnName); distributionColumnType = distributionColumn->vartype; /* @@ -203,7 +201,6 @@ ConvertToDistributedTable(Oid relationId, text *distributionColumnText, char distributionMethod = LookupDistributionMethod(distributionMethodOid); char *distributionColumnName = text_to_cstring(distributionColumnText); - Node *distributionKey = NULL; Var *distributionColumn = NULL; /* @@ -256,12 +253,8 @@ ConvertToDistributedTable(Oid relationId, text *distributionColumnText, errhint("Empty your table before distributing it."))); } - distributionKey = BuildDistributionKeyFromColumnName(relation, - distributionColumnName); - - /* the distribution key should always be a Var for now */ - Assert(IsA(distributionKey, Var)); - distributionColumn = (Var *) distributionKey; + distributionColumn = BuildDistributionKeyFromColumnName(relation, + distributionColumnName); /* check for support function needed by specified partition method */ if (distributionMethod == DISTRIBUTE_BY_HASH) @@ -296,7 +289,8 @@ ConvertToDistributedTable(Oid relationId, text *distributionColumnText, ErrorIfNotSupportedConstraint(relation, distributionMethod, distributionColumn); - InsertPgDistPartition(relationId, distributionMethod, distributionKey, colocationId); + InsertPgDistPartition(relationId, distributionMethod, distributionColumn, + colocationId); relation_close(relation, NoLock); @@ -315,12 +309,12 @@ ConvertToDistributedTable(Oid relationId, text *distributionColumnText, * InsertPgDistPartition inserts a new tuple into pg_dist_partition. */ static void -InsertPgDistPartition(Oid relationId, char distributionMethod, Node *distributionKey, +InsertPgDistPartition(Oid relationId, char distributionMethod, Var *distributionColumn, uint32 colocationId) { Relation pgDistPartition = NULL; const char replicationModel = 'c'; - char *distributionKeyString = NULL; + char *distributionColumnString = NULL; HeapTuple newTuple = NULL; Datum newValues[Natts_pg_dist_partition]; @@ -329,7 +323,7 @@ InsertPgDistPartition(Oid relationId, char distributionMethod, Node *distributio /* open system catalog and insert new tuple */ pgDistPartition = heap_open(DistPartitionRelationId(), RowExclusiveLock); - distributionKeyString = nodeToString(distributionKey); + distributionColumnString = nodeToString((Node *) distributionColumn); /* form new tuple for pg_dist_partition */ memset(newValues, 0, sizeof(newValues)); @@ -340,7 +334,7 @@ InsertPgDistPartition(Oid relationId, char distributionMethod, Node *distributio newValues[Anum_pg_dist_partition_partmethod - 1] = CharGetDatum(distributionMethod); newValues[Anum_pg_dist_partition_partkey - 1] = - CStringGetTextDatum(distributionKeyString); + CStringGetTextDatum(distributionColumnString); newValues[Anum_pg_dist_partition_colocationid - 1] = colocationId; newValues[Anum_pg_dist_partition_repmodel - 1] = CharGetDatum(replicationModel); @@ -351,7 +345,7 @@ InsertPgDistPartition(Oid relationId, char distributionMethod, Node *distributio CatalogUpdateIndexes(pgDistPartition, newTuple); CitusInvalidateRelcacheByRelid(relationId); - RecordDistributedRelationDependencies(relationId, distributionKey); + RecordDistributedRelationDependencies(relationId, (Node *) distributionColumn); CommandCounterIncrement(); heap_close(pgDistPartition, NoLock); diff --git a/src/backend/distributed/utils/distribution_column.c b/src/backend/distributed/utils/distribution_column.c index 8a351c016..e5ecdce5f 100644 --- a/src/backend/distributed/utils/distribution_column.c +++ b/src/backend/distributed/utils/distribution_column.c @@ -57,7 +57,7 @@ column_name_to_column(PG_FUNCTION_ARGS) relation = relation_open(relationId, AccessShareLock); - column = (Var *) BuildDistributionKeyFromColumnName(relation, columnName); + column = BuildDistributionKeyFromColumnName(relation, columnName); columnNodeString = nodeToString(column); columnNodeText = cstring_to_text(columnNodeString); @@ -83,7 +83,7 @@ column_name_to_column_id(PG_FUNCTION_ARGS) relation = relation_open(distributedTableId, AccessExclusiveLock); - column = (Var *) BuildDistributionKeyFromColumnName(relation, columnName); + column = BuildDistributionKeyFromColumnName(relation, columnName); relation_close(relation, NoLock); @@ -121,12 +121,12 @@ column_to_column_name(PG_FUNCTION_ARGS) * specified column does not exist or is not suitable to be used as a * distribution column. */ -Node * +Var * BuildDistributionKeyFromColumnName(Relation distributedRelation, char *columnName) { HeapTuple columnTuple = NULL; Form_pg_attribute columnForm = NULL; - Var *column = NULL; + Var *distributionColumn = NULL; char *tableName = RelationGetRelationName(distributedRelation); /* it'd probably better to downcase identifiers consistent with SQL case folding */ @@ -153,12 +153,12 @@ BuildDistributionKeyFromColumnName(Relation distributedRelation, char *columnNam } /* build Var referencing only the chosen distribution column */ - column = makeVar(1, columnForm->attnum, columnForm->atttypid, - columnForm->atttypmod, columnForm->attcollation, 0); + distributionColumn = makeVar(1, columnForm->attnum, columnForm->atttypid, + columnForm->atttypmod, columnForm->attcollation, 0); ReleaseSysCache(columnTuple); - return (Node *) column; + return distributionColumn; } diff --git a/src/include/distributed/distribution_column.h b/src/include/distributed/distribution_column.h index d8b7aadc2..63d34cea6 100644 --- a/src/include/distributed/distribution_column.h +++ b/src/include/distributed/distribution_column.h @@ -19,8 +19,8 @@ /* Remaining metadata utility functions */ -extern Node * BuildDistributionKeyFromColumnName(Relation distributedRelation, - char *columnName); +extern Var * BuildDistributionKeyFromColumnName(Relation distributedRelation, + char *columnName); extern char * ColumnNameToColumn(Oid relationId, char *columnNodeString); #endif /* DISTRIBUTION_COLUMN_H */