• Tomas Vondra's avatar
    Fix mvdistinct and dependencies size calculations · d08c44f7
    Tomas Vondra authored
    The formulas used to calculate size while (de)serializing mvndistinct
    and functional dependencies were based on offset() of the structs. But
    that is incorrect, because the structures are not copied directly, we
    we copy the individual fields directly.
    
    At the moment this works fine, because there is no alignment padding
    on any platform we support. But it might break if we ever added some
    fields into any of the structs, for example. It's also confusing.
    
    Fixed by reworking the macros to directly sum sizes of serialized
    fields. The macros are now useful only for serialiation, so there is
    no point in keeping them in the public header file. So make them
    private by moving them to the .c files.
    
    Also adds a couple more asserts to check the serialization, and fixes
    an incorrect allocation of MVDependency instead of (MVDependency *).
    
    Reported-By: Tom Lane
    Discussion: https://postgr.es/m/29785.1555365602@sss.pgh.pa.us
    d08c44f7
dependencies.c 30.6 KB