Skip to content

Commit 6d8caa2

Browse files
committed
store filtered samples and patients in an array to avoid duplicate filter execution
1 parent 15e3374 commit 6d8caa2

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

src/main/resources/mappers/clickhouse/clinical_data/ClickhouseClinicalDataMapper.xml

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,23 @@
213213

214214
<sql id="getClinicalDataCountsQuery">
215215
(
216-
WITH clinical_data_query AS (
216+
WITH (
217+
SELECT
218+
groupArray(sample_unique_id)
219+
FROM (
220+
<include refid="org.cbioportal.infrastructure.repository.clickhouse.studyview.ClickhouseStudyViewFilterMapper.sampleUniqueIdsFromStudyViewFilter"/>
221+
)
222+
) AS filteredSamplesArray, (
223+
SELECT
224+
groupArray(patient_unique_id)
225+
FROM
226+
sample_derived
227+
WHERE
228+
has(filteredSamplesArray, sample_unique_id)
229+
) AS filteredPatientsArray,
230+
length(arrayDistinct(filteredSamplesArray)) AS filteredSampleCount,
231+
length(arrayDistinct(filteredPatientsArray)) AS filteredPatientCount,
232+
clinical_data_query AS (
217233
SELECT
218234
attribute_name AS attributeId,
219235
attribute_value AS value,
@@ -238,10 +254,10 @@
238254
AND
239255
<choose>
240256
<when test="'${type}' == 'sample'">
241-
<include refid="org.cbioportal.infrastructure.repository.clickhouse.studyview.ClickhouseStudyViewFilterMapper.applyStudyViewFilterUsingSampleId"/>
257+
has(filteredSamplesArray, sample_unique_id)
242258
</when>
243259
<otherwise>
244-
<include refid="org.cbioportal.infrastructure.repository.clickhouse.studyview.ClickhouseStudyViewFilterMapper.applyStudyViewFilterUsingPatientId"/>
260+
has(filteredPatientsArray, patient_unique_id)
245261
</otherwise>
246262
</choose>
247263
AND attribute_name IN
@@ -256,19 +272,19 @@
256272
UNION ALL
257273
SELECT attributeId,
258274
'NA' AS value,
259-
((
275+
(
260276
<choose>
261277
<when test="'${type}' == 'sample' or '${isConflicting}' == 'true'">
262278
<!-- Use sample count for:
263279
1. Pure sample attributes (type='sample')
264280
2. Conflicting attributes (already mapped to sample-level via JOIN) -->
265-
<include refid="org.cbioportal.infrastructure.repository.clickhouse.sample.ClickhouseSampleMapper.getFilteredSampleCount"/>
281+
filteredSampleCount
266282
</when>
267283
<otherwise>
268-
<include refid="org.cbioportal.infrastructure.repository.clickhouse.patient.ClickhousePatientMapper.getFilteredPatientCount"/>
284+
filteredPatientCount
269285
</otherwise>
270286
</choose>
271-
) - clinical_data_sum.sum) AS count
287+
- clinical_data_sum.sum) AS count
272288
FROM clinical_data_sum
273289
<where>
274290
count > 0

0 commit comments

Comments
 (0)