add hashcode to initializationProvider
This commit is contained in:
parent
7855ce070c
commit
071b14cbcc
|
@ -22,6 +22,7 @@ package ca.uhn.fhir.jpa.migrate;
|
|||
|
||||
import ca.uhn.fhir.context.ConfigurationException;
|
||||
import ca.uhn.fhir.jpa.migrate.taskdef.BaseTask;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import org.apache.commons.dbcp2.BasicDataSource;
|
||||
import org.flywaydb.core.Flyway;
|
||||
import org.flywaydb.core.api.MigrationInfoService;
|
||||
|
@ -161,4 +162,9 @@ public class FlywayMigrator {
|
|||
return flyway.info();
|
||||
}
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public void removeAllTasksForUnitTest() {
|
||||
myTasks.clear();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,8 @@ package ca.uhn.fhir.jpa.migrate.taskdef;
|
|||
|
||||
import ca.uhn.fhir.jpa.migrate.DriverTypeEnum;
|
||||
import ca.uhn.fhir.jpa.migrate.tasks.api.ISchemaInitializationProvider;
|
||||
import org.apache.commons.lang3.builder.EqualsBuilder;
|
||||
import org.apache.commons.lang3.builder.HashCodeBuilder;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
@ -35,4 +37,24 @@ public class InitializeSchemaTask extends BaseTask<InitializeSchemaTask> {
|
|||
executeSql(null, nextSql);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object theO) {
|
||||
if (this == theO) return true;
|
||||
|
||||
if (theO == null || getClass() != theO.getClass()) return false;
|
||||
|
||||
InitializeSchemaTask that = (InitializeSchemaTask) theO;
|
||||
|
||||
return new EqualsBuilder()
|
||||
.append(mySchemaInitializationProvider, that.mySchemaInitializationProvider)
|
||||
.isEquals();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return new HashCodeBuilder(17, 37)
|
||||
.append(mySchemaInitializationProvider)
|
||||
.toHashCode();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,8 @@ import ca.uhn.fhir.jpa.migrate.DriverTypeEnum;
|
|||
import ca.uhn.fhir.jpa.migrate.tasks.api.ISchemaInitializationProvider;
|
||||
import com.google.common.base.Charsets;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang3.builder.EqualsBuilder;
|
||||
import org.apache.commons.lang3.builder.HashCodeBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
@ -41,4 +43,26 @@ public class SchemaInitializationProvider implements ISchemaInitializationProvid
|
|||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object theO) {
|
||||
if (this == theO) return true;
|
||||
|
||||
if (theO == null || getClass() != theO.getClass()) return false;
|
||||
|
||||
SchemaInitializationProvider that = (SchemaInitializationProvider) theO;
|
||||
|
||||
return size() == that.size();
|
||||
}
|
||||
|
||||
private int size() {
|
||||
return getSqlStatements(DriverTypeEnum.H2_EMBEDDED).size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return new HashCodeBuilder(17, 37)
|
||||
.append(size())
|
||||
.toHashCode();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,9 @@ package ca.uhn.fhir.jpa.migrate.taskdef;
|
|||
|
||||
import ca.uhn.fhir.jpa.migrate.DriverTypeEnum;
|
||||
import ca.uhn.fhir.jpa.migrate.JdbcUtils;
|
||||
import ca.uhn.fhir.jpa.migrate.tasks.SchemaInitializationProvider;
|
||||
import ca.uhn.fhir.jpa.migrate.tasks.api.ISchemaInitializationProvider;
|
||||
import org.apache.commons.lang3.builder.HashCodeBuilder;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.sql.SQLException;
|
||||
|
@ -15,16 +18,44 @@ public class InitializeSchemaTaskTest extends BaseTest {
|
|||
|
||||
@Test
|
||||
public void testInitializeTwice() throws SQLException {
|
||||
InitializeSchemaTask task = new InitializeSchemaTask("1", "1", t -> getSql());
|
||||
InitializeSchemaTask task = new InitializeSchemaTask("1", "1", new TestProvider());
|
||||
getMigrator().addTask(task);
|
||||
getMigrator().migrate();
|
||||
assertThat(JdbcUtils.getTableNames(getConnectionProperties()), containsInAnyOrder("SOMETABLE"));
|
||||
|
||||
// Second migrate runs without issue
|
||||
getMigrator().removeAllTasksForUnitTest();
|
||||
InitializeSchemaTask identicalTask = new InitializeSchemaTask("1", "1", new TestProvider());
|
||||
getMigrator().addTask(identicalTask);
|
||||
getMigrator().migrate();
|
||||
}
|
||||
|
||||
private List<String> getSql() {
|
||||
private class TestProvider implements ISchemaInitializationProvider {
|
||||
@Override
|
||||
public List<String> getSqlStatements(DriverTypeEnum theDriverType) {
|
||||
return Collections.singletonList("create table SOMETABLE (PID bigint not null, TEXTCOL varchar(255))");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object theO) {
|
||||
if (this == theO) return true;
|
||||
|
||||
if (theO == null || getClass() != theO.getClass()) return false;
|
||||
|
||||
TestProvider that = (TestProvider) theO;
|
||||
|
||||
return size() == that.size();
|
||||
}
|
||||
|
||||
private int size() {
|
||||
return getSqlStatements(DriverTypeEnum.H2_EMBEDDED).size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return new HashCodeBuilder(17, 37)
|
||||
.append(size())
|
||||
.toHashCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue