• Heikki Linnakangas's avatar
    Split copy.c into four files. · c532d15d
    Heikki Linnakangas authored
    Copy.c has grown really large. Split it into more manageable parts:
    
    - copy.c now contains only a few functions that are common to COPY FROM
      and COPY TO.
    
    - copyto.c contains code for COPY TO.
    
    - copyfrom.c contains code for initializing COPY FROM, and inserting the
      tuples to the correct table.
    
    - copyfromparse.c contains code for reading from the client/file/program,
      and parsing the input text/CSV/binary format into tuples.
    
    All of these parts are fairly complicated, and fairly independent of each
    other. There is a patch being discussed to implement parallel COPY FROM,
    which will add a lot of new code to the COPY FROM path, and another patch
    which would allow INSERTs to use the same multi-insert machinery as COPY
    FROM, both of which will require refactoring that code. With those two
    patches, there's going to be a lot of code churn in copy.c anyway, so now
    seems like a good time to do this refactoring.
    
    The CopyStateData struct is also split. All the formatting options, like
    FORMAT, QUOTE, ESCAPE, are put in a new CopyFormatOption struct, which
    is used by both COPY FROM and TO. Other state data are kept in separate
    CopyFromStateData and CopyToStateData structs.
    
    Reviewed-by: Soumyadeep Chakraborty, Erik Rijkers, Vignesh C, Andres Freund
    Discussion: https://www.postgresql.org/message-id/8e15b560-f387-7acc-ac90-763986617bfb%40iki.fi
    c532d15d
file_fdw.c 34.2 KB