PartitionColumns

multi-column-distribution
Jelte Fennema 2021-06-10 09:42:01 +02:00
parent 35061882b0
commit 3797092ae4
3 changed files with 31 additions and 11 deletions

View File

@ -5,7 +5,7 @@
- [ ] Add DistPartitionKeysOrError - [ ] Add DistPartitionKeysOrError
- [ ] Remove DistPartitionKeyOrError - [ ] Remove DistPartitionKeyOrError
- [ ] PartitionColumn() - [ ] PartitionColumn()
- [ ] Add PartitionColumns - [x] Add PartitionColumns
- [ ] Remove PartitionColumn - [ ] Remove PartitionColumn
- [ ] IsPartitionColumn() - [ ] IsPartitionColumn()
- [ ] PartitionColumnIndex(Var *targetVar, List *targetList) - [ ] PartitionColumnIndex(Var *targetVar, List *targetList)

View File

@ -1351,20 +1351,39 @@ RightColumnOrNULL(OpExpr *joinClause)
Var * Var *
PartitionColumn(Oid relationId, uint32 rangeTableId) PartitionColumn(Oid relationId, uint32 rangeTableId)
{ {
Var *partitionKey = DistPartitionKey(relationId); List *partitionColumnList = PartitionColumns(relationId, rangeTableId);
Var *partitionColumn = NULL; if (list_length(partitionColumnList) == 0)
/* short circuit for reference tables */
if (partitionKey == NULL)
{ {
return partitionColumn; return NULL;
} }
partitionColumn = partitionKey; return linitial(partitionColumnList);
partitionColumn->varno = rangeTableId; }
partitionColumn->varnosyn = rangeTableId;
return partitionColumn;
/*
* PartitionColumns builds the list of partition columns for the given
* relation, and sets the partition columns their range table references to the
* given table identifier.
*
* Note that reference tables do not have partition column. Thus, this function
* returns NIL when called for reference tables.
*/
List *
PartitionColumns(Oid relationId, uint32 rangeTableId)
{
List *partitionKeyList = DistPartitionKeys(relationId);
List *partitionColumnList = NULL;
Var *partitionKey = NULL;
foreach_ptr(partitionKey, partitionKeyList)
{
partitionKey->varno = rangeTableId;
partitionKey->varnosyn = rangeTableId;
partitionColumnList = lappend(partitionColumnList, partitionKey);
}
return partitionColumnList;
} }

View File

@ -104,6 +104,7 @@ extern OpExpr * DualPartitionJoinClause(List *applicableJoinClauses);
extern Var * LeftColumnOrNULL(OpExpr *joinClause); extern Var * LeftColumnOrNULL(OpExpr *joinClause);
extern Var * RightColumnOrNULL(OpExpr *joinClause); extern Var * RightColumnOrNULL(OpExpr *joinClause);
extern Var * PartitionColumn(Oid relationId, uint32 rangeTableId); extern Var * PartitionColumn(Oid relationId, uint32 rangeTableId);
extern List * PartitionColumns(Oid relationId, uint32 rangeTableId);
extern Var * DistPartitionKey(Oid relationId); extern Var * DistPartitionKey(Oid relationId);
extern List * DistPartitionKeys(Oid relationId); extern List * DistPartitionKeys(Oid relationId);
extern Var * DistPartitionKeyOrError(Oid relationId); extern Var * DistPartitionKeyOrError(Oid relationId);