package net.codjo.dataprocess.server.imports; import net.codjo.dataprocess.common.Log; import net.codjo.imports.common.ProcessorAdapter; import java.io.File; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; /** * */ public class DeleteQuarantineTableProcessor extends ProcessorAdapter { private boolean truncate; private String whereClause = ""; public DeleteQuarantineTableProcessor() { } public DeleteQuarantineTableProcessor(boolean truncate) { this.truncate = truncate; } public DeleteQuarantineTableProcessor(String whereClause) { this(false); this.whereClause = whereClause; } @Override public void preProceed(Connection con, String quarantineTableName, File file) throws SQLException { if (Log.isInfoEnabled()) { Log.info(getClass(), "Ex�cution de : DeleteQuarantineTableProcessor.proceed(" + quarantineTableName + "). Avec truncate = " + truncate); } deleteQuarantineTable(con, quarantineTableName); deleteQUserTable(con, quarantineTableName); } String buildDeleteQuarantineQuery(String quarantineTableName) { if (truncate) { return "truncate table " + quarantineTableName; } else { return " set rowcount 1000 " + " while exists (select 1 from " + quarantineTableName + " " + whereClause + ")" + " begin " + " begin tran " + " delete from " + quarantineTableName + " " + whereClause + " if @@error > 0 " + " rollback " + " else " + " commit " + " end " + " set rowcount 0 "; } } String buildDeleteQUserQuery(String quarantineTableName) throws SQLException { String qUserTable = quarantineToUserQuarantineTableName(quarantineTableName); if (truncate) { return "truncate table " + qUserTable; } else { return " set rowcount 1000 " + " while exists (select 1 from " + qUserTable + " " + whereClause + ")" + " begin " + " begin tran" + " delete from " + qUserTable + " " + whereClause + " if @@error > 0 " + " rollback " + " else " + " commit " + " end " + " set rowcount 0 "; } } private void deleteQuarantineTable(Connection con, String quarantineTableName) throws SQLException { String sql = buildDeleteQuarantineQuery(quarantineTableName); if (Log.isInfoEnabled()) { Log.info(getClass(), "Execution de : " + sql); } Statement stmt = con.createStatement(); try { stmt.executeUpdate(sql); } finally { stmt.close(); } } private void deleteQUserTable(Connection con, String quarantineTableName) throws SQLException { String sql = buildDeleteQUserQuery(quarantineTableName); if (Log.isInfoEnabled()) { Log.info(getClass(), "Execution de : " + sql); } Statement stmt = con.createStatement(); try { stmt.executeUpdate(sql); } finally { stmt.close(); } } String quarantineToFinalTableName(String quarantineTableName) { return quarantineTableName.substring(2, quarantineTableName.length()); } String quarantineToUserQuarantineTableName(String quarantineTableName) { return quarantineTableName.substring(0, 4) + "_USER_" + quarantineTableName.substring(5, quarantineTableName.length()); } }