mirror of https://github.com/citusdata/citus.git
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
parent
161093908e
commit
58ac477ffb
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue