Warning

This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.

Source code for galaxy.model.migrate.versions.0175_history_audit

"""
Add history audit table and associated triggers
"""

import datetime
import logging

from sqlalchemy import Column, DateTime, ForeignKey, Integer, MetaData, PrimaryKeyConstraint, Table

from galaxy.model.migrate.triggers import (
    history_update_time_field as old_triggers,  # rollback to old ones
    update_audit_table as new_triggers,  # install me
)
from galaxy.model.migrate.versions.util import (
    create_table,
    drop_table
)

log = logging.getLogger(__name__)
now = datetime.datetime.utcnow
metadata = MetaData()

AuditTable = Table(
    "history_audit",
    metadata,
    Column("history_id", Integer, ForeignKey("history.id"), primary_key=True, nullable=False),
    Column("update_time", DateTime, default=now, primary_key=True, nullable=False),
    PrimaryKeyConstraint(sqlite_on_conflict='IGNORE')
)


[docs]def upgrade(migrate_engine): print(__doc__) metadata.bind = migrate_engine metadata.reflect() # create table + index AuditTable.drop(migrate_engine, checkfirst=True) create_table(AuditTable) # populate with update_time from every history copy_update_times = """ INSERT INTO history_audit (history_id, update_time) SELECT id, update_time FROM history """ migrate_engine.execute(copy_update_times) # drop existing timestamp triggers old_triggers.drop_timestamp_triggers(migrate_engine) # install new timestamp triggers new_triggers.install(migrate_engine)
[docs]def downgrade(migrate_engine): print(__doc__) metadata.bind = migrate_engine metadata.reflect() # drop existing timestamp triggers new_triggers.remove(migrate_engine) try: # update history.update_time with vals from audit table put_em_back = """ UPDATE history h SET update_time = a.max_update_time FROM ( SELECT history_id, max(update_time) as max_update_time FROM history_audit GROUP BY history_id ) a WHERE h.id = a.history_id """ migrate_engine.execute(put_em_back) except Exception: print("Unable to put update_times back") # drop audit table drop_table(AuditTable) # install old timestamp triggers old_triggers.install_timestamp_triggers(migrate_engine)