static ElementGetter createElementGetter()

in flink-cdc-common/src/main/java/org/apache/flink/cdc/common/data/ArrayData.java [154:230]


    static ElementGetter createElementGetter(DataType elementType) {
        final ElementGetter elementGetter;
        // ordered by type root definition
        switch (elementType.getTypeRoot()) {
            case CHAR:
            case VARCHAR:
                elementGetter = ArrayData::getString;
                break;
            case BOOLEAN:
                elementGetter = ArrayData::getBoolean;
                break;
            case BINARY:
            case VARBINARY:
                elementGetter = ArrayData::getBinary;
                break;
            case DECIMAL:
                final int decimalPrecision = getPrecision(elementType);
                final int decimalScale = getScale(elementType);
                elementGetter =
                        (array, pos) -> array.getDecimal(pos, decimalPrecision, decimalScale);
                break;
            case TINYINT:
                elementGetter = ArrayData::getByte;
                break;
            case SMALLINT:
                elementGetter = ArrayData::getShort;
                break;
            case INTEGER:
            case DATE:
            case TIME_WITHOUT_TIME_ZONE:
                elementGetter = ArrayData::getInt;
                break;
            case BIGINT:
                elementGetter = ArrayData::getLong;
                break;
            case FLOAT:
                elementGetter = ArrayData::getFloat;
                break;
            case DOUBLE:
                elementGetter = ArrayData::getDouble;
                break;
            case TIMESTAMP_WITHOUT_TIME_ZONE:
                final int timestampPrecision = getPrecision(elementType);
                elementGetter = (array, pos) -> array.getTimestamp(pos, timestampPrecision);
                break;
            case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
                final int timestampLtzPrecision = getPrecision(elementType);
                elementGetter =
                        (array, pos) -> array.getLocalZonedTimestamp(pos, timestampLtzPrecision);
                break;
            case TIMESTAMP_WITH_TIME_ZONE:
                final int timestampTzPrecision = getPrecision(elementType);
                elementGetter = (array, pos) -> array.getZonedTimestamp(pos, timestampTzPrecision);
                break;
            case ARRAY:
                elementGetter = ArrayData::getArray;
                break;
            case MAP:
                elementGetter = ArrayData::getMap;
                break;
            case ROW:
                final int rowFieldCount = getFieldCount(elementType);
                elementGetter = (array, pos) -> array.getRecord(pos, rowFieldCount);
                break;
            default:
                throw new IllegalArgumentException();
        }
        if (!elementType.isNullable()) {
            return elementGetter;
        }
        return (array, pos) -> {
            if (array.isNullAt(pos)) {
                return null;
            }
            return elementGetter.getElementOrNull(array, pos);
        };
    }