package gov.nysenate.openleg.dao.entity.member.data;
import gov.nysenate.openleg.dao.base.BasicSqlQuery;
import gov.nysenate.openleg.dao.base.SqlTable;
public enum SqlMemberQuery implements BasicSqlQuery
{
/** --- Member --- */
SELECT_MEMBER_SELECT_FRAGMENT(
"SELECT sm.id AS session_member_id, sm.member_id, sm.lbdc_short_name, sm.session_year, sm.district_code, sm.alternate,\n" +
" m.chamber, m.incumbent, p.id AS person_id, p.prefix, p.full_name, p.first_name, p.middle_name, p.last_name, p.suffix, " +
" p.img_name, p.verified"
),
SELECT_MEMBER_TABLE_FRAGMENT(
"FROM " + SqlTable.SESSION_MEMBER + " sm\n" +
"JOIN " + SqlTable.MEMBER + " m ON m.id = sm.member_id\n" +
"JOIN " + SqlTable.PERSON + " p ON p.id = m.person_id\n"
),
SELECT_MEMBER_FRAGMENT(
SELECT_MEMBER_SELECT_FRAGMENT.sql + "\n" + SELECT_MEMBER_TABLE_FRAGMENT.sql
),
SELECT_MEMBER_BY_ID_SQL(
SELECT_MEMBER_FRAGMENT.sql + " WHERE sm.member_id = :memberId"
),
SELECT_MEMBER_BY_ID_SESSION_SQL(
SELECT_MEMBER_BY_ID_SQL.sql + " AND sm.session_year = :sessionYear AND sm.alternate = FALSE"
),
SELECT_MEMBER_BY_SESSION_MEMBER_ID_SQL(
"SELECT smp.id AS session_member_id, smp.lbdc_short_name, sm.id, sm.member_id, sm.session_year, sm.district_code, sm.alternate,\n" +
" m.chamber, m.incumbent, p.id AS person_id, p.full_name, p.prefix, p.first_name, p.middle_name, p.last_name, p.suffix, p.img_name, p.verified" + "\n" +
SELECT_MEMBER_TABLE_FRAGMENT.sql +
"JOIN " + SqlTable.SESSION_MEMBER + " smp ON smp.member_id = sm.member_id AND smp.session_year = sm.session_year AND smp.alternate = FALSE\n" +
"WHERE sm.id = :sessionMemberId"
),
SELECT_MEMBER_BY_SHORTNAME_SQL(
SELECT_MEMBER_FRAGMENT.sql + "\n" +
// We use the first 15 letters to compare due to how some of the source data is formatted.
"WHERE substr(sm.lbdc_short_name, 1, 15) ILIKE substr(:shortName, 1, 15) AND m.chamber = :chamber::chamber " +
" AND sm.alternate = :alternate "
),
SELECT_MEMBER_BY_SHORTNAME_SESSION_SQL(
SELECT_MEMBER_BY_SHORTNAME_SQL.sql + " AND sm.session_year = :sessionYear"
),
/** --- Member verification queries --- */
SELECT_UNVERIFIED_MEMBERS_SQL(
SELECT_MEMBER_FRAGMENT.sql +
"WHERE p.verified = FALSE"
),
UPDATE_PERSON_SQL(
"UPDATE " + SqlTable.PERSON + "\n" +
"SET full_name = :fullName, first_name = :firstName, middle_name = :middleName, last_name = :lastName,\n" +
" email = :email, prefix = :prefix, suffix = :suffix, verified = :verified, img_name = :img_name\n" +
"WHERE id = :personId"
),
INSERT_PERSON_SQL(
"INSERT INTO " + SqlTable.PERSON + "\n" +
"( full_name, first_name, middle_name, last_name, email, prefix, suffix, verified)\n" +
"VALUES (:fullName, :firstName, :middleName, :lastName, :email, :prefix, :suffix, :verified)\n" +
"RETURNING id"
),
UPDATE_MEMBER_SQL(
"UPDATE " + SqlTable.MEMBER + "\n" +
"SET person_id = :personId, chamber = :chamber::chamber, incumbent = :incumbent, full_name = :fullName\n" +
"WHERE id = :memberId"
),
INSERT_MEMBER_SQL(
"INSERT INTO " + SqlTable.MEMBER + "\n" +
"( person_id, chamber, incumbent, full_name)\n" +
"VALUES (:personId, CAST(:chamber AS chamber), :incumbent, :fullName)\n" +
"RETURNING id"
),
UPDATE_SESSION_MEMBER_SQL(
"UPDATE " + SqlTable.SESSION_MEMBER + "\n" +
"SET member_id = :memberId, lbdc_short_name = :lbdcShortName, session_year = :sessionYear,\n" +
" district_code = :districtCode, alternate = :alternate\n" +
"WHERE id = :sessionMemberId"
),
INSERT_SESSION_MEMBER_SQL(
"INSERT INTO " + SqlTable.SESSION_MEMBER + "\n" +
"( member_id, lbdc_short_name, session_year, district_code, alternate)\n" +
"VALUES (:memberId, :lbdcShortName, :sessionYear, :districtCode, :alternate)\n" +
"RETURNING id"
),
LINK_MEMBER_SQL(
"UPDATE " + SqlTable.MEMBER + "\n" +
"SET person_id = :personId\n" +
"WHERE id = :memberId"
),
LINK_SESSION_MEMBER_SQL(
"UPDATE " + SqlTable.SESSION_MEMBER + "\n" +
"SET member_id = :memberId\n" +
"WHERE id = :sessionMemberId"
),
DELETE_ORPHAN_MEMBERS_SQL(
"DELETE FROM " + SqlTable.MEMBER + " m\n" +
"USING (\n" +
" SELECT m.id\n" +
" FROM " + SqlTable.MEMBER + " m\n" +
" LEFT JOIN " + SqlTable.SESSION_MEMBER + " sm\n" +
" ON m.id = sm.member_id\n" +
" WHERE sm.id IS NULL\n" +
") AS orphan_member\n" +
"WHERE m.id = orphan_member.id"
),
DELETE_ORPHAN_PERSONS_SQL(
"DELETE FROM " + SqlTable.PERSON + " p\n" +
"USING (\n" +
" SELECT p.id\n" +
" FROM " + SqlTable.PERSON + " p\n" +
" LEFT JOIN " + SqlTable.MEMBER + " m\n" +
" ON p.id = m.person_id\n" +
" WHERE m.id IS NULL\n" +
") AS orphan_person\n" +
"WHERE p.id = orphan_person.id"
),
;
private String sql;
SqlMemberQuery(String sql) {
this.sql = sql;
}
@Override
public String getSql() {
return this.sql;
}
}