array type name mangling
In connection with completing David Fetter's array of composites patch,
I am looking at doing some better name mangling for array types as
recently discussed. What I'm thinking of is prepending one or more
underscores to the type name up to some limit (NAMEDATALEN / 2 ?) and if
necessary truncating the result, and then looking to see if there is a
name clash. That would, I hope, enable us to get rid of all the places
where we require names to be no more than NAMEDATALEN - 2 chars. Does
that seem like a reasonable approach? Will it break anything, i.e., is
there somewhere that has assumes the array type for foo will be called
_foo rather than ___foo ?
cheers
andrew
I wrote:
In connection with completing David Fetter's array of composites
patch, I am looking at doing some better name mangling for array types
as recently discussed. What I'm thinking of is prepending one or more
underscores to the type name up to some limit (NAMEDATALEN / 2 ?) and
if necessary truncating the result, and then looking to see if there
is a name clash. That would, I hope, enable us to get rid of all the
places where we require names to be no more than NAMEDATALEN - 2
chars. Does that seem like a reasonable approach? Will it break
anything, i.e., is there somewhere that has assumes the array type for
foo will be called _foo rather than ___foo ?
Actually, looking back in the email history I see Tom suggested this,
which I'll try instead:
prepend _, truncate to less than 64 bytes if necessary,
then substitute numbers at the end if needed to get something unique.
cheers
andrew
Andrew Dunstan <andrew@dunslane.net> writes:
In connection with completing David Fetter's array of composites patch,
I am looking at doing some better name mangling for array types as
recently discussed. What I'm thinking of is prepending one or more
underscores to the type name up to some limit (NAMEDATALEN / 2 ?) and if
necessary truncating the result, and then looking to see if there is a
name clash. That would, I hope, enable us to get rid of all the places
where we require names to be no more than NAMEDATALEN - 2 chars. Does
that seem like a reasonable approach? Will it break anything, i.e., is
there somewhere that has assumes the array type for foo will be called
_foo rather than ___foo ?
makeArrayTypeName and users thereof. Or are you going to extend pg_type
to have a direct link?
regards, tom lane
Tom Lane wrote:
Andrew Dunstan <andrew@dunslane.net> writes:
In connection with completing David Fetter's array of composites patch,
I am looking at doing some better name mangling for array types as
recently discussed. What I'm thinking of is prepending one or more
underscores to the type name up to some limit (NAMEDATALEN / 2 ?) and if
necessary truncating the result, and then looking to see if there is a
name clash. That would, I hope, enable us to get rid of all the places
where we require names to be no more than NAMEDATALEN - 2 chars. Does
that seem like a reasonable approach? Will it break anything, i.e., is
there somewhere that has assumes the array type for foo will be called
_foo rather than ___foo ?makeArrayTypeName and users thereof. Or are you going to extend pg_type
to have a direct link?
I am going to change makeArrayTypeName() to do the mangling. Its users
will need to pass in a namespace as well as a typename so it can do the
checking.
There's a direct link via typelem - do you think we need a reverse mapping?
cheers
andrew
Andrew Dunstan <andrew@dunslane.net> writes:
Tom Lane wrote:
makeArrayTypeName and users thereof. Or are you going to extend pg_type
to have a direct link?
I am going to change makeArrayTypeName() to do the mangling. Its users
will need to pass in a namespace as well as a typename so it can do the
checking.
You missed the point: there is a need to find the array type associated
with an existing element type, not only the other way round. See
LookupTypeName() and get_array_type().
regards, tom lane
Andrew Dunstan <andrew@dunslane.net> writes:
Actually, looking back in the email history I see Tom suggested this,
which I'll try instead:
prepend _, truncate to less than 64 bytes if necessary,
then substitute numbers at the end if needed to get something unique.
Your idea of multiple underscores seems just as reasonable, maybe more
so. Either way, remember that the truncation needs to be
multibyte-aware.
regards, tom lane
Tom Lane wrote:
Andrew Dunstan <andrew@dunslane.net> writes:
Tom Lane wrote:
makeArrayTypeName and users thereof. Or are you going to extend pg_type
to have a direct link?I am going to change makeArrayTypeName() to do the mangling. Its users
will need to pass in a namespace as well as a typename so it can do the
checking.You missed the point: there is a need to find the array type associated
with an existing element type, not only the other way round. See
LookupTypeName() and get_array_type().
OK, in that case I think we should extend pg_type with a direct link,
don't you?
cheers
andrew