public void add()

in baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataSchema.java [83:126]


  public void add(DataTable table) {
    try (var connection = dataSource.getConnection()) {
      var rowType = adaptDataType(table.rowType());

      // Drop the table if it exists
      var dropQuery = dropTable(rowType.name());
      logger.debug(dropQuery);
      try (var dropStatement = connection.prepareStatement(dropQuery)) {
        dropStatement.execute();
      }

      // Create the table
      var createQuery = createTable(rowType);
      logger.debug(createQuery);
      try (var createStatement = connection.prepareStatement(createQuery)) {
        createStatement.execute();
      }

      // Copy the data
      var pgConnection = connection.unwrap(PGConnection.class);
      var copyQuery = copy(rowType);
      logger.debug(copyQuery);
      try (var writer = new CopyWriter(new PGCopyOutputStream(pgConnection, copyQuery))) {
        writer.writeHeader();
        var columns = getColumns(rowType);
        var handlers = getHandlers(rowType);
        for (DataRow row : table) {
          writer.startRow(columns.size());
          for (int i = 0; i < columns.size(); i++) {
            var column = columns.get(i);
            var handler = handlers.get(i);
            var value = row.get(column.name());
            if (value == null) {
              writer.writeNull();
            } else {
              writer.write(handler, value);
            }
          }
        }
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }