On Tue, Jan 08, 2013 at 08:02:16PM -0500, Robert Haas wrote:
> On Tue, Jan 8, 2013 at 7:57 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> > Robert Haas <robertmhaas@gmail.com> writes:
> >> I was thinking more about a sprintf()-type function that only
> >> understands a handful of escapes, but adds the additional and novel
> >> escapes %I (quote as identifier) and %L (quote as literal). I think
> >> that would allow a great deal of code simplification, and it'd be more
> >> efficient, too.
> >
> > Seems like a great idea. Are you offering to code it?
>
> Not imminently.
>
> > Note that this wouldn't entirely fix the fmtId problem, as not all the
> > uses of fmtId are directly in sprintf calls. Still, it might get rid of
> > most of the places where it'd be painful to avoid a memory leak with
> > a strdup'ing version of fmtId.
>
> Yeah, I didn't think about that. Might be worth a look to see how
> comprehensively it would solve the problem. But I'll have to leave
> that for another day.
As a cheap solution addressing 95+% of the trouble, how about giving fmtId() a
ring of, say, eight static buffers to cycle through? That satisfies code
merely wishing to pass multiple fmtId()'d values to one appendPQExpBuffer().
--
Noah Misch
EnterpriseDB http://www.enterprisedb.com