public record DataColumnFixed()

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;
    }
  }
}