Table of Contents
We're going to test the SQL migration scripts. For this purpose we restored from the RexStudy 4.14 sql dump 2 databases study_test_pre_4.15 and study_test_migrated_4.15. Then we deployed the current study model to the latter. The dump was previously updated with all required test data. Let's make a connection to both databases to compare results:
>>> from rex.core import Rex >>> from webob import Request >>> pre = Rex('rex.db', db='pgsql:study_test_pre_4.15', ... access={'rex.db': 'anybody'}) >>> migrated = Rex('rex.db', db='pgsql:study_test_migrated_4.15', ... access={'rex.db': 'anybody'}) >>> def run(app, query): ... with app: ... print Request.blank(query.strip()).get_response(app)
The pre database has 2 studies:
>>> run(pre, '/study{id(), is_configured}') # doctest: +ELLIPSIS 200 OK ... | study | +---------+---------------+ | id() | is_configured | -+---------+---------------+- | complex | true | | onereq | true | ...
With certain configuration in time_period, requirement_list and participant_group tables:
>>> run(pre, """ ... /time_period{id(), study := study.id()} ... """) # doctest: +ELLIPSIS 200 OK ... | time_period | +----------------+---------+ | id() | study | -+----------------+---------+- | complex.tp1 | complex | | complex.tp2 | complex | | onereq.anytime | onereq | ... >>> run(pre, """ ... /participant_group{id(), study := study.id()} ... """) # doctest: +ELLIPSIS 200 OK ... | participant_group | +-------------------------+---------+ | id() | study | -+-------------------------+---------+- | complex.pg1 | complex | | complex.pg2 | complex | | onereq.all-participants | onereq | ... >>> run(pre, """ ... /requirement_list{ ... id(), ... study := study.id(), ... time_period.id() :as time_period, ... participant_group.id() :as participant_group ... } ... """) # doctest: +ELLIPSIS 200 OK ... | requirement_list | +-----------+---------+----------------+-------------------------+ | id() | study | time_period | participant_group | -+-----------+---------+----------------+-------------------------+- | complex.4 | complex | complex.tp1 | complex.pg1 | | complex.5 | complex | complex.tp1 | complex.pg2 | | complex.6 | complex | complex.tp2 | complex.pg1 | | complex.7 | complex | complex.tp2 | complex.pg2 | | onereq.1 | onereq | onereq.anytime | onereq.all-participants | ...
The migrated database has one study_version per each study and the study.is_configured field is a part of study_version now with value properly transferred:
>>> run(migrated, """ ... /study_version{id(), study.id(), version, is_configured} ... """) # doctest: +ELLIPSIS 200 OK ... | study_version | +-----------+---------+---------+---------------+ | id() | id() | version | is_configured | -+-----------+---------+---------+---------------+- | complex.1 | complex | 1 | true | | onereq.1 | onereq | 1 | true | ...
Also the time_period, participant_group and requirement_list tables are branches of study_version:
>>> run(migrated, """ ... /time_period{id(), study_version := study_version.id()} ... """) # doctest: +ELLIPSIS 200 OK ... | time_period | +------------------+---------------+ | id() | study_version | -+------------------+---------------+- | complex.1.tp1 | complex.1 | | complex.1.tp2 | complex.1 | | onereq.1.anytime | onereq.1 | ... >>> run(migrated, """ ... /participant_group{id(), study_version := study_version.id()} ... """) # doctest: +ELLIPSIS 200 OK ... | participant_group | +---------------------------+---------------+ | id() | study_version | -+---------------------------+---------------+- | complex.1.pg1 | complex.1 | | complex.1.pg2 | complex.1 | | onereq.1.all-participants | onereq.1 | ... >>> run(migrated, """ ... /requirement_list{id(), study_version := study_version.id()} ... """) # doctest: +ELLIPSIS 200 OK ... | requirement_list | +-----------------------------------------------------------+---------------+ | id() | study_version | -+-----------------------------------------------------------+---------------+- | (complex.1).(complex.1.pg1).(complex.1.tp1) | complex.1 | | (complex.1).(complex.1.pg1).(complex.1.tp2) | complex.1 | | (complex.1).(complex.1.pg2).(complex.1.tp1) | complex.1 | | (complex.1).(complex.1.pg2).(complex.1.tp2) | complex.1 | | (onereq.1).(onereq.1.all-participants).(onereq.1.anytime) | onereq.1 | ...