blob: 0450d036fd0d30796d88a4911a3371d2d703592b [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.carbondata.core.indexstore.row;
import org.apache.carbondata.core.indexstore.schema.CarbonRowSchema;
import org.apache.carbondata.core.metadata.datatype.DataTypes;
/**
* Index row.
*/
public class IndexRowImpl extends IndexRow {
private Object[] data;
private int totalLengthInBytes;
public IndexRowImpl(CarbonRowSchema[] schemas) {
super(schemas);
this.data = new Object[schemas.length];
}
@Override
public byte[] getByteArray(int ordinal) {
return (byte[]) data[ordinal];
}
@Override
public int getLengthInBytes(int ordinal) {
// if the segment data is written in table path
// then the data[BlockletIndexRowIndexes.SUMMARY_INDEX_PATH] will be null.
if (data[ordinal] == null) {
return 0;
}
return ((byte[]) data[ordinal]).length;
}
@Override
public void setBoolean(boolean value, int ordinal) {
assert (schemas[ordinal].getDataType() == DataTypes.BOOLEAN);
data[ordinal] = value;
}
@Override
public boolean getBoolean(int ordinal) {
return (boolean) data[ordinal];
}
@Override
public IndexRow getRow(int ordinal) {
return (IndexRow) data[ordinal];
}
@Override
public void setByteArray(byte[] byteArray, int ordinal) {
assert (schemas[ordinal].getDataType() == DataTypes.BYTE_ARRAY);
data[ordinal] = byteArray;
}
@Override
public int getInt(int ordinal) {
return (Integer) data[ordinal];
}
@Override
public void setInt(int value, int ordinal) {
assert (schemas[ordinal].getDataType() == DataTypes.INT);
data[ordinal] = value;
}
@Override
public void setByte(byte value, int ordinal) {
assert (schemas[ordinal].getDataType() == DataTypes.BYTE);
data[ordinal] = value;
}
@Override
public byte getByte(int ordinal) {
return (Byte) data[ordinal];
}
@Override
public void setShort(short value, int ordinal) {
assert (schemas[ordinal].getDataType() == DataTypes.SHORT);
data[ordinal] = value;
}
@Override
public short getShort(int ordinal) {
return (Short) data[ordinal];
}
@Override
public void setLong(long value, int ordinal) {
assert (schemas[ordinal].getDataType() == DataTypes.LONG);
data[ordinal] = value;
}
@Override
public long getLong(int ordinal) {
return (Long) data[ordinal];
}
@Override
public void setFloat(float value, int ordinal) {
assert (schemas[ordinal].getDataType() == DataTypes.FLOAT);
data[ordinal] = value;
}
@Override
public float getFloat(int ordinal) {
return (Float) data[ordinal];
}
@Override
public void setDouble(double value, int ordinal) {
assert (schemas[ordinal].getDataType() == DataTypes.DOUBLE);
data[ordinal] = value;
}
@Override
public void setRow(IndexRow row, int ordinal) {
assert (DataTypes.isStructType(schemas[ordinal].getDataType()));
data[ordinal] = row;
}
@Override
public double getDouble(int ordinal) {
return (Double) data[ordinal];
}
public void setTotalLengthInBytes(int totalLengthInBytes) {
this.totalLengthInBytes = totalLengthInBytes;
}
@Override
public int getTotalSizeInBytes() {
if (totalLengthInBytes > 0) {
return totalLengthInBytes;
} else {
return super.getTotalSizeInBytes();
}
}
}