|
| 1 | +CREATE OR REPLACE FUNCTION get_summary_stats_p4(document_id UUID) |
| 2 | +RETURNS TABLE ( |
| 3 | + zone TEXT, |
| 4 | + hispanic_vap BIGINT, |
| 5 | + non_hispanic_asian_vap BIGINT, |
| 6 | + non_hispanic_amin_vap BIGINT, |
| 7 | + non_hispanic_nhpi_vap BIGINT, |
| 8 | + non_hispanic_black_vap BIGINT, |
| 9 | + non_hispanic_white_vap BIGINT, |
| 10 | + non_hispanic_other_vap BIGINT |
| 11 | +) AS $$ |
| 12 | +DECLARE |
| 13 | + doc_districtrmap RECORD; |
| 14 | + sql_query TEXT; |
| 15 | +BEGIN |
| 16 | + SELECT districtrmap.* INTO doc_districtrmap |
| 17 | + FROM document.document |
| 18 | + LEFT JOIN districtrmap |
| 19 | + ON document.gerrydb_table = districtrmap.gerrydb_table_name |
| 20 | + WHERE document.document_id = $1; |
| 21 | + |
| 22 | + IF doc_districtrmap.gerrydb_table_name IS NULL THEN |
| 23 | + RAISE EXCEPTION 'Table name not found for document_id: %', $1; |
| 24 | + END IF; |
| 25 | + |
| 26 | + sql_query := format(' |
| 27 | + SELECT |
| 28 | + assignments.zone::TEXT AS zone, |
| 29 | + SUM(COALESCE(blocks.hispanic_vap, 0))::BIGINT AS hispanic_vap, |
| 30 | + SUM(COALESCE(blocks.non_hispanic_asian_vap, 0))::BIGINT AS non_hispanic_asian_vap, |
| 31 | + SUM(COALESCE(blocks.non_hispanic_amin_vap, 0))::BIGINT AS non_hispanic_amin_vap, |
| 32 | + SUM(COALESCE(blocks.non_hispanic_nhpi_vap, 0))::BIGINT AS non_hispanic_nhpi_vap, |
| 33 | + SUM(COALESCE(blocks.non_hispanic_black_vap, 0))::BIGINT AS non_hispanic_black_vap, |
| 34 | + SUM(COALESCE(blocks.non_hispanic_white_vap, 0))::BIGINT AS non_hispanic_white_vap, |
| 35 | + SUM(COALESCE(blocks.non_hispanic_other_vap, 0))::BIGINT AS non_hispanic_other_vap |
| 36 | + FROM document.assignments |
| 37 | + LEFT JOIN gerrydb.%I blocks |
| 38 | + ON blocks.path = assignments.geo_id |
| 39 | + WHERE assignments.document_id = $1 |
| 40 | + GROUP BY assignments.zone |
| 41 | + ', doc_districtrmap.gerrydb_table_name); |
| 42 | + RETURN QUERY EXECUTE sql_query USING $1; |
| 43 | +END; |
| 44 | +$$ LANGUAGE plpgsql; |
0 commit comments