diff --git a/internal/src/org/labkey/api/exp/property/AbstractDomainKind.java b/internal/src/org/labkey/api/exp/property/AbstractDomainKind.java index 8c07baf0df9..02659446c3f 100644 --- a/internal/src/org/labkey/api/exp/property/AbstractDomainKind.java +++ b/internal/src/org/labkey/api/exp/property/AbstractDomainKind.java @@ -185,7 +185,7 @@ public boolean hasNullValues(Domain domain, DomainProperty prop) } } - private boolean getTotalAndNonBlankSql(Domain domain, DomainProperty prop, SQLFragment allRowsSQL, SQLFragment nonBlankRowsSQL) + protected boolean getTotalAndNonBlankSql(Domain domain, DomainProperty prop, SQLFragment allRowsSQL, SQLFragment nonBlankRowsSQL) { if (getStorageSchemaName() == null) { diff --git a/internal/src/org/labkey/experiment/api/SampleTypeDomainKind.java b/internal/src/org/labkey/experiment/api/SampleTypeDomainKind.java index 83a75fc7e37..f60facb5387 100644 --- a/internal/src/org/labkey/experiment/api/SampleTypeDomainKind.java +++ b/internal/src/org/labkey/experiment/api/SampleTypeDomainKind.java @@ -32,6 +32,7 @@ import org.labkey.api.data.PropertyStorageSpec; import org.labkey.api.data.RuntimeSQLException; import org.labkey.api.data.SQLFragment; +import org.labkey.api.data.SqlSelector; import org.labkey.api.data.TableInfo; import org.labkey.api.data.UpdateableTableInfo; import org.labkey.api.exp.ExperimentException; @@ -44,6 +45,7 @@ import org.labkey.api.exp.api.SampleTypeService; import org.labkey.api.exp.property.AbstractDomainKind; import org.labkey.api.exp.property.Domain; +import org.labkey.api.exp.property.DomainProperty; import org.labkey.api.exp.query.ExpSampleTypeTable; import org.labkey.api.exp.query.SamplesSchema; import org.labkey.api.gwt.client.DefaultValueType; @@ -517,4 +519,28 @@ public SampleTypeDomainKindProperties getDomainKindProperties(GWTDomain domain, ExpSampleType sampleType = domain != null ? SampleTypeService.get().getSampleType(domain.getDomainURI()) : null; return new SampleTypeDomainKindProperties(sampleType); } + + @Override + public boolean hasNullValues(Domain domain, DomainProperty prop) + { + SQLFragment allRowsSQL = new SQLFragment(); + SQLFragment nonBlankRowsSQL = new SQLFragment(); + + if (getTotalAndNonBlankSql(domain, prop, allRowsSQL, nonBlankRowsSQL)) + { + // Issue 43754: Don't include aliquot rows in the null value check (see ExpMaterialTableImpl.createColumn for IsAliquot) + String table = domain.getStorageTableName(); + SQLFragment nonAliquotRowsSQL = new SQLFragment("SELECT * FROM exp.material WHERE LSID IN (") + .append("SELECT LSID FROM " + getStorageSchemaName() + "." + table) + .append(") AND RootMaterialLSID IS NULL"); + + long totalRows = new SqlSelector(ExperimentService.get().getSchema(), nonAliquotRowsSQL).getRowCount(); + long nonBlankRows = new SqlSelector(ExperimentService.get().getSchema(), nonBlankRowsSQL).getRowCount(); + return totalRows != nonBlankRows; + } + else + { + return false; + } + } }