diff --git a/src/main/java/cz/dynawest/csvcruncher/Cruncher.java b/src/main/java/cz/dynawest/csvcruncher/Cruncher.java index 02e9ff3..9d2e2fe 100644 --- a/src/main/java/cz/dynawest/csvcruncher/Cruncher.java +++ b/src/main/java/cz/dynawest/csvcruncher/Cruncher.java @@ -86,6 +86,7 @@ public void crunch() throws Exception boolean printAsArray = options.jsonExportFormat == Options.JsonExportFormat.ARRAY; Map tablesToFiles = new HashMap<>(); + List outputs = Collections.emptyList(); // Should the result have a unique incremental ID as an added 1st column? CounterColumn counterColumn = new CounterColumn(); @@ -142,7 +143,7 @@ public void crunch() throws Exception String genericSql = StringUtils.defaultString(this.options.sql, DEFAULT_SQL); - List outputs = new ArrayList<>(); + outputs = new ArrayList<>(); // SQL can be executed: @@ -156,7 +157,7 @@ public void crunch() throws Exception } // * per input, and generate one result per execution. else { - Set usedOutputFiles = new HashSet(); + Set usedOutputFiles = new HashSet<>(); for (CruncherInputSubpart inputSubpart : inputSubparts) { @@ -174,10 +175,11 @@ public void crunch() throws Exception { File csvOutFile = output.getOutputFile().toFile(); String sql = genericSql; - String outputTableName = TABLE_NAME__OUTPUT; + //String outputTableName = TABLE_NAME__OUTPUT; + String outputTableName = output.deriveOutputTableName(); if (output.getInputTableName() != null) { sql = sql.replace(SQL_TABLE_PLACEHOLDER, output.getInputTableName()); - outputTableName = output.getInputTableName() + "_out"; + //outputTableName = output.getInputTableName() + "_out"; } @@ -229,28 +231,22 @@ public void crunch() throws Exception finally { LOG.info(" *** SHUTDOWN CLEANUP SEQUENCE ***"); - cleanUpInputOutputTables(tablesToFiles); + cleanUpInputOutputTables(tablesToFiles, outputs); dbHelper.executeDbCommand("DROP SCHEMA PUBLIC CASCADE", "Failed to delete the database: "); this.jdbcConn.close(); LOG.info(" *** END SHUTDOWN CLEANUP SEQUENCE ***"); } } - private void cleanUpInputOutputTables(Map inputTablesToFiles) + private void cleanUpInputOutputTables(Map inputTablesToFiles, List outputs) { - //if (reachedStage.passed(ReachedCrunchStage.INPUT_TABLES_CREATED)) - // I'm removing these stage checks, since the table might have been left - // from previous run. Later let's implement a cleanup at start. TODO - { - dbHelper.detachTables(inputTablesToFiles.keySet(), "Could not delete the input table: "); - } + // TODO: Implement a cleanup at start. https://github.com/OndraZizka/csv-cruncher/issues/18 + dbHelper.detachTables(inputTablesToFiles.keySet(), "Could not delete the input table: "); - //if (reachedStage.passed(ReachedCrunchStage.OUTPUT_TABLE_CREATED)) - { - dbHelper.detachTables(Collections.singleton(TABLE_NAME__OUTPUT), "Could not delete the output table: "); - } + //dbHelper.detachTables(Collections.singleton(TABLE_NAME__OUTPUT), "Could not delete the output table: "); - //if (reachedStage.passed(ReachedCrunchStage.OUTPUT_TABLE_FILLED)) + Set outputTablesNames = outputs.stream().map(x -> x.deriveOutputTableName()).collect(Collectors.toSet()); + dbHelper.detachTables(outputTablesNames, "Could not delete the output table: "); } /** @@ -282,7 +278,7 @@ private class CounterColumn String ddl = ""; String value = ""; - public CounterColumn setDdlAndVal() throws SQLException + public CounterColumn setDdlAndVal() { long initialNumber = getInitialNumber(); diff --git a/src/main/java/cz/dynawest/csvcruncher/CruncherOutputPart.java b/src/main/java/cz/dynawest/csvcruncher/CruncherOutputPart.java index 471140d..332a6d4 100644 --- a/src/main/java/cz/dynawest/csvcruncher/CruncherOutputPart.java +++ b/src/main/java/cz/dynawest/csvcruncher/CruncherOutputPart.java @@ -11,9 +11,11 @@ @Data public class CruncherOutputPart { + public static final String OUTPUT_TABLE_SUFFIX = "_out"; + @NonNull private Path outputFile; - @NonNull private String inputTableName; + private final String inputTableName; // These are filled during processing. @@ -21,4 +23,12 @@ public class CruncherOutputPart private String sql; private List columnNames; + + public String deriveOutputTableName() + { + if (getInputTableName() == null) + return Cruncher.TABLE_NAME__OUTPUT; + else + return getInputTableName() + OUTPUT_TABLE_SUFFIX; + } }