@Override
    public Column convert(BasicTypeDefine typeDefine) {
        Long typeDefineLength = typeDefine.getLength();
        PhysicalColumn.PhysicalColumnBuilder builder =
                PhysicalColumn.builder()
                        .name(typeDefine.getName())
                        .sourceType(typeDefine.getColumnType())
                        .columnLength(typeDefineLength)
                        .scale(typeDefine.getScale())
                        .nullable(typeDefine.isNullable())
                        .defaultValue(typeDefine.getDefaultValue())
                        .comment(typeDefine.getComment());
        String irisDataType = typeDefine.getDataType().toUpperCase();
        long charOrBinaryLength =
                Objects.nonNull(typeDefineLength) && typeDefineLength > 0 ? typeDefineLength : 1;
        switch (irisDataType) {
            case IRIS_NULL:
                builder.dataType(BasicType.VOID_TYPE);
                break;
            case IRIS_BIT:
                builder.dataType(BasicType.BOOLEAN_TYPE);
                break;
            case IRIS_NUMERIC:
            case IRIS_MONEY:
            case IRIS_SMALLMONEY:
            case IRIS_NUMBER:
            case IRIS_DEC:
            case IRIS_DECIMAL:
                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 IRIS_INT:
            case IRIS_INTEGER:
            case IRIS_MEDIUMINT:
                builder.dataType(BasicType.INT_TYPE);
                break;
            case IRIS_ROWVERSION:
            case IRIS_BIGINT:
            case IRIS_SERIAL:
                builder.dataType(BasicType.LONG_TYPE);
                break;
            case IRIS_TINYINT:
                builder.dataType(BasicType.BYTE_TYPE);
                break;
            case IRIS_SMALLINT:
                builder.dataType(BasicType.SHORT_TYPE);
                break;
            case IRIS_FLOAT:
                builder.dataType(BasicType.FLOAT_TYPE);
                break;
            case IRIS_DOUBLE:
            case IRIS_REAL:
            case IRIS_DOUBLE_PRECISION:
                builder.dataType(BasicType.DOUBLE_TYPE);
                break;
            case IRIS_CHAR:
            case IRIS_CHAR_VARYING:
            case IRIS_CHARACTER_VARYING:
            case IRIS_NATIONAL_CHAR:
            case IRIS_NATIONAL_CHAR_VARYING:
            case IRIS_NATIONAL_CHARACTER:
            case IRIS_NATIONAL_CHARACTER_VARYING:
            case IRIS_NATIONAL_VARCHAR:
            case IRIS_NCHAR:
            case IRIS_SYSNAME:
            case IRIS_VARCHAR2:
            case IRIS_VARCHAR:
            case IRIS_NVARCHAR:
            case IRIS_UNIQUEIDENTIFIER:
            case IRIS_GUID:
            case IRIS_CHARACTER:
                builder.dataType(BasicType.STRING_TYPE);
                builder.columnLength(charOrBinaryLength);
                break;
            case IRIS_NTEXT:
            case IRIS_CLOB:
            case IRIS_LONG_VARCHAR:
            case IRIS_LONG:
            case IRIS_LONGTEXT:
            case IRIS_MEDIUMTEXT:
            case IRIS_TEXT:
            case IRIS_LONGVARCHAR:
                builder.dataType(BasicType.STRING_TYPE);
                builder.columnLength(Long.valueOf(Integer.MAX_VALUE));
                break;
            case IRIS_DATE:
                builder.dataType(LocalTimeType.LOCAL_DATE_TYPE);
                break;
            case IRIS_TIME:
                builder.dataType(LocalTimeType.LOCAL_TIME_TYPE);
                break;
            case IRIS_DATETIME:
            case IRIS_DATETIME2:
            case IRIS_SMALLDATETIME:
            case IRIS_TIMESTAMP:
            case IRIS_TIMESTAMP2:
            case IRIS_POSIXTIME:
                builder.dataType(LocalTimeType.LOCAL_DATE_TIME_TYPE);
                break;
            case IRIS_BINARY:
            case IRIS_BINARY_VARYING:
            case IRIS_RAW:
            case IRIS_VARBINARY:
                builder.dataType(PrimitiveByteArrayType.INSTANCE);
                builder.columnLength(charOrBinaryLength);
                break;
            case IRIS_LONGVARBINARY:
            case IRIS_BLOB:
            case IRIS_IMAGE:
            case IRIS_LONG_BINARY:
            case IRIS_LONG_RAW:
                builder.dataType(PrimitiveByteArrayType.INSTANCE);
                builder.columnLength(Long.valueOf(Integer.MAX_VALUE));
                break;
            default:
                throw CommonError.convertToSeaTunnelTypeError(
                        DatabaseIdentifier.IRIS, irisDataType, typeDefine.getName());
        }
        return builder.build();
    }
@Test
    public void testConvertOtherBinary() {
        BasicTypeDefine<Object> typeDefine =
                BasicTypeDefine.builder().name("test").columnType("blob").dataType("blob").build();
        Column column = IrisTypeConverter.INSTANCE.convert(typeDefine);

        Assertions.assertEquals(typeDefine.getName(), column.getName());
        Assertions.assertEquals(PrimitiveByteArrayType.INSTANCE, column.getDataType());
        Assertions.assertEquals(Integer.MAX_VALUE, column.getColumnLength());
        Assertions.assertEquals(typeDefine.getColumnType(), column.getSourceType());
    }