package edu.harvard.i2b2.crc.dao.setfinder.querybuilder; public class DxTableHandler { private String dbSchemaName = null; private String dxTempTableName = null; private String tempTableName = null; public DxTableHandler(String dbSchemaName, String dxTempTableName, String tempTableName) { this.dbSchemaName = dbSchemaName; this.dxTempTableName = dxTempTableName; this.tempTableName = tempTableName; } public String buildDxInsertSql( boolean encounterNumFlag, boolean instanceNumFlag, int maxPanelNum) { String dxInsertSql = ""; String selectEncounterNum = " ", selectPatientNum = " patient_num "; if (encounterNumFlag) { selectEncounterNum = " , encounter_num "; } dxInsertSql = " insert into " + this.dbSchemaName + this.dxTempTableName + " ( " + selectPatientNum + selectEncounterNum + " ) select * from (" + " select distinct " + selectPatientNum + selectEncounterNum + "from " + this.dbSchemaName + this.tempTableName + " where panel_count = " + maxPanelNum + " ) q"; return dxInsertSql; } private String createDxInsertInvertSql(boolean encounterNumFlag, int maxPanelNum) { String dxInsertInvertSql = ""; String selectEncounterNum = " ", selectPatientNum = " patient_num "; String invertTableName = "patient_dimension pat "; String invertWhereClause = " temp.patient_num = pat.patient_num "; if (encounterNumFlag) { selectEncounterNum = " , encounter_num "; invertTableName = "visit_dimension visit "; invertWhereClause = " temp.encounter_num = visit.encounter_num and temp.patient_num = visit.patient_num "; } dxInsertInvertSql = " insert into " + this.dbSchemaName + this.dxTempTableName + " ( " + selectPatientNum + selectEncounterNum + " ) select " + selectPatientNum + selectEncounterNum + " from " + this.dbSchemaName + invertTableName + " where not exists (select 1 from " + this.dbSchemaName + this.tempTableName + " temp where " + invertWhereClause + " ) "; return dxInsertInvertSql; } private String addEncounterFromVisitDimension(int maxPanelNumber) { String encounterSetDxSql = " "; encounterSetDxSql = " insert into dx (encounter_num,patient_num) " + " select encounter_num, patient_num from visit_dimension " + " where patient_num in (select distinct patient_num from dx) "; return encounterSetDxSql; } }