Skip to content

Commit

Permalink
diff reason different detail & no mvlog recreate for tablespace
Browse files Browse the repository at this point in the history
  • Loading branch information
llsand committed Oct 4, 2019
1 parent 67d3704 commit 604de15
Show file tree
Hide file tree
Showing 8 changed files with 289 additions and 192 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@

import org.eclipse.emf.ecore.EStructuralFeature;

import de.opitzconsulting.orcas.diff.RecreateNeededBuilder.Difference;

public class DiffActionReasonDifferent extends DiffActionReason
{
private List<String> diffReasonDetails = new ArrayList<>();
private List<DiffDifference> diffReasonDetails = new ArrayList<>();

public List<String> getDiffReasonDetails()
public List<DiffDifference> getDiffReasonDetails()
{
return diffReasonDetails;
}
Expand All @@ -19,16 +21,18 @@ public DiffActionReasonDifferent( DiffReasonKey pDiffReasonKey )
super( pDiffReasonKey );
}

public DiffActionReasonDifferent( DiffReasonKey pDiffReasonKey, List<String> pDiffReasonDetails )
public DiffActionReasonDifferent( DiffReasonKey pDiffReasonKey, List<DiffDifference> pDiffReasonDetails )
{
super( pDiffReasonKey );

diffReasonDetails = pDiffReasonDetails;
}

public void addDiffReasonDetail( EStructuralFeature pDiffReasonDetail )
public void addDiffReasonDetail( Difference pDifference )
{
diffReasonDetails.add( pDiffReasonDetail.getName() );
if(pDifference.getEAttribute()!=null) {
diffReasonDetails.add(new DiffDifference(pDifference.getEAttribute().getName(),pDifference.getOldValue(), pDifference.getNewValue()));
}
}

@Override
Expand All @@ -49,4 +53,28 @@ public boolean equals( Object pOther )

return diffReasonDetails.equals( lOther.diffReasonDetails );
}

public static class DiffDifference{
private String difference;
private String oldValue;
private String newValue;

public DiffDifference(String pDifference, Object pOldValue, Object pNewValue) {
difference = pDifference;
oldValue = pOldValue == null ? null : pOldValue.toString();
newValue = pNewValue == null ? null : pNewValue.toString();
}

public String getDifference() {
return difference;
}

public String getOldValue() {
return oldValue;
}

public String getNewValue() {
return newValue;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@

import de.opitzconsulting.orcas.diff.DiffAction.DiffReasonType;
import de.opitzconsulting.orcas.diff.DiffReasonKey.DiffReasonKeyRegistry;
import de.opitzconsulting.orcas.diff.RecreateNeededBuilder.Difference;
import de.opitzconsulting.orcas.diff.RecreateNeededBuilder.DifferenceImpl;
import de.opitzconsulting.orcas.diff.RecreateNeededBuilder.DifferenceImplAttributeOnly;
import de.opitzconsulting.orcas.orig.diff.AbstractDiff;
import de.opitzconsulting.orcas.orig.diff.ColumnDiff;
import de.opitzconsulting.orcas.orig.diff.ColumnRefDiff;
Expand Down Expand Up @@ -90,41 +93,41 @@ private List<DiffActionReason> getIndexRecreate( TableDiff pTableDiff, String pI
throw new RuntimeException( "index not found: " + pIndexname + " " + pTableDiff.nameNew );
}

private List<EStructuralFeature> isRecreateColumn( ColumnDiff pColumnDiff )
private List<Difference> isRecreateColumn( ColumnDiff pColumnDiff )
{
List<EStructuralFeature> lReturn = new ArrayList<>();
List<Difference> lReturn = new ArrayList<>();

if( pColumnDiff.data_typeNew != null && pColumnDiff.data_typeOld != null )
{
if( !pColumnDiff.data_typeIsEqual )
{
lReturn.add( COLUMN__DATA_TYPE );
lReturn.add(new DifferenceImpl(COLUMN__DATA_TYPE, pColumnDiff));
}

if( isLessTahnOrNull( pColumnDiff.precisionNew, pColumnDiff.precisionOld ) )
{
lReturn.add( COLUMN__PRECISION );
lReturn.add(new DifferenceImpl(COLUMN__PRECISION, pColumnDiff));
}

if( isLessTahnOrNull( pColumnDiff.scaleNew, pColumnDiff.scaleOld ) )
{
lReturn.add( COLUMN__SCALE );
lReturn.add(new DifferenceImpl(COLUMN__SCALE, pColumnDiff));
}
}

if( !pColumnDiff.object_typeIsEqual )
{
lReturn.add( COLUMN__OBJECT_TYPE );
lReturn.add(new DifferenceImpl(COLUMN__OBJECT_TYPE, pColumnDiff));
}

if( !pColumnDiff.unsignedIsEqual )
{
lReturn.add( COLUMN__UNSIGNED );
lReturn.add(new DifferenceImpl(COLUMN__UNSIGNED, pColumnDiff));
}

if( !pColumnDiff.virtualIsEqual )
{
lReturn.add( COLUMN__VIRTUAL );
lReturn.add(new DifferenceImpl(COLUMN__VIRTUAL, pColumnDiff));
}

return lReturn;
Expand Down Expand Up @@ -252,7 +255,7 @@ private void updateIsRecreateNeeded( ModelDiff pModelDiff )
setRecreateNeededFor( lColumnDiff )//
.ifX( p ->
{
List<EStructuralFeature> lRecreateColumn = isRecreateColumn( p.getDiff() );
List<Difference> lRecreateColumn = isRecreateColumn( p.getDiff() );
if( !lRecreateColumn.isEmpty() )
{
p.setRecreateNeededDifferent( lRecreateColumn );
Expand Down Expand Up @@ -341,13 +344,13 @@ private void updateIsRecreateNeeded( ModelDiff pModelDiff )
{
if( lTableDiff.mviewLogDiff.rowidNew == null && !"primary".equalsIgnoreCase( lTableDiff.mviewLogDiff.primaryKeyOld ) )
{
p.setRecreateNeededDifferent( Collections.singletonList( MVIEW_LOG__PRIMARY_KEY ) );
p.setRecreateNeededDifferentAttributes( Collections.singletonList( MVIEW_LOG__PRIMARY_KEY ) );
}
} )//
.ifDifferent( MVIEW_LOG__ROWID )//
.ifDifferent( MVIEW_LOG__WITH_SEQUENCE )//
.ifDifferent( MVIEW_LOG__COMMIT_SCN )//
.ifDifferent( MVIEW_LOG__TABLESPACE )//
//.ifDifferent( MVIEW_LOG__TABLESPACE )//
// these changes should by applied with alter statements, but it results
// in ORA-27476
.ifDifferent( MVIEW_LOG__START_WITH )//
Expand Down Expand Up @@ -377,7 +380,7 @@ private void updateIsRecreateNeeded( ModelDiff pModelDiff )
{
if( !replaceLinefeedBySpace( lMviewDiff.viewSelectCLOBNew ).equals( replaceLinefeedBySpace( lMviewDiff.viewSelectCLOBOld ) ) )
{
p.setRecreateNeededDifferent( Collections.singletonList( MVIEW__VIEW_SELECT_CLOB ) );
p.setRecreateNeededDifferentAttributes( Collections.singletonList( MVIEW__VIEW_SELECT_CLOB ) );
}
} )//
.calculate();
Expand Down Expand Up @@ -964,7 +967,7 @@ private void handleComment( TableDiff pTableDiff, InlineCommentDiff pInlineComme
{
lDiffReasonType = DiffReasonType.ALTER;
DiffActionReasonDifferent lDiffActionReasonDifferent = new DiffActionReasonDifferent( diffReasonKeyRegistry.getDiffReasonKey( pInlineCommentDiff ) );
lDiffActionReasonDifferent.addDiffReasonDetail( INLINE_COMMENT__COMMENT );
lDiffActionReasonDifferent.addDiffReasonDetail( new DifferenceImplAttributeOnly(INLINE_COMMENT__COMMENT) );
lDiffActionReasonList = Collections.singletonList( lDiffActionReasonDifferent );
}
else
Expand Down
Loading

0 comments on commit 604de15

Please sign in to comment.