blob: bfce7aef6e908f3a88761469608da654ee2bd40f [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.metadata.datatype;
import java.util.ArrayList;
import java.util.List;
/**
* Holds all singleton object for all data type used in carbon
*/
public class DataTypes {
// singleton for each data type
public static final DataType STRING = StringType.STRING;
public static final DataType DATE = DateType.DATE;
public static final DataType TIMESTAMP = TimestampType.TIMESTAMP;
public static final DataType BOOLEAN = BooleanType.BOOLEAN;
public static final DataType SHORT = ShortType.SHORT;
public static final DataType INT = IntType.INT;
public static final DataType FLOAT = FloatType.FLOAT;
public static final DataType LONG = LongType.LONG;
public static final DataType DOUBLE = DoubleType.DOUBLE;
public static final DataType NULL = NullType.NULL;
public static final DataType BYTE = ByteType.BYTE;
public static final DataType BINARY = BinaryType.BINARY;
// internal use only, for variable length data type
public static final DataType BYTE_ARRAY = ByteArrayType.BYTE_ARRAY;
// internal use only, for value compression from integer/long to 3 bytes value
public static final DataType SHORT_INT = ShortIntType.SHORT_INT;
public static final DataType VARCHAR = VarcharType.VARCHAR;
// these IDs are used within this package only
static final int STRING_TYPE_ID = 0;
static final int DATE_TYPE_ID = 1;
static final int TIMESTAMP_TYPE_ID = 2;
static final int BOOLEAN_TYPE_ID = 3;
static final int SHORT_TYPE_ID = 4;
static final int INT_TYPE_ID = 5;
static final int FLOAT_TYPE_ID = 6;
static final int LONG_TYPE_ID = 7;
static final int DOUBLE_TYPE_ID = 8;
static final int NULL_TYPE_ID = 9;
static final int BYTE_TYPE_ID = 14;
static final int BYTE_ARRAY_TYPE_ID = 15;
static final int SHORT_INT_TYPE_ID = 16;
static final int LEGACY_LONG_TYPE_ID = 17;
public static final int DECIMAL_TYPE_ID = 10;
public static final int ARRAY_TYPE_ID = 11;
public static final int STRUCT_TYPE_ID = 12;
public static final int MAP_TYPE_ID = 13;
public static final int VARCHAR_TYPE_ID = 18;
public static final int BINARY_TYPE_ID = 19;
/**
* create a DataType instance from uniqueId of the DataType
*/
public static DataType valueOf(int id) {
if (id == STRING.getId()) {
return STRING;
} else if (id == DATE.getId()) {
return DATE;
} else if (id == TIMESTAMP.getId()) {
return TIMESTAMP;
} else if (id == BOOLEAN.getId()) {
return BOOLEAN;
} else if (id == BYTE.getId()) {
return BYTE;
} else if (id == SHORT.getId()) {
return SHORT;
} else if (id == SHORT_INT.getId()) {
return SHORT_INT;
} else if (id == INT.getId()) {
return INT;
} else if (id == LONG.getId()) {
return LONG;
} else if (id == FLOAT.getId()) {
return FLOAT;
} else if (id == DOUBLE.getId()) {
return DOUBLE;
} else if (id == NULL.getId()) {
return NULL;
} else if (id == DECIMAL_TYPE_ID) {
return createDefaultDecimalType();
} else if (id == BINARY.getId()) {
return BINARY;
} else if (id == ARRAY_TYPE_ID) {
return createDefaultArrayType();
} else if (id == STRUCT_TYPE_ID) {
return createDefaultStructType();
} else if (id == MAP_TYPE_ID) {
return createDefaultMapType();
} else if (id == BYTE_ARRAY.getId()) {
return BYTE_ARRAY;
} else if (id == VARCHAR.getId()) {
return VARCHAR;
} else {
throw new RuntimeException("create DataType with invalid id: " + id);
}
}
/**
* create a decimal type object with specified precision and scale
*/
public static DecimalType createDecimalType(int precision, int scale) {
return new DecimalType(precision, scale);
}
/**
* create a decimal type object with default precision = 10 and scale = 2
*/
public static DecimalType createDefaultDecimalType() {
return new DecimalType(10, 2);
}
public static boolean isDecimal(DataType dataType) {
return dataType.getId() == DECIMAL_TYPE_ID;
}
/**
* create array type with specified element type
*/
public static ArrayType createArrayType(DataType elementType) {
return new ArrayType(elementType);
}
/**
* create array type with specified element type and name
*/
public static ArrayType createArrayType(DataType elementType, String elementName) {
return new ArrayType(elementType, elementName);
}
/**
* create a array type object with no child
*/
public static ArrayType createDefaultArrayType() {
return new ArrayType(STRING);
}
public static boolean isArrayType(DataType dataType) {
return dataType.getId() == ARRAY_TYPE_ID;
}
/**
* create struct type with specified fields
*/
public static StructType createStructType(List<StructField> fields) {
return new StructType(fields);
}
/**
* create a struct type object with no field
*/
public static StructType createDefaultStructType() {
return new StructType(new ArrayList<StructField>());
}
public static boolean isStructType(DataType dataType) {
return dataType.getId() == STRUCT_TYPE_ID;
}
/**
* create map type with specified key type and value type
*/
public static MapType createMapType(DataType keyType, DataType valueType) {
return new MapType(keyType, valueType);
}
/**
* create a map type object with no child
*/
public static MapType createDefaultMapType() {
return new MapType(STRING, STRING);
}
public static boolean isMapType(DataType dataType) {
return dataType.getId() == MAP_TYPE_ID;
}
}