in endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Database.java [663:710]
protected ValueGetter<?> getMapping(final Column columnDefinition) {
if (GeometryType.isKnown(columnDefinition.typeName)) {
return forGeometry(columnDefinition);
}
switch (columnDefinition.type) {
case Types.BIT:
case Types.BOOLEAN: return ValueGetter.AsBoolean.INSTANCE;
case Types.TINYINT: if (isByteSigned) return ValueGetter.AsByte.INSTANCE; // else fallthrough.
case Types.SMALLINT: return ValueGetter.AsShort.INSTANCE;
case Types.INTEGER: return ValueGetter.AsInteger.INSTANCE;
case Types.BIGINT: return ValueGetter.AsLong.INSTANCE;
case Types.REAL: return ValueGetter.AsFloat.INSTANCE;
case Types.FLOAT: // Despite the name, this is implemented as DOUBLE in major databases.
case Types.DOUBLE: return ValueGetter.AsDouble.INSTANCE;
case Types.NUMERIC: // Similar to DECIMAL except that it uses exactly the specified precision.
case Types.DECIMAL: return ValueGetter.AsBigDecimal.INSTANCE;
case Types.CHAR:
case Types.VARCHAR:
case Types.LONGVARCHAR: return ValueGetter.AsString.INSTANCE;
case Types.DATE: return supportsJavaTime ? ValueGetter.LOCAL_DATE : ValueGetter.AsLocalDate.INSTANCE;
case Types.TIME: return supportsJavaTime ? ValueGetter.LOCAL_TIME : ValueGetter.AsLocalTime.INSTANCE;
case Types.TIMESTAMP: return supportsJavaTime ? ValueGetter.LOCAL_DATE_TIME : ValueGetter.AsLocalDateTime.INSTANCE;
case Types.TIME_WITH_TIMEZONE: return supportsJavaTime ? ValueGetter.OFFSET_TIME : ValueGetter.AsOffsetTime.INSTANCE;
case Types.TIMESTAMP_WITH_TIMEZONE: return supportsJavaTime ? ValueGetter.OFFSET_DATE_TIME : ValueGetter.AsOffsetDateTime.INSTANCE;
case Types.BLOB: return ValueGetter.AsBytes.INSTANCE;
case Types.OTHER:
case Types.JAVA_OBJECT: return getDefaultMapping();
case Types.BINARY:
case Types.VARBINARY:
case Types.LONGVARBINARY: {
final BinaryEncoding encoding = getBinaryEncoding(columnDefinition);
switch (encoding) {
case RAW: return ValueGetter.AsBytes.INSTANCE;
case HEXADECIMAL: return ValueGetter.AsBytes.HEXADECIMAL;
default: throw new AssertionError(encoding);
}
}
case Types.ARRAY: {
final int componentType = getArrayComponentType(columnDefinition);
final ValueGetter<?> component = getMapping(new Column(componentType, columnDefinition.typeName));
if (component == ValueGetter.AsObject.INSTANCE) {
return ValueGetter.AsArray.INSTANCE;
}
return new ValueGetter.AsArray(component);
}
default: return null;
}
}