private void checkForInvalidDuplicates()

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


    private void checkForInvalidDuplicates() {
        final List<ColumnHeader> fingerprintColumns = columnInsights.stream()
                .filter(ci -> ci.getType() == ColumnType.FINGERPRINT)
                .map(ColumnInsight::getInternalHeader)
                .collect(Collectors.toList());

        if (settings.isAllowDuplicates() || fingerprintColumns.isEmpty()) {
            return;
        }

        log.debug("Checking for duplicates in {} {} columns.", fingerprintColumns.size(), ColumnType.FINGERPRINT);
        final long startTime = System.currentTimeMillis();
        final List<String> columnsWithDuplicates = new ArrayList<>();

        try (Statement stmt = this.sqlTable.getConnection().createStatement()) {
            for (var columnHeader : fingerprintColumns) {
                final ResultSet duplicates = stmt.executeQuery(TableGenerator.getDuplicatesInColumnStatement(stmt, columnHeader));
                if (duplicates.next()) {
                    columnsWithDuplicates.add(columnHeader.toString());
                }
                duplicates.close();
            }
        } catch (SQLException e) {
            throw new C3rRuntimeException("An SQL exception occurred during marshalling.", e);
        }
        final long endTime = System.currentTimeMillis();
        log.debug("Finished checking for duplicates in {} {} columns in {} seconds.", fingerprintColumns.size(), ColumnType.FINGERPRINT,
                TimeUnit.MILLISECONDS.toSeconds(endTime - startTime));

        if (!columnsWithDuplicates.isEmpty()) {
            throw new C3rRuntimeException("Duplicate entries found in the following " + ColumnType.FINGERPRINT + " columns "
                    + "but the allowDuplicates setting for cryptographic computing is false: "
                    + "[" + String.join(", ", columnsWithDuplicates) + "]");
        }
    }