From a3d54f6ee410b1baa45345d8787bc659d4234419 Mon Sep 17 00:00:00 2001 From: Cedric CAFFY <cedric.caffy@cern.ch> Date: Fri, 20 Dec 2019 12:11:18 +0100 Subject: [PATCH] Added support for MySQL and Postgres to the cta-catalogue-schema-verify tool --- catalogue/CatalogueMetadataGetter.cpp | 62 ++++++++++++++++++++++++--- catalogue/CatalogueMetadataGetter.hpp | 24 +++++++++-- catalogue/SchemaChecker.cpp | 2 +- rdbms/wrapper/OcciConn.cpp | 2 +- rdbms/wrapper/SqliteConn.cpp | 5 +++ 5 files changed, 83 insertions(+), 12 deletions(-) diff --git a/catalogue/CatalogueMetadataGetter.cpp b/catalogue/CatalogueMetadataGetter.cpp index e294eee562..8aeef19753 100644 --- a/catalogue/CatalogueMetadataGetter.cpp +++ b/catalogue/CatalogueMetadataGetter.cpp @@ -54,25 +54,37 @@ std::string CatalogueMetadataGetter::getCatalogueVersion(){ } } +std::list<std::string> CatalogueMetadataGetter::getTableNames(){ + return m_conn.getTableNames(); +} + +std::list<std::string> CatalogueMetadataGetter::getIndexNames(){ + return m_conn.getIndexNames(); +} + +std::map<std::string,std::string> CatalogueMetadataGetter::getColumns(const std::string& tableName){ + return m_conn.getColumns(tableName); +} + CatalogueMetadataGetter::~CatalogueMetadataGetter() {} SQLiteCatalogueMetadataGetter::SQLiteCatalogueMetadataGetter(cta::rdbms::Conn & conn):CatalogueMetadataGetter(conn){} SQLiteCatalogueMetadataGetter::~SQLiteCatalogueMetadataGetter(){} std::list<std::string> SQLiteCatalogueMetadataGetter::getIndexNames() { - std::list<std::string> indexNames = m_conn.getIndexNames(); + std::list<std::string> indexNames = CatalogueMetadataGetter::getIndexNames(); removeObjectNameContaining(indexNames,{"sqlite_autoindex"}); return indexNames; } std::list<std::string> SQLiteCatalogueMetadataGetter::getTableNames(){ - std::list<std::string> tableNames = m_conn.getTableNames(); + std::list<std::string> tableNames = CatalogueMetadataGetter::getTableNames(); removeObjectNameContaining(tableNames,{"sqlite_sequence"}); return tableNames; } std::map<std::string, std::string> SQLiteCatalogueMetadataGetter::getColumns(const std::string& tableName){ - return m_conn.getColumns(tableName); + return CatalogueMetadataGetter::getColumns(tableName); } @@ -80,18 +92,50 @@ OracleCatalogueMetadataGetter::OracleCatalogueMetadataGetter(cta::rdbms::Conn & OracleCatalogueMetadataGetter::~OracleCatalogueMetadataGetter(){} std::list<std::string> OracleCatalogueMetadataGetter::getIndexNames() { - std::list<std::string> indexNames = m_conn.getIndexNames(); + std::list<std::string> indexNames = CatalogueMetadataGetter::getIndexNames(); removeObjectNameContaining(indexNames,{"_UN","PK","_LLN"}); return indexNames; } std::list<std::string> OracleCatalogueMetadataGetter::getTableNames() { - std::list<std::string> tableNames = m_conn.getTableNames(); + std::list<std::string> tableNames = CatalogueMetadataGetter::getTableNames(); return tableNames; } std::map<std::string, std::string> OracleCatalogueMetadataGetter::getColumns(const std::string& tableName){ - return m_conn.getColumns(tableName); + return CatalogueMetadataGetter::getColumns(tableName); +} + +MySQLCatalogueMetadataGetter::MySQLCatalogueMetadataGetter(cta::rdbms::Conn& conn):CatalogueMetadataGetter(conn) {} +MySQLCatalogueMetadataGetter::~MySQLCatalogueMetadataGetter(){} + +std::list<std::string> MySQLCatalogueMetadataGetter::getIndexNames() { + std::list<std::string> indexNames = CatalogueMetadataGetter::getIndexNames(); + //removeObjectNameContaining(indexNames,{"User","Grantor", "_ID", "_NAME"}); + return indexNames; +} + +std::list<std::string> MySQLCatalogueMetadataGetter::getTableNames() { + return CatalogueMetadataGetter::getTableNames(); +} + +std::map<std::string, std::string> MySQLCatalogueMetadataGetter::getColumns(const std::string& tableName){ + return CatalogueMetadataGetter::getColumns(tableName); +} + +PostgresCatalogueMetadataGetter::PostgresCatalogueMetadataGetter(cta::rdbms::Conn& conn):CatalogueMetadataGetter(conn) {} +PostgresCatalogueMetadataGetter::~PostgresCatalogueMetadataGetter(){} + +std::list<std::string> PostgresCatalogueMetadataGetter::getIndexNames() { + return CatalogueMetadataGetter::getIndexNames(); +} + +std::list<std::string> PostgresCatalogueMetadataGetter::getTableNames() { + return CatalogueMetadataGetter::getTableNames(); +} + +std::map<std::string, std::string> PostgresCatalogueMetadataGetter::getColumns(const std::string& tableName){ + return CatalogueMetadataGetter::getColumns(tableName); } CatalogueMetadataGetter * CatalogueMetadataGetterFactory::create(const rdbms::Login::DbType dbType, cta::rdbms::Conn & conn) { @@ -102,8 +146,12 @@ CatalogueMetadataGetter * CatalogueMetadataGetterFactory::create(const rdbms::Lo return new SQLiteCatalogueMetadataGetter(conn); case DbType::DBTYPE_ORACLE: return new OracleCatalogueMetadataGetter(conn); + case DbType::DBTYPE_MYSQL: + return new MySQLCatalogueMetadataGetter(conn); + case DbType::DBTYPE_POSTGRESQL: + return new PostgresCatalogueMetadataGetter(conn); default: - return nullptr; + throw cta::exception::Exception("In CatalogueMetadataGetterFactory::create(), can't get CatalogueMetadataGetter for dbType "+rdbms::Login::dbTypeToString(dbType)); } } diff --git a/catalogue/CatalogueMetadataGetter.hpp b/catalogue/CatalogueMetadataGetter.hpp index 29e109536a..ae38d5f9c4 100644 --- a/catalogue/CatalogueMetadataGetter.hpp +++ b/catalogue/CatalogueMetadataGetter.hpp @@ -34,9 +34,9 @@ class CatalogueMetadataGetter { CatalogueMetadataGetter(cta::rdbms::Conn & conn); virtual ~CatalogueMetadataGetter(); std::string getCatalogueVersion(); - virtual std::list<std::string> getIndexNames() = 0; - virtual std::list<std::string> getTableNames() = 0; - virtual std::map<std::string,std::string> getColumns(const std::string& tableName) = 0; + virtual std::list<std::string> getIndexNames(); + virtual std::list<std::string> getTableNames(); + virtual std::map<std::string,std::string> getColumns(const std::string& tableName); }; class SQLiteCatalogueMetadataGetter: public CatalogueMetadataGetter{ @@ -57,6 +57,24 @@ class OracleCatalogueMetadataGetter: public CatalogueMetadataGetter{ std::map<std::string,std::string> getColumns(const std::string& tableName) override; }; +class MySQLCatalogueMetadataGetter: public CatalogueMetadataGetter{ + public: + MySQLCatalogueMetadataGetter(cta::rdbms::Conn &conn); + virtual ~MySQLCatalogueMetadataGetter(); + std::list<std::string> getIndexNames() override; + std::list<std::string> getTableNames() override; + std::map<std::string,std::string> getColumns(const std::string& tableName) override; +}; + +class PostgresCatalogueMetadataGetter: public CatalogueMetadataGetter{ + public: + PostgresCatalogueMetadataGetter(cta::rdbms::Conn &conn); + virtual ~PostgresCatalogueMetadataGetter(); + std::list<std::string> getIndexNames() override; + std::list<std::string> getTableNames() override; + std::map<std::string,std::string> getColumns(const std::string& tableName) override; +}; + class CatalogueMetadataGetterFactory { public: static CatalogueMetadataGetter* create(const rdbms::Login::DbType dbType, cta::rdbms::Conn & conn); diff --git a/catalogue/SchemaChecker.cpp b/catalogue/SchemaChecker.cpp index 755db61387..e7944f5918 100644 --- a/catalogue/SchemaChecker.cpp +++ b/catalogue/SchemaChecker.cpp @@ -49,7 +49,7 @@ SchemaChecker::Status SchemaChecker::compareSchema(){ void SchemaChecker::checkNoParallelTables(){ std::list<std::string> parallelTables = m_catalogueConn.getParallelTableNames(); for(auto& table:parallelTables) { - std::cout << "WARNING : " << table << " is set as PARALLEL" << std::endl; + std::cout << "WARNING : TABLE " << table << " is set as PARALLEL" << std::endl; } } diff --git a/rdbms/wrapper/OcciConn.cpp b/rdbms/wrapper/OcciConn.cpp index ef48c1c2f7..114b8618a0 100644 --- a/rdbms/wrapper/OcciConn.cpp +++ b/rdbms/wrapper/OcciConn.cpp @@ -296,7 +296,7 @@ std::list<std::string> OcciConn::getParallelTableNames() { "FROM " "USER_TABLES " "WHERE " - "DEGREE NOT LIKE '%1%' " + "TRIM(DEGREE) NOT LIKE '1' " "ORDER BY " "TABLE_NAME"; auto stmt = createStmt(sql); diff --git a/rdbms/wrapper/SqliteConn.cpp b/rdbms/wrapper/SqliteConn.cpp index 3033088405..d4bd8f7454 100644 --- a/rdbms/wrapper/SqliteConn.cpp +++ b/rdbms/wrapper/SqliteConn.cpp @@ -250,6 +250,11 @@ std::map<std::string, std::string> SqliteConn::getColumns(const std::string &tab "VARCHAR|" "VARCHAR2|" "BLOB|" + "BIGINT|" + "SMALLINT|" + "INT|" + "TINYINT|" + "VARBINARY|" "RAW"; auto stmt = createStmt(sql); -- GitLab