diff options
author | James Moger <james.moger@gitblit.com> | 2016-04-04 16:29:28 -0400 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2016-04-04 16:29:34 -0400 |
commit | 13b08bb1e5a955650289c1c2d548883bfeac0de9 (patch) | |
tree | 52708d5458f962f845a01a45ef49f78d1421fb83 | |
parent | c4c87e4ce044d84d5f2c4e7fa8709e5d699edf8f (diff) | |
download | iciql-13b08bb1e5a955650289c1c2d548883bfeac0de9.tar.gz iciql-13b08bb1e5a955650289c1c2d548883bfeac0de9.zip |
Fixes #15: String field not properly trimmed on discrete set
-rw-r--r-- | src/main/java/com/iciql/Query.java | 15 | ||||
-rw-r--r-- | src/test/java/com/iciql/test/ModelsTest.java | 13 | ||||
-rw-r--r-- | src/test/java/com/iciql/test/models/SupportedTypes.java | 2 |
3 files changed, 27 insertions, 3 deletions
diff --git a/src/main/java/com/iciql/Query.java b/src/main/java/com/iciql/Query.java index 882fea1..1dbbc4e 100644 --- a/src/main/java/com/iciql/Query.java +++ b/src/main/java/com/iciql/Query.java @@ -847,13 +847,24 @@ public class Query<T> { SelectColumn<T> col = getColumnByReference(alias); if (col != null && value != null && value.getClass().isEnum()) { // enum - EnumType type = col.getFieldDefinition().enumType; + TableDefinition.FieldDefinition field = col.getFieldDefinition(); + EnumType type = field.enumType; Enum<?> anEnum = (Enum<?>) value; Object y = Utils.convertEnum(anEnum, type); stat.addParameter(y); } else if (col != null) { // object - Class<? extends DataTypeAdapter<?>> typeAdapter = col.getFieldDefinition().typeAdapter; + TableDefinition.FieldDefinition field = col.getFieldDefinition(); + Class<? extends DataTypeAdapter<?>> typeAdapter = field.typeAdapter; + if (value != null && value instanceof String) { + if (field.trim && field.length > 0) { + // clip strings (issue-15) + String s = (String) value; + if (s.length() > field.length) { + value = s.substring(0, field.length); + } + } + } Object parameter = db.getDialect().serialize(value, typeAdapter); stat.addParameter(parameter); } else { diff --git a/src/test/java/com/iciql/test/ModelsTest.java b/src/test/java/com/iciql/test/ModelsTest.java index 683e494..ff27bf5 100644 --- a/src/test/java/com/iciql/test/ModelsTest.java +++ b/src/test/java/com/iciql/test/ModelsTest.java @@ -147,4 +147,17 @@ public class ModelsTest { assertEquals(0, models.get(0).length()); } } + + @Test + public void testDiscreteUpdateStringTrimming() { + List<SupportedTypes> original = SupportedTypes.createList(); + db.insertAll(original); + SupportedTypes s1 = db.from(SupportedTypes.SAMPLE).where(SupportedTypes.SAMPLE.id).is(1).selectFirst(); + db.from(SupportedTypes.SAMPLE) + .set(SupportedTypes.SAMPLE.myString) + .to(s1.myString + s1.myString + s1.myString + s1.myString) + .update(); + SupportedTypes s2 = db.from(SupportedTypes.SAMPLE).where(SupportedTypes.SAMPLE.id).is(1).selectFirst(); + assertEquals(40, s2.myString.length()); + } } diff --git a/src/test/java/com/iciql/test/models/SupportedTypes.java b/src/test/java/com/iciql/test/models/SupportedTypes.java index 0383d7f..3b0e694 100644 --- a/src/test/java/com/iciql/test/models/SupportedTypes.java +++ b/src/test/java/com/iciql/test/models/SupportedTypes.java @@ -89,7 +89,7 @@ public class SupportedTypes implements Serializable { @IQColumn(length = 10, scale = 5) private BigDecimal myBigDecimal; - @IQColumn(length = 40) + @IQColumn(length = 40, trim = true) public String myString; @IQColumn |