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
