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.
|
* USING policy.
|
||||||
*/
|
*/
|
||||||
case WCO_VIEW_CHECK:
|
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);
|
insertedCols = GetInsertedColumns(resultRelInfo, estate);
|
||||||
updatedCols = GetUpdatedColumns(resultRelInfo, estate);
|
updatedCols = GetUpdatedColumns(resultRelInfo, estate);
|
||||||
modifiedCols = bms_union(insertedCols, updatedCols);
|
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;
|
create view ptv_wco as select * from pt where a = 0 with check option;
|
||||||
insert into ptv_wco values (1, 2);
|
insert into ptv_wco values (1, 2);
|
||||||
ERROR: new row violates check option for view "ptv_wco"
|
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 view ptv, ptv_wco;
|
||||||
drop table pt, pt1, pt11;
|
drop table pt, pt1, pt11;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user