From ab9f530e889010e54ad2af9d04f7b1dddd0d07b4 Mon Sep 17 00:00:00 2001 From: labkey-matthewb Date: Tue, 10 Jun 2025 11:52:35 -0700 Subject: [PATCH 1/2] Reinstate unchecked version of Sort.getOrderByClause() to fix MS2 sql generation --- ms2/src/org/labkey/ms2/compare/CompareQuery.java | 2 +- .../org/labkey/ms2/peptideview/ResultSetSpectrumIterator.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ms2/src/org/labkey/ms2/compare/CompareQuery.java b/ms2/src/org/labkey/ms2/compare/CompareQuery.java index c5b8806d1a..5b63f0a9b1 100644 --- a/ms2/src/org/labkey/ms2/compare/CompareQuery.java +++ b/ms2/src/org/labkey/ms2/compare/CompareQuery.java @@ -378,7 +378,7 @@ protected void sort() { sort.deleteSortColumn(sort.getSortList().size() - 1); } - append(sort.getOrderByClause(MS2Manager.getSqlDialect())); + append(sort.getOrderByClauseUnchecked(MS2Manager.getSqlDialect())); } protected void appendNewLine() diff --git a/ms2/src/org/labkey/ms2/peptideview/ResultSetSpectrumIterator.java b/ms2/src/org/labkey/ms2/peptideview/ResultSetSpectrumIterator.java index be82ef45ec..4993b790f7 100644 --- a/ms2/src/org/labkey/ms2/peptideview/ResultSetSpectrumIterator.java +++ b/ms2/src/org/labkey/ms2/peptideview/ResultSetSpectrumIterator.java @@ -320,7 +320,7 @@ public ResultSet getNextResultSet() sql.append(") X\n"); sql.append(_filter.getWhereSQL(MS2Manager.getTableInfoPeptides())); sql.append('\n'); - sql.append(_sort.getOrderByClause(MS2Manager.getSqlDialect())); + sql.append(_sort.getOrderByClauseUnchecked(MS2Manager.getSqlDialect())); return new SqlSelector(MS2Manager.getSchema(), sql.getSQL(), _filter.getWhereParams(MS2Manager.getTableInfoPeptides())).getResultSet(false); } From c9879f877356f92d41efead34fd3d5d5229bb7ff Mon Sep 17 00:00:00 2001 From: labkey-jeckels Date: Tue, 10 Jun 2025 18:52:16 -0700 Subject: [PATCH 2/2] Always pass a column list to get sort clause --- .../org/labkey/ms2/compare/CompareQuery.java | 29 +++++++-------- .../labkey/ms2/peptideview/MS2ResultSet.java | 14 -------- .../ResultSetSpectrumIterator.java | 35 ------------------- 3 files changed, 12 insertions(+), 66 deletions(-) diff --git a/ms2/src/org/labkey/ms2/compare/CompareQuery.java b/ms2/src/org/labkey/ms2/compare/CompareQuery.java index 5b63f0a9b1..2f0ee973c4 100644 --- a/ms2/src/org/labkey/ms2/compare/CompareQuery.java +++ b/ms2/src/org/labkey/ms2/compare/CompareQuery.java @@ -26,6 +26,7 @@ import org.labkey.api.data.DataRegion; import org.labkey.api.data.DisplayColumn; import org.labkey.api.data.ExcelWriter; +import org.labkey.api.data.JdbcType; import org.labkey.api.data.RuntimeSQLException; import org.labkey.api.data.SQLFragment; import org.labkey.api.data.SimpleFilter; @@ -48,8 +49,11 @@ import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -68,7 +72,7 @@ public class CompareQuery extends SQLFragment private String _header; protected final User _user; - private final Set _columns = new HashSet<>(); + private final Map _columns = new HashMap<>(); protected static final String HEADER_PREFIX = "Numbers below represent "; public CompareQuery(ActionURL currentUrl, List runs, User user) @@ -153,7 +157,12 @@ protected void generateSql(BindException errors) protected void addColumn(String name) { - _columns.add(FieldKey.fromParts(name)); + // Fake up a column map so we can use Sort.getOrderByClause() + FieldKey fk = FieldKey.fromParts(name); + BaseColumnInfo col = new BaseColumnInfo(fk, JdbcType.VARCHAR); + col.setSortFieldKeys(Collections.singletonList(fk)); + col.setAlias(MS2Manager.getSqlDialect().makeDatabaseIdentifier(name)); + _columns.put(fk, col); } protected void selectColumns() @@ -357,20 +366,6 @@ protected void sort() Sort sort = new Sort("-RunCount,-Pattern," + getLabelColumn()); sort.addURLSort(_currentUrl, MS2Manager.getDataRegionNameCompare()); - // Filter out bogus URL sort columns - int index = 0; - while (sort.getSortList().size() > index) - { - if (!_columns.contains(sort.getSortList().get(index).getFieldKey())) - { - sort.deleteSortColumn(index); - } - else - { - index++; - } - } - // TODO: If there are more than three columns in the sort list, then it may be that "BestName" and "Protein" // are in the list, in which case SQL server will fail to execute the query. Therefore, we restrict the number // of columns you can sort on to 3. @@ -378,7 +373,7 @@ protected void sort() { sort.deleteSortColumn(sort.getSortList().size() - 1); } - append(sort.getOrderByClauseUnchecked(MS2Manager.getSqlDialect())); + append(sort.getOrderByClause(MS2Manager.getSqlDialect(), _columns)); } protected void appendNewLine() diff --git a/ms2/src/org/labkey/ms2/peptideview/MS2ResultSet.java b/ms2/src/org/labkey/ms2/peptideview/MS2ResultSet.java index 2bdf949959..387bfd9b39 100644 --- a/ms2/src/org/labkey/ms2/peptideview/MS2ResultSet.java +++ b/ms2/src/org/labkey/ms2/peptideview/MS2ResultSet.java @@ -19,15 +19,12 @@ import org.labkey.api.data.ResultSetWrapper; import org.labkey.api.data.RuntimeSQLException; import org.labkey.api.data.SQLFragment; -import org.labkey.api.data.SimpleFilter; -import org.labkey.api.data.Sort; import org.labkey.ms2.MS2Manager; import org.labkey.ms2.MS2Run; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Iterator; -import java.util.List; /** * User: adam @@ -37,22 +34,12 @@ public abstract class MS2ResultSet extends ResultSetWrapper { protected Iterator _iter; - protected SimpleFilter _filter; - protected Sort _sort; protected MS2ResultSet() { super(null); } - MS2ResultSet(List runs, SimpleFilter filter, Sort sort) - { - super(null); - _iter = runs.iterator(); - _filter = filter; - _sort = sort; - } - // Subclasses should call at the end of their constructors -- this pre-fetches the first result set which ensures // that calls to getMetaData(), etc. will work before next() is called. protected void init() @@ -91,7 +78,6 @@ private boolean prepareNextResultSet() throws SQLException /** * Wraps the join of Peptides, PeptidesData, & SpectraData in a subselect to disambiguate scan & fraction column references in filters/sorts - * */ protected SQLFragment getBaseResultSetSql() { diff --git a/ms2/src/org/labkey/ms2/peptideview/ResultSetSpectrumIterator.java b/ms2/src/org/labkey/ms2/peptideview/ResultSetSpectrumIterator.java index 4993b790f7..202893576d 100644 --- a/ms2/src/org/labkey/ms2/peptideview/ResultSetSpectrumIterator.java +++ b/ms2/src/org/labkey/ms2/peptideview/ResultSetSpectrumIterator.java @@ -17,15 +17,9 @@ package org.labkey.ms2.peptideview; import org.labkey.api.data.RuntimeSQLException; -import org.labkey.api.data.SQLFragment; -import org.labkey.api.data.SimpleFilter; -import org.labkey.api.data.Sort; -import org.labkey.api.data.SqlSelector; import org.labkey.api.util.Pair; import org.labkey.api.util.ResultSetUtil; import org.labkey.ms2.MS2Manager; -import org.labkey.ms2.MS2Run; -import org.labkey.ms2.PeptideManager; import org.labkey.ms2.Spectrum; import org.labkey.ms2.SpectrumException; import org.labkey.ms2.SpectrumImporter; @@ -34,7 +28,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; /** @@ -61,11 +54,6 @@ protected ResultSetSpectrumIterator() { } - public ResultSetSpectrumIterator(List runs, SimpleFilter filter, Sort sort) - { - _rs = new SpectrumResultSet(runs, filter, sort); - } - @Override public boolean hasNext() { @@ -302,27 +290,4 @@ public double getPrecursorMass() } } } - - - private static class SpectrumResultSet extends MS2ResultSet - { - public SpectrumResultSet(List runs, SimpleFilter filter, Sort sort) - { - super(runs, filter, sort); - } - - @Override - public ResultSet getNextResultSet() - { - PeptideManager.replaceRunCondition(_filter, null, _iter.next()); - - SQLFragment sql = getBaseResultSetSql(); - sql.append(") X\n"); - sql.append(_filter.getWhereSQL(MS2Manager.getTableInfoPeptides())); - sql.append('\n'); - sql.append(_sort.getOrderByClauseUnchecked(MS2Manager.getSqlDialect())); - - return new SqlSelector(MS2Manager.getSchema(), sql.getSQL(), _filter.getWhereParams(MS2Manager.getTableInfoPeptides())).getResultSet(false); - } - } }