in baremaps-calcite/src/main/java/org/apache/baremaps/calcite/data/DataColumnFixed.java [27:109]
public record DataColumnFixed(
String name,
DataColumn.Cardinality cardinality,
RelDataType relDataType) implements DataColumn {
/**
* Constructs a fixed column with validation.
*
* @param name the name of the column
* @param cardinality the cardinality of the column
* @param relDataType the RelDataType of the column
* @throws NullPointerException if any parameter is null
*/
public DataColumnFixed {
Objects.requireNonNull(name, "Column name cannot be null");
Objects.requireNonNull(cardinality, "Column cardinality cannot be null");
Objects.requireNonNull(relDataType, "Column type cannot be null");
if (name.isBlank()) {
throw new IllegalArgumentException("Column name cannot be blank");
}
}
@Override
public SqlTypeName sqlTypeName() {
return relDataType.getSqlTypeName();
}
@Override
public Class<?> javaType() {
return sqlTypeNameToJavaClass(sqlTypeName());
}
/**
* Converts a SqlTypeName to a Java class.
*
* @param sqlTypeName the SQL type name
* @return the corresponding Java class
*/
private static Class<?> sqlTypeNameToJavaClass(SqlTypeName sqlTypeName) {
// Maps SqlTypeName to Java class
switch (sqlTypeName) {
case BOOLEAN:
return Boolean.class;
case TINYINT:
return Byte.class;
case SMALLINT:
return Short.class;
case INTEGER:
return Integer.class;
case BIGINT:
return Long.class;
case FLOAT:
case REAL:
return Float.class;
case DOUBLE:
case DECIMAL:
return Double.class;
case CHAR:
case VARCHAR:
return String.class;
case BINARY:
case VARBINARY:
return byte[].class;
case DATE:
return java.time.LocalDate.class;
case TIME:
return java.time.LocalTime.class;
case TIMESTAMP:
return java.time.LocalDateTime.class;
case GEOMETRY:
return org.locationtech.jts.geom.Geometry.class;
case ARRAY:
return Object[].class;
case MAP:
case ROW:
case STRUCTURED:
return java.util.Map.class;
default:
return Object.class;
}
}
}