package org.jooq.impl;
import org.jooq.CharacterSet;
import org.jooq.Collation;
import org.jooq.Configuration;
import org.jooq.DataType;
import org.jooq.Field;
import org.jooq.Nullability;
final class ArrayDataType<T> extends DefaultDataType<T[]> {
private static final long serialVersionUID = 7883229760246533448L;
final DataType<T> elementType;
public ArrayDataType(DataType<T> elementType) {
super(null, elementType.getArrayType(), elementType.getTypeName(), elementType.getCastTypeName());
this.elementType = elementType;
}
ArrayDataType(
DefaultDataType<T[]> t,
DataType<T> elementType,
Integer precision,
Integer scale,
Integer length,
Nullability nullability,
Collation collation,
CharacterSet characterSet,
boolean identity,
Field<T[]> defaultValue
) {
super(t, precision, scale, length, nullability, collation, characterSet, identity, defaultValue);
this.elementType = elementType;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
DefaultDataType<T[]> construct(
Integer newPrecision,
Integer newScale,
Integer newLength,
Nullability
newNullability,
Collation newCollation,
CharacterSet newCharacterSet,
boolean newIdentity,
Field<T[]> newDefaultValue
) {
return new ArrayDataType<>(
this,
(DefaultDataType<T>) elementType,
newPrecision,
newScale,
newLength,
newNullability,
newCollation,
newCharacterSet,
newIdentity,
(Field) newDefaultValue
);
}
@Override
public final String getTypeName(Configuration configuration) {
String typeName = elementType.getTypeName(configuration);
return getArrayType(configuration, typeName);
}
@Override
public final String getCastTypeName(Configuration configuration) {
String castTypeName = elementType.getCastTypeName(configuration);
return getArrayType(configuration, castTypeName);
}
@Override
public final Class<?> getArrayComponentType() {
return elementType.getType();
}
@Override
public final DataType<?> getArrayComponentDataType() {
return elementType;
}
private static String getArrayType(Configuration configuration, String dataType) {
switch (configuration.family()) {
case HSQLDB:
return dataType + " array";
case POSTGRES:
return dataType + "[]";
case H2:
return "array";
default:
return dataType + "[]";
}
}
}