package gov.nysenate.openleg.dao.spotcheck; import com.google.common.collect.ImmutableMap; import gov.nysenate.openleg.dao.base.*; import gov.nysenate.openleg.model.spotcheck.MismatchQuery; import org.apache.commons.lang3.text.StrSubstitutor; import java.util.Map; public enum SqlSpotCheckReportQuery implements BasicSqlQuery { INSERT_REPORT( "INSERT INTO ${schema}." + SqlTable.SPOTCHECK_REPORT + " (report_date_time, reference_date_time, reference_type, notes)\n" + "VALUES (:reportDateTime, :referenceDateTime, :referenceType, :notes)" ), GET_MISMATCH( "SELECT m.mismatch_id, m.report_id, m.key as key, m.type, m.status, \n" + "m.datasource, m.content_type, m.reference_type, m.reference_active_date_time, m.reference_data, m.observed_data, m.notes, \n" + "m.observed_date_time, m.report_date_time, m.ignore_status, m.issue_ids \n" + " FROM ${schema}.spotcheck_mismatch m \n" + " WHERE m.mismatch_id = :mismatchId \n" ), GET_MISMATCHES( "SELECT *, count(*) OVER() as total_rows FROM \n" + " (SELECT DISTINCT ON (m.key, m.type) m.mismatch_id, m.report_id, m.key as key, m.type, m.status, \n" + " m.datasource, m.content_type, m.reference_type, m.reference_active_date_time, m.reference_data, m.observed_data, m.notes, \n" + " m.observed_date_time, m.report_date_time, m.ignore_status, m.issue_ids \n" + " FROM ${schema}.spotcheck_mismatch m \n" + " WHERE m.reference_active_date_time BETWEEN :fromDate AND :toDate \n" + " AND m.datasource = :datasource \n" + " AND m.content_type IN (:contentTypes) \n" + " ORDER BY m.key, m.type, m.reference_active_date_time desc \n" + " ) open_mismatches \n" + "WHERE status IN (:statuses)\n" + "AND ignore_status IN (:ignoreStatuses)" ), INSERT_MISMATCH( "INSERT INTO ${schema}.spotcheck_mismatch\n" + "(key, type, report_id, datasource, content_type, reference_type,\n" + "status, reference_data, observed_data, notes, issue_ids, ignore_status,\n" + "report_date_time, observed_date_time, reference_active_date_time)\n" + "VALUES\n" + "(:key::hstore, :mismatchType, :reportId, :datasource, :contentType, :referenceType, \n" + ":mismatchStatus, :referenceData, :observedData, :notes, :issueIds::text[], :ignoreLevel, \n" + ":reportDateTime, :observedDateTime, :referenceActiveDateTime)\n" ), MISMATCH_SUMMARY( "SELECT content_type, status, count(*) FROM\n"+ " (SELECT content_type, status, ignore_status FROM\n"+ " (SELECT DISTINCT ON (m.key, m.type, m.datasource) m.content_type, m.status, m.reference_active_date_time, m.ignore_status\n"+ " FROM ${schema}.spotcheck_mismatch m\n"+ " WHERE m.reference_active_date_time BETWEEN :fromDate AND :toDate\n"+ " AND m.datasource = :datasource\n"+ " ORDER BY m.key, m.type, m.datasource, m.reference_active_date_time desc\n"+ " ) most_recent_mismatches\n"+ " WHERE (status != 'RESOLVED'\n"+ " OR reference_active_date_time > :startOfToDate)\n"+ " AND ignore_status = 'NOT_IGNORED'\n"+ " ) summary\n"+ "GROUP BY content_type, status\n" ), UPDATE_MISMATCH_IGNORE( "UPDATE ${schema}.spotcheck_mismatch\n" + "SET ignore_status = :ignoreStatus\n" + "WHERE mismatch_id = :mismatchId\n" ), UPDATE_ISSUE_ID( "UPDATE ${schema}.spotcheck_mismatch\n" + "SET issue_ids = string_to_array(:issueId::text, ',')\n" + "WHERE mismatch_id = :mismatchId\n" ), ADD_ISSUE_ID( "UPDATE ${schema}.spotcheck_mismatch\n" + "SET issue_ids = array_append(issue_ids, :issueId::text)\n" + "WHERE mismatch_id = :mismatchId\n" ), DELETE_ISSUE_ID( "UPDATE ${schema}.spotcheck_mismatch\n" + "SET issue_ids = array_remove(issue_ids, :issueId::text)\n" + "WHERE mismatch_id = :mismatchId\n" ), DELETE_ALL_ISSUE_ID( "UPDATE ${schema}.spotcheck_mismatch\n" + "SET issue_ids = ARRAY[]::text[]\n" + "WHERE mismatch_id = :mismatchId\n" ) ; ; private String sql; SqlSpotCheckReportQuery(String sql) { this.sql = sql; } @Override public String getSql() { return this.sql; } }