Skip to content

Commit

Permalink
Fixed flyway#2371: SQL*Plus SET/SHOW ECHO/TERMOUT/TIME/TIMING support
Browse files Browse the repository at this point in the history
  • Loading branch information
Axel Fontaine committed May 29, 2019
1 parent ec74ffc commit 0253ef0
Show file tree
Hide file tree
Showing 51 changed files with 1,010 additions and 1,034 deletions.
144 changes: 97 additions & 47 deletions flyway-core/src/main/java/org/flywaydb/core/Flyway.java
Expand Up @@ -41,16 +41,22 @@
import org.flywaydb.core.internal.database.DatabaseFactory;
import org.flywaydb.core.internal.database.base.Database;
import org.flywaydb.core.internal.database.base.Schema;
import org.flywaydb.core.internal.jdbc.JdbcConnectionFactory;
import org.flywaydb.core.internal.license.VersionPrinter;
import org.flywaydb.core.internal.resolver.CompositeMigrationResolver;
import org.flywaydb.core.internal.resource.NoopResourceProvider;
import org.flywaydb.core.internal.resource.ResourceProvider;
import org.flywaydb.core.internal.resource.StringResource;
import org.flywaydb.core.internal.scanner.Scanner;
import org.flywaydb.core.internal.schemahistory.SchemaHistory;
import org.flywaydb.core.internal.schemahistory.SchemaHistoryFactory;
import org.flywaydb.core.internal.sqlscript.SqlScript;
import org.flywaydb.core.internal.sqlscript.SqlScriptExecutorFactory;
import org.flywaydb.core.internal.sqlscript.SqlScriptFactory;
import org.flywaydb.core.internal.util.IOUtils;
import org.flywaydb.core.internal.util.StringUtils;

import java.sql.Connection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
Expand Down Expand Up @@ -359,27 +365,17 @@ public Void execute(MigrationResolver migrationResolver,
/**
* Creates the MigrationResolver.
*
* @param database The database-specific support.
* @param resourceProvider The resource provider.
* @param classProvider The class provider.
* @param resourceProvider The resource provider.
* @param classProvider The class provider.
* @param sqlScriptFactory The SQL statement builder factory.
* @return A new, fully configured, MigrationResolver instance.
*/
private MigrationResolver createMigrationResolver(Database database,
ResourceProvider resourceProvider,
private MigrationResolver createMigrationResolver(ResourceProvider resourceProvider,
ClassProvider classProvider,
SqlScriptFactory sqlScriptFactory



) {
return new CompositeMigrationResolver(database,
resourceProvider, classProvider, configuration,
sqlScriptFactory



, configuration.getResolvers());
SqlScriptExecutorFactory sqlScriptExecutorFactory,
SqlScriptFactory sqlScriptFactory) {
return new CompositeMigrationResolver(resourceProvider, classProvider, configuration,
sqlScriptExecutorFactory, sqlScriptFactory, configuration.getResolvers());
}

/**
Expand Down Expand Up @@ -413,9 +409,67 @@ private MigrationResolver createMigrationResolver(Database database,



final ResourceProvider resourceProvider;
ClassProvider classProvider;
if (!scannerRequired && configuration.isSkipDefaultResolvers() && configuration.isSkipDefaultCallbacks()) {
resourceProvider = NoopResourceProvider.INSTANCE;
classProvider = NoopClassProvider.INSTANCE;
} else {
Scanner scanner = new Scanner(
Arrays.asList(configuration.getLocations()),
configuration.getClassLoader(),
configuration.getEncoding()



);
resourceProvider = scanner;
classProvider = scanner;
}

JdbcConnectionFactory jdbcConnectionFactory = new JdbcConnectionFactory(configuration.getDataSource(),
configuration.getConnectRetries()




);

final SqlScriptFactory sqlScriptFactory =
DatabaseFactory.createSqlScriptFactory(jdbcConnectionFactory, configuration);

final SqlScriptExecutorFactory noCallbackSqlScriptExecutorFactory = DatabaseFactory.createSqlScriptExecutorFactory(
jdbcConnectionFactory




);

jdbcConnectionFactory.setConnectionInitializer(new JdbcConnectionFactory.ConnectionInitializer() {
@Override
public void initialize(JdbcConnectionFactory jdbcConnectionFactory, Connection connection) {
if (configuration.getInitSql() == null) {
return;
}
StringResource resource = new StringResource(configuration.getInitSql());

SqlScript sqlScript = sqlScriptFactory.createSqlScript(resource, true



);
noCallbackSqlScriptExecutorFactory.createSqlScriptExecutor(connection



).execute(sqlScript);
}
});

Database database = null;
try {
database = DatabaseFactory.createDatabase(configuration, !dbConnectionInfoPrinted
database = DatabaseFactory.createDatabase(configuration, !dbConnectionInfoPrinted, jdbcConnectionFactory



Expand All @@ -425,38 +479,32 @@ private MigrationResolver createMigrationResolver(Database database,

Schema[] schemas = prepareSchemas(database);

ResourceProvider resourceProvider;
ClassProvider classProvider;
if (!scannerRequired && configuration.isSkipDefaultResolvers() && configuration.isSkipDefaultCallbacks()) {
resourceProvider = NoopResourceProvider.INSTANCE;
classProvider = NoopClassProvider.INSTANCE;
} else {
Scanner scanner = new Scanner(
Arrays.asList(configuration.getLocations()),
configuration.getClassLoader(),
configuration.getEncoding()



);
resourceProvider = scanner;
classProvider = scanner;
}

CallbackExecutor callbackExecutor = new DefaultCallbackExecutor(configuration, database, schemas[0],
prepareCallbacks(database, resourceProvider, database


database.ensureSupported();

DefaultCallbackExecutor callbackExecutor = new DefaultCallbackExecutor(configuration, database, schemas[0],
prepareCallbacks(database, resourceProvider, jdbcConnectionFactory, sqlScriptFactory



));

result = command.execute(
createMigrationResolver(database, resourceProvider, classProvider, database
SqlScriptExecutorFactory sqlScriptExecutorFactory = DatabaseFactory.createSqlScriptExecutorFactory(jdbcConnectionFactory



),
SchemaHistoryFactory.getSchemaHistory(configuration, database, schemas[0]

);

result = command.execute(
createMigrationResolver(resourceProvider, classProvider, sqlScriptExecutorFactory, sqlScriptFactory),
SchemaHistoryFactory.getSchemaHistory(configuration, noCallbackSqlScriptExecutorFactory, sqlScriptFactory,
database, schemas[0]



Expand All @@ -469,11 +517,7 @@ private MigrationResolver createMigrationResolver(Database database,

);
} finally {
if (database != null) {
database.close();
}


IOUtils.close(database);



Expand Down Expand Up @@ -518,6 +562,7 @@ private Schema[] prepareSchemas(Database database) {
}

private List<Callback> prepareCallbacks(Database database, ResourceProvider resourceProvider,
JdbcConnectionFactory jdbcConnectionFactory,
SqlScriptFactory sqlScriptFactory


Expand Down Expand Up @@ -546,15 +591,20 @@ private List<Callback> prepareCallbacks(Database database, ResourceProvider reso
effectiveCallbacks.addAll(Arrays.asList(configuration.getCallbacks()));

if (!configuration.isSkipDefaultCallbacks()) {
SqlScriptExecutorFactory sqlScriptExecutorFactory =
DatabaseFactory.createSqlScriptExecutorFactory(jdbcConnectionFactory




);

effectiveCallbacks.addAll(
new SqlScriptCallbackFactory(
database,
resourceProvider,
sqlScriptExecutorFactory,
sqlScriptFactory,
configuration



).getCallbacks());
}

Expand Down
Expand Up @@ -22,11 +22,10 @@
import org.flywaydb.core.api.configuration.Configuration;
import org.flywaydb.core.api.logging.Log;
import org.flywaydb.core.api.logging.LogFactory;
import org.flywaydb.core.internal.database.base.Database;
import org.flywaydb.core.internal.jdbc.JdbcTemplate;
import org.flywaydb.core.internal.resource.LoadableResource;
import org.flywaydb.core.internal.resource.ResourceProvider;
import org.flywaydb.core.internal.sqlscript.SqlScript;
import org.flywaydb.core.internal.sqlscript.SqlScriptExecutorFactory;
import org.flywaydb.core.internal.sqlscript.SqlScriptFactory;

import java.util.ArrayList;
Expand All @@ -47,18 +46,14 @@ public class SqlScriptCallbackFactory {
/**
* Creates a new instance.
*
* @param database The database-specific support.
* @param resourceProvider The resource provider.
* @param resourceProvider The resource provider.
* @param sqlScriptFactory The SQL statement factory.
* @param configuration The Flyway configuration.
* @param configuration The Flyway configuration.
*/
public SqlScriptCallbackFactory(Database database, ResourceProvider resourceProvider,
public SqlScriptCallbackFactory(ResourceProvider resourceProvider,
SqlScriptExecutorFactory sqlScriptExecutorFactory,
SqlScriptFactory sqlScriptFactory,
Configuration configuration



) {
Configuration configuration) {
Map<String, SqlScript> callbacksFound = new HashMap<>();

LOG.debug("Scanning for SQL callbacks ...");
Expand Down Expand Up @@ -90,7 +85,7 @@ public SqlScriptCallbackFactory(Database database, ResourceProvider resourceProv

);
callbacksFound.put(name, sqlScript);
callbacks.add(new SqlScriptCallback(event, description, database, sqlScript
callbacks.add(new SqlScriptCallback(event, description, sqlScriptExecutorFactory, sqlScript



Expand All @@ -116,26 +111,24 @@ private String stripSuffix(String fileName, String[] suffixes) {
private static class SqlScriptCallback implements Callback, Comparable<SqlScriptCallback> {
private final Event event;
private final String description;
private final Database database;
private final SqlScriptExecutorFactory sqlScriptExecutorFactory;
private final SqlScript sqlScript;





private SqlScriptCallback(Event event, String description, Database database, SqlScript sqlScript
private SqlScriptCallback(Event event, String description, SqlScriptExecutorFactory sqlScriptExecutorFactory, SqlScript sqlScript



) {
this.event = event;
this.description = description;
this.database = database;
this.sqlScriptExecutorFactory = sqlScriptExecutorFactory;
this.sqlScript = sqlScript;




}

@Override
Expand All @@ -153,7 +146,7 @@ public void handle(Event event, Context context) {
LOG.info("Executing SQL callback: " + event.getId()
+ (description == null ? "" : " - " + description)
+ (sqlScript.executeInTransaction() ? "" : " [non-transactional]"));
database.createSqlScriptExecutor(new JdbcTemplate(context.getConnection())
sqlScriptExecutorFactory.createSqlScriptExecutor(context.getConnection()



Expand Down

0 comments on commit 0253ef0

Please sign in to comment.