All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.icthh.xm.commons.migration.db.tenant.SchemaChangeResolver Maven / Gradle / Ivy

There is a newer version: 4.0.21
Show newest version
package com.icthh.xm.commons.migration.db.tenant;

import static com.icthh.xm.commons.migration.db.Constants.DB_SCHEMA_SUFFIX;
import static com.icthh.xm.commons.migration.db.Constants.JPA_VENDOR;
import static org.apache.commons.lang3.StringUtils.EMPTY;

import lombok.extern.slf4j.Slf4j;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * Provides command for schema change for particular database.
 */
@Slf4j
@Component
public class SchemaChangeResolver {

    private static final String DEFAULT_COMMAND = "USE %s";
    private static final Map DB_COMMANDS = new HashMap<>();

    private String dbSchemaChangeCommand;

    /**
     * SchemaChangeResolver constructor.
     *
     * @param env the environment
     */
    public SchemaChangeResolver(Environment env) {
        initDbCommands(env);
        String db = env.getProperty(JPA_VENDOR);
        this.dbSchemaChangeCommand = DB_COMMANDS.getOrDefault(db, DEFAULT_COMMAND);
        log.info("Database {} will use command '{}' for schema changing", db, dbSchemaChangeCommand);
    }

    public String getSchemaSwitchCommand() {
        return this.dbSchemaChangeCommand;
    }

    private void initDbCommands(Environment env) {
        String schemaSuffix = env.getProperty(DB_SCHEMA_SUFFIX, EMPTY);

        DB_COMMANDS.put("POSTGRESQL", "SET search_path TO %s" + schemaSuffix);
        DB_COMMANDS.put("ORACLE", "ALTER SESSION SET CURRENT_SCHEMA = %s" + schemaSuffix);
        DB_COMMANDS.put("H2", "SET SCHEMA %s" + schemaSuffix);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy