From 67b0a776f6b60315c61a1c1a3b83f850493fb86c Mon Sep 17 00:00:00 2001
From: Cedric CAFFY <cedric.caffy@cern.ch>
Date: Fri, 17 Jan 2020 10:10:24 +0100
Subject: [PATCH] Added preconditions to Oracle Liquibase changeLog file to
 check schema version number

Corrected the MapSqlStatementsReader::getStatements() method so that it throws an exception if the schema corresponding to a version does not exist
---
 catalogue/SchemaSqlStatementsReader.cpp            | 14 ++++++++++++--
 catalogue/migrations/liquibase/oracle/1.0to1.1.sql | 10 ++++++++++
 .../example-liquibase-oracle.properties            |  5 +++--
 3 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/catalogue/SchemaSqlStatementsReader.cpp b/catalogue/SchemaSqlStatementsReader.cpp
index 254d5c07dd..1c37a57e44 100644
--- a/catalogue/SchemaSqlStatementsReader.cpp
+++ b/catalogue/SchemaSqlStatementsReader.cpp
@@ -156,8 +156,18 @@ MapSqlStatementsReader::~MapSqlStatementsReader() {
 }
 
 std::list<std::string> MapSqlStatementsReader::getStatements(){
-  std::string schema = AllCatalogueSchema::mapSchema[m_catalogueVersion][getDatabaseType()];
-  return getAllStatementsFromSchema(schema);
+  std::map<std::string,std::string> mapVersionSchemas;
+  try {
+    mapVersionSchemas = AllCatalogueSchema::mapSchema.at(m_catalogueVersion);
+  } catch(const std::out_of_range &ex){
+    throw cta::exception::Exception("No schema has been found for version number "+m_catalogueVersion);
+  }
+  try {
+    std::string schema = mapVersionSchemas.at(getDatabaseType());
+    return getAllStatementsFromSchema(schema);
+  } catch(const std::out_of_range &ex){
+    throw cta::exception::Exception("No schema has been found for database type "+getDatabaseType());
+  }
 }
 
 }}
diff --git a/catalogue/migrations/liquibase/oracle/1.0to1.1.sql b/catalogue/migrations/liquibase/oracle/1.0to1.1.sql
index 7efa089fda..22d3713a17 100644
--- a/catalogue/migrations/liquibase/oracle/1.0to1.1.sql
+++ b/catalogue/migrations/liquibase/oracle/1.0to1.1.sql
@@ -1,21 +1,31 @@
 --liquibase formatted sql
 
 --changeset ccaffy:1 failOnError:true dbms:oracle
+--preconditions onFail:HALT onError:HALT
+--precondition-sql-check expectedResult:"1.0" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
 ALTER INDEX TEMP_T_F_I_B_ARCHIVE_FILE_ID_I RENAME TO TEMP_T_F_I_B_AFI_IDX;
 --rollback ALTER INDEX TEMP_T_F_I_B_AFI_IDX RENAME TO TEMP_T_F_I_B_ARCHIVE_FILE_ID_I;
 
 --changeset ccaffy:2 failOnError:true dbms:oracle
+--preconditions onFail:HALT onError:HALT
+--precondition-sql-check expectedResult:"1.0" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
 ALTER TABLE USAGESTATS RENAME CONSTRAINT NN_USAGESTATS_GID TO USAGESTATS_GID_NN;
 --rollback ALTER TABLE USAGESTATS RENAME CONSTRAINT USAGESTATS_GID_NN TO NN_USAGESTATS_GID;
 
 --changeset ccaffy:3 failOnError:true dbms:oracle
+--preconditions onFail:HALT onError:HALT
+--precondition-sql-check expectedResult:"1.0" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
 ALTER TABLE USAGESTATS RENAME CONSTRAINT NN_USAGESTATS_TS TO USAGESTATS_TS_NN;
 --rollback ALTER TABLE USAGESTATS RENAME CONSTRAINT USAGESTATS_TS_NN TO NN_USAGESTATS_TS;
 
 --changeset ccaffy:4 failOnError:true dbms:oracle
+--preconditions onFail:HALT onError:HALT
+--precondition-sql-check expectedResult:"1.0" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
 ALTER TABLE ARCHIVE_ROUTE ADD CONSTRAINT ARCHIVE_ROUTE_SCI_TPI_UN UNIQUE(STORAGE_CLASS_ID, TAPE_POOL_ID);
 --rollback ALTER TABLE ARCHIVE_ROUTE DROP CONSTRAINT ARCHIVE_ROUTE_SCI_TPI_UN; 
 
 --changeset ccaffy:5 failOnError:true dbms:oracle
+--preconditions onFail:HALT onError:HALT
+--precondition-sql-check expectedResult:"1.0" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
 UPDATE CTA_CATALOGUE SET SCHEMA_VERSION_MINOR=1
 --rollback UPDATE CTA_CATALOGUE SET SCHEMA_VERSION_MINOR=0
diff --git a/catalogue/migrations/liquibase/properties-examples/example-liquibase-oracle.properties b/catalogue/migrations/liquibase/properties-examples/example-liquibase-oracle.properties
index 2c76bf028c..56327fcafd 100644
--- a/catalogue/migrations/liquibase/properties-examples/example-liquibase-oracle.properties
+++ b/catalogue/migrations/liquibase/properties-examples/example-liquibase-oracle.properties
@@ -1,5 +1,6 @@
+#
 url: jdbc:oracle:thin:@HOST:PORT/SERVICE_NAME
-username: MYSCHEMA
-password: password
+username: USERNAME
+password: PASSWORD
 driver: oracle.jdbc.OracleDriver
 classpath: ../drivers/ojdbc8.jar
\ No newline at end of file
-- 
GitLab