mirror of
https://github.com/postgres/postgres.git
synced 2025-06-17 17:02:08 +03:00
Disallow finite partition bound following earlier UNBOUNDED column.
Amit Langote, per an observation by me. Discussion: http://postgr.es/m/CA+TgmoYWnV2GMnYLG-Czsix-E1WGAbo4D+0tx7t9NdfYBDMFsA@mail.gmail.com
This commit is contained in:
@ -3358,6 +3358,7 @@ transformPartitionBound(ParseState *pstate, Relation parent, Node *bound)
|
||||
int i,
|
||||
j;
|
||||
char *colname;
|
||||
bool seen_unbounded;
|
||||
|
||||
if (spec->strategy != PARTITION_STRATEGY_RANGE)
|
||||
ereport(ERROR,
|
||||
@ -3376,6 +3377,39 @@ transformPartitionBound(ParseState *pstate, Relation parent, Node *bound)
|
||||
(errcode(ERRCODE_INVALID_TABLE_DEFINITION),
|
||||
errmsg("TO must specify exactly one value per partitioning column")));
|
||||
|
||||
/*
|
||||
* Check that no finite value follows a UNBOUNDED literal in either of
|
||||
* lower and upper bound lists.
|
||||
*/
|
||||
seen_unbounded = false;
|
||||
foreach(cell1, spec->lowerdatums)
|
||||
{
|
||||
PartitionRangeDatum *ldatum;
|
||||
|
||||
ldatum = (PartitionRangeDatum *) lfirst(cell1);
|
||||
if (ldatum->infinite)
|
||||
seen_unbounded = true;
|
||||
else if (seen_unbounded)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DATATYPE_MISMATCH),
|
||||
errmsg("cannot specify finite value after UNBOUNDED"),
|
||||
parser_errposition(pstate, exprLocation((Node *) ldatum))));
|
||||
}
|
||||
seen_unbounded = false;
|
||||
foreach(cell1, spec->upperdatums)
|
||||
{
|
||||
PartitionRangeDatum *rdatum;
|
||||
|
||||
rdatum = (PartitionRangeDatum *) lfirst(cell1);
|
||||
if (rdatum->infinite)
|
||||
seen_unbounded = true;
|
||||
else if (seen_unbounded)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DATATYPE_MISMATCH),
|
||||
errmsg("cannot specify finite value after UNBOUNDED"),
|
||||
parser_errposition(pstate, exprLocation((Node *) rdatum))));
|
||||
}
|
||||
|
||||
i = j = 0;
|
||||
result_spec->lowerdatums = result_spec->upperdatums = NIL;
|
||||
forboth(cell1, spec->lowerdatums, cell2, spec->upperdatums)
|
||||
|
Reference in New Issue
Block a user