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,
|
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,12 +253,8 @@ 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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
|
|
||||||
|
|
||||||
/* 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);
|
||||||
|
|
||||||
#endif /* DISTRIBUTION_COLUMN_H */
|
#endif /* DISTRIBUTION_COLUMN_H */
|
||||||
|
|
Loading…
Reference in New Issue