public Table create()

in baremaps-calcite/src/main/java/org/apache/baremaps/calcite/data/DataTableFactory.java [52:108]


  public Table create(
      SchemaPlus schema,
      String name,
      Map<String, Object> operand,
      RelDataType rowType) {
    String file = (String) operand.get("file");
    if (file == null) {
      throw new RuntimeException("A file should be specified");
    }

    try {
      Memory<MappedByteBuffer> memory = new MemoryMappedDirectory(Paths.get(file));
      ByteBuffer header = memory.header();

      // For new tables, initialize with schema
      if (rowType != null) {
        // Create and serialize schema
        Map<String, Object> schemaMap = new HashMap<>();
        schemaMap.put("name", name);
        schemaMap.put("columns", rowType.getFieldList().stream()
            .map(field -> {
              Map<String, Object> column = new HashMap<>();
              column.put("name", field.getName());
              column.put("cardinality",
                  field.getType().isNullable() ? DataColumn.Cardinality.OPTIONAL.name()
                      : DataColumn.Cardinality.REQUIRED.name());
              column.put("sqlTypeName", field.getType().getSqlTypeName().name());
              return column;
            })
            .toList());

        // Serialize and write schema to header
        byte[] schemaBytes = new ObjectMapper().writeValueAsBytes(schemaMap);
        header.putLong(0L);
        header.putInt(schemaBytes.length);
        header.put(schemaBytes);
      }

      // Read schema and create table
      header.position(0);
      long size = header.getLong();
      int length = header.getInt();
      byte[] bytes = new byte[length];
      header.get(bytes);
      DataTableSchema dataSchema =
          DataTableSchema.read(new ByteArrayInputStream(bytes), TYPE_FACTORY);
      DataRowType dataRowType = new DataRowType(dataSchema);
      DataCollection<DataRow> dataCollection = AppendOnlyLog.<DataRow>builder()
          .dataType(dataRowType)
          .memory(memory)
          .build();

      return new DataModifiableTable(name, dataSchema, dataCollection, TYPE_FACTORY);
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
  }