Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 2cae4cee by Tony Chemit at 2022-10-03T16:47:31+02:00 Persistence / script - For SynchronizeService.applySql use a SqlScriptConsumer (FIXME should use it anywhere, because it gives us the correct line where error occurs, and batch is not so good in fact...) - - - - - 24b02ad3 by Tony Chemit at 2022-10-03T16:50:28+02:00 Persistence / script - Always add a line end on entity sql script (otherwise in file sql script there is no line - - - - - 584a769e by Tony Chemit at 2022-10-03T17:10:03+02:00 Persistence / script - Always add a line end on entity sql script (otherwise in file sql script there is no line...) - - - - - f122995d by Tony Chemit at 2022-10-03T17:12:29+02:00 See #2429 (https://gitlab.com/ultreiaio/ird-observe/-/issues/2429#note_1122519368) - - - - - e90b62b8 by Tony Chemit at 2022-10-03T17:21:07+02:00 Problème dans la synchronisation simple de référentiels - les désactivations sont executées après les suppressions... - See #2444 - - - - - 6c6c9178 by Tony Chemit at 2022-10-03T17:31:12+02:00 Merge branch 'feature/issue_2444' into develop Problème dans la synchronisation simple de référentiels - les désactivations sont executées après les suppressions.... - Closes #2444 - - - - - 6 changed files: - core/persistence/resources/src/main/resources/db/migration/v9/9.0/96_add_referential_ps_common_ObservedSystem_110-common.sql - core/services/local/src/main/java/fr/ird/observe/services/local/service/referential/SynchronizeServiceLocalSupport.java - toolkit/api/src/main/java/fr/ird/observe/spi/referential/synchro/OneSideSqlResult.java - toolkit/persistence/src/main/java/fr/ird/observe/spi/context/DtoEntityContext.java - toolkit/persistence/src/main/java/fr/ird/observe/spi/referential/OneSideSqlResultBuilderForType.java - toolkit/persistence/src/main/java/org/nuiton/topia/service/sql/script/EntitySqlScript.java Changes: ===================================== core/persistence/resources/src/main/resources/db/migration/v9/9.0/96_add_referential_ps_common_ObservedSystem_110-common.sql ===================================== @@ -20,4 +20,4 @@ -- #L% --- -- See https://gitlab.com/ultreiaio/ird-observe/-/issues/2070 -INSERT INTO ps_common.ObservedSystem(topiaId, topiaVersion, code, status, topiaCreateDate, lastUpdateDate, needComment, schoolType, allowObservation, allowLogbook, label1, label2, label3)VALUES ('fr.ird.referential.common.ObservedSystem#${REFERENTIAL_PREFIX}110', 0, '110', 1, ${CURRENT_DATE}, ${CURRENT_TIMESTAMP}, false, '${SchoolType_0}', TRUE, TRUE, 'Emptying the sack', 'Chavirage de la poche', 'Emptying the sack TODO'); +INSERT INTO ps_common.ObservedSystem(topiaId, topiaVersion, code, status, topiaCreateDate, lastUpdateDate, needComment, schoolType, allowObservation, allowLogbook, label1, label2, label3)VALUES ('fr.ird.referential.common.ObservedSystem#${REFERENTIAL_PREFIX}110', 0, '110', 1, ${CURRENT_DATE}, ${CURRENT_TIMESTAMP}, false, '${SchoolType_0}', TRUE, TRUE, 'Discarding the content of the sack at sea', 'Chavirage de la poche', 'Discarding the content of the sack at sea TODO'); ===================================== core/services/local/src/main/java/fr/ird/observe/services/local/service/referential/SynchronizeServiceLocalSupport.java ===================================== @@ -35,6 +35,7 @@ import fr.ird.observe.spi.module.ObserveBusinessProject; import fr.ird.observe.spi.referential.synchro.OneSideSqlRequest; import fr.ird.observe.spi.referential.synchro.OneSideSqlResult; import io.ultreia.java4all.util.sql.SqlScript; +import io.ultreia.java4all.util.sql.SqlScriptConsumer; import java.util.LinkedHashSet; import java.util.Map; @@ -78,7 +79,7 @@ public class SynchronizeServiceLocalSupport extends ObserveServiceLocal implemen @Override public void applySql(SqlScript script, String lastUpdateDateKey) { if (script != null) { - getTopiaPersistenceContext().executeSqlScript(script); + getTopiaPersistenceContext().executeSqlScript(SqlScriptConsumer.of(script)); } updateLastUpdateDates(lastUpdateDateKey); } ===================================== toolkit/api/src/main/java/fr/ird/observe/spi/referential/synchro/OneSideSqlResult.java ===================================== @@ -186,8 +186,8 @@ public class OneSideSqlResult implements JsonAware { statements.addAll(oppositeSqlResult.getUpdateSqlCode()); statements.addAll(oppositeSqlResult.getUpdateAssociationSqlCode()); } - statements.addAll(getDeleteSqlCode()); statements.addAll(getDeactivateSqlCode()); + statements.addAll(getDeleteSqlCode()); if (statements.isEmpty()) { return Optional.empty(); } ===================================== toolkit/persistence/src/main/java/fr/ird/observe/spi/context/DtoEntityContext.java ===================================== @@ -287,14 +287,14 @@ public interface DtoEntityContext< default List<String> updateLastUpdateDateField(ToolkitTopiaPersistenceContextSupport persistenceContext, String id, Date timeStamp) { List<String> requests = getUpdateLastUpdateDateFieldScript().generate(id, timeStamp); - String sql = String.join("\n", requests); + String sql = String.join("", requests); persistenceContext.executeSqlScript(SqlScriptReader.of(sql)); return requests; } default List<String> updateLastUpdateDateTable(ToolkitTopiaPersistenceContextSupport persistenceContext, Date timeStamp) { List<String> requests = getUpdateLastUpdateDateTableScript().generate(timeStamp); - String sql = String.join("\n", requests); + String sql = String.join("", requests); persistenceContext.executeSqlScript(SqlScriptReader.of(sql)); return requests; } ===================================== toolkit/persistence/src/main/java/fr/ird/observe/spi/referential/OneSideSqlResultBuilderForType.java ===================================== @@ -31,6 +31,7 @@ import fr.ird.observe.spi.referential.synchro.SynchronizeTask; import fr.ird.observe.spi.service.ServiceContext; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.nuiton.topia.service.sql.script.EntitySqlScript; import org.nuiton.topia.service.sql.script.ReplaceReferentialScript; import java.util.Date; @@ -117,7 +118,7 @@ public class OneSideSqlResultBuilderForType<D extends ReferentialDto, E extends } for (E entity : insertEntities) { List<String> sqlList = copyScript.generateCopyScript(context.getTopiaPersistenceContext(), entity, idsOnlyExistingOnThisSide); - sqlList.forEach(resultBuilder::addInsertStatement); + EntitySqlScript.appendEol(sqlList.stream()).forEach(resultBuilder::addInsertStatement); } } @@ -129,7 +130,7 @@ public class OneSideSqlResultBuilderForType<D extends ReferentialDto, E extends Set<String> optionalIncludedPropertyNames = task.getOptionalIncludedPropertyNames().orElse(null); Date lastUpdateDate = date(task.getLastUpdateDate()); List<String> sqlList = updateScript.generateUpdateScript(context.getTopiaPersistenceContext(), entity, optionalIncludedPropertyNames, lastUpdateDate, idsOnlyExistingOnThisSide); - sqlList.forEach(resultBuilder::addUpdateStatement); + EntitySqlScript.appendEol(sqlList.stream()).forEach(resultBuilder::addUpdateStatement); } } @@ -141,7 +142,7 @@ public class OneSideSqlResultBuilderForType<D extends ReferentialDto, E extends Set<String> optionalIncludedPropertyNames = task.getOptionalIncludedPropertyNames().orElse(null); Date lastUpdateDate = date(task.getLastUpdateDate()); List<String> sqlList = updateScript.generateUpdateScript(context.getTopiaPersistenceContext(), entity, optionalIncludedPropertyNames, lastUpdateDate, idsOnlyExistingOnThisSide); - sqlList.forEach(resultBuilder::addUpdateStatement); + EntitySqlScript.appendEol(sqlList.stream()).forEach(resultBuilder::addUpdateStatement); } } ===================================== toolkit/persistence/src/main/java/org/nuiton/topia/service/sql/script/EntitySqlScript.java ===================================== @@ -36,6 +36,7 @@ import java.util.stream.Stream; */ public class EntitySqlScript { + private static final String EOL = "\n"; //FIXME Add also parameters descriptions (how many and their type) to produce a safe script private final List<String> requests; @@ -45,7 +46,7 @@ public class EntitySqlScript { public List<String> generate(Function<String, String> lineTransformer) { Stream<String> requests = stream(); - return requests.map(lineTransformer).collect(Collectors.toList()); + return appendEol(requests.map(lineTransformer)).collect(Collectors.toList()); } public Stream<String> stream() { @@ -55,4 +56,15 @@ public class EntitySqlScript { public List<String> requests() { return requests; } + + public static String appendEol(String l) { + if (l.endsWith(EOL)) { + return l; + } + return l + EOL; + } + + public static Stream<String> appendEol(Stream<String> s) { + return s.map(EntitySqlScript::appendEol); + } } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/a1862b5a6ca679a0e37da2369... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/a1862b5a6ca679a0e37da2369... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT (@tchemit)