Re: StringInfo fixes, v19 edition. Plus a few oddities - Mailing list pgsql-hackers

From David Rowley
Subject Re: StringInfo fixes, v19 edition. Plus a few oddities
Date
Msg-id CAApHDvpCZ6P=ybn2AngZRUkB8Oc3grvTUzQ3-L56okXb-=FN_A@mail.gmail.com
Whole thread
In response to Re: StringInfo fixes, v19 edition. Plus a few oddities  (Andres Freund <andres@anarazel.de>)
List pgsql-hackers
On Mon, 13 Apr 2026 at 02:51, Andres Freund <andres@anarazel.de> wrote:
> I wonder if we should make at least "appending just the format string without
> arguments" one permanently impossible for appendStringInfo(), instead of
> playing whack-a-mole every release. Your wrapper macro

I'm open to considering having 0001 or portions of it in core. My
patch isn't ideal, though. For example, if you look at what I had to
do in xml.c. Maybe that wouldn't be quite as bad if I'd come up with a
better name than appendStringInfoInternal(). There's also all the
other cruddy changes in there, like WRITE_*_FIELD() stuff, which I had
to make call the internal function to get it to compile.

> extern void appendStringInfoInternal(StringInfo str, const char *fmt, ...) pg_attribute_printf(2, 3);
> #define appendStringInfo(str, fmt, ...) \
>         appendStringInfoInternal(str, fmt, __VA_ARGS__)
>
> would give you compiler errors if you call appendStringInfo() without
> an argument after fmt. It's not the greatest error message, but it'd probably
> not confuse people too much?

If we went and committed that macro, why wouldn't we include the
StaticAssert part too? That'd also check for "%s". I suppose some
compilers don't have __builtin_constant_p(), so I suppose it might be
annoying if you test with one of those compilers and then only get a
failure after committing.

> Any reason you didn't have the relevant outfuncs.c fixes from 0001 - which
> iiuc is not intended to be committed - in 0003? Pointlessly using
> appendStringInfo() where appendStringInfoString() would have done there is
> probably the by far most impactful misuse, performance wise.
>
> Specifically WRITE_CHAR_FIELD(), WRITE_FLOAT_FIELD() seem like they should use
> appendStringInfoString()? We have a fair amount of both in node trees.

I did miss those. I wrote the 0001 patch a long time ago and I don't
remember noticing that those could be improved. I'm keen to fix those,
but I'm just not sure that's valid post-freeze work since it's not
touching new-to-v19 code. All the other stuff I did in 0003 is
justified via it being all new code.

David



pgsql-hackers by date:

Previous
From: Chao Li
Date:
Subject: Re: Fix pgstat_database.c to honor passed database OIDs
Next
From: Peter Smith
Date:
Subject: Re: Add missing period to HINT messages