blob: cffa616fcd804f1649969d27accc123af6b465e8 [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.ignite.internal.processors.query.h2;
import java.math.BigDecimal;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.HashMap;
import java.util.Map;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.h2.util.LocalDateTimeUtils;
import org.h2.value.DataType;
/**
* Enum that helps to map java types to database types.
*/
public enum H2DatabaseType {
/** */
INT("INT"),
/** */
BOOL("BOOL"),
/** */
TINYINT("TINYINT"),
/** */
SMALLINT("SMALLINT"),
/** */
BIGINT("BIGINT"),
/** */
DECIMAL("DECIMAL"),
/** */
DOUBLE("DOUBLE"),
/** */
REAL("REAL"),
/** */
TIME("TIME"),
/** */
TIMESTAMP("TIMESTAMP"),
/** */
DATE("DATE"),
/** */
VARCHAR("VARCHAR"),
/** */
CHAR("CHAR"),
/** */
BINARY("BINARY"),
/** */
UUID("UUID"),
/** */
ARRAY("ARRAY"),
/** */
GEOMETRY("GEOMETRY"),
/** */
OTHER("OTHER");
/** Map of Class to enum. */
private static final Map<Class<?>, H2DatabaseType> map = new HashMap<>();
/*
* Initialize map of DB types.
*/
static {
map.put(int.class, INT);
map.put(Integer.class, INT);
map.put(boolean.class, BOOL);
map.put(Boolean.class, BOOL);
map.put(byte.class, TINYINT);
map.put(Byte.class, TINYINT);
map.put(short.class, SMALLINT);
map.put(Short.class, SMALLINT);
map.put(long.class, BIGINT);
map.put(Long.class, BIGINT);
map.put(BigDecimal.class, DECIMAL);
map.put(double.class, DOUBLE);
map.put(Double.class, DOUBLE);
map.put(float.class, REAL);
map.put(Float.class, REAL);
map.put(Time.class, TIME);
map.put(Timestamp.class, TIMESTAMP);
map.put(java.util.Date.class, TIMESTAMP);
map.put(java.sql.Date.class, DATE);
map.put(String.class, VARCHAR);
map.put(java.util.UUID.class, UUID);
map.put(byte[].class, BINARY);
}
/** */
private final String dbType;
/**
* Constructs new instance.
*
* @param dbType DB type name.
*/
H2DatabaseType(String dbType) {
this.dbType = dbType;
}
/**
* Resolves enum by class.
*
* @param cls Class.
* @return Enum value.
*/
public static H2DatabaseType fromClass(Class<?> cls) {
H2DatabaseType res = map.get(cls);
if (res != null)
return res;
if (DataType.isGeometryClass(cls))
return GEOMETRY;
if (LocalDateTimeUtils.LOCAL_DATE == cls)
return DATE;
else if (LocalDateTimeUtils.LOCAL_TIME == cls)
return TIME;
else if (LocalDateTimeUtils.LOCAL_DATE_TIME == cls)
return TIMESTAMP;
return cls.isArray() && !cls.getComponentType().isPrimitive() ? ARRAY : OTHER;
}
/**
* Gets DB type name.
*
* @return DB type name.
*/
public String dBTypeAsString() {
return dbType;
}
/** {@inheritDoc} */
@Override public String toString() {
return S.toString(H2DatabaseType.class, this);
}
}