From 6b18bf0c6c470d056a3c242b191a33fc2381aa17 Mon Sep 17 00:00:00 2001 From: labkey-matthewb Date: Thu, 15 Jan 2026 16:06:30 -0800 Subject: [PATCH 1/4] testEmpty() --- .../org/labkey/api/data/ConvertHelper.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/api/src/org/labkey/api/data/ConvertHelper.java b/api/src/org/labkey/api/data/ConvertHelper.java index a8918d2bc9a..9b1b516ad69 100644 --- a/api/src/org/labkey/api/data/ConvertHelper.java +++ b/api/src/org/labkey/api/data/ConvertHelper.java @@ -46,6 +46,7 @@ import org.junit.Assert; import org.junit.Test; import org.labkey.api.collections.ConcurrentHashSet; +import org.labkey.api.exp.PropertyType; import org.labkey.api.gwt.client.DefaultScaleType; import org.labkey.api.gwt.client.FacetingBehaviorType; import org.labkey.api.query.FieldKey; @@ -1210,6 +1211,51 @@ public void testInvalidInfDoubleConverter() } } } + + @Test + public void testEmpty() + { + assertEquals("", JdbcType.CHAR.convert("")); + assertNull(JdbcType.VARCHAR.convert("")); + assertNull(JdbcType.LONGVARCHAR.convert("")); + assertEquals("", PropertyType.STRING.convert("")); + assertEquals("", PropertyType.MULTI_LINE.convert("")); + assertEquals("", PropertyType.XML_TEXT.convert("")); + assertNull(ConvertHelper.convert("", String.class)); + assertNull(ConvertUtils.convert("")); + assertNull(ConvertUtils.convert("", String.class)); + } + + @Test + public void testBlank() + { + // blank strings do not get the empty string special handling. + assertEquals(" ", JdbcType.CHAR.convert(" ")); + assertEquals(" ", JdbcType.VARCHAR.convert(" ")); + assertEquals(" ", JdbcType.LONGVARCHAR.convert(" ")); + assertEquals(" ", PropertyType.STRING.convert(" ")); + assertEquals(" ", PropertyType.MULTI_LINE.convert(" ")); + assertEquals(" ", PropertyType.XML_TEXT.convert(" ")); + assertEquals(" ", ConvertHelper.convert(" ", String.class)); + assertEquals(" ", ConvertUtils.convert(" ")); + assertEquals(" ", ConvertUtils.convert(" ", String.class)); + } + + @Test + public void testTrim() + { + // convert() does not trim. That is handled in DataIterator. + // e.g. see SimpleTranslator.createConvertColumn() + assertEquals(" x ", JdbcType.CHAR.convert(" x ")); + assertEquals(" x ", JdbcType.VARCHAR.convert(" x ")); + assertEquals(" x ", JdbcType.LONGVARCHAR.convert(" x ")); + assertEquals(" x ", PropertyType.STRING.convert(" x ")); + assertEquals(" x ", PropertyType.MULTI_LINE.convert(" x ")); + assertEquals(" x ", PropertyType.XML_TEXT.convert(" x ")); + assertEquals(" x ", ConvertHelper.convert(" x ", String.class)); + assertEquals(" x ", ConvertUtils.convert(" x ")); + assertEquals(" x ", ConvertUtils.convert(" x ", String.class)); + } } // Note: Keep in sync with LabKeySiteWrapper.getConversionErrorMessage() From c45d3e7959a2df504def99b99429adf5bf4bc800 Mon Sep 17 00:00:00 2001 From: labkey-matthewb Date: Thu, 15 Jan 2026 16:12:16 -0800 Subject: [PATCH 2/4] comments --- api/src/org/labkey/api/data/ConvertHelper.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/api/src/org/labkey/api/data/ConvertHelper.java b/api/src/org/labkey/api/data/ConvertHelper.java index 9b1b516ad69..e6a216241da 100644 --- a/api/src/org/labkey/api/data/ConvertHelper.java +++ b/api/src/org/labkey/api/data/ConvertHelper.java @@ -1215,12 +1215,22 @@ public void testInvalidInfDoubleConverter() @Test public void testEmpty() { - assertEquals("", JdbcType.CHAR.convert("")); + assertEquals("", JdbcType.CHAR.convert("")); // inconsistent with VARCHAR assertNull(JdbcType.VARCHAR.convert("")); assertNull(JdbcType.LONGVARCHAR.convert("")); + + // PropertyType is used for domain defined tables. + // I would expect these to return null. assertEquals("", PropertyType.STRING.convert("")); assertEquals("", PropertyType.MULTI_LINE.convert("")); assertEquals("", PropertyType.XML_TEXT.convert("")); + + // Since we often convert "through" string, I'm not sure this low-level + // method should modify "". This could potential mess up + // converting array->string->array for instance. + // [] -> "" -> null + // vs + // [] -> "" -> [] assertNull(ConvertHelper.convert("", String.class)); assertNull(ConvertUtils.convert("")); assertNull(ConvertUtils.convert("", String.class)); From 9f78d3ae7694a84497450734661e820087c8bc25 Mon Sep 17 00:00:00 2001 From: labkey-matthewb Date: Fri, 16 Jan 2026 09:59:04 -0800 Subject: [PATCH 3/4] make JdbcType.CHAR.convert() consistent with JdbcType.VARCHAR --- api/src/org/labkey/api/data/ConvertHelper.java | 2 +- api/src/org/labkey/api/data/JdbcType.java | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/api/src/org/labkey/api/data/ConvertHelper.java b/api/src/org/labkey/api/data/ConvertHelper.java index e6a216241da..6a70281cf19 100644 --- a/api/src/org/labkey/api/data/ConvertHelper.java +++ b/api/src/org/labkey/api/data/ConvertHelper.java @@ -1215,7 +1215,7 @@ public void testInvalidInfDoubleConverter() @Test public void testEmpty() { - assertEquals("", JdbcType.CHAR.convert("")); // inconsistent with VARCHAR + assertNull(JdbcType.CHAR.convert("")); assertNull(JdbcType.VARCHAR.convert("")); assertNull(JdbcType.LONGVARCHAR.convert("")); diff --git a/api/src/org/labkey/api/data/JdbcType.java b/api/src/org/labkey/api/data/JdbcType.java index e427d25382a..e0cd6aefa3a 100644 --- a/api/src/org/labkey/api/data/JdbcType.java +++ b/api/src/org/labkey/api/data/JdbcType.java @@ -89,6 +89,12 @@ protected void addSqlTypes(Collection sqlTypes) { sqlTypes.add(Types.NCHAR); } + + @Override + public Object convert(Object o) throws ConversionException + { + return VARCHAR.convert(o); + } }, DECIMAL(Types.DECIMAL, BigDecimal.class, null, "numberfield") From 6ff3147428ceb6c1567383b207397c325ee22de1 Mon Sep 17 00:00:00 2001 From: labkey-matthewb Date: Fri, 16 Jan 2026 10:01:03 -0800 Subject: [PATCH 4/4] make JdbcType.CHAR.convert() consistent with JdbcType.VARCHAR --- api/src/org/labkey/api/data/ConvertHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/org/labkey/api/data/ConvertHelper.java b/api/src/org/labkey/api/data/ConvertHelper.java index 6a70281cf19..c65950942a8 100644 --- a/api/src/org/labkey/api/data/ConvertHelper.java +++ b/api/src/org/labkey/api/data/ConvertHelper.java @@ -1226,7 +1226,7 @@ public void testEmpty() assertEquals("", PropertyType.XML_TEXT.convert("")); // Since we often convert "through" string, I'm not sure this low-level - // method should modify "". This could potential mess up + // method should modify "". This could potentially mess up // converting array->string->array for instance. // [] -> "" -> null // vs