"""Меняет связь Redmine и Clockify с один-к-одному на один-ко-многим.""" import sqlite3 def upgrade(connection: sqlite3.Connection): """Переносит внешний ключ записи Redmine в активности Clockify.""" connection.execute( """ALTER TABLE activity ADD COLUMN time_entry_id INTEGER REFERENCES time_entry(id)""" ) connection.execute( """UPDATE activity SET time_entry_id = ( SELECT time_entry.id FROM time_entry WHERE time_entry.activity_id = activity.id LIMIT 1 )""" ) connection.execute( """CREATE TABLE time_entry_new ( id INTEGER PRIMARY KEY, description VARCHAR NOT NULL, date DATETIME NOT NULL, time_spent NUMERIC NOT NULL, task_id INTEGER NOT NULL, activity_type_id INTEGER NOT NULL, author_id INTEGER NOT NULL, FOREIGN KEY (author_id) REFERENCES user(id), FOREIGN KEY (task_id) REFERENCES task(id), FOREIGN KEY (activity_type_id) REFERENCES activity_type(id) )""" ) connection.execute( """INSERT INTO time_entry_new( id, description, date, time_spent, task_id, activity_type_id, author_id ) SELECT id, description, date, time_spent, task_id, activity_type_id, author_id FROM time_entry""" ) connection.execute("DROP TABLE time_entry") connection.execute("ALTER TABLE time_entry_new RENAME TO time_entry") connection.execute( "CREATE INDEX activity_time_entry_id_idx ON activity(time_entry_id)" )