Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe Commits: 13700605 by Tony CHEMIT at 2018-09-12T12:38:59Z La synchro référentiel simple ne fonctionne pas, l'ordre des requetes à executer n'est pas bon - Closes #1047 - - - - - 3 changed files: - services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java - services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java - services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java Changes: ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java ===================================== @@ -24,9 +24,17 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.sql; import com.google.common.collect.ImmutableList; import fr.ird.observe.dto.reference.ReferentialDtoReference; -import fr.ird.observe.spi.DbModelHelper; import fr.ird.observe.dto.referential.ReferentialDto; import fr.ird.observe.persistence.ObserveEntityEnum; +import fr.ird.observe.spi.DbModelHelper; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + import java.sql.Timestamp; import java.util.Collection; import java.util.Date; @@ -35,13 +43,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; -import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderFactory; /** * Pour générer une requète sql d'ajout à partir d'un référentiel donné. @@ -56,7 +57,8 @@ public class InsertSqlStatementGenerator<D extends ReferentialDto> { private static final Logger log = LogManager.getLogger(InsertSqlStatementGenerator.class); private static final String INSERT_STATEMENT = "INSERT INTO %s.%s(%s) VALUES (%s);\n"; - private static final String NM_ASSOCIATION_INSERT_STATEMENT = "INSERT INTO %s.%s(%s, %s) VALUES ('%s', '%s');\n"; + // We use a special prefix because those requests must be applied after all simple insert requests + public static final String MANY_TO_MANY_ASSOCIATION_INSERT_STATEMENT = "$$_INSERT INTO %s.%s(%s, %s) VALUES ('%s', '%s');\n"; private final Set<String> columnNames; private final String schemaName; @@ -207,7 +209,7 @@ public class InsertSqlStatementGenerator<D extends ReferentialDto> { String associationId, ImmutableList.Builder<String> builder) { - String sql = String.format(NM_ASSOCIATION_INSERT_STATEMENT, + String sql = String.format(MANY_TO_MANY_ASSOCIATION_INSERT_STATEMENT, schemaName, nmAssociationTableName, this.tableName, ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java ===================================== @@ -25,6 +25,14 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.sql; import com.google.common.collect.ImmutableList; import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.dto.referential.ReferentialDto; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + import java.sql.Timestamp; import java.util.Collection; import java.util.Date; @@ -32,13 +40,8 @@ import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import java.util.TreeMap; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; -import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderFactory; + +import static fr.ird.observe.services.local.service.actions.synchro.referential.sql.InsertSqlStatementGenerator.MANY_TO_MANY_ASSOCIATION_INSERT_STATEMENT; /** * Pour générer une requète sql de mise à jour à partir d'un référentiel donné. @@ -53,8 +56,8 @@ public class UpdateSqlStatementGenerator<D extends ReferentialDto> { private static final Logger log = LogManager.getLogger(UpdateSqlStatementGenerator.class); private static final String UPDATE_STATEMENT = "UPDATE %s.%s SET %s WHERE topiaId ='%s';\n"; - private static final String MANY_TO_MANY_ASSOCIATION_DELETE_STATEMENT = "DELETE FROM %s.%s WHERE %s = '%s';\n"; - private static final String MANY_TO_MANY_ASSOCIATION_INSERT_STATEMENT = "INSERT INTO %s.%s(%s, %s) VALUES ('%s', '%s');\n"; + // We use a special prefix because those requests must be applied before all simple insert requests + private static final String MANY_TO_MANY_ASSOCIATION_DELETE_STATEMENT = "$$_DELETE FROM %s.%s WHERE %s = '%s';\n"; private final Map<String, String> columnNames; private final String schemaName; ===================================== services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java ===================================== @@ -23,21 +23,22 @@ package fr.ird.observe.services.service.actions.synchro.referential.legacy; */ import com.google.common.collect.ImmutableSet; -import fr.ird.observe.spi.DtoModelHelper; -import fr.ird.observe.spi.DtoModelClasses; import fr.ird.observe.dto.reference.DtoReferenceDefinition; -import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet; import fr.ird.observe.dto.reference.ReferentialDtoReference; +import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet; import fr.ird.observe.dto.referential.ReferentialDto; import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffState; import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffs; import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffsEngine; +import fr.ird.observe.spi.DtoModelClasses; +import fr.ird.observe.spi.DtoModelHelper; +import org.apache.commons.collections4.CollectionUtils; + import java.util.LinkedHashSet; import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; -import org.apache.commons.collections4.CollectionUtils; /** * Created on 28/06/16. @@ -90,6 +91,8 @@ public class UnidirectionalReferentialSynchronizeEngine { UnidirectionalReferentialSynchronizeResult result = new UnidirectionalReferentialSynchronizeResult(); Set<String> insertSqlRequests = new LinkedHashSet<>(); + Set<String> insertAssociationSqlRequests = new LinkedHashSet<>(); + Set<String> deleteAssociationSqlRequests = new LinkedHashSet<>(); Set<String> updateSqlRequests = new LinkedHashSet<>(); Set<String> deleteSqlRequests = new LinkedHashSet<>(); @@ -126,8 +129,11 @@ public class UnidirectionalReferentialSynchronizeEngine { if (sqlStatement.startsWith("INSERT")) { insertSqlRequests.add(sqlStatement); - } - if (sqlStatement.startsWith("UPDATE")) { + } else if (sqlStatement.startsWith("$$_INSERT")) { + insertAssociationSqlRequests.add(sqlStatement.substring(3)); + } else if (sqlStatement.startsWith("$$_DELETE")) { + deleteAssociationSqlRequests.add(sqlStatement.substring(3)); + } else if (sqlStatement.startsWith("UPDATE")) { updateSqlRequests.add(sqlStatement); } else { deleteSqlRequests.add(sqlStatement); @@ -135,7 +141,9 @@ public class UnidirectionalReferentialSynchronizeEngine { } } + sqlRequests.addAll(deleteAssociationSqlRequests); sqlRequests.addAll(insertSqlRequests); + sqlRequests.addAll(insertAssociationSqlRequests); sqlRequests.addAll(updateSqlRequests); sqlRequests.addAll(deleteSqlRequests); View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/1370060583b65385bb4ca6906f97... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/1370060583b65385bb4ca6906f97... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT