------------------------------------------------------------------------------; ---- ---- queries.sql: manually maintained queries. ---- ---- This program is free software; you can redistribute it and/or ---- modify it under the terms of the GNU General Public License ---- as published by the Free Software Foundation; either version 2 ---- of the License, or (at your option) any later version. ---- ---- This program is distributed in the hope that it will be useful, ---- but WITHOUT ANY WARRANTY; without even the implied warranty of ---- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ---- GNU General Public License for more details. ---- ---- You should have received a copy of the GNU General Public License ---- along with this program; if not, write to the Free Software ---- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, ---- USA. ---- ---- Copyright (C) 2016 Simon Brooke for Radical Independence Campaign ---- ------------------------------------------------------------------------------; -- This file gets slurped in and converted into simple functions by the line -- in youyesyet.db.core.clj: -- (conman/bind-connection *db* "sql/queries-auto.sql" "sql/queries.sql") -- the functions then appeare in the youyesyet.db.core namespace. -- Note that queries generated by ADL are in the file -- resources/sql/queries-auto.sql; they do not have to be (and should not be) -- redefined here. -- :name list-addresses-by-locality :? :* -- :doc lists all existing address records in a given locality SELECT * FROM addresses WHERE locality = :locality -- :name list-open-requests :? :* -- :doc lists all existing followuprequest records which have not been closed and which the :expert has expertise to answer. SELECT DISTINCT request.*, electors.name ||', '|| electors.gender AS elector_id_expanded, addresses.address ||', '|| addresses.postcode ||', '|| visits.date AS visit_id_expanded, request.issue_id as issue_id_expanded, request.method_id AS method_id_expanded, visits.date AS raised FROM followuprequests as request, ln_experts_issues_canvassers as expertise, canvassers as experts, electors, addresses, visits where not exists (select * from followupactions as action where action.request_id = request.id and action.closed = true) and request.locked_by is null and request.elector_id = electors.id and request.visit_id = visits.id and visits.address_id = addresses.id and request.issue_id = expertise.issue_id and expertise.canvasser_id = :expert ORDER BY raised --:name get-last-visit-by-canvasser :? :1 --:doc returns the most recent visit record of the canvasser with the specified `:id` SELECT * FROM visits WHERE canvasser_id = :id ORDER BY date desc LIMIT 1 --:name get-locality-for-visit :? :1 --:doc returns the locality of the address of this visit SELECT addresses.locality FROM addresses, visits WHERE visits.address_id = addresses.id AND visits.id = :id -- I don't know why this next one isn't autogenerating, but it isn't and it's critical. -- :name list-roles-by-canvasser :? :* -- :doc links all existing canvasser records related to a given role SELECT DISTINCT roles.* FROM roles, ln_canvassers_roles WHERE roles.id = ln_canvassers_roles.role_id AND ln_canvassers_roles.canvasser_id = :id ORDER BY roles.name, roles.id -- :name list-elector-intentions :? :* -- :doc short form of `list-intentions-by-elector`, returning far less data, for use in `youyesyet.routes.rest/get-local-data`, q.v. -- TODO: should be limited to visits in the past 24 hours, to prevent the app being -- used to harrass NO voters. See https://github.com/simon-brooke/youyesyet/issues/58 SELECT intentions.id, intentions.option_id, visits.date FROM intentions, visits WHERE intentions.visit_id = visits.id AND intentions.elector_id = :id ORDER BY visits.date DESC