Thread: array type name mangling

array type name mangling

From
Andrew Dunstan
Date:

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


Re: array type name mangling

From
Andrew Dunstan
Date:

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


Re: array type name mangling

From
Tom Lane
Date:
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


Re: array type name mangling

From
Andrew Dunstan
Date:

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


Re: array type name mangling

From
Tom Lane
Date:
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


Re: array type name mangling

From
Tom Lane
Date:
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


Re: array type name mangling

From
Andrew Dunstan
Date:

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