diff --git a/engine/src/org/pentaho/di/base/AbstractMeta.java b/engine/src/org/pentaho/di/base/AbstractMeta.java index 3b63f210ca46..d67751c3d7c3 100644 --- a/engine/src/org/pentaho/di/base/AbstractMeta.java +++ b/engine/src/org/pentaho/di/base/AbstractMeta.java @@ -408,8 +408,8 @@ public void importFromMetaStore() throws MetaStoreException, KettlePluginExcepti if ( databaseType != null ) { List databaseElements = metaStore.getElements( PentahoDefaults.NAMESPACE, databaseType ); for ( IMetaStoreElement databaseElement : databaseElements ) { - addOrReplaceDatabase( DatabaseMetaStoreUtil.loadDatabaseMetaFromDatabaseElement( - metaStore, databaseElement ) ); + addDatabase( DatabaseMetaStoreUtil.loadDatabaseMetaFromDatabaseElement( + metaStore, databaseElement ), false ); } } @@ -1023,10 +1023,14 @@ public ChannelLogTable getChannelLogTable() { */ @Override public void addOrReplaceDatabase( DatabaseMeta databaseMeta ) { + addDatabase( databaseMeta, true ); + } + + protected void addDatabase( DatabaseMeta databaseMeta, boolean replace ) { int index = databases.indexOf( databaseMeta ); if ( index < 0 ) { addDatabase( databaseMeta ); - } else { + } else if ( replace ) { DatabaseMeta previous = getDatabase( index ); previous.replaceMeta( databaseMeta ); } diff --git a/engine/test-src/org/pentaho/di/trans/TransMetaTest.java b/engine/test-src/org/pentaho/di/trans/TransMetaTest.java index 1fba35087cc1..f28f22f15509 100644 --- a/engine/test-src/org/pentaho/di/trans/TransMetaTest.java +++ b/engine/test-src/org/pentaho/di/trans/TransMetaTest.java @@ -30,16 +30,19 @@ import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.pentaho.di.core.KettleEnvironment; +import org.pentaho.di.core.database.DatabaseMeta; import org.pentaho.di.core.gui.Point; import org.pentaho.di.core.row.RowMeta; import org.pentaho.di.core.row.RowMetaInterface; import org.pentaho.di.core.row.value.ValueMetaString; import org.pentaho.di.core.variables.VariableSpace; +import org.pentaho.di.metastore.DatabaseMetaStoreUtil; import org.pentaho.di.repository.Repository; import org.pentaho.di.trans.step.StepIOMeta; import org.pentaho.di.trans.step.StepMeta; import org.pentaho.di.trans.step.StepMetaInterface; import org.pentaho.metastore.api.IMetaStore; +import org.pentaho.metastore.stores.memory.MemoryMetaStore; public class TransMetaTest { @@ -108,6 +111,27 @@ public void getThisStepFieldsPassesCloneRowMeta() throws Exception { assertEquals( overriddenValue, thisStepsFields.getValueMeta( 0 ).getName() ); } + @Test + public void testDatabaseNotOverridden() throws Exception { + final String name = "db meta"; + + DatabaseMeta dbMetaShared = new DatabaseMeta(); + dbMetaShared.setName( name ); + dbMetaShared.setHostname( "host" ); + DatabaseMeta dbMetaStore = new DatabaseMeta(); + dbMetaStore.setName( name ); + dbMetaStore.setHostname( "anotherhost"); + IMetaStore mstore = new MemoryMetaStore(); + DatabaseMetaStoreUtil.createDatabaseElement( mstore, dbMetaStore ); + + TransMeta trans = new TransMeta(); + trans.addOrReplaceDatabase( dbMetaShared ); + trans.setMetaStore( mstore ); + trans.importFromMetaStore(); + DatabaseMeta dbMeta = trans.findDatabase( name ); + assertEquals( dbMetaShared.getHostname(), dbMeta.getHostname() ); + } + private static StepMeta mockStepMeta( String name ) { StepMeta meta = mock( StepMeta.class ); when( meta.getName() ).thenReturn( name );