Fix for dropdb()

Change-Id: I2cd4862f02dedaa034aad75900b3a8a2d32da8b9
Closes-Bug: #1323350
This commit is contained in:
Nikolay Markov 2014-06-11 13:15:05 +04:00 committed by Aleksandra Fedorova
parent f851199db5
commit 34c1ad5dc9
1 changed files with 38 additions and 1 deletions

View File

@ -15,8 +15,12 @@
# under the License.
import contextlib
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy import create_engine
from sqlalchemy import schema
from sqlalchemy.engine import reflection
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.orm.query import Query
from nailgun.settings import settings
@ -58,6 +62,39 @@ def syncdb():
def dropdb():
from nailgun.db import migration
from nailgun.db.sqlalchemy.models.base import Base
conn = engine.connect()
trans = conn.begin()
inspector = reflection.Inspector.from_engine(engine)
tbs = []
all_fks = []
for table_name in inspector.get_table_names():
fks = []
for fk in inspector.get_foreign_keys(table_name):
if not fk['name']:
continue
fks.append(
schema.ForeignKeyConstraint((), (), name=fk['name'])
)
t = schema.Table(
table_name,
Base.metadata,
*fks,
extend_existing=True
)
tbs.append(t)
all_fks.extend(fks)
for fkc in all_fks:
conn.execute(schema.DropConstraint(fkc))
for table in tbs:
conn.execute(schema.DropTable(table))
trans.commit()
# needed to cleanup custom types
Base.metadata.drop_all(bind=engine)
migration.drop_migration_meta(engine)