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.
--- a/setup.py	Mon Jul 25 15:33:21 2016 +0200
+++ b/setup.py	Fri Jul 15 21:49:35 2016 +0200
@@ -43,7 +43,7 @@
     "Beaker==1.6.4",
     "WebHelpers==1.3",
     "formencode>=1.2.4,<=1.2.6",
-    "SQLAlchemy>=0.7.10,<1.1",
+    "SQLAlchemy>=1.0,<1.1",
     "Mako>=0.9.0,<=1.0.0",
     "pygments>=1.5",
     "whoosh>=2.4.0,<=2.5.7",