Coverage for mindsdb / migrations / versions / 2022-10-14_43c52d23845a_projects.py: 20%
46 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-21 00:36 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-21 00:36 +0000
1"""projects
3Revision ID: 43c52d23845a
4Revises: cada7d2be947
5Create Date: 2022-10-14 09:59:44.589745
7"""
8from alembic import op
9import sqlalchemy as sa
10from sqlalchemy.sql import text
12import mindsdb.interfaces.storage.db as db
15# revision identifiers, used by Alembic.
16revision = '43c52d23845a'
17down_revision = 'cada7d2be947'
18branch_labels = None
19depends_on = None
22def upgrade():
23 op.create_table(
24 'project',
25 sa.Column('id', sa.Integer(), nullable=False),
26 sa.Column('created_at', sa.DateTime(), nullable=True),
27 sa.Column('updated_at', sa.DateTime(), nullable=True),
28 sa.Column('deleted_at', sa.DateTime(), nullable=True),
29 sa.Column('name', sa.String(), nullable=False),
30 sa.Column('company_id', sa.Integer(), nullable=True),
31 sa.PrimaryKeyConstraint('id'),
32 sa.UniqueConstraint('name', 'company_id', name='unique_project_name_company_id')
33 )
35 project_table = sa.Table(
36 'project',
37 sa.MetaData(),
38 sa.Column('id', sa.Integer()),
39 sa.Column('name', sa.String()),
40 sa.Column('company_id', sa.Integer()),
41 )
43 conn = op.get_bind()
44 session = sa.orm.Session(bind=conn)
46 conn.execute(
47 project_table.insert().values(
48 name='mindsdb'
49 )
50 )
52 project_record = conn.execute(
53 project_table.select().where(project_table.c.name == 'mindsdb')
54 ).fetchone()
56 with op.batch_alter_table('predictor', schema=None) as batch_op:
57 batch_op.add_column(sa.Column('project_id', sa.Integer()))
58 batch_op.create_foreign_key('fk_project_id', 'project', ['project_id'], ['id'])
60 conn.execute(sa.sql.text('''
61 update predictor set project_id = :project_id
62 '''), {'project_id': project_record.id})
64 with op.batch_alter_table('predictor', schema=None) as batch_op:
65 batch_op.alter_column(
66 'project_id',
67 existing_type=sa.INTEGER(),
68 nullable=False
69 )
71 with op.batch_alter_table('view', schema=None) as batch_op:
72 batch_op.add_column(sa.Column('project_id', sa.Integer()))
73 batch_op.create_foreign_key('fk_project_id', 'project', ['project_id'], ['id'])
75 conn.execute(sa.sql.text('''
76 update view set project_id = :project_id
77 '''), {'project_id': project_record.id})
79 with op.batch_alter_table('view', schema=None) as batch_op:
80 batch_op.alter_column(
81 'project_id',
82 existing_type=sa.INTEGER(),
83 nullable=False
84 )
86 views = conn.execute(sa.text('''
87 select id, name from view
88 where exists (select 1 from predictor where view.name = predictor.name)
89 ''')).fetchall()
91 for row in views:
92 conn.execute(
93 text("""
94 update view
95 set name = :name
96 where id = :view_id
97 """), {
98 'name': f"{row['name']}_view",
99 'view_id': row['id']
100 }
101 )
103 session.commit()
106def downgrade():
107 conn = op.get_bind()
108 session = sa.orm.Session(bind=conn)
110 view_integration = db.Integration.query.filter_by(name='views').first()
111 if view_integration is None:
112 views_integration = db.Integration(
113 name='views',
114 data={},
115 engine='views',
116 company_id=None
117 )
118 session.add(views_integration)
119 session.commit()
121 with op.batch_alter_table('view', schema=None) as batch_op:
122 batch_op.drop_constraint('fk_project_id', type_='foreignkey')
123 batch_op.drop_column('project_id')
125 with op.batch_alter_table('predictor', schema=None) as batch_op:
126 batch_op.drop_constraint('fk_project_id', type_='foreignkey')
127 batch_op.drop_column('project_id')
129 op.drop_table('project')