On 26/05/2015 00:55, Cédric Krier wrote:
> On 25 May 18:00, Pierre-Louis Bonicoli wrote:
>> On 21/05/2015 17:52, Cédric Krier wrote:
>>> I'm facing a limitation with how trytond generate the table name for a
>>> ModelSQL. Databases have different length limitation for schema name.
>>> For example,
>>> PostgreSQL has the limit to 64 when Oracle has the limit to 30
>>> (yes I'm working on an Oracle backend).
>>>
>>> I don't want that we change our naming convention because it is quite
>>> good and reducing the name will just bring a lot in readability.
>>> And we will be forced to use the least common constraint.
>>>
>>> So my idea is to have a configuration section which will provide the
>>> table name to use for a Model.
>>>
>>> Example:
>>>
>>> [table]
>>> account.invoice.payment_term.line.relativedelta = acc_inv_pt_l_reldelta
>>> account.payment.sepa.message = acc_payment_sepa_msg
>>>
>>> Of course such configuration could not be modified once a database has
>>> been created (or the table should be renamed).
>>>
>>> Side effect, it could also be used to fix naming conflict between 2
>>> unrelated module (at the database level not Model.__name__).
>>>
>>> What do you think?
>>
>> The names of the tables should be identical for two installations using
>> the same backend. A module should not require this kind of configuration.
>>
>> Could not we delegate the transformation of a model name into a table
>> name to the backends with something like that:
>> 'cls._table = backend.TableHandler.name(cls.__name__)' ?
> 
> OK but what is your proposal on how such method will always create valid
> table name.

We keep the current behavior (dots replaced by underscore) and use the
same approach as django (last X characters replaced by
'hash(name)[:X]').

>> Another solution could be to add a 'max_name_length' for each backend
>> and to implement 'truncate_table' in the core (like sqlalchemy and
>> django [1]).
> 
> And how do you avoid name collision?

Same as above.

--
Pierre-Louis

Reply via email to