From 3b1264f2a38b7fab83bdd2f328902d91b4758ec5 Mon Sep 17 00:00:00 2001 From: Dan Galdi Date: Thu, 8 Aug 2024 12:09:40 -0400 Subject: [PATCH] Fix distribution query to work with Oracle or Postgres --- build.gradle.kts | 2 +- .../model/db/FilteredResultFactory.java | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 342c62f..ce0ef5e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ // Project settings group = "org.veupathdb.eda" -version = "4.16.8" +version = "4.16.9" plugins { `java-library` diff --git a/src/main/java/org/veupathdb/service/eda/subset/model/db/FilteredResultFactory.java b/src/main/java/org/veupathdb/service/eda/subset/model/db/FilteredResultFactory.java index efc5ae5..8bd31e0 100644 --- a/src/main/java/org/veupathdb/service/eda/subset/model/db/FilteredResultFactory.java +++ b/src/main/java/org/veupathdb/service/eda/subset/model/db/FilteredResultFactory.java @@ -782,10 +782,11 @@ static String generateDistributionSql(String appDbSchema, Entity outputEntity, V String tallTblAbbrev = "tall"; String ancestorTblAbbrev = "subset"; + String distTblAbbrev = "dist"; return // with clauses create an entity-named filtered result for each relevant entity generateFilterWithClauses(appDbSchema, prunedEntityTree, filters) + NL + - generateDistributionSelectClause(distributionVariable) + NL + + generateDistributionSelectClause(distributionVariable, distTblAbbrev) + NL + " FROM ( " + NL + generateTabularSelectClause(outputEntity, ancestorTblAbbrev) + NL + generateTabularFromClause(outputEntity, prunedEntityTree, ancestorTblAbbrev) + NL + @@ -793,15 +794,15 @@ static String generateDistributionSql(String appDbSchema, Entity outputEntity, V // record, even if no data exists for requested vars (or no vars requested). // null rows will be handled in the tall-to-wide rows conversion generateLeftJoin(appDbSchema, outputEntity, ListBuilder.asList(distributionVariable), ancestorTblAbbrev, tallTblAbbrev) + NL + - " ) " + NL + - generateDistributionGroupByClause(distributionVariable) + NL + - "ORDER BY " + distributionVariable.getType().getTallTableColumnName() + " ASC"; + " ) dist" + NL + + generateDistributionGroupByClause(distributionVariable, distTblAbbrev) + NL + + "ORDER BY " + distTblAbbrev + "." + distributionVariable.getType().getTallTableColumnName() + " ASC"; } - static String generateDistributionSelectClause(VariableWithValues distributionVariable) { + static String generateDistributionSelectClause(VariableWithValues distributionVariable, String tableAbbrev) { return "SELECT " + - distributionVariable.getType().getTallTableColumnName() + - ", count(" + distributionVariable.getEntity().getPKColName() + ") as " + COUNT_COLUMN_NAME; + tableAbbrev + "." + distributionVariable.getType().getTallTableColumnName() + + ", count(" + tableAbbrev + "." + distributionVariable.getEntity().getPKColName() + ") as " + COUNT_COLUMN_NAME; } static String generateDistributionFromClause(String appDbSchema, Entity outputEntity) { @@ -888,8 +889,8 @@ static String generateTabularOrderByClause(Entity outputEntity) { return "ORDER BY " + String.join(", ", cols); } - static String generateDistributionGroupByClause(VariableWithValues outputVariable) { - return "GROUP BY " + outputVariable.getType().getTallTableColumnName(); + static String generateDistributionGroupByClause(VariableWithValues outputVariable, String tableAbbrev) { + return "GROUP BY " + tableAbbrev + "." + outputVariable.getType().getTallTableColumnName(); } private static String quote(String s) {