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, static void ErrorIfNotSupportedConstraint(Relation relation, char distributionMethod,
Var *distributionColumn); Var *distributionColumn);
static void InsertPgDistPartition(Oid relationId, char distributionMethod, static void InsertPgDistPartition(Oid relationId, char distributionMethod,
Node *distributionKey, uint32 colocationId); Var *distributionColumn, uint32 colocationId);
static void CreateTruncateTrigger(Oid relationId); static void CreateTruncateTrigger(Oid relationId);
static uint32 ColocationId(int shardCount, int replicationFactor, static uint32 ColocationId(int shardCount, int replicationFactor,
Oid distributionColumnType); Oid distributionColumnType);
@ -111,7 +111,6 @@ create_distributed_table(PG_FUNCTION_ARGS)
Relation distributedRelation = NULL; Relation distributedRelation = NULL;
Relation pgDistColocation = NULL; Relation pgDistColocation = NULL;
Node *distributionKey = NULL;
Var *distributionColumn = NULL; Var *distributionColumn = NULL;
char *distributionColumnName = NULL; char *distributionColumnName = NULL;
int distributionColumnType = 0; int distributionColumnType = 0;
@ -129,9 +128,8 @@ create_distributed_table(PG_FUNCTION_ARGS)
/* get distribution column type */ /* get distribution column type */
distributionColumnName = text_to_cstring(distributionColumnText); distributionColumnName = text_to_cstring(distributionColumnText);
distributedRelation = relation_open(relationId, AccessShareLock); distributedRelation = relation_open(relationId, AccessShareLock);
distributionKey = BuildDistributionKeyFromColumnName(distributedRelation, distributionColumn = BuildDistributionKeyFromColumnName(distributedRelation,
distributionColumnName); distributionColumnName);
distributionColumn = (Var *) distributionKey;
distributionColumnType = distributionColumn->vartype; distributionColumnType = distributionColumn->vartype;
/* /*
@ -203,7 +201,6 @@ ConvertToDistributedTable(Oid relationId, text *distributionColumnText,
char distributionMethod = LookupDistributionMethod(distributionMethodOid); char distributionMethod = LookupDistributionMethod(distributionMethodOid);
char *distributionColumnName = text_to_cstring(distributionColumnText); char *distributionColumnName = text_to_cstring(distributionColumnText);
Node *distributionKey = NULL;
Var *distributionColumn = NULL; Var *distributionColumn = NULL;
/* /*
@ -256,13 +253,9 @@ ConvertToDistributedTable(Oid relationId, text *distributionColumnText,
errhint("Empty your table before distributing it."))); errhint("Empty your table before distributing it.")));
} }
distributionKey = BuildDistributionKeyFromColumnName(relation, distributionColumn = BuildDistributionKeyFromColumnName(relation,
distributionColumnName); 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 */ /* check for support function needed by specified partition method */
if (distributionMethod == DISTRIBUTE_BY_HASH) if (distributionMethod == DISTRIBUTE_BY_HASH)
{ {
@ -296,7 +289,8 @@ ConvertToDistributedTable(Oid relationId, text *distributionColumnText,
ErrorIfNotSupportedConstraint(relation, distributionMethod, distributionColumn); ErrorIfNotSupportedConstraint(relation, distributionMethod, distributionColumn);
InsertPgDistPartition(relationId, distributionMethod, distributionKey, colocationId); InsertPgDistPartition(relationId, distributionMethod, distributionColumn,
colocationId);
relation_close(relation, NoLock); relation_close(relation, NoLock);
@ -315,12 +309,12 @@ ConvertToDistributedTable(Oid relationId, text *distributionColumnText,
* InsertPgDistPartition inserts a new tuple into pg_dist_partition. * InsertPgDistPartition inserts a new tuple into pg_dist_partition.
*/ */
static void static void
InsertPgDistPartition(Oid relationId, char distributionMethod, Node *distributionKey, InsertPgDistPartition(Oid relationId, char distributionMethod, Var *distributionColumn,
uint32 colocationId) uint32 colocationId)
{ {
Relation pgDistPartition = NULL; Relation pgDistPartition = NULL;
const char replicationModel = 'c'; const char replicationModel = 'c';
char *distributionKeyString = NULL; char *distributionColumnString = NULL;
HeapTuple newTuple = NULL; HeapTuple newTuple = NULL;
Datum newValues[Natts_pg_dist_partition]; Datum newValues[Natts_pg_dist_partition];
@ -329,7 +323,7 @@ InsertPgDistPartition(Oid relationId, char distributionMethod, Node *distributio
/* open system catalog and insert new tuple */ /* open system catalog and insert new tuple */
pgDistPartition = heap_open(DistPartitionRelationId(), RowExclusiveLock); pgDistPartition = heap_open(DistPartitionRelationId(), RowExclusiveLock);
distributionKeyString = nodeToString(distributionKey); distributionColumnString = nodeToString((Node *) distributionColumn);
/* form new tuple for pg_dist_partition */ /* form new tuple for pg_dist_partition */
memset(newValues, 0, sizeof(newValues)); memset(newValues, 0, sizeof(newValues));
@ -340,7 +334,7 @@ InsertPgDistPartition(Oid relationId, char distributionMethod, Node *distributio
newValues[Anum_pg_dist_partition_partmethod - 1] = newValues[Anum_pg_dist_partition_partmethod - 1] =
CharGetDatum(distributionMethod); CharGetDatum(distributionMethod);
newValues[Anum_pg_dist_partition_partkey - 1] = newValues[Anum_pg_dist_partition_partkey - 1] =
CStringGetTextDatum(distributionKeyString); CStringGetTextDatum(distributionColumnString);
newValues[Anum_pg_dist_partition_colocationid - 1] = colocationId; newValues[Anum_pg_dist_partition_colocationid - 1] = colocationId;
newValues[Anum_pg_dist_partition_repmodel - 1] = CharGetDatum(replicationModel); newValues[Anum_pg_dist_partition_repmodel - 1] = CharGetDatum(replicationModel);
@ -351,7 +345,7 @@ InsertPgDistPartition(Oid relationId, char distributionMethod, Node *distributio
CatalogUpdateIndexes(pgDistPartition, newTuple); CatalogUpdateIndexes(pgDistPartition, newTuple);
CitusInvalidateRelcacheByRelid(relationId); CitusInvalidateRelcacheByRelid(relationId);
RecordDistributedRelationDependencies(relationId, distributionKey); RecordDistributedRelationDependencies(relationId, (Node *) distributionColumn);
CommandCounterIncrement(); CommandCounterIncrement();
heap_close(pgDistPartition, NoLock); heap_close(pgDistPartition, NoLock);

View File

@ -57,7 +57,7 @@ column_name_to_column(PG_FUNCTION_ARGS)
relation = relation_open(relationId, AccessShareLock); relation = relation_open(relationId, AccessShareLock);
column = (Var *) BuildDistributionKeyFromColumnName(relation, columnName); column = BuildDistributionKeyFromColumnName(relation, columnName);
columnNodeString = nodeToString(column); columnNodeString = nodeToString(column);
columnNodeText = cstring_to_text(columnNodeString); columnNodeText = cstring_to_text(columnNodeString);
@ -83,7 +83,7 @@ column_name_to_column_id(PG_FUNCTION_ARGS)
relation = relation_open(distributedTableId, AccessExclusiveLock); relation = relation_open(distributedTableId, AccessExclusiveLock);
column = (Var *) BuildDistributionKeyFromColumnName(relation, columnName); column = BuildDistributionKeyFromColumnName(relation, columnName);
relation_close(relation, NoLock); 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 * specified column does not exist or is not suitable to be used as a
* distribution column. * distribution column.
*/ */
Node * Var *
BuildDistributionKeyFromColumnName(Relation distributedRelation, char *columnName) BuildDistributionKeyFromColumnName(Relation distributedRelation, char *columnName)
{ {
HeapTuple columnTuple = NULL; HeapTuple columnTuple = NULL;
Form_pg_attribute columnForm = NULL; Form_pg_attribute columnForm = NULL;
Var *column = NULL; Var *distributionColumn = NULL;
char *tableName = RelationGetRelationName(distributedRelation); char *tableName = RelationGetRelationName(distributedRelation);
/* it'd probably better to downcase identifiers consistent with SQL case folding */ /* 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 */ /* 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); columnForm->atttypmod, columnForm->attcollation, 0);
ReleaseSysCache(columnTuple); ReleaseSysCache(columnTuple);
return (Node *) column; return distributionColumn;
} }

View File

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