blob: d8c0f2e315f2bf5a09afea404111b011dba1d79b [file] [log] [blame]
/*
* 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 org.apache.flink.api.common.typeutils.TypeSerializer;
import org.apache.flink.table.api.types.GenericType;
/**
* Wrap row to a updatable Generic Row.
*/
public final class UpdatableRow implements BaseRow {
private BaseRow row;
private final Object[] fields;
private final boolean[] updated;
public UpdatableRow(BaseRow row, int arity) {
this.row = row;
this.fields = new Object[arity];
this.updated = new boolean[arity];
}
public BaseRow getRow() {
return row;
}
@Override
public int getArity() {
return fields.length;
}
@Override
public byte getHeader() {
return row.getHeader();
}
@Override
public void setHeader(byte header) {
row.setHeader(header);
}
@Override
public boolean isNullAt(int ordinal) {
return updated[ordinal] ? this.fields[ordinal] == null : row.isNullAt(ordinal);
}
@Override
public boolean getBoolean(int ordinal) {
return updated[ordinal] ? (boolean) fields[ordinal] : row.getBoolean(ordinal);
}
@Override
public byte getByte(int ordinal) {
return updated[ordinal] ? (byte) fields[ordinal] : row.getByte(ordinal);
}
@Override
public short getShort(int ordinal) {
return updated[ordinal] ? (short) fields[ordinal] : row.getShort(ordinal);
}
@Override
public int getInt(int ordinal) {
return updated[ordinal] ? (int) fields[ordinal] : row.getInt(ordinal);
}
@Override
public long getLong(int ordinal) {
return updated[ordinal] ? (long) fields[ordinal] : row.getLong(ordinal);
}
@Override
public float getFloat(int ordinal) {
return updated[ordinal] ? (float) fields[ordinal] : row.getFloat(ordinal);
}
@Override
public double getDouble(int ordinal) {
return updated[ordinal] ? (double) fields[ordinal] : row.getDouble(ordinal);
}
@Override
public char getChar(int ordinal) {
return updated[ordinal] ? (char) fields[ordinal] : row.getChar(ordinal);
}
@Override
public byte[] getByteArray(int ordinal) {
return updated[ordinal] ? (byte[]) fields[ordinal] : row.getByteArray(ordinal);
}
@Override
public BinaryString getBinaryString(int ordinal) {
return updated[ordinal] ? (BinaryString) fields[ordinal] : row.getBinaryString(ordinal);
}
@Override
public BinaryString getBinaryString(int ordinal, BinaryString reuse) {
return updated[ordinal] ?
(BinaryString) fields[ordinal] :
row.getBinaryString(ordinal, reuse);
}
@Override
public Decimal getDecimal(int ordinal, int precision, int scale) {
return updated[ordinal] ? (Decimal) fields[ordinal] : row.getDecimal(ordinal, precision, scale);
}
@Override
public <T> T getGeneric(int ordinal, TypeSerializer<T> serializer) {
return updated[ordinal] ? (T) fields[ordinal] : row.getGeneric(ordinal, serializer);
}
@Override
public <T> T getGeneric(int pos, GenericType<T> type) {
return updated[pos] ? (T) fields[pos] : row.getGeneric(pos, type);
}
@Override
public BaseRow getBaseRow(int ordinal, int numFields) {
return updated[ordinal] ? (BaseRow) fields[ordinal] : row.getBaseRow(ordinal, numFields);
}
@Override
public BaseArray getBaseArray(int ordinal) {
return updated[ordinal] ? (BaseArray) fields[ordinal] : row.getBaseArray(ordinal);
}
@Override
public BaseMap getBaseMap(int ordinal) {
return updated[ordinal] ? (BaseMap) fields[ordinal] : row.getBaseMap(ordinal);
}
@Override
public void setNullAt(int ordinal) {
update(ordinal, null);
}
@Override
public void setBoolean(int ordinal, boolean value) {
update(ordinal, value);
}
@Override
public void setByte(int ordinal, byte value) {
update(ordinal, value);
}
@Override
public void setShort(int ordinal, short value) {
update(ordinal, value);
}
@Override
public void setInt(int ordinal, int value) {
update(ordinal, value);
}
@Override
public void setLong(int ordinal, long value) {
update(ordinal, value);
}
@Override
public void setFloat(int ordinal, float value) {
update(ordinal, value);
}
@Override
public void setDouble(int ordinal, double value) {
update(ordinal, value);
}
@Override
public void setChar(int ordinal, char value) {
update(ordinal, value);
}
@Override
public void setDecimal(int ordinal, Decimal value, int precision, int scale) {
update(ordinal, value);
}
public void update(int ordinal, Object value) {
updated[ordinal] = true;
fields[ordinal] = value;
}
@Override
public boolean equalsWithoutHeader(BaseRow other) {
throw new UnsupportedOperationException();
}
}