private void writeInputBatchToSql()

in c3r-sdk-core/src/main/java/com/amazonaws/c3r/action/RowMarshaller.java [291:329]


    private void writeInputBatchToSql(final RowWriter<T> sqlRowWriter, final List<Row<T>> batchedRows) {
        for (Row<T> sourceRow : batchedRows) {
            final Row<T> targetRow = valueFactory.newRow();
            final Nonce nonce = Nonce.nextNonce();
            sourceRow.forEach((column, value) -> {
                // Map source values to each target.
                if (sourceMappedColumnInsights.containsKey(column)) {
                    for (var columnInsight : sourceMappedColumnInsights.get(column)) {
                        // Marshal sensitive data. Note that PadType.MAX may not be correct at this stage. It will require decrypting and
                        // re-encrypting when being sent to the final output. In the interim, it is based on the running max byte length,
                        // sampled in batches.
                        final Transformer transformer = transformers.get(columnInsight.getType());
                        final byte[] bytesToMarshall = ValueConverter.getBytesForColumn(value, columnInsight.getType(), settings);
                        final ClientDataType finalType = Objects.requireNonNullElse(columnInsight.getClientDataType(),
                                ClientDataType.STRING);

                        final var encryptionContext = new EncryptionContext(columnInsight, nonce, finalType);

                        try {
                            targetRow.putBytes(
                                    columnInsight.getTargetHeader(),
                                    transformer.marshal(bytesToMarshall, encryptionContext));
                        } catch (Exception e) {
                            throw new C3rRuntimeException("Failed while marshalling data for target column `"
                                    + encryptionContext.getColumnLabel() + "` on row " + inputReader.getReadRowCount() + ". Error message: "
                                    + e.getMessage(), e);
                        }
                    }
                }
            });
            targetRow.putNonce(nonceHeader, nonce);
            try {
                sqlRowWriter.writeRow(targetRow);
            } catch (Exception e) {
                throw new C3rRuntimeException("Failed while marshalling data for row " + inputReader.getReadRowCount() + ". Error message: "
                        + e.getMessage(), e);
            }
        }
    }