[Fortify] SSC Database Upgrade

1. MySQL Database 백업
  mysqldump --single-transaction --routines --triggers --max_allowed_packet=2048M -u root -p<Password> db_ssc_2222 > 20240801_ssc_backup.sql


2. SSC 설치 진행
  Database 항목에서 DB Connection 테스트 후 우측하단 스크립트 다운로드에서 ssc-migration.sql 다운로드
  (하단 그림 참고)


3. ssc-migration.sql 스크립트로 DB 마이그레이션 진행
  mysql -u root -p<Password> db_ssc_2222 < ssc-migration.sql

  만일 오류 발생 시 아래의 스크립트를 실행하여 원상 복구
  DROP DATABASE IF EXISTS db_ssc_2222;
  CREATE DATABASE db_ssc_2222 CHARACTER SET utf8mb3 COLLATE utf8mb3_bin;

  mysql -u root -p<Password> db_ssc_2222 < 20240705_103707_ssc_db.sql

4. SSC 설치 진행
  SEED도 정상적으로 업로드 한다.
  (하단 그림 참고)


[샘플] ssc-migration.sql

--  *********************************************************************
--  Update Database Script
--  *********************************************************************
--  Change Log: dbMaster.xml
--  Ran at: 24. 7. 5. 오후 12:09
--  Against: root@jdbc:mariadb://10.10.10.149/db_ssc_2222
--  Liquibase version: 4.10.0
--  *********************************************************************

--  Create Database Lock Table
CREATE TABLE db_ssc_2222.DATABASECHANGELOGLOCK (ID INT NOT NULL, `LOCKED` TINYINT(1) NOT NULL, LOCKGRANTED datetime NULL, LOCKEDBY VARCHAR(255) NULL, CONSTRAINT PK_DATABASECHANGELOGLOCK PRIMARY KEY (ID));

--  Initialize Database Lock Table
DELETE FROM db_ssc_2222.DATABASECHANGELOGLOCK;

INSERT INTO db_ssc_2222.DATABASECHANGELOGLOCK (ID, `LOCKED`) VALUES (1, 0);

--  Lock Database
UPDATE db_ssc_2222.DATABASECHANGELOGLOCK SET `LOCKED` = 1, LOCKEDBY = 'LENOVO-E430 (10.10.10.127)', LOCKGRANTED = NOW() WHERE ID = 1 AND `LOCKED` = 0;

--  Changeset dbF360_Init.xml::f360_init_mysql_1::hp
SET collation_connection = @@collation_database;

UPDATE db_ssc_2222.DATABASECHANGELOG SET COMMENTS = '', CONTEXTS = NULL, DATEEXECUTED = NOW(), DEPLOYMENT_ID = '0148965608', EXECTYPE = 'RERAN', LABELS = NULL, MD5SUM = '8:c0200fd5942e9c97af8ac5709e56d3cb', ORDEREXECUTED = 808 WHERE ID = 'f360_init_mysql_1' AND AUTHOR = 'hp' AND FILENAME = 'dbF360_Init.xml';

--  Changeset dbF360_23.1.xml::f360_23.1_1::fortify
--  Add indices to support eventType and userName filtering
CREATE INDEX EVENTLOGENTRY_TYPE_IND ON db_ssc_2222.eventlogentry(eventType);

CREATE INDEX EVENTLOGENTRY_NAME_TYPE_IND ON db_ssc_2222.eventlogentry(userName, eventType);

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.1_1', 'fortify', 'dbF360_23.1.xml', NOW(), 809, '8:f0cd5b243e24b12b34472ea39b4fdc65', 'createIndex indexName=EVENTLOGENTRY_TYPE_IND, tableName=eventlogentry; createIndex indexName=EVENTLOGENTRY_NAME_TYPE_IND, tableName=eventlogentry', 'Add indices to support eventType and userName filtering', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_23.1.xml::f360_23.1_2::fortify
--  Adding startDate and finishDate columns to savedreport table
ALTER TABLE db_ssc_2222.savedreport ADD startDate datetime(3) NULL, ADD finishDate datetime(3) NULL;

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.1_2', 'fortify', 'dbF360_23.1.xml', NOW(), 810, '8:4774f0387df72c051dbcfdf79c97525d', 'addColumn tableName=savedreport', 'Adding startDate and finishDate columns to savedreport table', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_23.1.xml::f360_23.1_3::fortify
--  Adding table as an extension to the issue table because the issue table is too large.
--              We can use this table to append any columns we would like to attach to issues.
--              issue_id maps to issue.id.  projectVersion_id, issueInstanceId and engineType also map to corresponding columns in the issue table.
--              reintroducedDate is the date an issue is reintroduced in an app version, similar to foundDate and removedDate.
CREATE TABLE db_ssc_2222.issue_extension (issue_id INT NOT NULL, projectVersion_id BIGINT NOT NULL, issueInstanceId VARCHAR(80) NOT NULL, engineType VARCHAR(20) NOT NULL, reintroducedDate BIGINT NULL, CONSTRAINT PK_ISSUE_EXTENSION PRIMARY KEY (issue_id));

CREATE INDEX ISSUE_EXTENSION_PV_IID_ENGINE_IDX ON db_ssc_2222.issue_extension(projectVersion_id, issueInstanceId, engineType);

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.1_3', 'fortify', 'dbF360_23.1.xml', NOW(), 811, '8:760b177832a55b791e0796352399cebe', 'createTable tableName=issue_extension; createIndex indexName=ISSUE_EXTENSION_PV_IID_ENGINE_IDX, tableName=issue_extension', 'Adding table as an extension to the issue table because the issue table is too large.
            We can use this table to append any columns we would like to attach to issues.
            issue_id maps to issue.id.  projectVersion_id, issueInstan...', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_23.1.xml::f360_23.1_4::fortify
--  add start and finish dates to data exports
ALTER TABLE db_ssc_2222.dataexport ADD startDate datetime(3) NULL;

ALTER TABLE db_ssc_2222.dataexport ADD finishDate datetime(3) NULL;

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.1_4', 'fortify', 'dbF360_23.1.xml', NOW(), 812, '8:b707b1e845027df177bf9cb3cee8a7eb', 'addColumn tableName=dataexport; addColumn tableName=dataexport', 'add start and finish dates to data exports', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_23.1.xml::f360_23.1_5::fortify
--  add new table for issues delta exports
CREATE TABLE db_ssc_2222.issuesdeltaexport (id BIGINT AUTO_INCREMENT NOT NULL, fileName VARCHAR(255) NOT NULL, note VARCHAR(255) NULL, requestDate datetime(3) NOT NULL, startDate datetime(3) NULL, finishDate datetime(3) NULL, userName VARCHAR(255) NOT NULL, status VARCHAR(30) NOT NULL, messages MEDIUMTEXT NULL, documentInfo_id INT NULL, projectVersionIds MEDIUMTEXT NULL, deltaSinceDate datetime(3) NULL, CONSTRAINT PK_ISSUESDELTAEXPORT PRIMARY KEY (id));

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.1_5', 'fortify', 'dbF360_23.1.xml', NOW(), 813, '8:f532a7c3961d83d175526aa421a308c3', 'createTable tableName=issuesdeltaexport', 'add new table for issues delta exports', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360Mysql_23.1_datetime.xml::f360Mysql_23.1_datetime::fortify
--  Enhance to millisecond precision for datetime columns added between 20.2 and 22.2 which were incorrectly created as datetime instead of datetime(3) in scripts generated prior to ssc v23.1
ALTER TABLE fortifygroup MODIFY created datetime(3) NOT NULL, MODIFY lastModified datetime(3) NOT NULL;

ALTER TABLE fortifyuser MODIFY created datetime(3) NOT NULL, MODIFY lastModified datetime(3) NOT NULL;

ALTER TABLE jobqueue MODIFY createTime datetime(3) NOT NULL;

ALTER TABLE ldapcache MODIFY uploadDate datetime(3) NOT NULL;

ALTER TABLE scan_issue_correlation MODIFY target_scan_time datetime(3);

ALTER TABLE webhook MODIFY creationDate datetime(3) NOT NULL;

ALTER TABLE webhookhistory MODIFY createdAt datetime(3) NOT NULL;

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360Mysql_23.1_datetime', 'fortify', 'dbF360Mysql_23.1_datetime.xml', NOW(), 814, '8:efc7aa749c470eae51e25472fca50bec', 'sql', 'Enhance to millisecond precision for datetime columns added between 20.2 and 22.2 which were incorrectly created as datetime instead of datetime(3) in scripts generated prior to ssc v23.1', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_23.2.xml::f360_23.2_1::fortify
--  Remove orphan records in documentinfo and datablob
DELETE FROM db_ssc_2222.documentinfo WHERE NOT EXISTS( SELECT 1 FROM
                (SELECT artifact.documentInfo_id
                FROM artifact
                UNION
                SELECT au.documentInfo_id
                FROM auditattachment au
                UNION
                SELECT de.documentInfo_id
                FROM dataexport de
                UNION
                SELECT df.templateInfo_id
                FROM documentdef df
                UNION
                SELECT dsp.fileValueDocumentInfo_id
                FROM dynamicscanparameter dsp
                UNION
                SELECT ide.documentInfo_id
                FROM issuesdeltaexport ide
                UNION
                SELECT pm.documentInfo_id
                FROM pluginmetadata pm
                UNION
                SELECT pt.documentInfo_id
                FROM projecttemplate pt
                UNION
                SELECT rd.templateDoc_id
                FROM reportdefinition rd
                UNION
                SELECT rl.fileDoc_id FROM
                reportlibrary rl
                UNION
                SELECT rp.documentInfo_id
                FROM rulepack rp UNION
                SELECT sr.reportOutputDoc_id
                FROM savedreport sr) dids
                WHERE dids.documentInfo_id = documentinfo.id);

DELETE FROM db_ssc_2222.datablob WHERE NOT EXISTS( SELECT 1 FROM
                (SELECT documentinfo.fileBlob_id
                FROM documentinfo
                UNION
                SELECT snapshot.auditBlob_id
                FROM snapshot
                UNION
                SELECT ldapcache.blobId
                FROM ldapcache
                UNION
                SELECT projectversion.currentFprBlob_id
                FROM projectversion) blobs
                WHERE datablob.id = blobs.fileBlob_id);

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.2_1', 'fortify', 'dbF360_23.2.xml', NOW(), 815, '8:906f6f63924a29f20ac33d86e038d409', 'delete tableName=documentinfo; delete tableName=datablob', 'Remove orphan records in documentinfo and datablob', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_23.2.xml::f360_23.2_2::fortify
--  Drop index and re-create it as non-unique.  It may have previously been created as unique.
DROP INDEX ISSUE_EXTENSION_PV_IID_ENGINE_IDX ON db_ssc_2222.issue_extension;

CREATE INDEX ISSUE_EXTENSION_PV_IID_ENGINE_IDX ON db_ssc_2222.issue_extension(projectVersion_id, issueInstanceId, engineType);

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.2_2', 'fortify', 'dbF360_23.2.xml', NOW(), 816, '8:26fa343f49f07cdcf5f02b38f2735cae', 'dropIndex indexName=ISSUE_EXTENSION_PV_IID_ENGINE_IDX, tableName=issue_extension; createIndex indexName=ISSUE_EXTENSION_PV_IID_ENGINE_IDX, tableName=issue_extension', 'Drop index and re-create it as non-unique.  It may have previously been created as unique.', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_23.2.xml::f360_23.2_4::fortify
--  Update documentType for project template documents
UPDATE documentinfo
             SET documentType = 24
             WHERE EXISTS(SELECT 1 from projecttemplate
                                   WHERE projecttemplate.documentInfo_id = documentinfo.id);

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.2_4', 'fortify', 'dbF360_23.2.xml', NOW(), 817, '8:e4a40d317e31c02783c287f758348e01', 'sql', 'Update documentType for project template documents', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_23.2.xml::f360_23.2_5::fortify
--  Update documentType for report documents
UPDATE documentinfo
             SET documentType = 4
             WHERE EXISTS(SELECT 1
                          FROM savedreport
                          WHERE savedreport.reportOutputDoc_id = documentinfo.id
                            AND savedreport.format = 'PDF');

UPDATE documentinfo
             SET documentType = 5
             WHERE EXISTS(SELECT 1
                          FROM savedreport
                          WHERE savedreport.reportOutputDoc_id = documentinfo.id
                            AND savedreport.format = 'DOC');

UPDATE documentinfo
             SET documentType = 23
             WHERE EXISTS(SELECT 1
                          FROM savedreport
                          WHERE savedreport.reportOutputDoc_id = documentinfo.id
                            AND savedreport.format = 'XLS');

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.2_5', 'fortify', 'dbF360_23.2.xml', NOW(), 818, '8:48e01f5bdece489d3a2f0a47434de339', 'sql; sql; sql', 'Update documentType for report documents', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_23.2.xml::f360_23.2_6::fortify
--  Add auditAssistantTrainingCustomTagGuid to ProjectVersion to identify which custom tag to use for Audit Assistant training.
ALTER TABLE db_ssc_2222.projectversion ADD auditAssistantTrainingCustomTagGuid VARCHAR(255) NULL;

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.2_6', 'fortify', 'dbF360_23.2.xml', NOW(), 819, '8:b33361c7395796eed2ed0119eb7ee678', 'addColumn tableName=projectversion', 'Add auditAssistantTrainingCustomTagGuid to ProjectVersion to identify which custom tag to use for Audit Assistant training.', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_23.2.xml::f360_23.2_7::fortify
--  Add column to attrlookup for defining Audit Assistant Training Label
ALTER TABLE db_ssc_2222.attrlookup ADD auditAssistantTrainingLabel VARCHAR(255) DEFAULT 'SKIP_FOR_TRAINING' NOT NULL;

ALTER TABLE db_ssc_2222.attrlookup ALTER auditAssistantTrainingLabel DROP DEFAULT;

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.2_7', 'fortify', 'dbF360_23.2.xml', NOW(), 820, '8:3ffe7546ef51773632dcc9bc884d738f', 'addColumn tableName=attrlookup; dropDefaultValue columnName=auditAssistantTrainingLabel, tableName=attrlookup', 'Add column to attrlookup for defining Audit Assistant Training Label', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_23.2.xml::f360_23.2_8::fortify
--  Add table for SBOM storage.  Links SBOM file to project version by engineType.
--  Link SBOM Document to a scan and some SBOM info
CREATE TABLE db_ssc_2222.sbom (id BIGINT AUTO_INCREMENT NOT NULL, projectVersion_id BIGINT NOT NULL, engineType VARCHAR(20) NOT NULL, documentInfo_id BIGINT NOT NULL, format VARCHAR(255) NOT NULL, serialization VARCHAR(255) NOT NULL, CONSTRAINT PK_SBOM PRIMARY KEY (id));

ALTER TABLE db_ssc_2222.scan ADD sbomDocumentInfo_id BIGINT NULL, ADD sbomFormat VARCHAR(255) NULL, ADD sbomSerialization VARCHAR(255) NULL;

ALTER TABLE db_ssc_2222.attrlookup ALTER auditAssistantTrainingLabel DROP DEFAULT;

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.2_8', 'fortify', 'dbF360_23.2.xml', NOW(), 821, '8:5c82436f8b1aeb884e671de1b3a919ff', 'createTable tableName=sbom; addColumn tableName=scan; dropDefaultValue columnName=auditAssistantTrainingLabel, tableName=attrlookup', 'Add table for SBOM storage.  Links SBOM file to project version by engineType.
Link SBOM Document to a scan and some SBOM info', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_23.2.xml::f360_23.2_9::fortify
--  Add index for sbom table
CREATE UNIQUE INDEX SBOM_PV_ENGINE_IDX ON db_ssc_2222.sbom(projectVersion_id, engineType);

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.2_9', 'fortify', 'dbF360_23.2.xml', NOW(), 822, '8:9eda2793fe19d138ca6f78ec941b7ec4', 'createIndex indexName=SBOM_PV_ENGINE_IDX, tableName=sbom', 'Add index for sbom table', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_23.2.xml::f360_23.2_11::fortify
--  Disable Audit Assistant in order to allow users to gracefully transition to Audit Assistant G2
UPDATE db_ssc_2222.configproperty SET propertyValue = 'false' WHERE propertyName='auditassistant.enabled';

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.2_11', 'fortify', 'dbF360_23.2.xml', NOW(), 823, '8:4aab4e7b2f0ff0c23d4dde095fc44d78', 'update tableName=configproperty', 'Disable Audit Assistant in order to allow users to gracefully transition to Audit Assistant G2', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_23.2.xml::f360_23.2_12_mysql_oracle::fortify
--  Add indexes on variablehistory and measurementhistory to make project version state queries more efficient
CREATE INDEX VARIABLEHISTORY_SNAPID_VARID_VARVALUE_IDX ON db_ssc_2222.variablehistory(snapshot_id, variable_id, variableValue);

CREATE INDEX MEASUREMENTHISTORY_SNAPID_MSRID_MSRVALUE_IDX ON db_ssc_2222.measurementhistory(snapshot_id, measurement_id, measurementValue);

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.2_12_mysql_oracle', 'fortify', 'dbF360_23.2.xml', NOW(), 824, '8:3d23939b9a9500d05ed0649d42d3be48', 'createIndex indexName=VARIABLEHISTORY_SNAPID_VARID_VARVALUE_IDX, tableName=variablehistory; createIndex indexName=MEASUREMENTHISTORY_SNAPID_MSRID_MSRVALUE_IDX, tableName=measurementhistory', 'Add indexes on variablehistory and measurementhistory to make project version state queries more efficient', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_23.2.xml::f360_23.2_13::fortify
--  Add index for jobqueue table
CREATE INDEX JOBQUEUE_PVID_JOBCLASS_STATE_IDX ON db_ssc_2222.jobqueue(projectVersion_id, jobClassName, state);

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.2_13', 'fortify', 'dbF360_23.2.xml', NOW(), 825, '8:3e9fb1c313ab1088bb75d3827a95a565', 'createIndex indexName=JOBQUEUE_PVID_JOBCLASS_STATE_IDX, tableName=jobqueue', 'Add index for jobqueue table', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_23.2.xml::f360_23.2_14_mysql::fortify
--  Add an index on a scan_issue table to improve performance during FPRs deletions.
DROP INDEX SCAN_PV_IDX ON db_ssc_2222.scan_issue;

CREATE INDEX SCANISSUE_PVID_SCANID_ISSUEID_IDX ON db_ssc_2222.scan_issue(projectVersion_id, scan_id, issue_id);

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.2_14_mysql', 'fortify', 'dbF360_23.2.xml', NOW(), 826, '8:8c1fda40198f2224d866c90f5174b1cc', 'dropIndex indexName=SCAN_PV_IDX, tableName=scan_issue; createIndex indexName=SCANISSUE_PVID_SCANID_ISSUEID_IDX, tableName=scan_issue', 'Add an index on a scan_issue table to improve performance during FPRs deletions.', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_23.2.xml::f360_23.2_15_mssql_mysql::fortify
--  Allow storing longer tokens for bugtracker state management.
ALTER TABLE db_ssc_2222.bugstatemgmtconfig MODIFY password VARCHAR(4000);

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_23.2_15_mssql_mysql', 'fortify', 'dbF360_23.2.xml', NOW(), 827, '8:5f12a2a3156ccdbeaf832b4c5608549f', 'modifyDataType columnName=password, tableName=bugstatemgmtconfig', 'Allow storing longer tokens for bugtracker state management.', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360Mysql_23.2_scan_issue_id.xml::f360Mysql_23.2_scan_issue_id::fortify
--  Update scan_issue ID from INT to BIGINT
ALTER TABLE scan_issue
                MODIFY COLUMN id BIGINT NOT NULL AUTO_INCREMENT;

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360Mysql_23.2_scan_issue_id', 'fortify', 'dbF360Mysql_23.2_scan_issue_id.xml', NOW(), 828, '8:618a78a0fa7dd54837d58336474506b8', 'sql', 'Update scan_issue ID from INT to BIGINT', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_24.2.xml::f360_24.2_1::fortify
--  Adding new column uiTheme to persist user preferred UI theme.
ALTER TABLE db_ssc_2222.userpreference ADD uiTheme VARCHAR(100) NULL;

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_24.2_1', 'fortify', 'dbF360_24.2.xml', NOW(), 829, '8:e54ec3f9f40e1ff0880ab4e79ad9630d', 'addColumn tableName=userpreference', 'Adding new column uiTheme to persist user preferred UI theme.', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_24.2.xml::f360_24.2_2::fortify
--  Remove invalid tokens referencing removed token definitions.
DELETE FROM db_ssc_2222.agentcredential WHERE type IN ('AuditToken', 'ScanCentralOneTimeJobToken', 'WIESystemToken', 'WIEUserToken');

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_24.2_2', 'fortify', 'dbF360_24.2.xml', NOW(), 830, '8:426c762d31dcce0cf63e1e050db6dbd2', 'delete tableName=agentcredential', 'Remove invalid tokens referencing removed token definitions.', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_24.2.xml::f360_24.2_3::fortify
--  Remove unused requirement documents and associated file blobs
DELETE FROM db_ssc_2222.datablob WHERE EXISTS (SELECT 1 FROM documentdef dd
                INNER JOIN documentinfo di ON dd.templateInfo_id = di.id
                WHERE di.fileBlob_id = datablob.id);

DELETE FROM db_ssc_2222.documentinfo WHERE EXISTS (SELECT 1 FROM documentdef dd WHERE documentinfo.id = dd.templateInfo_id);

DROP TABLE db_ssc_2222.documentdef;

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_24.2_3', 'fortify', 'dbF360_24.2.xml', NOW(), 831, '8:4e89b666da17655f266764d88a6fbfd6', 'delete tableName=datablob; delete tableName=documentinfo; dropTable tableName=documentdef', 'Remove unused requirement documents and associated file blobs', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_24.2.xml::f360_24.2_4::fortify
--  Remove unused governance tables
DROP TABLE db_ssc_2222.rtassignment;

DROP TABLE db_ssc_2222.activity_persona;

DROP TABLE db_ssc_2222.documentactivity;

DROP TABLE db_ssc_2222.requirement_activity;

DROP TABLE db_ssc_2222.timelapseactivity;

DROP TABLE db_ssc_2222.projectstateactivity;

DROP TABLE db_ssc_2222.activity;

DROP TABLE db_ssc_2222.requirement_persona;

DROP TABLE db_ssc_2222.requirement;

DROP TABLE db_ssc_2222.projectpersonaassignment;

DROP TABLE db_ssc_2222.requirementtemplate_persona;

DROP TABLE db_ssc_2222.metadatarule;

DROP TABLE db_ssc_2222.requirementtemplate;

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_24.2_4', 'fortify', 'dbF360_24.2.xml', NOW(), 832, '8:4f6e381b235cd2ad790e5d14f2bd1fed', 'dropTable tableName=rtassignment; dropTable tableName=activity_persona; dropTable tableName=documentactivity; dropTable tableName=requirement_activity; dropTable tableName=timelapseactivity; dropTable tableName=projectstateactivity; dropTable tabl...', 'Remove unused governance tables', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_24.2.xml::f360_24.2_5::fortify
--  Remove unused governance alerts
DELETE FROM db_ssc_2222.alert WHERE monitoredEntityType IN ('RT_INSTANCE', 'ACTIVITY_INSTANCE', 'REQ_INSTANCE');

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_24.2_5', 'fortify', 'dbF360_24.2.xml', NOW(), 833, '8:b7b4363a94cb5f6bfe943796db53e733', 'delete tableName=alert', 'Remove unused governance alerts', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_24.2.xml::f360_24.2_6::fortify
--  Adding table storedobjectinfo to persist information relevant to object storage.
CREATE TABLE db_ssc_2222.storedobjectinfo (objectKey VARCHAR(255) NOT NULL, creationDate datetime(3) NOT NULL, checksum VARCHAR(255) NULL, deletionRequestDate datetime(3) NULL, CONSTRAINT PK_STOREDOBJECTINFO PRIMARY KEY (objectKey));

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_24.2_6', 'fortify', 'dbF360_24.2.xml', NOW(), 834, '8:516551ac7c3fc4c713d8187560def4db', 'createTable tableName=storedobjectinfo', 'Adding table storedobjectinfo to persist information relevant to object storage.', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_24.2.xml::f360_24.2_6_part2::fortify
--  Add storedObjectKey column to documentInfo
ALTER TABLE db_ssc_2222.documentinfo ADD storedObjectKey VARCHAR(255) NULL;

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_24.2_6_part2', 'fortify', 'dbF360_24.2.xml', NOW(), 835, '8:00404b2670ae61c9580e4ceb03ecf933', 'addColumn tableName=documentinfo', 'Add storedObjectKey column to documentInfo', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_24.2.xml::f360_24.2_7::fortify
--  Add a new table to track failed Kafka events by project version
CREATE TABLE db_ssc_2222.failedkafkaevent (projectVersion_id BIGINT NOT NULL, earliestAuditTime BIGINT NOT NULL, CONSTRAINT PK_FAILEDKAFKAEVENT PRIMARY KEY (projectVersion_id));

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_24.2_7', 'fortify', 'dbF360_24.2.xml', NOW(), 836, '8:3a1dd5ac8d8d7a06557f4806e94565a5', 'createTable tableName=failedkafkaevent', 'Add a new table to track failed Kafka events by project version', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_24.2.xml::f360_24.2_8::fortify
--  Set issue status as Under Review when an issue has an audit history but its status is still set as Unreviewed.
--              Ignore issues where primary tag has been set (audited) and audithistory changes where guid is user assignment and suppressed.
UPDATE issue i
                JOIN audithistory ah ON i.id = ah.issue_id AND i.issueStatus = 'Unreviewed' AND i.audited = 'N'
                AND ah.attrGuid NOT IN ('userAssignment', '22222222-2222-2222-2222-222222222222')
                SET i.issueStatus = 'Under Review';

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_24.2_8', 'fortify', 'dbF360_24.2.xml', NOW(), 837, '8:a0484b467f565fa943899dad2587f99d', 'sql; sql; sql', 'Set issue status as Under Review when an issue has an audit history but its status is still set as Unreviewed.
            Ignore issues where primary tag has been set (audited) and audithistory changes where guid is user assignment and suppressed.', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_24.2.xml::f360_24.2_9::fortify
--  Add table for data retention (cleanup) policies and add policy-related columns for projectVersion table.
CREATE TABLE db_ssc_2222.dataretentionpolicy (id BIGINT AUTO_INCREMENT NOT NULL, guid VARCHAR(255) NOT NULL, objectVersion INT NOT NULL, name VARCHAR(255) NOT NULL, `description` VARCHAR(2000) NOT NULL, systemOwned VARCHAR(1) DEFAULT 'N' NOT NULL, minArtifacts INT NOT NULL, maxArtifacts INT NOT NULL, minArtifactAgeInDays INT NOT NULL, maxArtifactAgeInDays INT NOT NULL, CONSTRAINT PK_DR_POLICY PRIMARY KEY (id), CONSTRAINT UQ_DR_POLICY_GUID UNIQUE (guid), CONSTRAINT UQ_DR_POLICY_NAME UNIQUE (name));

ALTER TABLE db_ssc_2222.projectversion ADD dataRetentionPolicyOverride VARCHAR(1) DEFAULT 'N' NOT NULL, ADD dataRetentionPolicyGuid VARCHAR(255) NULL;

CREATE INDEX PV_DATA_RETENTION_IDX ON db_ssc_2222.projectversion(dataRetentionPolicyOverride, dataRetentionPolicyGuid);

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_24.2_9', 'fortify', 'dbF360_24.2.xml', NOW(), 838, '8:1d101f59feb56abea7653f4de1a93ef6', 'createTable tableName=dataretentionpolicy; addColumn tableName=projectversion; createIndex indexName=PV_DATA_RETENTION_IDX, tableName=projectversion', 'Add table for data retention (cleanup) policies and add policy-related columns for projectVersion table.', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_24.2.xml::f360_24.2_10::fortify
--  In 24.2, admins cannot create new policies but can edit and/or enable the system-owned default policy. Pre-create the system-owned default policy entity with benign properties.
INSERT INTO db_ssc_2222.dataretentionpolicy (guid, objectVersion, name, `description`, systemOwned, minArtifacts, maxArtifacts, minArtifactAgeInDays, maxArtifactAgeInDays) VALUES ('__DATA_RETENTION_SYSTEM_DEFAULT_POLICY__', 1, 'Default data retention policy', 'This system-owned policy is used for an application when the feature is enabled and the application has not opted-out of the default policy.', 'Y', 1000, 1000, 3650, 3650);

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_24.2_10', 'fortify', 'dbF360_24.2.xml', NOW(), 839, '8:77cd5d81f011a8bb00198409b4426e49', 'insert tableName=dataretentionpolicy; insert tableName=dataretentionpolicy', 'In 24.2, admins cannot create new policies but can edit and/or enable the system-owned default policy. Pre-create the system-owned default policy entity with benign properties.', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_24.2.xml::f360_24.2_11::fortify
--  Remove orphaned records in auditcomment
DELETE FROM db_ssc_2222.auditcomment WHERE NOT EXISTS (SELECT 1 FROM issue i WHERE i.id = auditcomment.issue_id);

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_24.2_11', 'fortify', 'dbF360_24.2.xml', NOW(), 840, '8:b51b666d6d2750e155ed01e122ecc726', 'delete tableName=auditcomment', 'Remove orphaned records in auditcomment', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_24.2.xml::f360_24.2_12::fortify
--  Delete orphaned documentinfo and datablob rows that correspond to associatedDocIds of artifacts belonging to deleted PVs
DELETE di, db FROM documentinfo di
                JOIN datablob db ON di.fileBlob_id = db.id
                LEFT JOIN artifact a ON a.associatedDocInfo_id = di.id
                    WHERE a.id IS NULL AND di.documentType=16;

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_24.2_12', 'fortify', 'dbF360_24.2.xml', NOW(), 841, '8:2d4ee5abdfaed1ac0e860b301ca50472', 'sql; sql; sql', 'Delete orphaned documentinfo and datablob rows that correspond to associatedDocIds of artifacts belonging to deleted PVs', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset dbF360_24.2.xml::f360_24.2_13::fortify
--  Remove orphaned records in applicationentity and related tables
DELETE FROM db_ssc_2222.projectversion_alert WHERE projectVersion_id IN (SELECT id FROM applicationentity
                WHERE NOT EXISTS (SELECT 1 FROM projectversion
                WHERE applicationentity.id = projectversion.id));

DELETE FROM db_ssc_2222.alerthistory WHERE projectVersion_id IN (SELECT id FROM applicationentity
                WHERE NOT EXISTS (SELECT 1 FROM projectversion
                WHERE applicationentity.id = projectversion.id));

DELETE FROM db_ssc_2222.metavalue WHERE projectVersion_id IN (SELECT id FROM applicationentity
                WHERE NOT EXISTS (SELECT 1 FROM projectversion
                WHERE applicationentity.id = projectversion.id));

DELETE FROM db_ssc_2222.report_applicationentity WHERE applicationEntity_id IN (SELECT id FROM applicationentity
                WHERE NOT EXISTS (SELECT 1 FROM projectversion
                WHERE applicationentity.id = projectversion.id));

DELETE FROM db_ssc_2222.runtimeapplication;

DELETE FROM db_ssc_2222.applicationentity WHERE NOT EXISTS (SELECT 1 FROM projectversion
                WHERE applicationentity.id = projectversion.id);

INSERT INTO db_ssc_2222.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('f360_24.2_13', 'fortify', 'dbF360_24.2.xml', NOW(), 842, '8:98d04489fa98f402050b6c32439a1afb', 'delete tableName=projectversion_alert; delete tableName=alerthistory; delete tableName=metavalue; delete tableName=report_applicationentity; delete tableName=runtimeapplication; delete tableName=applicationentity', 'Remove orphaned records in applicationentity and related tables', 'EXECUTED', NULL, NULL, '4.10.0', '0148965608');

--  Changeset procs/dbF360_updateExistingWithLatest.xml::updateExistingWithLatest_mysql::hp_main
DROP PROCEDURE IF EXISTS updateExistingWithLatest;

DELIMITER //
CREATE PROCEDURE updateExistingWithLatest    (p_scan_id INT,
     p_projectVersion_id INT,
     p_foundDate BIGINT,
     p_folder_id INT,
     p_customPriorityEnabled INT
    )
BEGIN
    INSERT INTO issue_extension(issue_id, projectVersion_id, issueInstanceId, engineType, reintroducedDate)
        SELECT i.id, p_projectVersion_id, i.issueInstanceId, i.engineType, p_foundDate
        FROM issue i INNER JOIN scan_issue si ON i.engineType = si.engineType AND i.issueInstanceId = si.issueInstanceId AND i.projectVersion_id = si.projectVersion_id
        WHERE si.scan_id = p_scan_id AND si.projectVersion_id = p_projectVersion_id AND i.scanStatus = 'REMOVED'
    ON DUPLICATE KEY UPDATE issue_extension.reintroducedDate = p_foundDate;

    insert into issue (lastScan_Id, scanStatus, issueInstanceId, projectVersion_Id, engineType
        , foundDate, shortFileName, fileName, severity, confidence, kingdom
        , issueType, issueSubtype, analyzer, lineNumber, taintFlag, packageName
        , functionName, className, issueAbstract, issueRecommendation, friority
        , replaceStore, ruleGuid, findingGuid, snippetId, contextId, category
        , url, source, sourceContext, sink, sinkContext, sourceFile
        , audienceSet, remediationConstant, likelihood, probability, impact
        , accuracy, rtaCovered, requestIdentifier, requestHeader, requestParameter
        , requestBody, requestMethod, cookie, httpVersion, attackPayload, attackType
        , attackTriggerDefinition , response, triggerDefinition, triggerString
        , triggerDisplayText, secondaryRequest, sourceLine, mappedCategory
        , vulnerableParameter, reproStepDefinition, stackTrace, stackTraceTriggerDisplayText
        , manual, minVirtualCallConfidence, hidden, folder_Id, objectVersion)
	select scan_Id, 'NEW', issueInstanceId, projectVersion_Id, engineType, p_foundDate
        , shortFileName, fileName, severity, confidence, kingdom, issueType, issueSubtype
        , analyzer, lineNumber, taintFlag, packageName, functionName, className, issueAbstract
        , issueRecommendation, friority, replaceStore, ruleGuid, findingGuid, snippetId, contextId
        , category, url, source, sourceContext, sink, sinkContext, sourceFile, audienceSet
        , remediationConstant, likelihood, probability, impact, accuracy, rtaCovered
        , requestIdentifier, requestHeader, requestParameter, requestBody, requestMethod, cookie
        , httpVersion, attackPayload, attackType, attackTriggerDefinition, response
        , triggerDefinition, triggerString, triggerDisplayText, secondaryRequest, sourceLine
        , mappedCategory, vulnerableParameter, reproStepDefinition, stackTrace
        , stackTraceTriggerDisplayText, manual, minVirtualCallConfidence, 'N', p_folder_id, 0 from scan_issue si where si.projectVersion_id = p_projectVersion_id and si.scan_id = p_scan_id
	 on duplicate key update issue.lastScan_Id= si.scan_id
        , issue.shortFileName=si.shortFileName, issue.fileName=si.fileName, issue.severity=si.severity, issue.confidence=si.confidence, issue.kingdom=si.kingdom, issue.issueType=si.issueType
        , issue.issueSubtype=si.issueSubtype, issue.analyzer=si.analyzer, issue.engineType=si.engineType, issue.lineNumber=si.lineNumber, issue.taintFlag=si.taintFlag, issue.packageName=si.packageName
        , issue.functionName=si.functionName, issue.className=si.className, issue.issueAbstract=si.issueAbstract, issue.issueRecommendation=si.issueRecommendation
        , issue.friority = (case when p_customPriorityEnabled = 0 or issue.enginePriority is null then si.friority else issue.friority end)
        , issue.enginePriority = (case when p_customPriorityEnabled = 0 or issue.enginePriority is null then null else si.friority end)
	    , issue.replaceStore=si.replaceStore
        , issue.ruleGuid=si.ruleGuid, issue.snippetId=si.snippetId, issue.contextId=si.contextId, issue.category=si.category, issue.url=si.url, issue.source=si.source, issue.sourceContext=si.sourceContext, issue.sink=si.sink
        , issue.sinkContext=si.sinkContext, issue.sourceFile=si.sourceFile, issue.audienceSet=si.audienceSet
        , issue.scanStatus = (CASE WHEN issue.scanStatus='REMOVED' THEN 'REINTRODUCED' ELSE 'UPDATED' END)
        , issue.findingGuid = si.findingGuid, issue.remediationConstant=si.remediationConstant,issue.likelihood=si.likelihood,issue.impact=si.impact, issue.accuracy=si.accuracy
        , issue.rtaCovered=si.rtaCovered,issue.probability=si.probability
        , issue.requestIdentifier=si.requestIdentifier, issue.requestHeader=si.requestHeader, issue.requestParameter=si.requestParameter, issue.requestBody=si.requestBody, issue.requestMethod=si.requestMethod
        , issue.cookie=si.cookie, issue.httpVersion=si.httpVersion, issue.attackPayload=si.attackPayload, issue.attackType=si.attackType, issue.response=si.response, issue.triggerDefinition=si.triggerDefinition, issue.triggerString=si.triggerString
        , issue.triggerDisplayText=si.triggerDisplayText, issue.secondaryRequest=si.secondaryRequest, issue.sourceLine=si.sourceLine, issue.mappedCategory=si.mappedCategory
        , issue.minVirtualCallConfidence=si.minVirtualCallConfidence;

    insert into issue_ca (issue_id, projectVersion_id, issueInstanceId, engineType, dataVersion, metadataPluginId,
			integerValue01, integerValue02, integerValue03, decimalValue01, decimalValue02, decimalValue03, decimalValue04, decimalValue05,
			dateValue01, dateValue02, dateValue03, dateValue04, dateValue05,
			textValue01, textValue02, textValue03, textValue04, textValue05, textValue06, textValue07, textValue08, textValue09, textValue10, textValue11, textValue12, textValue13, textValue14, textValue15, textValue16,
			clobValue01, clobValue02, clobValue03, clobValue04, clobValue05, clobValue06)
	select i.id, sica.projectVersion_id, sica.issueInstanceId, sica.engineType, sica.dataVersion, sica.metadataPluginId,
			sica.integerValue01, sica.integerValue02, sica.integerValue03, sica.decimalValue01, sica.decimalValue02, sica.decimalValue03, sica.decimalValue04, sica.decimalValue05,
			sica.dateValue01, sica.dateValue02, sica.dateValue03, sica.dateValue04, sica.dateValue05,
			sica.textValue01, sica.textValue02, sica.textValue03, sica.textValue04, sica.textValue05, sica.textValue06, sica.textValue07, sica.textValue08, sica.textValue09, sica.textValue10, sica.textValue11, sica.textValue12, sica.textValue13, sica.textValue14, sica.textValue15, sica.textValue16,
			sica.clobValue01, sica.clobValue02, sica.clobValue03, sica.clobValue04, sica.clobValue05, sica.clobValue06
	    from scan_issue_ca sica
	    join issue i ON i.engineType=sica.engineType AND i.issueInstanceId=sica.issueInstanceId where sica.scan_id = p_scan_id AND sica.projectVersion_id = p_projectVersion_id AND i.projectVersion_id=p_projectVersion_id
	on duplicate key update issue_ca.issueInstanceId=sica.issueInstanceId, issue_ca.engineType=sica.engineType, issue_ca.dataVersion=sica.dataVersion,
			issue_ca.integerValue01=sica.integerValue01, issue_ca.integerValue02=sica.integerValue02, issue_ca.integerValue03=sica.integerValue03, issue_ca.decimalValue01=sica.decimalValue01, issue_ca.decimalValue02=sica.decimalValue02, issue_ca.decimalValue03=sica.decimalValue03, issue_ca.decimalValue04=sica.decimalValue04, issue_ca.decimalValue05=sica.decimalValue05,
			issue_ca.dateValue01=sica.dateValue01, issue_ca.dateValue02=sica.dateValue02, issue_ca.dateValue03=sica.dateValue03, issue_ca.dateValue04=sica.dateValue04, issue_ca.dateValue05=sica.dateValue05,
			issue_ca.textValue01=sica.textValue01, issue_ca.textValue02=sica.textValue02, issue_ca.textValue03=sica.textValue03, issue_ca.textValue04=sica.textValue04, issue_ca.textValue05=sica.textValue05, issue_ca.textValue06=sica.textValue06, issue_ca.textValue07=sica.textValue07, issue_ca.textValue08=sica.textValue08, issue_ca.textValue09=sica.textValue09, issue_ca.textValue10=sica.textValue10,
			issue_ca.textValue11=sica.textValue11, issue_ca.textValue12=sica.textValue12, issue_ca.textValue13=sica.textValue13, issue_ca.textValue14=sica.textValue14, issue_ca.textValue15=sica.textValue15, issue_ca.textValue16=sica.textValue16,
			issue_ca.clobValue01=sica.clobValue01, issue_ca.clobValue02=sica.clobValue02, issue_ca.clobValue03=sica.clobValue03, issue_ca.clobValue04=sica.clobValue04, issue_ca.clobValue05=sica.clobValue05, issue_ca.clobValue06=sica.clobValue06;

END//
DELIMITER ;

UPDATE db_ssc_2222.DATABASECHANGELOG SET COMMENTS = '', CONTEXTS = NULL, DATEEXECUTED = NOW(), DEPLOYMENT_ID = '0148965608', EXECTYPE = 'RERAN', LABELS = NULL, MD5SUM = '8:eb053150f34f5adc61b0b16f91762166', ORDEREXECUTED = 843 WHERE ID = 'updateExistingWithLatest_mysql' AND AUTHOR = 'hp_main' AND FILENAME = 'procs/dbF360_updateExistingWithLatest.xml';

--  Release Database Lock
UPDATE db_ssc_2222.DATABASECHANGELOGLOCK SET `LOCKED` = 0, LOCKEDBY = NULL, LOCKGRANTED = NULL WHERE ID = 1;
위로 스크롤