From caec26170a600e43c0c623a8f082db4bd9969fc5 Mon Sep 17 00:00:00 2001 From: labkey-jeckels Date: Sun, 24 May 2026 09:25:08 -0700 Subject: [PATCH] GitHub Issue 1188: Stop JDBC caching by default in QueryService --- .../org/labkey/flow/persist/FlowManager.java | 22 +++++++++---------- .../flow/query/FCSFileCoalescingColumn.java | 2 +- .../labkey/flow/reports/FilterFlowReport.java | 3 +-- .../query/AnalyteSinglePointControlTable.java | 2 +- .../labkey/luminex/query/GuideSetTable.java | 2 +- .../matrix/ExpressionMatrixAssayProvider.java | 8 +++---- .../ms2/peptideview/AbstractMS2RunView.java | 2 +- ms2/src/org/labkey/ms2/query/MS2Schema.java | 2 +- .../labkey/viability/ViabilityManager.java | 2 +- 9 files changed, 22 insertions(+), 23 deletions(-) diff --git a/flow/src/org/labkey/flow/persist/FlowManager.java b/flow/src/org/labkey/flow/persist/FlowManager.java index 5481ef5aa8..9e5c7b25ea 100644 --- a/flow/src/org/labkey/flow/persist/FlowManager.java +++ b/flow/src/org/labkey/flow/persist/FlowManager.java @@ -1400,20 +1400,20 @@ public Map getUsageMetrics(User user, Container c, boolean inclu // get the count of analysis folders public int getAnalysisFolderCount(FlowSchema schema) { - return QueryService.get().selector(schema, "SELECT COUNT(*) FROM " + FlowSchema.SCHEMANAME + "." + FlowTableType.Analyses.name()).getObject(Long.class).intValue(); + return QueryService.get().getSelectBuilder(schema, "SELECT COUNT(*) FROM " + FlowSchema.SCHEMANAME + "." + FlowTableType.Analyses.name()).buildSqlSelector().getObject(Long.class).intValue(); } // get the count of analysis scripts public int getAnalysisScriptCount(FlowSchema schema) { - return QueryService.get().selector(schema, "SELECT COUNT(*) FROM " + FlowSchema.SCHEMANAME + "." + FlowTableType.AnalysisScripts.name()).getObject(Long.class).intValue(); + return QueryService.get().getSelectBuilder(schema, "SELECT COUNT(*) FROM " + FlowSchema.SCHEMANAME + "." + FlowTableType.AnalysisScripts.name()).buildSqlSelector().getObject(Long.class).intValue(); } // get the count of samples in the sample set public int getSampleCount(Container c, User user, ExpSampleType st) { UserSchema schema = QueryService.get().getUserSchema(user, c, SamplesSchema.SCHEMA_SAMPLES); - return QueryService.get().selector(schema, "SELECT COUNT(*) FROM samples." + st.getName()).getObject(Long.class).intValue(); + return QueryService.get().getSelectBuilder(schema, "SELECT COUNT(*) FROM samples." + st.getName()).buildSqlSelector().getObject(Long.class).intValue(); } public int getTempTableCount() @@ -1494,7 +1494,7 @@ public Map removeRowNum(Map row) // count of runs created from an Analysis Script public Map getAnalysisScriptRunCount(FlowSchema schema) { - return removeRowNum(QueryService.get().selector(schema, """ + return removeRowNum(QueryService.get().getSelectBuilder(schema, """ SELECT COUNT(*) AS RunCount, MAX(Created) AS CreatedMax, @@ -1502,13 +1502,13 @@ public Map getAnalysisScriptRunCount(FlowSchema schema) SUM(CompensationControlCount) AS CompControlCount, SUM(FCSFileCount) AS FCSFileCount FROM flow.Runs - WHERE AnalysisScript IS NOT NULL""").getMap()); + WHERE AnalysisScript IS NOT NULL""").buildSqlSelector().getMap()); } // count of runs created from a FlowJo Workspace public Map getWorkspaceRunCount(FlowSchema schema) { - return removeRowNum(QueryService.get().selector(schema, """ + return removeRowNum(QueryService.get().getSelectBuilder(schema, """ SELECT COUNT(*) AS RunCount, MAX(Created) AS CreatedMax, @@ -1516,13 +1516,13 @@ public Map getWorkspaceRunCount(FlowSchema schema) SUM(CompensationControlCount) AS CompControlCount, SUM(FCSFileCount) AS FCSFileCount FROM flow.Runs - WHERE Workspace IS NOT NULL""").getMap()); + WHERE Workspace IS NOT NULL""").buildSqlSelector().getMap()); } // count of runs created from an analysis archive import public Map getExternalAnalysisRunCount(FlowSchema schema) { - return removeRowNum(QueryService.get().selector(schema, + return removeRowNum(QueryService.get().getSelectBuilder(schema, "SELECT\n" + " COUNT(*) AS RunCount,\n" + " MAX(Created) AS CreatedMax,\n" + @@ -1530,12 +1530,12 @@ public Map getExternalAnalysisRunCount(FlowSchema schema) " SUM(CompensationControlCount) AS CompControlCount,\n" + " SUM(FCSFileCount) AS FCSFileCount\n" + "FROM flow.Runs\n" + - "WHERE AnalysisEngine = '" + AnalysisEngine.Archive.name() + "'").getMap()); + "WHERE AnalysisEngine = '" + AnalysisEngine.Archive.name() + "'").buildSqlSelector().getMap()); } public Map getFCSFileOnlyRunCount(FlowSchema schema) { - return removeRowNum(QueryService.get().selector(schema, """ + return removeRowNum(QueryService.get().getSelectBuilder(schema, """ SELECT COUNT(*) AS RunCount, MAX(Created) AS CreatedMax, @@ -1543,7 +1543,7 @@ public Map getFCSFileOnlyRunCount(FlowSchema schema) SUM(CompensationControlCount) AS CompControlCount, SUM(FCSFileCount) AS FCSFileCount FROM flow.Runs - WHERE ProtocolStep = 'Keywords'""").getMap()); + WHERE ProtocolStep = 'Keywords'""").buildSqlSelector().getMap()); } public int getRunCount(Container container, ObjectType type) diff --git a/flow/src/org/labkey/flow/query/FCSFileCoalescingColumn.java b/flow/src/org/labkey/flow/query/FCSFileCoalescingColumn.java index 2a81685ffb..8c033dcca9 100644 --- a/flow/src/org/labkey/flow/query/FCSFileCoalescingColumn.java +++ b/flow/src/org/labkey/flow/query/FCSFileCoalescingColumn.java @@ -130,7 +130,7 @@ public void declareJoins(String parentAlias, Map map) fields.addAll(coalesceFields); Map columnMap = QueryService.get().getColumns(parentTable, fields); - SQLFragment sub = QueryService.get().getSelectSQL(parentTable, columnMap.values(), null, null, Table.ALL_ROWS, Table.NO_OFFSET, false); + SQLFragment sub = QueryService.get().getSelectBuilder(parentTable).columns(columnMap.values()).buildSqlFragment(); SQLFragment coalesceFrag = new SQLFragment(); coalesceFrag.append("SELECT\n"); diff --git a/flow/src/org/labkey/flow/reports/FilterFlowReport.java b/flow/src/org/labkey/flow/reports/FilterFlowReport.java index 7293830eb9..7fdf2fceb6 100644 --- a/flow/src/org/labkey/flow/reports/FilterFlowReport.java +++ b/flow/src/org/labkey/flow/reports/FilterFlowReport.java @@ -385,8 +385,7 @@ else if ("fieldkey".equals(f.type)) } _query = query.toString(); - Results results = QueryService.get().getSelectBuilder(flow, _query) - .select(null, true); + Results results = QueryService.get().getSelectBuilder(flow, _query).select(); // This still breaks encapsulation, but it's better than a direct cast. CachedResultSet rs = results.getWrapped(CachedResultSet.class); if (null == rs) diff --git a/luminex/src/org/labkey/luminex/query/AnalyteSinglePointControlTable.java b/luminex/src/org/labkey/luminex/query/AnalyteSinglePointControlTable.java index 8b7dc7c4c0..32e0bb8e4c 100644 --- a/luminex/src/org/labkey/luminex/query/AnalyteSinglePointControlTable.java +++ b/luminex/src/org/labkey/luminex/query/AnalyteSinglePointControlTable.java @@ -82,7 +82,7 @@ public AnalyteSinglePointControlTable(final LuminexProtocolSchema schema, Contai // TODO ContainerFilter -- Do we really want a non-permission checking container filter here? LuminexDataTable dataTable = schema.createDataTable(ContainerFilter.getUnsafeEverythingFilter(), false); List dataColumns = Arrays.asList(dataTable.getColumn("FlaggedAsExcluded"), dataTable.getColumn("FIBackground"), dataTable.getColumn("Description"), dataTable.getColumn("Data"), dataTable.getColumn("Analyte")); - avgFiSQL.append(QueryService.get().getSelectSQL(dataTable, dataColumns, null, null, Table.ALL_ROWS, 0, false)); + avgFiSQL.append(QueryService.get().getSelectBuilder(dataTable).columns(dataColumns).buildSqlFragment()); avgFiSQL.append(") dr, "); avgFiSQL.append(ExperimentService.get().getTinfoData(), "d"); avgFiSQL.append(", "); diff --git a/luminex/src/org/labkey/luminex/query/GuideSetTable.java b/luminex/src/org/labkey/luminex/query/GuideSetTable.java index c09d5050cf..e999808cb8 100644 --- a/luminex/src/org/labkey/luminex/query/GuideSetTable.java +++ b/luminex/src/org/labkey/luminex/query/GuideSetTable.java @@ -206,7 +206,7 @@ private void addFIColumns(TableInfo joinTable, String srcFIColumnName, String ta joinTable.getColumn("IncludeInGuideSetCalculation"), joinTable.getColumn(srcFIColumnName)); SQLFragment baseSQL = new SQLFragment(" FROM ("); - baseSQL.append(QueryService.get().getSelectSQL(joinTable, columns, null, null, Table.ALL_ROWS, 0, false)); + baseSQL.append(QueryService.get().getSelectBuilder(joinTable).columns(columns).buildSqlFragment()); baseSQL.append(") x WHERE x."); baseSQL.append(guideSetColumnName); baseSQL.append(" = "); diff --git a/microarray/src/org/labkey/microarray/matrix/ExpressionMatrixAssayProvider.java b/microarray/src/org/labkey/microarray/matrix/ExpressionMatrixAssayProvider.java index 9274d256b0..8564ebfdea 100644 --- a/microarray/src/org/labkey/microarray/matrix/ExpressionMatrixAssayProvider.java +++ b/microarray/src/org/labkey/microarray/matrix/ExpressionMatrixAssayProvider.java @@ -220,8 +220,8 @@ public void beforeXarExportRun(ExpRun run, ExperimentRunType xrun) QuerySchema microarray = DefaultSchema.get(user, container).getSchema("Microarray"); if (null == microarray) return; - Map map = QueryService.get().selector(microarray, "SELECT RowId, Name FROM FeatureAnnotationSet") - .getValueMap(Long.class); + Map map = QueryService.get().getSelectBuilder(microarray, "SELECT RowId, Name FROM FeatureAnnotationSet") + .buildSqlSelector().getValueMap(Long.class); mapRowIdName = (Map)map; // Make sure this is really ? if (!mapRowIdName.isEmpty()) @@ -253,8 +253,8 @@ public void beforeXarImportRun(ExperimentRunType xrun) if (null == microarray) return; Map map = new HashMap<>(); - QueryService.get().selector(microarray, "SELECT Name, RowId FROM FeatureAnnotationSet") - .forEach(rs -> map.put(rs.getString(1),rs.getLong(2))); + QueryService.get().getSelectBuilder(microarray, "SELECT Name, RowId FROM FeatureAnnotationSet") + .buildSqlSelector().forEach(rs -> map.put(rs.getString(1),rs.getLong(2))); mapNameRowId = map; // Make sure this is really ? if (!mapNameRowId.isEmpty()) diff --git a/ms2/src/org/labkey/ms2/peptideview/AbstractMS2RunView.java b/ms2/src/org/labkey/ms2/peptideview/AbstractMS2RunView.java index d166f7f1c1..5829caf792 100644 --- a/ms2/src/org/labkey/ms2/peptideview/AbstractMS2RunView.java +++ b/ms2/src/org/labkey/ms2/peptideview/AbstractMS2RunView.java @@ -410,7 +410,7 @@ protected Pair generateSubSelect(NestableQueryView quer QueryService.get().ensureRequiredColumns(tinfo, columns, filter, sort, new HashSet<>()); - SQLFragment sql = QueryService.get().getSelectSQL(tinfo, columns, filter, sort, Table.ALL_ROWS, Table.NO_OFFSET, false); + SQLFragment sql = QueryService.get().getSelectBuilder(tinfo).columns(columns).filter(filter).sort(sort).buildSqlFragment(); return new Pair<>(desiredCol, sql); } diff --git a/ms2/src/org/labkey/ms2/query/MS2Schema.java b/ms2/src/org/labkey/ms2/query/MS2Schema.java index fd1f255c39..17ed343532 100644 --- a/ms2/src/org/labkey/ms2/query/MS2Schema.java +++ b/ms2/src/org/labkey/ms2/query/MS2Schema.java @@ -1085,7 +1085,7 @@ public StringExpression getURL(ColumnInfo parent) TableInfo proteinGroupMembershipTable = createProteinGroupMembershipTable(form, context, false); ColumnInfo proteinGroupColumn = proteinGroupMembershipTable.getColumn("ProteinGroupId"); - SQLFragment selectSQL = QueryService.get().getSelectSQL(proteinGroupMembershipTable, Collections.singleton(proteinGroupColumn), null, null, Table.ALL_ROWS, Table.NO_OFFSET, false); + SQLFragment selectSQL = QueryService.get().getSelectBuilder(proteinGroupMembershipTable).columns(Collections.singleton(proteinGroupColumn)).buildSqlFragment(); SQLFragment filterSQL = new SQLFragment("ProteinGroupId IN (SELECT ").appendIdentifier(proteinGroupColumn.getAlias()).append(" FROM ("); filterSQL.append(selectSQL); filterSQL.append(") x)"); diff --git a/viability/src/org/labkey/viability/ViabilityManager.java b/viability/src/org/labkey/viability/ViabilityManager.java index ddb084d144..6f8037e3ea 100644 --- a/viability/src/org/labkey/viability/ViabilityManager.java +++ b/viability/src/org/labkey/viability/ViabilityManager.java @@ -400,7 +400,7 @@ private static SQLFragment specimenAggregates(ViabilityAssaySchema schema, ExpRu // Only update results in the run filter.addCondition(FieldKey.fromParts("ResultID", "Run"), run.getRowId()); } - SQLFragment sub = QueryService.get().getSelectSQL(rs, columnMap.values(), filter, null, Table.ALL_ROWS, Table.NO_OFFSET, false); + SQLFragment sub = QueryService.get().getSelectBuilder(rs).columns(columnMap.values()).filter(filter).buildSqlFragment(); SQLFragment groupFrag = new SQLFragment(); groupFrag.append("SELECT\n");