Skip to content

Commit 2203c1e

Browse files
gblaihBryan Lai
authored andcommitted
Add special case for null start end values for numerical study view filters (#11637)
* add case for null start end values for study filters * add test * fix issue with numerical and categorical filtering * add comment * add numerical and categorical test case where numerical filter is null --------- Co-authored-by: Bryan Lai <[email protected]>
1 parent bcbbdda commit 2203c1e

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

src/main/java/org/cbioportal/domain/studyview/StudyViewFilterContext.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,16 @@ public String[] filteredSampleIdentifiers() {
5252
}
5353

5454
public boolean isCategoricalClinicalDataFilter(ClinicalDataFilter clinicalDataFilter) {
55-
var filterValue = clinicalDataFilter.getValues().getFirst();
55+
var firstValue = clinicalDataFilter.getValues().getFirst();
56+
var lastValue = clinicalDataFilter.getValues().getLast();
57+
// there is a case where a categorical filter will have a set of null filter values first
58+
// check if the first set of filter values is null. if so, use the last set of filter values
59+
var filterValue =
60+
firstValue.getStart() == null
61+
&& firstValue.getEnd() == null
62+
&& firstValue.getValue() == null
63+
? lastValue
64+
: firstValue;
5665
return filterValue.getValue() != null;
5766
}
5867
}

src/main/resources/mappers/clickhouse/studyview/ClickhouseStudyViewFilterMapper.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,12 @@
280280
AND
281281
${attribute_value} ILIKE #{dataFilterValue.value}
282282
</if>
283+
<!--
284+
Special case: In case null start, end, and value values go through, don't apply filter.
285+
-->
286+
<if test="dataFilterValue.start == null and dataFilterValue.end == null">
287+
AND 1=1
288+
</if>
283289
<!--
284290
Special case: Numerical range values such as <18, >=90, etc.
285291
We need to make sure to treat these values as numerical for filtering purposes.

src/test/java/org/cbioportal/infrastructure/repository/clickhouse/sample/ClickhouseSampleMapperTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,37 @@ public void getSamplesFilteredByClinicalData() {
149149
studyViewFilter, List.of(), studyViewFilter.getStudyIds(), null));
150150
// 7 genuine NA samples from study_genie_pub + 1 UNKNOWN sample
151151
assertEquals(8, filteredSamples6.size());
152+
153+
// null age filter (start, end, and value are null)
154+
// should return all samples with age attribute
155+
studyViewFilter.setClinicalDataFilters(
156+
List.of(newClinicalDataFilter("age", List.of(newDataFilterValue(null, null, null)))));
157+
var filteredSamples7 =
158+
mapper.getFilteredSamples(
159+
StudyViewFilterFactory.make(
160+
studyViewFilter, List.of(), studyViewFilter.getStudyIds(), null));
161+
assertEquals(27, filteredSamples7.size());
162+
163+
// NA dead filter
164+
studyViewFilter.setClinicalDataFilters(
165+
List.of(newClinicalDataFilter("dead", List.of(newDataFilterValue(null, null, "NA")))));
166+
var filteredSamples8 =
167+
mapper.getFilteredSamples(
168+
StudyViewFilterFactory.make(
169+
studyViewFilter, List.of(), studyViewFilter.getStudyIds(), null));
170+
assertEquals(17, filteredSamples8.size());
171+
172+
// null age filter + NA dead filter (test null numerical + any categorical filter)
173+
// should return same as NA dead filter test
174+
studyViewFilter.setClinicalDataFilters(
175+
List.of(
176+
newClinicalDataFilter("age", List.of(newDataFilterValue(null, null, null))),
177+
newClinicalDataFilter("dead", List.of(newDataFilterValue(null, null, "NA")))));
178+
var filteredSamples9 =
179+
mapper.getFilteredSamples(
180+
StudyViewFilterFactory.make(
181+
studyViewFilter, List.of(), studyViewFilter.getStudyIds(), null));
182+
assertEquals(17, filteredSamples9.size());
152183
}
153184

154185
@Test

0 commit comments

Comments
 (0)