aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/executor/execTuples.c2
-rw-r--r--src/include/executor/tuptable.h10
2 files changed, 9 insertions, 3 deletions
diff --git a/src/backend/executor/execTuples.c b/src/backend/executor/execTuples.c
index 2c2712ceac3..5a2db83987e 100644
--- a/src/backend/executor/execTuples.c
+++ b/src/backend/executor/execTuples.c
@@ -253,8 +253,6 @@ tts_virtual_copyslot(TupleTableSlot *dstslot, TupleTableSlot *srcslot)
{
TupleDesc srcdesc = srcslot->tts_tupleDescriptor;
- Assert(srcdesc->natts <= dstslot->tts_tupleDescriptor->natts);
-
tts_virtual_clear(dstslot);
slot_getallattrs(srcslot);
diff --git a/src/include/executor/tuptable.h b/src/include/executor/tuptable.h
index 4210d6d838f..5250be52d33 100644
--- a/src/include/executor/tuptable.h
+++ b/src/include/executor/tuptable.h
@@ -174,7 +174,8 @@ struct TupleTableSlotOps
/*
* Copy the contents of the source slot into the destination slot's own
- * context. Invoked using callback of the destination slot.
+ * context. Invoked using callback of the destination slot. 'dstslot' and
+ * 'srcslot' can be assumed to have the same number of attributes.
*/
void (*copyslot) (TupleTableSlot *dstslot, TupleTableSlot *srcslot);
@@ -477,12 +478,19 @@ ExecCopySlotMinimalTuple(TupleTableSlot *slot)
*
* If a source's system attributes are supposed to be accessed in the target
* slot, the target slot and source slot types need to match.
+ *
+ * Currently, 'dstslot' and 'srcslot' must have the same number of attributes.
+ * Future work could see this relaxed to allow the source to contain
+ * additional attributes and have the code here only copy over the leading
+ * attributes.
*/
static inline TupleTableSlot *
ExecCopySlot(TupleTableSlot *dstslot, TupleTableSlot *srcslot)
{
Assert(!TTS_EMPTY(srcslot));
Assert(srcslot != dstslot);
+ Assert(dstslot->tts_tupleDescriptor->natts ==
+ srcslot->tts_tupleDescriptor->natts);
dstslot->tts_ops->copyslot(dstslot, srcslot);