From b960a0a0a4663d4b9fee12e7bda4d50b0e45efc8 Mon Sep 17 00:00:00 2001 From: Frank Sanders Date: Wed, 23 Aug 2023 09:41:37 +0200 Subject: [PATCH] bugfix --- .../de/opitzconsulting/orcas/diff/DdlBuilder.java | 12 ++++++++---- .../orcas/diff/DdlBuilderAzureSql.java | 10 ++++++++++ .../de/opitzconsulting/orcas/diff/OrcasDiff.java | 9 ++++++++- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/orcas_core/build_source/orcas_diff/src/main/java/de/opitzconsulting/orcas/diff/DdlBuilder.java b/orcas_core/build_source/orcas_diff/src/main/java/de/opitzconsulting/orcas/diff/DdlBuilder.java index 522c000f..6c4866d9 100644 --- a/orcas_core/build_source/orcas_diff/src/main/java/de/opitzconsulting/orcas/diff/DdlBuilder.java +++ b/orcas_core/build_source/orcas_diff/src/main/java/de/opitzconsulting/orcas/diff/DdlBuilder.java @@ -284,9 +284,7 @@ public void alterSequenceIfNeeded( StatementBuilderAlter p1, SequenceDiff pSeque .forceDifferent( SEQUENCE__MAX_VALUE_SELECT )// .handle( p -> { - p.addStmt( "alter sequence " + pSequenceDiff.sequence_nameNew + " increment by " + (lMaxValueSelectValue.longValue() - lIstValue.longValue()) ); - p.addStmt( "declare\n v_dummy number;\n begin\n select " + pSequenceDiff.sequence_nameNew + ".nextval into v_dummy from dual;\n end;" ); - p.addStmt( "alter sequence " + pSequenceDiff.sequence_nameNew + " increment by " + nvl( pSequenceDiff.increment_byNew, 1 ) ); + updateSeqquenceCurrentValue(pSequenceDiff, lMaxValueSelectValue, lIstValue, p); } ); } else @@ -323,6 +321,12 @@ public void alterSequenceIfNeeded( StatementBuilderAlter p1, SequenceDiff pSeque .handle( p -> p.addStmt( "alter sequence " + pSequenceDiff.sequence_nameNew + " " + pSequenceDiff.orderNew.getLiteral() ) ); } + protected void updateSeqquenceCurrentValue(SequenceDiff pSequenceDiff, BigDecimal lMaxValueSelectValue, BigDecimal lIstValue, StatementBuilder p) { + p.addStmt("alter sequence " + pSequenceDiff.sequence_nameNew + " increment by " + (lMaxValueSelectValue.longValue() - lIstValue.longValue())); + p.addStmt("declare\n v_dummy number;\n begin\n select " + pSequenceDiff.sequence_nameNew + ".nextval into v_dummy from dual;\n end;"); + p.addStmt("alter sequence " + pSequenceDiff.sequence_nameNew + " increment by " + nvl(pSequenceDiff.increment_byNew, 1)); + } + public void createSequnece( StatementBuilder p, SequenceDiff pSequenceDiff, DataHandler pDataHandler ) { BigDecimal lMaxValueSelectValue = pDataHandler.getSequenceMaxValueSelectValue( pSequenceDiff ); @@ -1714,7 +1718,7 @@ public void createMview( StatementBuilder p, MviewDiff pMviewDiff ) p.stmtDone(); } - private T nvl( T pObject, T pDefault ) + protected T nvl( T pObject, T pDefault ) { return pObject == null ? pDefault : pObject; } diff --git a/orcas_core/build_source/orcas_diff/src/main/java/de/opitzconsulting/orcas/diff/DdlBuilderAzureSql.java b/orcas_core/build_source/orcas_diff/src/main/java/de/opitzconsulting/orcas/diff/DdlBuilderAzureSql.java index 527f9d36..809b195a 100644 --- a/orcas_core/build_source/orcas_diff/src/main/java/de/opitzconsulting/orcas/diff/DdlBuilderAzureSql.java +++ b/orcas_core/build_source/orcas_diff/src/main/java/de/opitzconsulting/orcas/diff/DdlBuilderAzureSql.java @@ -4,6 +4,7 @@ import de.opitzconsulting.orcas.orig.diff.*; import de.opitzconsulting.origOrcasDsl.DataType; +import java.math.BigDecimal; import java.util.List; import java.util.stream.Collectors; @@ -14,6 +15,15 @@ public DdlBuilderAzureSql(Parameters pParameters, DatabaseHandler pDatabaseHandl super(pParameters, pDatabaseHandler); } + @Override + protected void updateSeqquenceCurrentValue(SequenceDiff pSequenceDiff, BigDecimal lMaxValueSelectValue, BigDecimal lIstValue, StatementBuilder p) { + // if the sequence is new, it needs to be queried for initialization + p.addStmt("declare\n @v_dummy numeric;\n begin\n select @v_dummy = NEXT VALUE FOR " + pSequenceDiff.sequence_nameNew + ";\n end;"); + p.addStmt("alter sequence " + pSequenceDiff.sequence_nameNew + " increment by " + (lMaxValueSelectValue.longValue() - lIstValue.longValue())); + p.addStmt("declare\n @v_dummy numeric;\n begin\n select @v_dummy = NEXT VALUE FOR " + pSequenceDiff.sequence_nameNew + ";\n end;"); + p.addStmt("alter sequence " + pSequenceDiff.sequence_nameNew + " increment by " + nvl(pSequenceDiff.increment_byNew, 1)); + } + @Override protected String getDatatypeName(DataType pData_typeNew) { if (pData_typeNew == DataType.VARCHAR2 || pData_typeNew == DataType.NVARCHAR2) { diff --git a/orcas_core/build_source/orcas_diff/src/main/java/de/opitzconsulting/orcas/diff/OrcasDiff.java b/orcas_core/build_source/orcas_diff/src/main/java/de/opitzconsulting/orcas/diff/OrcasDiff.java index bd8de776..fe601bcd 100644 --- a/orcas_core/build_source/orcas_diff/src/main/java/de/opitzconsulting/orcas/diff/OrcasDiff.java +++ b/orcas_core/build_source/orcas_diff/src/main/java/de/opitzconsulting/orcas/diff/OrcasDiff.java @@ -1262,13 +1262,20 @@ public BigDecimal getSequenceMaxValueSelectValue( SequenceDiff pSequenceDiff ) { if( pSequenceDiff.max_value_selectNew != null ) { - lSollStartValue = (BigDecimal) new WrapperReturnFirstValue( pSequenceDiff.max_value_selectNew, _callableStatementProvider ).executeForValue(); + Object result = new WrapperReturnFirstValue(pSequenceDiff.max_value_selectNew, _callableStatementProvider).executeForValue(); + + if(result instanceof Integer) { + lSollStartValue = new BigDecimal((Integer) result); + } else { + lSollStartValue = (BigDecimal) result; + } lSollStartValue = lSollStartValue.add( BigDecimal.valueOf( 1 ) ); } } catch( Exception e ) { + Orcas.logError("cant execute " + pSequenceDiff.max_value_selectNew + " : " + e, _parameters); // kann vorkommen, wenn fuer das select benoetigte Tabellen nicht // exisitieren. kann erst richtig korrigiert werden, wenn auch der // Tabellenabgleich auf dieses Package umgestellt wurde