Change return type of BuildDistributionKeyFromColumnName() to Var *

BuildDistributionKeyFromColumnName() always returns a Var pointer, so there is
no reason to return a Node pointer instead of a Var pointer.
pull/867/head
Metin Doslu 2016-10-18 09:43:58 +03:00
parent 161093908e
commit 58ac477ffb
3 changed files with 21 additions and 27 deletions

View File

@ -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,
distributionColumn = BuildDistributionKeyFromColumnName(distributedRelation,
distributionColumnName);
distributionColumn = (Var *) distributionKey;
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,13 +253,9 @@ ConvertToDistributedTable(Oid relationId, text *distributionColumnText,
errhint("Empty your table before distributing it.")));
}
distributionKey = BuildDistributionKeyFromColumnName(relation,
distributionColumn = BuildDistributionKeyFromColumnName(relation,
distributionColumnName);
/* the distribution key should always be a Var for now */
Assert(IsA(distributionKey, Var));
distributionColumn = (Var *) distributionKey;
/* 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);

View File

@ -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,
distributionColumn = makeVar(1, columnForm->attnum, columnForm->atttypid,
columnForm->atttypmod, columnForm->attcollation, 0);
ReleaseSysCache(columnTuple);
return (Node *) column;
return distributionColumn;
}

View File

@ -19,7 +19,7 @@
/* Remaining metadata utility functions */
extern Node * BuildDistributionKeyFromColumnName(Relation distributedRelation,
extern Var * BuildDistributionKeyFromColumnName(Relation distributedRelation,
char *columnName);
extern char * ColumnNameToColumn(Oid relationId, char *columnNodeString);