diff --git a/utils/sync/src/main/java/com/lanyuanxiaoyao/service/sync/functions/type/TypeConverterV2.java b/utils/sync/src/main/java/com/lanyuanxiaoyao/service/sync/functions/type/TypeConverterV2.java index 8ece80b..17ee518 100644 --- a/utils/sync/src/main/java/com/lanyuanxiaoyao/service/sync/functions/type/TypeConverterV2.java +++ b/utils/sync/src/main/java/com/lanyuanxiaoyao/service/sync/functions/type/TypeConverterV2.java @@ -136,41 +136,23 @@ public class TypeConverterV2 implements TypeConverter { private Object covertValue(Schema schema, String name, Object value) { try { - if (ObjectUtil.isNull(value)) { - return value; + if (isNullValue(value)) { + return null; } else if (NULLABLE_BOOLEAN_SCHEMA.equals(schema) || BOOLEAN_SCHEMA.equals(schema)) { - if (isNullValue(value)) { - return null; - } return value instanceof String ? Boolean.valueOf((String) value) : value; } else if (NULLABLE_INT_SCHEMA.equals(schema) || INT_SCHEMA.equals(schema)) { - if (isNullValue(value)) { - return null; - } return value instanceof String ? Integer.valueOf((String) value) : value; } else if (NULLABLE_LONG_SCHEMA.equals(schema) || LONG_SCHEMA.equals(schema)) { - if (isNullValue(value)) { - return null; - } return value instanceof String ? Long.valueOf((String) value) : value; } else if (NULLABLE_FLOAT_SCHEMA.equals(schema) || FLOAT_SCHEMA.equals(schema)) { - if (isNullValue(value)) { - return null; - } return value instanceof String ? Float.valueOf((String) value) : value; } else if (NULLABLE_DOUBLE_SCHEMA.equals(schema) || DOUBLE_SCHEMA.equals(schema)) { - if (isNullValue(value)) { - return null; - } return value instanceof String ? Double.valueOf((String) value) : value; } else if (NULLABLE_STRING_SCHEMA.equals(schema) || STRING_SCHEMA.equals(schema)) { return StringData.fromString((String) value); } else { for (Schema type : schema.getTypes()) { if (type.getLogicalType() instanceof LogicalTypes.Decimal) { - if (isNullValue(value)) { - return null; - } LogicalTypes.Decimal decimalType = (LogicalTypes.Decimal) type.getLogicalType(); int precision = decimalType.getPrecision(); int scala = decimalType.getScale(); @@ -188,6 +170,6 @@ public class TypeConverterV2 implements TypeConverter { } private boolean isNullValue(Object value) { - return StrUtil.isBlankIfStr(value) || (value instanceof String ? "null".equalsIgnoreCase((String) value) : value == null); + return ObjectUtil.isNull(value) || StrUtil.isBlankIfStr(value) || (value instanceof String && StrUtil.equalsAny((String) value, "null", "NULL")); } } diff --git a/utils/sync/src/test/java/com/lanyuanxiaoyao/service/sync/TypeConvertTest.java b/utils/sync/src/test/java/com/lanyuanxiaoyao/service/sync/TypeConvertTest.java index d955302..2cbcaf5 100644 --- a/utils/sync/src/test/java/com/lanyuanxiaoyao/service/sync/TypeConvertTest.java +++ b/utils/sync/src/test/java/com/lanyuanxiaoyao/service/sync/TypeConvertTest.java @@ -10,8 +10,15 @@ import org.apache.hudi.org.apache.avro.Schema; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import static com.lanyuanxiaoyao.service.sync.functions.type.TypeConverterV2.*; +import static com.lanyuanxiaoyao.service.sync.functions.type.TypeConverterV2.NULLABLE_BOOLEAN_SCHEMA; +import static com.lanyuanxiaoyao.service.sync.functions.type.TypeConverterV2.NULLABLE_DECIMAL_SCHEMA; +import static com.lanyuanxiaoyao.service.sync.functions.type.TypeConverterV2.NULLABLE_DOUBLE_SCHEMA; +import static com.lanyuanxiaoyao.service.sync.functions.type.TypeConverterV2.NULLABLE_FLOAT_SCHEMA; +import static com.lanyuanxiaoyao.service.sync.functions.type.TypeConverterV2.NULLABLE_INT_SCHEMA; +import static com.lanyuanxiaoyao.service.sync.functions.type.TypeConverterV2.NULLABLE_LONG_SCHEMA; +import static com.lanyuanxiaoyao.service.sync.functions.type.TypeConverterV2.NULLABLE_STRING_SCHEMA; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; /** @@ -91,6 +98,11 @@ public class TypeConvertTest { // null assertNull(convertValue.exec(NULLABLE_BOOLEAN_SCHEMA, "test", null)); + assertNull(convertValue.exec(NULLABLE_STRING_SCHEMA, "test", "null")); + assertNull(convertValue.exec(NULLABLE_STRING_SCHEMA, "test", "NULL")); + assertNull(convertValue.exec(NULLABLE_STRING_SCHEMA, "test", null)); + assertNull(convertValue.exec(NULLABLE_STRING_SCHEMA, "test", "")); + assertNotNull(convertValue.exec(NULLABLE_STRING_SCHEMA, "test", "Null")); // boolean assertEquals(true, convertValue.exec(NULLABLE_BOOLEAN_SCHEMA, "test", "true"));