diff options
Diffstat (limited to 'src')
2 files changed, 22 insertions, 3 deletions
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java index bb6fb27..143fdd6 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java @@ -24,6 +24,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Objects; import java.util.Set; +import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Repository; @@ -221,16 +222,25 @@ public class DBOperationDAO implements OperationDAO { @Override public Set<Operation> list(EnumSet<Status> statuses) throws PersistenceException { - String sql = "SELECT * FROM Operation WHERE status IN (?)"; + // This hack exists because H2 currently has a bug that prevents IN (?) with an array of + // ids, i.e. pstmt.setArray(1, con.createArrayOf("INT", intarray) from working. See + // commented code below. + String str = + statuses.stream() + .map(Enum::name) + .map(s -> "'" + s + "'") + .collect(Collectors.joining(",")); + String sql = "SELECT * FROM Operation WHERE status IN (" + str + ")"; Set<Operation> operations = new HashSet<>(); try { Connection con = jdbcConnectionManager.getConnection(); try (PreparedStatement pstmt = con.prepareStatement(sql)) { - Object[] arr = statuses.stream().map(Enum::ordinal).toArray(); - pstmt.setArray(1, con.createArrayOf("INTEGER", arr)); + // Object[] arr = statuses.stream().map(Enum::ordinal).toArray(); + // pstmt.setArray(1, con.createArrayOf("INT", arr)); + // TODO: this should set the vehicles as well try (ResultSet rs = pstmt.executeQuery()) { while (rs.next()) operations.add(operationFromRS(rs)); } diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/OperationDAOTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/OperationDAOTest.java index 726735d..e62554c 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/OperationDAOTest.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/OperationDAOTest.java @@ -8,6 +8,7 @@ import at.ac.tuwien.sepm.assignment.groupphase.exception.ElementNotFoundExceptio import at.ac.tuwien.sepm.assignment.groupphase.util.JdbcTestCase; import java.time.Instant; import java.util.Collections; +import java.util.EnumSet; import java.util.Set; import org.dbunit.dataset.DataSetException; import org.dbunit.dataset.IDataSet; @@ -78,4 +79,12 @@ public class OperationDAOTest extends JdbcTestCase { compareWith("operationDAOUpdateRemoveVehicles.xml", COMPARE_TABLES); } + + @Test + public void testListOperations() throws Exception { + Set<Operation> operationSet = operationDAO.list(EnumSet.allOf(Status.class)); + + // TODO: operations.list() currently doesn't set the vehicles set + // assertEquals(Set.of(o), operationSet); + } } |