fix(sync): 修复null字符串=null的识别
This commit is contained in:
@@ -136,41 +136,23 @@ public class TypeConverterV2 implements TypeConverter {
|
|||||||
|
|
||||||
private Object covertValue(Schema schema, String name, Object value) {
|
private Object covertValue(Schema schema, String name, Object value) {
|
||||||
try {
|
try {
|
||||||
if (ObjectUtil.isNull(value)) {
|
|
||||||
return value;
|
|
||||||
} else if (NULLABLE_BOOLEAN_SCHEMA.equals(schema) || BOOLEAN_SCHEMA.equals(schema)) {
|
|
||||||
if (isNullValue(value)) {
|
if (isNullValue(value)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
} else if (NULLABLE_BOOLEAN_SCHEMA.equals(schema) || BOOLEAN_SCHEMA.equals(schema)) {
|
||||||
return value instanceof String ? Boolean.valueOf((String) value) : value;
|
return value instanceof String ? Boolean.valueOf((String) value) : value;
|
||||||
} else if (NULLABLE_INT_SCHEMA.equals(schema) || INT_SCHEMA.equals(schema)) {
|
} 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;
|
return value instanceof String ? Integer.valueOf((String) value) : value;
|
||||||
} else if (NULLABLE_LONG_SCHEMA.equals(schema) || LONG_SCHEMA.equals(schema)) {
|
} 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;
|
return value instanceof String ? Long.valueOf((String) value) : value;
|
||||||
} else if (NULLABLE_FLOAT_SCHEMA.equals(schema) || FLOAT_SCHEMA.equals(schema)) {
|
} 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;
|
return value instanceof String ? Float.valueOf((String) value) : value;
|
||||||
} else if (NULLABLE_DOUBLE_SCHEMA.equals(schema) || DOUBLE_SCHEMA.equals(schema)) {
|
} 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;
|
return value instanceof String ? Double.valueOf((String) value) : value;
|
||||||
} else if (NULLABLE_STRING_SCHEMA.equals(schema) || STRING_SCHEMA.equals(schema)) {
|
} else if (NULLABLE_STRING_SCHEMA.equals(schema) || STRING_SCHEMA.equals(schema)) {
|
||||||
return StringData.fromString((String) value);
|
return StringData.fromString((String) value);
|
||||||
} else {
|
} else {
|
||||||
for (Schema type : schema.getTypes()) {
|
for (Schema type : schema.getTypes()) {
|
||||||
if (type.getLogicalType() instanceof LogicalTypes.Decimal) {
|
if (type.getLogicalType() instanceof LogicalTypes.Decimal) {
|
||||||
if (isNullValue(value)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
LogicalTypes.Decimal decimalType = (LogicalTypes.Decimal) type.getLogicalType();
|
LogicalTypes.Decimal decimalType = (LogicalTypes.Decimal) type.getLogicalType();
|
||||||
int precision = decimalType.getPrecision();
|
int precision = decimalType.getPrecision();
|
||||||
int scala = decimalType.getScale();
|
int scala = decimalType.getScale();
|
||||||
@@ -188,6 +170,6 @@ public class TypeConverterV2 implements TypeConverter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isNullValue(Object value) {
|
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"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,8 +10,15 @@ import org.apache.hudi.org.apache.avro.Schema;
|
|||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.Test;
|
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.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -91,6 +98,11 @@ public class TypeConvertTest {
|
|||||||
|
|
||||||
// null
|
// null
|
||||||
assertNull(convertValue.exec(NULLABLE_BOOLEAN_SCHEMA, "test", 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
|
// boolean
|
||||||
assertEquals(true, convertValue.exec(NULLABLE_BOOLEAN_SCHEMA, "test", "true"));
|
assertEquals(true, convertValue.exec(NULLABLE_BOOLEAN_SCHEMA, "test", "true"));
|
||||||
|
|||||||
Reference in New Issue
Block a user