
fr.ird.observe.spi.referential.sql.SqlStatements Maven / Gradle / Ivy
package fr.ird.observe.spi.referential.sql;
/*-
* #%L
* ObServe Toolkit :: Dto
* %%
* Copyright (C) 2017 - 2021 Ultreia.io
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* .
* #L%
*/
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.nuiton.topia.persistence.metadata.TopiaMetadataAssociation;
import org.nuiton.topia.persistence.metadata.TopiaMetadataComposition;
import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity;
import java.sql.Timestamp;
import java.util.Date;
import java.util.Objects;
/**
* Created on 26/09/2020.
*
* @author Tony Chemit - [email protected]
* @since 8.1.0
*/
public class SqlStatements {
/**
* A prefix to add on some association statements to be able to sort distinguish from other statements.
*/
public static final String ASSOCIATION_STATEMENT_PREFIX = "$$_";
/**
* To insert a entity.
*/
private static final String INSERT_STATEMENT = "INSERT INTO %s.%s(%s) VALUES (%s);\n";
/**
* To update a entity.
*/
private static final String UPDATE_STATEMENT = "UPDATE %s.%s SET %s WHERE topiaId ='%s';\n";
/**
* To delete a entity.
*/
private static final String DELETE_STATEMENT = "DELETE FROM %s.%s WHERE topiaId = '%s';\n";
/**
* To update a reference of a composition relation.
*/
private static final String COMPOSITION_UPDATE_STATEMENT = "UPDATE %s.%s SET %s = '%s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%s'::timestamp WHERE %s = '%s';\n";
/**
* To insert a association entry.
*/
private static final String ASSOCIATION_INSERT_STATEMENT = "INSERT INTO %s.%s(%s, %s) VALUES ('%s', '%s');\n";
/**
* To update a reference of an association relation.
*/
private static final String ASSOCIATION_UPDATE_STATEMENT = "UPDATE %s.%s SET %s = '%s' WHERE %s = '%s';\n";
/**
* To delete a association entity.
*/
private static final String ASSOCIATION_DELETE_STATEMENT = "DELETE FROM %s.%s WHERE %s = '%s';\n";
private static final Logger log = LogManager.getLogger(SqlStatements.class);
public static String generateInsertStatement(TopiaMetadataEntity entity, String columnNames, String values) {
String sql = String.format(INSERT_STATEMENT,
entity.getDbSchemaName(),
entity.getDbTableName(),
columnNames,
values);
log.debug("sql: " + sql);
return sql;
}
public static String generateUpdateStatement(TopiaMetadataEntity entity, String sourceId, String values) {
String sql = String.format(UPDATE_STATEMENT,
entity.getDbSchemaName(),
entity.getDbTableName(),
values,
sourceId);
log.debug("sql: " + sql);
return sql;
}
public static String generateDeleteStatement(TopiaMetadataEntity entity, String sourceId) {
String sql = String.format(DELETE_STATEMENT,
entity.getDbSchemaName(),
entity.getDbTableName(),
sourceId);
log.debug("sql: " + sql);
return sql;
}
public static String generateCompositionUpdateStatement(TopiaMetadataComposition composition, String sourceId, String replacementId, Date lastUpdateDate) {
String sql = String.format(COMPOSITION_UPDATE_STATEMENT,
composition.getOwner().getDbSchemaName(),
composition.getTableName(),
composition.getTargetDbName(),
replacementId,
new Timestamp(Objects.requireNonNull(lastUpdateDate).getTime()),
composition.getTargetDbName(),
sourceId);
log.debug("sql: " + sql);
return sql;
}
public static String generateAssociationInsertStatement(TopiaMetadataAssociation association, String sourceId, String targetId) {
String sql = String.format(ASSOCIATION_INSERT_STATEMENT,
association.getOwner().getDbSchemaName(),
association.getTableName(),
association.getSourceDbName(),
association.getTargetDbName(),
sourceId,
targetId);
log.debug("sql: " + sql);
return sql;
}
public static String generateAssociationUpdateStatement(TopiaMetadataAssociation association, String sourceId, String replacementId) {
String sql = String.format(ASSOCIATION_UPDATE_STATEMENT,
association.getOwner().getDbSchemaName(),
association.getTableName(),
association.getTargetDbName(),
replacementId,
association.getTargetDbName(),
sourceId);
log.debug("sql: " + sql);
return sql;
}
public static String generateAssociationDeleteStatement(TopiaMetadataAssociation association, String sourceId) {
String sql = String.format(ASSOCIATION_DELETE_STATEMENT,
association.getOwner().getDbSchemaName(),
association.getTableName(),
association.getTargetDbName(),
sourceId);
log.debug("sql: " + sql);
return sql;
}
public static String generateManyToManyAssociationDeleteStatement(TopiaMetadataAssociation association, String sourceId) {
String sql = String.format(ASSOCIATION_DELETE_STATEMENT,
association.getOwner().getDbSchemaName(),
association.getTableName(),
association.getOwner().getDbTableName(),
sourceId);
log.debug("sql: " + sql);
return sql;
}
public static String boxAssociationStatement(String statement) {
if (!statement.startsWith(ASSOCIATION_STATEMENT_PREFIX)) {
return ASSOCIATION_STATEMENT_PREFIX + statement;
}
return statement;
}
public static String unboxAssociationStatement(String statement) {
if (statement.startsWith(ASSOCIATION_STATEMENT_PREFIX)) {
return statement.substring(ASSOCIATION_STATEMENT_PREFIX.length());
}
return statement;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy