mirror of
https://github.com/postgres/postgres.git
synced 2025-04-22 23:02:54 +03:00
Reverse-convert row types in ExecWithCheckOptions.
Just as we already do in ExecConstraints, and for the same reason: to improve the quality of error messages. Etsuro Fujita, reviewed by Amit Langote Discussion: http://postgr.es/m/56e0baa8-e458-2bbb-7936-367f7d832e43@lab.ntt.co.jp
This commit is contained in:
parent
f81a91db4d
commit
c85ec643ff
@ -2097,6 +2097,25 @@ ExecWithCheckOptions(WCOKind kind, ResultRelInfo *resultRelInfo,
|
||||
* USING policy.
|
||||
*/
|
||||
case WCO_VIEW_CHECK:
|
||||
/* See the comment in ExecConstraints(). */
|
||||
if (resultRelInfo->ri_PartitionRoot)
|
||||
{
|
||||
HeapTuple tuple = ExecFetchSlotTuple(slot);
|
||||
TupleDesc old_tupdesc = RelationGetDescr(rel);
|
||||
TupleConversionMap *map;
|
||||
|
||||
rel = resultRelInfo->ri_PartitionRoot;
|
||||
tupdesc = RelationGetDescr(rel);
|
||||
/* a reverse map */
|
||||
map = convert_tuples_by_name(old_tupdesc, tupdesc,
|
||||
gettext_noop("could not convert row type"));
|
||||
if (map != NULL)
|
||||
{
|
||||
tuple = do_convert_tuple(tuple, map);
|
||||
ExecStoreTuple(tuple, slot, InvalidBuffer, false);
|
||||
}
|
||||
}
|
||||
|
||||
insertedCols = GetInsertedColumns(resultRelInfo, estate);
|
||||
updatedCols = GetUpdatedColumns(resultRelInfo, estate);
|
||||
modifiedCols = bms_union(insertedCols, updatedCols);
|
||||
|
@ -2424,6 +2424,6 @@ select tableoid::regclass, * from pt;
|
||||
create view ptv_wco as select * from pt where a = 0 with check option;
|
||||
insert into ptv_wco values (1, 2);
|
||||
ERROR: new row violates check option for view "ptv_wco"
|
||||
DETAIL: Failing row contains (2, 1).
|
||||
DETAIL: Failing row contains (1, 2).
|
||||
drop view ptv, ptv_wco;
|
||||
drop table pt, pt1, pt11;
|
||||
|
Loading…
x
Reference in New Issue
Block a user