public int verifyConstraintViolations(InMemoryReportWriter inMemoryReportWriter) throws AnalysisListenerException {
List<Result<Constraint>> constraintViolations = inMemoryReportWriter.getConstraintViolations();
int violations = 0;
for (Result<Constraint> constraintViolation : constraintViolations) {
if (!constraintViolation.isEmpty()) {
AbstractRule constraint = constraintViolation.getRule();
console.error(constraint.getId() + ": " + constraint.getDescription());
for (Map<String, Object> columns : constraintViolation.getRows()) {
StringBuilder message = new StringBuilder();
for (Map.Entry<String, Object> entry : columns.entrySet()) {
if (message.length() > 0) {
message.append(", ");