blob: 82c580d97be8e80d72115ab4e8a8eeaa278dd337 [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.iotdb.tsfile.read.common;
import org.apache.iotdb.tsfile.exception.NullFieldException;
import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.utils.Binary;
import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
/**
* Field is component of one {@code RowRecord} which stores a value in specific data type. The value
* type of Field is primitive(int long, float, double, binary, boolean).
*/
public class Field {
private final TSDataType dataType;
private boolean boolV;
private int intV;
private long longV;
private float floatV;
private double doubleV;
private Binary binaryV;
public Field(TSDataType dataType) {
this.dataType = dataType;
}
public static Field copy(Field field) {
Field out = new Field(field.dataType);
if (out.dataType != null) {
switch (out.dataType) {
case DOUBLE:
out.setDoubleV(field.getDoubleV());
break;
case FLOAT:
out.setFloatV(field.getFloatV());
break;
case INT64:
out.setLongV(field.getLongV());
break;
case INT32:
out.setIntV(field.getIntV());
break;
case BOOLEAN:
out.setBoolV(field.getBoolV());
break;
case TEXT:
out.setBinaryV(field.getBinaryV());
break;
default:
throw new UnSupportedDataTypeException(out.dataType.toString());
}
}
return out;
}
public TSDataType getDataType() {
return dataType;
}
public boolean getBoolV() {
if (dataType == null) {
throw new NullFieldException();
}
return boolV;
}
public void setBoolV(boolean boolV) {
this.boolV = boolV;
}
public int getIntV() {
if (dataType == null) {
throw new NullFieldException();
}
return intV;
}
public void setIntV(int intV) {
this.intV = intV;
}
public long getLongV() {
if (dataType == null) {
throw new NullFieldException();
}
return longV;
}
public void setLongV(long longV) {
this.longV = longV;
}
public float getFloatV() {
if (dataType == null) {
throw new NullFieldException();
}
return floatV;
}
public void setFloatV(float floatV) {
this.floatV = floatV;
}
public double getDoubleV() {
if (dataType == null) {
throw new NullFieldException();
}
return doubleV;
}
public void setDoubleV(double doubleV) {
this.doubleV = doubleV;
}
public Binary getBinaryV() {
if (dataType == null) {
throw new NullFieldException();
}
return binaryV;
}
public void setBinaryV(Binary binaryV) {
this.binaryV = binaryV;
}
/**
* get field value and convert to string.
*
* @return value string
*/
public String getStringValue() {
if (dataType == null) {
return "null";
}
switch (dataType) {
case BOOLEAN:
return String.valueOf(boolV);
case INT32:
return String.valueOf(intV);
case INT64:
return String.valueOf(longV);
case FLOAT:
return String.valueOf(floatV);
case DOUBLE:
return String.valueOf(doubleV);
case TEXT:
return binaryV.toString();
default:
throw new UnSupportedDataTypeException(dataType.toString());
}
}
@Override
public String toString() {
return getStringValue();
}
public Object getObjectValue(TSDataType dataType) {
if (this.dataType == null) {
return null;
}
switch (dataType) {
case DOUBLE:
return getDoubleV();
case FLOAT:
return getFloatV();
case INT64:
return getLongV();
case INT32:
return getIntV();
case BOOLEAN:
return getBoolV();
case TEXT:
return getBinaryV();
default:
throw new UnSupportedDataTypeException(dataType.toString());
}
}
public static Field getField(Object value, TSDataType dataType) {
if (value == null) {
return null;
}
Field field = new Field(dataType);
switch (dataType) {
case INT32:
field.setIntV((int) value);
break;
case INT64:
field.setLongV((long) value);
break;
case FLOAT:
field.setFloatV((float) value);
break;
case DOUBLE:
field.setDoubleV((double) value);
break;
case BOOLEAN:
field.setBoolV((boolean) value);
break;
case TEXT:
field.setBinaryV((Binary) value);
break;
default:
throw new UnSupportedDataTypeException(dataType.toString());
}
return field;
}
public static void setTsPrimitiveValue(TsPrimitiveType value, Field field) {
switch (value.getDataType()) {
case BOOLEAN:
field.setBoolV(value.getBoolean());
break;
case INT32:
field.setIntV(value.getInt());
break;
case INT64:
field.setLongV(value.getLong());
break;
case FLOAT:
field.setFloatV(value.getFloat());
break;
case DOUBLE:
field.setDoubleV(value.getDouble());
break;
case TEXT:
field.setBinaryV(value.getBinary());
break;
default:
throw new UnSupportedDataTypeException("UnSupported" + value.getDataType());
}
}
}