private RelDataType createRowType()

in baremaps-calcite/src/main/java/org/apache/baremaps/calcite/geopackage/GeoPackageTable.java [107:151]


  private RelDataType createRowType(RelDataTypeFactory typeFactory) {
    List<RelDataType> types = new ArrayList<>();
    List<String> names = new ArrayList<>();

    for (FeatureColumn column : featureDao.getColumns()) {
      String columnName = column.getName();
      RelDataType sqlType;

      if (column.isGeometry()) {
        // For geometry columns, use a proper geometry type
        sqlType = typeFactory.createJavaType(org.locationtech.jts.geom.Geometry.class);
      } else {
        // Map Java types to SQL types
        Class<?> javaType = column.getDataType().getClassType();
        if (javaType == String.class) {
          sqlType = typeFactory.createSqlType(SqlTypeName.VARCHAR);
        } else if (javaType == Integer.class || javaType == int.class) {
          sqlType = typeFactory.createSqlType(SqlTypeName.INTEGER);
        } else if (javaType == Long.class || javaType == long.class) {
          sqlType = typeFactory.createSqlType(SqlTypeName.BIGINT);
        } else if (javaType == Double.class || javaType == double.class) {
          sqlType = typeFactory.createSqlType(SqlTypeName.DOUBLE);
        } else if (javaType == Float.class || javaType == float.class) {
          sqlType = typeFactory.createSqlType(SqlTypeName.FLOAT);
        } else if (javaType == Boolean.class || javaType == boolean.class) {
          sqlType = typeFactory.createSqlType(SqlTypeName.BOOLEAN);
        } else if (javaType == Date.class) {
          sqlType = typeFactory.createSqlType(SqlTypeName.TIMESTAMP);
        } else {
          // Default to VARCHAR for unknown types
          sqlType = typeFactory.createSqlType(SqlTypeName.VARCHAR);
        }
      }

      // Handle nullability
      if (!column.isNotNull()) {
        sqlType = typeFactory.createTypeWithNullability(sqlType, true);
      }

      types.add(sqlType);
      names.add(columnName);
    }

    return typeFactory.createStructType(types, names);
  }