Pre-requisites to 8.7 Upgrade

QMetry 8.7 upgrade brings in a lot of new improvements and bugfixes. This upgrade also fixes a few anomalies in the database related to the issue where some users observed duplicate requirements and issues syncing from Jira. With the upgrade to the latest version, QMetry prevents duplicate requirements and issues from getting generated in QMetry, which requires cleaning up the duplicate ones before the upgrade.

To be able to upgrade to the 8.7 version requires following the below mandatory pre-upgrade steps.

  1. QMetry server admins need to provide the database query outputs mentioned on this page in .csv format and share them with QMetry Support.

  2. QMetry Support will share relevant database updates that should be run on the QMetry database.

  3. Upon receiving the confirmation about the updates run by the QMetry server admin, QMetry Support will share the upgrade details.

Note: It is recommended to take assistance from a database administrator or QMetry server admin for these steps.

Provide the following outputs

  1. Login to QMetry DB using any GUI tool (to facilitate extracting data to .csv format). Be sure to remove the limit to the results output (generally 1000 records) so that all query records are returned.

  2. Execute the following 27 queries one by one and capture their outputs in a .csv file.

  3. Share the query outputs with QMetry Support.

 

-- DUPLICATE REQUIREMENTS select p.name,rq.dtKey,count(*) as total from requirement rq join project p on rq.projectID = p.projectID and rq.dtKey is not null group by rq.projectID,rq.dtKey having total > 1; -- query1 select p.name,rq.dtKey,group_concat(rq.rqID),count(*) as total from requirement rq join project p on rq.projectID = p.projectID and rq.dtKey is not null group by rq.projectID,rq.dtKey having total > 1; -- query2 select * from requirement where find_in_set(rqid,(select group_concat(rqids) from (select group_concat(rq.rqID) as rqids from requirement rq join project p on rq.projectID = p.projectID and rq.dtKey is not null group by rq.projectID,rq.dtKey having count(*) > 1) as a)); -- query3 select * from rqversiondetail where find_in_set(rqid,(select group_concat(rqids) from (select group_concat(rq.rqID) as rqids from requirement rq join project p on rq.projectID = p.projectID and rq.dtKey is not null group by rq.projectID,rq.dtKey having count(*) > 1) as a)); -- query4 select * from rqtc where find_in_set(rqid,(select group_concat(rqids) from (select group_concat(rq.rqID) as rqids from requirement rq join project p on rq.projectID = p.projectID and rq.dtKey is not null group by rq.projectID,rq.dtKey having count(*) > 1) as a)); -- query5 select * from dfrq where find_in_set(rqid,(select group_concat(rqids) from (select group_concat(rq.rqID) as rqids from requirement rq join project p on rq.projectID = p.projectID and rq.dtKey is not null group by rq.projectID,rq.dtKey having count(*) > 1) as a)); -- query6 select * from commentsrq where find_in_set(rqid,(select group_concat(rqids) from (select group_concat(rq.rqID) as rqids from requirement rq join project p on rq.projectID = p.projectID and rq.dtKey is not null group by rq.projectID,rq.dtKey having count(*) > 1) as a)); -- query7 select * from rqreleasemap where find_in_set(rqid,(select group_concat(rqids) from (select group_concat(rq.rqID) as rqids from requirement rq join project p on rq.projectID = p.projectID and rq.dtKey is not null group by rq.projectID,rq.dtKey having count(*) > 1) as a)); -- query8 select rqChangeHistoryID, rqID, oldVersion, newVersion, changedBy, changedDate, clientID, isEntityLevel from rqchangehistory where find_in_set(rqid,(select group_concat(rqids) from (select group_concat(rq.rqID) as rqids from requirement rq join project p on rq.projectID = p.projectID and rq.dtKey is not null group by rq.projectID,rq.dtKey having count(*) > 1) as a)); -- query select * from rqwatcher where find_in_set(rqid,(select group_concat(rqids) from (select group_concat(rq.rqID) as rqids from requirement rq join project p on rq.projectID = p.projectID and rq.dtKey is not null group by rq.projectID,rq.dtKey having count(*) > 1) as a)); -- query10 select * from sharedrequirements where find_in_set(requirementid,(select group_concat(rqids) from (select group_concat(rq.rqID) as rqids from requirement rq join project p on rq.projectID = p.projectID and rq.dtKey is not null group by rq.projectID,rq.dtKey having count(*) > 1) as a)); -- query11 select * from rqbdd rb join rqversiondetail rqvd on rb.rqVersionID = rqvd.rqVersionID and find_in_set(rqid,(select group_concat(rqids) from (select group_concat(rq.rqID) as rqids from requirement rq join project p on rq.projectID = p.projectID and rq.dtKey is not null group by rq.projectID,rq.dtKey having count(*) > 1) as a)); -- query12 select * from rqversioncomponent rc join rqversiondetail rqvd on rc.rqVersionID = rqvd.rqVersionID where find_in_set(rqid,(select group_concat(rqids) from (select group_concat(rq.rqID) as rqids from requirement rq join project p on rq.projectID = p.projectID and rq.dtKey is not null group by rq.projectID,rq.dtKey having count(*) > 1) as a)); -- query13 select * from rqversionuserfieldvalue ru join rqversiondetail rqvd on ru.rqVersionID = rqvd.rqVersionID where find_in_set(rqid,(select group_concat(rqids) from (select group_concat(rq.rqID) as rqids from requirement rq join project p on rq.projectID = p.projectID and rq.dtKey is not null group by rq.projectID,rq.dtKey having count(*) > 1) as a)); -- query14 -- DUPLICATE ISSUES SELECT p.name, df.externalKey, COUNT(*) AS total FROM defect df JOIN project p ON df.projectID = p.projectID AND df.externalKey IS NOT NULL GROUP BY df.projectID , df.externalKey , df.externalId HAVING total > 1; -- query1 SELECT p.name, df.externalKey, GROUP_CONCAT(df.dfID), COUNT(*) AS total FROM defect df JOIN project p ON df.projectID = p.projectID AND df.externalKey IS NOT NULL GROUP BY df.projectID , df.externalKey , df.externalId HAVING total > 1; -- query2 SELECT * FROM defect WHERE FIND_IN_SET(dfID, (SELECT GROUP_CONCAT(dfIDs) FROM (SELECT GROUP_CONCAT(df.dfID) AS dfIDs FROM defect df JOIN project p ON df.projectID = p.projectID AND df.externalKey IS NOT NULL GROUP BY df.projectID , df.externalKey , df.externalId HAVING COUNT(*) > 1) AS a)); -- query3 SELECT * FROM dfrq WHERE FIND_IN_SET(dfID, (SELECT GROUP_CONCAT(dfIDs) FROM (SELECT GROUP_CONCAT(df.dfID) AS dfIDs FROM defect df JOIN project p ON df.projectID = p.projectID AND df.externalKey IS NOT NULL GROUP BY df.projectID , df.externalKey , df.externalId HAVING COUNT(*) > 1) AS a)); -- query4 SELECT * FROM dftcrun WHERE FIND_IN_SET(dfID, (SELECT GROUP_CONCAT(dfIDs) FROM (SELECT GROUP_CONCAT(df.dfID) AS dfIDs FROM defect df JOIN project p ON df.projectID = p.projectID AND df.externalKey IS NOT NULL GROUP BY df.projectID , df.externalKey , df.externalId HAVING COUNT(*) > 1) AS a)) AND tcStepRunID IS NULL; -- query5 SELECT * FROM dftcrun WHERE FIND_IN_SET(dfID, (SELECT GROUP_CONCAT(dfIDs) FROM (SELECT GROUP_CONCAT(df.dfID) AS dfIDs FROM defect df JOIN project p ON df.projectID = p.projectID AND df.externalKey IS NOT NULL GROUP BY df.projectID , df.externalKey , df.externalId HAVING COUNT(*) > 1) AS a)) AND tcStepRunID IS NOT NULL; -- query6 SELECT * FROM dfchangehistory WHERE FIND_IN_SET(dfID, (SELECT GROUP_CONCAT(dfIDs) FROM (SELECT GROUP_CONCAT(df.dfID) AS dfIDs FROM defect df JOIN project p ON df.projectID = p.projectID AND df.externalKey IS NOT NULL GROUP BY df.projectID , df.externalKey , df.externalId HAVING COUNT(*) > 1) AS a)); -- query7 SELECT * FROM voyager_session_defect WHERE FIND_IN_SET(defectID, (SELECT GROUP_CONCAT(dfIDs) FROM (SELECT GROUP_CONCAT(df.dfID) AS dfIDs FROM defect df JOIN project p ON df.projectID = p.projectID AND df.externalKey IS NOT NULL GROUP BY df.projectID , df.externalKey , df.externalId HAVING COUNT(*) > 1) AS a)); -- query8 SELECT * FROM dfuserfieldvalue WHERE FIND_IN_SET(dfID, (SELECT GROUP_CONCAT(dfIDs) FROM (SELECT GROUP_CONCAT(df.dfID) AS dfIDs FROM defect df JOIN project p ON df.projectID = p.projectID AND df.externalKey IS NOT NULL GROUP BY df.projectID , df.externalKey , df.externalId HAVING COUNT(*) > 1) AS a)); -- query9 SELECT * FROM shareddefects WHERE FIND_IN_SET(defectID, (SELECT GROUP_CONCAT(dfIDs) FROM (SELECT GROUP_CONCAT(df.dfID) AS dfIDs FROM defect df JOIN project p ON df.projectID = p.projectID AND df.externalKey IS NOT NULL GROUP BY df.projectID , df.externalKey , df.externalId HAVING COUNT(*) > 1) AS a)); -- query10 SELECT * FROM dfwatcher WHERE FIND_IN_SET(dfID, (SELECT GROUP_CONCAT(dfIDs) FROM (SELECT GROUP_CONCAT(df.dfID) AS dfIDs FROM defect df JOIN project p ON df.projectID = p.projectID AND df.externalKey IS NOT NULL GROUP BY df.projectID , df.externalKey , df.externalId HAVING COUNT(*) > 1) AS a)); -- query11 SELECT * FROM ext_multipleselect WHERE FIND_IN_SET(defectID, (SELECT GROUP_CONCAT(dfIDs) FROM (SELECT GROUP_CONCAT(df.dfID) AS dfIDs FROM defect df JOIN project p ON df.projectID = p.projectID AND df.externalKey IS NOT NULL GROUP BY df.projectID , df.externalKey , df.externalId HAVING COUNT(*) > 1) AS a)); -- query12 SELECT * FROM ext_issue_links WHERE FIND_IN_SET(dfKey, (SELECT GROUP_CONCAT(dfKeys) FROM (SELECT GROUP_CONCAT(df.externalKey) AS dfKeys FROM defect df JOIN project p ON df.projectID = p.projectID AND df.externalKey IS NOT NULL GROUP BY df.projectID , df.externalKey , df.externalId HAVING COUNT(*) > 1) AS a)); -- query13