liquibase.database.core.MySQLDatabase Maven / Gradle / Ivy
package liquibase.database.core;
import liquibase.database.AbstractDatabase;
import liquibase.database.DatabaseConnection;
import liquibase.exception.DatabaseException;
import liquibase.executor.ExecutorService;
import liquibase.statement.core.RawSqlStatement;
/**
* Encapsulates MySQL database support.
*/
public class MySQLDatabase extends AbstractDatabase {
public static final String PRODUCT_NAME = "MySQL";
public String getTypeName() {
return "mysql";
}
//todo: handle @Override
// public String getConnectionUsername() throws DatabaseException {
// return super.getConnection().getConnectionUserName().replaceAll("\\@.*", "");
// }
public int getPriority() {
return PRIORITY_DEFAULT;
}
public boolean isCorrectDatabaseImplementation(DatabaseConnection conn) throws DatabaseException {
return PRODUCT_NAME.equalsIgnoreCase(conn.getDatabaseProductName());
}
public String getDefaultDriver(String url) {
if (url.startsWith("jdbc:mysql")) {
return "com.mysql.jdbc.Driver";
}
return null;
}
@Override
public boolean supportsSequences() {
return false;
}
public boolean supportsInitiallyDeferrableColumns() {
return false;
}
public String getCurrentDateTimeFunction() {
if (currentDateTimeFunction != null) {
return currentDateTimeFunction;
}
return "NOW()";
}
@Override
public String getLineComment() {
return "--";
}
@Override
public String getConcatSql(String ... values) {
StringBuffer returnString = new StringBuffer();
returnString.append("CONCAT_WS(");
for (String value : values) {
returnString.append(value).append(", ");
}
return returnString.toString().replaceFirst(", $", ")");
}
public boolean supportsTablespaces() {
return false;
}
@Override
protected String getDefaultDatabaseSchemaName() throws DatabaseException {
// return super.getDefaultDatabaseSchemaName().replaceFirst("\\@.*","");
return getConnection().getCatalog();
}
@Override
public String convertRequestedSchemaToSchema(String requestedSchema) throws DatabaseException {
if (requestedSchema == null) {
return getDefaultDatabaseSchemaName();
}
return requestedSchema;
}
@Override
public String convertRequestedSchemaToCatalog(String requestedSchema) throws DatabaseException {
return requestedSchema;
}
@Override
public String escapeDatabaseObject(String objectName) {
return "`"+objectName+"`";
}
@Override
public String escapeIndexName(String schemaName, String indexName) {
return escapeDatabaseObject(indexName);
}
@Override
public boolean supportsForeignKeyDisable() {
return true;
}
@Override
public boolean disableForeignKeyChecks() throws DatabaseException {
boolean enabled = ExecutorService.getInstance().getExecutor(this).queryForInt(new RawSqlStatement("SELECT @@FOREIGN_KEY_CHECKS")) == 1;
ExecutorService.getInstance().getExecutor(this).execute(new RawSqlStatement("SET FOREIGN_KEY_CHECKS=0"));
return enabled;
}
@Override
public void enableForeignKeyChecks() throws DatabaseException {
ExecutorService.getInstance().getExecutor(this).execute(new RawSqlStatement("SET FOREIGN_KEY_CHECKS=1"));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy