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__)' ? 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]). Besides we should take care of the 'history' tables for which the suffix '__history' is added. Ideally, the max length should be configurable using trytond.conf: PostgreSQL could be recompiled [2]. [1] https://github.com/django/django/blob/master/django/db/backends/utils.py#L178 [2] http://www.postgresql.org/docs/9.4/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS -- Pierre-Louis
