package gov.nysenate.openleg.dao.bill.data;
import gov.nysenate.openleg.dao.base.BasicSqlQuery;
import gov.nysenate.openleg.dao.base.SqlTable;
public enum SqlBillUpdatesQuery implements BasicSqlQuery
{
SELECT_BILL_UPDATES_FRAGMENT(
"SELECT bill_print_no, bill_session_year,\n" +
" %s \n" + // Any additional columns are replaced here
"FROM ${schema}." + SqlTable.BILL_CHANGE_LOG + " log\n" +
"WHERE ${dateColumn} BETWEEN :startDateTime AND :endDateTime\n" +
"%s\n" + // Additional WHERE clause
"AND (${updateFieldFilter}) \n" + // Update field filter gets replaced based on method args
"%s"), // GROUP BY clause if necessary
SELECT_COLUMNS_FOR_DIGEST_FRAGMENT(
"sobi_fragment_id AS last_fragment_id, 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, hstore_to_array(data) AS data\n"
),
SELECT_BILL_UPDATE_TOKENS(
String.format(SELECT_BILL_UPDATES_FRAGMENT.sql,
// Select columns
"MAX(sobi_fragment_id) AS last_fragment_id, MAX(action_date_time) AS last_processed_date_time, \n" +
"MAX(published_date_time) AS last_published_date_time, COUNT(*) OVER () AS total_updated\n",
// No extra where clause
"",
// Group by bill ids for update tokens
"GROUP BY bill_print_no, bill_session_year")
),
SELECT_BILL_UPDATE_DIGESTS(
String.format(SELECT_BILL_UPDATES_FRAGMENT.sql,
// Select columns
SELECT_COLUMNS_FOR_DIGEST_FRAGMENT.sql,
// No extra where clause
"",
// No group by needed for digests due to pagination/performance issues
"")
),
SELECT_UPDATE_DIGESTS_FOR_SPECIFIC_BILL(
String.format(SELECT_BILL_UPDATES_FRAGMENT.sql,
// Select columns
SELECT_COLUMNS_FOR_DIGEST_FRAGMENT.sql,
// No extra where clause
"AND bill_print_no = :printNo AND bill_session_year = :session\n",
// No group by needed for digests due to pagination/performance issues
"")
);
private String sql;
SqlBillUpdatesQuery(String sql) {
this.sql = sql;
}
@Override
public String getSql() {
return sql;
}
}