• Tom Lane's avatar
    Prevent duplicate escape-string warnings when using pg_stat_statements. · eb213acf
    Tom Lane authored
    contrib/pg_stat_statements will sometimes run the core lexer a second time
    on submitted statements.  Formerly, if you had standard_conforming_strings
    turned off, this led to sometimes getting two copies of any warnings
    enabled by escape_string_warning.  While this is probably no longer a big
    deal in the field, it's a pain for regression testing.
    
    To fix, change the lexer so it doesn't consult the escape_string_warning
    GUC variable directly, but looks at a copy in the core_yy_extra_type state
    struct.  Then, pg_stat_statements can change that copy to disable warnings
    while it's redoing the lexing.
    
    It seemed like a good idea to make this happen for all three of the GUCs
    consulted by the lexer, not just escape_string_warning.  There's not an
    immediate use-case for callers to adjust the other two AFAIK, but making
    it possible is easy enough and seems like good future-proofing.
    
    Arguably this is a bug fix, but there doesn't seem to be enough interest to
    justify a back-patch.  We'd not be able to back-patch exactly as-is anyway,
    for fear of breaking ABI compatibility of the struct.  (We could perhaps
    back-patch the addition of only escape_string_warning by adding it at the
    end of the struct, where there's currently alignment padding space.)
    eb213acf
pg_stat_statements.c 79.7 KB