From 1be1c7a70277359ef266670e34852f36126db777 Mon Sep 17 00:00:00 2001 From: labkey-martyp Date: Fri, 14 Aug 2020 18:57:15 -0700 Subject: [PATCH 1/2] Start integration of SND data into EHR - Add a mock up study dataset LSID to each attribute data entry in AttributeDataTable. - Create a DataByCategory query to query against for categorical data. --- resources/queries/snd/DataByCategory.sql | 20 ++++++++++++++++++ .../labkey/snd/query/AttributeDataTable.java | 21 ++++++++++++++----- 2 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 resources/queries/snd/DataByCategory.sql diff --git a/resources/queries/snd/DataByCategory.sql b/resources/queries/snd/DataByCategory.sql new file mode 100644 index 00000000..8d02a73a --- /dev/null +++ b/resources/queries/snd/DataByCategory.sql @@ -0,0 +1,20 @@ +SELECT +ad.ObjectId, +ad.PropertyId, +ad.TypeTag, +ad.FloatValue, +ad.DateTimeValue, +ad.StringValue, +ad.MvIndicator, +ad.ObjectURI, +ad.EventDataAndName, +ad.EventData, +ad.EventData.SuperPkgId.PkgId, +ad.EventData.EventId, +ad.Container, +pc.CategoryId as CategoryId, +pc.Description as Category, +ad.StudyLSID as LSID +FROM AttributeData ad +JOIN PkgCategoryJunction pcj ON ad.EventData.SuperPkgId.PkgId = pcj.PkgId +JOIN PkgCategories pc ON pc.CategoryId = pcj.CategoryId \ No newline at end of file diff --git a/src/org/labkey/snd/query/AttributeDataTable.java b/src/org/labkey/snd/query/AttributeDataTable.java index 3f92ff73..7ff9a026 100644 --- a/src/org/labkey/snd/query/AttributeDataTable.java +++ b/src/org/labkey/snd/query/AttributeDataTable.java @@ -84,6 +84,9 @@ public AttributeDataTable(@NotNull SNDUserSchema userSchema, ContainerFilter cf) ExprColumn eventDataAndName = new ExprColumn(this, "EventDataAndName", new SQLFragment(ExprColumn.STR_TABLE_ALIAS + ".EventDataAndName"), JdbcType.VARCHAR); addColumn(eventDataAndName); + ExprColumn studyLSID = new ExprColumn(this, "StudyLSID", new SQLFragment(ExprColumn.STR_TABLE_ALIAS + ".StudyLSID"), JdbcType.VARCHAR); + addColumn(studyLSID); + // Inject a lookup to the EventData table ExprColumn eventDataCol = new ExprColumn(this, "EventData", new SQLFragment(ExprColumn.STR_TABLE_ALIAS + ".EventDataId"), JdbcType.VARCHAR); addColumn(eventDataCol); @@ -112,27 +115,35 @@ protected void applyContainerFilter(ContainerFilter filter) @NotNull public SQLFragment getFromSQL(String alias) { + // Need to mock up a study LSID here + String mockLsidPrefix = "'urn:lsid:" + AppProps.getInstance().getDefaultLsidAuthority() + ":Study.Data-'"; + String mockLsid = getRealTable().getSqlDialect().concatenate(mockLsidPrefix, + "CAST(X.ObjectId AS VARCHAR) as StudyLSID"); + // Flatten data from primary base table (exp.ObjectProperty), exp.Object, and snd.EventData - SQLFragment sql = new SQLFragment("(SELECT X.*, o.Container, o.ObjectURI, ed.EventDataId, CONCAT(ed.EventDataId,'-', pd.Name) as EventDataAndName FROM "); + SQLFragment sql = new SQLFragment("(SELECT X.*, " + mockLsid + ", o.Container, o.ObjectURI, ed.EventDataId, CONCAT(ed.EventDataId,'-', pd.Name) as EventDataAndName FROM "); sql.append(super.getFromSQL("X")); sql.append(" INNER JOIN "); sql.append(OntologyManager.getTinfoObject(), "o"); sql.append(" ON x.ObjectId = o.ObjectId AND "); + // Apply the container filter sql.append(getContainerFilter().getSQLFragment(getSchema(), new SQLFragment("o.Container"), getContainer())); sql.append(" INNER JOIN "); sql.append(OntologyManager.getTinfoPropertyDescriptor(), "pd"); + // Filter to include only properties associated with packages - sql.append(" ON x.PropertyId = pd.PropertyId AND pd.PropertyURI LIKE ? INNER JOIN "); + // Note - this must be kept in sync with the PropertyURIs generated for the packages + String lsidPrefix = "urn:lsid:" + AppProps.getInstance().getDefaultLsidAuthority() + ":package-snd.Folder-%"; + // Do not use jdbc parameter for lsidPrefix as it changes the query plan + sql.append(" ON x.PropertyId = pd.PropertyId AND pd.PropertyURI LIKE '" + lsidPrefix + "' INNER JOIN "); + // Filter to include only values associated with EventDatas sql.append(SNDSchema.getInstance().getTableInfoEventData(), "ed"); sql.append(" ON ed.ObjectURI = o.ObjectURI "); sql.append(") "); sql.append(alias); - // Note - this must be kept in sync with the PropertyURIs generated for the packages - sql.add("urn:lsid:" + AppProps.getInstance().getDefaultLsidAuthority() + ":package-snd.Folder-%"); - return sql; } From a2906a53673967acb18f60fb672666055e62532a Mon Sep 17 00:00:00 2001 From: Spamhurts Date: Tue, 17 Nov 2020 08:39:42 -0600 Subject: [PATCH 2/2] Added AttributeName to AttributesData table and DataByCategory.sql --- resources/queries/snd/DataByCategory.sql | 1 + src/org/labkey/snd/query/AttributeDataTable.java | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/resources/queries/snd/DataByCategory.sql b/resources/queries/snd/DataByCategory.sql index 8d02a73a..18744646 100644 --- a/resources/queries/snd/DataByCategory.sql +++ b/resources/queries/snd/DataByCategory.sql @@ -8,6 +8,7 @@ ad.StringValue, ad.MvIndicator, ad.ObjectURI, ad.EventDataAndName, +ad.AttributeName, ad.EventData, ad.EventData.SuperPkgId.PkgId, ad.EventData.EventId, diff --git a/src/org/labkey/snd/query/AttributeDataTable.java b/src/org/labkey/snd/query/AttributeDataTable.java index dec8fc7e..01801be2 100644 --- a/src/org/labkey/snd/query/AttributeDataTable.java +++ b/src/org/labkey/snd/query/AttributeDataTable.java @@ -83,6 +83,9 @@ public AttributeDataTable(@NotNull SNDUserSchema userSchema, ContainerFilter cf) ExprColumn eventDataAndName = new ExprColumn(this, "EventDataAndName", new SQLFragment(ExprColumn.STR_TABLE_ALIAS + ".EventDataAndName"), JdbcType.VARCHAR); addColumn(eventDataAndName); + ExprColumn attributeName = new ExprColumn(this, "AttributeName", new SQLFragment(ExprColumn.STR_TABLE_ALIAS + ".AttributeName"), JdbcType.VARCHAR); + addColumn(attributeName); + ExprColumn studyLSID = new ExprColumn(this, "StudyLSID", new SQLFragment(ExprColumn.STR_TABLE_ALIAS + ".StudyLSID"), JdbcType.VARCHAR); addColumn(studyLSID); @@ -120,7 +123,7 @@ public SQLFragment getFromSQL(String alias) "CAST(X.ObjectId AS VARCHAR) as StudyLSID"); // Flatten data from primary base table (exp.ObjectProperty), exp.Object, and snd.EventData - SQLFragment sql = new SQLFragment("(SELECT X.*, " + mockLsid + ", o.Container, o.ObjectURI, ed.EventDataId, CONCAT(ed.EventDataId,'-', pd.Name) as EventDataAndName FROM "); + SQLFragment sql = new SQLFragment("(SELECT X.*, " + mockLsid + ", o.Container, o.ObjectURI, ed.EventDataId, CONCAT(ed.EventDataId,'-', pd.Name) as EventDataAndName, pd.Name as AttributeName FROM "); sql.append(super.getFromSQL("X")); sql.append(" INNER JOIN "); sql.append(OntologyManager.getTinfoObject(), "o");