Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
--GH Issue 778: materialinput Role can be a field name, which has a max length of 200 characters
ALTER TABLE exp.MaterialInput ALTER COLUMN Role TYPE VARCHAR(200);
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
--GH Issue 778: materialinput Role can be a field name, which has a max length of 200 characters
EXECUTE core.fn_dropifexists 'MaterialInput', 'exp', 'INDEX', 'IDX_MaterialInput_Role';
ALTER TABLE exp.MaterialInput ALTER COLUMN Role NVARCHAR(200) NOT NULL;
CREATE INDEX IDX_MaterialInput_Role ON exp.MaterialInput(Role);
2 changes: 1 addition & 1 deletion experiment/src/org/labkey/experiment/ExperimentModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ public String getName()
@Override
public Double getSchemaVersion()
{
return 25.002;
return 25.003;
}

@Nullable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import org.labkey.api.data.ConditionalFormat;
import org.labkey.api.data.Container;
import org.labkey.api.data.ContainerManager;
import org.labkey.api.data.DatabaseIdentifier;
import org.labkey.api.data.JdbcType;
import org.labkey.api.data.PHI;
import org.labkey.api.data.SQLFragment;
Expand Down Expand Up @@ -839,6 +840,7 @@ else if (newType.getJdbcType().isDateOrTime() && oldType.getJdbcType().isDateOrT
OntologyManager.ensurePropertyDomain(_pd, dd, sortOrder);

boolean hasProvisioner = null != getDomain().getDomainKind() && null != getDomain().getDomainKind().getStorageSchemaName() && dd.getStorageTableName() != null;
SqlDialect dialect = OntologyManager.getExpSchema().getSqlDialect();

if (hasProvisioner)
{
Expand All @@ -860,7 +862,7 @@ else if (newType.getJdbcType().isDateOrTime() && oldType.getJdbcType().isDateOrT
if (_pdOld.getJdbcType() == JdbcType.BOOLEAN && _pd.getJdbcType().isText())
{
updateBooleanValue(_domain.getDomainKind().getStorageSchemaName() + "." + _domain.getStorageTableName(),
_pd.getStorageColumnName(), _pdOld.getFormat(), null);
_pd.getLegalSelectName(dialect), _pdOld.getFormat(), null); // GH Issue 755
}
}
else if (propResized)
Expand Down Expand Up @@ -889,7 +891,6 @@ else if (!oldType.getJdbcType().isText() && newType.getJdbcType().isText())
}
else if (oldType.getJdbcType().isDateOrTime() && newType.getJdbcType().isDateOrTime())
{
SqlDialect dialect = OntologyManager.getExpSchema().getSqlDialect();
String sqlTypeName = dialect.getSqlTypeName(newType.getJdbcType());
String update = String.format("CAST(DateTimeValue AS %s)", sqlTypeName);
if (newType.getJdbcType() == JdbcType.TIME)
Expand All @@ -915,7 +916,7 @@ else if (oldType.getJdbcType().isDateOrTime() && newType.getJdbcType().isDateOrT

if (changedType && _pdOld.getJdbcType() == JdbcType.BOOLEAN && _pd.getJdbcType().isText())
{
updateBooleanValue(OntologyManager.getTinfoObjectProperty().getSelectName(), "StringValue", _pdOld.getFormat(), new SQLFragment("PropertyId = ?", _pdOld.getPropertyId()));
updateBooleanValue(OntologyManager.getTinfoObjectProperty().getSelectName(), dialect.makeDatabaseIdentifier("StringValue"), _pdOld.getFormat(), new SQLFragment("PropertyId = ?", _pdOld.getPropertyId()));
}
}
else
Expand Down Expand Up @@ -943,17 +944,16 @@ else if (oldType.getJdbcType().isDateOrTime() && newType.getJdbcType().isDateOrT
* Postgres will now have 'true' and 'false', and SQLServer will have '0' and '1'. Use the format string to use the
* preferred format, and standardize on 'true' and 'false' in the absence of an explicitly configured format.
*/
private void updateBooleanValue(String schemaTable, String column, String formatString, @Nullable SQLFragment whereClause)
private void updateBooleanValue(String schemaTable, DatabaseIdentifier column, String formatString, @Nullable SQLFragment whereClause)
{
column = OntologyManager.getExpSchema().getSqlDialect().makeLegalIdentifier(column);
BooleanFormat f = BooleanFormat.getInstance(formatString);
String trueValue = StringUtils.trimToNull(f.format(true));
String falseValue = StringUtils.trimToNull(f.format(false));
String nullValue = StringUtils.trimToNull(f.format(null));
SQLFragment sql = new SQLFragment("UPDATE ").append(schemaTable).append(" SET ").
append(column).append(" = CASE WHEN ").
append(column).append(" IN ('1', 'true') THEN ? WHEN ").
append(column).append(" IN ('0', 'false') THEN ? ELSE ? END");
appendIdentifier(column).append(" = CASE WHEN ").
appendIdentifier(column).append(" IN ('1', 'true') THEN ? WHEN ").
appendIdentifier(column).append(" IN ('0', 'false') THEN ? ELSE ? END");
sql.add(trueValue);
sql.add(falseValue);
sql.add(nullValue);
Expand Down