Search in sources :

Example 1 with JavaMigration

use of org.flywaydb.core.api.migration.JavaMigration in project flyway by flyway.

the class ScanningJavaMigrationResolver method resolveMigrations.

@Override
public List<ResolvedMigration> resolveMigrations(Context context) {
    List<ResolvedMigration> migrations = new ArrayList<>();
    for (Class<?> clazz : classProvider.getClasses()) {
        JavaMigration javaMigration = ClassUtils.instantiate(clazz.getName(), configuration.getClassLoader());
        migrations.add(new ResolvedJavaMigration(javaMigration));
    }
    Collections.sort(migrations, new ResolvedMigrationComparator());
    return migrations;
}
Also used : ResolvedMigrationComparator(org.flywaydb.core.internal.resolver.ResolvedMigrationComparator) ArrayList(java.util.ArrayList) ResolvedMigration(org.flywaydb.core.api.resolver.ResolvedMigration) JavaMigration(org.flywaydb.core.api.migration.JavaMigration)

Example 2 with JavaMigration

use of org.flywaydb.core.api.migration.JavaMigration in project flyway by flyway.

the class FixedJavaMigrationResolver method resolveMigrations.

@Override
public List<ResolvedMigration> resolveMigrations(Context context) {
    List<ResolvedMigration> migrations = new ArrayList<>();
    for (JavaMigration javaMigration : javaMigrations) {
        migrations.add(new ResolvedJavaMigration(javaMigration));
    }
    Collections.sort(migrations, new ResolvedMigrationComparator());
    return migrations;
}
Also used : ResolvedMigrationComparator(org.flywaydb.core.internal.resolver.ResolvedMigrationComparator) ArrayList(java.util.ArrayList) ResolvedMigration(org.flywaydb.core.api.resolver.ResolvedMigration) JavaMigration(org.flywaydb.core.api.migration.JavaMigration)

Example 3 with JavaMigration

use of org.flywaydb.core.api.migration.JavaMigration in project flyway by flyway.

the class FlywayExecutor method execute.

/**
 * Executes this command with proper resource handling and cleanup.
 *
 * @param command The command to execute.
 * @param <T> The type of the result.
 * @return The result of the command.
 */
public <T> T execute(Command<T> command, boolean scannerRequired) {
    T result;
    configurationValidator.validate(configuration);
    StatementInterceptor statementInterceptor = null;
    final Pair<ResourceProvider, ClassProvider<JavaMigration>> resourceProviderClassProviderPair = createResourceAndClassProviders(scannerRequired);
    final ResourceProvider resourceProvider = resourceProviderClassProviderPair.getLeft();
    final ClassProvider<JavaMigration> classProvider = resourceProviderClassProviderPair.getRight();
    final ParsingContext parsingContext = new ParsingContext();
    resourceNameValidator.validateSQLMigrationNaming(resourceProvider, configuration);
    JdbcConnectionFactory jdbcConnectionFactory = new JdbcConnectionFactory(configuration.getDataSource(), configuration, statementInterceptor);
    final DatabaseType databaseType = jdbcConnectionFactory.getDatabaseType();
    final SqlScriptFactory sqlScriptFactory = databaseType.createSqlScriptFactory(configuration, parsingContext);
    RetryStrategy.setNumberOfRetries(configuration.getLockRetryCount());
    final SqlScriptExecutorFactory noCallbackSqlScriptExecutorFactory = databaseType.createSqlScriptExecutorFactory(jdbcConnectionFactory, NoopCallbackExecutor.INSTANCE, null);
    jdbcConnectionFactory.setConnectionInitializer((jdbcConnectionFactory1, connection) -> {
        if (configuration.getInitSql() == null) {
            return;
        }
        StringResource resource = new StringResource(configuration.getInitSql());
        SqlScript sqlScript = sqlScriptFactory.createSqlScript(resource, true, resourceProvider);
        boolean outputQueryResults = false;
        noCallbackSqlScriptExecutorFactory.createSqlScriptExecutor(connection, false, false, outputQueryResults).execute(sqlScript);
    });
    Database database = null;
    try {
        VersionPrinter.printVersion();
        database = databaseType.createDatabase(configuration, !dbConnectionInfoPrinted, jdbcConnectionFactory, statementInterceptor);
        databaseType.printMessages();
        dbConnectionInfoPrinted = true;
        LOG.debug("DDL Transactions Supported: " + database.supportsDdlTransactions());
        Pair<Schema, List<Schema>> schemas = SchemaHistoryFactory.prepareSchemas(configuration, database);
        Schema defaultSchema = schemas.getLeft();
        parsingContext.populate(database, configuration);
        database.ensureSupported();
        DefaultCallbackExecutor callbackExecutor = new DefaultCallbackExecutor(configuration, database, defaultSchema, prepareCallbacks(database, resourceProvider, jdbcConnectionFactory, sqlScriptFactory, statementInterceptor, defaultSchema, parsingContext));
        SqlScriptExecutorFactory sqlScriptExecutorFactory = databaseType.createSqlScriptExecutorFactory(jdbcConnectionFactory, callbackExecutor, statementInterceptor);
        SchemaHistory schemaHistory = SchemaHistoryFactory.getSchemaHistory(configuration, noCallbackSqlScriptExecutorFactory, sqlScriptFactory, database, defaultSchema, statementInterceptor);
        result = command.execute(createMigrationResolver(resourceProvider, classProvider, sqlScriptExecutorFactory, sqlScriptFactory, parsingContext), schemaHistory, database, defaultSchema, schemas.getRight().toArray(new Schema[0]), callbackExecutor, statementInterceptor);
    } finally {
        IOUtils.close(database);
        showMemoryUsage();
    }
    return result;
}
Also used : JdbcConnectionFactory(org.flywaydb.core.internal.jdbc.JdbcConnectionFactory) SqlScriptExecutorFactory(org.flywaydb.core.internal.sqlscript.SqlScriptExecutorFactory) ParsingContext(org.flywaydb.core.internal.parser.ParsingContext) DatabaseType(org.flywaydb.core.internal.database.DatabaseType) SqlScriptFactory(org.flywaydb.core.internal.sqlscript.SqlScriptFactory) Schema(org.flywaydb.core.internal.database.base.Schema) SchemaHistory(org.flywaydb.core.internal.schemahistory.SchemaHistory) StringResource(org.flywaydb.core.internal.resource.StringResource) ResourceProvider(org.flywaydb.core.api.ResourceProvider) NoopResourceProvider(org.flywaydb.core.internal.resource.NoopResourceProvider) ClassProvider(org.flywaydb.core.api.ClassProvider) NoopClassProvider(org.flywaydb.core.internal.clazz.NoopClassProvider) Database(org.flywaydb.core.internal.database.base.Database) SqlScript(org.flywaydb.core.internal.sqlscript.SqlScript) JavaMigration(org.flywaydb.core.api.migration.JavaMigration) ArrayList(java.util.ArrayList) List(java.util.List) StatementInterceptor(org.flywaydb.core.internal.jdbc.StatementInterceptor)

Example 4 with JavaMigration

use of org.flywaydb.core.api.migration.JavaMigration in project flyway by flyway.

the class FlywayExecutor method createResourceAndClassProviders.

private Pair<ResourceProvider, ClassProvider<JavaMigration>> createResourceAndClassProviders(boolean scannerRequired) {
    ResourceProvider resourceProvider;
    ClassProvider<JavaMigration> classProvider;
    if (!scannerRequired && configuration.isSkipDefaultResolvers() && configuration.isSkipDefaultCallbacks()) {
        resourceProvider = NoopResourceProvider.INSTANCE;
        // noinspection unchecked
        classProvider = NoopClassProvider.INSTANCE;
    } else {
        if (configuration.getResourceProvider() != null && configuration.getJavaMigrationClassProvider() != null) {
            // don't create the scanner at all in this case
            resourceProvider = configuration.getResourceProvider();
            classProvider = configuration.getJavaMigrationClassProvider();
        } else {
            boolean stream = false;
            Scanner<JavaMigration> scanner = new Scanner<>(JavaMigration.class, Arrays.asList(configuration.getLocations()), configuration.getClassLoader(), configuration.getEncoding(), configuration.isDetectEncoding(), stream, resourceNameCache, locationScannerCache, configuration.isFailOnMissingLocations());
            // set the defaults
            resourceProvider = scanner;
            classProvider = scanner;
            if (configuration.getResourceProvider() != null) {
                resourceProvider = configuration.getResourceProvider();
            }
            if (configuration.getJavaMigrationClassProvider() != null) {
                classProvider = configuration.getJavaMigrationClassProvider();
            }
        }
    }
    return Pair.of(resourceProvider, classProvider);
}
Also used : Scanner(org.flywaydb.core.internal.scanner.Scanner) ResourceProvider(org.flywaydb.core.api.ResourceProvider) NoopResourceProvider(org.flywaydb.core.internal.resource.NoopResourceProvider) JavaMigration(org.flywaydb.core.api.migration.JavaMigration)

Aggregations

JavaMigration (org.flywaydb.core.api.migration.JavaMigration)4 ArrayList (java.util.ArrayList)3 ResourceProvider (org.flywaydb.core.api.ResourceProvider)2 ResolvedMigration (org.flywaydb.core.api.resolver.ResolvedMigration)2 ResolvedMigrationComparator (org.flywaydb.core.internal.resolver.ResolvedMigrationComparator)2 NoopResourceProvider (org.flywaydb.core.internal.resource.NoopResourceProvider)2 List (java.util.List)1 ClassProvider (org.flywaydb.core.api.ClassProvider)1 NoopClassProvider (org.flywaydb.core.internal.clazz.NoopClassProvider)1 DatabaseType (org.flywaydb.core.internal.database.DatabaseType)1 Database (org.flywaydb.core.internal.database.base.Database)1 Schema (org.flywaydb.core.internal.database.base.Schema)1 JdbcConnectionFactory (org.flywaydb.core.internal.jdbc.JdbcConnectionFactory)1 StatementInterceptor (org.flywaydb.core.internal.jdbc.StatementInterceptor)1 ParsingContext (org.flywaydb.core.internal.parser.ParsingContext)1 StringResource (org.flywaydb.core.internal.resource.StringResource)1 Scanner (org.flywaydb.core.internal.scanner.Scanner)1 SchemaHistory (org.flywaydb.core.internal.schemahistory.SchemaHistory)1 SqlScript (org.flywaydb.core.internal.sqlscript.SqlScript)1 SqlScriptExecutorFactory (org.flywaydb.core.internal.sqlscript.SqlScriptExecutorFactory)1