package gov.nysenate.openleg.dao.law.data;
import gov.nysenate.openleg.dao.base.BasicSqlQuery;
import gov.nysenate.openleg.dao.base.SqlTable;
public enum SqlLawUpdatesQuery implements BasicSqlQuery
{
SELECT_LAW_UPDATES_FRAGMENT(
"SELECT %s\n" +
"FROM ${schema}." + SqlTable.LAW_CHANGE_LOG + "\n" +
"WHERE ${dateColumn} BETWEEN :startDateTime AND :endDateTime\n" +
"AND table_name = '" + SqlTable.LAW_DOCUMENT + "'\n" +
"%s\n" + // Additional WHERE clause
"%s" // GROUP BY clause if necessary
),
SELECT_COLUMNS_FOR_TOKEN_FRAGMENT(
"MAX(action_date_time) AS last_processed_date_time, MAX(law_file_name) AS last_source_file,\n" +
"MAX(published_date_time) AS last_published_date_time, COUNT(*) OVER () AS total_updated"
),
SELECT_COLUMNS_FOR_DIGEST_FRAGMENT(
"law_file_name AS last_source_file, action_date_time AS last_processed_date_time, \n" +
"published_date_time AS last_published_date_time, COUNT(*) OVER () AS total_updated,\n" +
"table_name, action\n"
),
SELECT_LAW_UPDATE_TOKENS(
String.format(SELECT_LAW_UPDATES_FRAGMENT.sql,
"law_id, " + SELECT_COLUMNS_FOR_TOKEN_FRAGMENT.sql,
"",
"GROUP BY law_id")
),
SELECT_LAW_UPDATE_DIGESTS(
String.format(SELECT_LAW_UPDATES_FRAGMENT.sql,
"law_id, document_id, " + SELECT_COLUMNS_FOR_DIGEST_FRAGMENT.sql,
"",
"")
),
SELECT_LAW_UPDATE_DIGESTS_FOR_LAW(
String.format(SELECT_LAW_UPDATES_FRAGMENT.sql,
"law_id, document_id, " + SELECT_COLUMNS_FOR_DIGEST_FRAGMENT.sql,
"AND law_id = :lawId",
"")
),
SELECT_LAW_UPDATE_DIGESTS_FOR_DOCUMENT(
String.format(SELECT_LAW_UPDATES_FRAGMENT.sql,
"law_id, document_id, " + SELECT_COLUMNS_FOR_DIGEST_FRAGMENT.sql,
"AND document_id = :documentId",
"")
);
private String sql;
SqlLawUpdatesQuery(String sql) {
this.sql = sql;
}
@Override
public String getSql() {
return this.sql;
}
}