Details
-
Improvement
-
Status: Resolved
-
Minor
-
Resolution: Fixed
-
None
-
None
Description
The current implementations of pg_ltoa and pg_itoa allocate a 33 byte char array and set the input pointer to that array. This is far too many bytes than needed to translate an int16 or int32 to a string
int32 -> 10 bytes maximum + 1 sign bit + '\0' = 12 bytes
int16 -> 5 bytes maximum + 1 sign bit + '\0' = 7 bytes
When HAWQ/Greenplum forked from Postgres the two functions simply delegated to sprintf so an optimization was introduced that involved the 33 byte solution. Postgres itself implemented these functions in commit https://github.com/postgres/postgres/commit/4fc115b2e981f8c63165ca86a23215380a3fda66 that require a 12 byte maximum char pointer.
This is a minor improvement that can be made to the HAWQ codebase and it's relatively little effort to do so.
Attachments
Issue Links
- links to