Skip to content
Snippets Groups Projects
Commit a3d54f6e authored by Cedric CAFFY's avatar Cedric CAFFY
Browse files

Added support for MySQL and Postgres to the cta-catalogue-schema-verify tool

parent 1d2d65ec
Branches
Tags
No related merge requests found
...@@ -54,25 +54,37 @@ std::string CatalogueMetadataGetter::getCatalogueVersion(){ ...@@ -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() {} CatalogueMetadataGetter::~CatalogueMetadataGetter() {}
SQLiteCatalogueMetadataGetter::SQLiteCatalogueMetadataGetter(cta::rdbms::Conn & conn):CatalogueMetadataGetter(conn){} SQLiteCatalogueMetadataGetter::SQLiteCatalogueMetadataGetter(cta::rdbms::Conn & conn):CatalogueMetadataGetter(conn){}
SQLiteCatalogueMetadataGetter::~SQLiteCatalogueMetadataGetter(){} SQLiteCatalogueMetadataGetter::~SQLiteCatalogueMetadataGetter(){}
std::list<std::string> SQLiteCatalogueMetadataGetter::getIndexNames() { 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"}); removeObjectNameContaining(indexNames,{"sqlite_autoindex"});
return indexNames; return indexNames;
} }
std::list<std::string> SQLiteCatalogueMetadataGetter::getTableNames(){ 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"}); removeObjectNameContaining(tableNames,{"sqlite_sequence"});
return tableNames; return tableNames;
} }
std::map<std::string, std::string> SQLiteCatalogueMetadataGetter::getColumns(const std::string& tableName){ 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 & ...@@ -80,18 +92,50 @@ OracleCatalogueMetadataGetter::OracleCatalogueMetadataGetter(cta::rdbms::Conn &
OracleCatalogueMetadataGetter::~OracleCatalogueMetadataGetter(){} OracleCatalogueMetadataGetter::~OracleCatalogueMetadataGetter(){}
std::list<std::string> OracleCatalogueMetadataGetter::getIndexNames() { 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"}); removeObjectNameContaining(indexNames,{"_UN","PK","_LLN"});
return indexNames; return indexNames;
} }
std::list<std::string> OracleCatalogueMetadataGetter::getTableNames() { std::list<std::string> OracleCatalogueMetadataGetter::getTableNames() {
std::list<std::string> tableNames = m_conn.getTableNames(); std::list<std::string> tableNames = CatalogueMetadataGetter::getTableNames();
return tableNames; return tableNames;
} }
std::map<std::string, std::string> OracleCatalogueMetadataGetter::getColumns(const std::string& tableName){ 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) { CatalogueMetadataGetter * CatalogueMetadataGetterFactory::create(const rdbms::Login::DbType dbType, cta::rdbms::Conn & conn) {
...@@ -102,8 +146,12 @@ CatalogueMetadataGetter * CatalogueMetadataGetterFactory::create(const rdbms::Lo ...@@ -102,8 +146,12 @@ CatalogueMetadataGetter * CatalogueMetadataGetterFactory::create(const rdbms::Lo
return new SQLiteCatalogueMetadataGetter(conn); return new SQLiteCatalogueMetadataGetter(conn);
case DbType::DBTYPE_ORACLE: case DbType::DBTYPE_ORACLE:
return new OracleCatalogueMetadataGetter(conn); return new OracleCatalogueMetadataGetter(conn);
case DbType::DBTYPE_MYSQL:
return new MySQLCatalogueMetadataGetter(conn);
case DbType::DBTYPE_POSTGRESQL:
return new PostgresCatalogueMetadataGetter(conn);
default: default:
return nullptr; throw cta::exception::Exception("In CatalogueMetadataGetterFactory::create(), can't get CatalogueMetadataGetter for dbType "+rdbms::Login::dbTypeToString(dbType));
} }
} }
......
...@@ -34,9 +34,9 @@ class CatalogueMetadataGetter { ...@@ -34,9 +34,9 @@ class CatalogueMetadataGetter {
CatalogueMetadataGetter(cta::rdbms::Conn & conn); CatalogueMetadataGetter(cta::rdbms::Conn & conn);
virtual ~CatalogueMetadataGetter(); virtual ~CatalogueMetadataGetter();
std::string getCatalogueVersion(); std::string getCatalogueVersion();
virtual std::list<std::string> getIndexNames() = 0; virtual std::list<std::string> getIndexNames();
virtual std::list<std::string> getTableNames() = 0; virtual std::list<std::string> getTableNames();
virtual std::map<std::string,std::string> getColumns(const std::string& tableName) = 0; virtual std::map<std::string,std::string> getColumns(const std::string& tableName);
}; };
class SQLiteCatalogueMetadataGetter: public CatalogueMetadataGetter{ class SQLiteCatalogueMetadataGetter: public CatalogueMetadataGetter{
...@@ -57,6 +57,24 @@ class OracleCatalogueMetadataGetter: public CatalogueMetadataGetter{ ...@@ -57,6 +57,24 @@ class OracleCatalogueMetadataGetter: public CatalogueMetadataGetter{
std::map<std::string,std::string> getColumns(const std::string& tableName) override; 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 { class CatalogueMetadataGetterFactory {
public: public:
static CatalogueMetadataGetter* create(const rdbms::Login::DbType dbType, cta::rdbms::Conn & conn); static CatalogueMetadataGetter* create(const rdbms::Login::DbType dbType, cta::rdbms::Conn & conn);
......
...@@ -49,7 +49,7 @@ SchemaChecker::Status SchemaChecker::compareSchema(){ ...@@ -49,7 +49,7 @@ SchemaChecker::Status SchemaChecker::compareSchema(){
void SchemaChecker::checkNoParallelTables(){ void SchemaChecker::checkNoParallelTables(){
std::list<std::string> parallelTables = m_catalogueConn.getParallelTableNames(); std::list<std::string> parallelTables = m_catalogueConn.getParallelTableNames();
for(auto& table:parallelTables) { 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;
} }
} }
......
...@@ -296,7 +296,7 @@ std::list<std::string> OcciConn::getParallelTableNames() { ...@@ -296,7 +296,7 @@ std::list<std::string> OcciConn::getParallelTableNames() {
"FROM " "FROM "
"USER_TABLES " "USER_TABLES "
"WHERE " "WHERE "
"DEGREE NOT LIKE '%1%' " "TRIM(DEGREE) NOT LIKE '1' "
"ORDER BY " "ORDER BY "
"TABLE_NAME"; "TABLE_NAME";
auto stmt = createStmt(sql); auto stmt = createStmt(sql);
......
...@@ -250,6 +250,11 @@ std::map<std::string, std::string> SqliteConn::getColumns(const std::string &tab ...@@ -250,6 +250,11 @@ std::map<std::string, std::string> SqliteConn::getColumns(const std::string &tab
"VARCHAR|" "VARCHAR|"
"VARCHAR2|" "VARCHAR2|"
"BLOB|" "BLOB|"
"BIGINT|"
"SMALLINT|"
"INT|"
"TINYINT|"
"VARBINARY|"
"RAW"; "RAW";
auto stmt = createStmt(sql); auto stmt = createStmt(sql);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment