public boolean addAll()

in baremaps-calcite/src/main/java/org/apache/baremaps/calcite/postgres/PostgresModifiableTable.java [612:680]


    public boolean addAll(Collection<? extends Object[]> c) {
      Objects.requireNonNull(c, "Collection cannot be null");

      try (Connection connection = dataSource.getConnection()) {
        // Use COPY API for better performance
        PGConnection pgConnection = connection.unwrap(PGConnection.class);
        String copyCommand = "COPY \"" + schema + "\".\"" + tableName + "\" (" +
            dataTableSchema.columns().stream()
                .map(col -> "\"" + col.name() + "\"")
                .collect(java.util.stream.Collectors.joining(", "))
            +
            ") FROM STDIN WITH (FORMAT binary)";

        try (
            CopyWriter writer = new CopyWriter(new PGCopyOutputStream(pgConnection, copyCommand))) {
          writer.writeHeader();

          for (Object[] objects : c) {
            Objects.requireNonNull(objects, "Values cannot be null");
            if (objects.length != dataTableSchema.columns().size()) {
              throw new IllegalArgumentException(
                  "Expected " + dataTableSchema.columns().size() + " values, got "
                      + objects.length);
            }

            writer.startRow(dataTableSchema.columns().size());

            for (int i = 0; i < objects.length; i++) {
              Object value = objects[i];
              DataColumn column = dataTableSchema.columns().get(i);

              if (value == null) {
                writer.writeNull();
              } else if (column.sqlTypeName() == SqlTypeName.GEOMETRY
                  && value instanceof Geometry) {
                writer.write(CopyWriter.GEOMETRY_HANDLER, (Geometry) value);
              } else if (column.sqlTypeName() == SqlTypeName.BOOLEAN) {
                writer.writeBoolean((Boolean) value);
              } else if (column.sqlTypeName() == SqlTypeName.INTEGER) {
                writer.writeInteger((Integer) value);
              } else if (column.sqlTypeName() == SqlTypeName.BIGINT) {
                writer.writeLong((Long) value);
              } else if (column.sqlTypeName() == SqlTypeName.DOUBLE) {
                writer.writeDouble((Double) value);
              } else if (column.sqlTypeName() == SqlTypeName.FLOAT) {
                writer.writeFloat((Float) value);
              } else if (column.sqlTypeName() == SqlTypeName.SMALLINT) {
                writer.writeShort((Short) value);
              } else if (column.sqlTypeName() == SqlTypeName.TINYINT) {
                writer.writeByte((Byte) value);
              } else if (column.sqlTypeName() == SqlTypeName.DATE) {
                writer.write(CopyWriter.LOCAL_DATE_HANDLER, (java.time.LocalDate) value);
              } else if (column.sqlTypeName() == SqlTypeName.TIMESTAMP) {
                writer.write(CopyWriter.LOCAL_DATE_TIME_HANDLER, (java.time.LocalDateTime) value);
              } else if (column.sqlTypeName() == SqlTypeName.OTHER) {
                writer.writeJsonb(value.toString());
              } else {
                // For other types, convert to string
                writer.write(value.toString());
              }
            }
          }

          return true;
        }
      } catch (Exception e) {
        throw new RuntimeException("Error adding rows using COPY API", e);
      }
    }