All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.flink.table.dataformat.GenericArray Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.flink.table.dataformat;

import static org.apache.flink.util.Preconditions.checkArgument;
import static org.apache.flink.util.Preconditions.checkNotNull;
import static org.apache.flink.util.Preconditions.checkState;

/**
 * A GenericArray is an array where all the elements have the same type.
 * It can be considered as a wrapper class of the normal java array.
 */
public class GenericArray implements BaseArray {

	private final Object arr;
	private final int numElements;
	private final boolean isPrimitiveArray;

	public GenericArray(Object arr, int numElements) {
		this(arr, numElements, isPrimitiveArray(arr));
	}

	public GenericArray(Object arr, int numElements, boolean isPrimitiveArray) {
		this.arr = arr;
		this.numElements = numElements;
		this.isPrimitiveArray = isPrimitiveArray;
	}

	private static boolean isPrimitiveArray(Object arr) {
		checkNotNull(arr);
		checkArgument(arr.getClass().isArray());
		return arr.getClass().getComponentType().isPrimitive();
	}

	public boolean isPrimitiveArray() {
		return isPrimitiveArray;
	}

	public Object getArray() {
		return arr;
	}

	@Override
	public int numElements() {
		return numElements;
	}

	@Override
	public boolean isNullAt(int pos) {
		return !isPrimitiveArray && ((Object[]) arr)[pos] == null;
	}

	@Override
	public void setNullAt(int pos) {
		checkState(!isPrimitiveArray, "Can't set null for primitive array");
		((Object[]) arr)[pos] = null;
	}

	@Override
	public void setNotNullAt(int pos) {
		// do nothing, as an update will follow immediately
	}

	@Override
	public void setNullLong(int pos) {
		setNullAt(pos);
	}

	@Override
	public void setNullInt(int pos) {
		setNullAt(pos);
	}

	@Override
	public void setNullBoolean(int pos) {
		setNullAt(pos);
	}

	@Override
	public void setNullByte(int pos) {
		setNullAt(pos);
	}

	@Override
	public void setNullShort(int pos) {
		setNullAt(pos);
	}

	@Override
	public void setNullFloat(int pos) {
		setNullAt(pos);
	}

	@Override
	public void setNullDouble(int pos) {
		setNullAt(pos);
	}

	@Override
	public boolean[] toBooleanArray() {
		return (boolean[]) arr;
	}

	@Override
	public byte[] toByteArray() {
		return (byte[]) arr;
	}

	@Override
	public short[] toShortArray() {
		return (short[]) arr;
	}

	@Override
	public int[] toIntArray() {
		return (int[]) arr;
	}

	@Override
	public long[] toLongArray() {
		return (long[]) arr;
	}

	@Override
	public float[] toFloatArray() {
		return (float[]) arr;
	}

	@Override
	public double[] toDoubleArray() {
		return (double[]) arr;
	}

	@Override
	public boolean getBoolean(int pos) {
		return isPrimitiveArray ? ((boolean[]) arr)[pos] : (boolean) getObject(pos);
	}

	@Override
	public byte getByte(int pos) {
		return isPrimitiveArray ? ((byte[]) arr)[pos] : (byte) getObject(pos);
	}

	@Override
	public short getShort(int pos) {
		return isPrimitiveArray ? ((short[]) arr)[pos] : (short) getObject(pos);
	}

	@Override
	public int getInt(int pos) {
		return isPrimitiveArray ? ((int[]) arr)[pos] : (int) getObject(pos);
	}

	@Override
	public long getLong(int pos) {
		return isPrimitiveArray ? ((long[]) arr)[pos] : (long) getObject(pos);
	}

	@Override
	public float getFloat(int pos) {
		return isPrimitiveArray ? ((float[]) arr)[pos] : (float) getObject(pos);
	}

	@Override
	public double getDouble(int pos) {
		return isPrimitiveArray ? ((double[]) arr)[pos] : (double) getObject(pos);
	}

	@Override
	public byte[] getBinary(int pos) {
		return (byte[]) getObject(pos);
	}

	@Override
	public BinaryString getString(int pos) {
		return (BinaryString) getObject(pos);
	}

	@Override
	public Decimal getDecimal(int pos, int precision, int scale) {
		return (Decimal) getObject(pos);
	}

	@Override
	public SqlTimestamp getTimestamp(int pos, int precision) {
		return (SqlTimestamp) getObject(pos);
	}

	@Override
	public  BinaryGeneric getGeneric(int pos) {
		return (BinaryGeneric) getObject(pos);
	}

	@Override
	public BaseRow getRow(int pos, int numFields) {
		return (BaseRow) getObject(pos);
	}

	@Override
	public BaseArray getArray(int pos) {
		return (BaseArray) getObject(pos);
	}

	@Override
	public BaseMap getMap(int pos) {
		return (BaseMap) getObject(pos);
	}

	@Override
	public void setBoolean(int pos, boolean value) {
		if (isPrimitiveArray) {
			((boolean[]) arr)[pos] = value;
		} else {
			setObject(pos, value);
		}
	}

	@Override
	public void setByte(int pos, byte value) {
		if (isPrimitiveArray) {
			((byte[]) arr)[pos] = value;
		} else {
			setObject(pos, value);
		}
	}

	@Override
	public void setShort(int pos, short value) {
		if (isPrimitiveArray) {
			((short[]) arr)[pos] = value;
		} else {
			setObject(pos, value);
		}
	}

	@Override
	public void setInt(int pos, int value) {
		if (isPrimitiveArray) {
			((int[]) arr)[pos] = value;
		} else {
			setObject(pos, value);
		}
	}

	@Override
	public void setLong(int pos, long value) {
		if (isPrimitiveArray) {
			((long[]) arr)[pos] = value;
		} else {
			setObject(pos, value);
		}
	}

	@Override
	public void setFloat(int pos, float value) {
		if (isPrimitiveArray) {
			((float[]) arr)[pos] = value;
		} else {
			setObject(pos, value);
		}
	}

	@Override
	public void setDouble(int pos, double value) {
		if (isPrimitiveArray) {
			((double[]) arr)[pos] = value;
		} else {
			setObject(pos, value);
		}
	}

	@Override
	public void setDecimal(int pos, Decimal value, int precision) {
		setObject(pos, value);
	}

	@Override
	public void setTimestamp(int pos, SqlTimestamp value, int precision) {
		setObject(pos, value);
	}

	public Object getObject(int pos) {
		return ((Object[]) arr)[pos];
	}

	public void setObject(int pos, Object value) {
		((Object[]) arr)[pos] = value;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy