Mercurial > kallithea
changeset 6024:1a080d4e926e
db: use consistent key/index/constraint names when creating database
This simplifies future Alembic upgrades/downgrades.
http://alembic.zzzcomputing.com/en/latest/naming.html
A future changeset will update old databases to match this naming
convention.
Bump SQLAlchemy minimum version to 1.0, required for naming_convention
support.
author | Søren Løvborg <sorenl@unity3d.com> |
---|---|
date | Fri, 15 Jul 2016 21:49:35 +0200 |
parents | 9fd64dd2617d |
children | 51b1af58589b |
files | kallithea/model/db.py kallithea/model/meta.py setup.py |
diffstat | 3 files changed, 20 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/kallithea/model/db.py Mon Jul 25 15:33:21 2016 +0200 +++ b/kallithea/model/db.py Fri Jul 15 21:49:35 2016 +0200 @@ -1483,7 +1483,7 @@ class RepoGroup(Base, BaseModel): __tablename__ = 'groups' __table_args__ = ( - CheckConstraint('group_id != group_parent_id'), + CheckConstraint('group_id != group_parent_id', name='ck_groups_no_self_parent'), _table_args_default_dict, ) __mapper_args__ = {'order_by': 'group_name'} @@ -1900,7 +1900,7 @@ __tablename__ = 'user_group_user_group_to_perm' __table_args__ = ( UniqueConstraint('target_user_group_id', 'user_group_id', 'permission_id'), - CheckConstraint('target_user_group_id != user_group_id'), + CheckConstraint('target_user_group_id != user_group_id', name='ck_user_group_user_group_to_perm_no_self_target'), _table_args_default_dict, ) @@ -2012,8 +2012,8 @@ class UserFollowing(Base, BaseModel): __tablename__ = 'user_followings' __table_args__ = ( - UniqueConstraint('user_id', 'follows_repository_id'), - UniqueConstraint('user_id', 'follows_user_id'), + UniqueConstraint('user_id', 'follows_repository_id', name='uq_user_followings_user_repo'), + UniqueConstraint('user_id', 'follows_user_id', name='uq_user_followings_user_user'), _table_args_default_dict, )
--- a/kallithea/model/meta.py Mon Jul 25 15:33:21 2016 +0200 +++ b/kallithea/model/meta.py Fri Jul 15 21:49:35 2016 +0200 @@ -40,3 +40,18 @@ #to use cache use this in query #.options(FromCache("sqlalchemy_cache_type", "cachekey")) + + +# Define naming conventions for foreign keys, primary keys, indexes, +# check constraints, and unique constraints, respectively. +Base.metadata.naming_convention = { + 'fk': 'fk_%(table_name)s_%(column_0_name)s', + 'pk': 'pk_%(table_name)s', + 'ix': 'ix_%(column_0_label)s', + 'ck': 'ck_%(table_name)s_%(column_0_name)s', + 'uq': 'uq_%(table_name)s_%(column_0_name)s', +} +# For custom CheckConstraints (not those autogenerated e.g. for Boolean +# types), a name should be given explicitly, since "column_0" is here a +# rather vague notion. A custom name is also necesarry if the generated +# name is very long, since MySQL limits identifiers to 64 characters.