From 9b645880972ecaf4b39c10fdf3307352a11051f6 Mon Sep 17 00:00:00 2001 From: Jason Stedman Date: Sat, 12 May 2018 21:23:17 -0400 Subject: [PATCH 1/5] removed unnecessary join of observation fact onto a subquery derived solely from observation fact by refactoring the addition of observation blobs to happen in the former subquery instead of being joined in --- .../crc/dao/pdo/input/FactRelatedQueryHandler.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java b/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java index c568d7ed..68922e9a 100755 --- a/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java +++ b/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java @@ -689,9 +689,8 @@ public String buildQuery(PanelType panel, String pdoType) //OMOP WAS... // String mainQuerySql = "SELECT a.* " + mainSelectBlobClause + " FROM " // + this.getDbSchemaName() + "observation_FACT obs ,( \n"; - - String mainQuerySql = "SELECT a.* " + mainSelectBlobClause + " FROM " - + this.getDbSchemaName() + getFactTable() + " obs ,( \n"; + + String mainQuerySql = "( \n"; try { if (panel != null) { @@ -719,11 +718,10 @@ public String buildQuery(PanelType panel, String pdoType) } catch (I2B2Exception i2b2Ex) { throw new I2B2DAOException(i2b2Ex.getMessage(), i2b2Ex); } - - mainQuerySql += " ) a "; - - mainQuerySql += " where obs.encounter_num = a.obs_encounter_num and obs.patient_num = a.obs_patient_num "; - mainQuerySql += " and obs.concept_cd = a.obs_concept_cd and obs.provider_id = a.obs_provider_id and obs.start_date = a.obs_start_date and obs.modifier_cd = a.obs_modifier_cd and obs.instance_num = a.obs_instance_num "; + + mainQuerySql.replaceFirst("FROM", mainSelectBlobClause + "FROM"); + + mainQuerySql += " ) "; if (panel != null) { TotalItemOccurrences totOccurance = panel.getTotalItemOccurrences(); From 287030e8c3275739419bd07e35f114f4562eeaee Mon Sep 17 00:00:00 2001 From: Jason Stedman Date: Mon, 14 May 2018 06:51:47 -0400 Subject: [PATCH 2/5] fixing spacing issue in prior fix --- .../harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java b/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java index 68922e9a..ac6e8737 100755 --- a/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java +++ b/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java @@ -719,7 +719,7 @@ public String buildQuery(PanelType panel, String pdoType) throw new I2B2DAOException(i2b2Ex.getMessage(), i2b2Ex); } - mainQuerySql.replaceFirst("FROM", mainSelectBlobClause + "FROM"); + mainQuerySql.replaceFirst("FROM", mainSelectBlobClause + " FROM"); mainQuerySql += " ) "; From 47545b3d3ab2b2768ee07667305d2feb0e7cf887 Mon Sep 17 00:00:00 2001 From: Jason Stedman Date: Wed, 16 May 2018 11:08:12 -0400 Subject: [PATCH 3/5] Revert "fixing spacing issue in prior fix" This reverts commit 287030e8c3275739419bd07e35f114f4562eeaee. --- .../harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java b/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java index ac6e8737..68922e9a 100755 --- a/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java +++ b/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java @@ -719,7 +719,7 @@ public String buildQuery(PanelType panel, String pdoType) throw new I2B2DAOException(i2b2Ex.getMessage(), i2b2Ex); } - mainQuerySql.replaceFirst("FROM", mainSelectBlobClause + " FROM"); + mainQuerySql.replaceFirst("FROM", mainSelectBlobClause + "FROM"); mainQuerySql += " ) "; From a3905e678d1bd138214fd9c57a4316d4165ca6cb Mon Sep 17 00:00:00 2001 From: Jason Stedman Date: Wed, 16 May 2018 11:08:16 -0400 Subject: [PATCH 4/5] Revert "removed unnecessary join of observation fact onto a subquery derived solely from observation fact by refactoring the addition of observation blobs to happen in the former subquery instead of being joined in" This reverts commit 9b645880972ecaf4b39c10fdf3307352a11051f6. --- .../crc/dao/pdo/input/FactRelatedQueryHandler.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java b/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java index 68922e9a..c568d7ed 100755 --- a/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java +++ b/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java @@ -689,8 +689,9 @@ public String buildQuery(PanelType panel, String pdoType) //OMOP WAS... // String mainQuerySql = "SELECT a.* " + mainSelectBlobClause + " FROM " // + this.getDbSchemaName() + "observation_FACT obs ,( \n"; - - String mainQuerySql = "( \n"; + + String mainQuerySql = "SELECT a.* " + mainSelectBlobClause + " FROM " + + this.getDbSchemaName() + getFactTable() + " obs ,( \n"; try { if (panel != null) { @@ -718,10 +719,11 @@ public String buildQuery(PanelType panel, String pdoType) } catch (I2B2Exception i2b2Ex) { throw new I2B2DAOException(i2b2Ex.getMessage(), i2b2Ex); } - - mainQuerySql.replaceFirst("FROM", mainSelectBlobClause + "FROM"); - - mainQuerySql += " ) "; + + mainQuerySql += " ) a "; + + mainQuerySql += " where obs.encounter_num = a.obs_encounter_num and obs.patient_num = a.obs_patient_num "; + mainQuerySql += " and obs.concept_cd = a.obs_concept_cd and obs.provider_id = a.obs_provider_id and obs.start_date = a.obs_start_date and obs.modifier_cd = a.obs_modifier_cd and obs.instance_num = a.obs_instance_num "; if (panel != null) { TotalItemOccurrences totOccurance = panel.getTotalItemOccurrences(); From 32e650d090594575fc8529613fc819de560f3f75 Mon Sep 17 00:00:00 2001 From: Jason Stedman Date: Wed, 16 May 2018 11:11:43 -0400 Subject: [PATCH 5/5] removed unnecessary join of observation fact onto a subquery derived solely from observation fact when no blob data is being pulled in, a more complicated refactor is required to make the same performance improvement for queries involving observation_blobs --- .../pdo/input/FactRelatedQueryHandler.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java b/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java index c568d7ed..015e10b4 100755 --- a/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java +++ b/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/pdo/input/FactRelatedQueryHandler.java @@ -690,8 +690,10 @@ public String buildQuery(PanelType panel, String pdoType) // String mainQuerySql = "SELECT a.* " + mainSelectBlobClause + " FROM " // + this.getDbSchemaName() + "observation_FACT obs ,( \n"; - String mainQuerySql = "SELECT a.* " + mainSelectBlobClause + " FROM " - + this.getDbSchemaName() + getFactTable() + " obs ,( \n"; + String mainQuerySql = obsFactFactRelated.isSelectBlob() ? + "SELECT a.* " + mainSelectBlobClause + " FROM " + this.getDbSchemaName() + getFactTable() + " obs ,( \n" + + : "( \n"; try { if (panel != null) { @@ -720,10 +722,17 @@ public String buildQuery(PanelType panel, String pdoType) throw new I2B2DAOException(i2b2Ex.getMessage(), i2b2Ex); } - mainQuerySql += " ) a "; - - mainQuerySql += " where obs.encounter_num = a.obs_encounter_num and obs.patient_num = a.obs_patient_num "; - mainQuerySql += " and obs.concept_cd = a.obs_concept_cd and obs.provider_id = a.obs_provider_id and obs.start_date = a.obs_start_date and obs.modifier_cd = a.obs_modifier_cd and obs.instance_num = a.obs_instance_num "; + mainQuerySql += obsFactFactRelated.isSelectBlob() ? + " ) a " + + " where obs.encounter_num = a.obs_encounter_num " + + " and obs.patient_num = a.obs_patient_num " + + " and obs.concept_cd = a.obs_concept_cd " + + " and obs.provider_id = a.obs_provider_id " + + " and obs.start_date = a.obs_start_date " + + " and obs.modifier_cd = a.obs_modifier_cd " + + " and obs.instance_num = a.obs_instance_num " + + : " ) "; if (panel != null) { TotalItemOccurrences totOccurance = panel.getTotalItemOccurrences();