From f8af4f6fff8baa9f9a88204cc73dbfc0742d237f Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Thu, 15 Oct 2026 11:48:09 -0700 Subject: [PATCH] Use helper methods to create IN clauses --- .../specimen/SpecimenRequestManager.java | 11 +---- .../importer/RequestabilityManager.java | 11 +---- .../specimen/query/SpecimenQueryView.java | 16 +------ .../specimen/writer/SpecimenWriter.java | 45 +++---------------- 4 files changed, 11 insertions(+), 72 deletions(-) diff --git a/specimen/src/org/labkey/specimen/SpecimenRequestManager.java b/specimen/src/org/labkey/specimen/SpecimenRequestManager.java index 27764a3b..d42afd45 100644 --- a/specimen/src/org/labkey/specimen/SpecimenRequestManager.java +++ b/specimen/src/org/labkey/specimen/SpecimenRequestManager.java @@ -764,15 +764,8 @@ private void updateVialCounts(Container container, User user, List vials) updateSql.append("WHERE ") .append(tableInfoVial.getColumn("SpecimenId").getValueSql(tableInfoVialSelectName)) - .append(" IN ("); - String sep = ""; - for (Long id : specimenIds) - { - updateSql.append(sep).append("?"); - updateSql.add(id); - sep = ", "; - } - updateSql.append(")\n"); + .appendInClause(specimenIds, SpecimenSchema.get().getSqlDialect()) + .append("\n"); } updateSql.append("\tGROUP BY SpecimenId\n) VialCounts\nWHERE ") diff --git a/specimen/src/org/labkey/specimen/importer/RequestabilityManager.java b/specimen/src/org/labkey/specimen/importer/RequestabilityManager.java index fab4ed54..4b4193ed 100644 --- a/specimen/src/org/labkey/specimen/importer/RequestabilityManager.java +++ b/specimen/src/org/labkey/specimen/importer/RequestabilityManager.java @@ -798,15 +798,8 @@ private void updateRequestability(Container container, User user, boolean resetT updateSQL.add(null); if (vials != null && !vials.isEmpty()) { - updateSQL.append("WHERE RowId IN ("); - String sep = ""; - for (Vial vial : vials) - { - updateSQL.append(sep).append("?"); - sep = ", "; - updateSQL.add(vial.getRowId()); - } - updateSQL.append(")"); + updateSQL.append("WHERE RowId"); + updateSQL.appendInClause(vials.stream().map(Vial::getRowId).toList(), schema.getSqlDialect()); } new SqlExecutor(schema).execute(updateSQL); diff --git a/specimen/src/org/labkey/specimen/query/SpecimenQueryView.java b/specimen/src/org/labkey/specimen/query/SpecimenQueryView.java index 8e23a2b5..22903bfc 100644 --- a/specimen/src/org/labkey/specimen/query/SpecimenQueryView.java +++ b/specimen/src/org/labkey/specimen/query/SpecimenQueryView.java @@ -608,22 +608,10 @@ protected static SimpleFilter addFilterClause(SimpleFilter filter, List vi { if (vials != null && !vials.isEmpty()) { - StringBuilder whereClause = new StringBuilder(); if (viewType.isVialView()) - whereClause.append("RowId IN ("); + filter = filter.addInClause(FieldKey.fromParts("RowId"), vials.stream().map(Vial::getRowId).toList()); else - whereClause.append("SpecimenHash IN ("); - for (int i = 0; i < vials.size(); i++) - { - if (viewType.isVialView()) - whereClause.append(vials.get(i).getRowId()); - else - whereClause.append(vials.get(i).getSpecimenHash()); - if (i < vials.size() - 1) - whereClause.append(", "); - } - whereClause.append(")"); - filter = filter.addWhereClause(whereClause.toString(), null); + filter = filter.addInClause(FieldKey.fromParts("SpecimenHash"), vials.stream().map(Vial::getSpecimenHash).toList()); } return filter; } diff --git a/specimen/src/org/labkey/specimen/writer/SpecimenWriter.java b/specimen/src/org/labkey/specimen/writer/SpecimenWriter.java index c9940809..ffa5a593 100644 --- a/specimen/src/org/labkey/specimen/writer/SpecimenWriter.java +++ b/specimen/src/org/labkey/specimen/writer/SpecimenWriter.java @@ -187,9 +187,8 @@ else if (null == column.getFkColumn()) String conjunction = "WHERE "; if (ctx.getVisitIds() != null && !ctx.getVisitIds().isEmpty()) { - sql.append(conjunction).append("\n ParticipantVisitLookup.VisitRowId IN ("); - sql.append(convertListToString(new ArrayList<>(ctx.getVisitIds()), false)); - sql.append(")"); + sql.append(conjunction).append("\n ParticipantVisitLookup.VisitRowId"); + sql.appendInClause(ctx.getVisitIds(), dialect); conjunction = " AND "; } @@ -197,12 +196,11 @@ else if (null == column.getFkColumn()) { sql.append(conjunction); if (ctx.isAlternateIds()) - sql.append("\n ParticipantLookup.AlternateId IN ("); + sql.append("\n ParticipantLookup.AlternateId"); else - sql.append("\n se.Ptid IN ("); + sql.append("\n se.Ptid"); - sql.append(convertListToString(ctx.getParticipants(), true)); - sql.append(")"); + sql.appendInClause(ctx.getParticipants(), dialect); } sql.append("\nORDER BY se.ExternalId"); @@ -248,41 +246,8 @@ private static boolean shouldRemovePhi(PHI exportPhiLevel, SpecimenColumn column return false; } - private static String convertListToString(List list, boolean withQuotes) - { - StringBuilder sb = new StringBuilder(); - String sep = ""; - for (Object obj : list) - { - sb.append(sep); - if (withQuotes) sb.append("'"); - sb.append(obj.toString()); - if (withQuotes) sb.append("'"); - sep = ","; - } - return sb.toString(); - } - public static class TestCase extends Assert { - @Test - public void testConvertListToString() - { - List ints = new ArrayList<>(); - ints.add(1); - ints.add(2); - ints.add(3); - assertEquals("1,2,3", convertListToString(ints, false)); - assertEquals("'1','2','3'", convertListToString(ints, true)); - - List ptids = new ArrayList<>(); - ptids.add("Ptid1"); - ptids.add("Ptid2"); - ptids.add("Ptid3"); - assertEquals("Ptid1,Ptid2,Ptid3", convertListToString(ptids, false)); - assertEquals("'Ptid1','Ptid2','Ptid3'", convertListToString(ptids, true)); - } - @Test public void testShouldRemovePhi() {