mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
Fix confusion on different kinds of slots in IndexOnlyScans.
We used the same slot to store a tuple from the index, and to store a tuple from the table. That's not OK. It worked with the heap, because heapam_getnextslot() stores a HeapTuple to the slot, and doesn't care how large the tts_values/nulls arrays are. But when I played with a toy table AM implementation that used a virtual tuple, it caused memory overruns. In the passing, tidy up comments on the ioss_PscanLen fields.
This commit is contained in:
@@ -1359,7 +1359,7 @@ typedef struct
|
||||
* SortSupport for reordering ORDER BY exprs
|
||||
* OrderByTypByVals is the datatype of order by expression pass-by-value?
|
||||
* OrderByTypLens typlens of the datatypes of order by expressions
|
||||
* pscan_len size of parallel index scan descriptor
|
||||
* PscanLen size of parallel index scan descriptor
|
||||
* ----------------
|
||||
*/
|
||||
typedef struct IndexScanState
|
||||
@@ -1403,8 +1403,9 @@ typedef struct IndexScanState
|
||||
* RuntimeContext expr context for evaling runtime Skeys
|
||||
* RelationDesc index relation descriptor
|
||||
* ScanDesc index scan descriptor
|
||||
* TableSlot slot for holding tuples fetched from the table
|
||||
* VMBuffer buffer in use for visibility map testing, if any
|
||||
* ioss_PscanLen Size of parallel index-only scan descriptor
|
||||
* PscanLen size of parallel index-only scan descriptor
|
||||
* ----------------
|
||||
*/
|
||||
typedef struct IndexOnlyScanState
|
||||
@@ -1421,6 +1422,7 @@ typedef struct IndexOnlyScanState
|
||||
ExprContext *ioss_RuntimeContext;
|
||||
Relation ioss_RelationDesc;
|
||||
struct IndexScanDescData *ioss_ScanDesc;
|
||||
TupleTableSlot *ioss_TableSlot;
|
||||
Buffer ioss_VMBuffer;
|
||||
Size ioss_PscanLen;
|
||||
} IndexOnlyScanState;
|
||||
|
Reference in New Issue
Block a user