On 20.08.23 17:25, Nathan Bossart wrote:
Doing a quick test, shows that this changes the current behaviour,
because all inputs are now treated as 64-bit:
HEAD:
select to_hex((-1234)::int);
to_hex
----------
fffffb2e
With patch:
select to_hex((-1234)::int);
to_hex
------------------
fffffffffffffb2e
Good catch. In v8, I fixed this by first casting the input to uint32 for
the 32-bit versions of the functions. This prevents the conversion to
uint64 from setting the rest of the bits. AFAICT this behavior is pretty
well defined in the standard.
What standard?
I don't understand the reason for this handling of negative values. I
would expect that, say, to_hex(-1234) would return '-' || to_hex(1234).