Inconsistent format() behavior for argument-count inconsistency

Started by Tom Lanealmost 13 years ago2 messages
#1Tom Lane
tgl@sss.pgh.pa.us

regression=# select format('%s %s', 'foo', 'bar');
format
---------
foo bar
(1 row)

regression=# select format('%s %s', 'foo', 'bar', 'baz');
format
---------
foo bar
(1 row)

regression=# select format('%s %s', 'foo');
ERROR: too few arguments for format

Why do we throw an error for too few arguments, but not too many?

(This came up when I started wondering whether the proposed VARIADIC
feature would really be very useful for format(), since it needs a
format string that matches up with its arguments.)

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#2Stephen Frost
sfrost@snowman.net
In reply to: Tom Lane (#1)
Re: Inconsistent format() behavior for argument-count inconsistency

* Tom Lane (tgl@sss.pgh.pa.us) wrote:

Why do we throw an error for too few arguments, but not too many?

Not sure offhand, though I could see how it might be useful. A use-case
might be that you have a variable template string which is user defined,
where they can choose from the arguments that are passed which ones they
want displayed and how. Otherwise, you'd have to have a bunch of
different call sites to format() depending on which options are
requested.

I'd go look at what C sprintf() does, as I feel like that's what we're
trying to emulate and see what it does.

There is also a patch that I reviewed/commented on about changing format
around a bit. I'm guessing it needs more review/work, just havn't
gotten back around to it yet.

Thanks,

Stephen