diff --git a/bindings/java/src/org/sleuthkit/datamodel/TimelineManager.java b/bindings/java/src/org/sleuthkit/datamodel/TimelineManager.java index 652b8a63ff7864fbf04c5c83068e210524dc3b0f..9717ba76813c3db3a317b5b21f6f9e48f5f8e51c 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/TimelineManager.java +++ b/bindings/java/src/org/sleuthkit/datamodel/TimelineManager.java @@ -89,7 +89,11 @@ public class TimelineManager { private final String csvFunction; public String csvAggFunction(String args) { - return csvFunction + "(" + args + ")"; + return csvAggFunction(args, ","); + } + + public String csvAggFunction(String args, String seperator) { + return csvFunction + "(" + args + ", '" + seperator + "')"; } TimelineManager(SleuthkitCase tskCase) throws TskCoreException { @@ -343,11 +347,11 @@ public List<CombinedEvent> getCombinedEvents(Interval timeRange, RootFilter filt ArrayList<CombinedEvent> results = new ArrayList<>(); final String query = "SELECT full_description, time, file_id, " - + csvAggFunction("events.event_id::character varying, ','") + "as eventIDs, " - + csvFunction + "(sub_type::character varying, ',') as eventTypes" + + csvAggFunction("CAST(events.event_id AS VARCHAR)") + " AS eventIDs, " + + csvAggFunction("CAST(sub_type AS VARCHAR)") + " AS eventTypes" + " FROM events " + useHashHitTablesHelper(filter) + useTagTablesHelper(filter) + " WHERE time >= " + startTime + " AND time <" + endTime + " AND " + getSQLWhere(filter) - + " GROUP BY time,full_description, file_id ORDER BY time ASC, full_description"; + + " GROUP BY time, full_description, file_id ORDER BY time ASC, full_description"; sleuthkitCase.acquireSingleUserCaseReadLock(); try (CaseDbConnection con = sleuthkitCase.getConnection(); @@ -738,20 +742,21 @@ private void createIndex(final String tableName, final List<String> columnList) private boolean hasDBColumn(final String dbColumn) throws TskCoreException { String query = sleuthkitCase.getDatabaseType() == TskData.DbType.POSTGRESQL - ? " SELECT column_name as name FROM information_schema.columns WHERE table_name='events';" //NON-NLS //Postgres + ? "SELECT column_name as name FROM information_schema.columns WHERE table_name='events';" //NON-NLS //Postgres : "PRAGMA table_info(events)"; //NON-NLS //SQLite sleuthkitCase.acquireSingleUserCaseReadLock(); try (CaseDbConnection con = sleuthkitCase.getConnection(); - Statement stmt = con.createStatement(); - ResultSet executeQuery = stmt.executeQuery(query);) { - - while (executeQuery.next()) { - if (dbColumn.equals(executeQuery.getString("name"))) { //NON-NLS - return true; + Statement statement = con.createStatement();) { + statement.execute(query); + try (ResultSet results = statement.getResultSet();) { + while (results.next()) { + if (dbColumn.equals(results.getString("name"))) { //NON-NLS + return true; + } } } } catch (SQLException ex) { - throw new TskCoreException("problem querying for events table column names", ex); // NON-NLS + throw new TskCoreException("Error querying for events table column names", ex); // NON-NLS } finally { sleuthkitCase.releaseSingleUserCaseReadLock(); }