From 3e5a94d1cb1dfac033a693c5c86235e34e949968 Mon Sep 17 00:00:00 2001 From: labkey-jeckels Date: Mon, 1 Jun 2026 19:48:25 -0700 Subject: [PATCH 1/2] Disable LabKey caching of ResultSet by default --- flow/src/org/labkey/flow/reports/FilterFlowReport.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/flow/src/org/labkey/flow/reports/FilterFlowReport.java b/flow/src/org/labkey/flow/reports/FilterFlowReport.java index 0c26dd5b7..78990fb4f 100644 --- a/flow/src/org/labkey/flow/reports/FilterFlowReport.java +++ b/flow/src/org/labkey/flow/reports/FilterFlowReport.java @@ -385,7 +385,8 @@ else if ("fieldkey".equals(f.type)) } _query = query.toString(); - Results results = QueryService.get().getSelectBuilder(flow, _query).select(); + // Pass true to get a CachedResultSet, which this code requires (see getWrapped() and date manipulation below) + Results results = QueryService.get().getSelectBuilder(flow, _query).select(true); // This still breaks encapsulation, but it's better than a direct cast. CachedResultSet rs = results.getWrapped(CachedResultSet.class); if (null == rs) From 259ad4687176fd39753a1daa4a330238a9fa7385 Mon Sep 17 00:00:00 2001 From: labkey-jeckels Date: Tue, 2 Jun 2026 18:21:58 -0700 Subject: [PATCH 2/2] Disable LabKey caching of ResultSet by default --- flow/src/org/labkey/flow/data/FlowProtocol.java | 2 +- flow/src/org/labkey/flow/data/FlowRun.java | 8 ++++---- flow/src/org/labkey/flow/persist/PersistTests.java | 13 +++++++------ 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/flow/src/org/labkey/flow/data/FlowProtocol.java b/flow/src/org/labkey/flow/data/FlowProtocol.java index 143d4f8de..92fa12e6b 100644 --- a/flow/src/org/labkey/flow/data/FlowProtocol.java +++ b/flow/src/org/labkey/flow/data/FlowProtocol.java @@ -625,7 +625,7 @@ public FCSFilesGroupedBySample getFCSFilesGroupedBySample(User user, Container c Map> fcsFileRuns = new LongHashMap<>(); int linkedFcsFileCount = 0; - try (TableResultSet rs = QueryService.get().select(schema, sql, tableMap, false, false)) + try (TableResultSet rs = QueryService.get().getSelectBuilder(schema, sql, false, tableMap).select()) { for (Map row : rs) { diff --git a/flow/src/org/labkey/flow/data/FlowRun.java b/flow/src/org/labkey/flow/data/FlowRun.java index fab3d8b31..a2b65f8f0 100644 --- a/flow/src/org/labkey/flow/data/FlowRun.java +++ b/flow/src/org/labkey/flow/data/FlowRun.java @@ -124,7 +124,7 @@ public FlowWell[] getWells(boolean realFiles) { _allDatas = getDatas(null); } - + List wells = new ArrayList<>(); for (FlowDataObject obj : _allDatas) { @@ -181,7 +181,7 @@ public FlowCompensationMatrix getCompensationMatrix() return null; return new FlowCompensationMatrix(datas.getFirst()); } - + public long getRunId() { return getExperimentRun().getRowId(); @@ -384,7 +384,7 @@ static public List getRunsForPath(Container container, FlowProtocolStep childProtocol = childFlowProtocol.getProtocol(); } - ExperimentService.get().getExpRuns(container, null, childProtocol, run -> + ExperimentService.get().getExpRuns(container, null, childProtocol, run -> runFilePathRoot == null || (run.getFilePathRoot() != null && runFilePathRoot.toNioPathForRead().toFile().equals(run.getFilePathRoot())) ).forEach( run -> ret.add(new FlowRun(run))); @@ -433,7 +433,7 @@ public FlowFCSFile[] getFCSFilesToBeAnalyzed(FlowProtocol protocol, ScriptSettin filter.addAllClauses(protocol.getFCSAnalysisFilter()); if (settings != null) filter.addAllClauses(settings.getFilter()); - try (ResultSet rs = QueryService.get().select(table, new ArrayList<>(Arrays.asList(colRowId)), filter, null)) + try (ResultSet rs = QueryService.get().getSelectBuilder(table).columns(new ArrayList<>(Arrays.asList(colRowId))).filter(filter).select()) { while (rs.next()) { diff --git a/flow/src/org/labkey/flow/persist/PersistTests.java b/flow/src/org/labkey/flow/persist/PersistTests.java index 5f365b8f1..9ba19d640 100644 --- a/flow/src/org/labkey/flow/persist/PersistTests.java +++ b/flow/src/org/labkey/flow/persist/PersistTests.java @@ -19,6 +19,7 @@ import org.junit.Test; import org.labkey.api.collections.CaseInsensitiveHashMap; import org.labkey.api.data.Container; +import org.labkey.api.data.Results; import org.labkey.api.data.SimpleFilter; import org.labkey.api.data.SqlSelector; import org.labkey.api.data.Table; @@ -154,13 +155,13 @@ public void keywordAliases() throws Exception // verify query FlowSchema schema = new FlowSchema(user, c); - try (ResultSet results = QueryService.get().select(schema, "SELECT " + + try (ResultSet results = QueryService.get().getSelectBuilder(schema, "SELECT " + "A.Name, " + "A.Keyword.keyword1 AS k1, " + "A.Keyword.\"keyword1-alias\" AS k1_alias, " + "A.Keyword('keyword1') AS k1_method, " + "A.Keyword('keyword1-alias') AS k1_alias_method " + - "FROM flow.FCSFiles AS A")) + "FROM flow.FCSFiles AS A").select()) { assertTrue(results.next()); assertEquals(this.getClass().getSimpleName(), results.getString("Name")); @@ -221,13 +222,13 @@ public void keywordAliases() throws Exception // verify query FlowSchema schema = new FlowSchema(user, c); - try (ResultSet results = QueryService.get().select(schema, "SELECT " + + try (ResultSet results = QueryService.get().getSelectBuilder(schema, "SELECT " + "A.Name, " + "A.Keyword.keyword2 AS k2, " + "A.Keyword.\"keyword2-alias\" AS k2_alias, " + "A.Keyword('keyword2') AS k2_method, " + "A.Keyword('keyword2-alias') AS k2_alias_method " + - "FROM flow.FCSFiles AS A")) + "FROM flow.FCSFiles AS A").select()) { assertTrue(results.next()); assertEquals(this.getClass().getSimpleName(), results.getString("Name")); @@ -301,14 +302,14 @@ public void statisticAliases() throws Exception // verify stat values FlowSchema schema = new FlowSchema(user, c); - try (TableResultSet rs = (TableResultSet)QueryService.get().select(schema, "SELECT " + + try (Results rs = QueryService.get().getSelectBuilder(schema, "SELECT " + "A.Name, " + "A.Statistic.\"X:Count\" AS stat, " + "A.Statistic.\"x:count\" AS stat_lowercase, " + "A.Statistic.\"X-alias:Count\" AS stat_alias, " + "A.Statistic('X:Count') AS stat_method, " + "A.Statistic('X-alias:Count') AS stat_alias_method " + - "FROM flow.FCSAnalyses AS A ORDER BY Name")) + "FROM flow.FCSAnalyses AS A ORDER BY Name").select(true)) { assertEquals(2, rs.getSize());