• Andres Freund's avatar
    Don't include heapam.h from others headers. · 4c850ece
    Andres Freund authored
    heapam.h previously was included in a number of widely used
    headers (e.g. execnodes.h, indirectly in executor.h, ...). That's
    problematic on its own, as heapam.h contains a lot of low-level
    details that don't need to be exposed that widely, but becomes more
    problematic with the upcoming introduction of pluggable table storage
    - it seems inappropriate for heapam.h to be included that widely
    afterwards.
    
    heapam.h was largely only included in other headers to get the
    HeapScanDesc typedef (which was defined in heapam.h, even though
    HeapScanDescData is defined in relscan.h). The better solution here
    seems to be to just use the underlying struct (forward declared where
    necessary). Similar for BulkInsertState.
    
    Another problem was that LockTupleMode was used in executor.h - parts
    of the file tried to cope without heapam.h, but due to the fact that
    it indirectly included it, several subsequent violations of that goal
    were not not noticed. We could just reuse the approach of declaring
    parameters as int, but it seems nicer to move LockTupleMode to
    lockoptions.h - that's not a perfect location, but also doesn't seem
    bad.
    
    As a number of files relied on implicitly included heapam.h, a
    significant number of files grew an explicit include. It's quite
    probably that a few external projects will need to do the same.
    
    Author: Andres Freund
    Reviewed-By: Alvaro Herrera
    Discussion: https://postgr.es/m/20190114000701.y4ttcb74jpskkcfb@alap3.anarazel.de
    4c850ece
file_fdw.c 33.8 KB