Search in sources :

Example 1 with PostgreSqlDbProvider

use of com.axway.ats.core.dbaccess.postgresql.PostgreSqlDbProvider in project ats-framework by Axway.

the class DatabaseProviderFactory method getDatabaseProvider.

/**
 * Creates a database provider suitable for the given input arguments
 *
 * @param dbType
 * @param dbHost
 * @param dbName
 * @param dbUser
 * @param dbPass
 * @param dbPort
 * @param customProperties
 * @return
 */
public static synchronized DbProvider getDatabaseProvider(String dbType, String dbHost, String dbName, String dbUser, String dbPass, int dbPort, Map<String, Object> customProperties) {
    DbProvider dbProvider;
    if (dbType == null) {
        throw new IllegalArgumentException("Database type is not provided");
    }
    dbType = dbType.toUpperCase();
    if (dbName == null) {
        if ("MSSQL".equals(dbType)) {
            log.warn("Database name is empty! The connection will be made to the admin database!");
        } else {
            throw new IllegalArgumentException("Database name is not provided");
        }
    }
    // eventual custom property value
    if (dbPort > 0) {
        if (customProperties == null) {
            customProperties = new HashMap<String, Object>();
        }
        customProperties.put(DbKeys.PORT_KEY, dbPort);
    }
    // load a custom data provider
    if (dbProviders.containsKey(dbType)) {
        String[] classNames = dbProviders.get(dbType);
        DbConnection dbConnection = loadDbConnection(classNames[0], dbType, dbHost, dbName, dbUser, dbPass, dbPort, customProperties);
        return loadCustomDbProvider(classNames[1], dbConnection);
    }
    // load a common ATS supported data provider
    switch(dbType) {
        case DbConnSQLServer.DATABASE_TYPE:
            dbProvider = new MssqlDbProvider((DbConnSQLServer) createDbConnection(dbType, dbHost, dbPort, dbName, dbUser, dbPass, customProperties));
            break;
        case DbConnPostgreSQL.DATABASE_TYPE:
            dbProvider = new PostgreSqlDbProvider((DbConnPostgreSQL) createDbConnection(dbType, dbHost, dbPort, dbName, dbUser, dbPass, customProperties));
            break;
        case DbConnMySQL.DATABASE_TYPE:
            dbProvider = new MysqlDbProvider((DbConnMySQL) createDbConnection(dbType, dbHost, dbPort, dbName, dbUser, dbPass, customProperties));
            break;
        case DbConnMariaDB.DATABASE_TYPE:
            dbProvider = new MariaDbDbProvider((DbConnMariaDB) createDbConnection(dbType, dbHost, dbPort, dbName, dbUser, dbPass, customProperties));
            break;
        case DbConnOracle.DATABASE_TYPE:
            dbProvider = new OracleDbProvider((DbConnOracle) createDbConnection(dbType, dbHost, dbPort, dbName, dbUser, dbPass, customProperties));
            break;
        case DbConnCassandra.DATABASE_TYPE:
            dbProvider = new CassandraDbProvider((DbConnCassandra) createDbConnection(dbType, dbHost, dbPort, dbName, dbUser, dbPass, customProperties));
            break;
        default:
            {
                // should never happen
                throw new IllegalArgumentException("Database type " + dbType + " not supported");
            }
    }
    return dbProvider;
}
Also used : OracleDbProvider(com.axway.ats.core.dbaccess.oracle.OracleDbProvider) DbConnMariaDB(com.axway.ats.core.dbaccess.mariadb.DbConnMariaDB) MssqlDbProvider(com.axway.ats.core.dbaccess.mssql.MssqlDbProvider) DbConnSQLServer(com.axway.ats.core.dbaccess.mssql.DbConnSQLServer) PostgreSqlDbProvider(com.axway.ats.core.dbaccess.postgresql.PostgreSqlDbProvider) MysqlDbProvider(com.axway.ats.core.dbaccess.mysql.MysqlDbProvider) DbConnMySQL(com.axway.ats.core.dbaccess.mysql.DbConnMySQL) DbConnOracle(com.axway.ats.core.dbaccess.oracle.DbConnOracle) DbConnPostgreSQL(com.axway.ats.core.dbaccess.postgresql.DbConnPostgreSQL) CassandraDbProvider(com.axway.ats.core.dbaccess.cassandra.CassandraDbProvider) OracleDbProvider(com.axway.ats.core.dbaccess.oracle.OracleDbProvider) PostgreSqlDbProvider(com.axway.ats.core.dbaccess.postgresql.PostgreSqlDbProvider) MssqlDbProvider(com.axway.ats.core.dbaccess.mssql.MssqlDbProvider) MysqlDbProvider(com.axway.ats.core.dbaccess.mysql.MysqlDbProvider) MariaDbDbProvider(com.axway.ats.core.dbaccess.mariadb.MariaDbDbProvider) MariaDbDbProvider(com.axway.ats.core.dbaccess.mariadb.MariaDbDbProvider) DbConnCassandra(com.axway.ats.core.dbaccess.cassandra.DbConnCassandra) CassandraDbProvider(com.axway.ats.core.dbaccess.cassandra.CassandraDbProvider)

Example 2 with PostgreSqlDbProvider

use of com.axway.ats.core.dbaccess.postgresql.PostgreSqlDbProvider in project ats-framework by Axway.

the class DatabaseSnapshot method constructSelectStatement.

private String constructSelectStatement(TableDescription table, Map<String, SkipColumns> skipColumns) {
    Set<String> columns = table.getColumnNames();
    // Search for skip columns for this table. The search must ignore the letters case
    SkipColumns skipColumnsForThisTable = null;
    for (String tableName : skipColumns.keySet()) {
        if (tableName.equalsIgnoreCase(table.getName())) {
            skipColumnsForThisTable = skipColumns.get(tableName);
            break;
        }
    }
    if (skipColumnsForThisTable == null) {
        String query = "SELECT * FROM ";
        if (this.dbProvider instanceof PostgreSqlDbProvider) {
            List<String> sortedColumns = new ArrayList<>(columns);
            Collections.sort(sortedColumns);
            query = "SELECT " + String.join(", ", sortedColumns) + " FROM ";
        }
        // all columns are important
        if (table.getSchema() != null) {
            query += table.getSchema() + ".";
        }
        return query + table.getName();
    } else {
        // some columns must be skipped
        StringBuilder sql = new StringBuilder("SELECT");
        // add all important columns
        for (String column : columns) {
            if (!skipColumnsForThisTable.isSkipColumn(column)) {
                sql.append(" " + column + ",");
            }
        }
        if ("SELECT".equals(sql.toString())) {
            // so no column are left for selection, so we won't select anything
            return null;
        } else {
            // remove last comma
            sql.setLength(sql.length() - 1);
            sql.append(" FROM ");
            if (table.getSchema() != null) {
                sql.append(table.getSchema()).append(".");
            }
            sql.append(table.getName());
            return sql.toString();
        }
    }
}
Also used : ArrayList(java.util.ArrayList) PostgreSqlDbProvider(com.axway.ats.core.dbaccess.postgresql.PostgreSqlDbProvider) SkipColumns(com.axway.ats.action.dbaccess.snapshot.rules.SkipColumns)

Aggregations

PostgreSqlDbProvider (com.axway.ats.core.dbaccess.postgresql.PostgreSqlDbProvider)2 SkipColumns (com.axway.ats.action.dbaccess.snapshot.rules.SkipColumns)1 CassandraDbProvider (com.axway.ats.core.dbaccess.cassandra.CassandraDbProvider)1 DbConnCassandra (com.axway.ats.core.dbaccess.cassandra.DbConnCassandra)1 DbConnMariaDB (com.axway.ats.core.dbaccess.mariadb.DbConnMariaDB)1 MariaDbDbProvider (com.axway.ats.core.dbaccess.mariadb.MariaDbDbProvider)1 DbConnSQLServer (com.axway.ats.core.dbaccess.mssql.DbConnSQLServer)1 MssqlDbProvider (com.axway.ats.core.dbaccess.mssql.MssqlDbProvider)1 DbConnMySQL (com.axway.ats.core.dbaccess.mysql.DbConnMySQL)1 MysqlDbProvider (com.axway.ats.core.dbaccess.mysql.MysqlDbProvider)1 DbConnOracle (com.axway.ats.core.dbaccess.oracle.DbConnOracle)1 OracleDbProvider (com.axway.ats.core.dbaccess.oracle.OracleDbProvider)1 DbConnPostgreSQL (com.axway.ats.core.dbaccess.postgresql.DbConnPostgreSQL)1 ArrayList (java.util.ArrayList)1