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) + "]");
}
}