From e74d47abc0480af237e8e764eb718aaedacc7de4 Mon Sep 17 00:00:00 2001 From: Jia Long Ji Qiu Date: Mon, 12 May 2025 11:33:48 +0200 Subject: [PATCH] Added support for InterSystems IRIS --- flyway-database-iris/pom.xml | 47 +++++++++ .../database/IRISDatabaseExtension.java | 59 ++++++++++++ .../community/database/iris/IRISCallback.java | 74 ++++++++++++++ .../database/iris/IRISConnection.java | 45 +++++++++ .../community/database/iris/IRISDatabase.java | 90 +++++++++++++++++ .../database/iris/IRISDatabaseType.java | 89 +++++++++++++++++ .../community/database/iris/IRISParser.java | 30 ++++++ .../community/database/iris/IRISSchema.java | 76 +++++++++++++++ .../community/database/iris/IRISTable.java | 96 +++++++++++++++++++ .../org.flywaydb.core.extensibility.Plugin | 1 + .../community/database/iris/version.txt | 1 + 11 files changed, 608 insertions(+) create mode 100644 flyway-database-iris/pom.xml create mode 100644 flyway-database-iris/src/main/java/org/flywaydb/community/database/IRISDatabaseExtension.java create mode 100644 flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISCallback.java create mode 100644 flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISConnection.java create mode 100644 flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISDatabase.java create mode 100644 flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISDatabaseType.java create mode 100644 flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISParser.java create mode 100644 flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISSchema.java create mode 100644 flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISTable.java create mode 100644 flyway-database-iris/src/main/resources/META-INF/services/org.flywaydb.core.extensibility.Plugin create mode 100644 flyway-database-iris/src/main/resources/org/flywaydb/community/database/iris/version.txt diff --git a/flyway-database-iris/pom.xml b/flyway-database-iris/pom.xml new file mode 100644 index 0000000..5088557 --- /dev/null +++ b/flyway-database-iris/pom.xml @@ -0,0 +1,47 @@ + + + + 4.0.0 + + + org.flywaydb + flyway-community-db-support + 10.17.0 + + + flyway-database-iris + + + UTF-8 + 17 + + + + + ${project.groupId} + flyway-core + + + org.projectlombok + lombok + + + + + + + src/main/resources + true + + + + + maven-resources-plugin + + + maven-jar-plugin + + + + diff --git a/flyway-database-iris/src/main/java/org/flywaydb/community/database/IRISDatabaseExtension.java b/flyway-database-iris/src/main/java/org/flywaydb/community/database/IRISDatabaseExtension.java new file mode 100644 index 0000000..4124760 --- /dev/null +++ b/flyway-database-iris/src/main/java/org/flywaydb/community/database/IRISDatabaseExtension.java @@ -0,0 +1,59 @@ +/*- + * ========================LICENSE_START================================= + * flyway-database-iris + * ======================================================================== + * Copyright (C) 2010 - 2025 Red Gate Software Ltd + * ======================================================================== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ +/* + * Copyright (C) Red Gate Software Ltd 2010-2024 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.flywaydb.community.database; + +import org.flywaydb.core.api.FlywayException; +import org.flywaydb.core.extensibility.PluginMetadata; +import org.flywaydb.core.internal.util.FileUtils; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.Objects; + +public class IRISDatabaseExtension implements PluginMetadata { + public String getDescription() { + return "Community-contributed InterSystems IRIS database support extension " + readVersion() + " by Redgate"; + } + + public static String readVersion() { + try { + return FileUtils.copyToString( + Objects.requireNonNull(IRISDatabaseExtension.class.getClassLoader().getResourceAsStream("org/flywaydb/community/database/iris/version.txt")), + StandardCharsets.UTF_8); + } catch (IOException e) { + throw new FlywayException("Unable to read extension version: " + e.getMessage(), e); + } + } +} diff --git a/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISCallback.java b/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISCallback.java new file mode 100644 index 0000000..73667fa --- /dev/null +++ b/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISCallback.java @@ -0,0 +1,74 @@ +/*- + * ========================LICENSE_START================================= + * flyway-database-iris + * ======================================================================== + * Copyright (C) 2010 - 2025 Red Gate Software Ltd + * ======================================================================== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ +package org.flywaydb.community.database.iris; + +import lombok.CustomLog; + +import org.flywaydb.core.api.callback.Callback; +import org.flywaydb.core.api.callback.Context; +import org.flywaydb.core.api.callback.Event; +import org.flywaydb.core.internal.jdbc.JdbcTemplate; +import org.flywaydb.core.internal.jdbc.JdbcUtils; + +import java.sql.PreparedStatement; +import java.util.stream.IntStream; + +@CustomLog +public class IRISCallback implements Callback { + + @Override + public boolean supports(Event event, Context context) { + return true; + } + + @Override + public boolean canHandleInTransaction(Event event, Context context) { + return false; + } + + @Override + public void handle(Event event, Context context) { + if (event.equals(Event.AFTER_MIGRATE)) { + IntStream.range(0, IRISTable.totalLocks.get()).forEach(i -> { + unlock(IRISTable.lockedJdbcTemplate); + }); + IRISTable.totalLocks.set(0); + } + IRISTable.lockedJdbcTemplate = null; + IRISTable.lockedTable = null; + } + + @Override + public String getCallbackName() { + return this.getClass().getSimpleName(); + } + + private void unlock(JdbcTemplate jdbcTemplate) { + PreparedStatement preparedStatement = null; + try { + preparedStatement = jdbcTemplate.getConnection().prepareStatement("UNLOCK " + IRISTable.lockedTable + " IN EXCLUSIVE MODE"); + preparedStatement.execute(); + } catch (Exception e) { + throw new IllegalStateException(e); + } finally { + JdbcUtils.closeStatement(preparedStatement); + } + } +} diff --git a/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISConnection.java b/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISConnection.java new file mode 100644 index 0000000..7a0ac40 --- /dev/null +++ b/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISConnection.java @@ -0,0 +1,45 @@ +/*- + * ========================LICENSE_START================================= + * flyway-database-iris + * ======================================================================== + * Copyright (C) 2010 - 2025 Red Gate Software Ltd + * ======================================================================== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ +package org.flywaydb.community.database.iris; + +import org.flywaydb.core.internal.database.base.Connection; + +import java.sql.SQLException; + +public class IRISConnection extends Connection { + protected IRISConnection(IRISDatabase database, java.sql.Connection connection) { + super(database, connection); + } + + @Override + public void doChangeCurrentSchemaOrSearchPathTo(String schema) throws SQLException { + getJdbcConnection().setSchema(schema); + } + + @Override + protected String getCurrentSchemaNameOrSearchPath() throws SQLException { + return "SQLUser"; + } + + @Override + public IRISSchema getSchema(String name) { + return new IRISSchema(jdbcTemplate, database, name); + } +} diff --git a/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISDatabase.java b/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISDatabase.java new file mode 100644 index 0000000..63453ef --- /dev/null +++ b/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISDatabase.java @@ -0,0 +1,90 @@ +/*- + * ========================LICENSE_START================================= + * flyway-database-iris + * ======================================================================== + * Copyright (C) 2010 - 2025 Red Gate Software Ltd + * ======================================================================== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ +package org.flywaydb.community.database.iris; + +import org.flywaydb.core.api.MigrationVersion; +import org.flywaydb.core.api.configuration.Configuration; +import org.flywaydb.core.internal.database.base.Database; +import org.flywaydb.core.internal.database.base.Table; +import org.flywaydb.core.internal.exception.FlywayDbUpgradeRequiredException; +import org.flywaydb.core.internal.jdbc.JdbcConnectionFactory; +import org.flywaydb.core.internal.jdbc.StatementInterceptor; + +import java.math.BigInteger; +import java.sql.Connection; + +public class IRISDatabase extends Database { + public IRISDatabase(Configuration configuration, JdbcConnectionFactory jdbcConnectionFactory, StatementInterceptor statementInterceptor) { + super(configuration, jdbcConnectionFactory, statementInterceptor); + } + + @Override + protected IRISConnection doGetConnection(Connection connection) { + return new IRISConnection(this, connection); + } + + @Override + public void ensureSupported(Configuration configuration) { + MigrationVersion version = getVersion(); + if (Integer.parseInt(version.getMajorAsString()) < 2019) { + throw new FlywayDbUpgradeRequiredException(new IRISDatabaseType(), version.toString(), "2019.1"); + } + } + + @Override + public boolean supportsDdlTransactions() { + return true; + } + + @Override + public String getBooleanTrue() { + return "1"; + } + + @Override + public String getBooleanFalse() { + return "0"; + } + + @Override + public boolean catalogIsSchema() { + return false; + } + + @Override + public String getRawCreateScript(Table table, boolean baseline) { + String schemaName = table.getSchema().getName(); + String tableName = table.getName(); + + return "CREATE TABLE \"" + schemaName + "\".\"" + tableName + "\" (\n" + + " \"installed_rank\" INTEGER NOT NULL,\n" + + " \"version\" VARCHAR(50),\n" + + " \"description\" VARCHAR(200) NOT NULL,\n" + + " \"type\" VARCHAR(20) NOT NULL,\n" + + " \"script\" VARCHAR(1000) NOT NULL,\n" + + " \"checksum\" INTEGER,\n" + + " \"installed_by\" VARCHAR(100) NOT NULL,\n" + + " \"installed_on\" TIMESTAMP NOT NULL DEFAULT getdate(),\n" + + " \"execution_time\" INTEGER NOT NULL,\n" + + " \"success\" BIT NOT NULL\n" + + ");\n" + + "ALTER TABLE \"" + schemaName + "\".\"" + tableName + "\" ADD CONSTRAINT \"" + tableName + "_pk\" PRIMARY KEY (\"installed_rank\");"; + } +} diff --git a/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISDatabaseType.java b/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISDatabaseType.java new file mode 100644 index 0000000..7a8c51c --- /dev/null +++ b/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISDatabaseType.java @@ -0,0 +1,89 @@ +/*- + * ========================LICENSE_START================================= + * flyway-database-iris + * ======================================================================== + * Copyright (C) 2010 - 2025 Red Gate Software Ltd + * ======================================================================== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ +package org.flywaydb.community.database.iris; + +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Types; + +import org.flywaydb.community.database.IRISDatabaseExtension; +import org.flywaydb.core.api.FlywayException; +import org.flywaydb.core.api.ResourceProvider; +import org.flywaydb.core.api.configuration.Configuration; +import org.flywaydb.core.internal.database.base.BaseDatabaseType; +import org.flywaydb.core.internal.database.base.CommunityDatabaseType; +import org.flywaydb.core.internal.jdbc.JdbcConnectionFactory; +import org.flywaydb.core.internal.jdbc.StatementInterceptor; +import org.flywaydb.core.internal.parser.Parser; +import org.flywaydb.core.internal.parser.ParsingContext; + +public class IRISDatabaseType extends BaseDatabaseType implements CommunityDatabaseType { + @Override + public String getName() { + return "InterSystems IRIS Data Platform"; + } + + @Override + public int getNullType() { + return Types.NULL; + } + + @Override + public boolean handlesJDBCUrl(final String url) { + return url.startsWith("jdbc:IRIS:"); + } + + @Override + public String getDriverClass(final String url, final ClassLoader classLoader) { + return "com.intersystems.jdbc.IRISDriver"; + } + + @Override + public boolean handlesDatabaseProductNameAndVersion(final String databaseProductName, + final String databaseProductVersion, + final Connection connection) { + int majorVersion; + try { + majorVersion = connection.getMetaData().getDatabaseMajorVersion(); + } catch (SQLException e) { + throw new FlywayException(String.format("Unable to load database major version for %s-%s", databaseProductName, databaseProductVersion), e); + } + return databaseProductName.startsWith("InterSystems IRIS") && majorVersion >= 2019; + } + + @Override + public IRISDatabase createDatabase(final Configuration configuration, + final JdbcConnectionFactory jdbcConnectionFactory, + final StatementInterceptor statementInterceptor) { + return new IRISDatabase(configuration, jdbcConnectionFactory, statementInterceptor); + } + + @Override + public Parser createParser(final Configuration configuration, + final ResourceProvider resourceProvider, + final ParsingContext parsingContext) { + return new IRISParser(configuration, parsingContext, 3); + } + + @Override + public String getPluginVersion(Configuration config) { + return IRISDatabaseExtension.readVersion(); + } +} diff --git a/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISParser.java b/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISParser.java new file mode 100644 index 0000000..78c1079 --- /dev/null +++ b/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISParser.java @@ -0,0 +1,30 @@ +/*- + * ========================LICENSE_START================================= + * flyway-database-iris + * ======================================================================== + * Copyright (C) 2010 - 2025 Red Gate Software Ltd + * ======================================================================== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ +package org.flywaydb.community.database.iris; + +import org.flywaydb.core.api.configuration.Configuration; +import org.flywaydb.core.internal.parser.Parser; +import org.flywaydb.core.internal.parser.ParsingContext; + +public class IRISParser extends Parser { + protected IRISParser(Configuration configuration, ParsingContext parsingContext, int peekDepth) { + super(configuration, parsingContext, peekDepth); + } +} diff --git a/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISSchema.java b/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISSchema.java new file mode 100644 index 0000000..246227c --- /dev/null +++ b/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISSchema.java @@ -0,0 +1,76 @@ +/*- + * ========================LICENSE_START================================= + * flyway-database-iris + * ======================================================================== + * Copyright (C) 2010 - 2025 Red Gate Software Ltd + * ======================================================================== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ +package org.flywaydb.community.database.iris; + +import org.flywaydb.core.internal.database.base.Schema; +import org.flywaydb.core.internal.database.base.Table; +import org.flywaydb.core.internal.jdbc.JdbcTemplate; + +import java.sql.SQLException; +import java.util.List; +import java.util.stream.Stream; + +public class IRISSchema extends Schema { + /** + * @param jdbcTemplate The Jdbc Template for communicating with the DB. + * @param database The database-specific support. + * @param name The name of the schema. + */ + public IRISSchema(JdbcTemplate jdbcTemplate, IRISDatabase database, String name) { + super(jdbcTemplate, database, name); + } + + @Override + protected boolean doExists() { + return true; + } + + @Override + protected boolean doEmpty() { + return false; + } + + @Override + protected void doCreate() { + throw new UnsupportedOperationException("InterSystems IRIS does not support schema creation. Schema not created"); + } + + @Override + protected void doDrop() { + throw new UnsupportedOperationException("InterSystems IRIS does not support dropping schemas. Schema not dropped"); + } + + @Override + protected void doClean() { + Stream.of(allTables()).forEach(Table::drop); + } + + @Override + protected IRISTable[] doAllTables() throws SQLException { + List tableNames = jdbcTemplate.queryForStringList( + "SELECT SqlTableName from %dictionary.compiledclass where SqlSchemaName = ?", name); + return tableNames.stream().map(tableName -> new IRISTable(jdbcTemplate, database, this, tableName)).toArray(IRISTable[]::new); + } + + @Override + public IRISTable getTable(String tableName) { + return new IRISTable(jdbcTemplate, database, this, tableName); + } +} diff --git a/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISTable.java b/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISTable.java new file mode 100644 index 0000000..1c59d4e --- /dev/null +++ b/flyway-database-iris/src/main/java/org/flywaydb/community/database/iris/IRISTable.java @@ -0,0 +1,96 @@ +/*- + * ========================LICENSE_START================================= + * flyway-database-iris + * ======================================================================== + * Copyright (C) 2010 - 2025 Red Gate Software Ltd + * ======================================================================== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ +package org.flywaydb.community.database.iris; + +import org.flywaydb.core.internal.database.base.Table; +import org.flywaydb.core.internal.jdbc.JdbcTemplate; + +import java.sql.SQLException; +import java.util.concurrent.atomic.AtomicInteger; + +public class IRISTable extends Table { + + public static JdbcTemplate lockedJdbcTemplate = null; + public static String lockedTable = null; + public static AtomicInteger totalLocks = new AtomicInteger(0); + + /** + * @param jdbcTemplate The JDBC template for communicating with the DB. + * @param database The database-specific support. + * @param schema The schema this table lives in. + * @param name The name of the table. + */ + public IRISTable(JdbcTemplate jdbcTemplate, IRISDatabase database, IRISSchema schema, String name) { + super(jdbcTemplate, database, schema, name); + } + + @Override + protected boolean doExists() throws SQLException { + return jdbcTemplate.queryForBoolean("SELECT DECODE((select 1 from %dictionary.compiledclass where SqlSchemaName = ? and SqlTableName = ?), 1, 1, 0)", schema.getName(), name); + } + + @Override + protected void doLock() throws SQLException { + try { + if (lockedJdbcTemplate == null && lockedTable == null) { + lockedJdbcTemplate = jdbcTemplate; + lockedTable = database.quote(schema.getName(), name); + } + if (acquireLock()) { + jdbcTemplate.execute("LOCK TABLE " + lockedTable + " IN EXCLUSIVE MODE"); + totalLocks.incrementAndGet(); + } else { + jdbcTemplate.execute("LOCK TABLE " + lockedTable + " IN EXCLUSIVE MODE"); + jdbcTemplate.execute("UNLOCK " + lockedTable + " IN EXCLUSIVE MODE"); + totalLocks.set(0); + retry(15000); + } + } catch (SQLException sqlException) { + if (unsuccessfulLockAcquiring()) { + totalLocks.decrementAndGet(); + } + retry(10000); + } + } + + @Override + protected void doDrop() throws SQLException { + jdbcTemplate.execute("SET OPTION COMPILEMODE = NOCHECK"); + jdbcTemplate.execute("DROP TABLE " + database.quote(schema.getName(), name) + " CASCADE"); + } + + private boolean acquireLock() { + return totalLocks.get() >= 0; + } + + private boolean unsuccessfulLockAcquiring() { + return totalLocks.get() == 0; + } + + private void retry(long backoffTime) throws SQLException { + try { + Thread.sleep(backoffTime); + } catch (InterruptedException e) { + throw new IllegalStateException(e); + } finally { + this.doLock(); + } + } +} diff --git a/flyway-database-iris/src/main/resources/META-INF/services/org.flywaydb.core.extensibility.Plugin b/flyway-database-iris/src/main/resources/META-INF/services/org.flywaydb.core.extensibility.Plugin new file mode 100644 index 0000000..6331d57 --- /dev/null +++ b/flyway-database-iris/src/main/resources/META-INF/services/org.flywaydb.core.extensibility.Plugin @@ -0,0 +1 @@ +org.flywaydb.community.database.iris.IRISDatabaseType \ No newline at end of file diff --git a/flyway-database-iris/src/main/resources/org/flywaydb/community/database/iris/version.txt b/flyway-database-iris/src/main/resources/org/flywaydb/community/database/iris/version.txt new file mode 100644 index 0000000..1785151 --- /dev/null +++ b/flyway-database-iris/src/main/resources/org/flywaydb/community/database/iris/version.txt @@ -0,0 +1 @@ +${pom.version} \ No newline at end of file