-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
materialized view should actually use column data
fix get assignments endpoint
- Loading branch information
1 parent
b09e265
commit 64be91d
Showing
8 changed files
with
151 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
89 changes: 89 additions & 0 deletions
89
backend/app/alembic/versions/5c4028ff26df_update_pop_udf.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
"""update pop udf | ||
Revision ID: 5c4028ff26df | ||
Revises: ccb2a6b81a8b | ||
Create Date: 2024-10-07 20:30:15.230254 | ||
""" | ||
|
||
from typing import Sequence, Union | ||
|
||
from alembic import op | ||
import sqlalchemy as sa | ||
from app.constants import SQL_DIR | ||
|
||
|
||
# revision identifiers, used by Alembic. | ||
revision: str = "5c4028ff26df" | ||
down_revision: Union[str, None] = "ccb2a6b81a8b" | ||
branch_labels: Union[str, Sequence[str], None] = None | ||
depends_on: Union[str, Sequence[str], None] = None | ||
|
||
|
||
def upgrade() -> None: | ||
# ### commands auto generated by Alembic - please adjust! ### | ||
op.create_unique_constraint("districtr_map_uuid_unique", "districtrmap", ["uuid"]) | ||
op.create_unique_constraint( | ||
"districtr_map_parent_child_edge_unique", | ||
"parentchildedges", | ||
["districtr_map", "parent_path", "child_path"], | ||
) | ||
with open(f"{SQL_DIR}/total_pop_udf.sql") as f: | ||
query = f.read() | ||
op.execute(sa.text(query)) | ||
# ### end Alembic commands ### | ||
|
||
|
||
def downgrade() -> None: | ||
# ### commands auto generated by Alembic - please adjust! ### | ||
op.drop_constraint( | ||
"districtr_map_parent_child_edge_unique", "parentchildedges", type_="unique" | ||
) | ||
op.drop_constraint("districtr_map_uuid_unique", "districtrmap", type_="unique") | ||
op.execute( | ||
sa.text(""" | ||
CREATE OR REPLACE FUNCTION get_total_population(document_id UUID) | ||
RETURNS TABLE (zone TEXT, total_pop BIGINT) AS $$ | ||
DECLARE | ||
gerrydb_table_name TEXT; | ||
sql_query TEXT; | ||
total_pop_column_name TEXT; | ||
BEGIN | ||
SELECT districtrmap.parent_layer INTO gerrydb_table_name | ||
FROM document.document | ||
LEFT JOIN districtrmap | ||
ON document.gerrydb_table = districtrmap.gerrydb_table_name | ||
WHERE document.document_id = $1; | ||
IF gerrydb_table_name IS NULL THEN | ||
RAISE EXCEPTION 'Table name not found for document_id: %', $1; | ||
END IF; | ||
SELECT column_name INTO total_pop_column_name | ||
FROM INFORMATION_SCHEMA.COLUMNS | ||
WHERE table_name = gerrydb_table_name | ||
AND table_schema = 'gerrydb' | ||
AND column_name IN ('total_pop', 'total_vap') | ||
ORDER BY column_name ASC | ||
LIMIT 1; | ||
IF total_pop_column_name IS NULL THEN | ||
RAISE EXCEPTION 'Population column not found for gerrydbview %', gerrydb_table_name; | ||
END IF; | ||
sql_query := format(' | ||
SELECT | ||
assignments.zone::TEXT AS zone, | ||
SUM(COALESCE(blocks.%I, 0))::BIGINT AS total_pop | ||
FROM document.assignments | ||
LEFT JOIN gerrydb.%I blocks | ||
ON blocks.path = assignments.geo_id | ||
WHERE assignments.document_id = $1 | ||
GROUP BY assignments.zone | ||
', total_pop_column_name, gerrydb_table_name); | ||
RETURN QUERY EXECUTE sql_query USING $1; | ||
END; | ||
$$ LANGUAGE plpgsql; | ||
""") | ||
) | ||
# ### end Alembic commands ### |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters