Files
subunit2sql/subunit2sql/migrations/versions/5332fe255095_populate_run_time_for_existing_tests.py
Matthew Treinish c37eb3d97d Stop using implict joins
This commit stops the usage of implict joins everywhere throughout
the subunit2sql codebase. When we dropped the use of foreign keys
in the db schema with the big uuid -> int migration fks were left
in the sqlalchemy models because implict joins were in use in the
db api. This commit fixes this so all the joins are explict and the
foreign keys can be removed from the db models.

Change-Id: Ia20961a154758fbfc74aaefe2103fc35c5b6db27
2016-01-02 15:48:34 -05:00

65 lines
2.2 KiB
Python

# Copyright 2014 Hewlett-Packard Development Company, L.P.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""Populate run_time for existing tests
Revision ID: 5332fe255095
Revises: 28ac1ba9c3db
Create Date: 2014-10-03 10:23:25.469128
"""
# revision identifiers, used by Alembic.
revision = '5332fe255095'
down_revision = '28ac1ba9c3db'
from oslo_db.sqlalchemy import utils as db_utils
from subunit2sql.db import api as db_api
from subunit2sql.db import models
from subunit2sql import read_subunit
def upgrade():
query = db_utils.model_query(
models.Test, db_api.get_session()).filter(
models.Test.success > 0, models.Test.run_time == None).join(
models.TestRun,
models.Test.id == models.TestRun.test_id).filter_by(
status='success').values(models.Test.id,
models.TestRun.start_time,
models.TestRun.stop_time)
results = {}
for test_run in query:
delta = read_subunit.get_duration(test_run[1], test_run[2])
if test_run[0] in results:
results[test_run[0]].append(delta)
else:
results[test_run[0]] = [delta]
for test in results:
avg = float(sum(results[test])) / float(len(results[test]))
db_api.update_test({'run_time': avg}, test)
def downgrade():
# NOTE(mtreinish) there is no possible downgrade for this migration, since
# we won't be able to tell which rows had run_time NULL before this.
# Ideally this would have been baked into 163fd5aa1380 and the downgrade
# there of deleting the column would have covered this. But, because that
# wasn't included as a part of the released migration we can't change it.
pass