mirror of
https://github.com/postgres/postgres.git
synced 2025-06-19 04:21:08 +03:00
Allow generalized expression syntax for partition bounds
Previously, only literals were allowed. This change allows general expressions, including functions calls, which are evaluated at the time the DDL command is executed. Besides offering some more functionality, it simplifies the parser structures and removes some inconsistencies in how the literals were handled. Author: Kyotaro Horiguchi, Tom Lane, Amit Langote Reviewed-by: Peter Eisentraut <peter.eisentraut@2ndquadrant.com> Discussion: https://www.postgresql.org/message-id/flat/9f88b5e0-6da2-5227-20d0-0d7012beaa1c@lab.ntt.co.jp/
This commit is contained in:
@ -830,6 +830,7 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId,
|
||||
defaultPartOid;
|
||||
Relation parent,
|
||||
defaultRel = NULL;
|
||||
RangeTblEntry *rte;
|
||||
|
||||
/* Already have strong enough lock on the parent */
|
||||
parent = table_open(parentId, NoLock);
|
||||
@ -872,6 +873,14 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId,
|
||||
pstate = make_parsestate(NULL);
|
||||
pstate->p_sourcetext = queryString;
|
||||
|
||||
/*
|
||||
* Add an RTE containing this relation, so that transformExpr called
|
||||
* on partition bound expressions is able to report errors using a
|
||||
* proper context.
|
||||
*/
|
||||
rte = addRangeTableEntryForRelation(pstate, rel, AccessShareLock,
|
||||
NULL, false, false);
|
||||
addRTEtoQuery(pstate, rte, false, true, true);
|
||||
bound = transformPartitionBound(pstate, parent, stmt->partbound);
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user