@Override
    public Column convert(BasicTypeDefine typeDefine) {
        PhysicalColumn.PhysicalColumnBuilder builder =
                PhysicalColumn.builder()
                        .name(typeDefine.getName())
                        .sourceType(typeDefine.getColumnType())
                        .nullable(typeDefine.isNullable())
                        .defaultValue(typeDefine.getDefaultValue())
                        .comment(typeDefine.getComment());

        String xuguDataType = typeDefine.getDataType().toUpperCase();
        switch (xuguDataType) {
            case XUGU_BOOLEAN:
            case XUGU_BOOL:
                builder.dataType(BasicType.BOOLEAN_TYPE);
                break;
            case XUGU_TINYINT:
                builder.dataType(BasicType.BYTE_TYPE);
                break;
            case XUGU_SMALLINT:
                builder.dataType(BasicType.SHORT_TYPE);
                break;
            case XUGU_INT:
            case XUGU_INTEGER:
                builder.dataType(BasicType.INT_TYPE);
                break;
            case XUGU_BIGINT:
                builder.dataType(BasicType.LONG_TYPE);
                break;
            case XUGU_FLOAT:
                builder.dataType(BasicType.FLOAT_TYPE);
                break;
            case XUGU_DOUBLE:
                builder.dataType(BasicType.DOUBLE_TYPE);
                break;
            case XUGU_NUMBER:
            case XUGU_DECIMAL:
            case XUGU_NUMERIC:
                DecimalType decimalType;
                if (typeDefine.getPrecision() != null && typeDefine.getPrecision() > 0) {
                    decimalType =
                            new DecimalType(
                                    typeDefine.getPrecision().intValue(), typeDefine.getScale());
                } else {
                    decimalType = new DecimalType(DEFAULT_PRECISION, DEFAULT_SCALE);
                }
                builder.dataType(decimalType);
                builder.columnLength(Long.valueOf(decimalType.getPrecision()));
                builder.scale(decimalType.getScale());
                break;

            case XUGU_CHAR:
            case XUGU_NCHAR:
                builder.dataType(BasicType.STRING_TYPE);
                if (typeDefine.getLength() == null || typeDefine.getLength() <= 0) {
                    builder.columnLength(TypeDefineUtils.charTo4ByteLength(1L));
                } else {
                    builder.columnLength(typeDefine.getLength());
                }
                break;
            case XUGU_VARCHAR:
            case XUGU_VARCHAR2:
                builder.dataType(BasicType.STRING_TYPE);
                if (typeDefine.getLength() == null || typeDefine.getLength() <= 0) {
                    builder.columnLength(TypeDefineUtils.charTo4ByteLength(MAX_VARCHAR_LENGTH));
                } else {
                    builder.columnLength(typeDefine.getLength());
                }
                break;
            case XUGU_CLOB:
                builder.dataType(BasicType.STRING_TYPE);
                builder.columnLength(BYTES_2GB - 1);
                break;
            case XUGU_JSON:
            case XUGU_GUID:
                builder.dataType(BasicType.STRING_TYPE);
                break;
            case XUGU_BINARY:
                builder.dataType(PrimitiveByteArrayType.INSTANCE);
                builder.columnLength(MAX_BINARY_LENGTH);
                break;
            case XUGU_BLOB:
                builder.dataType(PrimitiveByteArrayType.INSTANCE);
                builder.columnLength(BYTES_2GB - 1);
                break;
            case XUGU_DATE:
                builder.dataType(LocalTimeType.LOCAL_DATE_TYPE);
                break;
            case XUGU_TIME:
            case XUGU_TIME_WITH_TIME_ZONE:
                builder.dataType(LocalTimeType.LOCAL_TIME_TYPE);
                break;
            case XUGU_DATETIME:
            case XUGU_DATETIME_WITH_TIME_ZONE:
                builder.dataType(LocalTimeType.LOCAL_DATE_TIME_TYPE);
                break;
            case XUGU_TIMESTAMP:
            case XUGU_TIMESTAMP_WITH_TIME_ZONE:
                builder.dataType(LocalTimeType.LOCAL_DATE_TIME_TYPE);
                if (typeDefine.getScale() == null) {
                    builder.scale(TIMESTAMP_DEFAULT_SCALE);
                } else {
                    builder.scale(typeDefine.getScale());
                }
                break;
            default:
                throw CommonError.convertToSeaTunnelTypeError(
                        DatabaseIdentifier.XUGU, xuguDataType, typeDefine.getName());
        }
        return builder.build();
    }
@Test
    public void testConvertFloat() {
        BasicTypeDefine<Object> typeDefine =
                BasicTypeDefine.builder()
                        .name("test")
                        .columnType("float")
                        .dataType("float")
                        .build();
        Column column = XuguTypeConverter.INSTANCE.convert(typeDefine);
        Assertions.assertEquals(typeDefine.getName(), column.getName());
        Assertions.assertEquals(BasicType.FLOAT_TYPE, column.getDataType());
        Assertions.assertEquals(typeDefine.getColumnType(), column.getSourceType());
    }