From 5bc9a9e5d20966e57053f6c2f3b40182a6484918 Mon Sep 17 00:00:00 2001
From: zetazzz
Date: Mon, 5 Jan 2026 19:44:29 +0700
Subject: [PATCH 1/4] delete the stage and test deploy with min exts
---
.../extensions/@pgpm/base32/.npmignore | 2 +
.../extensions/@pgpm/base32}/LICENSE | 0
.../extensions/@pgpm/base32/Makefile | 2 +-
.../extensions/@pgpm/base32/README.md | 10 +-
.../__snapshots__/base32.decode.test.ts.snap | 2 +-
.../__snapshots__/base32.encode.test.ts.snap | 2 +-
.../base32/__tests__/base32.decode.test.ts | 0
.../base32/__tests__/base32.encode.test.ts | 0
.../schemas/base32/procedures/decode.sql | 0
.../schemas/base32/procedures/encode.sql | 0
.../base32/deploy/schemas/base32/schema.sql | 0
.../extensions/@pgpm/base32/jest.config.js | 0
.../extensions/@pgpm/base32/package.json | 6 +-
.../@pgpm/base32/pgpm-base32.control | 2 +-
.../extensions/@pgpm/base32/pgpm.plan | 0
.../schemas/base32/procedures/decode.sql | 0
.../schemas/base32/procedures/encode.sql | 0
.../base32/revert/schemas/base32/schema.sql | 0
.../@pgpm/base32/sql/pgpm-base32--0.15.3.sql} | 0
.../schemas/base32/procedures/decode.sql | 0
.../schemas/base32/procedures/encode.sql | 0
.../base32/verify/schemas/base32/schema.sql | 0
.../extensions/@pgpm/defaults/.npmignore | 2 +
.../extensions/@pgpm/defaults}/LICENSE | 0
.../extensions/@pgpm/defaults/Makefile | 2 +-
.../extensions/@pgpm/defaults/README.md | 10 +-
.../__snapshots__/defaults.test.ts.snap | 2 +-
.../@pgpm/defaults/__tests__/defaults.test.ts | 0
.../@pgpm/defaults/deploy/defaults/public.sql | 0
.../extensions/@pgpm/defaults}/jest.config.js | 0
.../extensions/@pgpm/defaults/package.json | 6 +-
.../@pgpm/defaults/pgpm-defaults.control | 2 +-
.../extensions/@pgpm/defaults/pgpm.plan | 0
.../@pgpm/defaults/revert/defaults/public.sql | 0
.../defaults/sql/pgpm-defaults--0.15.3.sql} | 0
.../@pgpm/defaults/verify/defaults/public.sql | 0
.../extensions/@pgpm/types/.npmignore | 2 +
.../extensions/@pgpm/types}/LICENSE | 0
.../extensions/@pgpm/types/Makefile | 2 +-
.../extensions/@pgpm/types/README.md | 10 +-
.../types/__tests__/domains.pgutils.test.ts | 0
.../@pgpm/types/__tests__/domains.test.ts | 0
.../@pgpm/types/__tests__/ext-types.test.ts | 0
.../schemas/public/domains/attachment.sql | 0
.../deploy/schemas/public/domains/email.sql | 0
.../schemas/public/domains/hostname.sql | 0
.../deploy/schemas/public/domains/image.sql | 0
.../public/domains/multiple_select.sql | 0
.../deploy/schemas/public/domains/origin.sql | 0
.../schemas/public/domains/single_select.sql | 0
.../deploy/schemas/public/domains/upload.sql | 0
.../deploy/schemas/public/domains/url.sql | 0
.../types}/deploy/schemas/public/schema.sql | 0
.../extensions/@pgpm/types}/jest.config.js | 0
.../extensions/@pgpm/types/package.json | 6 +-
.../extensions/@pgpm/types/pgpm-types.control | 2 +-
.../extensions/@pgpm/types/pgpm.plan | 0
.../schemas/public/domains/attachment.sql | 0
.../revert/schemas/public/domains/email.sql | 0
.../schemas/public/domains/hostname.sql | 0
.../revert/schemas/public/domains/image.sql | 0
.../public/domains/multiple_select.sql | 0
.../revert/schemas/public/domains/origin.sql | 0
.../schemas/public/domains/single_select.sql | 0
.../revert/schemas/public/domains/upload.sql | 0
.../revert/schemas/public/domains/url.sql | 0
.../types}/revert/schemas/public/schema.sql | 0
.../@pgpm/types/sql/pgpm-types--0.15.3.sql} | 2 +-
.../schemas/public/domains/attachment.sql | 0
.../verify/schemas/public/domains/email.sql | 0
.../schemas/public/domains/hostname.sql | 0
.../verify/schemas/public/domains/image.sql | 0
.../public/domains/multiple_select.sql | 0
.../verify/schemas/public/domains/origin.sql | 0
.../schemas/public/domains/single_select.sql | 0
.../verify/schemas/public/domains/upload.sql | 0
.../verify/schemas/public/domains/url.sql | 0
.../types}/verify/schemas/public/schema.sql | 0
.../extensions/@pgpm/uuid/.npmignore | 2 +
.../extensions/@pgpm/uuid}/LICENSE | 0
.../extensions/@pgpm/uuid/Makefile | 2 +-
.../extensions/@pgpm/uuid/README.md | 10 +-
.../@pgpm/uuid/__tests__/uuid.test.ts | 0
.../@pgpm/uuid/deploy/extension/defaults.sql | 0
.../procedures/pseudo_order_seed_uuid.sql | 0
.../uuids/procedures/pseudo_order_uuid.sql | 0
.../trigger_set_uuid_related_field.sql | 0
.../procedures/trigger_set_uuid_seed.sql | 0
.../uuid/deploy/schemas/uuids/schema.sql | 0
.../extensions/@pgpm/uuid}/jest.config.js | 0
.../extensions/@pgpm/uuid/package.json | 6 +-
.../extensions/@pgpm/uuid/pgpm-uuid.control | 2 +-
.../extensions/@pgpm/uuid/pgpm.plan | 0
.../@pgpm/uuid}/revert/extension/defaults.sql | 0
.../procedures/pseudo_order_seed_uuid.sql | 0
.../uuids/procedures/pseudo_order_uuid.sql | 0
.../trigger_set_uuid_related_field.sql | 0
.../procedures/trigger_set_uuid_seed.sql | 0
.../uuid/revert/schemas/uuids/schema.sql | 0
.../@pgpm/uuid/sql/pgpm-uuid--0.15.3.sql} | 0
.../@pgpm/uuid}/verify/extension/defaults.sql | 0
.../procedures/pseudo_order_seed_uuid.sql | 0
.../uuids/procedures/pseudo_order_uuid.sql | 0
.../trigger_set_uuid_related_field.sql | 0
.../procedures/trigger_set_uuid_seed.sql | 0
.../uuid/verify/schemas/uuids/schema.sql | 0
.../extensions/@pgpm/verify/.npmignore | 2 +
.../extensions/@pgpm/verify}/LICENSE | 0
.../extensions/@pgpm/verify/Makefile | 2 +-
.../extensions/@pgpm/verify/README.md | 12 +-
.../@pgpm/verify/__tests__/ext-verify.test.ts | 0
.../deploy/procedures/get_entity_from_str.sql | 0
.../deploy/procedures/get_schema_from_str.sql | 0
.../verify/deploy/procedures/list_indexes.sql | 0
.../deploy/procedures/list_memberships.sql | 0
.../deploy/procedures/verify_constraint.sql | 0
.../deploy/procedures/verify_domain.sql | 0
.../deploy/procedures/verify_extension.sql | 0
.../deploy/procedures/verify_function.sql | 15 +-
.../verify/deploy/procedures/verify_index.sql | 0
.../deploy/procedures/verify_membership.sql | 0
.../deploy/procedures/verify_policy.sql | 0
.../verify/deploy/procedures/verify_role.sql | 0
.../deploy/procedures/verify_schema.sql | 0
.../deploy/procedures/verify_security.sql | 0
.../verify/deploy/procedures/verify_table.sql | 0
.../deploy/procedures/verify_table_grant.sql | 0
.../deploy/procedures/verify_trigger.sql | 0
.../verify/deploy/procedures/verify_type.sql | 0
.../verify/deploy/procedures/verify_view.sql | 0
.../extensions/@pgpm/verify}/jest.config.js | 0
.../extensions/@pgpm/verify/package.json | 4 +-
.../@pgpm/verify/pgpm-verify.control | 2 +-
.../extensions/@pgpm/verify/pgpm.plan | 0
.../revert/procedures/get_entity_from_str.sql | 0
.../revert/procedures/get_schema_from_str.sql | 0
.../verify/revert/procedures/list_indexes.sql | 0
.../revert/procedures/list_memberships.sql | 0
.../revert/procedures/verify_constraint.sql | 0
.../revert/procedures/verify_domain.sql | 0
.../revert/procedures/verify_extension.sql | 0
.../revert/procedures/verify_function.sql | 0
.../verify/revert/procedures/verify_index.sql | 0
.../revert/procedures/verify_membership.sql | 0
.../revert/procedures/verify_policy.sql | 0
.../verify/revert/procedures/verify_role.sql | 0
.../revert/procedures/verify_schema.sql | 0
.../revert/procedures/verify_security.sql | 0
.../verify/revert/procedures/verify_table.sql | 0
.../revert/procedures/verify_table_grant.sql | 0
.../revert/procedures/verify_trigger.sql | 0
.../verify/revert/procedures/verify_type.sql | 0
.../verify/revert/procedures/verify_view.sql | 0
.../@pgpm/verify/sql/pgpm-verify--0.15.3.sql} | 14 +
.../verify/procedures/get_entity_from_str.sql | 0
.../verify/procedures/get_schema_from_str.sql | 0
.../verify/verify/procedures/list_indexes.sql | 0
.../verify/procedures/list_memberships.sql | 0
.../verify/procedures/verify_constraint.sql | 0
.../verify/procedures/verify_domain.sql | 0
.../verify/procedures/verify_extension.sql | 0
.../verify/procedures/verify_function.sql | 0
.../verify/verify/procedures/verify_index.sql | 0
.../verify/procedures/verify_membership.sql | 0
.../verify/procedures/verify_policy.sql | 0
.../verify/verify/procedures/verify_role.sql | 0
.../verify/procedures/verify_schema.sql | 0
.../verify/procedures/verify_security.sql | 0
.../verify/verify/procedures/verify_table.sql | 0
.../verify/procedures/verify_table_grant.sql | 0
.../verify/procedures/verify_trigger.sql | 0
.../verify/verify/procedures/verify_type.sql | 0
.../verify/verify/procedures/verify_view.sql | 0
.../packages/unique-names/Makefile | 0
.../unique_names/procedures/generate_name.sql | 0
.../deploy/schemas/unique_names/schema.sql | 0
.../words/fixtures/1589271124916_fixture.sql | 0
.../tables/words/indexes/words_type_idx.sql | 0
.../unique_names/tables/words/table.sql | 0
.../packages/unique-names/package.json | 0
.../packages/unique-names/pgpm.plan | 0
.../unique_names/procedures/generate_name.sql | 0
.../revert/schemas/unique_names/schema.sql | 0
.../words/fixtures/1589271124916_fixture.sql | 0
.../tables/words/indexes/words_type_idx.sql | 0
.../unique_names/tables/words/table.sql | 0
.../unique-names/sql/unique-names--0.0.1.sql | 0
.../unique-names/unique-names.control | 0
.../unique_names/procedures/generate_name.sql | 0
.../verify/schemas/unique_names/schema.sql | 0
.../words/fixtures/1589271124916_fixture.sql | 0
.../tables/words/indexes/words_type_idx.sql | 0
.../unique_names/tables/words/table.sql | 0
.../{stage => sqitch/simple-w-exts}/pgpm.json | 4 +-
.../extensions/@pgpm/achievements/Makefile | 6 -
.../extensions/@pgpm/achievements/README.md | 290 -
.../__snapshots__/achievements.test.ts.snap | 180 -
.../__snapshots__/triggers.test.ts.snap | 112 -
.../__tests__/achievements.test.ts | 249 -
.../achievements/__tests__/triggers.test.ts | 166 -
.../procedures/status_triggers.sql | 148 -
.../procedures/upsert_achievement.sql | 24 -
.../procedures/user_completed_step.sql | 16 -
.../procedures/user_incompleted_step.sql | 22 -
.../deploy/schemas/status_private/schema.sql | 15 -
.../procedures/steps_required.sql | 59 -
.../procedures/user_achieved.sql | 29 -
.../deploy/schemas/status_public/schema.sql | 15 -
.../tables/level_requirements/table.sql | 21 -
.../status_public/tables/levels/table.sql | 15 -
.../policies/enable_row_level_security.sql | 11 -
.../policies/user_achievements_policy.sql | 38 -
.../tables/user_achievements/table.sql | 20 -
.../tables/user_levels/table.sql | 20 -
.../status_public/tables/user_steps/table.sql | 18 -
.../triggers/update_achievements_tg.sql | 25 -
.../@pgpm/achievements/jest.config.js | 16 -
.../@pgpm/achievements/package.json | 38 -
.../achievements/pgpm-achievements.control | 8 -
.../extensions/@pgpm/achievements/pgpm.plan | 20 -
.../procedures/status_triggers.sql | 10 -
.../procedures/upsert_achievement.sql | 7 -
.../procedures/user_completed_step.sql | 7 -
.../procedures/user_incompleted_step.sql | 7 -
.../revert/schemas/status_private/schema.sql | 7 -
.../procedures/steps_required.sql | 7 -
.../procedures/user_achieved.sql | 7 -
.../revert/schemas/status_public/schema.sql | 7 -
.../tables/level_requirements/table.sql | 7 -
.../status_public/tables/levels/table.sql | 7 -
.../policies/enable_row_level_security.sql | 8 -
.../policies/user_achievements_policy.sql | 18 -
.../tables/user_achievements/table.sql | 7 -
.../tables/user_levels/table.sql | 7 -
.../status_public/tables/user_steps/table.sql | 7 -
.../triggers/update_achievements_tg.sql | 8 -
.../sql/pgpm-achievements--0.14.0.sql | 264 -
.../procedures/status_triggers.sql | 10 -
.../procedures/upsert_achievement.sql | 7 -
.../procedures/user_completed_step.sql | 7 -
.../procedures/user_incompleted_step.sql | 7 -
.../verify/schemas/status_private/schema.sql | 7 -
.../procedures/steps_required.sql | 7 -
.../procedures/user_achieved.sql | 7 -
.../verify/schemas/status_public/schema.sql | 7 -
.../tables/level_requirements/table.sql | 7 -
.../status_public/tables/levels/table.sql | 7 -
.../policies/enable_row_level_security.sql | 7 -
.../policies/user_achievements_policy.sql | 15 -
.../tables/user_achievements/table.sql | 7 -
.../tables/user_levels/table.sql | 7 -
.../status_public/tables/user_steps/table.sql | 7 -
.../triggers/update_achievements_tg.sql | 8 -
.../extensions/@pgpm/database-jobs/Makefile | 6 -
.../extensions/@pgpm/database-jobs/README.md | 363 -
.../__tests__/__snapshots__/jobs.test.ts.snap | 19 -
.../database-jobs/__tests__/jobs.test.ts | 138 -
.../helpers/json_build_object_apply.sql | 28 -
.../schemas/app_jobs/procedures/add_job.sql | 103 -
.../app_jobs/procedures/add_scheduled_job.sql | 97 -
.../app_jobs/procedures/complete_job.sql | 32 -
.../app_jobs/procedures/complete_jobs.sql | 19 -
.../schemas/app_jobs/procedures/do_notify.sql | 16 -
.../schemas/app_jobs/procedures/fail_job.sql | 41 -
.../schemas/app_jobs/procedures/get_job.sql | 92 -
.../app_jobs/procedures/get_scheduled_job.sql | 61 -
.../procedures/permanently_fail_jobs.sql | 24 -
.../app_jobs/procedures/release_jobs.sql | 34 -
.../procedures/release_scheduled_jobs.sql | 26 -
.../app_jobs/procedures/reschedule_jobs.sql | 26 -
.../app_jobs/procedures/run_scheduled_job.sql | 78 -
.../deploy/schemas/app_jobs/schema.sql | 7 -
..._insert_update_delete_to_administrator.sql | 12 -
.../indexes/job_queues_locked_by_idx.sql | 8 -
.../app_jobs/tables/job_queues/table.sql | 12 -
..._insert_update_delete_to_administrator.sql | 12 -
.../jobs/indexes/jobs_locked_by_idx.sql | 8 -
.../jobs/indexes/priority_run_at_id_idx.sql | 8 -
.../schemas/app_jobs/tables/jobs/table.sql | 27 -
.../triggers/decrease_job_queue_count.sql | 45 -
.../triggers/increase_job_queue_count.sql | 32 -
.../tables/jobs/triggers/notify_worker.sql | 13 -
.../tables/jobs/triggers/timestamps.sql | 20 -
..._insert_update_delete_to_administrator.sql | 12 -
.../indexes/scheduled_jobs_locked_by_idx.sql | 8 -
.../scheduled_jobs_priority_id_idx.sql | 8 -
.../app_jobs/tables/scheduled_jobs/table.sql | 27 -
.../triggers/notify_scheduled_job.sql | 12 -
.../triggers/tg_add_job_with_fields.sql | 50 -
.../app_jobs/triggers/tg_add_job_with_row.sql | 26 -
.../triggers/tg_add_job_with_row_id.sql | 27 -
.../triggers/tg_update_timestamps.sql | 21 -
.../@pgpm/database-jobs/package.json | 37 -
.../database-jobs/pgpm-database-jobs.control | 8 -
.../extensions/@pgpm/database-jobs/pgpm.plan | 38 -
.../helpers/json_build_object_apply.sql | 7 -
.../schemas/app_jobs/procedures/add_job.sql | 7 -
.../app_jobs/procedures/add_scheduled_job.sql | 7 -
.../app_jobs/procedures/complete_job.sql | 7 -
.../app_jobs/procedures/complete_jobs.sql | 7 -
.../schemas/app_jobs/procedures/do_notify.sql | 7 -
.../schemas/app_jobs/procedures/fail_job.sql | 7 -
.../schemas/app_jobs/procedures/get_job.sql | 7 -
.../app_jobs/procedures/get_scheduled_job.sql | 7 -
.../procedures/permanently_fail_jobs.sql | 7 -
.../app_jobs/procedures/release_jobs.sql | 7 -
.../procedures/release_scheduled_jobs.sql | 7 -
.../app_jobs/procedures/reschedule_jobs.sql | 7 -
.../app_jobs/procedures/run_scheduled_job.sql | 7 -
.../revert/schemas/app_jobs/schema.sql | 7 -
..._insert_update_delete_to_administrator.sql | 7 -
.../indexes/job_queues_locked_by_idx.sql | 7 -
.../app_jobs/tables/job_queues/table.sql | 7 -
..._insert_update_delete_to_administrator.sql | 7 -
.../jobs/indexes/jobs_locked_by_idx.sql | 7 -
.../jobs/indexes/priority_run_at_id_idx.sql | 7 -
.../schemas/app_jobs/tables/jobs/table.sql | 7 -
.../triggers/decrease_job_queue_count.sql | 7 -
.../triggers/increase_job_queue_count.sql | 7 -
.../tables/jobs/triggers/notify_worker.sql | 5 -
.../tables/jobs/triggers/timestamps.sql | 9 -
..._insert_update_delete_to_administrator.sql | 7 -
.../indexes/scheduled_jobs_locked_by_idx.sql | 7 -
.../scheduled_jobs_priority_id_idx.sql | 7 -
.../app_jobs/tables/scheduled_jobs/table.sql | 7 -
.../triggers/notify_scheduled_job.sql | 8 -
.../triggers/tg_add_job_with_fields.sql | 7 -
.../app_jobs/triggers/tg_add_job_with_row.sql | 7 -
.../triggers/tg_add_job_with_row_id.sql | 5 -
.../triggers/tg_update_timestamps.sql | 7 -
.../sql/pgpm-database-jobs--0.14.0.sql | 769 --
.../helpers/json_build_object_apply.sql | 7 -
.../schemas/app_jobs/procedures/add_job.sql | 7 -
.../app_jobs/procedures/add_scheduled_job.sql | 7 -
.../app_jobs/procedures/complete_job.sql | 7 -
.../app_jobs/procedures/complete_jobs.sql | 7 -
.../schemas/app_jobs/procedures/do_notify.sql | 7 -
.../schemas/app_jobs/procedures/fail_job.sql | 7 -
.../schemas/app_jobs/procedures/get_job.sql | 7 -
.../app_jobs/procedures/get_scheduled_job.sql | 7 -
.../procedures/permanently_fail_jobs.sql | 7 -
.../app_jobs/procedures/release_jobs.sql | 7 -
.../procedures/release_scheduled_jobs.sql | 7 -
.../app_jobs/procedures/reschedule_jobs.sql | 7 -
.../app_jobs/procedures/run_scheduled_job.sql | 7 -
.../verify/schemas/app_jobs/schema.sql | 7 -
..._insert_update_delete_to_administrator.sql | 10 -
.../indexes/job_queues_locked_by_idx.sql | 7 -
.../app_jobs/tables/job_queues/table.sql | 7 -
..._insert_update_delete_to_administrator.sql | 10 -
.../jobs/indexes/jobs_locked_by_idx.sql | 7 -
.../jobs/indexes/priority_run_at_id_idx.sql | 7 -
.../schemas/app_jobs/tables/jobs/table.sql | 7 -
.../triggers/decrease_job_queue_count.sql | 10 -
.../triggers/increase_job_queue_count.sql | 10 -
.../tables/jobs/triggers/notify_worker.sql | 6 -
.../tables/jobs/triggers/timestamps.sql | 16 -
..._insert_update_delete_to_administrator.sql | 10 -
.../indexes/scheduled_jobs_locked_by_idx.sql | 7 -
.../scheduled_jobs_priority_id_idx.sql | 7 -
.../app_jobs/tables/scheduled_jobs/table.sql | 7 -
.../triggers/notify_scheduled_job.sql | 8 -
.../triggers/tg_add_job_with_fields.sql | 7 -
.../app_jobs/triggers/tg_add_job_with_row.sql | 7 -
.../triggers/tg_add_job_with_row_id.sql | 6 -
.../triggers/tg_update_timestamps.sql | 7 -
.../@pgpm/encrypted-secrets-table/Makefile | 6 -
.../@pgpm/encrypted-secrets-table/README.md | 308 -
.../__snapshots__/secrets-table.test.ts.snap | 38 -
.../__tests__/secrets-table.test.ts | 272 -
.../deploy/schemas/secrets_schema/schema.sql | 8 -
.../tables/secrets_table/table.sql | 16 -
.../secrets_table/triggers/hash_secrets.sql | 34 -
.../encrypted-secrets-table/package.json | 37 -
.../pgpm-encrypted-secrets-table.control | 8 -
.../@pgpm/encrypted-secrets-table/pgpm.plan | 7 -
.../revert/schemas/secrets_schema/schema.sql | 7 -
.../tables/secrets_table/table.sql | 7 -
.../secrets_table/triggers/hash_secrets.sql | 9 -
.../pgpm-encrypted-secrets-table--0.14.0.sql | 37 -
.../verify/schemas/secrets_schema/schema.sql | 7 -
.../tables/secrets_table/table.sql | 7 -
.../secrets_table/triggers/hash_secrets.sql | 9 -
.../@pgpm/encrypted-secrets/LICENSE | 22 -
.../@pgpm/encrypted-secrets/Makefile | 6 -
.../@pgpm/encrypted-secrets/README.md | 512 -
.../__snapshots__/secrets.test.ts.snap | 28 -
.../__tests__/secrets.test.ts | 193 -
.../encrypt_field_bytea_to_text.sql | 17 -
.../procedures/encrypt_field_crypt.sql | 17 -
.../procedures/encrypt_field_crypt_verify.sql | 37 -
.../procedures/encrypt_field_pgp.sql | 17 -
.../procedures/encrypt_field_pgp_get.sql | 18 -
.../procedures/encrypt_field_pgp_getter.sql | 42 -
.../procedures/encrypt_field_set.sql | 16 -
.../procedures/secrets_delete.sql | 40 -
.../procedures/secrets_getter.sql | 43 -
.../procedures/secrets_table_upsert.sql | 67 -
.../procedures/secrets_upsert.sql | 33 -
.../procedures/secrets_verify.sql | 46 -
.../schemas/encrypted_secrets/schema.sql | 8 -
.../@pgpm/encrypted-secrets/package.json | 38 -
.../pgpm-encrypted-secrets.control | 8 -
.../@pgpm/encrypted-secrets/pgpm.plan | 17 -
.../encrypt_field_bytea_to_text.sql | 7 -
.../procedures/encrypt_field_crypt.sql | 7 -
.../procedures/encrypt_field_crypt_verify.sql | 7 -
.../procedures/encrypt_field_pgp.sql | 7 -
.../procedures/encrypt_field_pgp_get.sql | 7 -
.../procedures/encrypt_field_pgp_getter.sql | 7 -
.../procedures/encrypt_field_set.sql | 7 -
.../procedures/secrets_delete.sql | 8 -
.../procedures/secrets_getter.sql | 7 -
.../procedures/secrets_table_upsert.sql | 7 -
.../procedures/secrets_upsert.sql | 7 -
.../procedures/secrets_verify.sql | 7 -
.../schemas/encrypted_secrets/schema.sql | 7 -
.../sql/pgpm-encrypted-secrets--0.14.0.sql | 231 -
.../encrypt_field_bytea_to_text.sql | 7 -
.../procedures/encrypt_field_crypt.sql | 7 -
.../procedures/encrypt_field_crypt_verify.sql | 7 -
.../procedures/encrypt_field_pgp.sql | 7 -
.../procedures/encrypt_field_pgp_get.sql | 7 -
.../procedures/encrypt_field_pgp_getter.sql | 7 -
.../procedures/encrypt_field_set.sql | 7 -
.../procedures/secrets_delete.sql | 7 -
.../procedures/secrets_getter.sql | 7 -
.../procedures/secrets_table_upsert.sql | 7 -
.../procedures/secrets_upsert.sql | 7 -
.../procedures/secrets_verify.sql | 7 -
.../schemas/encrypted_secrets/schema.sql | 7 -
.../stage/extensions/@pgpm/faker/LICENSE | 22 -
.../stage/extensions/@pgpm/faker/Makefile | 6 -
.../stage/extensions/@pgpm/faker/README.md | 535 -
.../@pgpm/faker/__tests__/faker.test.ts | 135 -
.../deploy/schemas/faker/procedures/utils.sql | 736 --
.../faker/deploy/schemas/faker/schema.sql | 8 -
.../cities/fixtures/1602987351008_fixture.sql | 3700 ------
.../schemas/faker/tables/cities/table.sql | 29 -
.../fixtures/1602969089665_fixture.sql | 6036 ---------
.../schemas/faker/tables/dictionary/table.sql | 17 -
.../extensions/@pgpm/faker/jest.config.js | 15 -
.../stage/extensions/@pgpm/faker/package.json | 38 -
.../extensions/@pgpm/faker/pgpm-faker.control | 8 -
.../stage/extensions/@pgpm/faker/pgpm.plan | 10 -
.../revert/schemas/faker/procedures/utils.sql | 51 -
.../faker/revert/schemas/faker/schema.sql | 7 -
.../cities/fixtures/1602987351008_fixture.sql | 5 -
.../schemas/faker/tables/cities/table.sql | 7 -
.../fixtures/1602969089665_fixture.sql | 5 -
.../schemas/faker/tables/dictionary/table.sql | 7 -
.../@pgpm/faker/sql/pgpm-faker--0.14.0.sql | 10404 ----------------
.../verify/schemas/faker/procedures/utils.sql | 47 -
.../faker/verify/schemas/faker/schema.sql | 7 -
.../cities/fixtures/1602987351008_fixture.sql | 5 -
.../schemas/faker/tables/cities/table.sql | 7 -
.../fixtures/1602969089665_fixture.sql | 5 -
.../schemas/faker/tables/dictionary/table.sql | 7 -
.../stage/extensions/@pgpm/geotypes/LICENSE | 22 -
.../stage/extensions/@pgpm/geotypes/Makefile | 6 -
.../stage/extensions/@pgpm/geotypes/README.md | 174 -
.../@pgpm/geotypes/__tests__/geotypes.test.ts | 55 -
.../schemas/public/domains/geolocation.sql | 10 -
.../schemas/public/domains/geopolygon.sql | 10 -
.../extensions/@pgpm/geotypes/jest.config.js | 15 -
.../extensions/@pgpm/geotypes/package.json | 38 -
.../@pgpm/geotypes/pgpm-geo-types.control | 8 -
.../stage/extensions/@pgpm/geotypes/pgpm.plan | 7 -
.../schemas/public/domains/geolocation.sql | 7 -
.../schemas/public/domains/geopolygon.sql | 7 -
.../geotypes/sql/pgpm-geo-types--0.14.0.sql | 8 -
.../schemas/public/domains/geolocation.sql | 7 -
.../schemas/public/domains/geopolygon.sql | 7 -
.../stage/extensions/@pgpm/inflection/LICENSE | 22 -
.../extensions/@pgpm/inflection/Makefile | 6 -
.../extensions/@pgpm/inflection/README.md | 409 -
.../inflection/__tests__/inflection.test.ts | 181 -
.../inflection/deploy/extension/defaults.sql | 8 -
.../schemas/inflection/procedures/camel.sql | 25 -
.../schemas/inflection/procedures/dashed.sql | 29 -
.../schemas/inflection/procedures/lower.sql | 13 -
.../procedures/no_consecutive_caps.sql | 53 -
.../procedures/no_single_underscores.sql | 70 -
.../schemas/inflection/procedures/pascal.sql | 20 -
.../inflection/procedures/pg_slugify.sql | 68 -
.../schemas/inflection/procedures/plural.sql | 31 -
.../procedures/should_skip_uncountable.sql | 17 -
.../inflection/procedures/singular.sql | 31 -
.../schemas/inflection/procedures/slugify.sql | 59 -
.../inflection/procedures/slugify_trigger.sql | 21 -
.../procedures/uncountable_words.sql | 14 -
.../inflection/procedures/underscore.sql | 59 -
.../schemas/inflection/procedures/upper.sql | 13 -
.../deploy/schemas/inflection/schema.sql | 15 -
.../fixtures/1589249334312_fixture.sql | 129 -
.../indexes/inflection_rules_type_idx.sql | 12 -
.../tables/inflection_rules/table.sql | 16 -
.../@pgpm/inflection/jest.config.js | 15 -
.../extensions/@pgpm/inflection/package.json | 37 -
.../@pgpm/inflection/pgpm-inflection.control | 8 -
.../extensions/@pgpm/inflection/pgpm.plan | 20 -
.../schemas/inflection/procedures/camel.sql | 7 -
.../schemas/inflection/procedures/dashed.sql | 7 -
.../schemas/inflection/procedures/lower.sql | 7 -
.../procedures/no_consecutive_caps.sql | 7 -
.../procedures/no_single_underscores.sql | 7 -
.../schemas/inflection/procedures/pascal.sql | 7 -
.../inflection/procedures/pg_slugify.sql | 8 -
.../schemas/inflection/procedures/plural.sql | 7 -
.../procedures/should_skip_uncountable.sql | 7 -
.../inflection/procedures/singular.sql | 7 -
.../schemas/inflection/procedures/slugify.sql | 8 -
.../inflection/procedures/slugify_trigger.sql | 7 -
.../procedures/uncountable_words.sql | 7 -
.../inflection/procedures/underscore.sql | 8 -
.../schemas/inflection/procedures/upper.sql | 7 -
.../revert/schemas/inflection/schema.sql | 7 -
.../fixtures/1589249334312_fixture.sql | 5 -
.../indexes/inflection_rules_type_idx.sql | 7 -
.../tables/inflection_rules/table.sql | 7 -
.../sql/pgpm-inflection--0.14.0.sql | 455 -
.../schemas/inflection/procedures/camel.sql | 7 -
.../schemas/inflection/procedures/dashed.sql | 7 -
.../schemas/inflection/procedures/lower.sql | 7 -
.../procedures/no_consecutive_caps.sql | 7 -
.../procedures/no_single_underscores.sql | 7 -
.../schemas/inflection/procedures/pascal.sql | 7 -
.../inflection/procedures/pg_slugify.sql | 7 -
.../schemas/inflection/procedures/plural.sql | 7 -
.../procedures/should_skip_uncountable.sql | 7 -
.../inflection/procedures/singular.sql | 7 -
.../schemas/inflection/procedures/slugify.sql | 7 -
.../inflection/procedures/slugify_trigger.sql | 7 -
.../procedures/uncountable_words.sql | 7 -
.../inflection/procedures/underscore.sql | 8 -
.../schemas/inflection/procedures/upper.sql | 7 -
.../verify/schemas/inflection/schema.sql | 7 -
.../fixtures/1589249334312_fixture.sql | 5 -
.../indexes/inflection_rules_type_idx.sql | 7 -
.../tables/inflection_rules/table.sql | 7 -
.../stage/extensions/@pgpm/jobs/LICENSE | 22 -
.../stage/extensions/@pgpm/jobs/Makefile | 6 -
.../stage/extensions/@pgpm/jobs/README.md | 316 -
.../__tests__/__snapshots__/jobs.test.ts.snap | 16 -
.../@pgpm/jobs/__tests__/jobs.test.ts | 139 -
.../helpers/json_build_object_apply.sql | 28 -
.../schemas/app_jobs/procedures/add_job.sql | 65 -
.../app_jobs/procedures/add_scheduled_job.sql | 66 -
.../app_jobs/procedures/complete_job.sql | 32 -
.../app_jobs/procedures/complete_jobs.sql | 19 -
.../schemas/app_jobs/procedures/do_notify.sql | 16 -
.../schemas/app_jobs/procedures/fail_job.sql | 41 -
.../schemas/app_jobs/procedures/get_job.sql | 77 -
.../app_jobs/procedures/get_scheduled_job.sql | 46 -
.../procedures/permanently_fail_jobs.sql | 24 -
.../app_jobs/procedures/release_jobs.sql | 34 -
.../procedures/release_scheduled_jobs.sql | 26 -
.../app_jobs/procedures/reschedule_jobs.sql | 26 -
.../app_jobs/procedures/run_scheduled_job.sql | 67 -
.../jobs/deploy/schemas/app_jobs/schema.sql | 7 -
..._insert_update_delete_to_administrator.sql | 12 -
.../indexes/job_queues_locked_by_idx.sql | 8 -
.../app_jobs/tables/job_queues/table.sql | 12 -
..._insert_update_delete_to_administrator.sql | 12 -
.../jobs/indexes/jobs_locked_by_idx.sql | 8 -
.../jobs/indexes/priority_run_at_id_idx.sql | 8 -
.../schemas/app_jobs/tables/jobs/table.sql | 26 -
.../triggers/decrease_job_queue_count.sql | 42 -
.../triggers/increase_job_queue_count.sql | 32 -
.../tables/jobs/triggers/notify_worker.sql | 13 -
.../tables/jobs/triggers/timestamps.sql | 20 -
..._insert_update_delete_to_administrator.sql | 12 -
.../indexes/scheduled_jobs_locked_by_idx.sql | 8 -
.../scheduled_jobs_priority_id_idx.sql | 8 -
.../app_jobs/tables/scheduled_jobs/table.sql | 26 -
.../triggers/notify_scheduled_job.sql | 12 -
.../triggers/tg_add_job_with_fields.sql | 50 -
.../app_jobs/triggers/tg_add_job_with_row.sql | 26 -
.../triggers/tg_add_job_with_row_id.sql | 26 -
.../triggers/tg_update_timestamps.sql | 21 -
.../extensions/@pgpm/jobs/jest.config.js | 15 -
.../stage/extensions/@pgpm/jobs/package.json | 37 -
.../extensions/@pgpm/jobs/pgpm-jobs.control | 8 -
.../stage/extensions/@pgpm/jobs/pgpm.plan | 38 -
.../helpers/json_build_object_apply.sql | 7 -
.../schemas/app_jobs/procedures/add_job.sql | 7 -
.../app_jobs/procedures/add_scheduled_job.sql | 7 -
.../app_jobs/procedures/complete_job.sql | 7 -
.../app_jobs/procedures/complete_jobs.sql | 7 -
.../schemas/app_jobs/procedures/do_notify.sql | 7 -
.../schemas/app_jobs/procedures/fail_job.sql | 7 -
.../schemas/app_jobs/procedures/get_job.sql | 7 -
.../app_jobs/procedures/get_scheduled_job.sql | 7 -
.../procedures/permanently_fail_jobs.sql | 7 -
.../app_jobs/procedures/release_jobs.sql | 7 -
.../procedures/release_scheduled_jobs.sql | 7 -
.../app_jobs/procedures/reschedule_jobs.sql | 7 -
.../app_jobs/procedures/run_scheduled_job.sql | 7 -
.../jobs/revert/schemas/app_jobs/schema.sql | 7 -
..._insert_update_delete_to_administrator.sql | 7 -
.../indexes/job_queues_locked_by_idx.sql | 7 -
.../app_jobs/tables/job_queues/table.sql | 7 -
..._insert_update_delete_to_administrator.sql | 7 -
.../jobs/indexes/jobs_locked_by_idx.sql | 7 -
.../jobs/indexes/priority_run_at_id_idx.sql | 7 -
.../schemas/app_jobs/tables/jobs/table.sql | 7 -
.../triggers/decrease_job_queue_count.sql | 7 -
.../triggers/increase_job_queue_count.sql | 7 -
.../tables/jobs/triggers/notify_worker.sql | 5 -
.../tables/jobs/triggers/timestamps.sql | 9 -
..._insert_update_delete_to_administrator.sql | 7 -
.../indexes/scheduled_jobs_locked_by_idx.sql | 7 -
.../scheduled_jobs_priority_id_idx.sql | 7 -
.../app_jobs/tables/scheduled_jobs/table.sql | 7 -
.../triggers/notify_scheduled_job.sql | 8 -
.../triggers/tg_add_job_with_fields.sql | 7 -
.../app_jobs/triggers/tg_add_job_with_row.sql | 7 -
.../triggers/tg_add_job_with_row_id.sql | 5 -
.../triggers/tg_update_timestamps.sql | 7 -
.../@pgpm/jobs/sql/pgpm-jobs--0.14.0.sql | 658 -
.../helpers/json_build_object_apply.sql | 7 -
.../schemas/app_jobs/procedures/add_job.sql | 7 -
.../app_jobs/procedures/add_scheduled_job.sql | 7 -
.../app_jobs/procedures/complete_job.sql | 7 -
.../app_jobs/procedures/complete_jobs.sql | 7 -
.../schemas/app_jobs/procedures/do_notify.sql | 7 -
.../schemas/app_jobs/procedures/fail_job.sql | 7 -
.../schemas/app_jobs/procedures/get_job.sql | 7 -
.../app_jobs/procedures/get_scheduled_job.sql | 7 -
.../procedures/permanently_fail_jobs.sql | 7 -
.../app_jobs/procedures/release_jobs.sql | 7 -
.../procedures/release_scheduled_jobs.sql | 7 -
.../app_jobs/procedures/reschedule_jobs.sql | 7 -
.../app_jobs/procedures/run_scheduled_job.sql | 7 -
.../jobs/verify/schemas/app_jobs/schema.sql | 7 -
..._insert_update_delete_to_administrator.sql | 10 -
.../indexes/job_queues_locked_by_idx.sql | 7 -
.../app_jobs/tables/job_queues/table.sql | 7 -
..._insert_update_delete_to_administrator.sql | 10 -
.../jobs/indexes/jobs_locked_by_idx.sql | 7 -
.../jobs/indexes/priority_run_at_id_idx.sql | 7 -
.../schemas/app_jobs/tables/jobs/table.sql | 7 -
.../triggers/decrease_job_queue_count.sql | 10 -
.../triggers/increase_job_queue_count.sql | 10 -
.../tables/jobs/triggers/notify_worker.sql | 6 -
.../tables/jobs/triggers/timestamps.sql | 16 -
..._insert_update_delete_to_administrator.sql | 10 -
.../indexes/scheduled_jobs_locked_by_idx.sql | 7 -
.../scheduled_jobs_priority_id_idx.sql | 7 -
.../app_jobs/tables/scheduled_jobs/table.sql | 7 -
.../triggers/notify_scheduled_job.sql | 8 -
.../triggers/tg_add_job_with_fields.sql | 7 -
.../app_jobs/triggers/tg_add_job_with_row.sql | 7 -
.../triggers/tg_add_job_with_row_id.sql | 6 -
.../triggers/tg_update_timestamps.sql | 7 -
.../stage/extensions/@pgpm/jwt-claims/LICENSE | 22 -
.../extensions/@pgpm/jwt-claims/Makefile | 6 -
.../extensions/@pgpm/jwt-claims/README.md | 353 -
.../__tests__/__snapshots__/jwt.test.ts.snap | 35 -
.../@pgpm/jwt-claims/__tests__/jwt.test.ts | 65 -
.../schemas/ctx/procedures/ip_address.sql | 15 -
.../deploy/schemas/ctx/procedures/origin.sql | 15 -
.../ctx/procedures/security_definer.sql | 24 -
.../schemas/ctx/procedures/user_agent.sql | 15 -
.../deploy/schemas/ctx/procedures/user_id.sql | 15 -
.../jwt-claims/deploy/schemas/ctx/schema.sql | 16 -
.../procedures/current_database_id.sql | 30 -
.../procedures/current_token_id.sql | 15 -
.../deploy/schemas/jwt_private/schema.sql | 15 -
.../procedures/current_group_ids.sql | 30 -
.../procedures/current_ip_address.sql | 30 -
.../jwt_public/procedures/current_origin.sql | 15 -
.../procedures/current_user_agent.sql | 30 -
.../jwt_public/procedures/current_user_id.sql | 30 -
.../deploy/schemas/jwt_public/schema.sql | 15 -
.../@pgpm/jwt-claims/jest.config.js | 15 -
.../extensions/@pgpm/jwt-claims/package.json | 38 -
.../@pgpm/jwt-claims/pgpm-jwt-claims.control | 8 -
.../extensions/@pgpm/jwt-claims/pgpm.plan | 19 -
.../schemas/ctx/procedures/ip_address.sql | 8 -
.../revert/schemas/ctx/procedures/origin.sql | 8 -
.../ctx/procedures/security_definer.sql | 9 -
.../schemas/ctx/procedures/user_agent.sql | 8 -
.../revert/schemas/ctx/procedures/user_id.sql | 8 -
.../jwt-claims/revert/schemas/ctx/schema.sql | 8 -
.../procedures/current_database_id.sql | 7 -
.../procedures/current_token_id.sql | 8 -
.../revert/schemas/jwt_private/schema.sql | 7 -
.../procedures/current_group_ids.sql | 7 -
.../procedures/current_ip_address.sql | 7 -
.../jwt_public/procedures/current_origin.sql | 8 -
.../procedures/current_user_agent.sql | 7 -
.../jwt_public/procedures/current_user_id.sql | 7 -
.../revert/schemas/jwt_public/schema.sql | 7 -
.../sql/pgpm-jwt-claims--0.14.0.sql | 163 -
.../schemas/ctx/procedures/ip_address.sql | 8 -
.../verify/schemas/ctx/procedures/origin.sql | 8 -
.../ctx/procedures/security_definer.sql | 9 -
.../schemas/ctx/procedures/user_agent.sql | 8 -
.../verify/schemas/ctx/procedures/user_id.sql | 8 -
.../jwt-claims/verify/schemas/ctx/schema.sql | 8 -
.../procedures/current_database_id.sql | 7 -
.../procedures/current_token_id.sql | 8 -
.../verify/schemas/jwt_private/schema.sql | 7 -
.../procedures/current_group_ids.sql | 7 -
.../procedures/current_ip_address.sql | 7 -
.../jwt_public/procedures/current_origin.sql | 8 -
.../procedures/current_user_agent.sql | 7 -
.../jwt_public/procedures/current_user_id.sql | 7 -
.../verify/schemas/jwt_public/schema.sql | 7 -
.../extensions/@pgpm/measurements/LICENSE | 22 -
.../extensions/@pgpm/measurements/Makefile | 6 -
.../extensions/@pgpm/measurements/README.md | 204 -
.../__snapshots__/measurements.test.ts.snap | 309 -
.../__tests__/measurements.test.ts | 124 -
.../deploy/schemas/measurements/schema.sql | 8 -
.../fixtures/1601076414018_fixture.sql | 57 -
.../fixtures/1601081365273_fixture.sql | 21 -
.../measurements/tables/quantities/table.sql | 16 -
.../@pgpm/measurements/jest.config.js | 15 -
.../@pgpm/measurements/measurements.control | 8 -
.../@pgpm/measurements/package.json | 37 -
.../measurements/pgpm-measurements.control | 8 -
.../extensions/@pgpm/measurements/pgpm.plan | 8 -
.../revert/schemas/measurements/schema.sql | 7 -
.../fixtures/1601076414018_fixture.sql | 5 -
.../fixtures/1601081365273_fixture.sql | 5 -
.../measurements/tables/quantities/table.sql | 7 -
.../sql/pgpm-measurements--0.14.0.sql | 76 -
.../verify/schemas/measurements/schema.sql | 7 -
.../fixtures/1601076414018_fixture.sql | 5 -
.../fixtures/1601081365273_fixture.sql | 5 -
.../measurements/tables/quantities/table.sql | 7 -
.../@pgpm/metaschema-modules/LICENSE | 22 -
.../@pgpm/metaschema-modules/README.md | 239 -
.../__snapshots__/modules.test.ts.snap | 258 -
.../__tests__/modules.test.ts | 257 -
.../deploy/schemas/meta_private/schema.sql | 2 -
.../deploy/schemas/meta_public/schema.sql | 2 -
.../schemas/meta_public/tables/apis/table.sql | 3 -
.../connected_accounts_module/table.sql | 34 -
.../tables/crypto_addresses_module/table.sql | 35 -
.../tables/crypto_auth_module/table.sql | 41 -
.../tables/default_ids_module/table.sql | 19 -
.../tables/denormalized_table_field/table.sql | 41 -
.../tables/emails_module/table.sql | 34 -
.../tables/encrypted_secrets_module/table.sql | 29 -
.../meta_public/tables/field_module/table.sql | 37 -
.../tables/invites_module/table.sql | 51 -
.../tables/levels_module/table.sql | 71 -
.../tables/limits_module/table.sql | 63 -
.../tables/membership_types_module/table.sql | 30 -
.../tables/memberships_module/table.sql | 120 -
.../tables/permissions_module/table.sql | 65 -
.../tables/phone_numbers_module/table.sql | 34 -
.../meta_public/tables/rls_module/table.sql | 46 -
.../tables/secrets_module/table.sql | 28 -
.../meta_public/tables/sites/table.sql | 3 -
.../tables/tokens_module/table.sql | 35 -
.../tables/user_auth_module/table.sql | 68 -
.../meta_public/tables/users_module/table.sql | 38 -
.../meta_public/tables/uuid_module/table.sql | 23 -
.../@pgpm/metaschema-modules/jest.config.js | 15 -
.../@pgpm/metaschema-modules/package.json | 38 -
.../revert/schemas/meta_private/schema.sql | 1 -
.../revert/schemas/meta_public/schema.sql | 1 -
.../schemas/meta_public/tables/apis/table.sql | 1 -
.../connected_accounts_module/table.sql | 7 -
.../tables/crypto_addresses_module/table.sql | 7 -
.../tables/crypto_auth_module/table.sql | 7 -
.../tables/default_ids_module/table.sql | 7 -
.../tables/denormalized_table_field/table.sql | 7 -
.../tables/emails_module/table.sql | 7 -
.../tables/encrypted_secrets_module/table.sql | 7 -
.../meta_public/tables/field_module/table.sql | 7 -
.../tables/invites_module/table.sql | 7 -
.../tables/levels_module/table.sql | 7 -
.../tables/limits_module/table.sql | 7 -
.../tables/membership_types_module/table.sql | 7 -
.../tables/memberships_module/table.sql | 7 -
.../tables/permissions_module/table.sql | 7 -
.../tables/phone_numbers_module/table.sql | 7 -
.../meta_public/tables/rls_module/table.sql | 7 -
.../tables/secrets_module/table.sql | 7 -
.../meta_public/tables/sites/table.sql | 1 -
.../tables/tokens_module/table.sql | 7 -
.../tables/user_auth_module/table.sql | 7 -
.../meta_public/tables/users_module/table.sql | 7 -
.../meta_public/tables/uuid_module/table.sql | 7 -
.../verify/schemas/meta_private/schema.sql | 1 -
.../verify/schemas/meta_public/schema.sql | 1 -
.../schemas/meta_public/tables/apis/table.sql | 1 -
.../connected_accounts_module/table.sql | 7 -
.../tables/crypto_addresses_module/table.sql | 7 -
.../tables/crypto_auth_module/table.sql | 7 -
.../tables/default_ids_module/table.sql | 7 -
.../tables/denormalized_table_field/table.sql | 7 -
.../tables/emails_module/table.sql | 7 -
.../tables/encrypted_secrets_module/table.sql | 7 -
.../meta_public/tables/field_module/table.sql | 7 -
.../tables/invites_module/table.sql | 7 -
.../tables/levels_module/table.sql | 7 -
.../tables/limits_module/table.sql | 7 -
.../tables/membership_types_module/table.sql | 7 -
.../tables/memberships_module/table.sql | 7 -
.../tables/permissions_module/table.sql | 7 -
.../tables/phone_numbers_module/table.sql | 7 -
.../meta_public/tables/rls_module/table.sql | 7 -
.../tables/secrets_module/table.sql | 7 -
.../meta_public/tables/sites/table.sql | 1 -
.../tables/tokens_module/table.sql | 7 -
.../tables/user_auth_module/table.sql | 7 -
.../meta_public/tables/users_module/table.sql | 7 -
.../meta_public/tables/uuid_module/table.sql | 7 -
.../@pgpm/metaschema-schema/LICENSE | 22 -
.../@pgpm/metaschema-schema/README.md | 324 -
.../__tests__/__snapshots__/meta.test.ts.snap | 147 -
.../metaschema-schema/__tests__/meta.test.ts | 229 -
.../schemas/collections_private/schema.sql | 12 -
.../schemas/collections_public/schema.sql | 12 -
.../tables/check_constraint/table.sql | 33 -
.../databases_database_unique_name_idx.sql | 20 -
.../tables/database/table.sql | 30 -
.../tables/database_extension/table.sql | 23 -
.../tables/extension/table.sql | 28 -
.../databases_field_uniq_names_idx.sql | 13 -
.../collections_public/tables/field/table.sql | 72 -
.../tables/foreign_key_constraint/table.sql | 40 -
.../tables/full_text_search/table.sql | 31 -
.../collections_public/tables/index/table.sql | 39 -
.../tables/limit_function/table.sql | 34 -
.../tables/policy/table.sql | 41 -
.../tables/primary_key_constraint/table.sql | 30 -
.../tables/procedure/table.sql | 32 -
.../tables/rls_function/table.sql | 36 -
.../tables/schema/table.sql | 33 -
.../tables/schema_grant/table.sql | 27 -
.../databases_table_unique_name_idx.sql | 20 -
.../collections_public/tables/table/table.sql | 55 -
.../tables/table_grant/table.sql | 27 -
.../tables/trigger/table.sql | 32 -
.../tables/trigger_function/table.sql | 23 -
.../tables/unique_constraint/table.sql | 37 -
.../deploy/schemas/meta_private/schema.sql | 14 -
.../deploy/schemas/meta_public/schema.sql | 15 -
.../tables/api_extensions/table.sql | 36 -
.../meta_public/tables/api_modules/table.sql | 30 -
.../meta_public/tables/api_schemata/table.sql | 30 -
.../schemas/meta_public/tables/apis/table.sql | 26 -
.../schemas/meta_public/tables/apps/table.sql | 34 -
.../meta_public/tables/domains/table.sql | 41 -
.../tables/site_metadata/table.sql | 33 -
.../meta_public/tables/site_modules/table.sql | 28 -
.../meta_public/tables/site_themes/table.sql | 27 -
.../meta_public/tables/sites/table.sql | 30 -
.../@pgpm/metaschema-schema/jest.config.js | 15 -
.../@pgpm/metaschema-schema/package.json | 40 -
.../schemas/collections_private/schema.sql | 7 -
.../schemas/collections_public/schema.sql | 6 -
.../tables/check_constraint/table.sql | 7 -
.../databases_database_unique_name_idx.sql | 6 -
.../tables/database/table.sql | 6 -
.../tables/database_extension/table.sql | 7 -
.../tables/extension/table.sql | 7 -
.../databases_field_uniq_names_idx.sql | 7 -
.../collections_public/tables/field/table.sql | 8 -
.../tables/foreign_key_constraint/table.sql | 7 -
.../tables/full_text_search/table.sql | 7 -
.../collections_public/tables/index/table.sql | 7 -
.../tables/limit_function/table.sql | 7 -
.../tables/policy/table.sql | 7 -
.../tables/primary_key_constraint/table.sql | 7 -
.../tables/procedure/table.sql | 7 -
.../tables/rls_function/table.sql | 7 -
.../tables/schema/table.sql | 7 -
.../tables/schema_grant/table.sql | 7 -
.../databases_table_unique_name_idx.sql | 6 -
.../collections_public/tables/table/table.sql | 6 -
.../tables/table_grant/table.sql | 7 -
.../tables/trigger/table.sql | 7 -
.../tables/trigger_function/table.sql | 7 -
.../tables/unique_constraint/table.sql | 7 -
.../revert/schemas/meta_private/schema.sql | 7 -
.../revert/schemas/meta_public/schema.sql | 7 -
.../tables/api_extensions/table.sql | 7 -
.../meta_public/tables/api_modules/table.sql | 7 -
.../meta_public/tables/api_schemata/table.sql | 7 -
.../schemas/meta_public/tables/apis/table.sql | 7 -
.../schemas/meta_public/tables/apps/table.sql | 7 -
.../meta_public/tables/domains/table.sql | 7 -
.../tables/site_metadata/table.sql | 7 -
.../meta_public/tables/site_modules/table.sql | 7 -
.../meta_public/tables/site_themes/table.sql | 7 -
.../meta_public/tables/sites/table.sql | 7 -
.../schemas/collections_private/schema.sql | 7 -
.../schemas/collections_public/schema.sql | 6 -
.../tables/check_constraint/table.sql | 7 -
.../databases_database_unique_name_idx.sql | 6 -
.../tables/database/table.sql | 6 -
.../tables/database_extension/table.sql | 7 -
.../tables/extension/table.sql | 7 -
.../databases_field_uniq_names_idx.sql | 7 -
.../collections_public/tables/field/table.sql | 6 -
.../tables/foreign_key_constraint/table.sql | 7 -
.../tables/full_text_search/table.sql | 7 -
.../collections_public/tables/index/table.sql | 7 -
.../tables/limit_function/table.sql | 7 -
.../tables/policy/table.sql | 7 -
.../tables/primary_key_constraint/table.sql | 7 -
.../tables/procedure/table.sql | 7 -
.../tables/rls_function/table.sql | 7 -
.../tables/schema/table.sql | 7 -
.../tables/schema_grant/table.sql | 7 -
.../databases_table_unique_name_idx.sql | 6 -
.../collections_public/tables/table/table.sql | 6 -
.../tables/table_grant/table.sql | 7 -
.../tables/trigger/table.sql | 7 -
.../tables/trigger_function/table.sql | 7 -
.../tables/unique_constraint/table.sql | 7 -
.../verify/schemas/meta_private/schema.sql | 7 -
.../verify/schemas/meta_public/schema.sql | 7 -
.../tables/api_extensions/table.sql | 7 -
.../meta_public/tables/api_modules/table.sql | 7 -
.../meta_public/tables/api_schemata/table.sql | 7 -
.../schemas/meta_public/tables/apis/table.sql | 7 -
.../schemas/meta_public/tables/apps/table.sql | 7 -
.../meta_public/tables/domains/table.sql | 7 -
.../tables/site_metadata/table.sql | 7 -
.../meta_public/tables/site_modules/table.sql | 7 -
.../meta_public/tables/site_themes/table.sql | 7 -
.../meta_public/tables/sites/table.sql | 7 -
.../stage/extensions/@pgpm/stamps/LICENSE | 22 -
.../stage/extensions/@pgpm/stamps/Makefile | 6 -
.../stage/extensions/@pgpm/stamps/README.md | 218 -
.../@pgpm/stamps/__tests__/stamps.test.ts | 54 -
.../schemas/stamps/procedures/utils.sql | 35 -
.../stamps/deploy/schemas/stamps/schema.sql | 15 -
.../extensions/@pgpm/stamps/jest.config.js | 15 -
.../extensions/@pgpm/stamps/package.json | 38 -
.../@pgpm/stamps/pgpm-stamps.control | 8 -
.../stage/extensions/@pgpm/stamps/pgpm.plan | 6 -
.../schemas/stamps/procedures/utils.sql | 8 -
.../stamps/revert/schemas/stamps/schema.sql | 7 -
.../@pgpm/stamps/sql/pgpm-stamps--0.14.0.sql | 33 -
.../schemas/stamps/procedures/utils.sql | 8 -
.../stamps/verify/schemas/stamps/schema.sql | 7 -
.../stage/extensions/@pgpm/totp/LICENSE | 22 -
.../stage/extensions/@pgpm/totp/Makefile | 6 -
.../stage/extensions/@pgpm/totp/README.md | 272 -
.../__tests__/__snapshots__/algo.test.ts.snap | 25 -
.../@pgpm/totp/__tests__/algo.test.ts | 142 -
.../@pgpm/totp/__tests__/totp.test.ts | 26 -
.../schemas/totp/procedures/generate_totp.sql | 168 -
.../schemas/totp/procedures/random_base32.sql | 38 -
.../schemas/totp/procedures/urlencode.sql | 43 -
.../@pgpm/totp/deploy/schemas/totp/schema.sql | 8 -
.../extensions/@pgpm/totp/jest.config.js | 15 -
.../stage/extensions/@pgpm/totp/package.json | 38 -
.../extensions/@pgpm/totp/pgpm-totp.control | 8 -
.../stage/extensions/@pgpm/totp/pgpm.plan | 8 -
.../schemas/totp/procedures/generate_totp.sql | 14 -
.../schemas/totp/procedures/random_base32.sql | 8 -
.../schemas/totp/procedures/urlencode.sql | 7 -
.../@pgpm/totp/revert/schemas/totp/schema.sql | 7 -
.../@pgpm/totp/sql/pgpm-totp--0.14.0.sql | 173 -
.../schemas/totp/procedures/generate_totp.sql | 7 -
.../schemas/totp/procedures/random_base32.sql | 7 -
.../schemas/totp/procedures/urlencode.sql | 7 -
.../@pgpm/totp/verify/schemas/totp/schema.sql | 7 -
.../stage/extensions/@pgpm/types/LICENSE | 22 -
.../types/deploy/schemas/public/schema.sql | 2 -
.../extensions/@pgpm/types/jest.config.js | 15 -
.../types/revert/schemas/public/schema.sql | 1 -
.../types/verify/schemas/public/schema.sql | 1 -
.../stage/extensions/@pgpm/utils/LICENSE | 22 -
.../stage/extensions/@pgpm/utils/Makefile | 6 -
.../stage/extensions/@pgpm/utils/README.md | 412 -
.../__snapshots__/utils.test.ts.snap | 9 -
.../@pgpm/utils/__tests__/utils.test.ts | 46 -
.../utils/procedures/ensure_singleton.sql | 29 -
.../schemas/utils/procedures/mask_pad.sql | 33 -
.../deploy/schemas/utils/procedures/throw.sql | 26 -
.../utils/deploy/schemas/utils/schema.sql | 14 -
.../extensions/@pgpm/utils/jest.config.js | 15 -
.../stage/extensions/@pgpm/utils/package.json | 37 -
.../extensions/@pgpm/utils/pgpm-utils.control | 8 -
.../stage/extensions/@pgpm/utils/pgpm.plan | 8 -
.../utils/procedures/ensure_singleton.sql | 7 -
.../schemas/utils/procedures/mask_pad.sql | 7 -
.../revert/schemas/utils/procedures/throw.sql | 7 -
.../utils/revert/schemas/utils/schema.sql | 7 -
.../@pgpm/utils/sql/pgpm-utils--0.14.0.sql | 64 -
.../utils/procedures/ensure_singleton.sql | 7 -
.../schemas/utils/procedures/mask_pad.sql | 7 -
.../verify/schemas/utils/procedures/throw.sql | 7 -
.../utils/verify/schemas/utils/schema.sql | 7 -
.../stage/extensions/@pgpm/uuid/LICENSE | 22 -
.../extensions/@pgpm/uuid/jest.config.js | 15 -
.../@pgpm/uuid/revert/extension/defaults.sql | 5 -
.../@pgpm/uuid/verify/extension/defaults.sql | 5 -
.../stage/extensions/@pgpm/verify/LICENSE | 22 -
.../extensions/@pgpm/verify/jest.config.js | 15 -
.../cli-deploy-stage-unique-names.test.ts | 2 +-
.../core/stage-unique-names-control.test.ts | 2 +-
.../plan/stage-unique-names-plan.test.ts | 2 +-
.../stage-deployment-with-plan.test.ts | 8 +-
.../migration/stage-deployment.test.ts | 4 +-
.../projects/stage-workspace.test.ts | 4 +-
...ependency-resolution-internal-tags.test.ts | 2 +-
...ependency-resolution-resolved-tags.test.ts | 2 +-
1010 files changed, 107 insertions(+), 43837 deletions(-)
create mode 100644 __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/.npmignore
rename __fixtures__/{stage/extensions/@pgpm/achievements => sqitch/simple-w-exts/extensions/@pgpm/base32}/LICENSE (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/Makefile (74%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/README.md (94%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/__tests__/__snapshots__/base32.decode.test.ts.snap (90%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/__tests__/__snapshots__/base32.encode.test.ts.snap (84%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/__tests__/base32.decode.test.ts (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/__tests__/base32.encode.test.ts (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/deploy/schemas/base32/procedures/decode.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/deploy/schemas/base32/procedures/encode.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/deploy/schemas/base32/schema.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/jest.config.js (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/package.json (90%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/pgpm-base32.control (86%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/pgpm.plan (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/revert/schemas/base32/procedures/decode.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/revert/schemas/base32/procedures/encode.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/revert/schemas/base32/schema.sql (100%)
rename __fixtures__/{stage/extensions/@pgpm/base32/sql/pgpm-base32--0.14.0.sql => sqitch/simple-w-exts/extensions/@pgpm/base32/sql/pgpm-base32--0.15.3.sql} (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/verify/schemas/base32/procedures/decode.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/verify/schemas/base32/procedures/encode.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/base32/verify/schemas/base32/schema.sql (100%)
create mode 100644 __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/.npmignore
rename __fixtures__/{stage/extensions/@pgpm/base32 => sqitch/simple-w-exts/extensions/@pgpm/defaults}/LICENSE (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/defaults/Makefile (73%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/defaults/README.md (94%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/defaults/__tests__/__snapshots__/defaults.test.ts.snap (87%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/defaults/__tests__/defaults.test.ts (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/defaults/deploy/defaults/public.sql (100%)
rename __fixtures__/{stage/extensions/@pgpm/database-jobs => sqitch/simple-w-exts/extensions/@pgpm/defaults}/jest.config.js (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/defaults/package.json (90%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/defaults/pgpm-defaults.control (86%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/defaults/pgpm.plan (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/defaults/revert/defaults/public.sql (100%)
rename __fixtures__/{stage/extensions/@pgpm/defaults/sql/pgpm-defaults--0.14.0.sql => sqitch/simple-w-exts/extensions/@pgpm/defaults/sql/pgpm-defaults--0.15.3.sql} (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/defaults/verify/defaults/public.sql (100%)
create mode 100644 __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/.npmignore
rename __fixtures__/{stage/extensions/@pgpm/database-jobs => sqitch/simple-w-exts/extensions/@pgpm/types}/LICENSE (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/Makefile (74%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/README.md (94%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/__tests__/domains.pgutils.test.ts (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/__tests__/domains.test.ts (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/__tests__/ext-types.test.ts (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/deploy/schemas/public/domains/attachment.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/deploy/schemas/public/domains/email.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/deploy/schemas/public/domains/hostname.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/deploy/schemas/public/domains/image.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/deploy/schemas/public/domains/multiple_select.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/deploy/schemas/public/domains/origin.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/deploy/schemas/public/domains/single_select.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/deploy/schemas/public/domains/upload.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/deploy/schemas/public/domains/url.sql (100%)
rename __fixtures__/{stage/extensions/@pgpm/geotypes => sqitch/simple-w-exts/extensions/@pgpm/types}/deploy/schemas/public/schema.sql (100%)
rename __fixtures__/{stage/extensions/@pgpm/defaults => sqitch/simple-w-exts/extensions/@pgpm/types}/jest.config.js (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/package.json (90%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/pgpm-types.control (86%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/pgpm.plan (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/revert/schemas/public/domains/attachment.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/revert/schemas/public/domains/email.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/revert/schemas/public/domains/hostname.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/revert/schemas/public/domains/image.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/revert/schemas/public/domains/multiple_select.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/revert/schemas/public/domains/origin.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/revert/schemas/public/domains/single_select.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/revert/schemas/public/domains/upload.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/revert/schemas/public/domains/url.sql (100%)
rename __fixtures__/{stage/extensions/@pgpm/geotypes => sqitch/simple-w-exts/extensions/@pgpm/types}/revert/schemas/public/schema.sql (100%)
rename __fixtures__/{stage/extensions/@pgpm/types/sql/pgpm-types--0.14.0.sql => sqitch/simple-w-exts/extensions/@pgpm/types/sql/pgpm-types--0.15.3.sql} (95%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/verify/schemas/public/domains/attachment.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/verify/schemas/public/domains/email.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/verify/schemas/public/domains/hostname.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/verify/schemas/public/domains/image.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/verify/schemas/public/domains/multiple_select.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/verify/schemas/public/domains/origin.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/verify/schemas/public/domains/single_select.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/verify/schemas/public/domains/upload.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/types/verify/schemas/public/domains/url.sql (100%)
rename __fixtures__/{stage/extensions/@pgpm/geotypes => sqitch/simple-w-exts/extensions/@pgpm/types}/verify/schemas/public/schema.sql (100%)
create mode 100644 __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/.npmignore
rename __fixtures__/{stage/extensions/@pgpm/defaults => sqitch/simple-w-exts/extensions/@pgpm/uuid}/LICENSE (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/Makefile (74%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/README.md (94%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/__tests__/uuid.test.ts (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/deploy/extension/defaults.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/pseudo_order_seed_uuid.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/pseudo_order_uuid.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/trigger_set_uuid_related_field.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/trigger_set_uuid_seed.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/deploy/schemas/uuids/schema.sql (100%)
rename __fixtures__/{stage/extensions/@pgpm/encrypted-secrets-table => sqitch/simple-w-exts/extensions/@pgpm/uuid}/jest.config.js (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/package.json (90%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/pgpm-uuid.control (87%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/pgpm.plan (100%)
rename __fixtures__/{stage/extensions/@pgpm/inflection => sqitch/simple-w-exts/extensions/@pgpm/uuid}/revert/extension/defaults.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/pseudo_order_seed_uuid.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/pseudo_order_uuid.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/trigger_set_uuid_related_field.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/trigger_set_uuid_seed.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/revert/schemas/uuids/schema.sql (100%)
rename __fixtures__/{stage/extensions/@pgpm/uuid/sql/pgpm-uuid--0.14.0.sql => sqitch/simple-w-exts/extensions/@pgpm/uuid/sql/pgpm-uuid--0.15.3.sql} (100%)
rename __fixtures__/{stage/extensions/@pgpm/inflection => sqitch/simple-w-exts/extensions/@pgpm/uuid}/verify/extension/defaults.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/pseudo_order_seed_uuid.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/pseudo_order_uuid.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/trigger_set_uuid_related_field.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/trigger_set_uuid_seed.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/uuid/verify/schemas/uuids/schema.sql (100%)
create mode 100644 __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/.npmignore
rename __fixtures__/{stage/extensions/@pgpm/encrypted-secrets-table => sqitch/simple-w-exts/extensions/@pgpm/verify}/LICENSE (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/Makefile (74%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/README.md (96%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/__tests__/ext-verify.test.ts (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/get_entity_from_str.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/get_schema_from_str.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/list_indexes.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/list_memberships.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/verify_constraint.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/verify_domain.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/verify_extension.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/verify_function.sql (65%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/verify_index.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/verify_membership.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/verify_policy.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/verify_role.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/verify_schema.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/verify_security.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/verify_table.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/verify_table_grant.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/verify_trigger.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/verify_type.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/deploy/procedures/verify_view.sql (100%)
rename __fixtures__/{stage/extensions/@pgpm/encrypted-secrets => sqitch/simple-w-exts/extensions/@pgpm/verify}/jest.config.js (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/package.json (94%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/pgpm-verify.control (85%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/pgpm.plan (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/get_entity_from_str.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/get_schema_from_str.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/list_indexes.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/list_memberships.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/verify_constraint.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/verify_domain.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/verify_extension.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/verify_function.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/verify_index.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/verify_membership.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/verify_policy.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/verify_role.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/verify_schema.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/verify_security.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/verify_table.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/verify_table_grant.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/verify_trigger.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/verify_type.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/revert/procedures/verify_view.sql (100%)
rename __fixtures__/{stage/extensions/@pgpm/verify/sql/pgpm-verify--0.14.0.sql => sqitch/simple-w-exts/extensions/@pgpm/verify/sql/pgpm-verify--0.15.3.sql} (95%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/get_entity_from_str.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/get_schema_from_str.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/list_indexes.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/list_memberships.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/verify_constraint.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/verify_domain.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/verify_extension.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/verify_function.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/verify_index.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/verify_membership.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/verify_policy.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/verify_role.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/verify_schema.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/verify_security.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/verify_table.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/verify_table_grant.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/verify_trigger.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/verify_type.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/extensions/@pgpm/verify/verify/procedures/verify_view.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/Makefile (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/deploy/schemas/unique_names/procedures/generate_name.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/deploy/schemas/unique_names/schema.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/deploy/schemas/unique_names/tables/words/fixtures/1589271124916_fixture.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/deploy/schemas/unique_names/tables/words/indexes/words_type_idx.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/deploy/schemas/unique_names/tables/words/table.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/package.json (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/pgpm.plan (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/revert/schemas/unique_names/procedures/generate_name.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/revert/schemas/unique_names/schema.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/revert/schemas/unique_names/tables/words/fixtures/1589271124916_fixture.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/revert/schemas/unique_names/tables/words/indexes/words_type_idx.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/revert/schemas/unique_names/tables/words/table.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/sql/unique-names--0.0.1.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/unique-names.control (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/verify/schemas/unique_names/procedures/generate_name.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/verify/schemas/unique_names/schema.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/verify/schemas/unique_names/tables/words/fixtures/1589271124916_fixture.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/verify/schemas/unique_names/tables/words/indexes/words_type_idx.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/packages/unique-names/verify/schemas/unique_names/tables/words/table.sql (100%)
rename __fixtures__/{stage => sqitch/simple-w-exts}/pgpm.json (80%)
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/Makefile
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/README.md
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/__tests__/__snapshots__/achievements.test.ts.snap
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/__tests__/__snapshots__/triggers.test.ts.snap
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/__tests__/achievements.test.ts
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/__tests__/triggers.test.ts
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/procedures/status_triggers.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/procedures/upsert_achievement.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/procedures/user_completed_step.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/procedures/user_incompleted_step.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/procedures/steps_required.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/procedures/user_achieved.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/level_requirements/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/levels/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_achievements/policies/enable_row_level_security.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_achievements/policies/user_achievements_policy.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_achievements/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_levels/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_steps/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_steps/triggers/update_achievements_tg.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/jest.config.js
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/package.json
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/pgpm-achievements.control
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/pgpm.plan
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/procedures/status_triggers.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/procedures/upsert_achievement.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/procedures/user_completed_step.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/procedures/user_incompleted_step.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/procedures/steps_required.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/procedures/user_achieved.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/level_requirements/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/levels/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_achievements/policies/enable_row_level_security.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_achievements/policies/user_achievements_policy.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_achievements/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_levels/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_steps/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_steps/triggers/update_achievements_tg.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/sql/pgpm-achievements--0.14.0.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/procedures/status_triggers.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/procedures/upsert_achievement.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/procedures/user_completed_step.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/procedures/user_incompleted_step.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/procedures/steps_required.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/procedures/user_achieved.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/level_requirements/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/levels/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_achievements/policies/enable_row_level_security.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_achievements/policies/user_achievements_policy.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_achievements/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_levels/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_steps/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_steps/triggers/update_achievements_tg.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/Makefile
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/README.md
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/__tests__/__snapshots__/jobs.test.ts.snap
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/__tests__/jobs.test.ts
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/helpers/json_build_object_apply.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/add_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/add_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/complete_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/complete_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/do_notify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/fail_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/get_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/get_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/permanently_fail_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/release_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/release_scheduled_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/reschedule_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/run_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/job_queues/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_row.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/triggers/tg_update_timestamps.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/package.json
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/pgpm-database-jobs.control
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/pgpm.plan
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/helpers/json_build_object_apply.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/add_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/add_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/complete_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/complete_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/do_notify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/fail_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/get_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/get_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/permanently_fail_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/release_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/release_scheduled_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/reschedule_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/run_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/job_queues/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_row.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/triggers/tg_update_timestamps.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/sql/pgpm-database-jobs--0.14.0.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/helpers/json_build_object_apply.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/add_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/add_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/complete_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/complete_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/do_notify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/fail_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/get_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/get_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/permanently_fail_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/release_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/release_scheduled_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/reschedule_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/run_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/job_queues/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_row.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/triggers/tg_update_timestamps.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/Makefile
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/README.md
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/__tests__/__snapshots__/secrets-table.test.ts.snap
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/__tests__/secrets-table.test.ts
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/deploy/schemas/secrets_schema/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/deploy/schemas/secrets_schema/tables/secrets_table/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/deploy/schemas/secrets_schema/tables/secrets_table/triggers/hash_secrets.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/package.json
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/pgpm-encrypted-secrets-table.control
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/pgpm.plan
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/revert/schemas/secrets_schema/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/revert/schemas/secrets_schema/tables/secrets_table/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/revert/schemas/secrets_schema/tables/secrets_table/triggers/hash_secrets.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/sql/pgpm-encrypted-secrets-table--0.14.0.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/verify/schemas/secrets_schema/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/verify/schemas/secrets_schema/tables/secrets_table/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/verify/schemas/secrets_schema/tables/secrets_table/triggers/hash_secrets.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/LICENSE
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/Makefile
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/README.md
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/__tests__/__snapshots__/secrets.test.ts.snap
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/__tests__/secrets.test.ts
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_bytea_to_text.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_crypt.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_crypt_verify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_pgp.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_pgp_get.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_pgp_getter.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_set.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_delete.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_getter.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_table_upsert.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_upsert.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_verify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/package.json
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/pgpm-encrypted-secrets.control
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/pgpm.plan
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_bytea_to_text.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_crypt.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_crypt_verify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_pgp.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_pgp_get.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_pgp_getter.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_set.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_delete.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_getter.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_table_upsert.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_upsert.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_verify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/sql/pgpm-encrypted-secrets--0.14.0.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_bytea_to_text.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_crypt.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_crypt_verify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_pgp.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_pgp_get.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_pgp_getter.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_set.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_delete.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_getter.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_table_upsert.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_upsert.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_verify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/LICENSE
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/Makefile
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/README.md
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/__tests__/faker.test.ts
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/procedures/utils.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/tables/cities/fixtures/1602987351008_fixture.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/tables/cities/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/tables/dictionary/fixtures/1602969089665_fixture.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/tables/dictionary/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/jest.config.js
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/package.json
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/pgpm-faker.control
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/pgpm.plan
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/procedures/utils.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/tables/cities/fixtures/1602987351008_fixture.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/tables/cities/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/tables/dictionary/fixtures/1602969089665_fixture.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/tables/dictionary/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/sql/pgpm-faker--0.14.0.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/procedures/utils.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/tables/cities/fixtures/1602987351008_fixture.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/tables/cities/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/tables/dictionary/fixtures/1602969089665_fixture.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/tables/dictionary/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/geotypes/LICENSE
delete mode 100644 __fixtures__/stage/extensions/@pgpm/geotypes/Makefile
delete mode 100644 __fixtures__/stage/extensions/@pgpm/geotypes/README.md
delete mode 100644 __fixtures__/stage/extensions/@pgpm/geotypes/__tests__/geotypes.test.ts
delete mode 100644 __fixtures__/stage/extensions/@pgpm/geotypes/deploy/schemas/public/domains/geolocation.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/geotypes/deploy/schemas/public/domains/geopolygon.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/geotypes/jest.config.js
delete mode 100644 __fixtures__/stage/extensions/@pgpm/geotypes/package.json
delete mode 100644 __fixtures__/stage/extensions/@pgpm/geotypes/pgpm-geo-types.control
delete mode 100644 __fixtures__/stage/extensions/@pgpm/geotypes/pgpm.plan
delete mode 100644 __fixtures__/stage/extensions/@pgpm/geotypes/revert/schemas/public/domains/geolocation.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/geotypes/revert/schemas/public/domains/geopolygon.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/geotypes/sql/pgpm-geo-types--0.14.0.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/geotypes/verify/schemas/public/domains/geolocation.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/geotypes/verify/schemas/public/domains/geopolygon.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/LICENSE
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/Makefile
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/README.md
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/__tests__/inflection.test.ts
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/extension/defaults.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/camel.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/dashed.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/lower.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/no_consecutive_caps.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/no_single_underscores.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/pascal.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/pg_slugify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/plural.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/should_skip_uncountable.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/singular.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/slugify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/slugify_trigger.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/uncountable_words.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/underscore.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/upper.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/tables/inflection_rules/fixtures/1589249334312_fixture.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/tables/inflection_rules/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/jest.config.js
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/package.json
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/pgpm-inflection.control
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/pgpm.plan
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/camel.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/dashed.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/lower.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/no_consecutive_caps.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/no_single_underscores.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/pascal.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/pg_slugify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/plural.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/should_skip_uncountable.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/singular.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/slugify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/slugify_trigger.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/uncountable_words.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/underscore.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/upper.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/tables/inflection_rules/fixtures/1589249334312_fixture.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/tables/inflection_rules/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/sql/pgpm-inflection--0.14.0.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/camel.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/dashed.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/lower.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/no_consecutive_caps.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/no_single_underscores.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/pascal.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/pg_slugify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/plural.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/should_skip_uncountable.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/singular.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/slugify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/slugify_trigger.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/uncountable_words.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/underscore.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/upper.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/tables/inflection_rules/fixtures/1589249334312_fixture.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/tables/inflection_rules/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/LICENSE
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/Makefile
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/README.md
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/__tests__/__snapshots__/jobs.test.ts.snap
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/__tests__/jobs.test.ts
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/helpers/json_build_object_apply.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/add_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/add_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/complete_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/complete_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/do_notify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/fail_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/get_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/get_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/permanently_fail_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/release_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/release_scheduled_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/reschedule_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/run_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/job_queues/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_row.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/triggers/tg_update_timestamps.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/jest.config.js
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/package.json
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/pgpm-jobs.control
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/pgpm.plan
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/helpers/json_build_object_apply.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/add_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/add_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/complete_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/complete_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/do_notify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/fail_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/get_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/get_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/permanently_fail_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/release_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/release_scheduled_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/reschedule_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/run_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/job_queues/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_row.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/triggers/tg_update_timestamps.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/sql/pgpm-jobs--0.14.0.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/helpers/json_build_object_apply.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/add_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/add_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/complete_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/complete_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/do_notify.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/fail_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/get_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/get_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/permanently_fail_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/release_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/release_scheduled_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/reschedule_jobs.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/run_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/job_queues/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_row.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/triggers/tg_update_timestamps.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/LICENSE
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/Makefile
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/README.md
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/__tests__/__snapshots__/jwt.test.ts.snap
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/__tests__/jwt.test.ts
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/ip_address.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/origin.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/security_definer.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/user_agent.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/user_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_private/procedures/current_database_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_private/procedures/current_token_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_private/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_group_ids.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_ip_address.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_origin.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_user_agent.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_user_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/jest.config.js
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/package.json
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/pgpm-jwt-claims.control
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/pgpm.plan
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/ip_address.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/origin.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/security_definer.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/user_agent.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/user_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_private/procedures/current_database_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_private/procedures/current_token_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_private/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_group_ids.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_ip_address.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_origin.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_user_agent.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_user_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/sql/pgpm-jwt-claims--0.14.0.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/ip_address.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/origin.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/security_definer.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/user_agent.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/user_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_private/procedures/current_database_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_private/procedures/current_token_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_private/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_group_ids.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_ip_address.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_origin.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_user_agent.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_user_id.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/LICENSE
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/Makefile
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/README.md
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/__tests__/__snapshots__/measurements.test.ts.snap
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/__tests__/measurements.test.ts
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/deploy/schemas/measurements/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/deploy/schemas/measurements/tables/quantities/fixtures/1601076414018_fixture.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/deploy/schemas/measurements/tables/quantities/fixtures/1601081365273_fixture.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/deploy/schemas/measurements/tables/quantities/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/jest.config.js
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/measurements.control
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/package.json
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/pgpm-measurements.control
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/pgpm.plan
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/revert/schemas/measurements/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/revert/schemas/measurements/tables/quantities/fixtures/1601076414018_fixture.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/revert/schemas/measurements/tables/quantities/fixtures/1601081365273_fixture.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/revert/schemas/measurements/tables/quantities/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/sql/pgpm-measurements--0.14.0.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/verify/schemas/measurements/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/verify/schemas/measurements/tables/quantities/fixtures/1601076414018_fixture.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/verify/schemas/measurements/tables/quantities/fixtures/1601081365273_fixture.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/measurements/verify/schemas/measurements/tables/quantities/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/LICENSE
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/README.md
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/__tests__/__snapshots__/modules.test.ts.snap
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/__tests__/modules.test.ts
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_private/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/apis/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/connected_accounts_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/crypto_addresses_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/crypto_auth_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/default_ids_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/denormalized_table_field/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/emails_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/encrypted_secrets_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/field_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/invites_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/levels_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/limits_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/membership_types_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/memberships_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/permissions_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/phone_numbers_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/rls_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/secrets_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/sites/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/tokens_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/user_auth_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/users_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/uuid_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/jest.config.js
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/package.json
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_private/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/apis/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/connected_accounts_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/crypto_addresses_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/crypto_auth_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/default_ids_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/denormalized_table_field/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/emails_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/encrypted_secrets_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/field_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/invites_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/levels_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/limits_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/membership_types_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/memberships_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/permissions_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/phone_numbers_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/rls_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/secrets_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/sites/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/tokens_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/user_auth_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/users_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/uuid_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_private/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/apis/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/connected_accounts_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/crypto_addresses_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/crypto_auth_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/default_ids_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/denormalized_table_field/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/emails_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/encrypted_secrets_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/field_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/invites_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/levels_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/limits_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/membership_types_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/memberships_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/permissions_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/phone_numbers_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/rls_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/secrets_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/sites/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/tokens_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/user_auth_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/users_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/uuid_module/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/LICENSE
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/README.md
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/__tests__/__snapshots__/meta.test.ts.snap
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/__tests__/meta.test.ts
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_private/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/check_constraint/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/database/indexes/databases_database_unique_name_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/database/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/database_extension/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/extension/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/field/indexes/databases_field_uniq_names_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/field/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/foreign_key_constraint/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/full_text_search/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/index/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/limit_function/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/policy/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/primary_key_constraint/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/procedure/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/rls_function/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/schema/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/schema_grant/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/table/indexes/databases_table_unique_name_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/table/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/table_grant/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/trigger/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/trigger_function/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/unique_constraint/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_private/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/api_extensions/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/api_modules/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/api_schemata/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/apis/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/apps/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/domains/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/site_metadata/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/site_modules/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/site_themes/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/sites/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/jest.config.js
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/package.json
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_private/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/check_constraint/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/database/indexes/databases_database_unique_name_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/database/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/database_extension/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/extension/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/field/indexes/databases_field_uniq_names_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/field/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/foreign_key_constraint/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/full_text_search/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/index/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/limit_function/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/policy/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/primary_key_constraint/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/procedure/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/rls_function/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/schema/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/schema_grant/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/table/indexes/databases_table_unique_name_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/table/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/table_grant/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/trigger/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/trigger_function/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/unique_constraint/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_private/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/api_extensions/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/api_modules/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/api_schemata/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/apis/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/apps/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/domains/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/site_metadata/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/site_modules/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/site_themes/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/sites/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_private/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/check_constraint/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/database/indexes/databases_database_unique_name_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/database/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/database_extension/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/extension/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/field/indexes/databases_field_uniq_names_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/field/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/foreign_key_constraint/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/full_text_search/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/index/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/limit_function/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/policy/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/primary_key_constraint/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/procedure/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/rls_function/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/schema/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/schema_grant/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/table/indexes/databases_table_unique_name_idx.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/table/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/table_grant/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/trigger/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/trigger_function/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/unique_constraint/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_private/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/api_extensions/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/api_modules/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/api_schemata/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/apis/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/apps/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/domains/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/site_metadata/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/site_modules/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/site_themes/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/sites/table.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/stamps/LICENSE
delete mode 100644 __fixtures__/stage/extensions/@pgpm/stamps/Makefile
delete mode 100644 __fixtures__/stage/extensions/@pgpm/stamps/README.md
delete mode 100644 __fixtures__/stage/extensions/@pgpm/stamps/__tests__/stamps.test.ts
delete mode 100644 __fixtures__/stage/extensions/@pgpm/stamps/deploy/schemas/stamps/procedures/utils.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/stamps/deploy/schemas/stamps/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/stamps/jest.config.js
delete mode 100644 __fixtures__/stage/extensions/@pgpm/stamps/package.json
delete mode 100644 __fixtures__/stage/extensions/@pgpm/stamps/pgpm-stamps.control
delete mode 100644 __fixtures__/stage/extensions/@pgpm/stamps/pgpm.plan
delete mode 100644 __fixtures__/stage/extensions/@pgpm/stamps/revert/schemas/stamps/procedures/utils.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/stamps/revert/schemas/stamps/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/stamps/sql/pgpm-stamps--0.14.0.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/stamps/verify/schemas/stamps/procedures/utils.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/stamps/verify/schemas/stamps/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/LICENSE
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/Makefile
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/README.md
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/__tests__/__snapshots__/algo.test.ts.snap
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/__tests__/algo.test.ts
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/__tests__/totp.test.ts
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/deploy/schemas/totp/procedures/generate_totp.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/deploy/schemas/totp/procedures/random_base32.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/deploy/schemas/totp/procedures/urlencode.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/deploy/schemas/totp/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/jest.config.js
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/package.json
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/pgpm-totp.control
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/pgpm.plan
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/revert/schemas/totp/procedures/generate_totp.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/revert/schemas/totp/procedures/random_base32.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/revert/schemas/totp/procedures/urlencode.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/revert/schemas/totp/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/sql/pgpm-totp--0.14.0.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/verify/schemas/totp/procedures/generate_totp.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/verify/schemas/totp/procedures/random_base32.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/verify/schemas/totp/procedures/urlencode.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/totp/verify/schemas/totp/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/types/LICENSE
delete mode 100644 __fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/types/jest.config.js
delete mode 100644 __fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/LICENSE
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/Makefile
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/README.md
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/__tests__/__snapshots__/utils.test.ts.snap
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/__tests__/utils.test.ts
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/deploy/schemas/utils/procedures/ensure_singleton.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/deploy/schemas/utils/procedures/mask_pad.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/deploy/schemas/utils/procedures/throw.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/deploy/schemas/utils/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/jest.config.js
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/package.json
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/pgpm-utils.control
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/pgpm.plan
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/revert/schemas/utils/procedures/ensure_singleton.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/revert/schemas/utils/procedures/mask_pad.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/revert/schemas/utils/procedures/throw.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/revert/schemas/utils/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/sql/pgpm-utils--0.14.0.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/verify/schemas/utils/procedures/ensure_singleton.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/verify/schemas/utils/procedures/mask_pad.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/verify/schemas/utils/procedures/throw.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/utils/verify/schemas/utils/schema.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/uuid/LICENSE
delete mode 100644 __fixtures__/stage/extensions/@pgpm/uuid/jest.config.js
delete mode 100644 __fixtures__/stage/extensions/@pgpm/uuid/revert/extension/defaults.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/uuid/verify/extension/defaults.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/verify/LICENSE
delete mode 100644 __fixtures__/stage/extensions/@pgpm/verify/jest.config.js
diff --git a/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/.npmignore b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/.npmignore
new file mode 100644
index 000000000..cf8a45548
--- /dev/null
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/.npmignore
@@ -0,0 +1,2 @@
+__tests__
+jest.config.js
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/LICENSE b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/LICENSE
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/achievements/LICENSE
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/LICENSE
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/Makefile b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/Makefile
similarity index 74%
rename from __fixtures__/stage/extensions/@pgpm/base32/Makefile
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/Makefile
index 49023202d..0b4e7c5aa 100644
--- a/__fixtures__/stage/extensions/@pgpm/base32/Makefile
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/Makefile
@@ -1,5 +1,5 @@
EXTENSION = pgpm-base32
-DATA = sql/pgpm-base32--0.14.0.sql
+DATA = sql/pgpm-base32--0.15.3.sql
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/README.md b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/README.md
similarity index 94%
rename from __fixtures__/stage/extensions/@pgpm/base32/README.md
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/README.md
index 0b74c9bdc..c80ea018f 100644
--- a/__fixtures__/stage/extensions/@pgpm/base32/README.md
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/README.md
@@ -9,7 +9,7 @@
-
+
RFC4648 Base32 encode/decode in plpgsql
@@ -251,10 +251,10 @@ https://www.youtube.com/watch?v=Va8FLD-iuTg
## Related Tooling
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
+* [pgpm](https://github.com/constructive-io/constructive/tree/main/packages/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
+* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/packages/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
+* [supabase-test](https://github.com/constructive-io/constructive/tree/main/packages/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
+* [graphile-test](https://github.com/constructive-io/constructive/tree/main/packages/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/__tests__/__snapshots__/base32.decode.test.ts.snap b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/__tests__/__snapshots__/base32.decode.test.ts.snap
similarity index 90%
rename from __fixtures__/stage/extensions/@pgpm/base32/__tests__/__snapshots__/base32.decode.test.ts.snap
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/__tests__/__snapshots__/base32.decode.test.ts.snap
index 5273eef2f..e6317d9b0 100644
--- a/__fixtures__/stage/extensions/@pgpm/base32/__tests__/__snapshots__/base32.decode.test.ts.snap
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/__tests__/__snapshots__/base32.decode.test.ts.snap
@@ -1,4 +1,4 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
+// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`base32.decode cases INQXI 1`] = `"Cat"`;
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/__tests__/__snapshots__/base32.encode.test.ts.snap b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/__tests__/__snapshots__/base32.encode.test.ts.snap
similarity index 84%
rename from __fixtures__/stage/extensions/@pgpm/base32/__tests__/__snapshots__/base32.encode.test.ts.snap
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/__tests__/__snapshots__/base32.encode.test.ts.snap
index 0d96f7e00..02061dd1a 100644
--- a/__fixtures__/stage/extensions/@pgpm/base32/__tests__/__snapshots__/base32.encode.test.ts.snap
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/__tests__/__snapshots__/base32.encode.test.ts.snap
@@ -1,4 +1,4 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
+// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`base32.encode case: 1 1`] = `""`;
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/__tests__/base32.decode.test.ts b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/__tests__/base32.decode.test.ts
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/base32/__tests__/base32.decode.test.ts
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/__tests__/base32.decode.test.ts
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/__tests__/base32.encode.test.ts b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/__tests__/base32.encode.test.ts
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/base32/__tests__/base32.encode.test.ts
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/__tests__/base32.encode.test.ts
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/deploy/schemas/base32/procedures/decode.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/deploy/schemas/base32/procedures/decode.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/base32/deploy/schemas/base32/procedures/decode.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/deploy/schemas/base32/procedures/decode.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/deploy/schemas/base32/procedures/encode.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/deploy/schemas/base32/procedures/encode.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/base32/deploy/schemas/base32/procedures/encode.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/deploy/schemas/base32/procedures/encode.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/deploy/schemas/base32/schema.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/deploy/schemas/base32/schema.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/base32/deploy/schemas/base32/schema.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/deploy/schemas/base32/schema.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/jest.config.js b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/jest.config.js
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/base32/jest.config.js
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/jest.config.js
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/package.json b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/package.json
similarity index 90%
rename from __fixtures__/stage/extensions/@pgpm/base32/package.json
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/package.json
index fafeeb5d3..6e230db57 100644
--- a/__fixtures__/stage/extensions/@pgpm/base32/package.json
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/package.json
@@ -1,6 +1,6 @@
{
"name": "@pgpm/base32",
- "version": "0.15.2",
+ "version": "0.16.0",
"description": "Base32 encoding and decoding functions for PostgreSQL",
"author": "Dan Lynch ",
"contributors": [
@@ -21,10 +21,10 @@
"test:watch": "jest --watch"
},
"dependencies": {
- "@pgpm/verify": "0.15.2"
+ "@pgpm/verify": "workspace:*"
},
"devDependencies": {
- "pgpm": "^1.0.0"
+ "pgpm": "^1.3.0"
},
"repository": {
"type": "git",
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/pgpm-base32.control b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/pgpm-base32.control
similarity index 86%
rename from __fixtures__/stage/extensions/@pgpm/base32/pgpm-base32.control
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/pgpm-base32.control
index b90c47693..c5e4aec94 100644
--- a/__fixtures__/stage/extensions/@pgpm/base32/pgpm-base32.control
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/pgpm-base32.control
@@ -1,6 +1,6 @@
# pgpm-base32 extension
comment = 'pgpm-base32 extension'
-default_version = '0.14.0'
+default_version = '0.15.3'
module_pathname = '$libdir/pgpm-base32'
requires = 'pgcrypto,plpgsql,pgpm-verify'
relocatable = false
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/pgpm.plan b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/pgpm.plan
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/base32/pgpm.plan
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/pgpm.plan
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/revert/schemas/base32/procedures/decode.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/revert/schemas/base32/procedures/decode.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/base32/revert/schemas/base32/procedures/decode.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/revert/schemas/base32/procedures/decode.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/revert/schemas/base32/procedures/encode.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/revert/schemas/base32/procedures/encode.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/base32/revert/schemas/base32/procedures/encode.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/revert/schemas/base32/procedures/encode.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/revert/schemas/base32/schema.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/revert/schemas/base32/schema.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/base32/revert/schemas/base32/schema.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/revert/schemas/base32/schema.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/sql/pgpm-base32--0.14.0.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/sql/pgpm-base32--0.15.3.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/base32/sql/pgpm-base32--0.14.0.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/sql/pgpm-base32--0.15.3.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/verify/schemas/base32/procedures/decode.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/verify/schemas/base32/procedures/decode.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/base32/verify/schemas/base32/procedures/decode.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/verify/schemas/base32/procedures/decode.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/verify/schemas/base32/procedures/encode.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/verify/schemas/base32/procedures/encode.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/base32/verify/schemas/base32/procedures/encode.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/verify/schemas/base32/procedures/encode.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/verify/schemas/base32/schema.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/verify/schemas/base32/schema.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/base32/verify/schemas/base32/schema.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/base32/verify/schemas/base32/schema.sql
diff --git a/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/.npmignore b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/.npmignore
new file mode 100644
index 000000000..cf8a45548
--- /dev/null
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/.npmignore
@@ -0,0 +1,2 @@
+__tests__
+jest.config.js
diff --git a/__fixtures__/stage/extensions/@pgpm/base32/LICENSE b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/LICENSE
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/base32/LICENSE
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/LICENSE
diff --git a/__fixtures__/stage/extensions/@pgpm/defaults/Makefile b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/Makefile
similarity index 73%
rename from __fixtures__/stage/extensions/@pgpm/defaults/Makefile
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/Makefile
index 163bdce3a..2e3c1a00b 100644
--- a/__fixtures__/stage/extensions/@pgpm/defaults/Makefile
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/Makefile
@@ -1,5 +1,5 @@
EXTENSION = pgpm-defaults
-DATA = sql/pgpm-defaults--0.14.0.sql
+DATA = sql/pgpm-defaults--0.15.3.sql
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
diff --git a/__fixtures__/stage/extensions/@pgpm/defaults/README.md b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/README.md
similarity index 94%
rename from __fixtures__/stage/extensions/@pgpm/defaults/README.md
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/README.md
index 229339d31..9d4d094ca 100644
--- a/__fixtures__/stage/extensions/@pgpm/defaults/README.md
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/README.md
@@ -9,7 +9,7 @@
-
+
Security defaults and baseline configurations.
@@ -266,10 +266,10 @@ pnpm test
## Related Tooling
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
+* [pgpm](https://github.com/constructive-io/constructive/tree/main/packages/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
+* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/packages/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
+* [supabase-test](https://github.com/constructive-io/constructive/tree/main/packages/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
+* [graphile-test](https://github.com/constructive-io/constructive/tree/main/packages/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
diff --git a/__fixtures__/stage/extensions/@pgpm/defaults/__tests__/__snapshots__/defaults.test.ts.snap b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/__tests__/__snapshots__/defaults.test.ts.snap
similarity index 87%
rename from __fixtures__/stage/extensions/@pgpm/defaults/__tests__/__snapshots__/defaults.test.ts.snap
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/__tests__/__snapshots__/defaults.test.ts.snap
index 00f632de3..fe5ca6681 100644
--- a/__fixtures__/stage/extensions/@pgpm/defaults/__tests__/__snapshots__/defaults.test.ts.snap
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/__tests__/__snapshots__/defaults.test.ts.snap
@@ -1,4 +1,4 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
+// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`defaults security configurations configuration verification should create snapshot of security configuration 1`] = `
{
diff --git a/__fixtures__/stage/extensions/@pgpm/defaults/__tests__/defaults.test.ts b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/__tests__/defaults.test.ts
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/defaults/__tests__/defaults.test.ts
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/__tests__/defaults.test.ts
diff --git a/__fixtures__/stage/extensions/@pgpm/defaults/deploy/defaults/public.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/deploy/defaults/public.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/defaults/deploy/defaults/public.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/deploy/defaults/public.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/jest.config.js b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/jest.config.js
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/database-jobs/jest.config.js
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/jest.config.js
diff --git a/__fixtures__/stage/extensions/@pgpm/defaults/package.json b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/package.json
similarity index 90%
rename from __fixtures__/stage/extensions/@pgpm/defaults/package.json
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/package.json
index a80770e2b..264832248 100644
--- a/__fixtures__/stage/extensions/@pgpm/defaults/package.json
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/package.json
@@ -1,6 +1,6 @@
{
"name": "@pgpm/defaults",
- "version": "0.15.2",
+ "version": "0.16.0",
"description": "Security defaults and baseline configurations",
"author": "Dan Lynch ",
"contributors": [
@@ -21,10 +21,10 @@
"test:watch": "jest --watch"
},
"dependencies": {
- "@pgpm/verify": "0.15.2"
+ "@pgpm/verify": "workspace:*"
},
"devDependencies": {
- "pgpm": "^1.0.0"
+ "pgpm": "^1.3.0"
},
"repository": {
"type": "git",
diff --git a/__fixtures__/stage/extensions/@pgpm/defaults/pgpm-defaults.control b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/pgpm-defaults.control
similarity index 86%
rename from __fixtures__/stage/extensions/@pgpm/defaults/pgpm-defaults.control
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/pgpm-defaults.control
index a9ec803e1..d4e112a5b 100644
--- a/__fixtures__/stage/extensions/@pgpm/defaults/pgpm-defaults.control
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/pgpm-defaults.control
@@ -1,6 +1,6 @@
# pgpm-defaults extension
comment = 'pgpm-defaults extension'
-default_version = '0.14.0'
+default_version = '0.15.3'
module_pathname = '$libdir/pgpm-defaults'
requires = 'plpgsql,pgpm-verify'
relocatable = false
diff --git a/__fixtures__/stage/extensions/@pgpm/defaults/pgpm.plan b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/pgpm.plan
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/defaults/pgpm.plan
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/pgpm.plan
diff --git a/__fixtures__/stage/extensions/@pgpm/defaults/revert/defaults/public.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/revert/defaults/public.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/defaults/revert/defaults/public.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/revert/defaults/public.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/defaults/sql/pgpm-defaults--0.14.0.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/sql/pgpm-defaults--0.15.3.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/defaults/sql/pgpm-defaults--0.14.0.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/sql/pgpm-defaults--0.15.3.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/defaults/verify/defaults/public.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/verify/defaults/public.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/defaults/verify/defaults/public.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/defaults/verify/defaults/public.sql
diff --git a/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/.npmignore b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/.npmignore
new file mode 100644
index 000000000..cf8a45548
--- /dev/null
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/.npmignore
@@ -0,0 +1,2 @@
+__tests__
+jest.config.js
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/LICENSE b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/LICENSE
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/database-jobs/LICENSE
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/LICENSE
diff --git a/__fixtures__/stage/extensions/@pgpm/types/Makefile b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/Makefile
similarity index 74%
rename from __fixtures__/stage/extensions/@pgpm/types/Makefile
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/Makefile
index 26216c55a..72106ac97 100644
--- a/__fixtures__/stage/extensions/@pgpm/types/Makefile
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/Makefile
@@ -1,5 +1,5 @@
EXTENSION = pgpm-types
-DATA = sql/pgpm-types--0.14.0.sql
+DATA = sql/pgpm-types--0.15.3.sql
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
diff --git a/__fixtures__/stage/extensions/@pgpm/types/README.md b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/README.md
similarity index 94%
rename from __fixtures__/stage/extensions/@pgpm/types/README.md
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/README.md
index 6f0511a29..b48dbed1c 100644
--- a/__fixtures__/stage/extensions/@pgpm/types/README.md
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/README.md
@@ -9,7 +9,7 @@
-
+
Core PostgreSQL data types with SQL scripts.
@@ -217,10 +217,10 @@ The test suite validates:
## Related Tooling
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
+* [pgpm](https://github.com/constructive-io/constructive/tree/main/packages/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
+* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/packages/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
+* [supabase-test](https://github.com/constructive-io/constructive/tree/main/packages/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
+* [graphile-test](https://github.com/constructive-io/constructive/tree/main/packages/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
diff --git a/__fixtures__/stage/extensions/@pgpm/types/__tests__/domains.pgutils.test.ts b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/__tests__/domains.pgutils.test.ts
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/__tests__/domains.pgutils.test.ts
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/__tests__/domains.pgutils.test.ts
diff --git a/__fixtures__/stage/extensions/@pgpm/types/__tests__/domains.test.ts b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/__tests__/domains.test.ts
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/__tests__/domains.test.ts
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/__tests__/domains.test.ts
diff --git a/__fixtures__/stage/extensions/@pgpm/types/__tests__/ext-types.test.ts b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/__tests__/ext-types.test.ts
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/__tests__/ext-types.test.ts
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/__tests__/ext-types.test.ts
diff --git a/__fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/attachment.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/attachment.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/attachment.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/attachment.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/email.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/email.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/email.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/email.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/hostname.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/hostname.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/hostname.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/hostname.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/image.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/image.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/image.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/image.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/multiple_select.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/multiple_select.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/multiple_select.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/multiple_select.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/origin.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/origin.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/origin.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/origin.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/single_select.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/single_select.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/single_select.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/single_select.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/upload.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/upload.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/upload.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/upload.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/url.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/url.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/domains/url.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/domains/url.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/deploy/schemas/public/schema.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/schema.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/geotypes/deploy/schemas/public/schema.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/deploy/schemas/public/schema.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/defaults/jest.config.js b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/jest.config.js
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/defaults/jest.config.js
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/jest.config.js
diff --git a/__fixtures__/stage/extensions/@pgpm/types/package.json b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/package.json
similarity index 90%
rename from __fixtures__/stage/extensions/@pgpm/types/package.json
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/package.json
index 93200c7db..cef2d97a1 100644
--- a/__fixtures__/stage/extensions/@pgpm/types/package.json
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/package.json
@@ -1,6 +1,6 @@
{
"name": "@pgpm/types",
- "version": "0.15.2",
+ "version": "0.16.0",
"description": "Core PostgreSQL data types with deploy/verify/revert SQL scripts",
"author": "Dan Lynch ",
"contributors": [
@@ -21,10 +21,10 @@
"test:watch": "jest --watch"
},
"dependencies": {
- "@pgpm/verify": "0.15.2"
+ "@pgpm/verify": "workspace:*"
},
"devDependencies": {
- "pgpm": "^1.0.0"
+ "pgpm": "^1.3.0"
},
"repository": {
"type": "git",
diff --git a/__fixtures__/stage/extensions/@pgpm/types/pgpm-types.control b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/pgpm-types.control
similarity index 86%
rename from __fixtures__/stage/extensions/@pgpm/types/pgpm-types.control
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/pgpm-types.control
index c076f110d..002e0e1fd 100644
--- a/__fixtures__/stage/extensions/@pgpm/types/pgpm-types.control
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/pgpm-types.control
@@ -1,6 +1,6 @@
# pgpm-types extension
comment = 'pgpm-types extension'
-default_version = '0.14.0'
+default_version = '0.15.3'
module_pathname = '$libdir/pgpm-types'
requires = 'plpgsql,citext,pgpm-verify'
relocatable = false
diff --git a/__fixtures__/stage/extensions/@pgpm/types/pgpm.plan b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/pgpm.plan
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/pgpm.plan
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/pgpm.plan
diff --git a/__fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/attachment.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/attachment.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/attachment.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/attachment.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/email.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/email.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/email.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/email.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/hostname.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/hostname.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/hostname.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/hostname.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/image.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/image.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/image.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/image.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/multiple_select.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/multiple_select.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/multiple_select.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/multiple_select.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/origin.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/origin.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/origin.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/origin.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/single_select.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/single_select.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/single_select.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/single_select.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/upload.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/upload.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/upload.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/upload.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/url.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/url.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/domains/url.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/domains/url.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/revert/schemas/public/schema.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/schema.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/geotypes/revert/schemas/public/schema.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/revert/schemas/public/schema.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/sql/pgpm-types--0.14.0.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/sql/pgpm-types--0.15.3.sql
similarity index 95%
rename from __fixtures__/stage/extensions/@pgpm/types/sql/pgpm-types--0.14.0.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/sql/pgpm-types--0.15.3.sql
index 57fcbffd6..7e5a6d5dc 100644
--- a/__fixtures__/stage/extensions/@pgpm/types/sql/pgpm-types--0.14.0.sql
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/sql/pgpm-types--0.15.3.sql
@@ -28,7 +28,7 @@ CREATE DOMAIN multiple_select AS jsonb
COMMENT ON DOMAIN multiple_select IS '@name pgpmInternalTypeMultipleSelect';
CREATE DOMAIN origin AS text
- CHECK (value = SUBSTRING(value FROM '^(https?://[^/]*)'));
+ CHECK (value = pg_catalog."substring"(value, '^(https?://[^/]*)'));
COMMENT ON DOMAIN origin IS '@name pgpmInternalTypeOrigin';
diff --git a/__fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/attachment.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/attachment.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/attachment.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/attachment.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/email.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/email.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/email.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/email.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/hostname.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/hostname.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/hostname.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/hostname.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/image.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/image.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/image.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/image.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/multiple_select.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/multiple_select.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/multiple_select.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/multiple_select.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/origin.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/origin.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/origin.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/origin.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/single_select.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/single_select.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/single_select.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/single_select.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/upload.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/upload.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/upload.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/upload.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/url.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/url.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/domains/url.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/domains/url.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/verify/schemas/public/schema.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/schema.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/geotypes/verify/schemas/public/schema.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/types/verify/schemas/public/schema.sql
diff --git a/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/.npmignore b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/.npmignore
new file mode 100644
index 000000000..cf8a45548
--- /dev/null
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/.npmignore
@@ -0,0 +1,2 @@
+__tests__
+jest.config.js
diff --git a/__fixtures__/stage/extensions/@pgpm/defaults/LICENSE b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/LICENSE
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/defaults/LICENSE
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/LICENSE
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/Makefile b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/Makefile
similarity index 74%
rename from __fixtures__/stage/extensions/@pgpm/uuid/Makefile
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/Makefile
index f382d1228..e41ffbd87 100644
--- a/__fixtures__/stage/extensions/@pgpm/uuid/Makefile
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/Makefile
@@ -1,5 +1,5 @@
EXTENSION = pgpm-uuid
-DATA = sql/pgpm-uuid--0.14.0.sql
+DATA = sql/pgpm-uuid--0.15.3.sql
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/README.md b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/README.md
similarity index 94%
rename from __fixtures__/stage/extensions/@pgpm/uuid/README.md
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/README.md
index 7a1fa1751..23055cf6d 100644
--- a/__fixtures__/stage/extensions/@pgpm/uuid/README.md
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/README.md
@@ -9,7 +9,7 @@
-
+
UUID utilities and extensions for PostgreSQL.
@@ -273,10 +273,10 @@ The test suite validates:
## Related Tooling
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
+* [pgpm](https://github.com/constructive-io/constructive/tree/main/packages/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
+* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/packages/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
+* [supabase-test](https://github.com/constructive-io/constructive/tree/main/packages/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
+* [graphile-test](https://github.com/constructive-io/constructive/tree/main/packages/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/__tests__/uuid.test.ts b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/__tests__/uuid.test.ts
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/__tests__/uuid.test.ts
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/__tests__/uuid.test.ts
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/deploy/extension/defaults.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/deploy/extension/defaults.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/deploy/extension/defaults.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/deploy/extension/defaults.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/pseudo_order_seed_uuid.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/pseudo_order_seed_uuid.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/pseudo_order_seed_uuid.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/pseudo_order_seed_uuid.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/pseudo_order_uuid.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/pseudo_order_uuid.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/pseudo_order_uuid.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/pseudo_order_uuid.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/trigger_set_uuid_related_field.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/trigger_set_uuid_related_field.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/trigger_set_uuid_related_field.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/trigger_set_uuid_related_field.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/trigger_set_uuid_seed.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/trigger_set_uuid_seed.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/trigger_set_uuid_seed.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/deploy/schemas/uuids/procedures/trigger_set_uuid_seed.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/deploy/schemas/uuids/schema.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/deploy/schemas/uuids/schema.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/deploy/schemas/uuids/schema.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/deploy/schemas/uuids/schema.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/jest.config.js b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/jest.config.js
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/jest.config.js
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/jest.config.js
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/package.json b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/package.json
similarity index 90%
rename from __fixtures__/stage/extensions/@pgpm/uuid/package.json
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/package.json
index 901a819e7..6c5307bd0 100644
--- a/__fixtures__/stage/extensions/@pgpm/uuid/package.json
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/package.json
@@ -1,6 +1,6 @@
{
"name": "@pgpm/uuid",
- "version": "0.15.2",
+ "version": "0.16.0",
"description": "UUID utilities and extensions for PostgreSQL",
"author": "Dan Lynch ",
"contributors": [
@@ -21,10 +21,10 @@
"test:watch": "jest --watch"
},
"dependencies": {
- "@pgpm/verify": "0.15.2"
+ "@pgpm/verify": "workspace:*"
},
"devDependencies": {
- "pgpm": "^1.0.0"
+ "pgpm": "^1.3.0"
},
"repository": {
"type": "git",
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/pgpm-uuid.control b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/pgpm-uuid.control
similarity index 87%
rename from __fixtures__/stage/extensions/@pgpm/uuid/pgpm-uuid.control
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/pgpm-uuid.control
index 7ef991945..588e0a199 100644
--- a/__fixtures__/stage/extensions/@pgpm/uuid/pgpm-uuid.control
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/pgpm-uuid.control
@@ -1,6 +1,6 @@
# pgpm-uuid extension
comment = 'pgpm-uuid extension'
-default_version = '0.14.0'
+default_version = '0.15.3'
module_pathname = '$libdir/pgpm-uuid'
requires = 'pgcrypto,plpgsql,uuid-ossp,hstore,pgpm-verify'
relocatable = false
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/pgpm.plan b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/pgpm.plan
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/pgpm.plan
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/pgpm.plan
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/extension/defaults.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/revert/extension/defaults.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/inflection/revert/extension/defaults.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/revert/extension/defaults.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/pseudo_order_seed_uuid.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/pseudo_order_seed_uuid.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/pseudo_order_seed_uuid.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/pseudo_order_seed_uuid.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/pseudo_order_uuid.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/pseudo_order_uuid.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/pseudo_order_uuid.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/pseudo_order_uuid.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/trigger_set_uuid_related_field.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/trigger_set_uuid_related_field.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/trigger_set_uuid_related_field.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/trigger_set_uuid_related_field.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/trigger_set_uuid_seed.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/trigger_set_uuid_seed.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/trigger_set_uuid_seed.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/revert/schemas/uuids/procedures/trigger_set_uuid_seed.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/revert/schemas/uuids/schema.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/revert/schemas/uuids/schema.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/revert/schemas/uuids/schema.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/revert/schemas/uuids/schema.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/sql/pgpm-uuid--0.14.0.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/sql/pgpm-uuid--0.15.3.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/sql/pgpm-uuid--0.14.0.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/sql/pgpm-uuid--0.15.3.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/extension/defaults.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/verify/extension/defaults.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/inflection/verify/extension/defaults.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/verify/extension/defaults.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/pseudo_order_seed_uuid.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/pseudo_order_seed_uuid.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/pseudo_order_seed_uuid.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/pseudo_order_seed_uuid.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/pseudo_order_uuid.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/pseudo_order_uuid.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/pseudo_order_uuid.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/pseudo_order_uuid.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/trigger_set_uuid_related_field.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/trigger_set_uuid_related_field.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/trigger_set_uuid_related_field.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/trigger_set_uuid_related_field.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/trigger_set_uuid_seed.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/trigger_set_uuid_seed.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/trigger_set_uuid_seed.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/verify/schemas/uuids/procedures/trigger_set_uuid_seed.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/verify/schemas/uuids/schema.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/verify/schemas/uuids/schema.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/uuid/verify/schemas/uuids/schema.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/uuid/verify/schemas/uuids/schema.sql
diff --git a/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/.npmignore b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/.npmignore
new file mode 100644
index 000000000..cf8a45548
--- /dev/null
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/.npmignore
@@ -0,0 +1,2 @@
+__tests__
+jest.config.js
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/LICENSE b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/LICENSE
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/LICENSE
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/LICENSE
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/Makefile b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/Makefile
similarity index 74%
rename from __fixtures__/stage/extensions/@pgpm/verify/Makefile
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/Makefile
index fb3a34e34..dd8799f8c 100644
--- a/__fixtures__/stage/extensions/@pgpm/verify/Makefile
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/Makefile
@@ -1,5 +1,5 @@
EXTENSION = pgpm-verify
-DATA = sql/pgpm-verify--0.14.0.sql
+DATA = sql/pgpm-verify--0.15.3.sql
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/README.md b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/README.md
similarity index 96%
rename from __fixtures__/stage/extensions/@pgpm/verify/README.md
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/README.md
index f646ba2c1..58ce1edca 100644
--- a/__fixtures__/stage/extensions/@pgpm/verify/README.md
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/README.md
@@ -9,7 +9,7 @@
-
+
Verification utilities for PostgreSQL modules
@@ -345,7 +345,7 @@ Every pgpm module depends on `@pgpm/verify`:
```json
{
"dependencies": {
- "@pgpm/verify": "0.15.0"
+ "@pgpm/verify": "workspace:*"
}
}
```
@@ -438,10 +438,10 @@ None - this is the foundational package that all other packages depend on.
## Related Tooling
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
+* [pgpm](https://github.com/constructive-io/constructive/tree/main/packages/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
+* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/packages/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
+* [supabase-test](https://github.com/constructive-io/constructive/tree/main/packages/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
+* [graphile-test](https://github.com/constructive-io/constructive/tree/main/packages/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/__tests__/ext-verify.test.ts b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/__tests__/ext-verify.test.ts
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/__tests__/ext-verify.test.ts
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/__tests__/ext-verify.test.ts
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/get_entity_from_str.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/get_entity_from_str.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/get_entity_from_str.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/get_entity_from_str.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/get_schema_from_str.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/get_schema_from_str.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/get_schema_from_str.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/get_schema_from_str.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/list_indexes.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/list_indexes.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/list_indexes.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/list_indexes.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/list_memberships.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/list_memberships.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/list_memberships.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/list_memberships.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_constraint.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_constraint.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_constraint.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_constraint.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_domain.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_domain.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_domain.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_domain.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_extension.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_extension.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_extension.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_extension.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_function.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_function.sql
similarity index 65%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_function.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_function.sql
index 823e1e2bb..b74eaf423 100644
--- a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_function.sql
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_function.sql
@@ -9,12 +9,26 @@ CREATE FUNCTION verify_function (_name text, _user text DEFAULT NULL)
AS $$
DECLARE
check_user text;
+ func_oid oid;
BEGIN
IF (_user IS NOT NULL) THEN
check_user = _user;
ELSE
check_user = CURRENT_USER;
END IF;
+ IF position('(' IN _name) > 0 THEN
+ func_oid = to_regprocedure(_name);
+ IF func_oid IS NULL THEN
+ RAISE EXCEPTION 'Nonexistent function --> %', _name
+ USING HINT = 'Please check';
+ END IF;
+ IF has_function_privilege(check_user, func_oid, 'execute') THEN
+ RETURN TRUE;
+ ELSE
+ RAISE EXCEPTION 'Nonexistent function --> %', _name
+ USING HINT = 'Please check';
+ END IF;
+ END IF;
IF EXISTS (
SELECT
has_function_privilege(check_user, p.oid, 'execute')
@@ -34,4 +48,3 @@ $$
LANGUAGE 'plpgsql'
IMMUTABLE;
COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_index.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_index.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_index.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_index.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_membership.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_membership.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_membership.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_membership.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_policy.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_policy.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_policy.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_policy.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_role.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_role.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_role.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_role.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_schema.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_schema.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_schema.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_schema.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_security.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_security.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_security.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_security.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_table.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_table.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_table.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_table.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_table_grant.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_table_grant.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_table_grant.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_table_grant.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_trigger.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_trigger.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_trigger.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_trigger.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_type.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_type.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_type.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_type.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_view.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_view.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/deploy/procedures/verify_view.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/deploy/procedures/verify_view.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/jest.config.js b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/jest.config.js
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/encrypted-secrets/jest.config.js
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/jest.config.js
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/package.json b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/package.json
similarity index 94%
rename from __fixtures__/stage/extensions/@pgpm/verify/package.json
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/package.json
index 3e6b42f71..52d73c85d 100644
--- a/__fixtures__/stage/extensions/@pgpm/verify/package.json
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/package.json
@@ -1,6 +1,6 @@
{
"name": "@pgpm/verify",
- "version": "0.15.2",
+ "version": "0.16.0",
"description": "Verification utilities for PGPM deploy/verify/revert workflow",
"author": "Dan Lynch ",
"contributors": [
@@ -21,7 +21,7 @@
"test:watch": "jest --watch"
},
"devDependencies": {
- "pgpm": "^1.0.0"
+ "pgpm": "^1.3.0"
},
"repository": {
"type": "git",
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/pgpm-verify.control b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/pgpm-verify.control
similarity index 85%
rename from __fixtures__/stage/extensions/@pgpm/verify/pgpm-verify.control
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/pgpm-verify.control
index e23f87f53..1a07371d7 100644
--- a/__fixtures__/stage/extensions/@pgpm/verify/pgpm-verify.control
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/pgpm-verify.control
@@ -1,6 +1,6 @@
# pgpm-verify extension
comment = 'pgpm-verify extension'
-default_version = '0.14.0'
+default_version = '0.15.3'
module_pathname = '$libdir/pgpm-verify'
requires = 'plpgsql'
relocatable = false
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/pgpm.plan b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/pgpm.plan
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/pgpm.plan
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/pgpm.plan
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/get_entity_from_str.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/get_entity_from_str.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/get_entity_from_str.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/get_entity_from_str.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/get_schema_from_str.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/get_schema_from_str.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/get_schema_from_str.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/get_schema_from_str.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/list_indexes.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/list_indexes.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/list_indexes.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/list_indexes.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/list_memberships.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/list_memberships.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/list_memberships.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/list_memberships.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_constraint.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_constraint.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_constraint.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_constraint.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_domain.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_domain.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_domain.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_domain.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_extension.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_extension.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_extension.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_extension.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_function.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_function.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_function.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_function.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_index.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_index.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_index.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_index.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_membership.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_membership.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_membership.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_membership.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_policy.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_policy.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_policy.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_policy.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_role.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_role.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_role.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_role.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_schema.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_schema.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_schema.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_schema.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_security.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_security.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_security.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_security.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_table.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_table.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_table.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_table.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_table_grant.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_table_grant.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_table_grant.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_table_grant.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_trigger.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_trigger.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_trigger.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_trigger.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_type.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_type.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_type.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_type.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_view.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_view.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/revert/procedures/verify_view.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/revert/procedures/verify_view.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/sql/pgpm-verify--0.14.0.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/sql/pgpm-verify--0.15.3.sql
similarity index 95%
rename from __fixtures__/stage/extensions/@pgpm/verify/sql/pgpm-verify--0.14.0.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/sql/pgpm-verify--0.15.3.sql
index 384e5fcbd..515c71795 100644
--- a/__fixtures__/stage/extensions/@pgpm/verify/sql/pgpm-verify--0.14.0.sql
+++ b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/sql/pgpm-verify--0.15.3.sql
@@ -129,12 +129,26 @@ $EOFCODE$ LANGUAGE plpgsql IMMUTABLE;
CREATE FUNCTION verify_function(_name text, _user text DEFAULT NULL) RETURNS boolean AS $EOFCODE$
DECLARE
check_user text;
+ func_oid oid;
BEGIN
IF (_user IS NOT NULL) THEN
check_user = _user;
ELSE
check_user = CURRENT_USER;
END IF;
+ IF position('(' IN _name) > 0 THEN
+ func_oid = to_regprocedure(_name);
+ IF func_oid IS NULL THEN
+ RAISE EXCEPTION 'Nonexistent function --> %', _name
+ USING HINT = 'Please check';
+ END IF;
+ IF has_function_privilege(check_user, func_oid, 'execute') THEN
+ RETURN TRUE;
+ ELSE
+ RAISE EXCEPTION 'Nonexistent function --> %', _name
+ USING HINT = 'Please check';
+ END IF;
+ END IF;
IF EXISTS (
SELECT
has_function_privilege(check_user, p.oid, 'execute')
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/get_entity_from_str.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/get_entity_from_str.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/get_entity_from_str.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/get_entity_from_str.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/get_schema_from_str.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/get_schema_from_str.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/get_schema_from_str.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/get_schema_from_str.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/list_indexes.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/list_indexes.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/list_indexes.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/list_indexes.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/list_memberships.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/list_memberships.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/list_memberships.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/list_memberships.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_constraint.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_constraint.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_constraint.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_constraint.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_domain.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_domain.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_domain.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_domain.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_extension.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_extension.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_extension.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_extension.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_function.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_function.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_function.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_function.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_index.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_index.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_index.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_index.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_membership.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_membership.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_membership.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_membership.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_policy.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_policy.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_policy.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_policy.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_role.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_role.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_role.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_role.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_schema.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_schema.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_schema.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_schema.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_security.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_security.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_security.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_security.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_table.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_table.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_table.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_table.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_table_grant.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_table_grant.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_table_grant.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_table_grant.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_trigger.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_trigger.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_trigger.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_trigger.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_type.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_type.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_type.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_type.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_view.sql b/__fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_view.sql
similarity index 100%
rename from __fixtures__/stage/extensions/@pgpm/verify/verify/procedures/verify_view.sql
rename to __fixtures__/sqitch/simple-w-exts/extensions/@pgpm/verify/verify/procedures/verify_view.sql
diff --git a/__fixtures__/stage/packages/unique-names/Makefile b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/Makefile
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/Makefile
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/Makefile
diff --git a/__fixtures__/stage/packages/unique-names/deploy/schemas/unique_names/procedures/generate_name.sql b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/deploy/schemas/unique_names/procedures/generate_name.sql
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/deploy/schemas/unique_names/procedures/generate_name.sql
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/deploy/schemas/unique_names/procedures/generate_name.sql
diff --git a/__fixtures__/stage/packages/unique-names/deploy/schemas/unique_names/schema.sql b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/deploy/schemas/unique_names/schema.sql
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/deploy/schemas/unique_names/schema.sql
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/deploy/schemas/unique_names/schema.sql
diff --git a/__fixtures__/stage/packages/unique-names/deploy/schemas/unique_names/tables/words/fixtures/1589271124916_fixture.sql b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/deploy/schemas/unique_names/tables/words/fixtures/1589271124916_fixture.sql
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/deploy/schemas/unique_names/tables/words/fixtures/1589271124916_fixture.sql
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/deploy/schemas/unique_names/tables/words/fixtures/1589271124916_fixture.sql
diff --git a/__fixtures__/stage/packages/unique-names/deploy/schemas/unique_names/tables/words/indexes/words_type_idx.sql b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/deploy/schemas/unique_names/tables/words/indexes/words_type_idx.sql
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/deploy/schemas/unique_names/tables/words/indexes/words_type_idx.sql
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/deploy/schemas/unique_names/tables/words/indexes/words_type_idx.sql
diff --git a/__fixtures__/stage/packages/unique-names/deploy/schemas/unique_names/tables/words/table.sql b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/deploy/schemas/unique_names/tables/words/table.sql
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/deploy/schemas/unique_names/tables/words/table.sql
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/deploy/schemas/unique_names/tables/words/table.sql
diff --git a/__fixtures__/stage/packages/unique-names/package.json b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/package.json
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/package.json
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/package.json
diff --git a/__fixtures__/stage/packages/unique-names/pgpm.plan b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/pgpm.plan
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/pgpm.plan
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/pgpm.plan
diff --git a/__fixtures__/stage/packages/unique-names/revert/schemas/unique_names/procedures/generate_name.sql b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/revert/schemas/unique_names/procedures/generate_name.sql
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/revert/schemas/unique_names/procedures/generate_name.sql
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/revert/schemas/unique_names/procedures/generate_name.sql
diff --git a/__fixtures__/stage/packages/unique-names/revert/schemas/unique_names/schema.sql b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/revert/schemas/unique_names/schema.sql
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/revert/schemas/unique_names/schema.sql
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/revert/schemas/unique_names/schema.sql
diff --git a/__fixtures__/stage/packages/unique-names/revert/schemas/unique_names/tables/words/fixtures/1589271124916_fixture.sql b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/revert/schemas/unique_names/tables/words/fixtures/1589271124916_fixture.sql
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/revert/schemas/unique_names/tables/words/fixtures/1589271124916_fixture.sql
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/revert/schemas/unique_names/tables/words/fixtures/1589271124916_fixture.sql
diff --git a/__fixtures__/stage/packages/unique-names/revert/schemas/unique_names/tables/words/indexes/words_type_idx.sql b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/revert/schemas/unique_names/tables/words/indexes/words_type_idx.sql
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/revert/schemas/unique_names/tables/words/indexes/words_type_idx.sql
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/revert/schemas/unique_names/tables/words/indexes/words_type_idx.sql
diff --git a/__fixtures__/stage/packages/unique-names/revert/schemas/unique_names/tables/words/table.sql b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/revert/schemas/unique_names/tables/words/table.sql
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/revert/schemas/unique_names/tables/words/table.sql
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/revert/schemas/unique_names/tables/words/table.sql
diff --git a/__fixtures__/stage/packages/unique-names/sql/unique-names--0.0.1.sql b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/sql/unique-names--0.0.1.sql
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/sql/unique-names--0.0.1.sql
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/sql/unique-names--0.0.1.sql
diff --git a/__fixtures__/stage/packages/unique-names/unique-names.control b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/unique-names.control
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/unique-names.control
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/unique-names.control
diff --git a/__fixtures__/stage/packages/unique-names/verify/schemas/unique_names/procedures/generate_name.sql b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/verify/schemas/unique_names/procedures/generate_name.sql
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/verify/schemas/unique_names/procedures/generate_name.sql
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/verify/schemas/unique_names/procedures/generate_name.sql
diff --git a/__fixtures__/stage/packages/unique-names/verify/schemas/unique_names/schema.sql b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/verify/schemas/unique_names/schema.sql
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/verify/schemas/unique_names/schema.sql
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/verify/schemas/unique_names/schema.sql
diff --git a/__fixtures__/stage/packages/unique-names/verify/schemas/unique_names/tables/words/fixtures/1589271124916_fixture.sql b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/verify/schemas/unique_names/tables/words/fixtures/1589271124916_fixture.sql
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/verify/schemas/unique_names/tables/words/fixtures/1589271124916_fixture.sql
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/verify/schemas/unique_names/tables/words/fixtures/1589271124916_fixture.sql
diff --git a/__fixtures__/stage/packages/unique-names/verify/schemas/unique_names/tables/words/indexes/words_type_idx.sql b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/verify/schemas/unique_names/tables/words/indexes/words_type_idx.sql
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/verify/schemas/unique_names/tables/words/indexes/words_type_idx.sql
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/verify/schemas/unique_names/tables/words/indexes/words_type_idx.sql
diff --git a/__fixtures__/stage/packages/unique-names/verify/schemas/unique_names/tables/words/table.sql b/__fixtures__/sqitch/simple-w-exts/packages/unique-names/verify/schemas/unique_names/tables/words/table.sql
similarity index 100%
rename from __fixtures__/stage/packages/unique-names/verify/schemas/unique_names/tables/words/table.sql
rename to __fixtures__/sqitch/simple-w-exts/packages/unique-names/verify/schemas/unique_names/tables/words/table.sql
diff --git a/__fixtures__/stage/pgpm.json b/__fixtures__/sqitch/simple-w-exts/pgpm.json
similarity index 80%
rename from __fixtures__/stage/pgpm.json
rename to __fixtures__/sqitch/simple-w-exts/pgpm.json
index 9c608c48b..eccf14c7f 100644
--- a/__fixtures__/stage/pgpm.json
+++ b/__fixtures__/sqitch/simple-w-exts/pgpm.json
@@ -1,7 +1,7 @@
{
- "packages":[
+ "packages": [
"packages/*",
"extensions/*",
"extensions/@*/*"
]
-}
\ No newline at end of file
+}
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/Makefile b/__fixtures__/stage/extensions/@pgpm/achievements/Makefile
deleted file mode 100644
index 6e56de539..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-EXTENSION = pgpm-achievements
-DATA = sql/pgpm-achievements--0.14.0.sql
-
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/README.md b/__fixtures__/stage/extensions/@pgpm/achievements/README.md
deleted file mode 100644
index 9a6df9ca1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/README.md
+++ /dev/null
@@ -1,290 +0,0 @@
-# @pgpm/achievements
-
-
-
-
-
-
-
-
-
-
-
-
-
-Achievement system for tracking user progress and milestones.
-
-## Overview
-
-`@pgpm/achievements` provides a comprehensive achievement and progression system for PostgreSQL applications. This package enables automatic tracking of user actions, milestone completion, and level-based progression through trigger-based automation. It integrates with JWT claims for user context and provides a flexible framework for gamification and user engagement.
-
-## Features
-
-- **Level-Based Progression**: Define achievement levels with specific requirements
-- **Automatic Tracking**: Trigger-based achievement counting from any table
-- **User Progress Queries**: Check completion status and remaining requirements
-- **Row-Level Security**: Built-in RLS policies for user data isolation
-- **JWT Integration**: Seamless user context via JWT claims
-- **Flexible Requirements**: Support for multiple requirement types per level
-- **Real-Time Updates**: Automatic achievement tallying via triggers
-
-## Installation
-
-If you have `pgpm` installed:
-
-```bash
-pgpm install @pgpm/achievements
-pgpm deploy
-```
-
-This is a quick way to get started. The sections below provide more detailed installation options.
-
-### Prerequisites
-
-```bash
-# Install pgpm CLI
-npm install -g pgpm
-
-# Start local Postgres (via Docker) and export env vars
-pgpm docker start
-eval "$(pgpm env)"
-```
-
-> **Tip:** Already running Postgres? Skip the Docker step and just export your `PG*` environment variables.
-
-### **Add to an Existing Package**
-
-```bash
-# 1. Install the package
-pgpm install @pgpm/achievements
-
-# 2. Deploy locally
-pgpm deploy
-```
-
-### **Add to a New Project**
-
-```bash
-# 1. Create a workspace
-pgpm init workspace
-
-# 2. Create your first module
-cd my-workspace
-pgpm init
-
-# 3. Install a package
-cd packages/my-module
-pgpm install @pgpm/achievements
-
-# 4. Deploy everything
-pgpm deploy --createdb --database mydb1
-```
-
-## Core Concepts
-
-### Levels
-Define progression stages (e.g., 'newbie', 'intermediate', 'expert') in the `status_public.levels` table.
-
-### Level Requirements
-Specify what actions users must complete for each level in `status_public.level_requirements`:
-- **name**: Action identifier (e.g., 'complete_profile', 'upload_photo')
-- **level**: Which level this requirement belongs to
-- **required_count**: How many times the action must be performed
-- **priority**: Display order for requirements
-
-### User Achievements
-Automatically maintained table tracking user progress in `status_public.user_achievements`:
-- Updated by trigger functions
-- Tallies completion counts per user per action
-- Should not be manually modified
-
-### User Steps
-Individual action records in `status_public.user_steps` for detailed tracking.
-
-## Usage
-
-### Setting Up Levels and Requirements
-
-```sql
--- Create achievement levels
-INSERT INTO status_public.levels (name) VALUES
- ('newbie'),
- ('intermediate'),
- ('expert');
-
--- Define requirements for newbie level
-INSERT INTO status_public.level_requirements (name, level, required_count, priority) VALUES
- ('complete_profile', 'newbie', 1, 1),
- ('upload_photo', 'newbie', 1, 2),
- ('make_first_post', 'newbie', 1, 3);
-
--- Define requirements for intermediate level
-INSERT INTO status_public.level_requirements (name, level, required_count, priority) VALUES
- ('make_first_post', 'intermediate', 10, 1),
- ('receive_likes', 'intermediate', 50, 2);
-```
-
-### Adding Achievement Triggers
-
-Use trigger functions to automatically track achievements when users perform actions:
-
-#### tg_achievement
-Increments achievement on any column change:
-
-```sql
-CREATE TRIGGER track_profile_completion
-AFTER UPDATE ON users
-FOR EACH ROW
-EXECUTE FUNCTION status_private.tg_achievement('bio', 'complete_profile');
-```
-
-#### tg_achievement_toggle
-Increments achievement on NULL → value transition (first-time actions):
-
-```sql
-CREATE TRIGGER track_photo_upload
-AFTER UPDATE ON users
-FOR EACH ROW
-EXECUTE FUNCTION status_private.tg_achievement_toggle('profile_image', 'upload_photo');
-```
-
-#### tg_achievement_boolean
-Increments achievement when column becomes TRUE:
-
-```sql
-CREATE TRIGGER track_email_verification
-AFTER UPDATE ON users
-FOR EACH ROW
-EXECUTE FUNCTION status_private.tg_achievement_boolean('email_verified', 'verify_email');
-```
-
-#### tg_achievement_toggle_boolean
-Increments only on FALSE/NULL → TRUE transition:
-
-```sql
-CREATE TRIGGER track_terms_acceptance
-AFTER UPDATE ON users
-FOR EACH ROW
-EXECUTE FUNCTION status_private.tg_achievement_toggle_boolean('terms_accepted', 'accept_terms');
-```
-
-### Checking User Progress
-
-```sql
--- Check what steps remain for a user to reach a level
-SELECT * FROM status_public.steps_required('newbie', 'user-uuid');
-
--- Check if user has achieved a level
-SELECT status_public.user_achieved('newbie', 'user-uuid');
-
--- View user's current achievements
-SELECT * FROM status_public.user_achievements
-WHERE user_id = 'user-uuid';
-```
-
-### Using JWT Context
-
-The package integrates with `@pgpm/jwt-claims` for automatic user context:
-
-```sql
--- Check current user's progress (uses JWT claims)
-SELECT * FROM status_public.steps_required('newbie');
-
--- Check if current user achieved level
-SELECT status_public.user_achieved('intermediate');
-```
-
-## Functions Reference
-
-### status_public.steps_required(level_name, user_id)
-Returns remaining requirements for a user to complete a level.
-
-**Parameters:**
-- `level_name` (text): Level to check
-- `user_id` (uuid): User identifier (defaults to current JWT user)
-
-**Returns:** Set of level_requirements with remaining counts
-
-### status_public.user_achieved(level_name, user_id)
-Checks if user has completed all requirements for a level.
-
-**Parameters:**
-- `level_name` (text): Level to check
-- `user_id` (uuid): User identifier (defaults to current JWT user)
-
-**Returns:** Boolean indicating completion status
-
-## Trigger Functions
-
-### status_private.tg_achievement(column_name, achievement_name)
-Increments achievement on any column change.
-
-### status_private.tg_achievement_toggle(column_name, achievement_name)
-Increments achievement on NULL → value transition.
-
-### status_private.tg_achievement_boolean(column_name, achievement_name)
-Increments achievement when column becomes TRUE.
-
-### status_private.tg_achievement_toggle_boolean(column_name, achievement_name)
-Increments achievement on FALSE/NULL → TRUE transition.
-
-## Example: Complete Achievement System
-
-```sql
--- 1. Set up levels
-INSERT INTO status_public.levels (name) VALUES ('beginner'), ('pro');
-
--- 2. Define requirements
-INSERT INTO status_public.level_requirements (name, level, required_count, priority) VALUES
- ('complete_profile', 'beginner', 1, 1),
- ('make_post', 'beginner', 3, 2),
- ('make_post', 'pro', 50, 1),
- ('receive_likes', 'pro', 100, 2);
-
--- 3. Add triggers to track actions
-CREATE TRIGGER track_profile
-AFTER UPDATE ON users
-FOR EACH ROW
-EXECUTE FUNCTION status_private.tg_achievement_toggle('bio', 'complete_profile');
-
-CREATE TRIGGER track_posts
-AFTER INSERT ON posts
-FOR EACH ROW
-EXECUTE FUNCTION status_private.tg_achievement('id', 'make_post');
-
-CREATE TRIGGER track_likes
-AFTER INSERT ON likes
-FOR EACH ROW
-EXECUTE FUNCTION status_private.tg_achievement('id', 'receive_likes');
-
--- 4. Check user progress
-SELECT * FROM status_public.steps_required('beginner', 'user-uuid');
-SELECT status_public.user_achieved('beginner', 'user-uuid');
-```
-
-## Dependencies
-
-- `@pgpm/jwt-claims`: JWT claim handling for user context
-- `@pgpm/verify`: Verification utilities
-
-## Testing
-
-```bash
-pnpm test
-```
-
-## Related Tooling
-
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
-* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
-* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
-* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
-
-## Disclaimer
-
-AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED "AS IS", AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND.
-
-No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value.
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/__tests__/__snapshots__/achievements.test.ts.snap b/__fixtures__/stage/extensions/@pgpm/achievements/__tests__/__snapshots__/achievements.test.ts.snap
deleted file mode 100644
index f5bf3e635..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/__tests__/__snapshots__/achievements.test.ts.snap
+++ /dev/null
@@ -1,180 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`advanced 1`] = `
-{
- "advancedRequirements": [
- {
- "id": "[ID]",
- "level": "advanced",
- "name": "invite_users",
- "priority": 100,
- "required_count": 12,
- },
- ],
-}
-`;
-
-exports[`advanced 2`] = `
-{
- "newbieRequirements": [],
-}
-`;
-
-exports[`advanced 3`] = `
-{
- "newbie": {
- "user_achieved": true,
- },
-}
-`;
-
-exports[`advanced 4`] = `
-{
- "advanced": {
- "user_achieved": false,
- },
-}
-`;
-
-exports[`advanced part II 1`] = `
-{
- "advancedRequirements": [
- {
- "id": "[ID]",
- "level": "advanced",
- "name": "invite_users",
- "priority": 100,
- "required_count": 12,
- },
- {
- "id": "[ID]",
- "level": "advanced",
- "name": "complete_action",
- "priority": 100,
- "required_count": 5,
- },
- {
- "id": "[ID]",
- "level": "advanced",
- "name": "apply_for_verifier",
- "priority": 100,
- "required_count": 1,
- },
- {
- "id": "[ID]",
- "level": "advanced",
- "name": "create_action",
- "priority": 100,
- "required_count": 2,
- },
- ],
-}
-`;
-
-exports[`advanced part II 2`] = `
-{
- "newbieRequirements": [],
-}
-`;
-
-exports[`advanced part II 3`] = `
-{
- "newbie": {
- "user_achieved": true,
- },
-}
-`;
-
-exports[`advanced part II 4`] = `
-{
- "advanced": {
- "user_achieved": false,
- },
-}
-`;
-
-exports[`advanced part III 1`] = `
-{
- "advancedRequirements": [],
-}
-`;
-
-exports[`advanced part III 2`] = `
-{
- "newbieRequirements": [],
-}
-`;
-
-exports[`advanced part III 3`] = `
-{
- "newbie": {
- "user_achieved": true,
- },
-}
-`;
-
-exports[`advanced part III 4`] = `
-{
- "advanced": {
- "user_achieved": true,
- },
-}
-`;
-
-exports[`newbie 1`] = `
-{
- "advancedRequirements": [
- {
- "id": "[ID]",
- "level": "advanced",
- "name": "invite_users",
- "priority": 100,
- "required_count": 15,
- },
- {
- "id": "[ID]",
- "level": "advanced",
- "name": "complete_action",
- "priority": 100,
- "required_count": 12,
- },
- ],
-}
-`;
-
-exports[`newbie 2`] = `
-{
- "newbieRequirements": [
- {
- "id": "[ID]",
- "level": "newbie",
- "name": "upload_profile_image",
- "priority": 100,
- "required_count": 1,
- },
- {
- "id": "[ID]",
- "level": "newbie",
- "name": "complete_action",
- "priority": 100,
- "required_count": 2,
- },
- ],
-}
-`;
-
-exports[`newbie 3`] = `
-{
- "newbie": {
- "user_achieved": false,
- },
-}
-`;
-
-exports[`newbie 4`] = `
-{
- "advanced": {
- "user_achieved": false,
- },
-}
-`;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/__tests__/__snapshots__/triggers.test.ts.snap b/__fixtures__/stage/extensions/@pgpm/achievements/__tests__/__snapshots__/triggers.test.ts.snap
deleted file mode 100644
index 4c5180a22..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/__tests__/__snapshots__/triggers.test.ts.snap
+++ /dev/null
@@ -1,112 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`newbie 1`] = `
-{
- "beforeInsert": [],
-}
-`;
-
-exports[`newbie 2`] = `
-{
- "afterFirstInsert": [
- {
- "count": 1,
- "created_at": "[DATE]",
- "id": "[ID]",
- "name": "tg_achievement",
- "user_id": "[ID]",
- },
- ],
-}
-`;
-
-exports[`newbie 3`] = `
-{
- "afterUpdateToggleToValue": [
- {
- "count": 1,
- "created_at": "[DATE]",
- "id": "[ID]",
- "name": "tg_achievement",
- "user_id": "[ID]",
- },
- {
- "count": 1,
- "created_at": "[DATE]",
- "id": "[ID]",
- "name": "tg_achievement_toggle",
- "user_id": "[ID]",
- },
- ],
-}
-`;
-
-exports[`newbie 4`] = `
-{
- "afterUpdateToggleToNull": [
- {
- "count": 1,
- "created_at": "[DATE]",
- "id": "[ID]",
- "name": "tg_achievement",
- "user_id": "[ID]",
- },
- ],
-}
-`;
-
-exports[`newbie 5`] = `
-{
- "afterIsVerifiedIsTrue": [
- {
- "count": 1,
- "created_at": "[DATE]",
- "id": "[ID]",
- "name": "tg_achievement",
- "user_id": "[ID]",
- },
- {
- "count": 1,
- "created_at": "[DATE]",
- "id": "[ID]",
- "name": "tg_achievement_toggle_boolean",
- "user_id": "[ID]",
- },
- ],
-}
-`;
-
-exports[`newbie 6`] = `
-{
- "afterIsVerifiedIsFalse": [
- {
- "count": 1,
- "created_at": "[DATE]",
- "id": "[ID]",
- "name": "tg_achievement",
- "user_id": "[ID]",
- },
- ],
-}
-`;
-
-exports[`newbie 7`] = `
-{
- "afterIsApprovedTrue": [
- {
- "count": 1,
- "created_at": "[DATE]",
- "id": "[ID]",
- "name": "tg_achievement",
- "user_id": "[ID]",
- },
- {
- "count": 1,
- "created_at": "[DATE]",
- "id": "[ID]",
- "name": "tg_achievement_boolean",
- "user_id": "[ID]",
- },
- ],
-}
-`;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/__tests__/achievements.test.ts b/__fixtures__/stage/extensions/@pgpm/achievements/__tests__/achievements.test.ts
deleted file mode 100644
index 6bc1b904f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/__tests__/achievements.test.ts
+++ /dev/null
@@ -1,249 +0,0 @@
-import { getConnections, PgTestClient, snapshot } from 'pgsql-test';
-
-let pg: PgTestClient;
-let teardown: () => Promise;
-
-const user_id = 'b9d22af1-62c7-43a5-b8c4-50630bbd4962';
-
-const repeat = (str: string, n: number): string[] =>
- Array.from({ length: n }).map(() => str);
-
-const levels = ['newbie', 'advanced'];
-
-const newbie = [
- ['upload_profile_image'],
- ['complete_action', 5],
- ['accept_cookies'],
- ['accept_privacy'],
- ['agree_to_terms']
-];
-const advanced = [
- ['invite_users', 15],
- ['complete_action', 15]
-];
-
-beforeAll(async () => {
- ({ pg, teardown } = await getConnections());
-});
-
-afterAll(async () => {
- await teardown();
-});
-
-beforeEach(async () => {
- await pg.beforeEach();
-
- for (const name of levels) {
- await pg.any(`INSERT INTO status_public.levels (name) VALUES ($1)`, [name]);
- }
-
- for (const [name, required_count = 1] of newbie) {
- await pg.any(
- `INSERT INTO status_public.level_requirements (name, level, required_count)
- VALUES ($1, $2, $3)`,
- [name, 'newbie', required_count]
- );
- }
-
- for (const [name, required_count = 1] of advanced) {
- await pg.any(
- `INSERT INTO status_public.level_requirements (name, level, required_count)
- VALUES ($1, $2, $3)`,
- [name, 'advanced', required_count]
- );
- }
-});
-
-afterEach(async () => {
- await pg.afterEach();
-});
-
-it('newbie', async () => {
- const steps = [
- 'agree_to_terms',
- 'accept_cookies',
- 'accept_privacy',
- ...repeat('complete_action', 3)
- ];
- for (const name of steps) {
- await pg.any(
- `INSERT INTO status_public.user_steps (user_id, name) VALUES ($1, $2)`,
- [user_id, name]
- );
- }
-
- const advancedRequirements = await pg.any(
- `SELECT * FROM status_public.steps_required($1, $2)`,
- ['advanced', user_id]
- );
- expect(snapshot({ advancedRequirements })).toMatchSnapshot();
-
- const newbieRequirements = await pg.any(
- `SELECT * FROM status_public.steps_required($1, $2)`,
- ['newbie', user_id]
- );
- expect(snapshot({ newbieRequirements })).toMatchSnapshot();
-
- const [userAchievedNewbie] = await pg.any(
- `SELECT * FROM status_public.user_achieved($1, $2)`,
- ['newbie', user_id]
- );
- expect(snapshot({ newbie: userAchievedNewbie })).toMatchSnapshot();
-
- const [userAchievedAdvanced] = await pg.any(
- `SELECT * FROM status_public.user_achieved($1, $2)`,
- ['advanced', user_id]
- );
- expect(snapshot({ advanced: userAchievedAdvanced })).toMatchSnapshot();
-});
-
-it('advanced', async () => {
- const steps = [
- 'agree_to_terms',
- 'accept_cookies',
- 'accept_privacy',
- 'upload_profile_image',
- ...repeat('invite_users', 3),
- ...repeat('complete_action', 21)
- ];
- for (const name of steps) {
- await pg.any(
- `INSERT INTO status_public.user_steps (user_id, name) VALUES ($1, $2)`,
- [user_id, name]
- );
- }
-
- const advancedRequirements = await pg.any(
- `SELECT * FROM status_public.steps_required($1, $2)`,
- ['advanced', user_id]
- );
- expect(snapshot({ advancedRequirements })).toMatchSnapshot();
-
- const newbieRequirements = await pg.any(
- `SELECT * FROM status_public.steps_required($1, $2)`,
- ['newbie', user_id]
- );
- expect(snapshot({ newbieRequirements })).toMatchSnapshot();
-
- const [userAchievedNewbie] = await pg.any(
- `SELECT * FROM status_public.user_achieved($1, $2)`,
- ['newbie', user_id]
- );
- expect(snapshot({ newbie: userAchievedNewbie })).toMatchSnapshot();
-
- const [userAchievedAdvanced] = await pg.any(
- `SELECT * FROM status_public.user_achieved($1, $2)`,
- ['advanced', user_id]
- );
- expect(snapshot({ advanced: userAchievedAdvanced })).toMatchSnapshot();
-});
-
-it('advanced part II', async () => {
- const partII = [['apply_for_verifier'], ['create_action', 2]];
-
- for (const [name, required_count = 1] of partII) {
- await pg.any(
- `INSERT INTO status_public.level_requirements (name, level, required_count)
- VALUES ($1, $2, $3)`,
- [name, 'advanced', required_count]
- );
- }
-
- const steps = [
- 'agree_to_terms',
- 'accept_cookies',
- 'accept_privacy',
- 'upload_profile_image',
- ...repeat('invite_users', 3),
- ...repeat('complete_action', 10)
- ];
- for (const name of steps) {
- await pg.any(
- `INSERT INTO status_public.user_steps (user_id, name) VALUES ($1, $2)`,
- [user_id, name]
- );
- }
-
- const advancedRequirements = await pg.any(
- `SELECT * FROM status_public.steps_required($1, $2)`,
- ['advanced', user_id]
- );
- expect(snapshot({ advancedRequirements })).toMatchSnapshot();
-
- const newbieRequirements = await pg.any(
- `SELECT * FROM status_public.steps_required($1, $2)`,
- ['newbie', user_id]
- );
- expect(snapshot({ newbieRequirements })).toMatchSnapshot();
-
- const [userAchievedNewbie] = await pg.any(
- `SELECT * FROM status_public.user_achieved($1, $2)`,
- ['newbie', user_id]
- );
- expect(snapshot({ newbie: userAchievedNewbie })).toMatchSnapshot();
-
- const [userAchievedAdvanced] = await pg.any(
- `SELECT * FROM status_public.user_achieved($1, $2)`,
- ['advanced', user_id]
- );
- expect(snapshot({ advanced: userAchievedAdvanced })).toMatchSnapshot();
-});
-
-it('advanced part III', async () => {
- const partIII = [
- ['apply_for_verifier'],
- ['approved_for_verifier'],
- ['create_action', 2]
- ];
-
- for (const [name, required_count = 1] of partIII) {
- await pg.any(
- `INSERT INTO status_public.level_requirements (name, level, required_count)
- VALUES ($1, $2, $3)`,
- [name, 'advanced', required_count]
- );
- }
-
- const steps = [
- 'agree_to_terms',
- 'accept_cookies',
- 'accept_privacy',
- 'upload_profile_image',
- ...repeat('invite_users', 20),
- ...repeat('complete_action', 20),
- ...repeat('create_action', 10),
- ...repeat('apply_for_verifier', 1),
- ...repeat('approved_for_verifier', 1)
- ];
-
- for (const name of steps) {
- await pg.any(
- `INSERT INTO status_public.user_steps (user_id, name) VALUES ($1, $2)`,
- [user_id, name]
- );
- }
-
- const advancedRequirements = await pg.any(
- `SELECT * FROM status_public.steps_required($1, $2)`,
- ['advanced', user_id]
- );
- expect(snapshot({ advancedRequirements })).toMatchSnapshot();
-
- const newbieRequirements = await pg.any(
- `SELECT * FROM status_public.steps_required($1, $2)`,
- ['newbie', user_id]
- );
- expect(snapshot({ newbieRequirements })).toMatchSnapshot();
-
- const [userAchievedNewbie] = await pg.any(
- `SELECT * FROM status_public.user_achieved($1, $2)`,
- ['newbie', user_id]
- );
- expect(snapshot({ newbie: userAchievedNewbie })).toMatchSnapshot();
-
- const [userAchievedAdvanced] = await pg.any(
- `SELECT * FROM status_public.user_achieved($1, $2)`,
- ['advanced', user_id]
- );
- expect(snapshot({ advanced: userAchievedAdvanced })).toMatchSnapshot();
-});
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/__tests__/triggers.test.ts b/__fixtures__/stage/extensions/@pgpm/achievements/__tests__/triggers.test.ts
deleted file mode 100644
index 877408bad..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/__tests__/triggers.test.ts
+++ /dev/null
@@ -1,166 +0,0 @@
-import { getConnections, PgTestClient, snapshot } from 'pgsql-test';
-
-let pg: PgTestClient;
-let teardown: () => Promise;
-
-const user_id = 'b9d22af1-62c7-43a5-b8c4-50630bbd4962';
-
-const levels = ['newbie', 'advanced'];
-
-const newbie = [
- ['upload_profile_image'],
- ['complete_action', 5],
- ['accept_cookies'],
- ['accept_privacy'],
- ['agree_to_terms']
-];
-const advanced = [
- ['invite_users', 15],
- ['complete_action', 15]
-];
-
-beforeAll(async () => {
- ({ pg, teardown } = await getConnections());
-
- await pg.any(`CREATE TABLE status_public.mytable (
- id serial,
- name text,
- toggle text,
- is_approved boolean,
- is_verified boolean default false
- );`);
-
- await pg.any(`CREATE TRIGGER mytable_tg1
- BEFORE INSERT ON status_public.mytable
- FOR EACH ROW
- EXECUTE FUNCTION status_private.tg_achievement('name', 'tg_achievement');`);
-
- await pg.any(`CREATE TRIGGER mytable_tg2
- BEFORE UPDATE ON status_public.mytable
- FOR EACH ROW
- WHEN (NEW.name IS DISTINCT FROM OLD.name)
- EXECUTE FUNCTION status_private.tg_achievement('name', 'tg_achievement');`);
-
- await pg.any(`CREATE TRIGGER mytable_tg3
- BEFORE INSERT ON status_public.mytable
- FOR EACH ROW
- EXECUTE FUNCTION status_private.tg_achievement_toggle('toggle', 'tg_achievement_toggle');`);
-
- await pg.any(`CREATE TRIGGER mytable_tg4
- BEFORE UPDATE ON status_public.mytable
- FOR EACH ROW
- WHEN (NEW.toggle IS DISTINCT FROM OLD.toggle)
- EXECUTE FUNCTION status_private.tg_achievement_toggle('toggle', 'tg_achievement_toggle');`);
-
- await pg.any(`CREATE TRIGGER mytable_tg5
- BEFORE INSERT ON status_public.mytable
- FOR EACH ROW
- EXECUTE FUNCTION status_private.tg_achievement_boolean('is_approved', 'tg_achievement_boolean');`);
-
- await pg.any(`CREATE TRIGGER mytable_tg6
- BEFORE UPDATE ON status_public.mytable
- FOR EACH ROW
- WHEN (NEW.is_approved IS DISTINCT FROM OLD.is_approved)
- EXECUTE FUNCTION status_private.tg_achievement_boolean('is_approved', 'tg_achievement_boolean');`);
-
- await pg.any(`CREATE TRIGGER mytable_tg7
- BEFORE INSERT ON status_public.mytable
- FOR EACH ROW
- EXECUTE FUNCTION status_private.tg_achievement_toggle_boolean('is_verified', 'tg_achievement_toggle_boolean');`);
-
- await pg.any(`CREATE TRIGGER mytable_tg8
- BEFORE UPDATE ON status_public.mytable
- FOR EACH ROW
- WHEN (NEW.is_verified IS DISTINCT FROM OLD.is_verified)
- EXECUTE FUNCTION status_private.tg_achievement_toggle_boolean('is_verified', 'tg_achievement_toggle_boolean');`);
-
- await pg.setContext({
- 'jwt.claims.user_id': user_id
- });
-});
-
-afterAll(async () => {
- await teardown();
-});
-
-beforeEach(async () => {
- await pg.beforeEach();
-
- for (const name of levels) {
- await pg.any(
- `INSERT INTO status_public.levels (name) VALUES ($1) ON CONFLICT DO NOTHING`,
- [name]
- );
- }
-
- for (const [name, required_count = 1] of newbie) {
- await pg.any(
- `INSERT INTO status_public.level_requirements (name, level, required_count)
- VALUES ($1, $2, $3) ON CONFLICT DO NOTHING`,
- [name, 'newbie', required_count]
- );
- }
- for (const [name, required_count = 1] of advanced) {
- await pg.any(
- `INSERT INTO status_public.level_requirements (name, level, required_count)
- VALUES ($1, $2, $3) ON CONFLICT DO NOTHING`,
- [name, 'advanced', required_count]
- );
- }
-});
-
-afterEach(async () => {
- await pg.afterEach();
-});
-
-it('newbie', async () => {
- const beforeInsert = await pg.any(
- `SELECT * FROM status_public.user_achievements ORDER BY name`
- );
- expect(snapshot({ beforeInsert })).toMatchSnapshot();
-
- await pg.any(
- `INSERT INTO status_public.mytable (name) VALUES ($1)`,
- ['upload_profile_image']
- );
-
- const afterFirstInsert = await pg.any(
- `SELECT * FROM status_public.user_achievements ORDER BY name`
- );
- expect(snapshot({ afterFirstInsert })).toMatchSnapshot();
-
- await pg.any(`UPDATE status_public.mytable SET toggle = 'yo'`);
-
- const afterUpdateToggleToValue = await pg.any(
- `SELECT * FROM status_public.user_achievements ORDER BY name`
- );
- expect(snapshot({ afterUpdateToggleToValue })).toMatchSnapshot();
-
- await pg.any(`UPDATE status_public.mytable SET toggle = NULL`);
-
- const afterUpdateToggleToNull = await pg.any(
- `SELECT * FROM status_public.user_achievements ORDER BY name`
- );
- expect(snapshot({ afterUpdateToggleToNull })).toMatchSnapshot();
-
- await pg.any(`UPDATE status_public.mytable SET is_verified = TRUE`);
-
- const afterIsVerifiedIsTrue = await pg.any(
- `SELECT * FROM status_public.user_achievements ORDER BY name`
- );
- expect(snapshot({ afterIsVerifiedIsTrue })).toMatchSnapshot();
-
- await pg.any(`UPDATE status_public.mytable SET is_verified = FALSE`);
-
- const afterIsVerifiedIsFalse = await pg.any(
- `SELECT * FROM status_public.user_achievements ORDER BY name`
- );
- expect(snapshot({ afterIsVerifiedIsFalse })).toMatchSnapshot();
-
- await pg.any(`UPDATE status_public.mytable SET is_approved = TRUE`);
-
- const afterIsApprovedTrue = await pg.any(
- `SELECT * FROM status_public.user_achievements ORDER BY name`
- );
- expect(snapshot({ afterIsApprovedTrue })).toMatchSnapshot();
-});
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/procedures/status_triggers.sql b/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/procedures/status_triggers.sql
deleted file mode 100644
index 62e0686df..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/procedures/status_triggers.sql
+++ /dev/null
@@ -1,148 +0,0 @@
--- Deploy schemas/status_private/procedures/status_triggers to pg
-
--- requires: schemas/status_private/schema
--- requires: schemas/status_private/procedures/user_completed_step
--- requires: schemas/status_private/procedures/user_incompleted_step
-
-BEGIN;
-
-CREATE FUNCTION status_private.tg_achievement ()
- RETURNS TRIGGER
- AS $$
-DECLARE
- is_null boolean;
- task_name text;
-BEGIN
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- task_name = TG_ARGV[1]::text;
- EXECUTE format('SELECT ($1).%s IS NULL', TG_ARGV[0])
- USING NEW INTO is_null;
- IF (is_null IS FALSE) THEN
- PERFORM status_private.user_completed_step(task_name);
- END IF;
- RETURN NEW;
- END IF;
-END;
-$$
-LANGUAGE 'plpgsql'
-VOLATILE;
-
-CREATE FUNCTION status_private.tg_achievement_toggle ()
- RETURNS TRIGGER
- AS $$
-DECLARE
- is_null boolean;
- task_name text;
-BEGIN
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- task_name = TG_ARGV[1]::text;
- EXECUTE format('SELECT ($1).%s IS NULL', TG_ARGV[0])
- USING NEW INTO is_null;
- IF (is_null IS TRUE) THEN
- PERFORM status_private.user_incompleted_step(task_name);
- ELSE
- PERFORM status_private.user_completed_step(task_name);
- END IF;
- RETURN NEW;
- END IF;
-END;
-$$
-LANGUAGE 'plpgsql'
-VOLATILE;
-
-CREATE FUNCTION status_private.tg_achievement_boolean ()
- RETURNS TRIGGER
- AS $$
-DECLARE
- is_true boolean;
- task_name text;
-BEGIN
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- task_name = TG_ARGV[1]::text;
- EXECUTE format('SELECT ($1).%s IS TRUE', TG_ARGV[0])
- USING NEW INTO is_true;
- IF (is_true IS TRUE) THEN
- PERFORM status_private.user_completed_step(task_name);
- END IF;
- RETURN NEW;
- END IF;
-END;
-$$
-LANGUAGE 'plpgsql'
-VOLATILE;
-
-CREATE FUNCTION status_private.tg_achievement_toggle_boolean ()
- RETURNS TRIGGER
- AS $$
-DECLARE
- is_true boolean;
- task_name text;
-BEGIN
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- task_name = TG_ARGV[1]::text;
- EXECUTE format('SELECT ($1).%s IS TRUE', TG_ARGV[0])
- USING NEW INTO is_true;
- IF (is_true IS TRUE) THEN
- PERFORM status_private.user_completed_step(task_name);
- ELSE
- PERFORM status_private.user_incompleted_step(task_name);
- END IF;
- RETURN NEW;
- END IF;
-END;
-$$
-LANGUAGE 'plpgsql'
-VOLATILE;
-
--- CREATE FUNCTION app_private.tg_achievement_using_field ()
--- RETURNS TRIGGER
--- AS $$
--- DECLARE
--- is_null boolean;
--- task_name citext;
--- user_id uuid;
--- BEGIN
--- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
--- task_name = TG_ARGV[1]::citext;
--- EXECUTE format('SELECT ($1).%s IS NULL', TG_ARGV[0])
--- USING NEW INTO is_null;
--- EXECUTE format('SELECT ($1).%s::uuid', TG_ARGV[2])
--- USING NEW INTO user_id;
--- IF (is_null IS FALSE) THEN
--- PERFORM app_private.user_completed_task(task_name, user_id);
--- END IF;
--- RETURN NEW;
--- END IF;
--- END;
--- $$
--- LANGUAGE 'plpgsql'
--- VOLATILE;
-
--- CREATE FUNCTION app_private.tg_achievement_toggle_using_field ()
--- RETURNS TRIGGER
--- AS $$
--- DECLARE
--- is_null boolean;
--- task_name citext;
--- user_id uuid;
--- BEGIN
--- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
--- task_name = TG_ARGV[1]::citext;
--- EXECUTE format('SELECT ($1).%s IS NULL', TG_ARGV[0])
--- USING NEW INTO is_null;
--- EXECUTE format('SELECT ($1).%s::uuid', TG_ARGV[2])
--- USING NEW INTO user_id;
--- IF (is_null IS TRUE) THEN
--- PERFORM app_private.user_incompleted_task(task_name, user_id);
--- ELSE
--- PERFORM app_private.user_completed_task(task_name, user_id);
--- END IF;
--- RETURN NEW;
--- END IF;
--- END;
--- $$
--- LANGUAGE 'plpgsql'
--- VOLATILE;
-
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/procedures/upsert_achievement.sql b/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/procedures/upsert_achievement.sql
deleted file mode 100644
index 8ba8db802..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/procedures/upsert_achievement.sql
+++ /dev/null
@@ -1,24 +0,0 @@
--- Deploy schemas/status_private/procedures/upsert_achievement to pg
-
--- requires: schemas/status_private/schema
--- requires: schemas/status_public/tables/user_achievements/table
-
-BEGIN;
-
-CREATE FUNCTION status_private.upsert_achievement(
- vuser_id uuid, vname text, vcount int
-) returns void as $$
-BEGIN
- INSERT INTO status_public.user_achievements (user_id, name, count)
- VALUES
- (vuser_id, vname, GREATEST(vcount, 0))
- ON CONFLICT ON CONSTRAINT user_achievements_unique_key
- DO UPDATE SET
- -- look ma! you can actually do aliases inside on conflict
- count = user_achievements.count + EXCLUDED.count
- ;
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/procedures/user_completed_step.sql b/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/procedures/user_completed_step.sql
deleted file mode 100644
index c70377db8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/procedures/user_completed_step.sql
+++ /dev/null
@@ -1,16 +0,0 @@
--- Deploy schemas/status_private/procedures/user_completed_step to pg
-
--- requires: schemas/status_private/schema
--- requires: schemas/status_public/tables/user_steps/table
-
-BEGIN;
-
-CREATE FUNCTION status_private.user_completed_step (
- step text,
- user_id uuid DEFAULT jwt_public.current_user_id()
-) RETURNS void AS $EOFCODE$
- INSERT INTO status_public.user_steps ( name, user_id, count )
- VALUES ( step, user_id, 1 );
-$EOFCODE$ LANGUAGE sql VOLATILE SECURITY DEFINER;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/procedures/user_incompleted_step.sql b/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/procedures/user_incompleted_step.sql
deleted file mode 100644
index 8a3cd8caf..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/procedures/user_incompleted_step.sql
+++ /dev/null
@@ -1,22 +0,0 @@
--- Deploy schemas/status_private/procedures/user_incompleted_step to pg
-
--- requires: schemas/status_private/schema
--- requires: schemas/status_public/tables/user_steps/table
-
-BEGIN;
-
-CREATE FUNCTION status_private.user_incompleted_step (
- step text,
- user_id uuid DEFAULT jwt_public.current_user_id()
-) RETURNS void AS $EOFCODE$
-BEGIN
- DELETE FROM status_public.user_steps s
- WHERE s.user_id = user_incompleted_step.user_id
- AND s.name = step;
- DELETE FROM status_public.user_achievements a
- WHERE a.user_id = user_incompleted_step.user_id
- AND a.name = step;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/schema.sql b/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/schema.sql
deleted file mode 100644
index e04f94acd..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_private/schema.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- Deploy schemas/status_private/schema to pg
-
-
-BEGIN;
-
-CREATE SCHEMA IF NOT EXISTS status_private;
-
-GRANT USAGE ON SCHEMA status_private
-TO authenticated, anonymous;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA status_private
-GRANT EXECUTE ON FUNCTIONS
-TO authenticated;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/procedures/steps_required.sql b/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/procedures/steps_required.sql
deleted file mode 100644
index 5ff1dd30d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/procedures/steps_required.sql
+++ /dev/null
@@ -1,59 +0,0 @@
--- Deploy schemas/status_public/procedures/steps_required to pg
-
--- requires: schemas/status_public/schema
--- requires: schemas/status_public/tables/level_requirements/table
--- requires: schemas/status_public/tables/user_achievements/table
-
-BEGIN;
-
--- good for debugging...
-
--- SELECT
--- level_requirements.name,
--- level_requirements.level,
-
--- coalesce(user_achievements.count,0) as completed,
--- level_requirements.required_count as required,
--- -1*(coalesce(user_achievements.count,0)-level_requirements.required_count) as count
-
--- FROM
--- status_public.level_requirements
--- FULL OUTER JOIN status_public.user_achievements ON (
--- user_achievements.name = level_requirements.name
--- AND user_achievements.user_id ='b9d22af1-62c7-43a5-b8c4-50630bbd4962'
--- )
--- JOIN status_public.levels ON (level_requirements.level = levels.name)
--- ;
-
-CREATE FUNCTION status_public.steps_required(
- vlevel text,
- vrole_id uuid DEFAULT jwt_public.current_user_id()
-)
-RETURNS SETOF status_public.level_requirements
- AS $$
-BEGIN
- RETURN QUERY
- SELECT
- level_requirements.id,
- level_requirements.name,
- level_requirements.level,
- -1*(coalesce(user_achievements.count,0)-level_requirements.required_count) as required_count,
- level_requirements.priority
- FROM
- status_public.level_requirements
- FULL OUTER JOIN status_public.user_achievements ON (
- user_achievements.name = level_requirements.name
- AND user_achievements.user_id =vrole_id
- )
- JOIN status_public.levels ON (level_requirements.level = levels.name)
- WHERE
- level_requirements.level = vlevel
- AND -1*(coalesce(user_achievements.count,0)-level_requirements.required_count) > 0
- ORDER BY priority ASC
-;
-END;
-$$
-LANGUAGE 'plpgsql'
-STABLE;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/procedures/user_achieved.sql b/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/procedures/user_achieved.sql
deleted file mode 100644
index cc6167ba7..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/procedures/user_achieved.sql
+++ /dev/null
@@ -1,29 +0,0 @@
--- Deploy schemas/status_public/procedures/user_achieved to pg
-
--- requires: schemas/status_public/schema
--- requires: schemas/status_public/procedures/steps_required
--- requires: schemas/status_public/tables/level_requirements/table
--- requires: schemas/status_public/tables/user_achievements/table
-
-BEGIN;
-
-CREATE FUNCTION status_public.user_achieved(
- vlevel text,
- vrole_id uuid DEFAULT jwt_public.current_user_id()
-) returns boolean as $$
-DECLARE
- c int;
-BEGIN
- SELECT COUNT(*) FROM
- status_public.steps_required(
- vlevel,
- vrole_id
- )
- INTO c;
-
- RETURN c <= 0;
-END;
-$$
-LANGUAGE 'plpgsql' STABLE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/schema.sql b/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/schema.sql
deleted file mode 100644
index fb8db3cac..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/schema.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- Deploy schemas/status_public/schema to pg
-
-
-BEGIN;
-
-CREATE SCHEMA IF NOT EXISTS status_public;
-
-GRANT USAGE ON SCHEMA status_public
-TO authenticated, anonymous;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA status_public
-GRANT EXECUTE ON FUNCTIONS
-TO authenticated;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/level_requirements/table.sql b/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/level_requirements/table.sql
deleted file mode 100644
index 95c80f822..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/level_requirements/table.sql
+++ /dev/null
@@ -1,21 +0,0 @@
--- Deploy schemas/status_public/tables/level_requirements/table to pg
-
--- requires: schemas/status_public/schema
--- requires: schemas/status_public/tables/levels/table
-
-BEGIN;
-
-CREATE TABLE status_public.level_requirements (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- name text NOT NULL,
- level text NOT NULL,
- required_count int DEFAULT 1,
- priority int DEFAULT 100,
- unique(name, level)
-);
-
-COMMENT ON TABLE status_public.level_requirements IS 'Requirements to achieve a level';
-CREATE INDEX ON status_public.level_requirements (name, level, priority);
-GRANT SELECT ON TABLE status_public.levels TO authenticated;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/levels/table.sql b/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/levels/table.sql
deleted file mode 100644
index e39c966d8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/levels/table.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- Deploy schemas/status_public/tables/levels/table to pg
-
--- requires: schemas/status_public/schema
-
-BEGIN;
-
-CREATE TABLE status_public.levels (
- name text NOT NULL PRIMARY KEY
-);
-
-COMMENT ON TABLE status_public.levels IS 'Levels for achievement';
-
-GRANT SELECT ON TABLE status_public.levels TO public;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_achievements/policies/enable_row_level_security.sql b/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_achievements/policies/enable_row_level_security.sql
deleted file mode 100644
index 3565da16d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_achievements/policies/enable_row_level_security.sql
+++ /dev/null
@@ -1,11 +0,0 @@
--- Deploy schemas/status_public/tables/user_achievements/policies/enable_row_level_security to pg
-
--- requires: schemas/status_public/schema
--- requires: schemas/status_public/tables/user_achievements/table
-
-BEGIN;
-
-ALTER TABLE status_public.user_achievements
- ENABLE ROW LEVEL SECURITY;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_achievements/policies/user_achievements_policy.sql b/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_achievements/policies/user_achievements_policy.sql
deleted file mode 100644
index 02008874e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_achievements/policies/user_achievements_policy.sql
+++ /dev/null
@@ -1,38 +0,0 @@
--- Deploy schemas/status_public/tables/user_achievements/policies/user_achievements_policy to pg
-
--- requires: schemas/status_public/schema
--- requires: schemas/status_public/tables/user_achievements/table
--- requires: schemas/status_public/tables/user_achievements/policies/enable_row_level_security
-
-BEGIN;
-
-CREATE POLICY can_select_user_achievements ON status_public.user_achievements
- FOR SELECT
- USING (
- jwt_public.current_user_id() = user_id
- );
-
-CREATE POLICY can_insert_user_achievements ON status_public.user_achievements
- FOR INSERT
- WITH CHECK (
- FALSE
- );
-
-CREATE POLICY can_update_user_achievements ON status_public.user_achievements
- FOR UPDATE
- USING (
- FALSE
- );
-
-CREATE POLICY can_delete_user_achievements ON status_public.user_achievements
- FOR DELETE
- USING (
- FALSE
- );
-
-GRANT INSERT ON TABLE status_public.user_achievements TO authenticated;
-GRANT SELECT ON TABLE status_public.user_achievements TO authenticated;
-GRANT UPDATE ON TABLE status_public.user_achievements TO authenticated;
-GRANT DELETE ON TABLE status_public.user_achievements TO authenticated;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_achievements/table.sql b/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_achievements/table.sql
deleted file mode 100644
index 5796121a4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_achievements/table.sql
+++ /dev/null
@@ -1,20 +0,0 @@
--- Deploy schemas/status_public/tables/user_achievements/table to pg
-
--- requires: schemas/status_public/schema
-
-BEGIN;
-
-CREATE TABLE status_public.user_achievements (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- user_id uuid NOT NULL,
- name text NOT NULL, -- relates to level_requirements.name
- count int NOT NULL DEFAULT 0,
- created_at timestamptz NOT NULL DEFAULT current_timestamp,
- constraint user_achievements_unique_key unique (user_id, name)
-);
-
-COMMENT ON TABLE status_public.user_achievements IS 'This table represents the users progress for particular level requirements, tallying the total count. This table is updated via triggers and should not be updated maually.';
-
-CREATE INDEX ON status_public.user_achievements (user_id, name);
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_levels/table.sql b/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_levels/table.sql
deleted file mode 100644
index 62a5c8446..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_levels/table.sql
+++ /dev/null
@@ -1,20 +0,0 @@
--- Deploy schemas/status_public/tables/user_levels/table to pg
-
--- requires: schemas/status_public/schema
-
-BEGIN;
-
--- NOT using yet, so commented it out for simplicity
-
--- CREATE TABLE status_public.user_levels (
--- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
--- user_id uuid NOT NULL,
--- name text NOT NULL, -- references levels
--- created_at timestamptz NOT NULL DEFAULT current_timestamp
--- );
-
--- COMMENT ON TABLE status_public.user_levels IS 'Cache table of the achieved levels';
-
--- CREATE INDEX ON status_public.user_levels (user_id, name);
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_steps/table.sql b/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_steps/table.sql
deleted file mode 100644
index 2c1791f9b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_steps/table.sql
+++ /dev/null
@@ -1,18 +0,0 @@
--- Deploy schemas/status_public/tables/user_steps/table to pg
-
--- requires: schemas/status_public/schema
-
-BEGIN;
-
-CREATE TABLE status_public.user_steps (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- user_id uuid NOT NULL,
- name text NOT NULL, -- references level_requirement
- count int NOT NULL DEFAULT 1,
- created_at timestamptz NOT NULL DEFAULT current_timestamp
-);
-
-COMMENT ON TABLE status_public.user_steps IS 'The user achieving a requirement for a level. Log table that has every single step ever taken.';
-CREATE INDEX ON status_public.user_steps (user_id, name);
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_steps/triggers/update_achievements_tg.sql b/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_steps/triggers/update_achievements_tg.sql
deleted file mode 100644
index 75abfce39..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/deploy/schemas/status_public/tables/user_steps/triggers/update_achievements_tg.sql
+++ /dev/null
@@ -1,25 +0,0 @@
--- Deploy schemas/status_public/tables/user_steps/triggers/update_achievements_tg to pg
-
--- requires: schemas/status_public/schema
--- requires: schemas/status_public/tables/user_steps/table
--- requires: schemas/status_public/tables/user_achievements/table
--- requires: schemas/status_private/procedures/upsert_achievement
-
-BEGIN;
-
-CREATE FUNCTION status_private.tg_update_achievements_tg()
-RETURNS TRIGGER AS $$
-DECLARE
-BEGIN
- PERFORM status_private.upsert_achievement(NEW.user_id, NEW.name, NEW.count);
- RETURN NEW;
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER;
-
-CREATE TRIGGER update_achievements_tg
-AFTER INSERT ON status_public.user_steps
-FOR EACH ROW
-EXECUTE PROCEDURE status_private.tg_update_achievements_tg ();
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/jest.config.js b/__fixtures__/stage/extensions/@pgpm/achievements/jest.config.js
deleted file mode 100644
index db566b12b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/jest.config.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/** @type {import('ts-jest').JestConfigWithTsJest} */
-module.exports = {
- preset: 'ts-jest',
- testEnvironment: 'node',
- maxWorkers: 1,
-
- // Match both __tests__ and colocated test files
- testMatch: ['**/?(*.)+(test|spec).{ts,tsx,js,jsx}'],
-
- // Ignore build artifacts and type declarations
- testPathIgnorePatterns: ['/dist/', '\\.d\\.ts$'],
- modulePathIgnorePatterns: ['/dist/'],
- watchPathIgnorePatterns: ['/dist/'],
-
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
-};
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/package.json b/__fixtures__/stage/extensions/@pgpm/achievements/package.json
deleted file mode 100644
index 48d9df7fa..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/package.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "name": "@pgpm/achievements",
- "version": "0.15.2",
- "description": "Achievement system for tracking user progress and milestones",
- "author": "Dan Lynch ",
- "contributors": [
- "Constructive "
- ],
- "keywords": [
- "postgresql",
- "pgpm",
- "achievements",
- "gamification"
- ],
- "publishConfig": {
- "access": "public"
- },
- "scripts": {
- "bundle": "pgpm package",
- "test": "jest",
- "test:watch": "jest --watch"
- },
- "dependencies": {
- "@pgpm/jwt-claims": "0.15.2",
- "@pgpm/verify": "0.15.2"
- },
- "devDependencies": {
- "pgpm": "^1.0.0"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/constructive-io/pgpm-modules"
- },
- "homepage": "https://github.com/constructive-io/pgpm-modules",
- "bugs": {
- "url": "https://github.com/constructive-io/pgpm-modules/issues"
- }
-}
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/pgpm-achievements.control b/__fixtures__/stage/extensions/@pgpm/achievements/pgpm-achievements.control
deleted file mode 100644
index 24002ac2b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/pgpm-achievements.control
+++ /dev/null
@@ -1,8 +0,0 @@
-# pgpm-achievements extension
-comment = 'pgpm-achievements extension'
-default_version = '0.14.0'
-module_pathname = '$libdir/pgpm-achievements'
-requires = 'plpgsql,uuid-ossp,pgpm-jwt-claims,pgpm-verify'
-relocatable = false
-superuser = false
-
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/pgpm.plan b/__fixtures__/stage/extensions/@pgpm/achievements/pgpm.plan
deleted file mode 100644
index 7188c50ff..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/pgpm.plan
+++ /dev/null
@@ -1,20 +0,0 @@
-%syntax-version=1.0.0
-%project=pgpm-achievements
-%uri=pgpm-achievements
-
-schemas/status_private/schema [pgpm-jwt-claims:schemas/jwt_public/procedures/current_user_id] 2017-08-11T08:11:51Z skitch # add schemas/status_private/schema
-schemas/status_public/schema 2017-08-11T08:11:51Z skitch # add schemas/status_public/schema
-schemas/status_public/tables/user_steps/table [schemas/status_public/schema] 2017-08-11T08:11:51Z skitch # add schemas/status_public/tables/user_steps/table
-schemas/status_private/procedures/user_completed_step [schemas/status_private/schema schemas/status_public/tables/user_steps/table] 2017-08-11T08:11:51Z skitch # add schemas/status_private/procedures/user_completed_step
-schemas/status_private/procedures/user_incompleted_step [schemas/status_private/schema schemas/status_public/tables/user_steps/table] 2017-08-11T08:11:51Z skitch # add schemas/status_private/procedures/user_incompleted_step
-schemas/status_private/procedures/status_triggers [schemas/status_private/schema schemas/status_private/procedures/user_completed_step schemas/status_private/procedures/user_incompleted_step] 2017-08-11T08:11:51Z skitch # add schemas/status_private/procedures/status_triggers
-schemas/status_public/tables/user_achievements/table [schemas/status_public/schema] 2017-08-11T08:11:51Z skitch # add schemas/status_public/tables/user_achievements/table
-schemas/status_private/procedures/upsert_achievement [schemas/status_private/schema schemas/status_public/tables/user_achievements/table] 2017-08-11T08:11:51Z skitch # add schemas/status_private/procedures/upsert_achievement
-schemas/status_public/tables/levels/table [schemas/status_public/schema] 2017-08-11T08:11:51Z skitch # add schemas/status_public/tables/levels/table
-schemas/status_public/tables/level_requirements/table [schemas/status_public/schema schemas/status_public/tables/levels/table] 2017-08-11T08:11:51Z skitch # add schemas/status_public/tables/level_requirements/table
-schemas/status_public/procedures/steps_required [schemas/status_public/schema schemas/status_public/tables/level_requirements/table schemas/status_public/tables/user_achievements/table] 2017-08-11T08:11:51Z skitch # add schemas/status_public/procedures/steps_required
-schemas/status_public/procedures/user_achieved [schemas/status_public/schema schemas/status_public/procedures/steps_required schemas/status_public/tables/level_requirements/table schemas/status_public/tables/user_achievements/table] 2017-08-11T08:11:51Z skitch # add schemas/status_public/procedures/user_achieved
-schemas/status_public/tables/user_achievements/policies/enable_row_level_security [schemas/status_public/schema schemas/status_public/tables/user_achievements/table] 2017-08-11T08:11:51Z skitch # add schemas/status_public/tables/user_achievements/policies/enable_row_level_security
-schemas/status_public/tables/user_achievements/policies/user_achievements_policy [schemas/status_public/schema schemas/status_public/tables/user_achievements/table schemas/status_public/tables/user_achievements/policies/enable_row_level_security] 2017-08-11T08:11:51Z skitch # add schemas/status_public/tables/user_achievements/policies/user_achievements_policy
-schemas/status_public/tables/user_levels/table [schemas/status_public/schema] 2017-08-11T08:11:51Z skitch # add schemas/status_public/tables/user_levels/table
-schemas/status_public/tables/user_steps/triggers/update_achievements_tg [schemas/status_public/schema schemas/status_public/tables/user_steps/table schemas/status_public/tables/user_achievements/table schemas/status_private/procedures/upsert_achievement] 2017-08-11T08:11:51Z skitch # add schemas/status_public/tables/user_steps/triggers/update_achievements_tg
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/procedures/status_triggers.sql b/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/procedures/status_triggers.sql
deleted file mode 100644
index d6366ad92..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/procedures/status_triggers.sql
+++ /dev/null
@@ -1,10 +0,0 @@
--- Revert schemas/status_private/procedures/status_triggers from pg
-
-BEGIN;
-
-DROP FUNCTION status_private.tg_achievement;
-DROP FUNCTION status_private.tg_achievement_toggle;
-DROP FUNCTION status_private.tg_achievement_boolean;
-DROP FUNCTION status_private.tg_achievement_toggle_boolean;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/procedures/upsert_achievement.sql b/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/procedures/upsert_achievement.sql
deleted file mode 100644
index defa0d47e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/procedures/upsert_achievement.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/status_private/procedures/upsert_achievement from pg
-
-BEGIN;
-
-DROP FUNCTION status_private.upsert_achievement;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/procedures/user_completed_step.sql b/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/procedures/user_completed_step.sql
deleted file mode 100644
index 491e82095..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/procedures/user_completed_step.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/status_private/procedures/user_completed_step from pg
-
-BEGIN;
-
-DROP FUNCTION status_private.user_completed_step;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/procedures/user_incompleted_step.sql b/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/procedures/user_incompleted_step.sql
deleted file mode 100644
index 937e1b177..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/procedures/user_incompleted_step.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/status_private/procedures/user_incompleted_step from pg
-
-BEGIN;
-
-DROP FUNCTION status_private.user_incompleted_step;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/schema.sql b/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/schema.sql
deleted file mode 100644
index 875f1a4db..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_private/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/status_private/schema from pg
-
-BEGIN;
-
-DROP SCHEMA status_private;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/procedures/steps_required.sql b/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/procedures/steps_required.sql
deleted file mode 100644
index 5df0166d4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/procedures/steps_required.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/status_public/procedures/steps_required from pg
-
-BEGIN;
-
-DROP FUNCTION status_public.steps_required;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/procedures/user_achieved.sql b/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/procedures/user_achieved.sql
deleted file mode 100644
index b10e21011..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/procedures/user_achieved.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/status_public/procedures/user_achieved from pg
-
-BEGIN;
-
-DROP FUNCTION status_public.user_achieved;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/schema.sql b/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/schema.sql
deleted file mode 100644
index 22022285f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/status_public/schema from pg
-
-BEGIN;
-
-DROP SCHEMA status_public;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/level_requirements/table.sql b/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/level_requirements/table.sql
deleted file mode 100644
index 749798d46..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/level_requirements/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/status_public/tables/level_requirements/table from pg
-
-BEGIN;
-
-DROP TABLE status_public.level_requirements;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/levels/table.sql b/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/levels/table.sql
deleted file mode 100644
index fd4cd6dd6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/levels/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/status_public/tables/levels/table from pg
-
-BEGIN;
-
-DROP TABLE status_public.levels;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_achievements/policies/enable_row_level_security.sql b/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_achievements/policies/enable_row_level_security.sql
deleted file mode 100644
index 462f9348b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_achievements/policies/enable_row_level_security.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Revert schemas/status_public/tables/user_achievements/policies/enable_row_level_security from pg
-
-BEGIN;
-
-ALTER TABLE status_public.user_achievements
- DISABLE ROW LEVEL SECURITY;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_achievements/policies/user_achievements_policy.sql b/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_achievements/policies/user_achievements_policy.sql
deleted file mode 100644
index 15d8532d8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_achievements/policies/user_achievements_policy.sql
+++ /dev/null
@@ -1,18 +0,0 @@
--- Revert schemas/status_public/tables/user_achievements/policies/user_achievements_policy from pg
-
-BEGIN;
-
-
-REVOKE INSERT ON TABLE status_public.user_achievements FROM authenticated;
-REVOKE SELECT ON TABLE status_public.user_achievements FROM authenticated;
-REVOKE UPDATE ON TABLE status_public.user_achievements FROM authenticated;
-REVOKE DELETE ON TABLE status_public.user_achievements FROM authenticated;
-
-
-DROP POLICY can_select_user_achievements ON status_public.user_achievements;
-DROP POLICY can_insert_user_achievements ON status_public.user_achievements;
-DROP POLICY can_update_user_achievements ON status_public.user_achievements;
-DROP POLICY can_delete_user_achievements ON status_public.user_achievements;
-
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_achievements/table.sql b/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_achievements/table.sql
deleted file mode 100644
index 97553e563..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_achievements/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/status_public/tables/user_achievements/table from pg
-
-BEGIN;
-
-DROP TABLE status_public.user_achievements;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_levels/table.sql b/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_levels/table.sql
deleted file mode 100644
index eb63b7934..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_levels/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/status_public/tables/user_levels/table from pg
-
-BEGIN;
-
--- DROP TABLE status_public.user_levels;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_steps/table.sql b/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_steps/table.sql
deleted file mode 100644
index 46c6a0f3f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_steps/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/status_public/tables/user_steps/table from pg
-
-BEGIN;
-
-DROP TABLE status_public.user_steps;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_steps/triggers/update_achievements_tg.sql b/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_steps/triggers/update_achievements_tg.sql
deleted file mode 100644
index bd79742dd..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/revert/schemas/status_public/tables/user_steps/triggers/update_achievements_tg.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Revert schemas/status_public/tables/user_steps/triggers/update_achievements_tg from pg
-
-BEGIN;
-
-DROP TRIGGER update_achievements_tg ON status_public.user_steps;
-DROP FUNCTION status_private.tg_update_achievements_tg;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/sql/pgpm-achievements--0.14.0.sql b/__fixtures__/stage/extensions/@pgpm/achievements/sql/pgpm-achievements--0.14.0.sql
deleted file mode 100644
index acd543a88..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/sql/pgpm-achievements--0.14.0.sql
+++ /dev/null
@@ -1,264 +0,0 @@
-\echo Use "CREATE EXTENSION pgpm-achievements" to load this file. \quit
-CREATE SCHEMA IF NOT EXISTS status_private;
-
-GRANT USAGE ON SCHEMA status_private TO authenticated, anonymous;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA status_private
- GRANT EXECUTE ON FUNCTIONS TO authenticated;
-
-CREATE SCHEMA IF NOT EXISTS status_public;
-
-GRANT USAGE ON SCHEMA status_public TO authenticated, anonymous;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA status_public
- GRANT EXECUTE ON FUNCTIONS TO authenticated;
-
-CREATE TABLE status_public.user_steps (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id uuid NOT NULL,
- name text NOT NULL,
- count int NOT NULL DEFAULT 1,
- created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP
-);
-
-COMMENT ON TABLE status_public.user_steps IS 'The user achieving a requirement for a level. Log table that has every single step ever taken.';
-
-CREATE INDEX ON status_public.user_steps (user_id, name);
-
-CREATE FUNCTION status_private.user_completed_step(step text, user_id uuid DEFAULT jwt_public.current_user_id()) RETURNS void AS $EOFCODE$
- INSERT INTO status_public.user_steps ( name, user_id, count )
- VALUES ( step, user_id, 1 );
-$EOFCODE$ LANGUAGE sql VOLATILE SECURITY DEFINER;
-
-CREATE FUNCTION status_private.user_incompleted_step(step text, user_id uuid DEFAULT jwt_public.current_user_id()) RETURNS void AS $EOFCODE$
-BEGIN
- DELETE FROM status_public.user_steps s
- WHERE s.user_id = user_incompleted_step.user_id
- AND s.name = step;
- DELETE FROM status_public.user_achievements a
- WHERE a.user_id = user_incompleted_step.user_id
- AND a.name = step;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
-
-CREATE FUNCTION status_private.tg_achievement() RETURNS trigger AS $EOFCODE$
-DECLARE
- is_null boolean;
- task_name text;
-BEGIN
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- task_name = TG_ARGV[1]::text;
- EXECUTE format('SELECT ($1).%s IS NULL', TG_ARGV[0])
- USING NEW INTO is_null;
- IF (is_null IS FALSE) THEN
- PERFORM status_private.user_completed_step(task_name);
- END IF;
- RETURN NEW;
- END IF;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION status_private.tg_achievement_toggle() RETURNS trigger AS $EOFCODE$
-DECLARE
- is_null boolean;
- task_name text;
-BEGIN
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- task_name = TG_ARGV[1]::text;
- EXECUTE format('SELECT ($1).%s IS NULL', TG_ARGV[0])
- USING NEW INTO is_null;
- IF (is_null IS TRUE) THEN
- PERFORM status_private.user_incompleted_step(task_name);
- ELSE
- PERFORM status_private.user_completed_step(task_name);
- END IF;
- RETURN NEW;
- END IF;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION status_private.tg_achievement_boolean() RETURNS trigger AS $EOFCODE$
-DECLARE
- is_true boolean;
- task_name text;
-BEGIN
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- task_name = TG_ARGV[1]::text;
- EXECUTE format('SELECT ($1).%s IS TRUE', TG_ARGV[0])
- USING NEW INTO is_true;
- IF (is_true IS TRUE) THEN
- PERFORM status_private.user_completed_step(task_name);
- END IF;
- RETURN NEW;
- END IF;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION status_private.tg_achievement_toggle_boolean() RETURNS trigger AS $EOFCODE$
-DECLARE
- is_true boolean;
- task_name text;
-BEGIN
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- task_name = TG_ARGV[1]::text;
- EXECUTE format('SELECT ($1).%s IS TRUE', TG_ARGV[0])
- USING NEW INTO is_true;
- IF (is_true IS TRUE) THEN
- PERFORM status_private.user_completed_step(task_name);
- ELSE
- PERFORM status_private.user_incompleted_step(task_name);
- END IF;
- RETURN NEW;
- END IF;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE TABLE status_public.user_achievements (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id uuid NOT NULL,
- name text NOT NULL,
- count int NOT NULL DEFAULT 0,
- created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP,
- CONSTRAINT user_achievements_unique_key
- UNIQUE (user_id, name)
-);
-
-COMMENT ON TABLE status_public.user_achievements IS 'This table represents the users progress for particular level requirements, tallying the total count. This table is updated via triggers and should not be updated maually.';
-
-CREATE INDEX ON status_public.user_achievements (user_id, name);
-
-CREATE FUNCTION status_private.upsert_achievement(vuser_id uuid, vname text, vcount int) RETURNS void AS $EOFCODE$
-BEGIN
- INSERT INTO status_public.user_achievements (user_id, name, count)
- VALUES
- (vuser_id, vname, GREATEST(vcount, 0))
- ON CONFLICT ON CONSTRAINT user_achievements_unique_key
- DO UPDATE SET
- -- look ma! you can actually do aliases inside on conflict
- count = user_achievements.count + EXCLUDED.count
- ;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE TABLE status_public.levels (
- name text NOT NULL PRIMARY KEY
-);
-
-COMMENT ON TABLE status_public.levels IS 'Levels for achievement';
-
-GRANT SELECT ON status_public.levels TO PUBLIC;
-
-CREATE TABLE status_public.level_requirements (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
- name text NOT NULL,
- level text NOT NULL,
- required_count int DEFAULT 1,
- priority int DEFAULT 100,
- UNIQUE (name, level)
-);
-
-COMMENT ON TABLE status_public.level_requirements IS 'Requirements to achieve a level';
-
-CREATE INDEX ON status_public.level_requirements (name, level, priority);
-
-GRANT SELECT ON status_public.levels TO authenticated;
-
-CREATE FUNCTION status_public.steps_required(vlevel text, vrole_id uuid DEFAULT jwt_public.current_user_id()) RETURNS SETOF status_public.level_requirements AS $EOFCODE$
-BEGIN
- RETURN QUERY
- SELECT
- level_requirements.id,
- level_requirements.name,
- level_requirements.level,
- -1*(coalesce(user_achievements.count,0)-level_requirements.required_count) as required_count,
- level_requirements.priority
- FROM
- status_public.level_requirements
- FULL OUTER JOIN status_public.user_achievements ON (
- user_achievements.name = level_requirements.name
- AND user_achievements.user_id =vrole_id
- )
- JOIN status_public.levels ON (level_requirements.level = levels.name)
- WHERE
- level_requirements.level = vlevel
- AND -1*(coalesce(user_achievements.count,0)-level_requirements.required_count) > 0
- ORDER BY priority ASC
-;
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-CREATE FUNCTION status_public.user_achieved(vlevel text, vrole_id uuid DEFAULT jwt_public.current_user_id()) RETURNS boolean AS $EOFCODE$
-DECLARE
- c int;
-BEGIN
- SELECT COUNT(*) FROM
- status_public.steps_required(
- vlevel,
- vrole_id
- )
- INTO c;
-
- RETURN c <= 0;
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-ALTER TABLE status_public.user_achievements
- ENABLE ROW LEVEL SECURITY;
-
-CREATE POLICY can_select_user_achievements
- ON status_public.user_achievements
- AS PERMISSIVE
- FOR SELECT
- TO PUBLIC
- USING (
- jwt_public.current_user_id() = user_id
- );
-
-CREATE POLICY can_insert_user_achievements
- ON status_public.user_achievements
- AS PERMISSIVE
- FOR INSERT
- TO PUBLIC
- WITH CHECK (
- false
- );
-
-CREATE POLICY can_update_user_achievements
- ON status_public.user_achievements
- AS PERMISSIVE
- FOR UPDATE
- TO PUBLIC
- USING (
- false
- );
-
-CREATE POLICY can_delete_user_achievements
- ON status_public.user_achievements
- AS PERMISSIVE
- FOR DELETE
- TO PUBLIC
- USING (
- false
- );
-
-GRANT INSERT ON status_public.user_achievements TO authenticated;
-
-GRANT SELECT ON status_public.user_achievements TO authenticated;
-
-GRANT UPDATE ON status_public.user_achievements TO authenticated;
-
-GRANT DELETE ON status_public.user_achievements TO authenticated;
-
-CREATE FUNCTION status_private.tg_update_achievements_tg() RETURNS trigger AS $EOFCODE$
-DECLARE
-BEGIN
- PERFORM status_private.upsert_achievement(NEW.user_id, NEW.name, NEW.count);
- RETURN NEW;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
-
-CREATE TRIGGER update_achievements_tg
- AFTER INSERT
- ON status_public.user_steps
- FOR EACH ROW
- EXECUTE PROCEDURE status_private.tg_update_achievements_tg();
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/procedures/status_triggers.sql b/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/procedures/status_triggers.sql
deleted file mode 100644
index 37cd8e604..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/procedures/status_triggers.sql
+++ /dev/null
@@ -1,10 +0,0 @@
--- Verify schemas/status_private/procedures/status_triggers on pg
-
-BEGIN;
-
-SELECT verify_function ('status_private.tg_achievement');
-SELECT verify_function ('status_private.tg_achievement_toggle');
-SELECT verify_function ('status_private.tg_achievement_boolean');
-SELECT verify_function ('status_private.tg_achievement_toggle_boolean');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/procedures/upsert_achievement.sql b/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/procedures/upsert_achievement.sql
deleted file mode 100644
index 3ba835177..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/procedures/upsert_achievement.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/status_private/procedures/upsert_achievement on pg
-
-BEGIN;
-
-SELECT verify_function ('status_private.upsert_achievement');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/procedures/user_completed_step.sql b/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/procedures/user_completed_step.sql
deleted file mode 100644
index a230f1760..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/procedures/user_completed_step.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/status_private/procedures/user_completed_step on pg
-
-BEGIN;
-
-SELECT verify_function ('status_private.user_completed_step');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/procedures/user_incompleted_step.sql b/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/procedures/user_incompleted_step.sql
deleted file mode 100644
index 3a23e74db..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/procedures/user_incompleted_step.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/status_private/procedures/user_incompleted_step on pg
-
-BEGIN;
-
-SELECT verify_function ('status_private.user_incompleted_step');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/schema.sql b/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/schema.sql
deleted file mode 100644
index 82af3751a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_private/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/status_private/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('status_private');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/procedures/steps_required.sql b/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/procedures/steps_required.sql
deleted file mode 100644
index 9387279d2..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/procedures/steps_required.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/status_public/procedures/steps_required on pg
-
-BEGIN;
-
-SELECT verify_function ('status_public.steps_required');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/procedures/user_achieved.sql b/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/procedures/user_achieved.sql
deleted file mode 100644
index 8d1733aa6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/procedures/user_achieved.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/status_public/procedures/user_achieved on pg
-
-BEGIN;
-
-SELECT verify_function ('status_public.user_achieved');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/schema.sql b/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/schema.sql
deleted file mode 100644
index 6879a3be8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/status_public/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('status_public');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/level_requirements/table.sql b/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/level_requirements/table.sql
deleted file mode 100644
index b19ac26dd..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/level_requirements/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/status_public/tables/level_requirements/table on pg
-
-BEGIN;
-
-SELECT verify_table ('status_public.level_requirements');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/levels/table.sql b/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/levels/table.sql
deleted file mode 100644
index ccf3db62d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/levels/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/status_public/tables/levels/table on pg
-
-BEGIN;
-
-SELECT verify_table ('status_public.levels');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_achievements/policies/enable_row_level_security.sql b/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_achievements/policies/enable_row_level_security.sql
deleted file mode 100644
index f85f6918b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_achievements/policies/enable_row_level_security.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/status_public/tables/user_achievements/policies/enable_row_level_security on pg
-
-BEGIN;
-
-SELECT verify_security ('status_public.user_achievements');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_achievements/policies/user_achievements_policy.sql b/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_achievements/policies/user_achievements_policy.sql
deleted file mode 100644
index 6c4e11cb4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_achievements/policies/user_achievements_policy.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- Verify schemas/status_public/tables/user_achievements/policies/user_achievements_policy on pg
-
-BEGIN;
-
-SELECT verify_policy ('can_select_user_achievements', 'status_public.user_achievements');
-SELECT verify_policy ('can_insert_user_achievements', 'status_public.user_achievements');
-SELECT verify_policy ('can_update_user_achievements', 'status_public.user_achievements');
-SELECT verify_policy ('can_delete_user_achievements', 'status_public.user_achievements');
-
-SELECT has_table_privilege('authenticated', 'status_public.user_achievements', 'INSERT');
-SELECT has_table_privilege('authenticated', 'status_public.user_achievements', 'SELECT');
-SELECT has_table_privilege('authenticated', 'status_public.user_achievements', 'UPDATE');
-SELECT has_table_privilege('authenticated', 'status_public.user_achievements', 'DELETE');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_achievements/table.sql b/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_achievements/table.sql
deleted file mode 100644
index 0de36f430..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_achievements/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/status_public/tables/user_achievements/table on pg
-
-BEGIN;
-
-SELECT verify_table ('status_public.user_achievements');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_levels/table.sql b/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_levels/table.sql
deleted file mode 100644
index 029f81efe..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_levels/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/status_public/tables/user_levels/table on pg
-
-BEGIN;
-
--- SELECT verify_table ('status_public.user_levels');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_steps/table.sql b/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_steps/table.sql
deleted file mode 100644
index 934c3cddf..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_steps/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/status_public/tables/user_steps/table on pg
-
-BEGIN;
-
-SELECT verify_table ('status_public.user_steps');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_steps/triggers/update_achievements_tg.sql b/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_steps/triggers/update_achievements_tg.sql
deleted file mode 100644
index fdfc82b8c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/achievements/verify/schemas/status_public/tables/user_steps/triggers/update_achievements_tg.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Verify schemas/status_public/tables/user_steps/triggers/update_achievements_tg on pg
-
-BEGIN;
-
-SELECT verify_function ('status_private.tg_update_achievements_tg');
-SELECT verify_trigger ('status_public.update_achievements_tg');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/Makefile b/__fixtures__/stage/extensions/@pgpm/database-jobs/Makefile
deleted file mode 100644
index 66327d381..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-EXTENSION = pgpm-database-jobs
-DATA = sql/pgpm-database-jobs--0.14.0.sql
-
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/README.md b/__fixtures__/stage/extensions/@pgpm/database-jobs/README.md
deleted file mode 100644
index 74ac11bf1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/README.md
+++ /dev/null
@@ -1,363 +0,0 @@
-# @pgpm/database-jobs
-
-
-
-
-
-
-
-
-
-
-
-
-
-Database-specific job handling and queue management.
-
-## Overview
-
-`@pgpm/database-jobs` provides a complete PostgreSQL-based background job processing system with persistent queues, scheduled jobs, and worker management. This package implements a robust job queue system entirely within PostgreSQL, enabling reliable background task processing with features like job locking, retries, priorities, and cron-style scheduling.
-
-## Features
-
-- **Persistent Job Queue**: Store jobs in PostgreSQL with ACID guarantees
-- **Job Scheduling**: Cron-style and rule-based job scheduling
-- **Worker Management**: Multiple workers with job locking and expiry
-- **Priority Queue**: Process jobs by priority and run time
-- **Automatic Retries**: Configurable retry attempts with exponential backoff
-- **Job Keys**: Upsert semantics for idempotent job creation
-- **Queue Management**: Named queues with independent locking
-- **Notifications**: PostgreSQL LISTEN/NOTIFY for real-time job processing
-
-## Installation
-
-If you have `pgpm` installed:
-
-```bash
-pgpm install @pgpm/database-jobs
-pgpm deploy
-```
-
-This is a quick way to get started. The sections below provide more detailed installation options.
-
-### Prerequisites
-
-```bash
-# Install pgpm CLI
-npm install -g pgpm
-
-# Start local Postgres (via Docker) and export env vars
-pgpm docker start
-eval "$(pgpm env)"
-```
-
-> **Tip:** Already running Postgres? Skip the Docker step and just export your `PG*` environment variables.
-
-### **Add to an Existing Package**
-
-```bash
-# 1. Install the package
-pgpm install @pgpm/database-jobs
-
-# 2. Deploy locally
-pgpm deploy
-```
-
-### **Add to a New Project**
-
-```bash
-# 1. Create a workspace
-pgpm init workspace
-
-# 2. Create your first module
-cd my-workspace
-pgpm init
-
-# 3. Install a package
-cd packages/my-module
-pgpm install @pgpm/database-jobs
-
-# 4. Deploy everything
-pgpm deploy --createdb --database mydb1
-```
-
-## Core Concepts
-
-### Jobs Table
-
-The `app_jobs.jobs` table stores active jobs with the following key fields:
-- `id`: Unique job identifier
-- `database_id`: Database/tenant identifier
-- `task_identifier`: Job type/handler name
-- `payload`: JSON data for the job
-- `priority`: Lower numbers = higher priority (default: 0)
-- `run_at`: When the job should run
-- `attempts`: Current attempt count
-- `max_attempts`: Maximum retry attempts (default: 25)
-- `locked_by`: Worker ID that locked this job
-- `locked_at`: When the job was locked
-- `key`: Optional unique key for upsert semantics
-
-### Scheduled Jobs Table
-
-The `app_jobs.scheduled_jobs` table stores recurring jobs with cron-style or rule-based scheduling.
-
-### Job Queues Table
-
-The `app_jobs.job_queues` table tracks queue statistics and locking state.
-
-## Usage
-
-### Adding Jobs
-
-```sql
--- Add a simple job
-SELECT app_jobs.add_job(
- db_id := '5b720132-17d5-424d-9bcb-ee7b17c13d43'::uuid,
- identifier := 'send_email',
- payload := '{"to": "user@example.com", "subject": "Hello"}'::json
-);
-
--- Add a job with priority and delayed execution
-SELECT app_jobs.add_job(
- db_id := '5b720132-17d5-424d-9bcb-ee7b17c13d43'::uuid,
- identifier := 'generate_report',
- payload := '{"report_id": 123}'::json,
- run_at := now() + interval '1 hour',
- priority := 10,
- max_attempts := 5
-);
-
--- Add a job with a unique key (upsert semantics)
-SELECT app_jobs.add_job(
- db_id := '5b720132-17d5-424d-9bcb-ee7b17c13d43'::uuid,
- identifier := 'daily_summary',
- payload := '{"date": "2025-01-15"}'::json,
- job_key := 'daily_summary_2025_01_15',
- queue_name := 'reports'
-);
-```
-
-### Getting Jobs (Worker Side)
-
-```sql
--- Worker fetches next available job
-SELECT * FROM app_jobs.get_job(
- worker_id := 'worker-1',
- task_identifiers := ARRAY['send_email', 'generate_report'],
- job_expiry := interval '4 hours'
-);
-
--- Returns NULL if no jobs available
--- Returns job row if job was successfully locked
-```
-
-### Completing Jobs
-
-```sql
--- Mark job as complete
-SELECT app_jobs.complete_job(
- worker_id := 'worker-1',
- job_id := 123
-);
-```
-
-### Failing Jobs
-
-```sql
--- Mark job as failed (will retry if attempts < max_attempts)
-SELECT app_jobs.fail_job(
- worker_id := 'worker-1',
- job_id := 123,
- error_message := 'Connection timeout'
-);
-```
-
-### Scheduled Jobs
-
-```sql
--- Schedule a job with cron-style timing
-INSERT INTO app_jobs.scheduled_jobs (
- database_id,
- task_identifier,
- payload,
- schedule_info
-) VALUES (
- '5b720132-17d5-424d-9bcb-ee7b17c13d43'::uuid,
- 'cleanup_old_data',
- '{"days": 30}'::json,
- '{
- "hour": [2],
- "minute": [0],
- "dayOfWeek": [0, 1, 2, 3, 4, 5, 6]
- }'::json
-);
-
--- Schedule a job with a rule (every minute for 3 minutes)
-SELECT app_jobs.add_scheduled_job(
- db_id := '5b720132-17d5-424d-9bcb-ee7b17c13d43'::uuid,
- identifier := 'heartbeat',
- payload := '{}'::json,
- schedule_info := json_build_object(
- 'start', now() + interval '10 seconds',
- 'end', now() + interval '3 minutes',
- 'rule', '*/1 * * * *'
- )
-);
-
--- Run a scheduled job (creates a job in the jobs table)
-SELECT * FROM app_jobs.run_scheduled_job(scheduled_job_id := 1);
-```
-
-## Functions Reference
-
-### app_jobs.add_job(...)
-
-Adds a new job to the queue or updates an existing job if a key is provided.
-
-**Parameters:**
-- `db_id` (uuid): Database/tenant identifier
-- `identifier` (text): Job type/handler name
-- `payload` (json): Job data (default: `{}`)
-- `job_key` (text): Optional unique key for upsert (default: NULL)
-- `queue_name` (text): Optional queue name (default: random UUID)
-- `run_at` (timestamptz): When to run (default: now())
-- `max_attempts` (integer): Maximum retries (default: 25)
-- `priority` (integer): Job priority (default: 0)
-
-**Returns:** `app_jobs.jobs` row
-
-**Behavior:**
-- If `job_key` is provided and exists, updates the job (if not locked)
-- If job is locked, removes the key and creates a new job
-- Triggers notifications for workers
-
-### app_jobs.get_job(...)
-
-Fetches and locks the next available job for a worker.
-
-**Parameters:**
-- `worker_id` (text): Unique worker identifier
-- `task_identifiers` (text[]): Optional filter for job types (default: NULL = all)
-- `job_expiry` (interval): How long before locked jobs expire (default: 4 hours)
-
-**Returns:** `app_jobs.jobs` row or NULL
-
-**Behavior:**
-- Selects jobs by priority, run_at, and id
-- Locks the job and its queue
-- Increments attempt counter
-- Uses `FOR UPDATE SKIP LOCKED` for concurrency
-
-### app_jobs.complete_job(...)
-
-Marks a job as successfully completed and removes it from the queue.
-
-**Parameters:**
-- `worker_id` (text): Worker that processed the job
-- `job_id` (bigint): Job identifier
-
-**Returns:** `app_jobs.jobs` row
-
-### app_jobs.fail_job(...)
-
-Marks a job as failed and schedules retry if attempts remain.
-
-**Parameters:**
-- `worker_id` (text): Worker that processed the job
-- `job_id` (bigint): Job identifier
-- `error_message` (text): Error description (default: NULL)
-
-**Returns:** `app_jobs.jobs` row
-
-**Behavior:**
-- Records error message
-- Unlocks the job for retry if attempts < max_attempts
-- Permanently fails if max_attempts reached
-
-### app_jobs.add_scheduled_job(...)
-
-Creates a scheduled job with cron-style or rule-based timing.
-
-**Parameters:**
-- `db_id` (uuid): Database/tenant identifier
-- `identifier` (text): Job type/handler name
-- `payload` (json): Job data
-- `schedule_info` (json): Scheduling configuration
-- `job_key` (text): Optional unique key
-- `queue_name` (text): Optional queue name
-- `max_attempts` (integer): Maximum retries
-- `priority` (integer): Job priority
-
-**Returns:** `app_jobs.scheduled_jobs` row
-
-### app_jobs.run_scheduled_job(...)
-
-Executes a scheduled job by creating a job in the jobs table.
-
-**Parameters:**
-- `scheduled_job_id` (bigint): Scheduled job identifier
-
-**Returns:** `app_jobs.jobs` row
-
-## Job Processing Pattern
-
-```sql
--- Worker loop (simplified)
-LOOP
- -- 1. Get next job
- SELECT * FROM app_jobs.get_job('worker-1', ARRAY['my_task']);
-
- -- 2. Process job
- -- ... application logic ...
-
- -- 3. Mark as complete or failed
- IF success THEN
- SELECT app_jobs.complete_job('worker-1', job_id);
- ELSE
- SELECT app_jobs.fail_job('worker-1', job_id, error_msg);
- END IF;
-END LOOP;
-```
-
-## Triggers and Automation
-
-The package includes several triggers for automatic management:
-
-- **timestamps**: Automatically sets created_at/updated_at
-- **notify_worker**: Sends LISTEN/NOTIFY events when jobs are added
-- **increase_job_queue_count**: Updates queue statistics on insert
-- **decrease_job_queue_count**: Updates queue statistics on delete/update
-
-## Dependencies
-
-- PGPM roles (anonymous, authenticated, administrator)
-- `@pgpm/verify`: Verification utilities for database objects
-
-## Testing
-
-```bash
-pnpm test
-```
-
-The test suite validates:
-- Job creation and retrieval
-- Scheduled job creation with cron and rule-based timing
-- Job key upsert semantics
-- Worker locking and concurrency
-
-## Related Tooling
-
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
-* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
-* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
-* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
-
-## Disclaimer
-
-AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED "AS IS", AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND.
-
-No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value.
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/__tests__/__snapshots__/jobs.test.ts.snap b/__fixtures__/stage/extensions/@pgpm/database-jobs/__tests__/__snapshots__/jobs.test.ts.snap
deleted file mode 100644
index 6aa00ecb3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/__tests__/__snapshots__/jobs.test.ts.snap
+++ /dev/null
@@ -1,19 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`scheduled jobs schedule jobs 1`] = `
-{
- "attempts": 0,
- "database_id": "5b720132-17d5-424d-9bcb-ee7b17c13d43",
- "id": "1",
- "key": null,
- "last_error": null,
- "locked_at": null,
- "locked_by": null,
- "max_attempts": 25,
- "payload": {
- "just": "run it",
- },
- "priority": 0,
- "task_identifier": "my_job",
-}
-`;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/__tests__/jobs.test.ts b/__fixtures__/stage/extensions/@pgpm/database-jobs/__tests__/jobs.test.ts
deleted file mode 100644
index 453de4c04..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/__tests__/jobs.test.ts
+++ /dev/null
@@ -1,138 +0,0 @@
-import { getConnections, PgTestClient } from 'pgsql-test';
-
-let pg: PgTestClient;
-let teardown: () => Promise;
-
-const database_id = '5b720132-17d5-424d-9bcb-ee7b17c13d43';
-const objs: Record = {};
-
-describe('scheduled jobs', () => {
- beforeAll(async () => {
- ({ pg, teardown } = await getConnections());
- });
-
- afterAll(async () => {
- await teardown();
- });
-
- it('schedule jobs by cron', async () => {
- const result = await pg.one(
- `INSERT INTO app_jobs.scheduled_jobs (database_id, task_identifier, schedule_info)
- VALUES ($1, $2, $3)
- RETURNING *`,
- [
- database_id,
- 'my_job',
- {
- hour: Array.from({ length: 23 }, (_, i) => i),
- minute: [0, 15, 30, 45],
- dayOfWeek: Array.from({ length: 6 }, (_, i) => i)
- }
- ]
- );
- objs.scheduled1 = result;
- });
-
- it('schedule jobs by rule', async () => {
- const start = new Date(Date.now() + 10000); // 10s from now
- const end = new Date(start.getTime() + 180000); // +3min
-
- const result = await pg.one(
- `INSERT INTO app_jobs.scheduled_jobs (database_id, task_identifier, payload, schedule_info)
- VALUES ($1, $2, $3, $4)
- RETURNING *`,
- [
- database_id,
- 'my_job',
- { just: 'run it' },
- { start, end, rule: '*/1 * * * *' }
- ]
- );
- objs.scheduled2 = result;
- });
-
- it('schedule jobs', async () => {
- const [result] = await pg.any(
- `SELECT * FROM app_jobs.run_scheduled_job($1)`,
- [objs.scheduled2.id]
- );
-
- const { queue_name, run_at, created_at, updated_at, ...obj } = result;
- expect(obj).toMatchSnapshot();
- });
-
- it('schedule jobs with keys', async () => {
- const start = new Date(Date.now() + 10000); // 10s
- const end = new Date(start.getTime() + 180000); // +3min
-
- const [result] = await pg.any(
- `SELECT * FROM app_jobs.add_scheduled_job(
- db_id := $1::uuid,
- identifier := $2::text,
- payload := $3::json,
- schedule_info := $4::json,
- job_key := $5::text,
- queue_name := $6::text,
- max_attempts := $7::integer,
- priority := $8::integer
- )`,
- [
- database_id,
- 'my_job',
- { just: 'run it' },
- { start, end, rule: '*/1 * * * *' },
- 'new_key',
- null,
- 25,
- 0
- ]
- );
-
- const {
- queue_name,
- run_at,
- created_at,
- updated_at,
- schedule_info: sch,
- start: s1,
- end: d1,
- ...obj
- } = result;
-
- const [result2] = await pg.any(
- `SELECT * FROM app_jobs.add_scheduled_job(
- db_id := $1,
- identifier := $2,
- payload := $3,
- schedule_info := $4,
- job_key := $5,
- queue_name := $6,
- max_attempts := $7,
- priority := $8
- )`,
- [
- database_id,
- 'my_job',
- { just: 'run it' },
- { start, end, rule: '*/1 * * * *' },
- 'new_key',
- null,
- 25,
- 0
- ]
- );
-
- const {
- queue_name: qn,
- created_at: ca,
- updated_at: ua,
- schedule_info: sch2,
- start: s,
- end: e,
- ...obj2
- } = result2;
-
- console.log('First insert:', obj);
- console.log('Duplicate insert (job_key conflict):', obj2);
- });
-});
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/helpers/json_build_object_apply.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/helpers/json_build_object_apply.sql
deleted file mode 100644
index 2a8352488..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/helpers/json_build_object_apply.sql
+++ /dev/null
@@ -1,28 +0,0 @@
--- Deploy schemas/app_jobs/helpers/json_build_object_apply to pg
--- requires: schemas/app_jobs/schema
-
-BEGIN;
-CREATE FUNCTION app_jobs.json_build_object_apply (arguments text[])
- RETURNS json
- AS $$
-DECLARE
- arg text;
- _sql text;
- _res json;
- args text[];
-BEGIN
- _sql = 'SELECT json_build_object(';
- FOR arg IN
- SELECT
- unnest(arguments)
- LOOP
- args = array_append(args, format('''%s''', arg));
- END LOOP;
- _sql = _sql || format('%s);', array_to_string(args, ','));
- EXECUTE _sql INTO _res;
- RETURN _res;
-END;
-$$
-LANGUAGE 'plpgsql';
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/add_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/add_job.sql
deleted file mode 100644
index 3c9598799..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/add_job.sql
+++ /dev/null
@@ -1,103 +0,0 @@
--- Deploy schemas/app_jobs/procedures/add_job to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
--- requires: schemas/app_jobs/tables/job_queues/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.add_job (
- db_id uuid,
- identifier text,
- payload json DEFAULT '{}' ::json,
- job_key text DEFAULT NULL,
- queue_name text DEFAULT NULL,
- run_at timestamptz DEFAULT now(),
- max_attempts integer DEFAULT 25,
- priority integer DEFAULT 0
-)
- RETURNS app_jobs.jobs
- AS $$
-DECLARE
- v_job app_jobs.jobs;
-BEGIN
- IF job_key IS NOT NULL THEN
- -- Upsert job
- INSERT INTO app_jobs.jobs (
- database_id,
- task_identifier,
- payload,
- queue_name,
- run_at,
- max_attempts,
- key,
- priority
- ) VALUES (
- db_id,
- identifier,
- coalesce(payload,
- '{}'::json),
- queue_name,
- coalesce(run_at, now()),
- coalesce(max_attempts, 25),
- job_key,
- coalesce(priority, 0)
- )
- ON CONFLICT (key)
- DO UPDATE SET
- task_identifier = EXCLUDED.task_identifier,
- payload = EXCLUDED.payload,
- queue_name = EXCLUDED.queue_name,
- max_attempts = EXCLUDED.max_attempts,
- run_at = EXCLUDED.run_at,
- priority = EXCLUDED.priority,
- -- always reset error/retry state
- attempts = 0, last_error = NULL
- WHERE
- jobs.locked_at IS NULL
- RETURNING
- * INTO v_job;
-
- -- If upsert succeeded (insert or update), return early
-
- IF NOT (v_job IS NULL) THEN
- RETURN v_job;
- END IF;
-
- -- Upsert failed -> there must be an existing job that is locked. Remove
- -- existing key to allow a new one to be inserted, and prevent any
- -- subsequent retries by bumping attempts to the max allowed.
-
- UPDATE
- app_jobs.jobs
- SET
- KEY = NULL,
- attempts = jobs.max_attempts
- WHERE
- KEY = job_key;
- END IF;
-
- INSERT INTO app_jobs.jobs (
- database_id,
- task_identifier,
- payload,
- queue_name,
- run_at,
- max_attempts,
- priority
- ) VALUES (
- db_id,
- identifier,
- payload,
- queue_name,
- run_at,
- max_attempts,
- priority
- )
- RETURNING * INTO v_job;
-
- RETURN v_job;
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/add_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/add_scheduled_job.sql
deleted file mode 100644
index 1cc20d055..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/add_scheduled_job.sql
+++ /dev/null
@@ -1,97 +0,0 @@
--- Deploy schemas/app_jobs/procedures/add_scheduled_job to pg
-
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/scheduled_jobs/table
-
-BEGIN;
-
-CREATE FUNCTION app_jobs.add_scheduled_job(
- db_id uuid,
- identifier text,
- payload json DEFAULT '{}'::json,
- schedule_info json DEFAULT '{}'::json,
- job_key text DEFAULT NULL,
- queue_name text DEFAULT NULL,
- max_attempts integer DEFAULT 25,
- priority integer DEFAULT 0
-)
- RETURNS app_jobs.scheduled_jobs
- AS $$
-DECLARE
- v_job app_jobs.scheduled_jobs;
-BEGIN
- IF job_key IS NOT NULL THEN
-
- -- Upsert job
- INSERT INTO app_jobs.scheduled_jobs (
- database_id,
- task_identifier,
- payload,
- queue_name,
- schedule_info,
- max_attempts,
- key,
- priority
- ) VALUES (
- db_id,
- identifier,
- coalesce(payload, '{}'::json),
- queue_name,
- schedule_info,
- coalesce(max_attempts, 25),
- job_key,
- coalesce(priority, 0)
- )
- ON CONFLICT (key)
- DO UPDATE SET
- task_identifier = EXCLUDED.task_identifier,
- payload = EXCLUDED.payload,
- queue_name = EXCLUDED.queue_name,
- max_attempts = EXCLUDED.max_attempts,
- schedule_info = EXCLUDED.schedule_info,
- priority = EXCLUDED.priority
- WHERE
- scheduled_jobs.locked_at IS NULL
- RETURNING
- * INTO v_job;
-
- -- If upsert succeeded (insert or update), return early
-
- IF NOT (v_job IS NULL) THEN
- RETURN v_job;
- END IF;
-
- -- Upsert failed -> there must be an existing scheduled job that is locked. Remove
- -- and allow a new one to be inserted
-
- DELETE FROM
- app_jobs.scheduled_jobs
- WHERE
- KEY = job_key;
- END IF;
-
- INSERT INTO app_jobs.scheduled_jobs (
- database_id,
- task_identifier,
- payload,
- queue_name,
- schedule_info,
- max_attempts,
- priority
- ) VALUES (
- db_id,
- identifier,
- payload,
- queue_name,
- schedule_info,
- max_attempts,
- priority
- ) RETURNING * INTO v_job;
- RETURN v_job;
-END;
-$$
-LANGUAGE 'plpgsql'
-VOLATILE
-SECURITY DEFINER;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/complete_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/complete_job.sql
deleted file mode 100644
index afafdbb2b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/complete_job.sql
+++ /dev/null
@@ -1,32 +0,0 @@
--- Deploy schemas/app_jobs/procedures/complete_job to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
--- requires: schemas/app_jobs/tables/job_queues/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.complete_job (worker_id text, job_id bigint)
- RETURNS app_jobs.jobs
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_row app_jobs.jobs;
-BEGIN
- DELETE FROM app_jobs.jobs
- WHERE id = job_id
- RETURNING
- * INTO v_row;
- IF v_row.queue_name IS NOT NULL THEN
- UPDATE
- app_jobs.job_queues
- SET
- locked_by = NULL,
- locked_at = NULL
- WHERE
- queue_name = v_row.queue_name
- AND locked_by = worker_id;
- END IF;
- RETURN v_row;
-END;
-$$;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/complete_jobs.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/complete_jobs.sql
deleted file mode 100644
index 1b14dffc5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/complete_jobs.sql
+++ /dev/null
@@ -1,19 +0,0 @@
--- Deploy schemas/app_jobs/procedures/complete_jobs to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/job_queues/table
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.complete_jobs (job_ids bigint[])
- RETURNS SETOF app_jobs.jobs
- LANGUAGE sql
- AS $$
- DELETE FROM app_jobs.jobs
- WHERE id = ANY (job_ids)
- AND (locked_by IS NULL
- OR locked_at < NOW() - interval '4 hours')
- RETURNING
- *;
-$$;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/do_notify.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/do_notify.sql
deleted file mode 100644
index 82d92525a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/do_notify.sql
+++ /dev/null
@@ -1,16 +0,0 @@
--- Deploy schemas/app_jobs/procedures/do_notify to pg
--- requires: schemas/app_jobs/schema
-
-BEGIN;
-CREATE FUNCTION app_jobs.do_notify ()
- RETURNS TRIGGER
- AS $$
-BEGIN
- PERFORM
- pg_notify(TG_ARGV[0], '');
- RETURN NEW;
-END;
-$$
-LANGUAGE plpgsql;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/fail_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/fail_job.sql
deleted file mode 100644
index a5b38c686..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/fail_job.sql
+++ /dev/null
@@ -1,41 +0,0 @@
--- Deploy schemas/app_jobs/procedures/fail_job to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
--- requires: schemas/app_jobs/tables/job_queues/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.fail_job (worker_id text, job_id bigint, error_message text)
- RETURNS app_jobs.jobs
- LANGUAGE plpgsql
- STRICT
- AS $$
-DECLARE
- v_row app_jobs.jobs;
-BEGIN
- UPDATE
- app_jobs.jobs
- SET
- last_error = error_message,
- run_at = greatest (now(), run_at) + (exp(least (attempts, 10))::text || ' seconds')::interval,
- locked_by = NULL,
- locked_at = NULL
- WHERE
- id = job_id
- AND locked_by = worker_id
- RETURNING
- * INTO v_row;
- IF v_row.queue_name IS NOT NULL THEN
- UPDATE
- app_jobs.job_queues
- SET
- locked_by = NULL,
- locked_at = NULL
- WHERE
- queue_name = v_row.queue_name
- AND locked_by = worker_id;
- END IF;
- RETURN v_row;
-END;
-$$;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/get_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/get_job.sql
deleted file mode 100644
index 9c37d9c94..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/get_job.sql
+++ /dev/null
@@ -1,92 +0,0 @@
--- Deploy schemas/app_jobs/procedures/get_job to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/job_queues/table
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.get_job (worker_id text, task_identifiers text[] DEFAULT NULL, job_expiry interval DEFAULT '4 hours')
- RETURNS app_jobs.jobs
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_job_id bigint;
- v_queue_name text;
- v_row app_jobs.jobs;
- v_now timestamptz = now();
-BEGIN
-
- IF worker_id IS NULL THEN
- RAISE exception 'INVALID_WORKER_ID';
- END IF;
-
- --
-
- SELECT
- jobs.queue_name,
- jobs.id INTO v_queue_name,
- v_job_id
- FROM
- app_jobs.jobs
- WHERE (jobs.locked_at IS NULL
- OR jobs.locked_at < (v_now - job_expiry))
- AND (jobs.queue_name IS NULL
- OR EXISTS (
- SELECT
- 1
- FROM
- app_jobs.job_queues
- WHERE
- job_queues.queue_name = jobs.queue_name
- AND (job_queues.locked_at IS NULL
- OR job_queues.locked_at < (v_now - job_expiry))
- FOR UPDATE
- SKIP LOCKED))
- AND run_at <= v_now
- AND attempts < max_attempts
- AND (task_identifiers IS NULL
- OR task_identifier = ANY (task_identifiers))
- ORDER BY
- priority ASC,
- run_at ASC,
- id ASC
- LIMIT 1
- FOR UPDATE
- SKIP LOCKED;
-
- --
-
- IF v_job_id IS NULL THEN
- RETURN NULL;
- END IF;
-
- --
-
- IF v_queue_name IS NOT NULL THEN
- UPDATE
- app_jobs.job_queues
- SET
- locked_by = worker_id,
- locked_at = v_now
- WHERE
- job_queues.queue_name = v_queue_name;
- END IF;
-
- --
-
- UPDATE
- app_jobs.jobs
- SET
- attempts = attempts + 1,
- locked_by = worker_id,
- locked_at = v_now
- WHERE
- id = v_job_id
- RETURNING
- * INTO v_row;
-
- --
- RETURN v_row;
-END;
-$$;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/get_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/get_scheduled_job.sql
deleted file mode 100644
index b8fa5a664..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/get_scheduled_job.sql
+++ /dev/null
@@ -1,61 +0,0 @@
--- Deploy schemas/app_jobs/procedures/get_scheduled_job to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/scheduled_jobs/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.get_scheduled_job (worker_id text, task_identifiers text[] DEFAULT NULL)
- RETURNS app_jobs.scheduled_jobs
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_job_id bigint;
- v_row app_jobs.scheduled_jobs;
-BEGIN
-
- --
-
- IF worker_id IS NULL THEN
- RAISE exception 'INVALID_WORKER_ID';
- END IF;
-
- --
-
- SELECT
- scheduled_jobs.id INTO v_job_id
- FROM
- app_jobs.scheduled_jobs
- WHERE (scheduled_jobs.locked_at IS NULL)
- AND (task_identifiers IS NULL
- OR task_identifier = ANY (task_identifiers))
- ORDER BY
- priority ASC,
- id ASC
- LIMIT 1
- FOR UPDATE
- SKIP LOCKED;
-
- --
-
- IF v_job_id IS NULL THEN
- RETURN NULL;
- END IF;
-
- --
-
- UPDATE
- app_jobs.scheduled_jobs
- SET
- locked_by = worker_id,
- locked_at = NOW()
- WHERE
- id = v_job_id
- RETURNING
- * INTO v_row;
-
- --
-
- RETURN v_row;
-END;
-$$;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/permanently_fail_jobs.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/permanently_fail_jobs.sql
deleted file mode 100644
index 3c7328062..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/permanently_fail_jobs.sql
+++ /dev/null
@@ -1,24 +0,0 @@
--- Deploy schemas/app_jobs/procedures/permanently_fail_jobs to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/job_queues/table
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.permanently_fail_jobs (job_ids bigint[], error_message text DEFAULT NULL)
- RETURNS SETOF app_jobs.jobs
- LANGUAGE sql
- AS $$
- UPDATE
- app_jobs.jobs
- SET
- last_error = coalesce(error_message, 'Manually marked as failed'),
- attempts = max_attempts
- WHERE
- id = ANY (job_ids)
- AND (locked_by IS NULL
- OR locked_at < NOW() - interval '4 hours')
- RETURNING
- *;
-$$;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/release_jobs.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/release_jobs.sql
deleted file mode 100644
index 2fd063367..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/release_jobs.sql
+++ /dev/null
@@ -1,34 +0,0 @@
--- Deploy schemas/app_jobs/procedures/release_jobs to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
--- requires: schemas/app_jobs/tables/job_queues/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.release_jobs (worker_id text)
- RETURNS void
- AS $$
-DECLARE
-BEGIN
- -- clear the job
- UPDATE
- app_jobs.jobs
- SET
- locked_at = NULL,
- locked_by = NULL,
- attempts = GREATEST (attempts - 1, 0)
- WHERE
- locked_by = worker_id;
- -- clear the queue
- UPDATE
- app_jobs.job_queues
- SET
- locked_at = NULL,
- locked_by = NULL
- WHERE
- locked_by = worker_id;
-END;
-$$
-LANGUAGE 'plpgsql'
-VOLATILE;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/release_scheduled_jobs.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/release_scheduled_jobs.sql
deleted file mode 100644
index ec66b60a1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/release_scheduled_jobs.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- Deploy schemas/app_jobs/procedures/release_scheduled_jobs to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/scheduled_jobs/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.release_scheduled_jobs (worker_id text, ids bigint[] DEFAULT NULL)
- RETURNS void
- AS $$
-DECLARE
-BEGIN
- -- clear the scheduled job
- UPDATE
- app_jobs.scheduled_jobs s
- SET
- locked_at = NULL,
- locked_by = NULL
- WHERE
- locked_by = worker_id
- AND (ids IS NULL
- OR s.id = ANY (ids));
-END;
-$$
-LANGUAGE 'plpgsql'
-VOLATILE;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/reschedule_jobs.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/reschedule_jobs.sql
deleted file mode 100644
index b39d884db..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/reschedule_jobs.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- Deploy schemas/app_jobs/procedures/reschedule_jobs to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
--- NOTE this should be renamed to reset_jobs to avoid confusion of scheduled jobs
-CREATE FUNCTION app_jobs.reschedule_jobs (job_ids bigint[], run_at timestamptz DEFAULT NULL, priority integer DEFAULT NULL, attempts integer DEFAULT NULL, max_attempts integer DEFAULT NULL)
- RETURNS SETOF app_jobs.jobs
- LANGUAGE sql
- AS $$
- UPDATE
- app_jobs.jobs
- SET
- run_at = coalesce(reschedule_jobs.run_at, jobs.run_at),
- priority = coalesce(reschedule_jobs.priority, jobs.priority),
- attempts = coalesce(reschedule_jobs.attempts, jobs.attempts),
- max_attempts = coalesce(reschedule_jobs.max_attempts, jobs.max_attempts)
- WHERE
- id = ANY (job_ids)
- AND (locked_by IS NULL
- OR locked_at < NOW() - interval '4 hours')
- RETURNING
- *;
-$$;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/run_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/run_scheduled_job.sql
deleted file mode 100644
index 41c258b35..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/procedures/run_scheduled_job.sql
+++ /dev/null
@@ -1,78 +0,0 @@
--- Deploy schemas/app_jobs/procedures/run_scheduled_job to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
--- requires: schemas/app_jobs/tables/scheduled_jobs/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.run_scheduled_job (id bigint, job_expiry interval DEFAULT '1 hours')
- RETURNS app_jobs.jobs
- AS $$
-DECLARE
- j app_jobs.jobs;
- last_id bigint;
- lkd_by text;
-BEGIN
- -- check last scheduled
- SELECT
- last_scheduled_id
- FROM
- app_jobs.scheduled_jobs s
- WHERE
- s.id = run_scheduled_job.id INTO last_id;
-
- -- if it's been scheduled check if it's been run
-
- IF (last_id IS NOT NULL) THEN
- SELECT
- locked_by
- FROM
- app_jobs.jobs js
- WHERE
- js.id = last_id
- AND (js.locked_at IS NULL -- never been run
- OR js.locked_at >= (NOW() - job_expiry)
- -- still running within a safe interval
-) INTO lkd_by;
- IF (FOUND) THEN
- RAISE EXCEPTION 'ALREADY_SCHEDULED';
- END IF;
- END IF;
-
- -- insert new job
- INSERT INTO app_jobs.jobs (
- database_id,
- queue_name,
- task_identifier,
- payload,
- priority,
- max_attempts,
- key
- ) SELECT
- database_id,
- queue_name,
- task_identifier,
- payload,
- priority,
- max_attempts,
- key
- FROM
- app_jobs.scheduled_jobs s
- WHERE
- s.id = run_scheduled_job.id
- RETURNING
- * INTO j;
- -- update the scheduled job
- UPDATE
- app_jobs.scheduled_jobs s
- SET
- last_scheduled = NOW(),
- last_scheduled_id = j.id
- WHERE
- s.id = run_scheduled_job.id;
- RETURN j;
-END;
-$$
-LANGUAGE 'plpgsql'
-VOLATILE;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/schema.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/schema.sql
deleted file mode 100644
index 86a5b4eeb..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Deploy schemas/app_jobs/schema to pg
-BEGIN;
-CREATE SCHEMA IF NOT EXISTS app_jobs;
-GRANT USAGE ON SCHEMA app_jobs TO administrator;
-ALTER DEFAULT PRIVILEGES IN SCHEMA app_jobs GRANT EXECUTE ON FUNCTIONS TO administrator;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index 6f0fc3be9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,12 +0,0 @@
--- Deploy schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator to pg
-
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/job_queues/table
-
-BEGIN;
-
--- TODO make sure to require any policies on this table!
-
-GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE app_jobs.job_queues TO administrator;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
deleted file mode 100644
index cc78f18a5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Deploy schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/job_queues/table
-
-BEGIN;
-CREATE INDEX job_queues_locked_by_idx ON app_jobs.job_queues (locked_by);
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/job_queues/table.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/job_queues/table.sql
deleted file mode 100644
index 4ad1305c9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/job_queues/table.sql
+++ /dev/null
@@ -1,12 +0,0 @@
--- Deploy schemas/app_jobs/tables/job_queues/table to pg
--- requires: schemas/app_jobs/schema
-
-BEGIN;
-CREATE TABLE app_jobs.job_queues (
- queue_name text NOT NULL PRIMARY KEY,
- job_count int DEFAULT 0 NOT NULL,
- locked_at timestamptz,
- locked_by text
-);
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index 11a3ac344..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,12 +0,0 @@
--- Deploy schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator to pg
-
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
-
--- TODO make sure to require any policies on this table!
-
-GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE app_jobs.jobs TO administrator;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
deleted file mode 100644
index d41680373..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Deploy schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
-CREATE INDEX jobs_locked_by_idx ON app_jobs.jobs (locked_by);
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
deleted file mode 100644
index 78b03ff13..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Deploy schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
-CREATE INDEX priority_run_at_id_idx ON app_jobs.jobs (priority, run_at, id);
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/table.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/table.sql
deleted file mode 100644
index b5e27f5da..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/table.sql
+++ /dev/null
@@ -1,27 +0,0 @@
--- Deploy schemas/app_jobs/tables/jobs/table to pg
--- requires: schemas/app_jobs/schema
-
-BEGIN;
-CREATE TABLE app_jobs.jobs (
- id bigserial PRIMARY KEY,
- database_id uuid NOT NULL,
- queue_name text DEFAULT (public.gen_random_uuid ()) ::text,
- task_identifier text NOT NULL,
- payload json DEFAULT '{}' ::json NOT NULL,
- priority integer DEFAULT 0 NOT NULL,
- run_at timestamptz DEFAULT now() NOT NULL,
- attempts integer DEFAULT 0 NOT NULL,
- max_attempts integer DEFAULT 25 NOT NULL,
- key text,
- last_error text,
- locked_at timestamptz,
- locked_by text,
- CHECK (length(key) < 513),
- CHECK (length(task_identifier) < 127),
- CHECK (max_attempts > 0),
- CHECK (length(queue_name) < 127),
- CHECK (length(locked_by) > 3),
- UNIQUE (key)
-);
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
deleted file mode 100644
index c87bf7bce..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
+++ /dev/null
@@ -1,45 +0,0 @@
--- Deploy schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.tg_decrease_job_queue_count ()
- RETURNS TRIGGER
- AS $$
-DECLARE
- v_new_job_count int;
-BEGIN
- UPDATE
- app_jobs.job_queues
- SET
- job_count = job_queues.job_count - 1
- WHERE
- queue_name = OLD.queue_name
- RETURNING
- job_count INTO v_new_job_count;
- IF v_new_job_count <= 0 THEN
- DELETE FROM app_jobs.job_queues
- WHERE queue_name = OLD.queue_name
- AND job_count <= 0;
- END IF;
- RETURN OLD;
-END;
-$$
-LANGUAGE 'plpgsql'
-VOLATILE;
-
-CREATE TRIGGER decrease_job_queue_count_on_delete
- AFTER DELETE ON app_jobs.jobs
- FOR EACH ROW
- WHEN ((OLD.queue_name IS NOT NULL))
- EXECUTE PROCEDURE app_jobs.tg_decrease_job_queue_count ();
-
--- only a person would do this...
-CREATE TRIGGER decrease_job_queue_count_on_update
- AFTER UPDATE OF queue_name ON app_jobs.jobs
- FOR EACH ROW
- WHEN (((NEW.queue_name IS DISTINCT FROM OLD.queue_name) AND (OLD.queue_name IS NOT NULL)))
- EXECUTE PROCEDURE app_jobs.tg_decrease_job_queue_count ();
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
deleted file mode 100644
index b25b3f1a7..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
+++ /dev/null
@@ -1,32 +0,0 @@
--- Deploy schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.tg_increase_job_queue_count ()
- RETURNS TRIGGER
- AS $$
-BEGIN
- INSERT INTO app_jobs.job_queues (queue_name, job_count)
- VALUES (NEW.queue_name, 1)
- ON CONFLICT (queue_name)
- DO UPDATE SET
- job_count = job_queues.job_count + 1;
- RETURN NEW;
-END;
-$$
-LANGUAGE 'plpgsql'
-VOLATILE;
-CREATE TRIGGER _500_increase_job_queue_count_on_insert
- AFTER INSERT ON app_jobs.jobs
- FOR EACH ROW
- WHEN ((NEW.queue_name IS NOT NULL))
- EXECUTE PROCEDURE app_jobs.tg_increase_job_queue_count ();
--- only a person would do this
-CREATE TRIGGER _500_increase_job_queue_count_on_update
- AFTER UPDATE OF queue_name ON app_jobs.jobs
- FOR EACH ROW
- WHEN (((NEW.queue_name IS DISTINCT FROM OLD.queue_name) AND (NEW.queue_name IS NOT NULL)))
- EXECUTE PROCEDURE app_jobs.tg_increase_job_queue_count ();
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
deleted file mode 100644
index 9e6cec54c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
+++ /dev/null
@@ -1,13 +0,0 @@
--- Deploy schemas/app_jobs/tables/jobs/triggers/notify_worker to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
--- requires: schemas/app_jobs/procedures/do_notify
--- requires: schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count
-
-BEGIN;
-CREATE TRIGGER _900_notify_worker
- AFTER INSERT ON app_jobs.jobs
- FOR EACH ROW
- EXECUTE PROCEDURE app_jobs.do_notify ('jobs:insert');
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/triggers/timestamps.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
deleted file mode 100644
index b26296953..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
+++ /dev/null
@@ -1,20 +0,0 @@
--- Deploy schemas/app_jobs/tables/jobs/triggers/timestamps to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
--- requires: schemas/app_jobs/triggers/tg_update_timestamps
-
-BEGIN;
-ALTER TABLE app_jobs.jobs
- ADD COLUMN created_at timestamptz;
-ALTER TABLE app_jobs.jobs
- ALTER COLUMN created_at SET DEFAULT NOW();
-ALTER TABLE app_jobs.jobs
- ADD COLUMN updated_at timestamptz;
-ALTER TABLE app_jobs.jobs
- ALTER COLUMN updated_at SET DEFAULT NOW();
-CREATE TRIGGER _100_update_jobs_modtime_tg
- BEFORE UPDATE OR INSERT ON app_jobs.jobs
- FOR EACH ROW
- EXECUTE PROCEDURE app_jobs.tg_update_timestamps ();
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index 914166bd4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,12 +0,0 @@
--- Deploy schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator to pg
-
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/scheduled_jobs/table
-
-BEGIN;
-
--- TODO make sure to require any policies on this table!
-
-GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE app_jobs.scheduled_jobs TO administrator;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
deleted file mode 100644
index d222737ff..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Deploy schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/scheduled_jobs/table
-
-BEGIN;
-CREATE INDEX scheduled_jobs_locked_by_idx ON app_jobs.scheduled_jobs (locked_by);
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
deleted file mode 100644
index 9bd548796..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Deploy schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/scheduled_jobs/table
-
-BEGIN;
-CREATE INDEX scheduled_jobs_priority_id_idx ON app_jobs.scheduled_jobs (priority, id);
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/table.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/table.sql
deleted file mode 100644
index 2f1506fb9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/table.sql
+++ /dev/null
@@ -1,27 +0,0 @@
--- Deploy schemas/app_jobs/tables/scheduled_jobs/table to pg
--- requires: schemas/app_jobs/schema
-
-BEGIN;
-CREATE TABLE app_jobs.scheduled_jobs (
- id bigserial PRIMARY KEY,
- database_id uuid NOT NULL,
- queue_name text DEFAULT (public.gen_random_uuid ()) ::text,
- task_identifier text NOT NULL,
- payload json DEFAULT '{}' ::json NOT NULL,
- priority integer DEFAULT 0 NOT NULL,
- max_attempts integer DEFAULT 25 NOT NULL,
- key text,
- locked_at timestamptz,
- locked_by text,
- schedule_info json NOT NULL,
- last_scheduled timestamptz,
- last_scheduled_id bigint,
- CHECK (length(key) < 513),
- CHECK (length(task_identifier) < 127),
- CHECK (max_attempts > 0),
- CHECK (length(queue_name) < 127),
- CHECK (length(locked_by) > 3),
- UNIQUE (key)
-);
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
deleted file mode 100644
index 51e17d4c0..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
+++ /dev/null
@@ -1,12 +0,0 @@
--- Deploy schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/scheduled_jobs/table
--- requires: schemas/app_jobs/procedures/do_notify
-
-BEGIN;
-CREATE TRIGGER _900_notify_scheduled_job
- AFTER INSERT ON app_jobs.scheduled_jobs
- FOR EACH ROW
- EXECUTE PROCEDURE app_jobs.do_notify ('scheduled_jobs:insert');
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_fields.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
deleted file mode 100644
index a83a8b833..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
+++ /dev/null
@@ -1,50 +0,0 @@
--- Deploy schemas/app_jobs/triggers/tg_add_job_with_fields to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/helpers/json_build_object_apply
-
-BEGIN;
-CREATE FUNCTION app_jobs.trigger_job_with_fields ()
- RETURNS TRIGGER
- AS $$
-DECLARE
- arg text;
- fn text;
- i int;
- args text[];
-BEGIN
- FOR i IN
- SELECT
- *
- FROM
- generate_series(1, TG_NARGS) g (i)
- LOOP
- IF (i = 1) THEN
- fn = TG_ARGV[i - 1];
- ELSE
- args = array_append(args, TG_ARGV[i - 1]);
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- EXECUTE format('SELECT ($1).%s::text', TG_ARGV[i - 1])
- USING NEW INTO arg;
- END IF;
- IF (TG_OP = 'DELETE') THEN
- EXECUTE format('SELECT ($1).%s::text', TG_ARGV[i - 1])
- USING OLD INTO arg;
- END IF;
- args = array_append(args, arg);
- END IF;
- END LOOP;
- PERFORM
- app_jobs.add_job (jwt_private.current_database_id(), fn, app_jobs.json_build_object_apply (args));
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- RETURN NEW;
- END IF;
- IF (TG_OP = 'DELETE') THEN
- RETURN OLD;
- END IF;
-END;
-$$
-LANGUAGE plpgsql
-VOLATILE
-SECURITY DEFINER;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_row.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_row.sql
deleted file mode 100644
index bb619156b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_row.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- Deploy schemas/app_jobs/triggers/tg_add_job_with_row to pg
--- requires: schemas/app_jobs/schema
-
-BEGIN;
-CREATE FUNCTION app_jobs.tg_add_job_with_row ()
- RETURNS TRIGGER
- AS $$
-BEGIN
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- PERFORM
- app_jobs.add_job (jwt_private.current_database_id(), TG_ARGV[0], to_json(NEW));
- RETURN NEW;
- END IF;
- IF (TG_OP = 'DELETE') THEN
- PERFORM
- app_jobs.add_job (jwt_private.current_database_id(), TG_ARGV[0], to_json(OLD));
- RETURN OLD;
- END IF;
-END;
-$$
-LANGUAGE plpgsql
-VOLATILE
-SECURITY DEFINER;
-COMMENT ON FUNCTION app_jobs.tg_add_job_with_row IS E'Useful shortcut to create a job on insert or update. Pass the task name as the trigger argument, and the record data will automatically be available on the JSON payload.';
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
deleted file mode 100644
index faf7c78d3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
+++ /dev/null
@@ -1,27 +0,0 @@
--- Deploy schemas/app_jobs/triggers/tg_add_job_with_row_id to pg
-
--- requires: schemas/app_jobs/schema
-
-BEGIN;
-CREATE FUNCTION app_jobs.tg_add_job_with_row_id ()
- RETURNS TRIGGER
- AS $$
-BEGIN
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- PERFORM
- app_jobs.add_job (jwt_private.current_database_id(), tg_argv[0], json_build_object('id', NEW.id));
- RETURN NEW;
- END IF;
- IF (TG_OP = 'DELETE') THEN
- PERFORM
- app_jobs.add_job (jwt_private.current_database_id(), tg_argv[0], json_build_object('id', OLD.id));
- RETURN OLD;
- END IF;
-END;
-$$
-LANGUAGE plpgsql
-VOLATILE
-SECURITY DEFINER;
-COMMENT ON FUNCTION app_jobs.tg_add_job_with_row_id IS E'Useful shortcut to create a job on insert or update. Pass the task name as the trigger argument, and the record id will automatically be available on the JSON payload.';
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/triggers/tg_update_timestamps.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/triggers/tg_update_timestamps.sql
deleted file mode 100644
index e74c4abfc..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/deploy/schemas/app_jobs/triggers/tg_update_timestamps.sql
+++ /dev/null
@@ -1,21 +0,0 @@
--- Deploy schemas/app_jobs/triggers/tg_update_timestamps to pg
--- requires: schemas/app_jobs/schema
-
-BEGIN;
-CREATE FUNCTION app_jobs.tg_update_timestamps ()
- RETURNS TRIGGER
- AS $$
-BEGIN
- IF TG_OP = 'INSERT' THEN
- NEW.created_at = NOW();
- NEW.updated_at = NOW();
- ELSIF TG_OP = 'UPDATE' THEN
- NEW.created_at = OLD.created_at;
- NEW.updated_at = greatest (now(), OLD.updated_at + interval '1 millisecond');
- END IF;
- RETURN NEW;
-END;
-$$
-LANGUAGE 'plpgsql';
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/package.json b/__fixtures__/stage/extensions/@pgpm/database-jobs/package.json
deleted file mode 100644
index 873c3bd12..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/package.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "name": "@pgpm/database-jobs",
- "version": "0.15.2",
- "description": "Database-specific job handling and queue management",
- "author": "Dan Lynch ",
- "contributors": [
- "Constructive "
- ],
- "keywords": [
- "postgresql",
- "pgpm",
- "jobs",
- "queue"
- ],
- "publishConfig": {
- "access": "public"
- },
- "scripts": {
- "bundle": "pgpm package",
- "test": "jest",
- "test:watch": "jest --watch"
- },
- "devDependencies": {
- "pgpm": "^1.0.0"
- },
- "dependencies": {
- "@pgpm/verify": "0.15.2"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/constructive-io/pgpm-modules"
- },
- "homepage": "https://github.com/constructive-io/pgpm-modules",
- "bugs": {
- "url": "https://github.com/constructive-io/pgpm-modules/issues"
- }
-}
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/pgpm-database-jobs.control b/__fixtures__/stage/extensions/@pgpm/database-jobs/pgpm-database-jobs.control
deleted file mode 100644
index 7c1068fdb..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/pgpm-database-jobs.control
+++ /dev/null
@@ -1,8 +0,0 @@
-# pgpm-database-jobs extension
-comment = 'pgpm-database-jobs extension'
-default_version = '0.14.0'
-module_pathname = '$libdir/pgpm-database-jobs'
-requires = 'plpgsql,uuid-ossp,pgcrypto,pgpm-verify'
-relocatable = false
-superuser = false
-
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/pgpm.plan b/__fixtures__/stage/extensions/@pgpm/database-jobs/pgpm.plan
deleted file mode 100644
index a11426ac3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/pgpm.plan
+++ /dev/null
@@ -1,38 +0,0 @@
-%syntax-version=1.0.0
-%project=pgpm-database-jobs
-%uri=pgpm-database-jobs
-schemas/app_jobs/schema [pgpm-verify:@0.1.0] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/schema
-schemas/app_jobs/triggers/tg_update_timestamps [schemas/app_jobs/schema] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/triggers/tg_update_timestamps
-schemas/app_jobs/triggers/tg_add_job_with_row_id [schemas/app_jobs/schema] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/triggers/tg_add_job_with_row_id
-schemas/app_jobs/triggers/tg_add_job_with_row [schemas/app_jobs/schema] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/triggers/tg_add_job_with_row
-schemas/app_jobs/helpers/json_build_object_apply [schemas/app_jobs/schema] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/helpers/json_build_object_apply
-schemas/app_jobs/triggers/tg_add_job_with_fields [schemas/app_jobs/schema schemas/app_jobs/helpers/json_build_object_apply] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/triggers/tg_add_job_with_fields
-schemas/app_jobs/tables/scheduled_jobs/table [schemas/app_jobs/schema] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/tables/scheduled_jobs/table
-schemas/app_jobs/procedures/do_notify [schemas/app_jobs/schema] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/procedures/do_notify
-schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job [schemas/app_jobs/schema schemas/app_jobs/tables/scheduled_jobs/table schemas/app_jobs/procedures/do_notify] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job
-schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx [schemas/app_jobs/schema schemas/app_jobs/tables/scheduled_jobs/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx
-schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx [schemas/app_jobs/schema schemas/app_jobs/tables/scheduled_jobs/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx
-schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator [schemas/app_jobs/schema schemas/app_jobs/tables/scheduled_jobs/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator
-schemas/app_jobs/tables/jobs/table [schemas/app_jobs/schema] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/tables/jobs/table
-schemas/app_jobs/tables/jobs/triggers/timestamps [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/triggers/tg_update_timestamps] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/tables/jobs/triggers/timestamps
-schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count
-schemas/app_jobs/tables/jobs/triggers/notify_worker [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/procedures/do_notify schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/tables/jobs/triggers/notify_worker
-schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count
-schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx
-schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx
-schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator
-schemas/app_jobs/tables/job_queues/table [schemas/app_jobs/schema] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/tables/job_queues/table
-schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx [schemas/app_jobs/schema schemas/app_jobs/tables/job_queues/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx
-schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator [schemas/app_jobs/schema schemas/app_jobs/tables/job_queues/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator
-schemas/app_jobs/procedures/run_scheduled_job [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/tables/scheduled_jobs/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/procedures/run_scheduled_job
-schemas/app_jobs/procedures/reschedule_jobs [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/procedures/reschedule_jobs
-schemas/app_jobs/procedures/release_scheduled_jobs [schemas/app_jobs/schema schemas/app_jobs/tables/scheduled_jobs/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/procedures/release_scheduled_jobs
-schemas/app_jobs/procedures/release_jobs [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/tables/job_queues/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/procedures/release_jobs
-schemas/app_jobs/procedures/permanently_fail_jobs [schemas/app_jobs/schema schemas/app_jobs/tables/job_queues/table schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/procedures/permanently_fail_jobs
-schemas/app_jobs/procedures/get_scheduled_job [schemas/app_jobs/schema schemas/app_jobs/tables/scheduled_jobs/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/procedures/get_scheduled_job
-schemas/app_jobs/procedures/get_job [schemas/app_jobs/schema schemas/app_jobs/tables/job_queues/table schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/procedures/get_job
-schemas/app_jobs/procedures/fail_job [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/tables/job_queues/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/procedures/fail_job
-schemas/app_jobs/procedures/complete_jobs [schemas/app_jobs/schema schemas/app_jobs/tables/job_queues/table schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/procedures/complete_jobs
-schemas/app_jobs/procedures/complete_job [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/tables/job_queues/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/procedures/complete_job
-schemas/app_jobs/procedures/add_scheduled_job [schemas/app_jobs/schema schemas/app_jobs/tables/scheduled_jobs/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/procedures/add_scheduled_job
-schemas/app_jobs/procedures/add_job [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/tables/job_queues/table] 2025-08-26T23:57:41Z pgpm # add schemas/app_jobs/procedures/add_job
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/helpers/json_build_object_apply.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/helpers/json_build_object_apply.sql
deleted file mode 100644
index b1778898c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/helpers/json_build_object_apply.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/helpers/json_build_object_apply from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.json_build_object_apply;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/add_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/add_job.sql
deleted file mode 100644
index 44a65ae8d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/add_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/add_job from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.add_job;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/add_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/add_scheduled_job.sql
deleted file mode 100644
index 882a98f9d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/add_scheduled_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/add_scheduled_job from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.add_scheduled_job;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/complete_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/complete_job.sql
deleted file mode 100644
index 7c0ea9dfa..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/complete_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/complete_job from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.complete_job;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/complete_jobs.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/complete_jobs.sql
deleted file mode 100644
index 3db9150e3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/complete_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/complete_jobs from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.complete_jobs;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/do_notify.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/do_notify.sql
deleted file mode 100644
index 58a8138a1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/do_notify.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/do_notify from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.do_notify;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/fail_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/fail_job.sql
deleted file mode 100644
index ed96e401e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/fail_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/fail_job from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.fail_job;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/get_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/get_job.sql
deleted file mode 100644
index 469f6b4da..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/get_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/get_job from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.get_job;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/get_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/get_scheduled_job.sql
deleted file mode 100644
index f41f8fdb4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/get_scheduled_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/get_scheduled_job from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.get_scheduled_job;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/permanently_fail_jobs.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/permanently_fail_jobs.sql
deleted file mode 100644
index f0299ea82..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/permanently_fail_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/permanently_fail_jobs from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.permanently_fail_jobs;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/release_jobs.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/release_jobs.sql
deleted file mode 100644
index 8ece69ef1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/release_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/release_jobs from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.release_jobs;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/release_scheduled_jobs.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/release_scheduled_jobs.sql
deleted file mode 100644
index a16e6e9a4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/release_scheduled_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/release_scheduled_jobs from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.release_scheduled_jobs;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/reschedule_jobs.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/reschedule_jobs.sql
deleted file mode 100644
index 34a441716..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/reschedule_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/reschedule_jobs from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.reschedule_jobs;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/run_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/run_scheduled_job.sql
deleted file mode 100644
index 77886fc04..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/procedures/run_scheduled_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/run_scheduled_job from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.run_scheduled_job;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/schema.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/schema.sql
deleted file mode 100644
index 2b238d0fe..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/schema from pg
-
-BEGIN;
-
-DROP SCHEMA app_jobs;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index 06a833789..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator from pg
-
-BEGIN;
-
-REVOKE SELECT, INSERT, UPDATE, DELETE ON TABLE app_jobs.job_queues FROM administrator;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
deleted file mode 100644
index 20290a2a1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx from pg
-
-BEGIN;
-
-DROP INDEX app_jobs.job_queues_locked_by_idx;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/job_queues/table.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/job_queues/table.sql
deleted file mode 100644
index 79c62cbcc..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/job_queues/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/job_queues/table from pg
-
-BEGIN;
-
-DROP TABLE app_jobs.job_queues;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index c67b07e27..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator from pg
-
-BEGIN;
-
-REVOKE SELECT, INSERT, UPDATE, DELETE ON TABLE app_jobs.jobs FROM administrator;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
deleted file mode 100644
index f26cb13e2..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx from pg
-
-BEGIN;
-
-DROP INDEX app_jobs.jobs_locked_by_idx;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
deleted file mode 100644
index 24fa09ac6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx from pg
-
-BEGIN;
-
-DROP INDEX app_jobs.priority_run_at_id_idx;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/table.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/table.sql
deleted file mode 100644
index b4156ad3e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/jobs/table from pg
-
-BEGIN;
-
-DROP TABLE app_jobs.jobs;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
deleted file mode 100644
index bf4f88c6f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count from pg
-BEGIN;
-DROP TRIGGER decrease_job_queue_count_on_delete ON app_jobs.jobs;
-DROP TRIGGER decrease_job_queue_count_on_update ON app_jobs.jobs;
-DROP FUNCTION app_jobs.tg_decrease_job_queue_count;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
deleted file mode 100644
index 5098a6517..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count from pg
-BEGIN;
-DROP TRIGGER _500_increase_job_queue_count_on_insert ON app_jobs.jobs;
-DROP TRIGGER _500_increase_job_queue_count_on_update ON app_jobs.jobs;
-DROP FUNCTION app_jobs.tg_increase_job_queue_count;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
deleted file mode 100644
index 612a02874..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Revert schemas/app_jobs/tables/jobs/triggers/notify_worker from pg
-BEGIN;
-DROP TRIGGER _900_notify_worker ON app_jobs.jobs;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/triggers/timestamps.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
deleted file mode 100644
index 7dc2f048c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
+++ /dev/null
@@ -1,9 +0,0 @@
--- Revert schemas/app_jobs/tables/jobs/triggers/timestamps from pg
-BEGIN;
-ALTER TABLE app_jobs.jobs
- DROP COLUMN created_at;
-ALTER TABLE app_jobs.jobs
- DROP COLUMN updated_at;
-DROP TRIGGER _100_update_jobs_modtime_tg ON app_jobs.jobs;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index 0990e98d6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator from pg
-
-BEGIN;
-
-REVOKE SELECT, INSERT, UPDATE, DELETE ON TABLE app_jobs.scheduled_jobs FROM administrator;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
deleted file mode 100644
index 5ff1e6d50..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx from pg
-
-BEGIN;
-
-DROP INDEX app_jobs.scheduled_jobs_locked_by_idx;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
deleted file mode 100644
index be4b58783..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx from pg
-
-BEGIN;
-
-DROP INDEX app_jobs.scheduled_jobs_priority_id_idx;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/table.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/table.sql
deleted file mode 100644
index 3a06f0da8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/scheduled_jobs/table from pg
-
-BEGIN;
-
-DROP TABLE app_jobs.scheduled_jobs;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
deleted file mode 100644
index 5c1852c7a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Revert schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job from pg
-
-BEGIN;
-
-DROP TRIGGER _900_notify_scheduled_job ON app_jobs.scheduled_jobs;
-
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_fields.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
deleted file mode 100644
index 5384edfc3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/triggers/tg_add_job_with_fields from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.trigger_job_with_fields;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_row.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_row.sql
deleted file mode 100644
index 9d6b68a2c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_row.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/triggers/tg_add_job_with_row from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.tg_add_job_with_row;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
deleted file mode 100644
index 1f0fb04be..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Revert schemas/app_jobs/triggers/tg_add_job_with_row_id from pg
-BEGIN;
-DROP FUNCTION app_jobs.tg_add_job_with_row_id;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/triggers/tg_update_timestamps.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/triggers/tg_update_timestamps.sql
deleted file mode 100644
index 37378b148..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/revert/schemas/app_jobs/triggers/tg_update_timestamps.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/triggers/tg_update_timestamps from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.tg_update_timestamps;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/sql/pgpm-database-jobs--0.14.0.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/sql/pgpm-database-jobs--0.14.0.sql
deleted file mode 100644
index f8dff738b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/sql/pgpm-database-jobs--0.14.0.sql
+++ /dev/null
@@ -1,769 +0,0 @@
-\echo Use "CREATE EXTENSION pgpm-database-jobs" to load this file. \quit
-CREATE SCHEMA IF NOT EXISTS app_jobs;
-
-GRANT USAGE ON SCHEMA app_jobs TO administrator;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA app_jobs
- GRANT EXECUTE ON FUNCTIONS TO administrator;
-
-CREATE FUNCTION app_jobs.tg_update_timestamps() RETURNS trigger AS $EOFCODE$
-BEGIN
- IF TG_OP = 'INSERT' THEN
- NEW.created_at = NOW();
- NEW.updated_at = NOW();
- ELSIF TG_OP = 'UPDATE' THEN
- NEW.created_at = OLD.created_at;
- NEW.updated_at = greatest (now(), OLD.updated_at + interval '1 millisecond');
- END IF;
- RETURN NEW;
-END;
-$EOFCODE$ LANGUAGE plpgsql;
-
-CREATE FUNCTION app_jobs.tg_add_job_with_row_id() RETURNS trigger AS $EOFCODE$
-BEGIN
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- PERFORM
- app_jobs.add_job (jwt_private.current_database_id(), tg_argv[0], json_build_object('id', NEW.id));
- RETURN NEW;
- END IF;
- IF (TG_OP = 'DELETE') THEN
- PERFORM
- app_jobs.add_job (jwt_private.current_database_id(), tg_argv[0], json_build_object('id', OLD.id));
- RETURN OLD;
- END IF;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
-
-COMMENT ON FUNCTION app_jobs.tg_add_job_with_row_id IS 'Useful shortcut to create a job on insert or update. Pass the task name as the trigger argument, and the record id will automatically be available on the JSON payload.';
-
-CREATE FUNCTION app_jobs.tg_add_job_with_row() RETURNS trigger AS $EOFCODE$
-BEGIN
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- PERFORM
- app_jobs.add_job (jwt_private.current_database_id(), TG_ARGV[0], to_json(NEW));
- RETURN NEW;
- END IF;
- IF (TG_OP = 'DELETE') THEN
- PERFORM
- app_jobs.add_job (jwt_private.current_database_id(), TG_ARGV[0], to_json(OLD));
- RETURN OLD;
- END IF;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
-
-COMMENT ON FUNCTION app_jobs.tg_add_job_with_row IS 'Useful shortcut to create a job on insert or update. Pass the task name as the trigger argument, and the record data will automatically be available on the JSON payload.';
-
-CREATE FUNCTION app_jobs.json_build_object_apply(arguments text[]) RETURNS pg_catalog.json AS $EOFCODE$
-DECLARE
- arg text;
- _sql text;
- _res json;
- args text[];
-BEGIN
- _sql = 'SELECT json_build_object(';
- FOR arg IN
- SELECT
- unnest(arguments)
- LOOP
- args = array_append(args, format('''%s''', arg));
- END LOOP;
- _sql = _sql || format('%s);', array_to_string(args, ','));
- EXECUTE _sql INTO _res;
- RETURN _res;
-END;
-$EOFCODE$ LANGUAGE plpgsql;
-
-CREATE FUNCTION app_jobs.trigger_job_with_fields() RETURNS trigger AS $EOFCODE$
-DECLARE
- arg text;
- fn text;
- i int;
- args text[];
-BEGIN
- FOR i IN
- SELECT
- *
- FROM
- generate_series(1, TG_NARGS) g (i)
- LOOP
- IF (i = 1) THEN
- fn = TG_ARGV[i - 1];
- ELSE
- args = array_append(args, TG_ARGV[i - 1]);
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- EXECUTE format('SELECT ($1).%s::text', TG_ARGV[i - 1])
- USING NEW INTO arg;
- END IF;
- IF (TG_OP = 'DELETE') THEN
- EXECUTE format('SELECT ($1).%s::text', TG_ARGV[i - 1])
- USING OLD INTO arg;
- END IF;
- args = array_append(args, arg);
- END IF;
- END LOOP;
- PERFORM
- app_jobs.add_job (jwt_private.current_database_id(), fn, app_jobs.json_build_object_apply (args));
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- RETURN NEW;
- END IF;
- IF (TG_OP = 'DELETE') THEN
- RETURN OLD;
- END IF;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
-
-CREATE TABLE app_jobs.scheduled_jobs (
- id bigserial PRIMARY KEY,
- database_id uuid NOT NULL,
- queue_name text DEFAULT (public.gen_random_uuid())::text,
- task_identifier text NOT NULL,
- payload pg_catalog.json DEFAULT '{}'::json NOT NULL,
- priority int DEFAULT 0 NOT NULL,
- max_attempts int DEFAULT 25 NOT NULL,
- key text,
- locked_at timestamptz,
- locked_by text,
- schedule_info pg_catalog.json NOT NULL,
- last_scheduled timestamptz,
- last_scheduled_id bigint,
- CHECK (length(key) < 513),
- CHECK (length(task_identifier) < 127),
- CHECK (max_attempts > 0),
- CHECK (length(queue_name) < 127),
- CHECK (length(locked_by) > 3),
- UNIQUE (key)
-);
-
-CREATE FUNCTION app_jobs.do_notify() RETURNS trigger AS $EOFCODE$
-BEGIN
- PERFORM
- pg_notify(TG_ARGV[0], '');
- RETURN NEW;
-END;
-$EOFCODE$ LANGUAGE plpgsql;
-
-CREATE TRIGGER _900_notify_scheduled_job
- AFTER INSERT
- ON app_jobs.scheduled_jobs
- FOR EACH ROW
- EXECUTE PROCEDURE app_jobs.do_notify('scheduled_jobs:insert');
-
-CREATE INDEX scheduled_jobs_priority_id_idx ON app_jobs.scheduled_jobs (priority, id);
-
-CREATE INDEX scheduled_jobs_locked_by_idx ON app_jobs.scheduled_jobs (locked_by);
-
-GRANT SELECT, INSERT, UPDATE, DELETE ON app_jobs.scheduled_jobs TO administrator;
-
-CREATE TABLE app_jobs.jobs (
- id bigserial PRIMARY KEY,
- database_id uuid NOT NULL,
- queue_name text DEFAULT (public.gen_random_uuid())::text,
- task_identifier text NOT NULL,
- payload pg_catalog.json DEFAULT '{}'::json NOT NULL,
- priority int DEFAULT 0 NOT NULL,
- run_at timestamptz DEFAULT now() NOT NULL,
- attempts int DEFAULT 0 NOT NULL,
- max_attempts int DEFAULT 25 NOT NULL,
- key text,
- last_error text,
- locked_at timestamptz,
- locked_by text,
- CHECK (length(key) < 513),
- CHECK (length(task_identifier) < 127),
- CHECK (max_attempts > 0),
- CHECK (length(queue_name) < 127),
- CHECK (length(locked_by) > 3),
- UNIQUE (key)
-);
-
-ALTER TABLE app_jobs.jobs
- ADD COLUMN created_at timestamptz;
-
-ALTER TABLE app_jobs.jobs
- ALTER COLUMN created_at SET DEFAULT now();
-
-ALTER TABLE app_jobs.jobs
- ADD COLUMN updated_at timestamptz;
-
-ALTER TABLE app_jobs.jobs
- ALTER COLUMN updated_at SET DEFAULT now();
-
-CREATE TRIGGER _100_update_jobs_modtime_tg
- BEFORE INSERT OR UPDATE
- ON app_jobs.jobs
- FOR EACH ROW
- EXECUTE PROCEDURE app_jobs.tg_update_timestamps();
-
-CREATE FUNCTION app_jobs.tg_increase_job_queue_count() RETURNS trigger AS $EOFCODE$
-BEGIN
- INSERT INTO app_jobs.job_queues (queue_name, job_count)
- VALUES (NEW.queue_name, 1)
- ON CONFLICT (queue_name)
- DO UPDATE SET
- job_count = job_queues.job_count + 1;
- RETURN NEW;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE TRIGGER _500_increase_job_queue_count_on_insert
- AFTER INSERT
- ON app_jobs.jobs
- FOR EACH ROW
- WHEN (new.queue_name IS NOT NULL)
- EXECUTE PROCEDURE app_jobs.tg_increase_job_queue_count();
-
-CREATE TRIGGER _500_increase_job_queue_count_on_update
- AFTER UPDATE OF queue_name
- ON app_jobs.jobs
- FOR EACH ROW
- WHEN (new.queue_name IS DISTINCT FROM old.queue_name
- AND new.queue_name IS NOT NULL)
- EXECUTE PROCEDURE app_jobs.tg_increase_job_queue_count();
-
-CREATE TRIGGER _900_notify_worker
- AFTER INSERT
- ON app_jobs.jobs
- FOR EACH ROW
- EXECUTE PROCEDURE app_jobs.do_notify('jobs:insert');
-
-CREATE FUNCTION app_jobs.tg_decrease_job_queue_count() RETURNS trigger AS $EOFCODE$
-DECLARE
- v_new_job_count int;
-BEGIN
- UPDATE
- app_jobs.job_queues
- SET
- job_count = job_queues.job_count - 1
- WHERE
- queue_name = OLD.queue_name
- RETURNING
- job_count INTO v_new_job_count;
- IF v_new_job_count <= 0 THEN
- DELETE FROM app_jobs.job_queues
- WHERE queue_name = OLD.queue_name
- AND job_count <= 0;
- END IF;
- RETURN OLD;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE TRIGGER decrease_job_queue_count_on_delete
- AFTER DELETE
- ON app_jobs.jobs
- FOR EACH ROW
- WHEN (old.queue_name IS NOT NULL)
- EXECUTE PROCEDURE app_jobs.tg_decrease_job_queue_count();
-
-CREATE TRIGGER decrease_job_queue_count_on_update
- AFTER UPDATE OF queue_name
- ON app_jobs.jobs
- FOR EACH ROW
- WHEN (new.queue_name IS DISTINCT FROM old.queue_name
- AND old.queue_name IS NOT NULL)
- EXECUTE PROCEDURE app_jobs.tg_decrease_job_queue_count();
-
-CREATE INDEX priority_run_at_id_idx ON app_jobs.jobs (priority, run_at, id);
-
-CREATE INDEX jobs_locked_by_idx ON app_jobs.jobs (locked_by);
-
-GRANT SELECT, INSERT, UPDATE, DELETE ON app_jobs.jobs TO administrator;
-
-CREATE TABLE app_jobs.job_queues (
- queue_name text NOT NULL PRIMARY KEY,
- job_count int DEFAULT 0 NOT NULL,
- locked_at timestamptz,
- locked_by text
-);
-
-CREATE INDEX job_queues_locked_by_idx ON app_jobs.job_queues (locked_by);
-
-GRANT SELECT, INSERT, UPDATE, DELETE ON app_jobs.job_queues TO administrator;
-
-CREATE FUNCTION app_jobs.run_scheduled_job(id bigint, job_expiry interval DEFAULT '1 hours') RETURNS app_jobs.jobs AS $EOFCODE$
-DECLARE
- j app_jobs.jobs;
- last_id bigint;
- lkd_by text;
-BEGIN
- -- check last scheduled
- SELECT
- last_scheduled_id
- FROM
- app_jobs.scheduled_jobs s
- WHERE
- s.id = run_scheduled_job.id INTO last_id;
-
- -- if it's been scheduled check if it's been run
-
- IF (last_id IS NOT NULL) THEN
- SELECT
- locked_by
- FROM
- app_jobs.jobs js
- WHERE
- js.id = last_id
- AND (js.locked_at IS NULL -- never been run
- OR js.locked_at >= (NOW() - job_expiry)
- -- still running within a safe interval
-) INTO lkd_by;
- IF (FOUND) THEN
- RAISE EXCEPTION 'ALREADY_SCHEDULED';
- END IF;
- END IF;
-
- -- insert new job
- INSERT INTO app_jobs.jobs (
- database_id,
- queue_name,
- task_identifier,
- payload,
- priority,
- max_attempts,
- key
- ) SELECT
- database_id,
- queue_name,
- task_identifier,
- payload,
- priority,
- max_attempts,
- key
- FROM
- app_jobs.scheduled_jobs s
- WHERE
- s.id = run_scheduled_job.id
- RETURNING
- * INTO j;
- -- update the scheduled job
- UPDATE
- app_jobs.scheduled_jobs s
- SET
- last_scheduled = NOW(),
- last_scheduled_id = j.id
- WHERE
- s.id = run_scheduled_job.id;
- RETURN j;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION app_jobs.reschedule_jobs(job_ids bigint[], run_at timestamptz DEFAULT NULL, priority int DEFAULT NULL, attempts int DEFAULT NULL, max_attempts int DEFAULT NULL) RETURNS SETOF app_jobs.jobs LANGUAGE sql AS $EOFCODE$
- UPDATE
- app_jobs.jobs
- SET
- run_at = coalesce(reschedule_jobs.run_at, jobs.run_at),
- priority = coalesce(reschedule_jobs.priority, jobs.priority),
- attempts = coalesce(reschedule_jobs.attempts, jobs.attempts),
- max_attempts = coalesce(reschedule_jobs.max_attempts, jobs.max_attempts)
- WHERE
- id = ANY (job_ids)
- AND (locked_by IS NULL
- OR locked_at < NOW() - interval '4 hours')
- RETURNING
- *;
-$EOFCODE$;
-
-CREATE FUNCTION app_jobs.release_scheduled_jobs(worker_id text, ids bigint[] DEFAULT NULL) RETURNS void AS $EOFCODE$
-DECLARE
-BEGIN
- -- clear the scheduled job
- UPDATE
- app_jobs.scheduled_jobs s
- SET
- locked_at = NULL,
- locked_by = NULL
- WHERE
- locked_by = worker_id
- AND (ids IS NULL
- OR s.id = ANY (ids));
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION app_jobs.release_jobs(worker_id text) RETURNS void AS $EOFCODE$
-DECLARE
-BEGIN
- -- clear the job
- UPDATE
- app_jobs.jobs
- SET
- locked_at = NULL,
- locked_by = NULL,
- attempts = GREATEST (attempts - 1, 0)
- WHERE
- locked_by = worker_id;
- -- clear the queue
- UPDATE
- app_jobs.job_queues
- SET
- locked_at = NULL,
- locked_by = NULL
- WHERE
- locked_by = worker_id;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION app_jobs.permanently_fail_jobs(job_ids bigint[], error_message text DEFAULT NULL) RETURNS SETOF app_jobs.jobs LANGUAGE sql AS $EOFCODE$
- UPDATE
- app_jobs.jobs
- SET
- last_error = coalesce(error_message, 'Manually marked as failed'),
- attempts = max_attempts
- WHERE
- id = ANY (job_ids)
- AND (locked_by IS NULL
- OR locked_at < NOW() - interval '4 hours')
- RETURNING
- *;
-$EOFCODE$;
-
-CREATE FUNCTION app_jobs.get_scheduled_job(worker_id text, task_identifiers text[] DEFAULT NULL) RETURNS app_jobs.scheduled_jobs LANGUAGE plpgsql AS $EOFCODE$
-DECLARE
- v_job_id bigint;
- v_row app_jobs.scheduled_jobs;
-BEGIN
-
- --
-
- IF worker_id IS NULL THEN
- RAISE exception 'INVALID_WORKER_ID';
- END IF;
-
- --
-
- SELECT
- scheduled_jobs.id INTO v_job_id
- FROM
- app_jobs.scheduled_jobs
- WHERE (scheduled_jobs.locked_at IS NULL)
- AND (task_identifiers IS NULL
- OR task_identifier = ANY (task_identifiers))
- ORDER BY
- priority ASC,
- id ASC
- LIMIT 1
- FOR UPDATE
- SKIP LOCKED;
-
- --
-
- IF v_job_id IS NULL THEN
- RETURN NULL;
- END IF;
-
- --
-
- UPDATE
- app_jobs.scheduled_jobs
- SET
- locked_by = worker_id,
- locked_at = NOW()
- WHERE
- id = v_job_id
- RETURNING
- * INTO v_row;
-
- --
-
- RETURN v_row;
-END;
-$EOFCODE$;
-
-CREATE FUNCTION app_jobs.get_job(worker_id text, task_identifiers text[] DEFAULT NULL, job_expiry interval DEFAULT '4 hours') RETURNS app_jobs.jobs LANGUAGE plpgsql AS $EOFCODE$
-DECLARE
- v_job_id bigint;
- v_queue_name text;
- v_row app_jobs.jobs;
- v_now timestamptz = now();
-BEGIN
-
- IF worker_id IS NULL THEN
- RAISE exception 'INVALID_WORKER_ID';
- END IF;
-
- --
-
- SELECT
- jobs.queue_name,
- jobs.id INTO v_queue_name,
- v_job_id
- FROM
- app_jobs.jobs
- WHERE (jobs.locked_at IS NULL
- OR jobs.locked_at < (v_now - job_expiry))
- AND (jobs.queue_name IS NULL
- OR EXISTS (
- SELECT
- 1
- FROM
- app_jobs.job_queues
- WHERE
- job_queues.queue_name = jobs.queue_name
- AND (job_queues.locked_at IS NULL
- OR job_queues.locked_at < (v_now - job_expiry))
- FOR UPDATE
- SKIP LOCKED))
- AND run_at <= v_now
- AND attempts < max_attempts
- AND (task_identifiers IS NULL
- OR task_identifier = ANY (task_identifiers))
- ORDER BY
- priority ASC,
- run_at ASC,
- id ASC
- LIMIT 1
- FOR UPDATE
- SKIP LOCKED;
-
- --
-
- IF v_job_id IS NULL THEN
- RETURN NULL;
- END IF;
-
- --
-
- IF v_queue_name IS NOT NULL THEN
- UPDATE
- app_jobs.job_queues
- SET
- locked_by = worker_id,
- locked_at = v_now
- WHERE
- job_queues.queue_name = v_queue_name;
- END IF;
-
- --
-
- UPDATE
- app_jobs.jobs
- SET
- attempts = attempts + 1,
- locked_by = worker_id,
- locked_at = v_now
- WHERE
- id = v_job_id
- RETURNING
- * INTO v_row;
-
- --
- RETURN v_row;
-END;
-$EOFCODE$;
-
-CREATE FUNCTION app_jobs.fail_job(worker_id text, job_id bigint, error_message text) RETURNS app_jobs.jobs LANGUAGE plpgsql STRICT AS $EOFCODE$
-DECLARE
- v_row app_jobs.jobs;
-BEGIN
- UPDATE
- app_jobs.jobs
- SET
- last_error = error_message,
- run_at = greatest (now(), run_at) + (exp(least (attempts, 10))::text || ' seconds')::interval,
- locked_by = NULL,
- locked_at = NULL
- WHERE
- id = job_id
- AND locked_by = worker_id
- RETURNING
- * INTO v_row;
- IF v_row.queue_name IS NOT NULL THEN
- UPDATE
- app_jobs.job_queues
- SET
- locked_by = NULL,
- locked_at = NULL
- WHERE
- queue_name = v_row.queue_name
- AND locked_by = worker_id;
- END IF;
- RETURN v_row;
-END;
-$EOFCODE$;
-
-CREATE FUNCTION app_jobs.complete_jobs(job_ids bigint[]) RETURNS SETOF app_jobs.jobs LANGUAGE sql AS $EOFCODE$
- DELETE FROM app_jobs.jobs
- WHERE id = ANY (job_ids)
- AND (locked_by IS NULL
- OR locked_at < NOW() - interval '4 hours')
- RETURNING
- *;
-$EOFCODE$;
-
-CREATE FUNCTION app_jobs.complete_job(worker_id text, job_id bigint) RETURNS app_jobs.jobs LANGUAGE plpgsql AS $EOFCODE$
-DECLARE
- v_row app_jobs.jobs;
-BEGIN
- DELETE FROM app_jobs.jobs
- WHERE id = job_id
- RETURNING
- * INTO v_row;
- IF v_row.queue_name IS NOT NULL THEN
- UPDATE
- app_jobs.job_queues
- SET
- locked_by = NULL,
- locked_at = NULL
- WHERE
- queue_name = v_row.queue_name
- AND locked_by = worker_id;
- END IF;
- RETURN v_row;
-END;
-$EOFCODE$;
-
-CREATE FUNCTION app_jobs.add_scheduled_job(db_id uuid, identifier text, payload pg_catalog.json DEFAULT '{}'::json, schedule_info pg_catalog.json DEFAULT '{}'::json, job_key text DEFAULT NULL, queue_name text DEFAULT NULL, max_attempts int DEFAULT 25, priority int DEFAULT 0) RETURNS app_jobs.scheduled_jobs AS $EOFCODE$
-DECLARE
- v_job app_jobs.scheduled_jobs;
-BEGIN
- IF job_key IS NOT NULL THEN
-
- -- Upsert job
- INSERT INTO app_jobs.scheduled_jobs (
- database_id,
- task_identifier,
- payload,
- queue_name,
- schedule_info,
- max_attempts,
- key,
- priority
- ) VALUES (
- db_id,
- identifier,
- coalesce(payload, '{}'::json),
- queue_name,
- schedule_info,
- coalesce(max_attempts, 25),
- job_key,
- coalesce(priority, 0)
- )
- ON CONFLICT (key)
- DO UPDATE SET
- task_identifier = EXCLUDED.task_identifier,
- payload = EXCLUDED.payload,
- queue_name = EXCLUDED.queue_name,
- max_attempts = EXCLUDED.max_attempts,
- schedule_info = EXCLUDED.schedule_info,
- priority = EXCLUDED.priority
- WHERE
- scheduled_jobs.locked_at IS NULL
- RETURNING
- * INTO v_job;
-
- -- If upsert succeeded (insert or update), return early
-
- IF NOT (v_job IS NULL) THEN
- RETURN v_job;
- END IF;
-
- -- Upsert failed -> there must be an existing scheduled job that is locked. Remove
- -- and allow a new one to be inserted
-
- DELETE FROM
- app_jobs.scheduled_jobs
- WHERE
- KEY = job_key;
- END IF;
-
- INSERT INTO app_jobs.scheduled_jobs (
- database_id,
- task_identifier,
- payload,
- queue_name,
- schedule_info,
- max_attempts,
- priority
- ) VALUES (
- db_id,
- identifier,
- payload,
- queue_name,
- schedule_info,
- max_attempts,
- priority
- ) RETURNING * INTO v_job;
- RETURN v_job;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
-
-CREATE FUNCTION app_jobs.add_job(db_id uuid, identifier text, payload pg_catalog.json DEFAULT '{}'::json, job_key text DEFAULT NULL, queue_name text DEFAULT NULL, run_at timestamptz DEFAULT now(), max_attempts int DEFAULT 25, priority int DEFAULT 0) RETURNS app_jobs.jobs AS $EOFCODE$
-DECLARE
- v_job app_jobs.jobs;
-BEGIN
- IF job_key IS NOT NULL THEN
- -- Upsert job
- INSERT INTO app_jobs.jobs (
- database_id,
- task_identifier,
- payload,
- queue_name,
- run_at,
- max_attempts,
- key,
- priority
- ) VALUES (
- db_id,
- identifier,
- coalesce(payload,
- '{}'::json),
- queue_name,
- coalesce(run_at, now()),
- coalesce(max_attempts, 25),
- job_key,
- coalesce(priority, 0)
- )
- ON CONFLICT (key)
- DO UPDATE SET
- task_identifier = EXCLUDED.task_identifier,
- payload = EXCLUDED.payload,
- queue_name = EXCLUDED.queue_name,
- max_attempts = EXCLUDED.max_attempts,
- run_at = EXCLUDED.run_at,
- priority = EXCLUDED.priority,
- -- always reset error/retry state
- attempts = 0, last_error = NULL
- WHERE
- jobs.locked_at IS NULL
- RETURNING
- * INTO v_job;
-
- -- If upsert succeeded (insert or update), return early
-
- IF NOT (v_job IS NULL) THEN
- RETURN v_job;
- END IF;
-
- -- Upsert failed -> there must be an existing job that is locked. Remove
- -- existing key to allow a new one to be inserted, and prevent any
- -- subsequent retries by bumping attempts to the max allowed.
-
- UPDATE
- app_jobs.jobs
- SET
- KEY = NULL,
- attempts = jobs.max_attempts
- WHERE
- KEY = job_key;
- END IF;
-
- INSERT INTO app_jobs.jobs (
- database_id,
- task_identifier,
- payload,
- queue_name,
- run_at,
- max_attempts,
- priority
- ) VALUES (
- db_id,
- identifier,
- payload,
- queue_name,
- run_at,
- max_attempts,
- priority
- )
- RETURNING * INTO v_job;
-
- RETURN v_job;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/helpers/json_build_object_apply.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/helpers/json_build_object_apply.sql
deleted file mode 100644
index e05072cfb..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/helpers/json_build_object_apply.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/helpers/json_build_object_apply on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.json_build_object_apply');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/add_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/add_job.sql
deleted file mode 100644
index c841e7d04..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/add_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/add_job on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.add_job');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/add_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/add_scheduled_job.sql
deleted file mode 100644
index a2f7d4815..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/add_scheduled_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/add_scheduled_job on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.add_scheduled_job');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/complete_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/complete_job.sql
deleted file mode 100644
index 4bd179aee..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/complete_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/complete_job on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.complete_job');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/complete_jobs.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/complete_jobs.sql
deleted file mode 100644
index aa9a5a457..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/complete_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/complete_jobs on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.complete_jobs');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/do_notify.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/do_notify.sql
deleted file mode 100644
index df64a9f48..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/do_notify.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/do_notify on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.do_notify');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/fail_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/fail_job.sql
deleted file mode 100644
index b9c65b489..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/fail_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/fail_job on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.fail_job');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/get_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/get_job.sql
deleted file mode 100644
index 86170be11..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/get_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/get_job on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.get_job');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/get_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/get_scheduled_job.sql
deleted file mode 100644
index bb7e58d7f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/get_scheduled_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/get_scheduled_job on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.get_scheduled_job');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/permanently_fail_jobs.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/permanently_fail_jobs.sql
deleted file mode 100644
index dfd8852f0..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/permanently_fail_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/permanently_fail_jobs on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.permanently_fail_jobs');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/release_jobs.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/release_jobs.sql
deleted file mode 100644
index 70004e7e1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/release_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/release_jobs on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.release_jobs');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/release_scheduled_jobs.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/release_scheduled_jobs.sql
deleted file mode 100644
index 5b9b5929a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/release_scheduled_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/release_scheduled_jobs on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.release_scheduled_jobs');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/reschedule_jobs.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/reschedule_jobs.sql
deleted file mode 100644
index 80ab587b3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/reschedule_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/reschedule_jobs on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.reschedule_jobs');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/run_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/run_scheduled_job.sql
deleted file mode 100644
index 02257023b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/procedures/run_scheduled_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/run_scheduled_job on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.run_scheduled_job');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/schema.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/schema.sql
deleted file mode 100644
index 5e0b19d49..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('app_jobs');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index d645d8558..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,10 +0,0 @@
--- Verify schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator on pg
-
-BEGIN;
-
- SELECT has_table_privilege('administrator', 'app_jobs.job_queues', 'SELECT');
- SELECT has_table_privilege('administrator', 'app_jobs.job_queues', 'INSERT');
- SELECT has_table_privilege('administrator', 'app_jobs.job_queues', 'UPDATE');
- SELECT has_table_privilege('administrator', 'app_jobs.job_queues', 'DELETE');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
deleted file mode 100644
index bb3786608..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx on pg
-
-BEGIN;
-
-SELECT verify_index ('app_jobs.job_queues', 'job_queues_locked_by_idx');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/job_queues/table.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/job_queues/table.sql
deleted file mode 100644
index 3a5e4b1cd..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/job_queues/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/tables/job_queues/table on pg
-
-BEGIN;
-
-SELECT verify_table ('app_jobs.job_queues');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index 6255d7164..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,10 +0,0 @@
--- Verify schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator on pg
-
-BEGIN;
-
- SELECT has_table_privilege('administrator', 'app_jobs.jobs', 'SELECT');
- SELECT has_table_privilege('administrator', 'app_jobs.jobs', 'INSERT');
- SELECT has_table_privilege('administrator', 'app_jobs.jobs', 'UPDATE');
- SELECT has_table_privilege('administrator', 'app_jobs.jobs', 'DELETE');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
deleted file mode 100644
index 3635677ae..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx on pg
-
-BEGIN;
-
-SELECT verify_index ('app_jobs.jobs', 'jobs_locked_by_idx');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
deleted file mode 100644
index 2fc8b4ccd..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx on pg
-
-BEGIN;
-
-SELECT verify_index ('app_jobs.jobs', 'priority_run_at_id_idx');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/table.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/table.sql
deleted file mode 100644
index aaa0584da..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/tables/jobs/table on pg
-
-BEGIN;
-
-SELECT verify_table ('app_jobs.jobs');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
deleted file mode 100644
index 97b717d08..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
+++ /dev/null
@@ -1,10 +0,0 @@
--- Verify schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count on pg
-BEGIN;
-SELECT
- verify_function ('app_jobs.tg_decrease_job_queue_count');
-SELECT
- verify_trigger ('app_jobs.decrease_job_queue_count_on_delete');
-SELECT
- verify_trigger ('app_jobs.decrease_job_queue_count_on_update');
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
deleted file mode 100644
index a6e89dd17..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
+++ /dev/null
@@ -1,10 +0,0 @@
--- Verify schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count on pg
-BEGIN;
-SELECT
- verify_function ('app_jobs.tg_increase_job_queue_count');
-SELECT
- verify_trigger ('app_jobs._500_increase_job_queue_count_on_insert');
-SELECT
- verify_trigger ('app_jobs._500_increase_job_queue_count_on_update');
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
deleted file mode 100644
index dc0436efa..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
+++ /dev/null
@@ -1,6 +0,0 @@
--- Verify schemas/app_jobs/tables/jobs/triggers/notify_worker on pg
-BEGIN;
-SELECT
- verify_trigger ('app_jobs._900_notify_worker');
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/triggers/timestamps.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
deleted file mode 100644
index ed9466a37..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
+++ /dev/null
@@ -1,16 +0,0 @@
--- Verify schemas/app_jobs/tables/jobs/triggers/timestamps on pg
-BEGIN;
-SELECT
- created_at
-FROM
- app_jobs.jobs
-LIMIT 1;
-SELECT
- updated_at
-FROM
- app_jobs.jobs
-LIMIT 1;
-SELECT
- verify_trigger ('app_jobs._100_update_jobs_modtime_tg');
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index c4aa4eb6c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,10 +0,0 @@
--- Verify schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator on pg
-
-BEGIN;
-
- SELECT has_table_privilege('administrator', 'app_jobs.scheduled_jobs', 'SELECT');
- SELECT has_table_privilege('administrator', 'app_jobs.scheduled_jobs', 'INSERT');
- SELECT has_table_privilege('administrator', 'app_jobs.scheduled_jobs', 'UPDATE');
- SELECT has_table_privilege('administrator', 'app_jobs.scheduled_jobs', 'DELETE');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
deleted file mode 100644
index 34ee9f117..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx on pg
-
-BEGIN;
-
-SELECT verify_index ('app_jobs.scheduled_jobs', 'scheduled_jobs_locked_by_idx');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
deleted file mode 100644
index d26a68223..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx on pg
-
-BEGIN;
-
-SELECT verify_index ('app_jobs.scheduled_jobs', 'scheduled_jobs_priority_id_idx');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/table.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/table.sql
deleted file mode 100644
index 065f427b1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/tables/scheduled_jobs/table on pg
-
-BEGIN;
-
-SELECT verify_table ('app_jobs.scheduled_jobs');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
deleted file mode 100644
index 599c63a3a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Verify schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job on pg
-
-BEGIN;
-
-
-SELECT verify_trigger ('app_jobs._900_notify_scheduled_job');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_fields.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
deleted file mode 100644
index 9b36e4f2e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/triggers/tg_add_job_with_fields on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.trigger_job_with_fields');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_row.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_row.sql
deleted file mode 100644
index bdf8cc7eb..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_row.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/triggers/tg_add_job_with_row on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.tg_add_job_with_row');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
deleted file mode 100644
index 72b5a7b90..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
+++ /dev/null
@@ -1,6 +0,0 @@
--- Verify schemas/app_jobs/triggers/tg_add_job_with_row_id on pg
-BEGIN;
-SELECT
- verify_function ('app_jobs.tg_add_job_with_row_id');
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/triggers/tg_update_timestamps.sql b/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/triggers/tg_update_timestamps.sql
deleted file mode 100644
index fd53ed3e9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/database-jobs/verify/schemas/app_jobs/triggers/tg_update_timestamps.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/triggers/tg_update_timestamps on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.tg_update_timestamps');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/Makefile b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/Makefile
deleted file mode 100644
index 11b79c8ba..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-EXTENSION = pgpm-encrypted-secrets-table
-DATA = sql/pgpm-encrypted-secrets-table--0.14.0.sql
-
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/README.md b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/README.md
deleted file mode 100644
index 1a10d6b91..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/README.md
+++ /dev/null
@@ -1,308 +0,0 @@
-# @pgpm/encrypted-secrets-table
-
-
-
-
-
-
-
-
-
-
-
-
-
-Table-based encrypted secrets storage and retrieval.
-
-## Overview
-
-`@pgpm/encrypted-secrets-table` provides the foundational storage layer for encrypted secrets management in PostgreSQL. This package creates the `secrets_schema.secrets_table` table that stores encrypted sensitive data such as API keys, passwords, tokens, and other credentials in a structured, secure format.
-
-## Features
-
-- **Structured Storage**: Dedicated table for encrypted secrets with proper indexing
-- **UUID-Based Ownership**: Links secrets to owning entities via UUID foreign keys
-- **Dual Encryption Support**: Supports both bytea (binary) and text-encoded encrypted values
-- **Unique Constraints**: Prevents duplicate secrets per owner
-- **Automatic Hashing**: Trigger-based hashing for secret verification
-- **Foundation Layer**: Provides storage for higher-level secrets management APIs
-
-## Installation
-
-If you have `pgpm` installed:
-
-```bash
-pgpm install @pgpm/encrypted-secrets-table
-pgpm deploy
-```
-
-This is a quick way to get started. The sections below provide more detailed installation options.
-
-### Prerequisites
-
-```bash
-# Install pgpm CLI
-npm install -g pgpm
-
-# Start local Postgres (via Docker) and export env vars
-pgpm docker start
-eval "$(pgpm env)"
-```
-
-> **Tip:** Already running Postgres? Skip the Docker step and just export your `PG*` environment variables.
-
-### **Add to an Existing Package**
-
-```bash
-# 1. Install the package
-pgpm install @pgpm/encrypted-secrets-table
-
-# 2. Deploy locally
-pgpm deploy
-```
-
-### **Add to a New Project**
-
-```bash
-# 1. Create a workspace
-pgpm init workspace
-
-# 2. Create your first module
-cd my-workspace
-pgpm init
-
-# 3. Install a package
-cd packages/my-module
-pgpm install @pgpm/encrypted-secrets-table
-
-# 4. Deploy everything
-pgpm deploy --createdb --database mydb1
-```
-
-## Database Schema
-
-### secrets_schema.secrets_table
-
-The core table for storing encrypted secrets:
-
-```sql
-CREATE TABLE secrets_schema.secrets_table (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
- secrets_owned_field uuid NOT NULL, -- Owner entity ID
- name text NOT NULL, -- Secret name/identifier
- secrets_value_field bytea NULL, -- Binary encrypted value
- secrets_enc_field text NULL, -- Text-encoded encrypted value
- UNIQUE(secrets_owned_field, name) -- One secret per name per owner
-);
-```
-
-**Columns:**
-- `id`: Unique identifier for the secret record
-- `secrets_owned_field`: UUID of the entity that owns this secret (e.g., user ID, organization ID)
-- `name`: Human-readable name for the secret (e.g., "github_token", "stripe_api_key")
-- `secrets_value_field`: Binary encrypted value (bytea format)
-- `secrets_enc_field`: Text-encoded encrypted value (for PGP armor format)
-
-**Constraints:**
-- Primary key on `id`
-- Unique constraint on `(secrets_owned_field, name)` ensures each owner can have only one secret with a given name
-
-### Triggers
-
-#### hash_secrets
-
-Automatically hashes secrets for verification purposes:
-
-```sql
-CREATE TRIGGER hash_secrets
- BEFORE INSERT OR UPDATE ON secrets_schema.secrets_table
- FOR EACH ROW
- EXECUTE FUNCTION secrets_schema.hash_secrets_trigger();
-```
-
-This trigger ensures secrets are properly hashed before storage, enabling verification without exposing the raw values.
-
-## Usage
-
-### Storing a Secret
-
-```sql
--- Insert an encrypted secret
-INSERT INTO secrets_schema.secrets_table (
- secrets_owned_field,
- name,
- secrets_value_field
-) VALUES (
- 'user-uuid-here',
- 'api_key',
- pgp_sym_encrypt('my-secret-value', 'encryption-password')
-);
-```
-
-### Retrieving a Secret
-
-```sql
--- Get encrypted secret
-SELECT
- id,
- name,
- pgp_sym_decrypt(secrets_value_field, 'encryption-password') AS decrypted_value
-FROM secrets_schema.secrets_table
-WHERE secrets_owned_field = 'user-uuid-here'
- AND name = 'api_key';
-```
-
-### Updating a Secret
-
-```sql
--- Update existing secret
-UPDATE secrets_schema.secrets_table
-SET secrets_value_field = pgp_sym_encrypt('new-secret-value', 'encryption-password')
-WHERE secrets_owned_field = 'user-uuid-here'
- AND name = 'api_key';
-```
-
-### Deleting a Secret
-
-```sql
--- Remove a secret
-DELETE FROM secrets_schema.secrets_table
-WHERE secrets_owned_field = 'user-uuid-here'
- AND name = 'api_key';
-```
-
-## Common Patterns
-
-### Multi-Tenant Secrets
-
-```sql
--- Each organization has its own secrets
-INSERT INTO secrets_schema.secrets_table (
- secrets_owned_field,
- name,
- secrets_value_field
-) VALUES
- ('org-1-uuid', 'aws_access_key', pgp_sym_encrypt('...', 'password')),
- ('org-1-uuid', 'aws_secret_key', pgp_sym_encrypt('...', 'password')),
- ('org-2-uuid', 'aws_access_key', pgp_sym_encrypt('...', 'password'));
-```
-
-### User-Specific Secrets
-
-```sql
--- Each user has their own API tokens
-INSERT INTO secrets_schema.secrets_table (
- secrets_owned_field,
- name,
- secrets_value_field
-) VALUES
- ('user-1-uuid', 'github_token', pgp_sym_encrypt('...', 'password')),
- ('user-2-uuid', 'github_token', pgp_sym_encrypt('...', 'password'));
-```
-
-### Listing All Secrets for an Owner
-
-```sql
--- Get all secret names for an owner (without values)
-SELECT id, name
-FROM secrets_schema.secrets_table
-WHERE secrets_owned_field = 'user-uuid-here'
-ORDER BY name;
-```
-
-## Integration with Other Packages
-
-### With @pgpm/encrypted-secrets
-
-The `@pgpm/encrypted-secrets` package builds on this storage layer to provide:
-- High-level API functions for secret management
-- Role-based access control
-- Encryption/decryption helpers
-- Secret verification functions
-
-```sql
--- @pgpm/encrypted-secrets provides functions like:
-SELECT encrypted_secrets.secrets_getter('owner-uuid', 'secret-name');
-SELECT encrypted_secrets.secrets_upsert('owner-uuid', 'secret-name', 'value');
-```
-
-### With Application Tables
-
-Link secrets to your application entities:
-
-```sql
--- Users table with secrets
-CREATE TABLE users (
- id uuid PRIMARY KEY,
- email text,
- -- Secrets stored in secrets_schema.secrets_table
- -- with secrets_owned_field = users.id
-);
-
--- Get user's secrets
-SELECT s.*
-FROM users u
-JOIN secrets_schema.secrets_table s ON s.secrets_owned_field = u.id
-WHERE u.email = 'user@example.com';
-```
-
-## Security Considerations
-
-1. **Encryption Required**: Never store plaintext secrets in this table
-2. **Access Control**: Use PostgreSQL RLS policies to restrict access
-3. **Encryption Keys**: Store encryption passwords securely (not in database)
-4. **Audit Logging**: Consider logging access to secrets table
-5. **Key Rotation**: Plan for periodic re-encryption with new keys
-
-### Row-Level Security Example
-
-```sql
--- Enable RLS
-ALTER TABLE secrets_schema.secrets_table ENABLE ROW LEVEL SECURITY;
-
--- Users can only access their own secrets
-CREATE POLICY user_secrets ON secrets_schema.secrets_table
- FOR ALL
- TO authenticated
- USING (secrets_owned_field = jwt_public.current_user_id());
-
--- Administrators can access all secrets
-CREATE POLICY admin_secrets ON secrets_schema.secrets_table
- FOR ALL
- TO administrator
- USING (true);
-```
-
-## Best Practices
-
-1. **Use Unique Names**: Choose descriptive, unique names for each secret
-2. **Consistent Ownership**: Use the same UUID scheme for `secrets_owned_field` across your application
-3. **Binary vs Text**: Use `secrets_value_field` (bytea) for better performance, `secrets_enc_field` (text) for PGP armor format
-4. **Don't Log Secrets**: Ensure database logs don't capture decrypted values
-5. **Regular Cleanup**: Remove secrets when owners are deleted
-
-## Dependencies
-
-- `@pgpm/verify`: Verification utilities
-
-## Testing
-
-```bash
-pnpm test
-```
-
-## Related Tooling
-
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
-* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
-* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
-* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
-
-## Disclaimer
-
-AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED "AS IS", AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND.
-
-No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value.
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/__tests__/__snapshots__/secrets-table.test.ts.snap b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/__tests__/__snapshots__/secrets-table.test.ts.snap
deleted file mode 100644
index 5caff6dad..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/__tests__/__snapshots__/secrets-table.test.ts.snap
+++ /dev/null
@@ -1,38 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`encrypted secrets table should have secrets_table with correct structure 1`] = `
-{
- "columns": [
- {
- "column_default": "uuid_generate_v4()",
- "column_name": "id",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": null,
- "column_name": "secrets_owned_field",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": null,
- "column_name": "name",
- "data_type": "text",
- "is_nullable": "NO",
- },
- {
- "column_default": null,
- "column_name": "secrets_value_field",
- "data_type": "bytea",
- "is_nullable": "YES",
- },
- {
- "column_default": null,
- "column_name": "secrets_enc_field",
- "data_type": "text",
- "is_nullable": "YES",
- },
- ],
-}
-`;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/__tests__/secrets-table.test.ts b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/__tests__/secrets-table.test.ts
deleted file mode 100644
index 197c08aab..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/__tests__/secrets-table.test.ts
+++ /dev/null
@@ -1,272 +0,0 @@
-import { getConnections, PgTestClient, snapshot } from 'pgsql-test';
-
-let pg: PgTestClient;
-let teardown: () => Promise;
-
-const user_id = 'dc474833-318a-41f5-9239-ee563ab657a6';
-const user_id_2 = '550e8400-e29b-41d4-a716-446655440000';
-
-describe('encrypted secrets table', () => {
- beforeAll(async () => {
- ({ pg, teardown } = await getConnections());
- });
-
- afterAll(async () => {
- await teardown();
- });
-
- beforeEach(async () => {
- await pg.beforeEach();
- });
-
- afterEach(async () => {
- await pg.afterEach();
- });
-
- it('should have secrets_schema created', async () => {
- const schemas = await pg.any(
- `SELECT schema_name FROM information_schema.schemata WHERE schema_name = 'secrets_schema'`
- );
- expect(schemas).toHaveLength(1);
- expect(schemas[0].schema_name).toBe('secrets_schema');
- });
-
- it('should have secrets_table with correct structure', async () => {
- const columns = await pg.any(
- `SELECT column_name, data_type, is_nullable, column_default
- FROM information_schema.columns
- WHERE table_schema = 'secrets_schema' AND table_name = 'secrets_table'
- ORDER BY ordinal_position`
- );
-
- expect(snapshot({ columns })).toMatchSnapshot();
- });
-
- it('should have unique constraint on (secrets_owned_field, name)', async () => {
- const constraints = await pg.any(
- `SELECT constraint_name, constraint_type
- FROM information_schema.table_constraints
- WHERE table_schema = 'secrets_schema'
- AND table_name = 'secrets_table'
- AND constraint_type = 'UNIQUE'`
- );
-
- expect(constraints).toHaveLength(1);
- });
-
- it('should insert record with default values', async () => {
- const [result] = await pg.any(
- `INSERT INTO secrets_schema.secrets_table
- (secrets_owned_field, name, secrets_value_field, secrets_enc_field)
- VALUES ($1::uuid, 'test-secret', 'test-value'::bytea, 'none')
- RETURNING *`,
- [user_id]
- );
-
- expect(result.secrets_owned_field).toBe(user_id);
- expect(result.name).toBe('test-secret');
- expect(result.secrets_enc_field).toBe('none');
- expect(result.id).toBeDefined();
- });
-
- it('should enforce unique constraint on (secrets_owned_field, name)', async () => {
- // Insert first record
- await pg.any(
- `INSERT INTO secrets_schema.secrets_table
- (secrets_owned_field, name, secrets_value_field, secrets_enc_field)
- VALUES ($1::uuid, 'duplicate-name', 'value1'::bytea, 'none')`,
- [user_id]
- );
-
- // Try to insert duplicate - should fail
- await expect(
- pg.any(
- `INSERT INTO secrets_schema.secrets_table
- (secrets_owned_field, name, secrets_value_field, secrets_enc_field)
- VALUES ($1::uuid, 'duplicate-name', 'value2'::bytea, 'none')`,
- [user_id]
- )
- ).rejects.toThrow();
- });
-
- it('should allow same name for different users', async () => {
- // Insert for first user
- await pg.any(
- `INSERT INTO secrets_schema.secrets_table
- (secrets_owned_field, name, secrets_value_field, secrets_enc_field)
- VALUES ($1::uuid, 'same-name', 'value1'::bytea, 'none')`,
- [user_id]
- );
-
- // Insert for second user - should succeed
- const [result] = await pg.any(
- `INSERT INTO secrets_schema.secrets_table
- (secrets_owned_field, name, secrets_value_field, secrets_enc_field)
- VALUES ($1::uuid, 'same-name', 'value2'::bytea, 'none')
- RETURNING *`,
- [user_id_2]
- );
-
- expect(result.secrets_owned_field).toBe(user_id_2);
- expect(result.name).toBe('same-name');
- });
-
- it('should trigger hash_secrets on insert with crypt', async () => {
- const plaintext = 'my-secret-password';
-
- const [result] = await pg.any(
- `INSERT INTO secrets_schema.secrets_table
- (secrets_owned_field, name, secrets_value_field, secrets_enc_field)
- VALUES ($1::uuid, 'crypt-secret', $2::bytea, 'crypt')
- RETURNING *`,
- [user_id, plaintext]
- );
-
- // The trigger should have hashed the value
- expect(result.secrets_enc_field).toBe('crypt');
- expect(result.secrets_value_field).not.toEqual(Buffer.from(plaintext));
-
- // Verify it's a bcrypt hash (starts with $2)
- const hashedValue = result.secrets_value_field.toString();
- expect(hashedValue).toMatch(/^\$2[aby]?\$/);
- });
-
- it('should trigger hash_secrets on insert with pgp', async () => {
- const plaintext = 'my-secret-data';
-
- const [result] = await pg.any(
- `INSERT INTO secrets_schema.secrets_table
- (secrets_owned_field, name, secrets_value_field, secrets_enc_field)
- VALUES ($1::uuid, 'pgp-secret', $2::bytea, 'pgp')
- RETURNING *`,
- [user_id, plaintext]
- );
-
- // The trigger should have encrypted the value
- expect(result.secrets_enc_field).toBe('pgp');
- expect(result.secrets_value_field).not.toEqual(Buffer.from(plaintext));
-
- // Should be longer than original due to encryption
- expect(result.secrets_value_field.length).toBeGreaterThan(plaintext.length);
- });
-
- it('should default to none encryption when not specified', async () => {
- const plaintext = 'unencrypted-data';
-
- const [result] = await pg.any(
- `INSERT INTO secrets_schema.secrets_table
- (secrets_owned_field, name, secrets_value_field)
- VALUES ($1::uuid, 'none-secret', $2::bytea)
- RETURNING *`,
- [user_id, plaintext]
- );
-
- // The trigger should set enc_field to 'none'
- expect(result.secrets_enc_field).toBe('none');
- expect(result.secrets_value_field).toEqual(Buffer.from(plaintext));
- });
-
- it('should trigger hash_secrets on update when value changes', async () => {
- // Insert initial record
- const [initial] = await pg.any(
- `INSERT INTO secrets_schema.secrets_table
- (secrets_owned_field, name, secrets_value_field, secrets_enc_field)
- VALUES ($1::uuid, 'update-test', 'initial-value'::bytea, 'none')
- RETURNING *`,
- [user_id]
- );
-
- // Update to use crypt encryption
- const [updated] = await pg.any(
- `UPDATE secrets_schema.secrets_table
- SET secrets_value_field = 'new-password'::bytea, secrets_enc_field = 'crypt'
- WHERE id = $1
- RETURNING *`,
- [initial.id]
- );
-
- // Should be encrypted now
- expect(updated.secrets_enc_field).toBe('crypt');
- expect(updated.secrets_value_field).not.toEqual(Buffer.from('new-password'));
-
- // Verify it's a bcrypt hash
- const hashedValue = updated.secrets_value_field.toString();
- expect(hashedValue).toMatch(/^\$2[aby]?\$/);
- });
-
- it('should not trigger hash_secrets on update when value unchanged', async () => {
- // Insert initial record with crypt
- const [initial] = await pg.any(
- `INSERT INTO secrets_schema.secrets_table
- (secrets_owned_field, name, secrets_value_field, secrets_enc_field)
- VALUES ($1::uuid, 'no-update-test', 'password'::bytea, 'crypt')
- RETURNING *`,
- [user_id]
- );
-
- const originalHash = initial.secrets_value_field;
-
- // Update name only (not the value field)
- const [updated] = await pg.any(
- `UPDATE secrets_schema.secrets_table
- SET name = 'renamed-secret'
- WHERE id = $1
- RETURNING *`,
- [initial.id]
- );
-
- // Hash should remain the same
- expect(updated.secrets_value_field).toEqual(originalHash);
- expect(updated.name).toBe('renamed-secret');
- });
-
- it('should verify crypt hash works correctly', async () => {
- const password = 'test-password-123';
-
- // Insert with crypt
- const [result] = await pg.any(
- `INSERT INTO secrets_schema.secrets_table
- (secrets_owned_field, name, secrets_value_field, secrets_enc_field)
- VALUES ($1::uuid, 'crypt-verify', $2::bytea, 'crypt')
- RETURNING *`,
- [user_id, password]
- );
-
- // The stored hash should be different from the original password
- const storedHash = result.secrets_value_field.toString();
- expect(storedHash).not.toBe(password);
-
- // Verify it's a proper bcrypt hash format
- expect(storedHash).toMatch(/^\$2[aby]?\$/);
-
- // Verify the hash is the expected length (bcrypt hashes are typically 60 characters)
- expect(storedHash.length).toBe(60);
-
- // Verify that inserting the same password again produces a different hash (salt should be different)
- const [result2] = await pg.any(
- `INSERT INTO secrets_schema.secrets_table
- (secrets_owned_field, name, secrets_value_field, secrets_enc_field)
- VALUES ($1::uuid, 'crypt-verify-2', $2::bytea, 'crypt')
- RETURNING *`,
- [user_id, password]
- );
-
- const storedHash2 = result2.secrets_value_field.toString();
- expect(storedHash2).not.toBe(storedHash); // Different salt = different hash
- expect(storedHash2).toMatch(/^\$2[aby]?\$/);
- });
-
- it('should handle null values correctly', async () => {
- const [result] = await pg.any(
- `INSERT INTO secrets_schema.secrets_table
- (secrets_owned_field, name, secrets_value_field, secrets_enc_field)
- VALUES ($1::uuid, 'null-test', NULL, NULL)
- RETURNING *`,
- [user_id]
- );
-
- // Trigger should set enc_field to 'none' even when value is null
- expect(result.secrets_enc_field).toBe('none');
- expect(result.secrets_value_field).toBeNull();
- });
-});
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/deploy/schemas/secrets_schema/schema.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/deploy/schemas/secrets_schema/schema.sql
deleted file mode 100644
index 75452ca8d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/deploy/schemas/secrets_schema/schema.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Deploy schemas/secrets_schema/schema to pg
-
-
-BEGIN;
-
-CREATE SCHEMA secrets_schema;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/deploy/schemas/secrets_schema/tables/secrets_table/table.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/deploy/schemas/secrets_schema/tables/secrets_table/table.sql
deleted file mode 100644
index 50f6a9356..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/deploy/schemas/secrets_schema/tables/secrets_table/table.sql
+++ /dev/null
@@ -1,16 +0,0 @@
--- Deploy schemas/secrets_schema/tables/secrets_table/table to pg
-
--- requires: schemas/secrets_schema/schema
-
-BEGIN;
-
-CREATE TABLE secrets_schema.secrets_table (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- secrets_owned_field uuid NOT NULL,
- name text NOT NULL,
- secrets_value_field bytea NULL,
- secrets_enc_field text NULL,
- UNIQUE(secrets_owned_field, name)
-);
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/deploy/schemas/secrets_schema/tables/secrets_table/triggers/hash_secrets.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/deploy/schemas/secrets_schema/tables/secrets_table/triggers/hash_secrets.sql
deleted file mode 100644
index d7f1dc086..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/deploy/schemas/secrets_schema/tables/secrets_table/triggers/hash_secrets.sql
+++ /dev/null
@@ -1,34 +0,0 @@
--- Deploy schemas/secrets_schema/tables/secrets_table/triggers/hash_secrets to pg
-
--- requires: schemas/secrets_schema/schema
--- requires: schemas/secrets_schema/tables/secrets_table/table
-
-BEGIN;
-
-CREATE FUNCTION secrets_schema.tg_hash_secrets()
-RETURNS TRIGGER AS $$
-BEGIN
- IF (NEW.secrets_enc_field = 'crypt') THEN
- NEW.secrets_value_field = crypt(NEW.secrets_value_field::text, gen_salt('bf'));
- ELSIF (NEW.secrets_enc_field = 'pgp') THEN
- NEW.secrets_value_field = pgp_sym_encrypt(encode(NEW.secrets_value_field::bytea, 'hex'), NEW.secrets_owned_field::text, 'compress-algo=1, cipher-algo=aes256');
- ELSE
- NEW.secrets_enc_field = 'none';
- END IF;
- RETURN NEW;
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE TRIGGER hash_secrets_update
-BEFORE UPDATE ON secrets_schema.secrets_table
-FOR EACH ROW
-WHEN (NEW.secrets_value_field IS DISTINCT FROM OLD.secrets_value_field)
-EXECUTE PROCEDURE secrets_schema.tg_hash_secrets ();
-
-CREATE TRIGGER hash_secrets_insert
-BEFORE INSERT ON secrets_schema.secrets_table
-FOR EACH ROW
-EXECUTE PROCEDURE secrets_schema.tg_hash_secrets ();
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/package.json b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/package.json
deleted file mode 100644
index e5567ea13..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/package.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "name": "@pgpm/encrypted-secrets-table",
- "version": "0.15.2",
- "description": "Table-based encrypted secrets storage and retrieval",
- "author": "Dan Lynch ",
- "contributors": [
- "Constructive "
- ],
- "keywords": [
- "postgresql",
- "pgpm",
- "encryption",
- "secrets"
- ],
- "publishConfig": {
- "access": "public"
- },
- "scripts": {
- "bundle": "pgpm package",
- "test": "jest",
- "test:watch": "jest --watch"
- },
- "dependencies": {
- "@pgpm/verify": "0.15.2"
- },
- "devDependencies": {
- "pgpm": "^1.0.0"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/constructive-io/pgpm-modules"
- },
- "homepage": "https://github.com/constructive-io/pgpm-modules",
- "bugs": {
- "url": "https://github.com/constructive-io/pgpm-modules/issues"
- }
-}
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/pgpm-encrypted-secrets-table.control b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/pgpm-encrypted-secrets-table.control
deleted file mode 100644
index 1b55ce845..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/pgpm-encrypted-secrets-table.control
+++ /dev/null
@@ -1,8 +0,0 @@
-# pgpm-encrypted-secrets-table extension
-comment = 'pgpm-encrypted-secrets-table extension'
-default_version = '0.14.0'
-module_pathname = '$libdir/pgpm-encrypted-secrets-table'
-requires = 'pgcrypto,plpgsql,uuid-ossp,pgpm-verify'
-relocatable = false
-superuser = false
-
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/pgpm.plan b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/pgpm.plan
deleted file mode 100644
index 90b1f7ba8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/pgpm.plan
+++ /dev/null
@@ -1,7 +0,0 @@
-%syntax-version=1.0.0
-%project=pgpm-encrypted-secrets-table
-%uri=pgpm-encrypted-secrets-table
-
-schemas/secrets_schema/schema 2020-11-01T21:41:26Z Dan Lynch # add schemas/secrets_schema/schema
-schemas/secrets_schema/tables/secrets_table/table [schemas/secrets_schema/schema] 2020-11-01T21:41:51Z Dan Lynch # add schemas/secrets_schema/tables/secrets_table/table
-schemas/secrets_schema/tables/secrets_table/triggers/hash_secrets [schemas/secrets_schema/schema schemas/secrets_schema/tables/secrets_table/table] 2020-11-01T21:46:08Z Dan Lynch # add schemas/secrets_schema/tables/secrets_table/triggers/hash_secrets
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/revert/schemas/secrets_schema/schema.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/revert/schemas/secrets_schema/schema.sql
deleted file mode 100644
index e3a781a22..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/revert/schemas/secrets_schema/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/secrets_schema/schema from pg
-
-BEGIN;
-
-DROP SCHEMA secrets_schema;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/revert/schemas/secrets_schema/tables/secrets_table/table.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/revert/schemas/secrets_schema/tables/secrets_table/table.sql
deleted file mode 100644
index 9298922f0..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/revert/schemas/secrets_schema/tables/secrets_table/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/secrets_schema/tables/secrets_table/table from pg
-
-BEGIN;
-
-DROP TABLE secrets_schema.secrets_table;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/revert/schemas/secrets_schema/tables/secrets_table/triggers/hash_secrets.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/revert/schemas/secrets_schema/tables/secrets_table/triggers/hash_secrets.sql
deleted file mode 100644
index 6459a0931..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/revert/schemas/secrets_schema/tables/secrets_table/triggers/hash_secrets.sql
+++ /dev/null
@@ -1,9 +0,0 @@
--- Revert schemas/secrets_schema/tables/secrets_table/triggers/hash_secrets from pg
-
-BEGIN;
-
-DROP TRIGGER hash_secrets_update ON secrets_schema.secrets_table;
-DROP TRIGGER hash_secrets_insert ON secrets_schema.secrets_table;
-DROP FUNCTION secrets_schema.tg_hash_secrets;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/sql/pgpm-encrypted-secrets-table--0.14.0.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/sql/pgpm-encrypted-secrets-table--0.14.0.sql
deleted file mode 100644
index a568c8c86..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/sql/pgpm-encrypted-secrets-table--0.14.0.sql
+++ /dev/null
@@ -1,37 +0,0 @@
-\echo Use "CREATE EXTENSION pgpm-encrypted-secrets-table" to load this file. \quit
-CREATE SCHEMA secrets_schema;
-
-CREATE TABLE secrets_schema.secrets_table (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
- secrets_owned_field uuid NOT NULL,
- name text NOT NULL,
- secrets_value_field bytea NULL,
- secrets_enc_field text NULL,
- UNIQUE (secrets_owned_field, name)
-);
-
-CREATE FUNCTION secrets_schema.tg_hash_secrets() RETURNS trigger AS $EOFCODE$
-BEGIN
- IF (NEW.secrets_enc_field = 'crypt') THEN
- NEW.secrets_value_field = crypt(NEW.secrets_value_field::text, gen_salt('bf'));
- ELSIF (NEW.secrets_enc_field = 'pgp') THEN
- NEW.secrets_value_field = pgp_sym_encrypt(encode(NEW.secrets_value_field::bytea, 'hex'), NEW.secrets_owned_field::text, 'compress-algo=1, cipher-algo=aes256');
- ELSE
- NEW.secrets_enc_field = 'none';
- END IF;
- RETURN NEW;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE TRIGGER hash_secrets_update
- BEFORE UPDATE
- ON secrets_schema.secrets_table
- FOR EACH ROW
- WHEN (new.secrets_value_field IS DISTINCT FROM old.secrets_value_field)
- EXECUTE PROCEDURE secrets_schema.tg_hash_secrets();
-
-CREATE TRIGGER hash_secrets_insert
- BEFORE INSERT
- ON secrets_schema.secrets_table
- FOR EACH ROW
- EXECUTE PROCEDURE secrets_schema.tg_hash_secrets();
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/verify/schemas/secrets_schema/schema.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/verify/schemas/secrets_schema/schema.sql
deleted file mode 100644
index 092347b0f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/verify/schemas/secrets_schema/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/secrets_schema/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('secrets_schema');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/verify/schemas/secrets_schema/tables/secrets_table/table.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/verify/schemas/secrets_schema/tables/secrets_table/table.sql
deleted file mode 100644
index d4d3f0fd0..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/verify/schemas/secrets_schema/tables/secrets_table/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/secrets_schema/tables/secrets_table/table on pg
-
-BEGIN;
-
-SELECT verify_table ('secrets_schema.secrets_table');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/verify/schemas/secrets_schema/tables/secrets_table/triggers/hash_secrets.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/verify/schemas/secrets_schema/tables/secrets_table/triggers/hash_secrets.sql
deleted file mode 100644
index 63d1690d7..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets-table/verify/schemas/secrets_schema/tables/secrets_table/triggers/hash_secrets.sql
+++ /dev/null
@@ -1,9 +0,0 @@
--- Verify schemas/secrets_schema/tables/secrets_table/triggers/hash_secrets on pg
-
-BEGIN;
-
-SELECT verify_function ('secrets_schema.tg_hash_secrets');
-SELECT verify_trigger ('secrets_schema.hash_secrets_update');
-SELECT verify_trigger ('secrets_schema.hash_secrets_insert');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/LICENSE b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/LICENSE
deleted file mode 100644
index 7b18c9183..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2025 Dan Lynch
-Copyright (c) 2025 Constructive
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/Makefile b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/Makefile
deleted file mode 100644
index 38fb4623b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-EXTENSION = pgpm-encrypted-secrets
-DATA = sql/pgpm-encrypted-secrets--0.14.0.sql
-
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/README.md b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/README.md
deleted file mode 100644
index ae6d091c5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/README.md
+++ /dev/null
@@ -1,512 +0,0 @@
-# @pgpm/encrypted-secrets
-
-
-
-
-
-
-
-
-
-
-
-
-
-Encrypted secrets management for PostgreSQL.
-
-## Overview
-
-`@pgpm/encrypted-secrets` provides a comprehensive API layer for managing encrypted secrets in PostgreSQL. Built on top of `@pgpm/encrypted-secrets-table`, this package offers high-level functions for storing, retrieving, verifying, and deleting encrypted secrets with support for multiple encryption methods (PGP and crypt). It includes role-based access control and integrates seamlessly with PostgreSQL's encryption extensions.
-
-## Features
-
-- **Multiple Encryption Methods**: Support for PGP symmetric encryption and crypt hashing
-- **High-Level API**: Simple functions for secret management (upsert, get, verify, delete)
-- **Role-Based Access**: Grants execute permissions to authenticated users
-- **Automatic Encryption**: Secrets are encrypted before storage
-- **Verification Support**: Verify secrets without exposing stored values
-- **Batch Operations**: Delete multiple secrets at once
-- **Default Values**: Return default values when secrets don't exist
-
-## Installation
-
-If you have `pgpm` installed:
-
-```bash
-pgpm install @pgpm/encrypted-secrets
-pgpm deploy
-```
-
-This is a quick way to get started. The sections below provide more detailed installation options.
-
-### Prerequisites
-
-```bash
-# Install pgpm CLI
-npm install -g pgpm
-
-# Start local Postgres (via Docker) and export env vars
-pgpm docker start
-eval "$(pgpm env)"
-```
-
-> **Tip:** Already running Postgres? Skip the Docker step and just export your `PG*` environment variables.
-
-### **Add to an Existing Package**
-
-```bash
-# 1. Install the package
-pgpm install @pgpm/encrypted-secrets
-
-# 2. Deploy locally
-pgpm deploy
-```
-
-### **Add to a New Project**
-
-```bash
-# 1. Create a workspace
-pgpm init workspace
-
-# 2. Create your first module
-cd my-workspace
-pgpm init
-
-# 3. Install a package
-cd packages/my-module
-pgpm install @pgpm/encrypted-secrets
-
-# 4. Deploy everything
-pgpm deploy --createdb --database mydb1
-```
-
-## Core Functions
-
-### encrypted_secrets.secrets_upsert()
-
-Insert or update a secret.
-
-**Signature:**
-```sql
-encrypted_secrets.secrets_upsert(
- v_secrets_owned_field uuid,
- secret_name text,
- secret_value text,
- field_encoding text DEFAULT 'pgp'
-) RETURNS boolean
-```
-
-**Parameters:**
-- `v_secrets_owned_field`: UUID of the entity that owns this secret
-- `secret_name`: Name/identifier for the secret
-- `secret_value`: The secret value to encrypt and store
-- `field_encoding`: Encryption method ('pgp' or 'crypt')
-
-**Returns:** `TRUE` on success
-
-**Usage:**
-```sql
--- Store a secret with PGP encryption
-SELECT encrypted_secrets.secrets_upsert(
- 'user-uuid',
- 'github_token',
- 'ghp_xxxxxxxxxxxx',
- 'pgp'
-);
-
--- Store a password with crypt hashing
-SELECT encrypted_secrets.secrets_upsert(
- 'user-uuid',
- 'password',
- 'my-secure-password',
- 'crypt'
-);
-```
-
-### encrypted_secrets.secrets_getter()
-
-Retrieve and decrypt a secret.
-
-**Signature:**
-```sql
-encrypted_secrets.secrets_getter(
- secrets_owned_field uuid,
- secret_name text,
- default_value text DEFAULT NULL
-) RETURNS text
-```
-
-**Parameters:**
-- `secrets_owned_field`: UUID of the secret owner
-- `secret_name`: Name of the secret to retrieve
-- `default_value`: Value to return if secret doesn't exist
-
-**Returns:** Decrypted secret value or default value
-
-**Usage:**
-```sql
--- Get a secret
-SELECT encrypted_secrets.secrets_getter(
- 'user-uuid',
- 'github_token'
-);
-
--- Get a secret with default value
-SELECT encrypted_secrets.secrets_getter(
- 'user-uuid',
- 'api_key',
- 'default-key-value'
-);
-```
-
-### encrypted_secrets.secrets_verify()
-
-Verify a secret without retrieving it.
-
-**Signature:**
-```sql
-encrypted_secrets.secrets_verify(
- secrets_owned_field uuid,
- secret_name text,
- secret_value text
-) RETURNS boolean
-```
-
-**Parameters:**
-- `secrets_owned_field`: UUID of the secret owner
-- `secret_name`: Name of the secret to verify
-- `secret_value`: Value to verify against stored secret
-
-**Returns:** `TRUE` if values match, `FALSE` otherwise
-
-**Usage:**
-```sql
--- Verify a password
-SELECT encrypted_secrets.secrets_verify(
- 'user-uuid',
- 'password',
- 'user-provided-password'
-);
-
--- Use in authentication
-DO $$
-DECLARE
- is_valid boolean;
-BEGIN
- SELECT encrypted_secrets.secrets_verify(
- current_user_id(),
- 'password',
- 'user-input'
- ) INTO is_valid;
-
- IF NOT is_valid THEN
- RAISE EXCEPTION 'Invalid password';
- END IF;
-END $$;
-```
-
-### encrypted_secrets.secrets_delete()
-
-Delete one or more secrets.
-
-**Signatures:**
-```sql
--- Delete single secret
-encrypted_secrets.secrets_delete(
- secrets_owned_field uuid,
- secret_name text
-) RETURNS void
-
--- Delete multiple secrets
-encrypted_secrets.secrets_delete(
- secrets_owned_field uuid,
- secret_names text[]
-) RETURNS void
-```
-
-**Usage:**
-```sql
--- Delete a single secret
-SELECT encrypted_secrets.secrets_delete(
- 'user-uuid',
- 'old_api_key'
-);
-
--- Delete multiple secrets
-SELECT encrypted_secrets.secrets_delete(
- 'user-uuid',
- ARRAY['temp_token', 'expired_key', 'old_password']
-);
-```
-
-## Encryption Methods
-
-### PGP Encryption
-
-PGP (Pretty Good Privacy) symmetric encryption provides strong encryption for secrets:
-
-```sql
--- Store with PGP
-SELECT encrypted_secrets.secrets_upsert(
- 'owner-uuid',
- 'api_key',
- 'secret-value',
- 'pgp'
-);
-
--- Retrieval automatically decrypts
-SELECT encrypted_secrets.secrets_getter('owner-uuid', 'api_key');
-```
-
-**Characteristics:**
-- Reversible encryption (can decrypt)
-- Uses owner UUID as encryption key
-- Suitable for API keys, tokens, connection strings
-
-### Crypt Hashing
-
-Crypt provides one-way hashing for passwords:
-
-```sql
--- Store with crypt
-SELECT encrypted_secrets.secrets_upsert(
- 'user-uuid',
- 'password',
- 'user-password',
- 'crypt'
-);
-
--- Verify password
-SELECT encrypted_secrets.secrets_verify(
- 'user-uuid',
- 'password',
- 'user-provided-password'
-);
-```
-
-**Characteristics:**
-- One-way hashing (cannot decrypt)
-- Suitable for passwords
-- Use `secrets_verify()` to check passwords
-
-## Usage Patterns
-
-### User Authentication
-
-```sql
--- Register user with password
-SELECT encrypted_secrets.secrets_upsert(
- user_id,
- 'password',
- 'user-chosen-password',
- 'crypt'
-);
-
--- Login verification
-CREATE FUNCTION authenticate_user(
- p_user_id uuid,
- p_password text
-) RETURNS boolean AS $$
-BEGIN
- RETURN encrypted_secrets.secrets_verify(
- p_user_id,
- 'password',
- p_password
- );
-END;
-$$ LANGUAGE plpgsql;
-```
-
-### API Key Management
-
-```sql
--- Store API keys for a service
-SELECT encrypted_secrets.secrets_upsert(
- organization_id,
- 'stripe_secret_key',
- 'sk_live_xxxxxxxxxxxx',
- 'pgp'
-);
-
-SELECT encrypted_secrets.secrets_upsert(
- organization_id,
- 'stripe_publishable_key',
- 'pk_live_xxxxxxxxxxxx',
- 'pgp'
-);
-
--- Retrieve for use
-CREATE FUNCTION get_stripe_config(org_id uuid)
-RETURNS jsonb AS $$
-BEGIN
- RETURN jsonb_build_object(
- 'secret_key', encrypted_secrets.secrets_getter(org_id, 'stripe_secret_key'),
- 'publishable_key', encrypted_secrets.secrets_getter(org_id, 'stripe_publishable_key')
- );
-END;
-$$ LANGUAGE plpgsql;
-```
-
-### Database Credentials
-
-```sql
--- Store database connection strings
-SELECT encrypted_secrets.secrets_upsert(
- app_id,
- 'db_connection_string',
- 'postgresql://user:pass@host:5432/db',
- 'pgp'
-);
-
--- Retrieve for connection
-SELECT encrypted_secrets.secrets_getter(
- app_id,
- 'db_connection_string'
-);
-```
-
-### Secret Rotation
-
-```sql
--- Rotate an API key
-DO $$
-DECLARE
- old_key text;
-BEGIN
- -- Get old key for migration
- old_key := encrypted_secrets.secrets_getter('org-uuid', 'api_key');
-
- -- Store new key
- PERFORM encrypted_secrets.secrets_upsert(
- 'org-uuid',
- 'api_key',
- 'new-api-key-value',
- 'pgp'
- );
-
- -- Optionally keep old key temporarily
- PERFORM encrypted_secrets.secrets_upsert(
- 'org-uuid',
- 'api_key_old',
- old_key,
- 'pgp'
- );
-END $$;
-```
-
-## Security Considerations
-
-1. **Encryption Keys**: The PGP encryption uses the owner UUID as the encryption key. Ensure UUIDs are not exposed.
-
-2. **Access Control**: Functions are granted to `authenticated` role. Use RLS on the underlying table for additional security.
-
-3. **Audit Logging**: Consider logging secret access:
-```sql
-CREATE TABLE secret_access_log (
- id serial PRIMARY KEY,
- owner_id uuid,
- secret_name text,
- accessed_at timestamptz DEFAULT now(),
- accessed_by uuid
-);
-
--- Wrap getter with logging
-CREATE FUNCTION get_secret_with_audit(
- owner_id uuid,
- secret_name text
-) RETURNS text AS $$
-DECLARE
- secret_value text;
-BEGIN
- secret_value := encrypted_secrets.secrets_getter(owner_id, secret_name);
-
- INSERT INTO secret_access_log (owner_id, secret_name, accessed_by)
- VALUES (owner_id, secret_name, current_user_id());
-
- RETURN secret_value;
-END;
-$$ LANGUAGE plpgsql;
-```
-
-4. **Never Log Secrets**: Ensure application logs don't capture decrypted values.
-
-5. **Use HTTPS**: Always transmit secrets over encrypted connections.
-
-## Integration with Other Packages
-
-### With @pgpm/encrypted-secrets-table
-
-This package builds directly on the storage layer:
-
-```sql
--- High-level API (this package)
-SELECT encrypted_secrets.secrets_upsert('uuid', 'key', 'value');
-
--- Low-level storage (encrypted-secrets-table)
-SELECT * FROM secrets_schema.secrets_table WHERE secrets_owned_field = 'uuid';
-```
-
-### With PGPM roles
-
-Ensure the standard roles exist before granting:
-
-```bash
-pgpm admin-users bootstrap
-```
-
-```sql
--- Only authenticated users can manage secrets
-GRANT EXECUTE ON FUNCTION encrypted_secrets.secrets_upsert TO authenticated;
-GRANT EXECUTE ON FUNCTION encrypted_secrets.secrets_getter TO authenticated;
-GRANT EXECUTE ON FUNCTION encrypted_secrets.secrets_verify TO authenticated;
-GRANT EXECUTE ON FUNCTION encrypted_secrets.secrets_delete TO authenticated;
-```
-
-### With @pgpm/jwt-claims
-
-Use JWT claims for owner context:
-
-```sql
--- Store secret for current user
-SELECT encrypted_secrets.secrets_upsert(
- jwt_public.current_user_id(),
- 'personal_api_key',
- 'key-value',
- 'pgp'
-);
-
--- Get secret for current user
-SELECT encrypted_secrets.secrets_getter(
- jwt_public.current_user_id(),
- 'personal_api_key'
-);
-```
-
-## Dependencies
-
-- PGPM roles (anonymous, authenticated, administrator)
-- `@pgpm/encrypted-secrets-table`: Storage layer
-- `@pgpm/verify`: Verification utilities
-- PostgreSQL pgcrypto extension (for encryption functions)
-
-## Testing
-
-```bash
-pnpm test
-```
-
-## Related Tooling
-
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
-* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
-* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
-* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
-
-## Disclaimer
-
-AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED "AS IS", AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND.
-
-No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value.
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/__tests__/__snapshots__/secrets.test.ts.snap b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/__tests__/__snapshots__/secrets.test.ts.snap
deleted file mode 100644
index 19f1b8f6d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/__tests__/__snapshots__/secrets.test.ts.snap
+++ /dev/null
@@ -1,28 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`encrypted secrets encrypt_field_bytea_to_text 1`] = `"value-there-and-back"`;
-
-exports[`encrypted secrets encrypt_field_pgp_get 1`] = `"my-secret"`;
-
-exports[`encrypted secrets encrypt_field_set 1`] = `
-{
- "data": [
- 109,
- 121,
- 118,
- 97,
- 108,
- 117,
- 101,
- ],
- "type": "Buffer",
-}
-`;
-
-exports[`encrypted secrets secrets_getter 1`] = `"my-secret"`;
-
-exports[`encrypted secrets secrets_upsert 1`] = `true`;
-
-exports[`encrypted secrets secrets_upsert 2`] = `true`;
-
-exports[`encrypted secrets secrets_verify 1`] = `true`;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/__tests__/secrets.test.ts b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/__tests__/secrets.test.ts
deleted file mode 100644
index 3d3acaf27..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/__tests__/secrets.test.ts
+++ /dev/null
@@ -1,193 +0,0 @@
-import { getConnections, PgTestClient } from 'pgsql-test';
-
-let pg: PgTestClient;
-let teardown: () => Promise;
-
-const user_id = 'dc474833-318a-41f5-9239-ee563ab657a6';
-
-describe('encrypted secrets', () => {
- beforeAll(async () => {
- ({ pg, teardown } = await getConnections());
- });
-
- afterAll(async () => {
- await teardown();
- });
-
- beforeEach(async () => {
- await pg.beforeEach();
-
- // Insert test data
- await pg.any(`
- INSERT INTO secrets_schema.secrets_table
- ( secrets_owned_field,
- name,
- secrets_value_field,
- secrets_enc_field
- ) VALUES
- (
- $1::uuid,
- 'my-secret-name',
- 'my-secret'::bytea,
- 'pgp'
- )
- `, [user_id]);
- });
-
- afterEach(async () => {
- await pg.afterEach();
- });
-
- it('encrypt_field_pgp_get', async () => {
- const [{ encrypt_field_pgp_get }] = await pg.any(
- `SELECT encrypted_secrets.encrypt_field_pgp_get(secrets_value_field, secrets_owned_field::text)
- FROM secrets_schema.secrets_table
- WHERE secrets_owned_field = $1`,
- [user_id]
- );
- expect(encrypt_field_pgp_get).toMatchSnapshot();
- });
-
- it('encrypt_field_set', async () => {
- const [{ encrypt_field_set }] = await pg.any(
- `SELECT encrypted_secrets.encrypt_field_set('myvalue')`
- );
- expect(encrypt_field_set).toMatchSnapshot();
- });
-
- it('encrypt_field_bytea_to_text', async () => {
- const [{ encrypt_field_bytea_to_text }] = await pg.any(
- `SELECT encrypted_secrets.encrypt_field_bytea_to_text(
- encrypted_secrets.encrypt_field_set('value-there-and-back')
- )`
- );
- expect(encrypt_field_bytea_to_text).toMatchSnapshot();
- });
-
- it('secrets_getter', async () => {
- const [{ secrets_getter }] = await pg.any(
- `SELECT encrypted_secrets.secrets_getter(
- $1::uuid,
- 'my-secret-name'
- )`,
- [user_id]
- );
- expect(secrets_getter).toMatchSnapshot();
- });
-
- it('secrets_verify', async () => {
- const [{ secrets_verify }] = await pg.any(
- `SELECT encrypted_secrets.secrets_verify(
- $1::uuid,
- 'my-secret-name',
- 'my-secret'
- )`,
- [user_id]
- );
- expect(secrets_verify).toMatchSnapshot();
- });
-
- it('secrets_upsert', async () => {
- const [{ secrets_upsert }] = await pg.any(
- `SELECT encrypted_secrets.secrets_upsert(
- $1::uuid,
- 'my-secret-name',
- 'my-secret-other-value'
- )`,
- [user_id]
- );
- expect(secrets_upsert).toMatchSnapshot();
-
- const [{ secrets_verify }] = await pg.any(
- `SELECT encrypted_secrets.secrets_verify(
- $1::uuid,
- 'my-secret-name',
- 'my-secret-other-value'
- )`,
- [user_id]
- );
- expect(secrets_verify).toMatchSnapshot();
- });
-
- it('secrets_delete single', async () => {
- // First verify the secret exists
- const [beforeDelete] = await pg.any(
- `SELECT encrypted_secrets.secrets_getter($1::uuid, 'my-secret-name')`,
- [user_id]
- );
- expect(beforeDelete.secrets_getter).toBe('my-secret');
-
- // Delete the secret
- await pg.any(
- `SELECT encrypted_secrets.secrets_delete($1::uuid, 'my-secret-name')`,
- [user_id]
- );
-
- // Verify it's gone
- const [afterDelete] = await pg.any(
- `SELECT encrypted_secrets.secrets_getter($1::uuid, 'my-secret-name', 'default-value')`,
- [user_id]
- );
- expect(afterDelete.secrets_getter).toBe('default-value');
- });
-
- it('secrets_delete multiple', async () => {
- // Add multiple secrets
- await pg.any(
- `SELECT encrypted_secrets.secrets_upsert($1::uuid, 'secret-1', 'value-1')`,
- [user_id]
- );
- await pg.any(
- `SELECT encrypted_secrets.secrets_upsert($1::uuid, 'secret-2', 'value-2')`,
- [user_id]
- );
-
- // Delete multiple secrets
- await pg.any(
- `SELECT encrypted_secrets.secrets_delete($1::uuid, $2::text[])`,
- [user_id, ['secret-1', 'secret-2']]
- );
-
- // Verify they're gone
- const [result1] = await pg.any(
- `SELECT encrypted_secrets.secrets_getter($1::uuid, 'secret-1', 'not-found')`,
- [user_id]
- );
- const [result2] = await pg.any(
- `SELECT encrypted_secrets.secrets_getter($1::uuid, 'secret-2', 'not-found')`,
- [user_id]
- );
-
- expect(result1.secrets_getter).toBe('not-found');
- expect(result2.secrets_getter).toBe('not-found');
- });
-
- xit('encrypt_field_pgp_getter', async () => {
- const [{ encrypt_field_pgp_getter }] = await pg.any(
- `SELECT encrypted_secrets.encrypt_field_pgp_getter(
- $1::uuid,
- 'secrets_value_field',
- 'secrets_enc_field'
- )`,
- [user_id]
- );
- expect(encrypt_field_pgp_getter).toMatchSnapshot();
- });
-
- xit('secrets_table_upsert', async () => {
- const [{ secrets_table_upsert }] = await pg.any(
- `SELECT encrypted_secrets.secrets_table_upsert(
- $1::uuid,
- $2::json
- )`,
- [
- user_id,
- JSON.stringify({
- myOther: 'secret',
- hiOther: 'here'
- })
- ]
- );
- expect(secrets_table_upsert).toMatchSnapshot();
- });
-});
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_bytea_to_text.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_bytea_to_text.sql
deleted file mode 100644
index 93d092840..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_bytea_to_text.sql
+++ /dev/null
@@ -1,17 +0,0 @@
--- Deploy schemas/encrypted_secrets/procedures/encrypt_field_bytea_to_text to pg
-
--- requires: schemas/encrypted_secrets/schema
-
-BEGIN;
-
-CREATE FUNCTION encrypted_secrets.encrypt_field_bytea_to_text(
- secret_value bytea
-)
- RETURNS text
-AS $$
- SELECT
- convert_from(encrypt_field_bytea_to_text.secret_value, 'SQL_ASCII');
-$$
-LANGUAGE 'sql' IMMUTABLE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_crypt.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_crypt.sql
deleted file mode 100644
index da4e3dce5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_crypt.sql
+++ /dev/null
@@ -1,17 +0,0 @@
--- Deploy schemas/encrypted_secrets/procedures/encrypt_field_crypt to pg
-
--- requires: schemas/encrypted_secrets/schema
-
-BEGIN;
-
-CREATE FUNCTION encrypted_secrets.encrypt_field_crypt()
-RETURNS TRIGGER
-AS $CODEZ$
-BEGIN
- NEW.field_name = crypt(NEW.field_name::text, gen_salt('bf'));
- RETURN NEW;
-END;
-$CODEZ$
-LANGUAGE plpgsql VOLATILE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_crypt_verify.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_crypt_verify.sql
deleted file mode 100644
index 0a7f03d7c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_crypt_verify.sql
+++ /dev/null
@@ -1,37 +0,0 @@
--- Deploy schemas/encrypted_secrets/procedures/encrypt_field_crypt_verify to pg
-
--- requires: schemas/encrypted_secrets/schema
-
-BEGIN;
-
-CREATE FUNCTION encrypted_secrets.encrypt_field_crypt_verify(
- secrets_owned_field uuid,
- secret_value_field text,
- secret_verify_value text
-)
- RETURNS bool
-AS $$
- DECLARE
- result bool;
- rec secrets_schema.secrets_table;
- s_value text;
- BEGIN
-
- SELECT * FROM secrets_schema.secrets_table s
- WHERE s.secrets_owned_field = encrypt_field_crypt_verify.secrets_owned_field
- INTO rec;
-
- EXECUTE format('SELECT ($1).%s::text', secret_value_field)
- USING rec
- INTO s_value;
-
- SELECT
- s_value = crypt(secret_verify_value, s_value)
- INTO result;
-
- RETURN result;
-END;
-$$
-LANGUAGE 'plpgsql' STABLE;
-
-COMMIT;
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_pgp.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_pgp.sql
deleted file mode 100644
index 1e78933e9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_pgp.sql
+++ /dev/null
@@ -1,17 +0,0 @@
--- Deploy schemas/encrypted_secrets/procedures/encrypt_field_pgp to pg
-
--- requires: schemas/encrypted_secrets/schema
-
-BEGIN;
-
-CREATE FUNCTION encrypted_secrets.encrypt_field_pgp()
-RETURNS TRIGGER
-AS $CODEZ$
-BEGIN
- NEW.field_name = pgp_sym_encrypt(encode(NEW.field_name::bytea, 'hex'), NEW.encode_field::text, 'compress-algo=1, cipher-algo=aes256');
- RETURN NEW;
-END;
-$CODEZ$
-LANGUAGE plpgsql VOLATILE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_pgp_get.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_pgp_get.sql
deleted file mode 100644
index 02e1e6271..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_pgp_get.sql
+++ /dev/null
@@ -1,18 +0,0 @@
--- Deploy schemas/encrypted_secrets/procedures/encrypt_field_pgp_get to pg
-
--- requires: schemas/encrypted_secrets/schema
-
-BEGIN;
-
-CREATE FUNCTION encrypted_secrets.encrypt_field_pgp_get(
- secret_value bytea,
- secret_encode text
-)
- RETURNS text
-AS $$
- SELECT
- convert_from(decode(pgp_sym_decrypt(encrypt_field_pgp_get.secret_value, encrypt_field_pgp_get.secret_encode), 'hex'), 'SQL_ASCII');
-$$
-LANGUAGE 'sql';
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_pgp_getter.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_pgp_getter.sql
deleted file mode 100644
index fe3c4ceda..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_pgp_getter.sql
+++ /dev/null
@@ -1,42 +0,0 @@
--- Deploy schemas/encrypted_secrets/procedures/encrypt_field_pgp_getter to pg
-
--- requires: schemas/encrypted_secrets/schema
-
-BEGIN;
-
-CREATE FUNCTION encrypted_secrets.encrypt_field_pgp_getter(
- secrets_owned_field uuid,
- secret_value_field text,
- secret_encode_field text
-)
- RETURNS text
-AS $$
- DECLARE
- result text;
- rec secrets_schema.secrets_table;
- s_value bytea;
- s_enc text;
- BEGIN
-
- SELECT * FROM secrets_schema.secrets_table s
- WHERE s.secrets_owned_field = encrypt_field_pgp_getter.secrets_owned_field
- INTO rec;
-
- EXECUTE format('SELECT ($1).%s::text', secret_value_field)
- USING rec
- INTO s_value;
-
- EXECUTE format('SELECT ($1).%s::text', secret_encode_field)
- USING rec
- INTO s_enc;
-
- SELECT
- convert_from(decode(pgp_sym_decrypt(s_value, s_enc), 'hex'), 'SQL_ASCII')
- INTO result;
-
- RETURN result;
-END;
-$$
-LANGUAGE 'plpgsql' STABLE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_set.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_set.sql
deleted file mode 100644
index 1024f78c8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/encrypt_field_set.sql
+++ /dev/null
@@ -1,16 +0,0 @@
--- Deploy schemas/encrypted_secrets/procedures/encrypt_field_set to pg
-
--- requires: schemas/encrypted_secrets/schema
-
-BEGIN;
-
-CREATE FUNCTION encrypted_secrets.encrypt_field_set(
- secret_value text
-)
- RETURNS bytea
-AS $$
- SELECT encrypt_field_set.secret_value::bytea;
-$$
-LANGUAGE 'sql';
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_delete.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_delete.sql
deleted file mode 100644
index 6a94cd835..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_delete.sql
+++ /dev/null
@@ -1,40 +0,0 @@
--- Deploy schemas/encrypted_secrets/procedures/secrets_delete to pg
-
--- requires: schemas/encrypted_secrets/schema
-
-BEGIN;
-
-CREATE FUNCTION encrypted_secrets.secrets_delete(
- secrets_owned_field uuid,
- secret_name text
-)
- RETURNS void
- AS $$
-BEGIN
- DELETE FROM secrets_schema.secrets_table s
- WHERE s.secrets_owned_field = secrets_delete.secrets_owned_field
- AND s.name = secrets_delete.secret_name;
-END
-$$
-LANGUAGE 'plpgsql'
-VOLATILE;
-
-CREATE FUNCTION encrypted_secrets.secrets_delete(
- secrets_owned_field uuid,
- secret_names text[]
-)
- RETURNS void
- AS $$
-BEGIN
- DELETE FROM secrets_schema.secrets_table s
- WHERE s.secrets_owned_field = secrets_delete.secrets_owned_field
- AND s.name = ANY(secrets_delete.secret_names);
-END
-$$
-LANGUAGE 'plpgsql'
-VOLATILE;
-
-GRANT EXECUTE ON FUNCTION encrypted_secrets.secrets_delete(uuid,text) TO authenticated;
-GRANT EXECUTE ON FUNCTION encrypted_secrets.secrets_delete(uuid,text[]) TO authenticated;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_getter.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_getter.sql
deleted file mode 100644
index d1a87ff14..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_getter.sql
+++ /dev/null
@@ -1,43 +0,0 @@
--- Deploy schemas/encrypted_secrets/procedures/secrets_getter to pg
-
--- requires: schemas/encrypted_secrets/schema
-
-BEGIN;
-
-CREATE FUNCTION encrypted_secrets.secrets_getter(
- secrets_owned_field uuid,
- secret_name text,
- default_value text default null
-)
- RETURNS text
- AS $$
-DECLARE
- v_secret secrets_schema.secrets_table;
-BEGIN
- SELECT
- *
- FROM
- secrets_schema.secrets_table s
- WHERE
- s.name = secrets_getter.secret_name
- AND s.secrets_owned_field = secrets_getter.secrets_owned_field
- INTO v_secret;
-
- IF (NOT FOUND OR v_secret IS NULL) THEN
- RETURN secrets_getter.default_value;
- END IF;
-
- IF (v_secret.secrets_enc_field = 'crypt') THEN
- RETURN convert_from(v_secret.secrets_value_field, 'SQL_ASCII');
- ELSIF (v_secret.secrets_enc_field = 'pgp') THEN
- RETURN convert_from(decode(pgp_sym_decrypt(v_secret.secrets_value_field, v_secret.secrets_owned_field::text), 'hex'), 'SQL_ASCII');
- END IF;
-
- RETURN convert_from(v_secret.secrets_value_field, 'SQL_ASCII');
-
-END
-$$
-LANGUAGE 'plpgsql'
-STABLE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_table_upsert.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_table_upsert.sql
deleted file mode 100644
index 5fd2b95b6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_table_upsert.sql
+++ /dev/null
@@ -1,67 +0,0 @@
--- Deploy schemas/encrypted_secrets/procedures/secrets_table_upsert to pg
-
--- requires: schemas/encrypted_secrets/schema
-
-BEGIN;
-
-CREATE FUNCTION encrypted_secrets.secrets_table_upsert(
- secrets_owned_field uuid,
- data json
-)
- RETURNS void
-AS $$
-DECLARE
- rec secrets_schema.secrets_table;
- _sql text;
- key text;
-
- fields text[] = ARRAY[]::text[];
- values text[] = ARRAY[]::text[];
- pairs text[] = ARRAY[]::text[];
-BEGIN
-
- SELECT * FROM secrets_schema.secrets_table s
- WHERE s.secrets_owned_field = secrets_table_upsert.secrets_owned_field
- INTO rec;
-
- IF (FOUND) THEN
-
- FOR key IN SELECT json_object_keys(data)
- LOOP
- pairs = array_append(pairs, format('%s=%s', key, quote_literal(data->>key)));
- END LOOP;
-
- _sql = 'UPDATE secrets_schema.secrets_table SET '; -- it's already quoted! look at I above...
- _sql = _sql || format('%s', array_to_string(pairs, ','));
- _sql = _sql || ' WHERE secrets_owned_field=';
- _sql = _sql || quote_literal(secrets_owned_field);
- _sql = _sql || ';';
-
- ELSE
-
- values = array_append(values, quote_literal(secrets_owned_field));
- fields = array_append(fields, 'secrets_owned_field');
-
- FOR key IN SELECT json_object_keys(data)
- LOOP
- values = array_append(values, quote_literal(data->>key));
- fields = array_append(fields, key);
- END LOOP;
-
- _sql = 'INSERT INTO secrets_schema.secrets_table ('; -- it's already quoted! look at I above...
- _sql = _sql || format('%s)', array_to_string(fields, ','));
- _sql = _sql || ' VALUES (';
- _sql = _sql || format('%s)', array_to_string(values, ','));
- _sql = _sql || ';';
-
- END IF;
-
- EXECUTE _sql;
-
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-GRANT EXECUTE ON FUNCTION encrypted_secrets.secrets_table_upsert TO authenticated;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_upsert.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_upsert.sql
deleted file mode 100644
index 705f62581..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_upsert.sql
+++ /dev/null
@@ -1,33 +0,0 @@
--- Deploy schemas/encrypted_secrets/procedures/secrets_upsert to pg
-
--- requires: schemas/encrypted_secrets/schema
-
-BEGIN;
-
-CREATE FUNCTION encrypted_secrets.secrets_upsert(
- v_secrets_owned_field uuid,
- secret_name text,
- secret_value text,
- field_encoding text = 'pgp'
-)
- RETURNS boolean
- AS $$
-BEGIN
- INSERT INTO secrets_schema.secrets_table (secrets_owned_field, name, secrets_value_field, secrets_enc_field)
- VALUES (v_secrets_owned_field, secrets_upsert.secret_name, secrets_upsert.secret_value::bytea, secrets_upsert.field_encoding)
- ON CONFLICT (secrets_owned_field, name)
- DO
- UPDATE
- SET
- -- don't change this, cannot use EXCLUDED, don't know why, but you have to set to the ::bytea
- secrets_value_field = secrets_upsert.secret_value::bytea,
- secrets_enc_field = EXCLUDED.secrets_enc_field;
- RETURN TRUE;
-END
-$$
-LANGUAGE 'plpgsql'
-VOLATILE;
-
-GRANT EXECUTE ON FUNCTION encrypted_secrets.secrets_upsert TO authenticated;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_verify.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_verify.sql
deleted file mode 100644
index ac6544a8c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/procedures/secrets_verify.sql
+++ /dev/null
@@ -1,46 +0,0 @@
--- Deploy schemas/encrypted_secrets/procedures/secrets_verify to pg
-
--- requires: schemas/encrypted_secrets/schema
-
-BEGIN;
-
-CREATE FUNCTION encrypted_secrets.secrets_verify(
- secrets_owned_field uuid,
- secret_name text,
- secret_value text
-)
- RETURNS boolean
- AS $$
-DECLARE
- v_secret_text text;
- v_secret secrets_schema.secrets_table;
-BEGIN
- SELECT
- *
- FROM
- encrypted_secrets.secrets_getter (secrets_verify.secrets_owned_field, secrets_verify.secret_name)
- INTO v_secret_text;
-
- SELECT
- *
- FROM
- secrets_schema.secrets_table s
- WHERE
- s.name = secrets_verify.secret_name
- AND s.secrets_owned_field = secrets_verify.secrets_owned_field INTO v_secret;
-
- IF (v_secret.secrets_enc_field = 'crypt') THEN
- RETURN v_secret_text = crypt(secrets_verify.secret_value::bytea::text, v_secret_text);
- ELSIF (v_secret.secrets_enc_field = 'pgp') THEN
- RETURN secrets_verify.secret_value = v_secret_text;
- END IF;
-
- RETURN secrets_verify.secret_value = v_secret_text;
-END
-$$
-LANGUAGE 'plpgsql'
-STABLE;
-
-GRANT EXECUTE ON FUNCTION encrypted_secrets.secrets_verify TO authenticated;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/schema.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/schema.sql
deleted file mode 100644
index e7c0f5970..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/deploy/schemas/encrypted_secrets/schema.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Deploy schemas/encrypted_secrets/schema to pg
-
-
-BEGIN;
-
-CREATE SCHEMA encrypted_secrets;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/package.json b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/package.json
deleted file mode 100644
index eb73e530a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/package.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "name": "@pgpm/encrypted-secrets",
- "version": "0.15.2",
- "description": "Encrypted secrets management for PostgreSQL",
- "author": "Dan Lynch ",
- "contributors": [
- "Constructive "
- ],
- "keywords": [
- "postgresql",
- "pgpm",
- "encryption",
- "secrets"
- ],
- "publishConfig": {
- "access": "public"
- },
- "scripts": {
- "bundle": "pgpm package",
- "test": "jest",
- "test:watch": "jest --watch"
- },
- "dependencies": {
- "@pgpm/encrypted-secrets-table": "0.15.2",
- "@pgpm/verify": "0.15.2"
- },
- "devDependencies": {
- "pgpm": "^1.0.0"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/constructive-io/pgpm-modules"
- },
- "homepage": "https://github.com/constructive-io/pgpm-modules",
- "bugs": {
- "url": "https://github.com/constructive-io/pgpm-modules/issues"
- }
-}
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/pgpm-encrypted-secrets.control b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/pgpm-encrypted-secrets.control
deleted file mode 100644
index a7fee14a9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/pgpm-encrypted-secrets.control
+++ /dev/null
@@ -1,8 +0,0 @@
-# pgpm-encrypted-secrets extension
-comment = 'pgpm-encrypted-secrets extension'
-default_version = '0.14.0'
-module_pathname = '$libdir/pgpm-encrypted-secrets'
-requires = 'pgcrypto,plpgsql,uuid-ossp,pgpm-encrypted-secrets-table,pgpm-verify'
-relocatable = false
-superuser = false
-
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/pgpm.plan b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/pgpm.plan
deleted file mode 100644
index 7e707ff42..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/pgpm.plan
+++ /dev/null
@@ -1,17 +0,0 @@
-%syntax-version=1.0.0
-%project=pgpm-encrypted-secrets
-%uri=pgpm-encrypted-secrets
-
-schemas/encrypted_secrets/schema 2020-11-01T21:22:30Z Dan Lynch # add schemas/encrypted_secrets/schema
-schemas/encrypted_secrets/procedures/encrypt_field_bytea_to_text [schemas/encrypted_secrets/schema] 2020-11-01T21:22:54Z Dan Lynch # add schemas/encrypted_secrets/procedures/encrypt_field_bytea_to_text
-schemas/encrypted_secrets/procedures/encrypt_field_crypt_verify [schemas/encrypted_secrets/schema] 2020-11-01T21:23:11Z Dan Lynch # add schemas/encrypted_secrets/procedures/encrypt_field_crypt_verify
-schemas/encrypted_secrets/procedures/encrypt_field_crypt [schemas/encrypted_secrets/schema] 2020-11-01T21:23:19Z Dan Lynch # add schemas/encrypted_secrets/procedures/encrypt_field_crypt
-schemas/encrypted_secrets/procedures/encrypt_field_pgp_get [schemas/encrypted_secrets/schema] 2020-11-01T21:23:29Z Dan Lynch # add schemas/encrypted_secrets/procedures/encrypt_field_pgp_get
-schemas/encrypted_secrets/procedures/encrypt_field_pgp_getter [schemas/encrypted_secrets/schema] 2020-11-01T21:23:36Z Dan Lynch # add schemas/encrypted_secrets/procedures/encrypt_field_pgp_getter
-schemas/encrypted_secrets/procedures/encrypt_field_pgp [schemas/encrypted_secrets/schema] 2020-11-01T21:23:45Z Dan Lynch # add schemas/encrypted_secrets/procedures/encrypt_field_pgp
-schemas/encrypted_secrets/procedures/encrypt_field_set [schemas/encrypted_secrets/schema] 2020-11-01T21:24:05Z Dan Lynch # add schemas/encrypted_secrets/procedures/encrypt_field_set
-schemas/encrypted_secrets/procedures/secrets_getter [schemas/encrypted_secrets/schema] 2020-11-01T21:24:23Z Dan Lynch # add schemas/encrypted_secrets/procedures/secrets_getter
-schemas/encrypted_secrets/procedures/secrets_upsert [schemas/encrypted_secrets/schema] 2020-11-01T21:24:35Z Dan Lynch # add schemas/encrypted_secrets/procedures/secrets_upsert
-schemas/encrypted_secrets/procedures/secrets_verify [schemas/encrypted_secrets/schema] 2020-11-01T21:24:41Z Dan Lynch # add schemas/encrypted_secrets/procedures/secrets_verify
-schemas/encrypted_secrets/procedures/secrets_table_upsert [schemas/encrypted_secrets/schema] 2020-11-01T21:25:00Z Dan Lynch # add schemas/encrypted_secrets/procedures/secrets_table_upsert
-schemas/encrypted_secrets/procedures/secrets_delete [schemas/encrypted_secrets/schema] 2020-11-01T21:31:24Z Dan Lynch # add schemas/encrypted_secrets/procedures/secrets_delete
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_bytea_to_text.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_bytea_to_text.sql
deleted file mode 100644
index a2c7cfce0..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_bytea_to_text.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/encrypted_secrets/procedures/encrypt_field_bytea_to_text from pg
-
-BEGIN;
-
-DROP FUNCTION encrypted_secrets.encrypt_field_bytea_to_text;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_crypt.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_crypt.sql
deleted file mode 100644
index bba249384..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_crypt.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/encrypted_secrets/procedures/encrypt_field_crypt from pg
-
-BEGIN;
-
-DROP FUNCTION encrypted_secrets.encrypt_field_crypt;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_crypt_verify.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_crypt_verify.sql
deleted file mode 100644
index 07402fe40..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_crypt_verify.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/encrypted_secrets/procedures/encrypt_field_crypt_verify from pg
-
-BEGIN;
-
-DROP FUNCTION encrypted_secrets.encrypt_field_crypt_verify;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_pgp.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_pgp.sql
deleted file mode 100644
index 7d186482c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_pgp.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/encrypted_secrets/procedures/encrypt_field_pgp from pg
-
-BEGIN;
-
-DROP FUNCTION encrypted_secrets.encrypt_field_pgp;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_pgp_get.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_pgp_get.sql
deleted file mode 100644
index f3933b493..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_pgp_get.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/encrypted_secrets/procedures/encrypt_field_pgp_get from pg
-
-BEGIN;
-
-DROP FUNCTION encrypted_secrets.encrypt_field_pgp_get;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_pgp_getter.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_pgp_getter.sql
deleted file mode 100644
index c5a140e74..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_pgp_getter.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/encrypted_secrets/procedures/encrypt_field_pgp_getter from pg
-
-BEGIN;
-
-DROP FUNCTION encrypted_secrets.encrypt_field_pgp_getter;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_set.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_set.sql
deleted file mode 100644
index 31070214e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/encrypt_field_set.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/encrypted_secrets/procedures/encrypt_field_set from pg
-
-BEGIN;
-
-DROP FUNCTION encrypted_secrets.encrypt_field_set;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_delete.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_delete.sql
deleted file mode 100644
index 962dae65f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_delete.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Revert schemas/encrypted_secrets/procedures/secrets_delete from pg
-
-BEGIN;
-
-DROP FUNCTION encrypted_secrets.secrets_delete(uuid, text);
-DROP FUNCTION encrypted_secrets.secrets_delete(uuid, text[]);
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_getter.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_getter.sql
deleted file mode 100644
index c51010ad9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_getter.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/encrypted_secrets/procedures/secrets_getter from pg
-
-BEGIN;
-
-DROP FUNCTION encrypted_secrets.secrets_getter;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_table_upsert.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_table_upsert.sql
deleted file mode 100644
index 61f670699..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_table_upsert.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/encrypted_secrets/procedures/secrets_table_upsert from pg
-
-BEGIN;
-
-DROP FUNCTION encrypted_secrets.secrets_table_upsert;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_upsert.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_upsert.sql
deleted file mode 100644
index e9d350b77..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_upsert.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/encrypted_secrets/procedures/secrets_upsert from pg
-
-BEGIN;
-
-DROP FUNCTION encrypted_secrets.secrets_upsert;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_verify.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_verify.sql
deleted file mode 100644
index 01e34d7c6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/procedures/secrets_verify.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/encrypted_secrets/procedures/secrets_verify from pg
-
-BEGIN;
-
-DROP FUNCTION encrypted_secrets.secrets_verify;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/schema.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/schema.sql
deleted file mode 100644
index 0fa732bed..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/revert/schemas/encrypted_secrets/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/encrypted_secrets/schema from pg
-
-BEGIN;
-
-DROP SCHEMA encrypted_secrets;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/sql/pgpm-encrypted-secrets--0.14.0.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/sql/pgpm-encrypted-secrets--0.14.0.sql
deleted file mode 100644
index 0aa1dffda..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/sql/pgpm-encrypted-secrets--0.14.0.sql
+++ /dev/null
@@ -1,231 +0,0 @@
-\echo Use "CREATE EXTENSION pgpm-encrypted-secrets" to load this file. \quit
-CREATE SCHEMA encrypted_secrets;
-
-CREATE FUNCTION encrypted_secrets.encrypt_field_bytea_to_text(secret_value bytea) RETURNS text AS $EOFCODE$
- SELECT
- convert_from(encrypt_field_bytea_to_text.secret_value, 'SQL_ASCII');
-$EOFCODE$ LANGUAGE sql IMMUTABLE;
-
-CREATE FUNCTION encrypted_secrets.encrypt_field_crypt_verify(secrets_owned_field uuid, secret_value_field text, secret_verify_value text) RETURNS bool AS $EOFCODE$
- DECLARE
- result bool;
- rec secrets_schema.secrets_table;
- s_value text;
- BEGIN
-
- SELECT * FROM secrets_schema.secrets_table s
- WHERE s.secrets_owned_field = encrypt_field_crypt_verify.secrets_owned_field
- INTO rec;
-
- EXECUTE format('SELECT ($1).%s::text', secret_value_field)
- USING rec
- INTO s_value;
-
- SELECT
- s_value = crypt(secret_verify_value, s_value)
- INTO result;
-
- RETURN result;
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-CREATE FUNCTION encrypted_secrets.encrypt_field_crypt() RETURNS trigger AS $EOFCODE$
-BEGIN
- NEW.field_name = crypt(NEW.field_name::text, gen_salt('bf'));
- RETURN NEW;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION encrypted_secrets.encrypt_field_pgp_get(secret_value bytea, secret_encode text) RETURNS text AS $EOFCODE$
- SELECT
- convert_from(decode(pgp_sym_decrypt(encrypt_field_pgp_get.secret_value, encrypt_field_pgp_get.secret_encode), 'hex'), 'SQL_ASCII');
-$EOFCODE$ LANGUAGE sql;
-
-CREATE FUNCTION encrypted_secrets.encrypt_field_pgp_getter(secrets_owned_field uuid, secret_value_field text, secret_encode_field text) RETURNS text AS $EOFCODE$
- DECLARE
- result text;
- rec secrets_schema.secrets_table;
- s_value bytea;
- s_enc text;
- BEGIN
-
- SELECT * FROM secrets_schema.secrets_table s
- WHERE s.secrets_owned_field = encrypt_field_pgp_getter.secrets_owned_field
- INTO rec;
-
- EXECUTE format('SELECT ($1).%s::text', secret_value_field)
- USING rec
- INTO s_value;
-
- EXECUTE format('SELECT ($1).%s::text', secret_encode_field)
- USING rec
- INTO s_enc;
-
- SELECT
- convert_from(decode(pgp_sym_decrypt(s_value, s_enc), 'hex'), 'SQL_ASCII')
- INTO result;
-
- RETURN result;
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-CREATE FUNCTION encrypted_secrets.encrypt_field_pgp() RETURNS trigger AS $EOFCODE$
-BEGIN
- NEW.field_name = pgp_sym_encrypt(encode(NEW.field_name::bytea, 'hex'), NEW.encode_field::text, 'compress-algo=1, cipher-algo=aes256');
- RETURN NEW;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION encrypted_secrets.encrypt_field_set(secret_value text) RETURNS bytea AS $EOFCODE$
- SELECT encrypt_field_set.secret_value::bytea;
-$EOFCODE$ LANGUAGE sql;
-
-CREATE FUNCTION encrypted_secrets.secrets_getter(secrets_owned_field uuid, secret_name text, default_value text DEFAULT NULL) RETURNS text AS $EOFCODE$
-DECLARE
- v_secret secrets_schema.secrets_table;
-BEGIN
- SELECT
- *
- FROM
- secrets_schema.secrets_table s
- WHERE
- s.name = secrets_getter.secret_name
- AND s.secrets_owned_field = secrets_getter.secrets_owned_field
- INTO v_secret;
-
- IF (NOT FOUND OR v_secret IS NULL) THEN
- RETURN secrets_getter.default_value;
- END IF;
-
- IF (v_secret.secrets_enc_field = 'crypt') THEN
- RETURN convert_from(v_secret.secrets_value_field, 'SQL_ASCII');
- ELSIF (v_secret.secrets_enc_field = 'pgp') THEN
- RETURN convert_from(decode(pgp_sym_decrypt(v_secret.secrets_value_field, v_secret.secrets_owned_field::text), 'hex'), 'SQL_ASCII');
- END IF;
-
- RETURN convert_from(v_secret.secrets_value_field, 'SQL_ASCII');
-
-END
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-CREATE FUNCTION encrypted_secrets.secrets_upsert(v_secrets_owned_field uuid, secret_name text, secret_value text, field_encoding text DEFAULT 'pgp') RETURNS boolean AS $EOFCODE$
-BEGIN
- INSERT INTO secrets_schema.secrets_table (secrets_owned_field, name, secrets_value_field, secrets_enc_field)
- VALUES (v_secrets_owned_field, secrets_upsert.secret_name, secrets_upsert.secret_value::bytea, secrets_upsert.field_encoding)
- ON CONFLICT (secrets_owned_field, name)
- DO
- UPDATE
- SET
- -- don't change this, cannot use EXCLUDED, don't know why, but you have to set to the ::bytea
- secrets_value_field = secrets_upsert.secret_value::bytea,
- secrets_enc_field = EXCLUDED.secrets_enc_field;
- RETURN TRUE;
-END
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-GRANT EXECUTE ON FUNCTION encrypted_secrets.secrets_upsert TO authenticated;
-
-CREATE FUNCTION encrypted_secrets.secrets_verify(secrets_owned_field uuid, secret_name text, secret_value text) RETURNS boolean AS $EOFCODE$
-DECLARE
- v_secret_text text;
- v_secret secrets_schema.secrets_table;
-BEGIN
- SELECT
- *
- FROM
- encrypted_secrets.secrets_getter (secrets_verify.secrets_owned_field, secrets_verify.secret_name)
- INTO v_secret_text;
-
- SELECT
- *
- FROM
- secrets_schema.secrets_table s
- WHERE
- s.name = secrets_verify.secret_name
- AND s.secrets_owned_field = secrets_verify.secrets_owned_field INTO v_secret;
-
- IF (v_secret.secrets_enc_field = 'crypt') THEN
- RETURN v_secret_text = crypt(secrets_verify.secret_value::bytea::text, v_secret_text);
- ELSIF (v_secret.secrets_enc_field = 'pgp') THEN
- RETURN secrets_verify.secret_value = v_secret_text;
- END IF;
-
- RETURN secrets_verify.secret_value = v_secret_text;
-END
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-GRANT EXECUTE ON FUNCTION encrypted_secrets.secrets_verify TO authenticated;
-
-CREATE FUNCTION encrypted_secrets.secrets_table_upsert(secrets_owned_field uuid, data pg_catalog.json) RETURNS void AS $EOFCODE$
-DECLARE
- rec secrets_schema.secrets_table;
- _sql text;
- key text;
-
- fields text[] = ARRAY[]::text[];
- values text[] = ARRAY[]::text[];
- pairs text[] = ARRAY[]::text[];
-BEGIN
-
- SELECT * FROM secrets_schema.secrets_table s
- WHERE s.secrets_owned_field = secrets_table_upsert.secrets_owned_field
- INTO rec;
-
- IF (FOUND) THEN
-
- FOR key IN SELECT json_object_keys(data)
- LOOP
- pairs = array_append(pairs, format('%s=%s', key, quote_literal(data->>key)));
- END LOOP;
-
- _sql = 'UPDATE secrets_schema.secrets_table SET '; -- it's already quoted! look at I above...
- _sql = _sql || format('%s', array_to_string(pairs, ','));
- _sql = _sql || ' WHERE secrets_owned_field=';
- _sql = _sql || quote_literal(secrets_owned_field);
- _sql = _sql || ';';
-
- ELSE
-
- values = array_append(values, quote_literal(secrets_owned_field));
- fields = array_append(fields, 'secrets_owned_field');
-
- FOR key IN SELECT json_object_keys(data)
- LOOP
- values = array_append(values, quote_literal(data->>key));
- fields = array_append(fields, key);
- END LOOP;
-
- _sql = 'INSERT INTO secrets_schema.secrets_table ('; -- it's already quoted! look at I above...
- _sql = _sql || format('%s)', array_to_string(fields, ','));
- _sql = _sql || ' VALUES (';
- _sql = _sql || format('%s)', array_to_string(values, ','));
- _sql = _sql || ';';
-
- END IF;
-
- EXECUTE _sql;
-
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-GRANT EXECUTE ON FUNCTION encrypted_secrets.secrets_table_upsert TO authenticated;
-
-CREATE FUNCTION encrypted_secrets.secrets_delete(secrets_owned_field uuid, secret_name text) RETURNS void AS $EOFCODE$
-BEGIN
- DELETE FROM secrets_schema.secrets_table s
- WHERE s.secrets_owned_field = secrets_delete.secrets_owned_field
- AND s.name = secrets_delete.secret_name;
-END
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION encrypted_secrets.secrets_delete(secrets_owned_field uuid, secret_names text[]) RETURNS void AS $EOFCODE$
-BEGIN
- DELETE FROM secrets_schema.secrets_table s
- WHERE s.secrets_owned_field = secrets_delete.secrets_owned_field
- AND s.name = ANY(secrets_delete.secret_names);
-END
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-GRANT EXECUTE ON FUNCTION encrypted_secrets.secrets_delete(uuid, text) TO authenticated;
-
-GRANT EXECUTE ON FUNCTION encrypted_secrets.secrets_delete(uuid, text[]) TO authenticated;
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_bytea_to_text.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_bytea_to_text.sql
deleted file mode 100644
index 9cde2ce4b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_bytea_to_text.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/encrypted_secrets/procedures/encrypt_field_bytea_to_text on pg
-
-BEGIN;
-
-SELECT verify_function ('encrypted_secrets.encrypt_field_bytea_to_text');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_crypt.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_crypt.sql
deleted file mode 100644
index 7f5af2bb6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_crypt.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/encrypted_secrets/procedures/encrypt_field_crypt on pg
-
-BEGIN;
-
-SELECT verify_function ('encrypted_secrets.encrypt_field_crypt');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_crypt_verify.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_crypt_verify.sql
deleted file mode 100644
index f31b36780..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_crypt_verify.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/encrypted_secrets/procedures/encrypt_field_crypt_verify on pg
-
-BEGIN;
-
-SELECT verify_function ('encrypted_secrets.encrypt_field_crypt_verify');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_pgp.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_pgp.sql
deleted file mode 100644
index 2ba11fecb..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_pgp.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/encrypted_secrets/procedures/encrypt_field_pgp on pg
-
-BEGIN;
-
-SELECT verify_function ('encrypted_secrets.encrypt_field_pgp');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_pgp_get.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_pgp_get.sql
deleted file mode 100644
index 88b5a6a1b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_pgp_get.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/encrypted_secrets/procedures/encrypt_field_pgp_get on pg
-
-BEGIN;
-
-SELECT verify_function ('encrypted_secrets.encrypt_field_pgp_get');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_pgp_getter.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_pgp_getter.sql
deleted file mode 100644
index 0c1d631fc..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_pgp_getter.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/encrypted_secrets/procedures/encrypt_field_pgp_getter on pg
-
-BEGIN;
-
-SELECT verify_function ('encrypted_secrets.encrypt_field_pgp_getter');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_set.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_set.sql
deleted file mode 100644
index 317afc863..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/encrypt_field_set.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/encrypted_secrets/procedures/encrypt_field_set on pg
-
-BEGIN;
-
-SELECT verify_function ('encrypted_secrets.encrypt_field_set');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_delete.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_delete.sql
deleted file mode 100644
index bd2b6a0ae..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_delete.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/encrypted_secrets/procedures/secrets_delete on pg
-
-BEGIN;
-
-SELECT verify_function ('encrypted_secrets.secrets_delete');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_getter.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_getter.sql
deleted file mode 100644
index b733371d1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_getter.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/encrypted_secrets/procedures/secrets_getter on pg
-
-BEGIN;
-
-SELECT verify_function ('encrypted_secrets.secrets_getter');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_table_upsert.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_table_upsert.sql
deleted file mode 100644
index 41237d207..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_table_upsert.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/encrypted_secrets/procedures/secrets_table_upsert on pg
-
-BEGIN;
-
-SELECT verify_function ('encrypted_secrets.secrets_table_upsert');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_upsert.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_upsert.sql
deleted file mode 100644
index ceca48343..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_upsert.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/encrypted_secrets/procedures/secrets_upsert on pg
-
-BEGIN;
-
-SELECT verify_function ('encrypted_secrets.secrets_upsert');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_verify.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_verify.sql
deleted file mode 100644
index 709b6de69..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/procedures/secrets_verify.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/encrypted_secrets/procedures/secrets_verify on pg
-
-BEGIN;
-
-SELECT verify_function ('encrypted_secrets.secrets_verify');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/schema.sql b/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/schema.sql
deleted file mode 100644
index bd2071348..000000000
--- a/__fixtures__/stage/extensions/@pgpm/encrypted-secrets/verify/schemas/encrypted_secrets/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/encrypted_secrets/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('encrypted_secrets');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/LICENSE b/__fixtures__/stage/extensions/@pgpm/faker/LICENSE
deleted file mode 100644
index 7b18c9183..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2025 Dan Lynch
-Copyright (c) 2025 Constructive
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/Makefile b/__fixtures__/stage/extensions/@pgpm/faker/Makefile
deleted file mode 100644
index 738753ccd..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-EXTENSION = pgpm-faker
-DATA = sql/pgpm-faker--0.14.0.sql
-
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/README.md b/__fixtures__/stage/extensions/@pgpm/faker/README.md
deleted file mode 100644
index 9a27c0d16..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/README.md
+++ /dev/null
@@ -1,535 +0,0 @@
-# @pgpm/faker
-
-
-
-
-
-
-
-
-
-
-
-
-
-create fake data in PostgreSQL
-
-## Overview
-
-`@pgpm/faker` provides a comprehensive set of fake data generation functions directly in PostgreSQL. Perfect for seeding test databases, creating demo data, and development environments. All functions are implemented in pure plpgsql and return realistic-looking data without external dependencies.
-
-## Features
-
-- **Geographic Data**: Latitude/longitude coordinates, addresses by state
-- **Text Generation**: Sentences, paragraphs, tags, names
-- **Temporal Data**: Random timestamps, dates, intervals
-- **Numeric Data**: Random integers and floats
-- **Contact Information**: Email, phone, IP addresses
-- **File & Media**: URLs, images, profile pictures, attachments
-- **Business Data**: Company names, usernames, tokens
-- **State-Aware**: Filter data by US state codes
-- **Pure plpgsql**: No external dependencies required
-
-## Installation
-
-If you have `pgpm` installed:
-
-```bash
-pgpm install @pgpm/faker
-pgpm deploy
-```
-
-This is a quick way to get started. The sections below provide more detailed installation options.
-
-### Prerequisites
-
-```bash
-# Install pgpm CLI
-npm install -g pgpm
-
-# Start local Postgres (via Docker) and export env vars
-pgpm docker start
-eval "$(pgpm env)"
-```
-
-> **Tip:** Already running Postgres? Skip the Docker step and just export your `PG*` environment variables.
-
-### **Add to an Existing Package**
-
-```bash
-# 1. Install the package
-pgpm install @pgpm/faker
-
-# 2. Deploy locally
-pgpm deploy
-```
-
-### **Add to a New Project**
-
-```bash
-# 1. Create a workspace
-pgpm init workspace
-
-# 2. Create your first module
-cd my-workspace
-pgpm init
-
-# 3. Install a package
-cd packages/my-module
-pgpm install @pgpm/faker
-
-# 4. Deploy everything
-pgpm deploy --createdb --database mydb1
-```
-
-## Usage
-
-## state, city, zip
-
-```sql
-select faker.state();
--- CA
-
-select faker.city();
--- Belle Haven
-
-select faker.city('MI');
--- Livonia
-
-select faker.zip();
--- 48105
-
-select faker.zip('Los Angeles');
--- 90272
-```
-
-## address, street
-
-```sql
-select faker.address();
--- 762 MESA ST
--- Fort Mohave, AZ 86427
-
-select faker.address('MI');
--- 2316 LAPHAM WAY
--- Sterling Heights, MI 48312
-
-select faker.street();
--- CLAY ST
-```
-
-## tags
-
-Tags can be seeded in `faker.dictionary` table, here's an example with sustainability
-
-```sql
-select faker.tags();
--- {"causes of global warming","electronic waste","solar powered cars"}
-```
-
-## words
-
-```sql
-select faker.word();
--- woodpecker
-```
-
-Specify word types
-
-```sql
-select faker.word(ARRAY['adjectives']);
--- decisive
-```
-
-## paragraphs
-
-```sql
-select faker.paragraph();
--- Ligula. Aliquet torquent consequat egestas dui. Nullam sed tincidunt mauris porttitor ad taciti rutrum eleifend. Phasellus.
-```
-
-## email
-
-```sql
-select faker.email();
--- crimson79@hotmail.com
-```
-
-## uuid
-
-```sql
-select faker.uuid();
--- 327cb21d-1680-47ee-9979-3689e1bcb9ab
-```
-
-## tokens, passwords
-
-```sql
-select faker.token();
--- 9e23040a7825529beb1528c957eac73f
-
-select faker.token(20);
--- 7504ef4eafbba04a9645198b10ebc9616afce13a
-
-select faker.password();
--- d8f1cca306e4d7^15bb(62618c1e
-```
-
-## hostname
-
-```sql
-select faker.hostname();
--- fine.net
-```
-
-## time unit
-
-```sql
-select faker.time_unit();
--- hour
-```
-
-## float
-
-```sql
-select faker.float();
--- 64.6970694223782
-
-select faker.float(2.3,10.5);
--- 10.233102884792025
-```
-
-## integer
-
-```sql
-select faker.integer();
--- 8
-
-select faker.integer(2,10);
--- 7
-```
-
-## date
-
-```sql
-select faker.date();
--- 2020-10-02
-```
-
-Date 1-3 days ago
-
-```sql
-select faker.date(1,3);
--- 2020-12-02
-```
-
-Date in the future between 1-3 days
-
-```sql
-select faker.date(1,3, true);
--- 2020-12-06
-```
-
-## birthdate
-
-```sql
-select faker.birthdate();
--- 2007-02-24
-```
-
-Generate birthdate for somebody who is between age of 37 and 64
-
-```sql
-select faker.birthdate(37, 64);
--- 1972-08-10
-```
-
-## interval
-
-```sql
-select faker.interval();
--- 00:01:34.959831
-```
-
-Generate an interval between 2 and 300 seconds
-
-```sql
-select faker.interval(2,300);
--- 00:01:04
-```
-
-## gender
-
-```sql
-select faker.gender();
--- F
-
-select faker.gender();
--- M
-```
-
-## boolean
-
-```sql
-select faker.boolean();
--- TRUE
-```
-
-## timestamptz
-
-```sql
-select faker.timestamptz();
--- 2019-12-20 15:57:29.520365+00
-```
-
-Future timestamptz
-
-```sql
-select faker.timestamptz(TRUE);
--- 2020-12-03 23:00:10.013301+00
---
-```
-
-## mime types
-
-```sql
-select faker.mime();
--- text/x-scss
-```
-
-## file extensions
-
-```sql
-select faker.ext();
--- html
-```
-
-Specify a mimetype
-
-```sql
-select faker.ext('image/png');
--- png
-```
-
-Image mimetypes
-
-```sql
-select faker.image_mime();
--- image/gif
-```
-
-## image
-
-```sql
-select faker.image();
--- {"url": "https://picsum.photos/843/874", "mime": "image/gif"}
-```
-
-## profilepic
-
-credit: thank you https://randomuser.me
-
-```sql
-select faker.profilepic();
--- {"url": "https://randomuser.me/api/portraits/women/53.jpg", "mime": "image/jpeg"}
-```
-
-Specify a gender
-
-```sql
-select faker.profilepic('M');
--- {"url": "https://randomuser.me/api/portraits/men/4.jpg", "mime": "image/jpeg"}
-```
-
-## file
-
-```sql
-select faker.file();
--- scarlet.jpg
-```
-
-Specify a mimetype
-
-```sql
-select faker.file('image/png');
--- anaconda.png
-```
-
-## url
-
-```sql
-select faker.url();
--- https://australian.io/copper.gzip
-```
-
-## upload
-
-```sql
-select faker.upload();
--- https://magenta.co/moccasin.yaml
-```
-
-## attachment
-
-```sql
-select faker.attachment();
--- {"url": "https://silver.io/sapphire.jsx", "mime": "text/jsx"}
-```
-
-## phone
-
-```sql
-select faker.phone();
--- +1 (121) 617-3329
-```
-
-## ip
-
-```sql
-select faker.ip();
--- 42.122.9.119
-```
-
-## username
-
-```sql
-select faker.username();
--- amaranth28
-```
-
-## name
-
-```sql
-select faker.name();
--- Lindsay
-```
-
-Specify a gender
-
-```sql
-select faker.name('M');
--- Stuart
-
-select faker.name('F');
--- Shelly
-```
-
-## surname
-
-```sql
-select faker.surname();
--- Smith
-```
-
-## fullname
-
-```sql
-select faker.fullname();
--- Ross Silva
-
-select faker.fullname('M');
--- George Spencer
-```
-
-## business
-
-```sql
-select faker.business();
--- Seed Partners, Co.
-```
-
-## longitude / latitude coordinates
-
-```sql
-select faker.lnglat( -118.561721, 33.59, -117.646374, 34.23302 );
--- (-118.33162189532844,34.15614699957491)
-
-select faker.lnglat();
--- (-74.0205,40.316)
-```
-
-## Use Cases
-
-### Seeding Test Databases
-
-Generate realistic test data for development:
-
-```sql
--- Create test users with fake data
-INSERT INTO users (name, email, created_at)
-SELECT
- faker.fullname(),
- faker.email(),
- faker.timestamptz()
-FROM generate_series(1, 100);
-```
-
-### Geographic Testing
-
-Test location-based features:
-
-```sql
--- Create test locations with coordinates
-INSERT INTO locations (lat, lng, address)
-SELECT
- (faker.lnglat()).lat,
- (faker.lnglat()).lng,
- faker.address()
-FROM generate_series(1, 50);
-```
-
-### Content Generation
-
-Generate fake content for testing:
-
-```sql
--- Create blog posts
-INSERT INTO posts (title, content, tags, published_at)
-SELECT
- faker.word() || ' ' || faker.word(),
- faker.paragraph(),
- faker.tags(),
- faker.timestamptz()
-FROM generate_series(1, 100);
-```
-
-### Demo Data
-
-Create realistic demo data for presentations:
-
-```sql
--- E-commerce orders
-INSERT INTO orders (customer_name, phone, total, order_date)
-SELECT
- faker.fullname(),
- faker.phone(),
- faker.float(10, 1000),
- faker.date()
-FROM generate_series(1, 1000);
-```
-
-## Testing
-
-```bash
-pnpm test
-```
-
-## Dependencies
-
-None - this is a pure plpgsql implementation.
-
-## Related Tooling
-
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
-* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
-* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
-* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
-
-## Disclaimer
-
-AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED "AS IS", AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND.
-
-No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value.
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/__tests__/faker.test.ts b/__fixtures__/stage/extensions/@pgpm/faker/__tests__/faker.test.ts
deleted file mode 100644
index 93073285c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/__tests__/faker.test.ts
+++ /dev/null
@@ -1,135 +0,0 @@
-import { getConnections, PgTestClient } from 'pgsql-test';
-
-let pg: PgTestClient;
-let teardown: () => Promise;
-
-const objs = {
- tables: {}
-};
-
-beforeAll(async () => {
- ({ pg, teardown } = await getConnections());
-});
-
-afterAll(async () => {
- await teardown();
-});
-
-it('gets random words', async () => {
- const obj: Record = {};
- const types = [
- 'lnglat',
- 'address',
- 'state',
- 'city',
- 'file',
- 'tags',
- 'attachment',
- 'birthdate',
- 'profilepic'
- ];
-
- for (const type of types) {
- const { [type]: value } = await pg.one(`SELECT faker.${type}() AS ${type}`);
- obj[type] = value;
- }
- console.log(obj);
-});
-
-it('lnglat', async () => {
- const obj: Record = {};
- const { lnglat } = await pg.one(`SELECT faker.lnglat() AS lnglat`);
- obj['lnglat'] = lnglat;
-
- const { lnglat: bbox } = await pg.one(
- `SELECT faker.lnglat($1, $2, $3, $4) AS lnglat`,
- [-118.561721, 33.59, -117.646374, 34.23302]
- );
- obj['bbox'] = bbox;
-
- console.log(obj);
- console.log(obj.bbox.y, ',', obj.bbox.x);
-});
-
-it('tags', async () => {
- const obj: Record = {};
-
- const { tags } = await pg.one(`SELECT faker.tags() AS tags`);
- obj['tags'] = tags;
-
- const { tag_with_min } = await pg.one(
- `SELECT faker.tags($1, $2, $3) AS tag_with_min`,
- [5, 10, 'tag']
- );
- obj['tag with min'] = tag_with_min;
-
- const { face } = await pg.one(
- `SELECT faker.tags($1, $2, $3) AS face`,
- [5, 10, 'face']
- );
- obj['face'] = face;
-
- console.log(obj);
-});
-
-it('addresses', async () => {
- const obj: Record = {};
-
- obj['any'] = (await pg.one(`SELECT faker.address() AS value`)).value;
- obj['CA'] = (await pg.one(`SELECT faker.address($1) AS value`, ['CA'])).value;
- obj['MI'] = (await pg.one(`SELECT faker.address($1) AS value`, ['MI'])).value;
- obj['Los Angeles'] = (
- await pg.one(`SELECT faker.address($1, $2) AS value`, ['CA', 'Los Angeles'])
- ).value;
-
- console.log(obj);
-});
-
-xit('mixed words and args', async () => {
- const obj: Record = {};
-
- obj['english-words'] = (
- await pg.one(
- `SELECT faker.sentence($1, $2, $3, $4) AS value`,
- ['word', 7, 20, ['colors']]
- )
- ).value;
-
- obj['mixed-words'] = (
- await pg.one(
- `SELECT faker.sentence($1, $2, $3, $4) AS value`,
- ['word', 7, 20, ['colors', 'adjectives', 'surname', 'animals', 'stop']]
- )
- ).value;
-
- obj['sentence-words'] = (
- await pg.one(
- `SELECT faker.sentence($1, $2, $3, $4) AS value`,
- ['word', 7, 20, ['lorem']]
- )
- ).value;
-
- obj['sentence-chars'] = (
- await pg.one(
- `SELECT faker.sentence($1, $2, $3, $4) AS value`,
- ['char', 100, 140, ['lorem']]
- )
- ).value;
-
- obj['paragraph-chars'] = (
- await pg.one(
- `SELECT faker.paragraph($1, $2, $3, $4) AS value`,
- ['char', 300, 500, ['lorem']]
- )
- ).value;
-
- obj['integer-chars'] = (
- await pg.one(`SELECT faker.integer($1, $2) AS value`, [300, 500])
- ).value;
-
- obj['xenial'] = (
- await pg.one(`SELECT faker.birthdate($1, $2) AS value`, [34, 39])
- ).value;
-
- console.log(obj);
-});
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/procedures/utils.sql b/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/procedures/utils.sql
deleted file mode 100644
index 0362188bf..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/procedures/utils.sql
+++ /dev/null
@@ -1,736 +0,0 @@
--- Deploy schemas/faker/procedures/utils to pg
-
--- requires: schemas/faker/schema
--- requires: schemas/faker/tables/dictionary/table
-
-BEGIN;
-
-
-CREATE FUNCTION faker.word_type() returns text as $$
-SELECT (CASE (RANDOM() * 2)::INT
- WHEN 0 THEN 'adjectives'
- WHEN 1 THEN 'colors'
- WHEN 2 THEN 'animals'
- END);
-$$
-LANGUAGE 'sql';
-
-CREATE FUNCTION faker.word(wordtype text default null) returns text as $$
-DECLARE
- vword text;
- vtype text;
-BEGIN
- IF (wordtype IS NOT NULL) THEN
- vtype = wordtype;
- ELSE
- vtype = faker.word_type();
- END IF;
-
-SELECT word FROM faker.dictionary
-WHERE type = vtype
-OFFSET floor( random() * (select count(*) from faker.dictionary WHERE type = vtype ) ) LIMIT 1
-INTO vword;
-
-RETURN vword;
-
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.word(wordtypes text[]) returns text as $$
-BEGIN
- RETURN faker.word(wordtypes[faker.integer(1, cardinality(wordtypes))]::text);
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.gender(gender text default null) returns text as $$
-DECLARE
-BEGIN
- IF (gender IS NOT NULL) THEN
- RETURN gender;
- END IF;
- RETURN (CASE (RANDOM() * 1)::INT
- WHEN 0 THEN 'M'
- WHEN 1 THEN 'F'
- END);
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.username() returns text as $$
-DECLARE
-BEGIN
- RETURN (CASE (RANDOM() * 2)::INT
- WHEN 0 THEN faker.word() || (RANDOM() * 100)::INT
- WHEN 1 THEN faker.word() || '.' || faker.word() || (RANDOM() * 100)::INT
- WHEN 2 THEN faker.word()
- END);
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.name(gender text default null) returns text as $$
-DECLARE
-
-BEGIN
- IF (gender IS NULL) THEN
- gender = faker.gender();
- END IF;
-
- IF (gender = 'M') THEN
- RETURN initcap(faker.word('boys'));
- ELSE
- RETURN initcap(faker.word('girls'));
- END IF;
-
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.surname() returns text as $$
-BEGIN
- RETURN initcap(faker.word('surname'));
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.fullname(gender text default null) returns text as $$
-BEGIN
- RETURN initcap(faker.name(gender)) || ' ' || initcap(faker.word('surname'));
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.business() returns text as $$
-BEGIN
- RETURN (CASE (RANDOM() * 4)::INT
- WHEN 0 THEN array_to_string( ARRAY[faker.word('bizname'), faker.word('bizsurname') || ',', faker.word('bizsuffix')]::text[], ' ')
- WHEN 1 THEN array_to_string( ARRAY[faker.word('bizname'), faker.word('bizsurname')]::text[], ' ')
- WHEN 2 THEN array_to_string( ARRAY[faker.word('bizname'), faker.word('bizsurname')]::text[], ' ')
- WHEN 3 THEN array_to_string( ARRAY[faker.word('bizname') || faker.word('bizpostfix'), faker.word('bizsurname') ]::text[], ' ')
- WHEN 4 THEN array_to_string( ARRAY[faker.word('bizname') || faker.word('bizpostfix'), faker.word('bizsurname') || ',', faker.word('bizsuffix')]::text[], ' ')
- END);
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-
-CREATE FUNCTION faker.city(state text default null) returns text as $$
-DECLARE
- vcity text;
-BEGIN
-
-IF (state IS NOT NULL) THEN
-
- SELECT city FROM faker.cities
- WHERE cities.state = city.state
- OFFSET floor( random() * (select count(*) from faker.cities WHERE cities.state = city.state ) ) LIMIT 1
- INTO vcity;
-
-ELSE
-
- SELECT city FROM faker.cities
- OFFSET floor( random() * (select count(*) from faker.cities ) ) LIMIT 1
- INTO vcity;
-
-END IF;
-
-
-RETURN vcity;
-
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.zip(city text default null) returns int as $$
-DECLARE
- vzips int[];
-BEGIN
-
-IF (city IS NOT NULL) THEN
-
- SELECT zips FROM faker.cities
- WHERE cities.city = zip.city
- OFFSET floor( random() * (select count(*) from faker.cities WHERE cities.city = zip.city ) ) LIMIT 1
- INTO vzips;
-
-ELSE
-
- SELECT zips FROM faker.cities
- OFFSET floor( random() * (select count(*) from faker.cities ) ) LIMIT 1
- INTO vzips;
-
-END IF;
-
-
-RETURN vzips[ faker.integer(1, cardinality(vzips)) ];
-
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-
-CREATE FUNCTION faker.lnglat(x1 float, y1 float, x2 float, y2 float) returns point as $$
-DECLARE
- vlat float;
- vlng float;
-BEGIN
-
-RETURN Point(
- faker.float(least(x1, x2), greatest(x1, x2)),
- faker.float(least(y1, y2), greatest(y1, y2))
-);
-
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.lnglat(city text default null) returns point as $$
-DECLARE
- vlat float;
- vlng float;
-BEGIN
-
-IF (city IS NOT NULL) THEN
- SELECT lat, lng FROM faker.cities
- WHERE cities.city = lnglat.city
- OFFSET floor( random() * (select count(*) from faker.cities WHERE cities.city = lnglat.city ) ) LIMIT 1
- INTO vlat, vlng;
-ELSE
- SELECT lat, lng FROM faker.cities
- OFFSET floor( random() * (select count(*) from faker.cities ) ) LIMIT 1
- INTO vlat, vlng;
-END IF;
-
-RETURN Point(vlng, vlat);
-
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-
-
-CREATE FUNCTION faker.phone() returns text as $$
-BEGIN
-
- RETURN concat('+1 ',
-
- '(',
-
- array_to_string(ARRAY[
- faker.integer(0,9),
- faker.integer(0,9),
- faker.integer(0,9)
- ]::text[], ''),
-
- ') ',
-
- array_to_string(ARRAY[
- faker.integer(0,9),
- faker.integer(0,9),
- faker.integer(0,9)
- ]::text[], ''),
-
- '-',
-
- array_to_string(ARRAY[
- faker.integer(0,9),
- faker.integer(0,9),
- faker.integer(0,9),
- faker.integer(0,9)
- ]::text[], '')
-
- );
-
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.street() returns text as $$
-BEGIN
- RETURN faker.word('street');
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.state(state text default null) returns text as $$
-DECLARE
- vstate text;
-BEGIN
-
-IF (state IS NULL) THEN
- SELECT distinct(c.state) FROM faker.cities c
- OFFSET floor( random() * (select count(distinct(c2.state)) from faker.cities c2 ) ) LIMIT 1
- INTO vstate;
-ELSE
- vstate = state;
-END IF;
-
-RETURN vstate;
-
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.address(state text default null, city text default null) returns text as $$
-DECLARE
- vcity text;
- vstate text;
- vstreet text;
- vstreetnum int;
- vzips int[];
- vzip int;
-BEGIN
-
-IF (state IS NULL) THEN
- vstate = faker.state();
-ELSE
- vstate = state;
-END IF;
-
-SELECT c.city, c.zips FROM faker.cities c
-WHERE c.state = vstate
-OFFSET floor( random() * (select count(*) from faker.cities WHERE cities.state = vstate ) ) LIMIT 1
-INTO vcity, vzips;
-
-vstreetnum = faker.integer(1, 3000);
-vstreet = faker.street();
-vzip = vzips[ faker.integer(1, cardinality(vzips)) ];
-
-RETURN concat(vstreetnum::text, ' ', vstreet, E'\n', vcity, ', ', vstate, ' ', vzip::text);
-
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.tags(min int default 1, max int default 5, dict text default 'tag') returns citext[] as $$
-DECLARE
- words text[];
- lim int = faker.integer(min,max);
-BEGIN
-
-SELECT ARRAY (
- SELECT word FROM faker.dictionary
- WHERE type = dict
- OFFSET floor( random() * (select count(*) from faker.dictionary WHERE type = dict ) ) LIMIT lim
-) INTO words;
-
-RETURN words::citext[];
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.sentence(unit text default 'word', min int default 7, max int default 20, cat text[] default ARRAY['lorem']::text[], period text default '.') returns text as $$
-DECLARE
- num int = faker.integer(min, max);
- txt text;
- vtype text;
- n int;
- c int;
-BEGIN
-
- IF (unit = 'word') THEN
- txt = initcap(faker.word(cat));
- FOR n IN
- SELECT * FROM generate_series(1, num) g(n)
- LOOP
- txt = txt || ' ' || faker.word(cat);
- END LOOP;
- RETURN txt || period;
- ELSEIF (unit = 'char' OR unit = 'chars') THEN
- txt = initcap(faker.word(cat));
- c = char_length(txt);
- IF (c = num) THEN
- RETURN concat(txt, period);
- END IF;
- IF (c > num) THEN
- RETURN substring(txt from 1 for num) || period;
- END IF;
- WHILE (c < num)
- LOOP
- txt = txt || ' ' || faker.word(cat);
- c = char_length(txt);
- END LOOP;
- IF (c = num) THEN
- RETURN txt || period;
- END IF;
- IF (c > num) THEN
- RETURN substring(txt from 1 for num) || period;
- END IF;
- RETURN txt || period;
- END IF;
- RAISE EXCEPTION 'faker.sentence() bad input';
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.paragraph(unit text default 'word', min int default 7, max int default 20, cat text[] default ARRAY['lorem']::text[]) returns text as $$
-DECLARE
- num int = faker.integer(min, max);
- txt text;
- words text[];
- n int;
- needscaps boolean = false;
-BEGIN
- txt = faker.sentence(unit, min, max, cat, '');
- words = string_to_array(txt, ' ');
- txt = '';
-
- FOR n IN
- SELECT * FROM generate_series(1, cardinality(words)) g(n)
- LOOP
- IF (needscaps IS TRUE) THEN
- txt = concat(txt, ' ', initcap(words[n]));
- ELSE
- txt = concat(txt, ' ', words[n]);
- END IF;
-
- IF (faker.integer(1,100) > 70) THEN
- txt = txt || '.';
- needscaps = true;
- ELSE
- needscaps = false;
- END IF;
-
- END LOOP;
-
- IF (trim(txt) ~ '\.$') THEN
- RETURN trim(txt);
- ELSE
- RETURN trim(txt || '.');
- END IF;
-
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.email() returns text as $$
-SELECT
- faker.word() || (RANDOM() * 100)::INT || '@' || (
- CASE (RANDOM() * 3)::INT
- WHEN 0 THEN 'gmail'
- WHEN 1 THEN 'hotmail'
- WHEN 2 THEN 'yahoo'
- WHEN 3 THEN faker.word()
- END
- ) || '.com' AS email
-$$
-LANGUAGE 'sql';
-
-CREATE FUNCTION faker.uuid() returns uuid as $$
-SELECT
- uuid_generate_v4();
-$$
-LANGUAGE 'sql';
-
-CREATE FUNCTION faker.token(bytes int default 16) returns text as $$
-SELECT
- encode( gen_random_bytes( bytes ), 'hex' )
-$$
-LANGUAGE 'sql';
-
-CREATE FUNCTION faker.password() returns text as $$
-DECLARE
- chars text[] = regexp_split_to_array('!@#$%^&*():";''<>?,./~`'::text, '');
- num_special int = faker.integer(0, 4);
- n int = 0;
- pass text;
-BEGIN
-
- IF (num_special = 0) THEN
- pass = encode( gen_random_bytes( 16 ), 'hex' );
- ELSE
- pass = encode( gen_random_bytes( 4 ), 'hex' );
- FOR n IN
- SELECT * FROM generate_series(1, num_special) g(n)
- LOOP
- pass = pass ||
- encode( gen_random_bytes( faker.integer(1,4) ), 'hex' ) ||
- chars[ faker.integer(1, cardinality(chars)) ] ||
- encode( gen_random_bytes( faker.integer(1,4) ), 'hex' );
-
- END LOOP;
- END IF;
-
-
- RETURN pass;
-
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.hostname() returns text as $$
-SELECT
- faker.word() || '.' || (
- CASE (RANDOM() * 4)::INT
- WHEN 0 THEN 'com'
- WHEN 1 THEN 'net'
- WHEN 2 THEN 'io'
- WHEN 3 THEN 'org'
- WHEN 4 THEN 'co'
- END
- )
-$$
-LANGUAGE 'sql';
-
-CREATE FUNCTION faker.time_unit() returns text as $$
-SELECT
- (
- CASE (RANDOM() * 5)::INT
- WHEN 0 THEN 'millisecond'
- WHEN 1 THEN 'second'
- WHEN 2 THEN 'minute'
- WHEN 3 THEN 'hour'
- WHEN 4 THEN 'day'
- WHEN 5 THEN 'week'
- END
- )
-$$
-LANGUAGE 'sql';
-
-CREATE FUNCTION faker.float(min float default 0, max float default 100) returns float as $$
-DECLARE
- num float;
- high float;
- low float;
-BEGIN
- high = greatest(min, max);
- low = least(min, max);
- num = (RANDOM() * ( high - low )) + low;
- RETURN num;
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.integer(min int default 0, max int default 100) returns int as $$
-DECLARE
- num int;
-BEGIN
- min = ceil(min);
- max = floor(max);
- num = floor(RANDOM() * ( max - min + 1 )) + min;
- RETURN num;
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.date(min int default 1, max int default 100, future boolean default false) returns date as $$
-DECLARE
- d date;
- num int = faker.integer(min, max);
-BEGIN
-IF (future) THEN
- d = now()::date + num;
-ELSE
- d = now()::date - num;
-END IF;
-RETURN d;
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.birthdate(min int default 1, max int default 100) returns date as $$
-DECLARE
- d date;
- years int = faker.integer(min, max);
- days int = faker.integer(1, 365);
- itv interval;
-BEGIN
- itv = concat(years, ' years')::interval + concat(days, ' days')::interval;
- d = now()::date - itv;
- RETURN d;
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.interval() returns interval as $$
-DECLARE
- ival text;
-BEGIN
- SELECT faker.time_unit() INTO ival;
- ival = (RANDOM() * 100)::text || ' ' || ival;
- RETURN ival::interval;
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-
-CREATE FUNCTION faker.interval(min int, max int) returns interval as $$
-SELECT (faker.integer(min, max)::text || ' ' || 'seconds')::interval;
-$$
-LANGUAGE 'sql' VOLATILE;
-
-CREATE FUNCTION faker.boolean() returns boolean as $$
-BEGIN
- RETURN (
- CASE (RANDOM() * 1)::INT
- WHEN 0 THEN TRUE
- WHEN 1 THEN FALSE
- END
- );
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.timestamptz(future boolean default false) returns timestamptz as $$
-DECLARE
- ival interval;
- t timestamptz;
-BEGIN
- ival = faker.interval();
- IF (future) THEN
- SELECT now() + ival INTO t;
- ELSE
- SELECT now() - ival INTO t;
- END IF;
- RETURN t;
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.mime() returns text as $$
- SELECT faker.word('mime');
-$$
-LANGUAGE 'sql';
-
-CREATE FUNCTION faker.ext(mime text default faker.mime()) returns text as $$
-DECLARE
- ext text;
-BEGIN
- IF (mime IS NULL) THEN
- ext = faker.word(faker.mime());
- ELSE
- ext = faker.word(mime);
- END IF;
- RETURN ext;
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-
-CREATE FUNCTION faker.image_mime() returns text as $$
-SELECT
- (
- CASE (RANDOM() * 3)::INT
- WHEN 0 THEN 'image/svg+xml'
- WHEN 1 THEN 'image/png'
- WHEN 2 THEN 'image/gif'
- WHEN 3 THEN 'image/jpeg'
- END
- )
-$$
-LANGUAGE 'sql';
-
-CREATE FUNCTION faker.image(width int default null, height int default null) returns image as $$
-DECLARE
- w int;
- h int;
- obj jsonb = '{}'::jsonb;
- url text;
-BEGIN
- IF (width IS NULL) THEN
- w = faker.integer(800,1200);
- ELSE
- w = width;
- END IF;
- IF (height IS NULL) THEN
- h = faker.integer(800,1200);
- ELSE
- h = height;
- END IF;
-
- url = concat('https://picsum.photos/', w::text, '/', h::text);
-
- obj = jsonb_set(obj, '{url}', to_jsonb(url));
- obj = jsonb_set(obj, '{mime}', to_jsonb(faker.image_mime()));
-
- RETURN obj;
-
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.profilepic() returns image as $$
-DECLARE
- obj jsonb = '{}'::jsonb;
- vurl text = '';
- gndr text = 'women';
-BEGIN
- IF ((RANDOM() * 2)::INT = 0) THEN
- gndr = 'men';
- END IF;
- vurl = concat('https://randomuser.me/api/portraits/', gndr, '/', faker.integer(1, 99) , '.jpg');
- obj = jsonb_set(obj, '{url}', to_jsonb(vurl::text));
- obj = jsonb_set(obj, '{mime}', to_jsonb('image/jpeg'::text));
- RETURN obj;
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.profilepic(gender text) returns image as $$
-DECLARE
- obj jsonb = '{}'::jsonb;
- vurl text = '';
- gndr text = 'women';
-BEGIN
- IF (gender = 'M') THEN
- gndr = 'men';
- END IF;
- vurl = concat('https://randomuser.me/api/portraits/', gndr, '/', faker.integer(1, 99) , '.jpg');
- obj = jsonb_set(obj, '{url}', to_jsonb(vurl::text));
- obj = jsonb_set(obj, '{mime}', to_jsonb('image/jpeg'::text));
- RETURN obj;
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.file(mime text default null) returns text as $$
-BEGIN
- RETURN concat(faker.word(), '.', faker.ext(mime));
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.url(mime text default null) returns url as $$
-DECLARE
- obj jsonb = '{}'::jsonb;
- url text;
-BEGIN
- url = concat('https://', faker.hostname(), '/', faker.file(mime));
- RETURN url;
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.upload(mime text default null) returns upload as $$
-BEGIN
- RETURN faker.url(mime);
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.ip(mime text default null) returns text as $$
-BEGIN
- RETURN
- array_to_string(ARRAY[
- faker.integer(0,255),
- faker.integer(0,255),
- faker.integer(0,255),
- faker.integer(0,255)
- ]::text[], '.');
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-CREATE FUNCTION faker.attachment(mime text default null) returns attachment as $$
-BEGIN
- IF (mime IS NULL) THEN
- mime = faker.mime();
- END IF;
- RETURN faker.url(mime);
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/schema.sql b/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/schema.sql
deleted file mode 100644
index 33400913b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/schema.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Deploy schemas/faker/schema to pg
-
-
-BEGIN;
-
-CREATE SCHEMA faker;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/tables/cities/fixtures/1602987351008_fixture.sql b/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/tables/cities/fixtures/1602987351008_fixture.sql
deleted file mode 100644
index 9a68b1393..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/tables/cities/fixtures/1602987351008_fixture.sql
+++ /dev/null
@@ -1,3700 +0,0 @@
--- Deploy schemas/faker/tables/cities/fixtures/1602987351008_fixture to pg
-
--- requires: schemas/faker/schema
--- requires: schemas/faker/tables/cities/table
-
-BEGIN;
-
-INSERT INTO faker.cities ( city, state, zips, lat, lng ) VALUES
-('New York', 'NY', ARRAY[11226, 11225, 11224, 11222], 40.6943, (-73.9249)),
- ('Los Angeles', 'CA', ARRAY[90291, 90293, 90292, 91316, 91311, 90037, 90031, 90008, 90004, 90005, 90006, 90007, 90001, 90002, 90003, 90710, 90089, 91344, 91345, 91340, 91342, 91343, 90035, 90034, 90036, 90033, 90032, 90039, 90247, 90248, 91436, 91371, 91605, 91604, 91607, 91601, 91602, 90402, 90068, 90069, 90062, 90063, 90061, 90066, 90067, 90064, 90065, 91326, 91324, 91325, 90013, 90012, 90011, 90010, 90017, 90016, 90015, 90014, 90019, 90090, 90095, 90094, 91042, 91040, 91411, 91352, 91356, 90041, 90042, 90043, 90044, 90045, 90046, 90047, 90048, 90049, 90018, 91423, 90210, 91303, 91304, 91306, 91307, 90079, 90071, 90077, 90059, 91608, 91606, 91331, 91330, 91335, 90026, 90027, 90024, 90025, 90023, 90020, 90021, 90028, 90029, 90272, 90732, 90731, 90230, 91406, 91405, 91403, 91402, 91401, 91367, 91364, 90038, 90057, 90058, 90744, 90501, 90502, 90009, 90030, 90050, 90051, 90054, 90055, 90070, 90072, 90074, 90075, 90076, 90080, 90082, 90083, 90084, 90086, 90087, 90088, 90093, 90099, 90134, 90189, 90213, 90294, 90296, 90733, 90734, 90748, 91041, 91043, 91305, 91308, 91309, 91313, 91327, 91328, 91329, 91333, 91334, 91337, 91346, 91353, 91357, 91365, 91392, 91393, 91394, 91395, 91396, 91404, 91407, 91408, 91409, 91410, 91412, 91413, 91416, 91426, 91470, 91482, 91495, 91496, 91499, 91603, 91609, 91610, 91611, 91612, 91614, 91615, 91616, 91617, 91618], 34.1139, (-118.4068)),
-('Chicago', 'IL', ARRAY[60649, 60641, 60640, 60643], 41.8373, (-87.6862)),
-('Miami', 'FL', ARRAY[33125, 33126, 33127, 33128], 25.7839, (-80.2102)),
-('Dallas', 'TX', ARRAY[75098, 75233, 75254, 75251], 32.7936, (-96.7662)),
-('Philadelphia', 'PA', ARRAY[19151, 19150, 19153, 19152], 40.0077, (-75.1339)),
-('Houston', 'TX', ARRAY[77068, 77061, 77060, 77063], 29.7863, (-95.3889)),
-('Atlanta', 'GA', ARRAY[30331, 30332, 30309, 30308], 33.7627, (-84.4224)),
-('Washington', 'DC', ARRAY[20011, 20012, 20015, 20228], 38.9047, (-77.0163)),
-('Boston', 'MA', ARRAY[02121, 02122, 02124, 02125], 42.3188, (-71.0846)),
-('Phoenix', 'AZ', ARRAY[85009, 85006, 85007, 85004], 33.5722, (-112.0891)),
-('Seattle', 'WA', ARRAY[98108, 98104, 98107, 98106], 47.6211, (-122.3244)),
-('San Francisco', 'CA', ARRAY[94131, 94132, 94133, 94134], 37.7562, (-122.4430)),
-('Detroit', 'MI', ARRAY[48208, 48201, 48207, 48205], 42.3834, (-83.1024)),
-('San Diego', 'CA', ARRAY[92108, 92103, 92111, 92154], 32.8312, (-117.1225)),
-('Minneapolis', 'MN', ARRAY[55409, 55408, 55407, 55406], 44.9635, (-93.2678)),
-('Tampa', 'FL', ARRAY[33629, 33621, 33620, 33619], 27.9942, (-82.4451)),
-('Denver', 'CO', ARRAY[80230, 80231, 80236, 80237], 39.7621, (-104.8759)),
-('Brooklyn', 'NY', ARRAY[11213, 11216, 11233, 11238], 40.6501, (-73.9496)),
-('Queens', 'NY', ARRAY[11362, 11363, 11364, 11354], 40.7498, (-73.7976)),
-('Riverside', 'CA', ARRAY[92503, 92501, 92505, 92504], 33.9381, (-117.3948)),
-('Baltimore', 'MD', ARRAY[21211, 21210, 21213, 21212], 39.3051, (-76.6144)),
-('Las Vegas', 'NV', ARRAY[89106, 89104, 89102, 89101], 36.2333, (-115.2654)),
-('Portland', 'OR', ARRAY[97221, 97220, 97229, 97203], 45.5372, (-122.6500)),
-('San Antonio', 'TX', ARRAY[78259, 78258, 78252, 78251], 29.4658, (-98.5253)),
-('St. Louis', 'MO', ARRAY[63111, 63112, 63113, 63115], 38.6358, (-90.2451)),
-('Sacramento', 'CA', ARRAY[95838, 95832, 95833, 95831], 38.5667, (-121.4683)),
-('Orlando', 'FL', ARRAY[32827, 32824, 32822, 32804], 28.4772, (-81.3369)),
-('San Jose', 'CA', ARRAY[95128, 95124, 95125, 95123], 37.3019, (-121.8486)),
-('Cleveland', 'OH', ARRAY[44128, 44119, 44113, 44112], 41.4767, (-81.6804)),
-('Pittsburgh', 'PA', ARRAY[15217, 15214, 15212, 15213], 40.4396, (-79.9762)),
-('Austin', 'TX', ARRAY[78748, 78741, 78742, 78745], 30.3004, (-97.7522)),
-('Cincinnati', 'OH', ARRAY[45213, 45212, 45211, 45217], 39.1413, (-84.5061)),
-('Kansas City', 'MO', ARRAY[64163, 64165, 64167, 64053], 39.1239, (-94.5541)),
-('Manhattan', 'NY', ARRAY[10027, 10030, 10037, 10039], 40.7834, (-73.9662)),
-('Indianapolis', 'IN', ARRAY[46219, 46217, 46214, 46260], 39.7771, (-86.1458)),
-('Columbus', 'OH', ARRAY[43109, 43054, 43220, 43221], 39.9862, (-82.9850)),
-('Charlotte', 'NC', ARRAY[28262, 28105, 28280, 28282], 35.2080, (-80.8304)),
-('Virginia Beach', 'VA', ARRAY[23451, 23453, 23452, 23455], 36.7335, (-76.0435)),
-('Bronx', 'NY', ARRAY[10457, 10460, 10458, 10467], 40.8501, (-73.8662)),
-('Milwaukee', 'WI', ARRAY[53202, 53207, 53206, 53205], 43.0642, (-87.9673)),
-('Providence', 'RI', ARRAY[02906, 02907, 02905, 02908], 41.8230, (-71.4187)),
-('Jacksonville', 'FL', ARRAY[32225, 32226, 32227, 32220], 30.3322, (-81.6749)),
-('Salt Lake City', 'UT', ARRAY[84115, 84113, 84112, 84111], 40.7777, (-111.9306)),
-('Nashville', 'TN', ARRAY[37138, 37076, 37072, 37205], 36.1715, (-86.7843)),
-('Richmond', 'VA', ARRAY[23223, 23220, 23221, 23226], 37.5295, (-77.4756)),
-('Memphis', 'TN', ARRAY[38127, 38107, 38106, 38105], 35.1046, (-89.9773)),
-('Raleigh', 'NC', ARRAY[27616, 27615, 27614, 27613], 35.8325, (-78.6435)),
-('New Orleans', 'LA', ARRAY[70130, 70131, 70114, 70115], 30.0687, (-89.9288)),
-('Louisville', 'KY', ARRAY[40245, 40241, 40218, 40219], 38.1663, (-85.6485)),
-('Oklahoma City', 'OK', ARRAY[73013, 73099, 73097, 73119], 35.4676, (-97.5136)),
-('Bridgeport', 'CT', ARRAY[06604, 06607, 06606, 06608], 41.1918, (-73.1953)),
-('Buffalo', 'NY', ARRAY[14209, 14202, 14203, 14201], 42.9016, (-78.8487)),
-('Fort Worth', 'TX', ARRAY[76040, 76134, 76135, 76137], 32.7811, (-97.3473)),
-('Hartford', 'CT', ARRAY[06105, 06103, 06120, 06112], 41.7661, (-72.6834)),
-('Tucson', 'AZ', ARRAY[85707, 85706, 85756, 85723], 32.1545, (-110.8782)),
-('Omaha', 'NE', ARRAY[68117, 68118, 68107, 68104], 41.2627, (-96.0522)),
-('El Paso', 'TX', ARRAY[79902, 79903, 79904, 79905], 31.8479, (-106.4309)),
-('Honolulu', 'HI', ARRAY[96850, 96822, 96826, 96813], 21.3294, (-157.8460)),
-('McAllen', 'TX', ARRAY[78504, 78503, 78501, 78502], 26.2273, (-98.2471)),
-('Albuquerque', 'NM', ARRAY[87120, 87123, 87112, 87113], 35.1053, (-106.6464)),
-('Birmingham', 'AL', ARRAY[35214, 35215, 35217, 35210], 33.5277, (-86.7987)),
-('Sarasota', 'FL', ARRAY[34234, 34237, 34236, 34239], 27.3386, (-82.5431)),
-('Dayton', 'OH', ARRAY[45402, 45403, 45406, 45404], 39.7797, (-84.1998)),
-('Rochester', 'NY', ARRAY[14609, 14606, 14604, 14605], 43.1680, (-77.6162)),
-('Fresno', 'CA', ARRAY[93650, 93702, 93703, 93701], 36.7831, (-119.7941)),
-('Allentown', 'PA', ARRAY[18104, 18101, 18103, 18102], 40.5961, (-75.4756)),
-('Tulsa', 'OK', ARRAY[74134, 74135, 74132, 74130], 36.1284, (-95.9042)),
-('Cape Coral', 'FL', ARRAY[33990, 33993, 33914, 33909], 26.6446, (-81.9956)),
-('Concord', 'CA', ARRAY[94519, 94521, 94520, 94522], 37.9722, (-122.0016)),
-('Colorado Springs', 'CO', ARRAY[80909, 80904, 80905, 80906], 38.8674, (-104.7606)),
-('Charleston', 'SC', ARRAY[29424, 29455, 29407, 29401], 32.8153, (-79.9628)),
-('Springfield', 'MA', ARRAY[01118, 01119, 01199, 01129], 42.1155, (-72.5395)),
-('Grand Rapids', 'MI', ARRAY[49507, 49506, 49505, 49504], 42.9620, (-85.6562)),
-('Mission Viejo', 'CA', ARRAY[92691], 33.6095, (-117.6550)),
-('Albany', 'NY', ARRAY[12209, 12204, 12206, 12207], 42.6664, (-73.7987)),
-('Knoxville', 'TN', ARRAY[37912, 37909, 37902, 37924], 35.9692, (-83.9496)),
-('Bakersfield', 'CA', ARRAY[93307, 93304, 93305, 93301], 35.3529, (-119.0359)),
-('Ogden', 'UT', ARRAY[84401, 84403, 84201, 84244], 41.2278, (-111.9682)),
-('Baton Rouge', 'LA', ARRAY[70808, 70809, 70802, 70803], 30.4418, (-91.1310)),
-('Akron', 'OH', ARRAY[44307, 44304, 44305, 44302], 41.0798, (-81.5219)),
-('New Haven', 'CT', ARRAY[06511, 06510, 06513, 06512], 41.3112, (-72.9246)),
-('Columbia', 'SC', ARRAY[29203, 29205, 29201, 29207], 34.0376, (-80.9037)),
-('Mesa', 'AZ', ARRAY[85209, 85201, 85202, 85203], 33.4017, (-111.7180)),
-('Palm Bay', 'FL', ARRAY[32905, 32907, 32976, 32948], 27.9550, (-80.6627)),
-('Provo', 'UT', ARRAY[84606, 84601, 84603, 84605], 40.2457, (-111.6457)),
-('Worcester', 'MA', ARRAY[01608, 01609, 01602, 01603], 42.2705, (-71.8079)),
-('Murrieta', 'CA', ARRAY[92562, 92564], 33.5720, (-117.1909)),
-('Greenville', 'SC', ARRAY[29607, 29605, 29601, 29609], 34.8353, (-82.3647)),
-('Wichita', 'KS', ARRAY[67235, 67260, 67217, 67216], 37.6896, (-97.3442)),
-('Toledo', 'OH', ARRAY[43611, 43613, 43612, 43614], 41.6639, (-83.5822)),
-('Staten Island', 'NY', ARRAY[10303, 10310, 10306, 10307], 40.5834, (-74.1496)),
-('Des Moines', 'IA', ARRAY[50312, 50314, 50316, 50317], 41.5725, (-93.6105)),
-('Long Beach', 'CA', ARRAY[90804, 90805, 90806, 90807], 33.7981, (-118.1675)),
-('Port St. Lucie', 'FL', ARRAY[34984, 34983, 34987, 34952], 27.2796, (-80.3883)),
-('Denton', 'TX', ARRAY[76205, 76201, 76208, 76209], 33.2176, (-97.1419)),
-('Madison', 'WI', ARRAY[53704, 53705, 53703, 53726], 43.0826, (-89.3931)),
-('Reno', 'NV', ARRAY[89523, 89439, 89503, 89502], 39.5497, (-119.8483)),
-('Harrisburg', 'PA', ARRAY[17102, 17103, 17104, 17120], 40.2752, (-76.8843)),
-('Little Rock', 'AR', ARRAY[72210, 72212, 72223, 72209], 34.7256, (-92.3576)),
-('Oakland', 'CA', ARRAY[94705, 94704, 94611, 94610], 37.7903, (-122.2165)),
-('Durham', 'NC', ARRAY[27705, 27704, 27707, 27701], 35.9794, (-78.9031)),
-('Winston-Salem', 'NC', ARRAY[27127, 27040, 27107, 27106], 36.1029, (-80.2611)),
-('Bonita Springs', 'FL', ARRAY[34134, 34135, 34136], 26.3559, (-81.7861)),
-('Indio', 'CA', ARRAY[92201, 92203, 92202], 33.7346, (-116.2346)),
-('Palm Coast', 'FL', ARRAY[32136, 32137, 32135, 32142], 29.5392, (-81.2460)),
-('Chattanooga', 'TN', ARRAY[37416, 37410, 37411, 37419], 35.0657, (-85.2488)),
-('Spokane', 'WA', ARRAY[99203, 99202, 99205, 99204], 47.6671, (-117.4330)),
-('Syracuse', 'NY', ARRAY[13214, 13290, 13224, 13207], 43.0409, (-76.1438)),
-('Lancaster', 'PA', ARRAY[17602, 17601, 17604, 17607], 40.0421, (-76.3012)),
-('Arlington', 'TX', ARRAY[76006, 76001, 76002, 76018], 32.6998, (-97.1250)),
-('Stockton', 'CA', ARRAY[95212, 95210, 95211, 95209], 37.9765, (-121.3109)),
-('Poughkeepsie', 'NY', ARRAY[12603, 12602], 41.6949, (-73.9210)),
-('Augusta', 'GA', ARRAY[30815, 30812, 30907, 30906], 33.3645, (-82.0708)),
-('Boise', 'ID', ARRAY[83702, 83705, 83704, 83709], 43.6007, (-116.2312)),
-('Oxnard', 'CA', ARRAY[93036, 93030, 93033, 93031], 34.1963, (-119.1815)),
-('Scranton', 'PA', ARRAY[18508, 18510, 18503, 18505], 41.4044, (-75.6649)),
-('Modesto', 'CA', ARRAY[95356, 95355, 95354, 95351], 37.6374, (-121.0028)),
-('Kissimmee', 'FL', ARRAY[34743, 34744, 34746, 34742], 28.3042, (-81.4164)),
-('Aurora', 'CO', ARRAY[80137, 80045, 80018, 80019], 39.7087, (-104.7273)),
-('Youngstown', 'OH', ARRAY[44503, 44504, 44505, 44506], 41.0993, (-80.6463)),
-('Fayetteville', 'AR', ARRAY[72703, 72701], 36.0713, (-94.1660)),
-('Anaheim', 'CA', ARRAY[92806, 92807, 92804, 92805], 33.8390, (-117.8572)),
-('Pensacola', 'FL', ARRAY[32504, 32503, 32502, 32513], 30.4427, (-87.1886)),
-('Victorville', 'CA', ARRAY[92395, 92392, 92393], 34.5277, (-117.3536)),
-('Lancaster', 'CA', ARRAY[93534, 93536, 93539, 93584], 34.6935, (-118.1753)),
-('Greensboro', 'NC', ARRAY[27455, 27214, 27408, 27409], 36.0956, (-79.8269)),
-('Corpus Christi', 'TX', ARRAY[78408, 78409, 78406, 78407], 27.7260, (-97.3755)),
-('Fort Wayne', 'IN', ARRAY[46845, 46818, 46814, 46815], 41.0886, (-85.1437)),
-('Santa Ana', 'CA', ARRAY[92701, 92705, 92704, 92707], 33.7366, (-117.8819)),
-('Flint', 'MI', ARRAY[48551, 48504, 48505, 48506], 43.0235, (-83.6922)),
-('San Juan', 'PR', ARRAY[00913, 00911, 00917, 00915], 18.4037, (-66.0636)),
-('Fayetteville', 'NC', ARRAY[28305, 28306, 28307, 28301], 35.0846, (-78.9776)),
-('Jackson', 'MS', ARRAY[39206, 39204, 39203, 39202], 32.3163, (-90.2124)),
-('Santa Rosa', 'CA', ARRAY[95409, 95403, 95401, 95407], 38.4458, (-122.7067)),
-('Lansing', 'MI', ARRAY[48915, 48912, 48911, 48910], 42.7142, (-84.5601)),
-('Ann Arbor', 'MI', ARRAY[48104, 48105, 48108, 48109], 42.2755, (-83.7312)),
-('Henderson', 'NV', ARRAY[89052, 89002, 89074, 89015], 36.0133, (-115.0380)),
-('Huntsville', 'AL', ARRAY[35803, 35802, 35805, 35806], 34.6988, (-86.6412)),
-('Lexington', 'KY', ARRAY[40506, 40508, 40509, 40504], 38.0423, (-84.4587)),
-('Mobile', 'AL', ARRAY[36607, 36604, 36605, 36602], 30.6783, (-88.1162)),
-('Fort Collins', 'CO', ARRAY[80528, 80526, 80524, 80525], 40.5478, (-105.0656)),
-('Asheville', 'NC', ARRAY[28805, 28804, 28803, 28801], 35.5704, (-82.5536)),
-('Santa Clarita', 'CA', ARRAY[91351, 91350, 91355, 91354], 34.4175, (-118.4964)),
-('St. Paul', 'MN', ARRAY[55117, 55116, 55119, 55130], 44.9477, (-93.1040)),
-('Antioch', 'CA', ARRAY[94509], 37.9789, (-121.7958)),
-('Lakeland', 'FL', ARRAY[33803, 33801, 33805, 33815], 28.0556, (-81.9545)),
-('Trenton', 'NJ', ARRAY[08611, 08618, 08629, 08609], 40.2236, (-74.7641)),
-('Lincoln', 'NE', ARRAY[68524, 68526, 68520, 68521], 40.8090, (-96.6788)),
-('Springfield', 'MO', ARRAY[65802, 65803, 65804, 65806], 37.1943, (-93.2916)),
-('Plano', 'TX', ARRAY[75023, 75025, 75024, 75074], 33.0502, (-96.7487)),
-('Irvine', 'CA', ARRAY[92614, 92612, 92618, 92620], 33.6772, (-117.7738)),
-('Davenport', 'IA', ARRAY[52803, 52801, 52806, 52807], 41.5563, (-90.6052)),
-('Rockford', 'IL', ARRAY[61109, 61108, 61104, 61107], 42.2597, (-89.0641)),
-('Newark', 'NJ', ARRAY[07102, 07105, 07104, 07107], 40.7245, (-74.1725)),
-('South Bend', 'IN', ARRAY[46635, 46628, 46616, 46614], 41.6767, (-86.2696)),
-('Shreveport', 'LA', ARRAY[71101, 71103, 71104, 71105], 32.4656, (-93.7956)),
-('Savannah', 'GA', ARRAY[31409, 31408, 31401, 31405], 32.0281, (-81.1784)),
-('Myrtle Beach', 'SC', ARRAY[29577], 33.7096, (-78.8843)),
-('Chula Vista', 'CA', ARRAY[91910, 91913, 91915, 91914], 32.6281, (-117.0145)),
-('Eugene', 'OR', ARRAY[97404, 97401, 97403, 97402], 44.0563, (-123.1173)),
-('Canton', 'OH', ARRAY[44710, 44702, 44703, 44706], 40.8075, (-81.3677)),
-('Lubbock', 'TX', ARRAY[79423, 79424, 79416, 79412], 33.5659, (-101.8878)),
-('Reading', 'PA', ARRAY[19601, 19602, 19611, 19603], 40.3400, (-75.9267)),
-('Winter Haven', 'FL', ARRAY[33880, 33884, 33882, 33883], 28.0118, (-81.7017)),
-('Salem', 'OR', ARRAY[97301, 97306, 97304, 97317], 44.9231, (-123.0246)),
-('St. Petersburg', 'FL', ARRAY[33702, 33762, 33713, 33712], 27.7931, (-82.6652)),
-('Lafayette', 'LA', ARRAY[70507, 70506, 70503, 70501], 30.2084, (-92.0323)),
-('Laredo', 'TX', ARRAY[78045, 78043, 78040, 78041], 27.5629, (-99.4875)),
-('Jersey City', 'NJ', ARRAY[07311, 07302, 07307, 07306], 40.7161, (-74.0682)),
-('Concord', 'NC', ARRAY[28027, 28026], 35.3933, (-80.6366)),
-('Columbus', 'GA', ARRAY[31820, 31909, 31904, 31905], 32.5100, (-84.8771)),
-('Chandler', 'AZ', ARRAY[85249, 85226, 85224, 85225], 33.2826, (-111.8516)),
-('McKinney', 'TX', ARRAY[75070, 75071, 75072], 33.2015, (-96.6669)),
-('Scottsdale', 'AZ', ARRAY[85258, 85251, 85250, 85257], 33.6872, (-111.8651)),
-('Killeen', 'TX', ARRAY[76543, 76542, 76549, 76540], 31.0754, (-97.7296)),
-('Tallahassee', 'FL', ARRAY[32312, 32399, 32304, 32303], 30.4551, (-84.2526)),
-('Peoria', 'IL', ARRAY[61606, 61615, 61614, 61605], 40.7520, (-89.6153)),
-('Wilmington', 'NC', ARRAY[28401, 28405, 28403, 28412], 34.2100, (-77.8866)),
-('Montgomery', 'AL', ARRAY[36112, 36113, 36110, 36111], 32.3473, (-86.2666)),
-('Gilbert', 'AZ', ARRAY[85234, 85297, 85296, 85295], 33.3101, (-111.7463)),
-('Glendale', 'AZ', ARRAY[85303, 85302, 85304, 85306], 33.5791, (-112.2311)),
-('North Las Vegas', 'NV', ARRAY[89031, 89030, 89086, 89084], 36.2880, (-115.0901)),
-('Anchorage', 'AK', ARRAY[99515, 99517, 99516, 99513], 61.1508, (-149.1091)),
-('Chesapeake', 'VA', ARRAY[23324, 23323, 23322, 23321], 36.6778, (-76.3024)),
-('Barnstable Town', 'MA', ARRAY[02637, 02630, 02632, 02601], 41.6722, (-70.3599)),
-('Norfolk', 'VA', ARRAY[23508, 23507, 23504, 23503], 36.8945, (-76.2590)),
-('Fremont', 'CA', ARRAY[94538, 94539, 94555, 94537], 37.5265, (-121.9852)),
-('Kennewick', 'WA', ARRAY[99336, 99338], 46.1978, (-119.1732)),
-('Garland', 'TX', ARRAY[75041, 75040, 75043, 75042], 32.9100, (-96.6305)),
-('Irving', 'TX', ARRAY[75061, 75060, 75038, 75039], 32.8584, (-96.9702)),
-('Visalia', 'CA', ARRAY[93291, 93292, 93278, 93279], 36.3276, (-119.3269)),
-('Atlantic City', 'NJ', ARRAY[08404, 08405], 39.3797, (-74.4527)),
-('Nashua', 'NH', ARRAY[03063, 03060, 03064, 03061], 42.7491, (-71.4910)),
-('Paradise', 'NV', ARRAY[89102, 89109, 89183, 89169], 36.0807, (-115.1369)),
-('Hialeah', 'FL', ARRAY[33016, 33010, 33012, 33013], 25.8696, (-80.3046)),
-('York', 'PA', ARRAY[17401, 17403], 39.9651, (-76.7315)),
-('Arlington', 'VA', ARRAY[22203, 22202, 22201, 22207], 38.8786, (-77.1011)),
-('Evansville', 'IN', ARRAY[47714, 47715, 47710, 47711], 37.9881, (-87.5341)),
-('Avondale', 'AZ', ARRAY[85392, 85039], 33.3858, (-112.3236)),
-('Brownsville', 'TX', ARRAY[78520, 78526, 78575, 78578], 25.9980, (-97.4565)),
-('Gulfport', 'MS', ARRAY[39503, 39507, 39502, 39505], 30.4271, (-89.0703)),
-('Appleton', 'WI', ARRAY[54915, 54913, 54911, 54912], 44.2779, (-88.3891)),
-('Bremerton', 'WA', ARRAY[98314, 98310, 98367, 98337], 47.5436, (-122.7122)),
-('Hickory', 'NC', ARRAY[28602, 28603], 35.7425, (-81.3230)),
-('Tacoma', 'WA', ARRAY[98421, 98402, 98403, 98404], 47.2431, (-122.4531)),
-('San Bernardino', 'CA', ARRAY[92407, 92405, 92408, 92404], 34.1417, (-117.2946)),
-('College Station', 'TX', ARRAY[77840, 77841, 77842, 77843], 30.5852, (-96.2960)),
-('Kalamazoo', 'MI', ARRAY[49006, 49007, 49008, 49074], 42.2749, (-85.5882)),
-('Thousand Oaks', 'CA', ARRAY[91360, 91361, 91362, 91319], 34.1914, (-118.8755)),
-('Roanoke', 'VA', ARRAY[24015, 24016, 24017, 24011], 37.2785, (-79.9580)),
-('Fontana', 'CA', ARRAY[92336, 92337, 92331, 92334], 34.0968, (-117.4599)),
-('Moreno Valley', 'CA', ARRAY[92553, 92555, 92557, 92554], 33.9244, (-117.2045)),
-('North Port', 'FL', ARRAY[34287, 34288, 34289, 34293], 27.0577, (-82.1975)),
-('Fargo', 'ND', ARRAY[58104, 58103, 58105, 58106], 46.8652, (-96.8292)),
-('Green Bay', 'WI', ARRAY[54302, 54304, 54303, 54301], 44.5150, (-87.9896)),
-('Amarillo', 'TX', ARRAY[79109, 79101, 79102, 79103], 35.1988, (-101.8311)),
-('Portland', 'ME', ARRAY[04102, 04103, 04108, 04019], 43.6773, (-70.2715)),
-('Santa Barbara', 'CA', ARRAY[93101, 93103, 93109, 93102], 34.4285, (-119.7202)),
-('Gainesville', 'FL', ARRAY[32607, 32612, 32653, 32608], 29.6804, (-82.3458)),
-('Olympia', 'WA', ARRAY[98502, 98506, 98504, 98507], 47.0417, (-122.8959)),
-('Frisco', 'TX', ARRAY[75035, 75033, 75036], 33.1555, (-96.8215)),
-('Yonkers', 'NY', ARRAY[10703, 10701, 10705, 10704], 40.9466, (-73.8674)),
-('Norwich', 'CT', ARRAY[06389, 06360], 41.5495, (-72.0882)),
-('Spring Valley', 'NV', ARRAY[89147, 89146, 89148, 89113], 36.0987, (-115.2619)),
-('Glendale', 'CA', ARRAY[91214, 91046, 91201, 91204], 34.1818, (-118.2468)),
-('Huntington Beach', 'CA', ARRAY[92647, 92648, 92649, 90742], 33.6960, (-118.0025)),
-('Deltona', 'FL', ARRAY[32738, 32728, 32739], 28.9050, (-81.2137)),
-('Aurora', 'IL', ARRAY[60504, 60505, 60502, 60503], 41.7637, (-88.2901)),
-('Tempe', 'AZ', ARRAY[85282, 85283, 85284, 85252], 33.3881, (-111.9318)),
-('Overland Park', 'KS', ARRAY[66210, 66211, 66212, 66213], 38.8870, (-94.6870)),
-('Grand Prairie', 'TX', ARRAY[75050, 75051, 75054, 75053], 32.6872, (-97.0209)),
-('Sunrise Manor', 'NV', ARRAY[89142, 89110, 89115, 89156], 36.1785, (-115.0490)),
-('Waco', 'TX', ARRAY[76710, 76711, 76712, 76708], 31.5598, (-97.1881)),
-('Salinas', 'CA', ARRAY[93905, 93906, 93902, 93915], 36.6884, (-121.6317)),
-('Waterbury', 'CT', ARRAY[06702, 06704, 06706, 06705], 41.5583, (-73.0361)),
-('Clarksville', 'TN', ARRAY[37043, 37042, 37040, 37044], 36.5695, (-87.3420)),
-('Cedar Rapids', 'IA', ARRAY[52405, 52402, 52401, 52411], 41.9665, (-91.6782)),
-('Sioux Falls', 'SD', ARRAY[57104, 57105, 57106, 57107], 43.5397, (-96.7320)),
-('Huntington', 'WV', ARRAY[25702, 25701, 25705, 25704], 38.4109, (-82.4344)),
-('Ontario', 'CA', ARRAY[91761, 91764, 91743, 91758], 34.0393, (-117.6064)),
-('Hagerstown', 'MD', ARRAY[21742, 21741, 21747, 21749], 39.6401, (-77.7217)),
-('Erie', 'PA', ARRAY[16510, 16511, 16508, 16502], 42.1168, (-80.0733)),
-('Vancouver', 'WA', ARRAY[98664, 98665, 98660, 98661], 45.6366, (-122.5967)),
-('Nampa', 'ID', ARRAY[83686, 83687], 43.5845, (-116.5631)),
-('Spartanburg', 'SC', ARRAY[29301, 29307, 29306, 29305], 34.9437, (-81.9257)),
-('Gastonia', 'NC', ARRAY[28056, 28052, 28053, 28055], 35.2494, (-81.1853)),
-('Fort Lauderdale', 'FL', ARRAY[33304, 33305, 33306, 33308], 26.1412, (-80.1464)),
-('Lorain', 'OH', ARRAY[44053, 44055], 41.4409, (-82.1840)),
-('Murfreesboro', 'TN', ARRAY[37130, 37129, 37128, 37127], 35.8492, (-86.4119)),
-('High Point', 'NC', ARRAY[27235, 27262, 27263, 27265], 35.9907, (-79.9938)),
-('Newport News', 'VA', ARRAY[23603, 23608, 23604, 23605], 37.1051, (-76.5185)),
-('Rancho Cucamonga', 'CA', ARRAY[91701, 91739, 91737, 91729], 34.1248, (-117.5666)),
-('Hemet', 'CA', ARRAY[92543], 33.7341, (-116.9969)),
-('Santa Cruz', 'CA', ARRAY[95064, 95060, 95062, 95061], 36.9789, (-122.0346)),
-('Danbury', 'CT', ARRAY[06811, 06813, 96810], 41.4016, (-73.4710)),
-('Peoria', 'AZ', ARRAY[85383, 85382, 85373, 85345], 33.7844, (-112.2989)),
-('Oceanside', 'CA', ARRAY[92057, 92058, 92056, 92049], 33.2247, (-117.3083)),
-('Elk Grove', 'CA', ARRAY[95758, 95624, 94624, 95759], 38.4160, (-121.3842)),
-('Pembroke Pines', 'FL', ARRAY[33028, 33024, 33026, 33023], 26.0128, (-80.3382)),
-('Vallejo', 'CA', ARRAY[94590, 94591, 94589], 38.1133, (-122.2358)),
-('Garden Grove', 'CA', ARRAY[92843, 92840, 92841, 92845], 33.7787, (-117.9601)),
-('Medford', 'OR', ARRAY[97501], 42.3372, (-122.8537)),
-('Cary', 'NC', ARRAY[27511, 27518, 27519, 27513], 35.7820, (-78.8191)),
-('Marysville', 'WA', ARRAY[98270], 48.0809, (-122.1561)),
-('Corona', 'CA', ARRAY[92880, 92881, 92879, 92877], 33.8616, (-117.5649)),
-('Ocala', 'FL', ARRAY[34474, 34471, 34470], 29.1780, (-82.1511)),
-('Fredericksburg', 'VA', ARRAY[22403, 22412], 38.2992, (-77.4872)),
-('Gainesville', 'GA', ARRAY[30507, 30504], 34.2903, (-83.8301)),
-('Bayamón', 'PR', ARRAY[00957, 00956, 00934, 00960], 18.3793, (-66.1635)),
-('Enterprise', 'NV', ARRAY[89183, 89054, 89139, 89141], 36.0164, (-115.2208)),
-('Manchester', 'NH', ARRAY[03104, 03101, 03103, 03102], 42.9848, (-71.4447)),
-('Champaign', 'IL', ARRAY[61820, 61821, 61824, 61825], 40.1144, (-88.2735)),
-('Alexandria', 'VA', ARRAY[22301, 22304, 22305, 22311], 38.8185, (-77.0861)),
-('Hayward', 'CA', ARRAY[94542, 94545, 94544, 94543], 37.6328, (-122.0772)),
-('Springfield', 'IL', ARRAY[62712, 62702, 62703, 62701], 39.7710, (-89.6538)),
-('Lakewood', 'CO', ARRAY[80232, 80235, 80214, 80215], 39.6977, (-105.1168)),
-('Lafayette', 'IN', ARRAY[47905, 47904, 47901, 47902], 40.3990, (-86.8594)),
-('Frederick', 'MD', ARRAY[21703, 21702, 21701, 21709], 39.4336, (-77.4141)),
-('Lake Charles', 'LA', ARRAY[70607, 70601, 70615, 70602], 30.2012, (-93.2122)),
-('Odessa', 'TX', ARRAY[79762, 79763, 79765, 79768], 31.8831, (-102.3406)),
-('Tuscaloosa', 'AL', ARRAY[35476, 35405, 35404, 35406], 33.2348, (-87.5267)),
-('Warner Robins', 'GA', ARRAY[31005, 31093, 31099], 32.5970, (-83.6529)),
-('Palmdale', 'CA', ARRAY[93550, 93591, 93551, 93590], 34.5944, (-118.1057)),
-('Hollywood', 'FL', ARRAY[33024, 33023, 33021, 33020], 26.0294, (-80.1679)),
-('Midland', 'TX', ARRAY[79706, 79707, 79705, 79703], 32.0249, (-102.1137)),
-('Leesburg', 'FL', ARRAY[34762, 34736, 34749, 34789], 28.7657, (-81.8996)),
-('Port Arthur', 'TX', ARRAY[77640, 77642, 77611, 77641], 29.8554, (-93.9264)),
-('Muskegon', 'MI', ARRAY[49440, 49441, 49443], 43.2281, (-86.2563)),
-('Macon', 'GA', ARRAY[31052, 31210, 31211, 31213], 32.8065, (-83.6974)),
-('Kansas City', 'KS', ARRAY[66102, 66103, 66104, 66105], 39.1234, (-94.7443)),
-('Sunnyvale', 'CA', ARRAY[94089, 94085, 94086, 94087], 37.3836, (-122.0256)),
-('Pomona', 'CA', ARRAY[91767, 91768, 91769], 34.0585, (-117.7626)),
-('Escondido', 'CA', ARRAY[92025, 92026, 92027, 92030], 33.1347, (-117.0722)),
-('Pasadena', 'TX', ARRAY[77059, 77586, 77506, 77507], 29.6583, (-95.1499)),
-('New Bedford', 'MA', ARRAY[02744, 02745, 02746, 02741], 41.6697, (-70.9428)),
-('Fairfield', 'CA', ARRAY[94533, 94534, 94535], 38.2592, (-122.0324)),
-('Naperville', 'IL', ARRAY[60563, 60564, 60565, 60566], 41.7483, (-88.1657)),
-('Bellevue', 'WA', ARRAY[98005, 98006, 98007, 98008], 47.5951, (-122.1535)),
-('Binghamton', 'NY', ARRAY[13905, 13901, 13903], 42.1014, (-75.9093)),
-('Elkhart', 'IN', ARRAY[46517, 46516, 46515], 41.6916, (-85.9628)),
-('Topeka', 'KS', ARRAY[66622, 66609, 66608, 66607], 39.0346, (-95.6955)),
-('Joliet', 'IL', ARRAY[60586, 60432, 60433, 60431], 41.5189, (-88.1499)),
-('Beaumont', 'TX', ARRAY[77705, 77706, 77707, 77701], 30.0849, (-94.1451)),
-('Paterson', 'NJ', ARRAY[07522, 07514, 07513, 07505], 40.9147, (-74.1624)),
-('Merced', 'CA', ARRAY[95340, 95341, 98348], 37.3057, (-120.4778)),
-('Pueblo', 'CO', ARRAY[81005, 81003, 81001, 81008], 38.2705, (-104.6112)),
-('Tyler', 'TX', ARRAY[75702, 75703, 75701, 75710], 32.3184, (-95.3062)),
-('Torrance', 'CA', ARRAY[90501, 90503, 90505, 90504], 33.8346, (-118.3417)),
-('Metairie', 'LA', ARRAY[70003, 70001, 70006, 70005], 29.9977, (-90.1780)),
-('Yuma', 'AZ', ARRAY[85364], 32.5992, (-114.5488)),
-('Surprise', 'AZ', ARRAY[85379, 85388, 85387, 85374], 33.6800, (-112.4524)),
-('Columbia', 'MO', ARRAY[65203, 65201, 65215, 65205], 38.9478, (-92.3256)),
-('Athens', 'GA', ARRAY[30601, 30602, 30605, 30606], 33.9508, (-83.3689)),
-('Roseville', 'CA', ARRAY[95747, 95678], 38.7703, (-121.3196)),
-('Thornton', 'CO', ARRAY[80233, 80241, 80602, 80640], 39.9197, (-104.9438)),
-('Miramar', 'FL', ARRAY[33023, 33027, 33025], 25.9773, (-80.3351)),
-('Pasadena', 'CA', ARRAY[91106, 91107, 91105, 91103], 34.1597, (-118.1390)),
-('Mesquite', 'TX', ARRAY[75150, 75181, 75185], 32.7623, (-96.5889)),
-('Santa Maria', 'CA', ARRAY[93455, 93458], 34.9334, (-120.4432)),
-('Olathe', 'KS', ARRAY[66061, 66051, 66063], 38.8832, (-94.8198)),
-('Houma', 'LA', ARRAY[70360, 70361], 29.5799, (-90.7058)),
-('Carolina', 'PR', ARRAY[00987, 00982, 00983, 00985], 18.4054, (-65.9792)),
-('Carrollton', 'TX', ARRAY[75006, 75010, 75011], 32.9890, (-96.8999)),
-('Grand Junction', 'CO', ARRAY[81504, 81507, 81506, 81501], 39.0876, (-108.5673)),
-('Charleston', 'WV', ARRAY[25304, 25303, 25302, 25301], 38.3484, (-81.6323)),
-('Orange', 'CA', ARRAY[92869, 92866, 92867, 92865], 33.8038, (-117.8218)),
-('Fullerton', 'CA', ARRAY[92831, 92835, 92832, 92834], 33.8841, (-117.9279)),
-('Greeley', 'CO', ARRAY[80631, 80632, 80633, 80638], 40.4151, (-104.7706)),
-('Las Cruces', 'NM', ARRAY[88011, 88005, 88007, 88001], 32.3265, (-106.7892)),
-('Panama City', 'FL', ARRAY[32405, 32404, 32402, 32406], 30.1995, (-85.6004)),
-('Harlingen', 'TX', ARRAY[78552, 78522], 26.1917, (-97.6976)),
-('West Valley City', 'UT', ARRAY[84120, 84128, 84118, 84125], 40.6889, (-112.0115)),
-('Hampton', 'VA', ARRAY[23651, 23605, 23669, 23661], 37.0551, (-76.3630)),
-('Warren', 'MI', ARRAY[48092, 48091, 48089, 48088], 42.4934, (-83.0270)),
-('Mauldin', 'SC', ARRAY[29607], 34.7849, (-82.3005)),
-('Bloomington', 'IL', ARRAY[61705, 61704, 61702, 61709], 40.4757, (-88.9703)),
-('Coral Springs', 'FL', ARRAY[33076, 33065, 33067], 26.2702, (-80.2591)),
-('Round Rock', 'TX', ARRAY[78664, 78665, 78680, 78682], 30.5254, (-97.6660)),
-('Yakima', 'WA', ARRAY[98903, 98902, 98908, 98904], 46.5923, (-120.5496)),
-('Sterling Heights', 'MI', ARRAY[48313, 48312, 48314, 48311], 42.5809, (-83.0305)),
-('Kent', 'WA', ARRAY[98030, 98032, 98042, 98013], 47.3887, (-122.2129)),
-('Burlington', 'NC', ARRAY[27215, 27216], 36.0758, (-79.4686)),
-('Bellingham', 'WA', ARRAY[98225, 98226], 48.7543, (-122.4687)),
-('Santa Clara', 'CA', ARRAY[95050, 95051, 95053, 95052], 37.3645, (-121.9680)),
-('Racine', 'WI', ARRAY[53404, 53406, 53403, 53402], 42.7274, (-87.8135)),
-('Greenville', 'NC', ARRAY[27858, 27835], 35.5956, (-77.3768)),
-('Stamford', 'CT', ARRAY[06907, 06905, 06902, 06903], 41.1035, (-73.5583)),
-('Elizabeth', 'NJ', ARRAY[07202, 07201, 07206, 07207], 40.6657, (-74.1912)),
-('Johnson City', 'TN', ARRAY[37615, 37601, 37604, 37602], 36.3406, (-82.3803)),
-('Lynchburg', 'VA', ARRAY[24502, 24503, 24501, 24506], 37.4003, (-79.1909)),
-('Simi Valley', 'CA', ARRAY[93065, 93062, 93094, 93099], 34.2663, (-118.7490)),
-('Fort Smith', 'AR', ARRAY[72904, 72908, 72903, 72923], 35.3493, (-94.3695)),
-('Kenosha', 'WI', ARRAY[53140, 53142, 53143], 42.5864, (-87.8765)),
-('Boulder', 'CO', ARRAY[80304, 80305, 80302, 80303], 40.0249, (-105.2523)),
-('Pearland', 'TX', ARRAY[77089, 77584, 77581, 77588], 29.5585, (-95.3215)),
-('Berkeley', 'CA', ARRAY[94707, 94705, 94704, 94703], 37.8723, (-122.2760)),
-('Richardson', 'TX', ARRAY[75080, 75082, 75085], 32.9717, (-96.7093)),
-('Redding', 'CA', ARRAY[96003, 96001], 40.5698, (-122.3650)),
-('Arvada', 'CO', ARRAY[80004, 80007, 80003, 80002], 39.8321, (-105.1511)),
-('St. George', 'UT', ARRAY[84790, 84771, 84791], 37.0770, (-113.5770)),
-('Billings', 'MT', ARRAY[59105, 59102, 59101, 59104], 45.7891, (-108.5524)),
-('Yuba City', 'CA', ARRAY[95993], 39.1357, (-121.6381)),
-('Rochester', 'MN', ARRAY[55901, 55906, 55904, 55905], 44.0151, (-92.4778)),
-('East Los Angeles', 'CA', ARRAY[90022, 90023, 90053], 34.0326, (-118.1691)),
-('Kingsport', 'TN', ARRAY[37664, 37663, 37665, 37662], 36.5224, (-82.5453)),
-('Duluth', 'MN', ARRAY[55802, 55805, 55804, 55808], 46.7756, (-92.1392)),
-('Lehigh Acres', 'FL', ARRAY[33973, 33972, 33971, 33976], 26.6120, (-81.6388)),
-('Rock Hill', 'SC', ARRAY[29733, 29730, 29731, 29734], 34.9416, (-81.0244)),
-('Gilroy', 'CA', ARRAY[95021], 37.0047, (-121.5855)),
-('Cambridge', 'MA', ARRAY[02140, 02141, 02139, 02138], 42.3759, (-71.1185)),
-('Sugar Land', 'TX', ARRAY[77478, 77479, 77487], 29.5935, (-95.6357)),
-('Texas City', 'TX', ARRAY[77590, 77539, 77554, 77592], 29.4128, (-94.9658)),
-('Iowa City', 'IA', ARRAY[52246, 52240, 52242, 52243], 41.6559, (-91.5303)),
-('Saginaw', 'MI', ARRAY[48602, 48601, 48605, 48608], 43.4199, (-83.9501)),
-('Chico', 'CA', ARRAY[95926, 95928, 95927, 95929], 39.7575, (-121.8152)),
-('Dover', 'DE', ARRAY[19901, 19904, 19903, 19905], 39.1610, (-75.5203)),
-('Norman', 'OK', ARRAY[73026, 74857, 73072, 73071], 35.2335, (-97.3471)),
-('Clearwater', 'FL', ARRAY[33759, 33756, 33763, 33761], 27.9789, (-82.7622)),
-('Coeur d''Alene', 'ID', ARRAY[83814, 83816], 47.7041, (-116.7935)),
-('Ponce', 'PR', ARRAY[00717, 00716, 00730, 00732], 18.0120, (-66.6198)),
-('Independence', 'MO', ARRAY[64055, 64056, 64057, 64050], 39.0871, (-94.3501)),
-('West Jordan', 'UT', ARRAY[84081, 84084], 40.6024, (-112.0008)),
-('Abilene', 'TX', ARRAY[79699, 79603, 79601, 79607], 32.4543, (-99.7384)),
-('Bloomington', 'IN', ARRAY[47408, 47401, 47403, 47404], 39.1637, (-86.5257)),
-('El Monte', 'CA', ARRAY[91731, 91733, 91735], 34.0739, (-118.0291)),
-('Carlsbad', 'CA', ARRAY[92009, 92011, 92010, 92013], 33.1247, (-117.2837)),
-('North Charleston', 'SC', ARRAY[29420, 29456, 29485, 29483], 32.9066, (-80.0722)),
-('St. Cloud', 'MN', ARRAY[56301, 56303, 56302, 56372], 45.5339, (-94.1718)),
-('Temecula', 'CA', ARRAY[92591, 92592, 92589], 33.4928, (-117.1315)),
-('Clovis', 'CA', ARRAY[93612, 93619, 93613, 93747], 36.8278, (-119.6831)),
-('Meridian', 'ID', ARRAY[83642, 83680], 43.6112, (-116.3968)),
-('Brandon', 'FL', ARRAY[33510, 33594, 33619, 33584], 27.9367, (-82.3000)),
-('Westminster', 'CO', ARRAY[80031, 80234, 80005, 80003], 39.8837, (-105.0624)),
-('Costa Mesa', 'CA', ARRAY[92627, 92628], 33.6667, (-117.9135)),
-('Monroe', 'LA', ARRAY[71203, 71202, 71201, 71207], 32.5183, (-92.0774)),
-('Utica', 'NY', ARRAY[13502, 13503, 13504, 13505], 43.0961, (-75.2260)),
-('Pompano Beach', 'FL', ARRAY[33060, 33062, 33064, 33061], 26.2428, (-80.1312)),
-('West Palm Beach', 'FL', ARRAY[33412, 33417, 33409, 33407], 26.7468, (-80.1316)),
-('Waterloo', 'IA', ARRAY[50703, 50702, 50701, 50704], 42.4920, (-92.3522)),
-('Everett', 'WA', ARRAY[98204, 98205, 98203, 98201], 47.9525, (-122.1669)),
-('El Centro', 'CA', ARRAY[92244], 32.7867, (-115.5586)),
-('Santa Fe', 'NM', ARRAY[87507, 87501, 87502, 87503], 35.6619, (-105.9819)),
-('Downey', 'CA', ARRAY[90240, 90241, 90239], 33.9379, (-118.1312)),
-('Lowell', 'MA', ARRAY[01850, 01852, 01854, 01853], 42.6389, (-71.3217)),
-('Centennial', 'CO', ARRAY[80121, 80112, 80016, 80015], 39.5926, (-104.8674)),
-('Elgin', 'IL', ARRAY[60123, 60124, 60121, 60122], 42.0385, (-88.3229)),
-('Richmond', 'CA', ARRAY[94850, 94801, 94803, 94804], 37.9477, (-122.3390)),
-('Broken Arrow', 'OK', ARRAY[74011, 74012, 74013, 74102], 36.0365, (-95.7809)),
-('Miami Gardens', 'FL', ARRAY[33169, 33055, 33056, 33054], 25.9433, (-80.2426)),
-('The Woodlands', 'TX', ARRAY[77381, 77382, 77384, 77389], 30.1738, (-95.5134)),
-('Bend', 'OR', ARRAY[97701, 97703], 44.0562, (-121.3087)),
-('Burlington', 'VT', ARRAY[05401, 05408, 05406], 44.4877, (-73.2314)),
-('Jurupa Valley', 'CA', ARRAY[91752, 92519], 34.0010, (-117.4705)),
-('Sandy Springs', 'GA', ARRAY[30350, 30327, 30328, 30342], 33.9366, (-84.3703)),
-('Gresham', 'OR', ARRAY[97233, 97230, 97080], 45.5023, (-122.4413)),
-('Lewisville', 'TX', ARRAY[75056, 75057, 75077, 75065], 33.0452, (-96.9823)),
-('Hillsboro', 'OR', ARRAY[97123, 97124, 97129], 45.5272, (-122.9361)),
-('San Buenaventura', 'CA', ARRAY[93001, 93003, 93005, 93006], 34.2741, (-119.2314)),
-('Jacksonville', 'NC', ARRAY[28547, 28543, 28540, 28541], 34.7288, (-77.3941)),
-('Inglewood', 'CA', ARRAY[90304, 90303, 90302, 90301], 33.9566, (-118.3444)),
-('Spring Hill', 'FL', ARRAY[34608, 34604, 34606, 34611], 28.4797, (-82.5300)),
-('League City', 'TX', ARRAY[77598, 77511, 77539, 77565], 29.4873, (-95.1087)),
-('Eau Claire', 'WI', ARRAY[54701, 54702], 44.8199, (-91.4949)),
-('Turlock', 'CA', ARRAY[95382, 95381], 37.5053, (-120.8588)),
-('Temple', 'TX', ARRAY[76502, 76504, 76508, 76503], 31.1076, (-97.3894)),
-('Sioux City', 'IA', ARRAY[51104, 51105, 51103, 51101], 42.4959, (-96.3901)),
-('Salisbury', 'MD', ARRAY[21804, 21801, 21803], 38.3756, (-75.5867)),
-('Davie', 'FL', ARRAY[33325, 33331, 33330, 33328], 26.0789, (-80.2870)),
-('Daly City', 'CA', ARRAY[94014, 94016], 37.6862, (-122.4685)),
-('Allen', 'TX', ARRAY[75013], 33.1088, (-96.6735)),
-('Highlands Ranch', 'CO', ARRAY[80126, 80130], 39.5419, (-104.9708)),
-('West Covina', 'CA', ARRAY[91791, 91790, 91793], 34.0555, (-117.9112)),
-('Sparks', 'NV', ARRAY[89434, 89431, 89435, 89437], 39.5729, (-119.7157)),
-('San Mateo', 'CA', ARRAY[94401, 94402, 94403, 94497], 37.5521, (-122.3122)),
-('Norwalk', 'CA', ARRAY[90651, 90652], 33.9069, (-118.0829)),
-('Columbia', 'MD', ARRAY[21045, 21046, 21029, 20146], 39.2004, (-76.8590)),
-('Rialto', 'CA', ARRAY[92376, 92377], 34.1174, (-117.3894)),
-('Manteca', 'CA', ARRAY[95336], 37.7927, (-121.2264)),
-('El Cajon', 'CA', ARRAY[92021, 92019, 92022], 32.8017, (-116.9605)),
-('Burbank', 'CA', ARRAY[91504, 91505, 91502, 91501], 34.1879, (-118.3235)),
-('Longmont', 'CO', ARRAY[80503, 80504, 80502], 40.1686, (-105.1005)),
-('Renton', 'WA', ARRAY[98058, 98057, 98056, 98055], 47.4784, (-122.1919)),
-('Vista', 'CA', ARRAY[92083, 92081], 33.1896, (-117.2386)),
-('Logan', 'UT', ARRAY[84341, 84323], 41.7400, (-111.8419)),
-('Prescott Valley', 'AZ', ARRAY[86315, 86314, 86341], 34.5983, (-112.3176)),
-('Vacaville', 'CA', ARRAY[95688, 95696], 38.3590, (-121.9680)),
-('Edinburg', 'TX', ARRAY[78542, 78541, 78540], 26.3197, (-98.1596)),
-('Carmel', 'IN', ARRAY[46032, 46033, 46280, 46082], 39.9650, (-86.1460)),
-('Spokane Valley', 'WA', ARRAY[99016, 99212, 99216, 99037], 47.6626, (-117.2346)),
-('San Angelo', 'TX', ARRAY[76904, 76901, 76903, 76908], 31.4424, (-100.4506)),
-('La Crosse', 'WI', ARRAY[54603, 54602], 43.8240, (-91.2268)),
-('Arden-Arcade', 'CA', ARRAY[95821, 95825, 95608, 95860], 38.6034, (-121.3810)),
-('Idaho Falls', 'ID', ARRAY[83402, 83404, 83403, 83405], 43.4872, (-112.0362)),
-('Holland', 'MI', ARRAY[49422], 42.7677, (-86.0985)),
-('Charlottesville', 'VA', ARRAY[22902, 22903, 22905, 22906], 38.0375, (-78.4855)),
-('Longview', 'TX', ARRAY[75601, 75605, 75604, 75607], 32.5193, (-94.7621)),
-('Tracy', 'CA', ARRAY[95376, 95304], 37.7269, (-121.4522)),
-('Boca Raton', 'FL', ARRAY[33487, 33486, 33432, 33433], 26.3752, (-80.1080)),
-('Wichita Falls', 'TX', ARRAY[76310, 76311, 76309, 76306], 33.9072, (-98.5291)),
-('Rio Rancho', 'NM', ARRAY[87121, 87144, 87174], 35.2872, (-106.6981)),
-('South Fulton', 'GA', ARRAY[30331, 30349, 30291, 30296], 33.6269, (-84.5802)),
-('Beaverton', 'OR', ARRAY[97005, 97007, 97006, 97008], 45.4779, (-122.8168)),
-('Lawrence', 'KS', ARRAY[66044, 66047, 66046, 66049], 38.9597, (-95.2641)),
-('Bismarck', 'ND', ARRAY[58504, 58501, 58503, 58502], 46.8144, (-100.7694)),
-('Orem', 'UT', ARRAY[84057, 84058, 84059], 40.2983, (-111.6992)),
-('Middletown', 'OH', ARRAY[45005, 45042], 39.5032, (-84.3660)),
-('San Marcos', 'CA', ARRAY[92069, 92079, 92096], 33.1350, (-117.1744)),
-('Sandy', 'UT', ARRAY[84093, 84094, 84070, 84090], 40.5710, (-111.8505)),
-('Federal Way', 'WA', ARRAY[98001, 98003, 98063, 98093], 47.3091, (-122.3358)),
-('Mandeville', 'LA', ARRAY[70471, 70470], 30.3751, (-90.0904)),
-('Hesperia', 'CA', ARRAY[92344, 92340], 34.3975, (-117.3147)),
-('Brockton', 'MA', ARRAY[02302, 02303, 02304, 02305], 42.0821, (-71.0242)),
-('Compton', 'CA', ARRAY[90221, 90222, 90223], 33.8930, (-118.2275)),
-('Fishers', 'IN', ARRAY[46040, 46256, 46037, 46085], 39.9589, (-85.9661)),
-('Sunrise', 'FL', ARRAY[33323, 33326, 33351, 33313], 26.1547, (-80.2997)),
-('Bowling Green', 'KY', ARRAY[42102, 42103, 42101], 36.9719, (-86.4373)),
-('Roswell', 'GA', ARRAY[30075, 30077], 34.0391, (-84.3513)),
-('Menifee', 'CA', ARRAY[92586, 92585, 92584], 33.6909, (-117.1849)),
-('Plantation', 'FL', ARRAY[33323, 33324, 33325, 33317], 26.1260, (-80.2617)),
-('Dover', 'NH', ARRAY[03821], 43.1887, (-70.8845)),
-('Quincy', 'MA', ARRAY[02171, 02170, 02269], 42.2516, (-71.0183)),
-('Portsmouth', 'VA', ARRAY[23708, 23704, 23707, 23701], 36.8468, (-76.3540)),
-('Chino', 'CA', ARRAY[91708, 92878], 33.9836, (-117.6654)),
-('Lynn', 'MA', ARRAY[01904, 01902, 01901, 01903], 42.4779, (-70.9663)),
-('Edmond', 'OK', ARRAY[73013, 73007, 73003, 73034], 35.6689, (-97.4159)),
-('Dearborn', 'MI', ARRAY[48120, 48126, 48124, 48121], 42.3127, (-83.2129)),
-('Livonia', 'MI', ARRAY[48150, 48154, 48151, 48153], 42.3972, (-83.3733)),
-('Vineland', 'NJ', ARRAY[08361, 08360, 08362], 39.4653, (-74.9981)),
-('San Tan Valley', 'AZ', ARRAY[85140], 33.1879, (-111.5472)),
-('Florence', 'SC', ARRAY[29506, 29501, 29502, 29504], 34.1781, (-79.7877)),
-('Portsmouth', 'NH', ARRAY[03802, 03803, 03804], 43.0580, (-70.7826)),
-('Slidell', 'LA', ARRAY[70458, 70469], 30.2881, (-89.7826)),
-('Kirkland', 'WA', ARRAY[98033, 98011, 98083], 47.6974, (-122.2054)),
-('Missoula', 'MT', ARRAY[59803, 59802, 59801, 59702], 46.8750, (-114.0214)),
-('Auburn', 'AL', ARRAY[36832, 36830], 32.6087, (-85.4899)),
-('Rapid City', 'SD', ARRAY[57703, 57701, 57709], 44.0716, (-103.2204)),
-('Lee''s Summit', 'MO', ARRAY[64082, 64064, 64063, 64081], 38.9172, (-94.3816)),
-('Terre Haute', 'IN', ARRAY[47807, 47802, 47803, 47809], 39.4654, (-87.3763)),
-('Suffolk', 'VA', ARRAY[23432, 23437, 23436, 23435], 36.6953, (-76.6398)),
-('Blacksburg', 'VA', ARRAY[24061, 24062, 24063], 37.2300, (-80.4279)),
-('Mount Pleasant', 'SC', ARRAY[29464, 29465], 32.8538, (-79.8204)),
-('Carson', 'CA', ARRAY[90810, 90747, 90746, 90745], 33.8374, (-118.2559)),
-('Riverview', 'FL', ARRAY[33569, 33579, 33578, 33568], 27.8227, (-82.3023)),
-('Conroe', 'TX', ARRAY[77301, 77303, 77304], 30.3239, (-95.4825)),
-('Livermore', 'CA', ARRAY[94551], 37.6862, (-121.7608)),
-('Germantown', 'MD', ARRAY[20874, 20875], 39.1755, (-77.2643)),
-('Lawton', 'OK', ARRAY[73507, 73505, 73503, 73506], 34.6176, (-98.4203)),
-('Westminster', 'CA', ARRAY[92684, 92685], 33.7523, (-117.9938)),
-('Santa Monica', 'CA', ARRAY[90402, 90403, 90404, 90405], 34.0232, (-118.4813)),
-('New Braunfels', 'TX', ARRAY[78130, 78135], 29.6994, (-98.1148)),
-('Fall River', 'MA', ARRAY[02723, 02720, 02721, 02790], 41.7137, (-71.1014)),
-('Albany', 'GA', ARRAY[31701, 31707, 31705, 31702], 31.5776, (-84.1762)),
-('Miami Beach', 'FL', ARRAY[33141, 33139, 33109], 25.8171, (-80.1396)),
-('Norwalk', 'CT', ARRAY[06855, 06856, 06850, 06851], 41.1144, (-73.4215)),
-('San Leandro', 'CA', ARRAY[94579, 94577, 94622], 37.7071, (-122.1601)),
-('Toms River', 'NJ', ARRAY[08753, 08754], 39.9931, (-74.1857)),
-('O''Fallon', 'MO', ARRAY[63366, 63368], 38.7850, (-90.7175)),
-('Alafaya', 'FL', ARRAY[32828, 32829], 28.5278, (-81.1865)),
-('Newton', 'MA', ARRAY[02467, 02466, 02461, 02462], 42.3316, (-71.2085)),
-('Muncie', 'IN', ARRAY[47305, 47303, 47304, 47302], 40.1989, (-85.3950)),
-('Citrus Heights', 'CA', ARRAY[95610, 95611], 38.6948, (-121.2880)),
-('State College', 'PA', ARRAY[16803, 16801, 16805], 40.7909, (-77.8568)),
-('Decatur', 'IL', ARRAY[62523, 62521, 62526, 62535], 39.8556, (-88.9337)),
-('Jackson', 'MI', ARRAY[49201, 49203, 49204], 42.2431, (-84.4037)),
-('Fort Myers', 'FL', ARRAY[33916, 33966, 33901, 33907], 26.6195, (-81.8303)),
-('Goodyear', 'AZ', ARRAY[85338, 85326, 85340, 85395], 33.2613, (-112.3622)),
-('Dalton', 'GA', ARRAY[30720, 30719, 30722], 34.7690, (-84.9712)),
-('Bryan', 'TX', ARRAY[77803, 77802, 77801, 77807], 30.6657, (-96.3668)),
-('Waukegan', 'IL', ARRAY[60085, 60048, 60079], 42.3697, (-87.8716)),
-('Hawthorne', 'CA', ARRAY[90251, 90261, 90310], 33.9146, (-118.3476)),
-('Anderson', 'IN', ARRAY[46011, 46012, 46013, 46014], 40.0891, (-85.6893)),
-('Redwood City', 'CA', ARRAY[94062, 94063, 94061, 94064], 37.5026, (-122.2252)),
-('Hoover', 'AL', ARRAY[35244, 35242, 35080, 35226], 33.3754, (-86.8064)),
-('Town ''n'' Country', 'FL', ARRAY[33634, 33635], 28.0108, (-82.5760)),
-('Lake Forest', 'CA', ARRAY[92679, 92630], 33.6606, (-117.6712)),
-('Napa', 'CA', ARRAY[94559, 94581], 38.2976, (-122.3011)),
-('Whittier', 'CA', ARRAY[90602, 90601, 90606, 90605], 33.9678, (-118.0188)),
-('Clifton', 'NJ', ARRAY[07013, 07012, 07011, 07015], 40.8631, (-74.1575)),
-('Largo', 'FL', ARRAY[33771, 33760, 33764, 33770], 27.9088, (-82.7711)),
-('Bloomington', 'MN', ARRAY[55420, 55431, 55437, 55438], 44.8306, (-93.3151)),
-('Johns Creek', 'GA', ARRAY[30097, 30005, 30098], 34.0333, (-84.2027)),
-('Newport Beach', 'CA', ARRAY[92663, 92660, 92661, 92625], 33.6151, (-117.8669)),
-('Mission', 'TX', ARRAY[78572], 26.2041, (-98.3251)),
-('Troy', 'MI', ARRAY[48083, 48085, 48084, 48007], 42.5818, (-83.1457)),
-('Madera', 'CA', ARRAY[93638, 93639], 36.9631, (-120.0782)),
-('Joplin', 'MO', ARRAY[64801, 64802], 37.0758, (-94.5018)),
-('Alhambra', 'CA', ARRAY[91801, 91802, 91804, 91896], 34.0840, (-118.1355)),
-('Franklin', 'TN', ARRAY[37064, 37067, 37065, 37068], 35.9216, (-86.8525)),
-('Melbourne', 'FL', ARRAY[32903, 32934, 32935, 32904], 28.1085, (-80.6627)),
-('Port Huron', 'MI', ARRAY[48061], 42.9822, (-82.4387)),
-('Springfield', 'OH', ARRAY[45506, 45505, 45504, 45501], 39.9297, (-83.7957)),
-('Mountain View', 'CA', ARRAY[94041, 94043, 94039, 94042], 37.4000, (-122.0796)),
-('Zephyrhills', 'FL', ARRAY[33540, 33541, 33539], 28.2408, (-82.1796)),
-('St. Augustine', 'FL', ARRAY[32080, 32095], 29.8977, (-81.3100)),
-('Flagstaff', 'AZ', ARRAY[86011, 86004, 86005], 35.1872, (-111.6195)),
-('Buena Park', 'CA', ARRAY[90620, 90622, 90624], 33.8572, (-118.0046)),
-('Pleasanton', 'CA', ARRAY[94588], 37.6663, (-121.8805)),
-('Westland', 'MI', ARRAY[48186], 42.3192, (-83.3805)),
-('Auburn', 'WA', ARRAY[98002, 98092, 98071], 47.3039, (-122.2108)),
-('Cranston', 'RI', ARRAY[02831, 02920, 02910, 02921], 41.7658, (-71.4857)),
-('Somerville', 'MA', ARRAY[02145, 02143], 42.3908, (-71.1013)),
-('Folsom', 'CA', ARRAY[95671, 95763], 38.6668, (-121.1422)),
-('Springdale', 'AR', ARRAY[72762, 72765, 72766, 72770], 36.1899, (-94.1574)),
-('Deerfield Beach', 'FL', ARRAY[33441, 33064, 33443], 26.3050, (-80.1277)),
-('Warwick', 'RI', ARRAY[02886, 02889, 02888, 02887], 41.7062, (-71.4334)),
-('Farmington Hills', 'MI', ARRAY[48335, 48334, 48331], 42.4860, (-83.3771)),
-('Newark', 'OH', ARRAY[43058, 43093], 40.0705, (-82.4251)),
-('Williamsburg', 'VA', ARRAY[23185, 23186], 37.2692, (-76.7076)),
-('Brooklyn Park', 'MN', ARRAY[55429, 55428, 55443, 55445], 45.1112, (-93.3505)),
-('Hattiesburg', 'MS', ARRAY[39402, 39406, 39403, 39404], 31.3074, (-89.3170)),
-('Alexandria', 'LA', ARRAY[71303, 71301, 71306, 71307], 31.2923, (-92.4702)),
-('Lawrence', 'MA', ARRAY[01840, 01841, 01842], 42.7003, (-71.1626)),
-('Florence', 'AL', ARRAY[35630, 35631, 35632], 34.8303, (-87.6654)),
-('Valdosta', 'GA', ARRAY[31602, 31601, 31605, 31604], 30.8502, (-83.2788)),
-('Plymouth', 'MN', ARRAY[55441, 55447, 55446], 45.0225, (-93.4618)),
-('Silver Spring', 'MD', ARRAY[20912, 20901, 20903, 20907], 39.0028, (-77.0207)),
-('Buckeye', 'AZ', ARRAY[85396], 33.4314, (-112.6429)),
-('Georgetown', 'TX', ARRAY[78626, 78628, 78627], 30.6668, (-97.6953)),
-('Cheyenne', 'WY', ARRAY[82007, 82001, 82002, 82006], 41.1351, (-104.7900)),
-('Kokomo', 'IN', ARRAY[46901, 46903, 46904, 46965], 40.4640, (-86.1277)),
-('Tustin', 'CA', ARRAY[92782, 92606, 92781], 33.7309, (-117.8106)),
-('Lakewood', 'CA', ARRAY[90712, 90713, 90711, 90714], 33.8471, (-118.1221)),
-('Perris', 'CA', ARRAY[92571, 92585, 92572], 33.7899, (-117.2233)),
-('St. Joseph', 'MO', ARRAY[64501, 64507, 64504, 64506], 39.7599, (-94.8210)),
-('Flower Mound', 'TX', ARRAY[75028, 76262, 75027], 33.0344, (-97.1146)),
-('Atascocita', 'TX', ARRAY[77396], 29.9777, (-95.1953)),
-('Loveland', 'CO', ARRAY[80537, 80539], 40.4166, (-105.0623)),
-('Boynton Beach', 'FL', ARRAY[33436, 33435, 33424, 33425], 26.5281, (-80.0811)),
-('New Rochelle', 'NY', ARRAY[10801, 10805, 10802], 40.9305, (-73.7836)),
-('Anderson', 'SC', ARRAY[29625, 29621], 34.5211, (-82.6479)),
-('Lebanon', 'PA', ARRAY[17042], 40.3412, (-76.4227)),
-('Parma', 'OH', ARRAY[44130, 44129], 41.3843, (-81.7286)),
-('Layton', 'UT', ARRAY[84040], 41.0769, (-111.9621)),
-('Texarkana', 'TX', ARRAY[75503, 75504, 75507, 75599], 33.4487, (-94.0815)),
-('Alameda', 'CA', ARRAY[94501], 37.7670, (-122.2672)),
-('The Villages', 'FL', ARRAY[32162, 32159, 32163], 28.9021, (-81.9888)),
-('Watsonville', 'CA', ARRAY[95019, 95077], 36.9206, (-121.7706)),
-('Baytown', 'TX', ARRAY[77521, 77522], 29.7586, (-94.9669)),
-('Upland', 'CA', ARRAY[91786, 91785], 34.1178, (-117.6603)),
-('Davis', 'CA', ARRAY[95616, 95617], 38.5552, (-121.7365)),
-('Camarillo', 'CA', ARRAY[93010, 93011], 34.2230, (-119.0322)),
-('Battle Creek', 'MI', ARRAY[49037, 49016, 49018], 42.2986, (-85.2296)),
-('Bellflower', 'CA', ARRAY[90707], 33.8880, (-118.1271)),
-('Jonesboro', 'AR', ARRAY[72404, 72401, 72402, 72403], 35.8212, (-90.6791)),
-('San Marcos', 'TX', ARRAY[78667], 29.8736, (-97.9381)),
-('San Ramon', 'CA', ARRAY[94583], 37.7625, (-121.9365)),
-('Lake Jackson', 'TX', ARRAY[77566], 29.0516, (-95.4522)),
-('Bethlehem', 'PA', ARRAY[18016, 18015, 18018, 18025], 40.6266, (-75.3679)),
-('Wyoming', 'MI', ARRAY[49548, 49418, 49519, 49518], 42.8909, (-85.7066)),
-('Pine Hills', 'FL', ARRAY[32818, 32710], 28.5818, (-81.4693)),
-('Oshkosh', 'WI', ARRAY[54904, 54901, 54902, 54903], 44.0228, (-88.5619)),
-('Hammond', 'IN', ARRAY[46323, 46320, 46327, 46324], 41.6169, (-87.4910)),
-('Missouri City', 'TX', ARRAY[77545, 77071, 77459], 29.5630, (-95.5365)),
-('Centreville', 'VA', ARRAY[20124, 20121, 20122], 38.8391, (-77.4388)),
-('Pasco', 'WA', ARRAY[99302], 46.2506, (-119.1304)),
-('Rancho Cordova', 'CA', ARRAY[95670, 95827, 95741], 38.5740, (-121.2523)),
-('Caguas', 'PR', ARRAY[00727, 00726], 18.2319, (-66.0388)),
-('Conway', 'AR', ARRAY[72035, 72034], 35.0754, (-92.4694)),
-('Gary', 'IN', ARRAY[46408, 46407, 46406, 46405], 41.5906, (-87.3472)),
-('Altoona', 'PA', ARRAY[16602, 16603, 16660], 40.5082, (-78.4007)),
-('Lodi', 'CA', ARRAY[95242, 94240, 95241], 38.1218, (-121.2932)),
-('Arlington Heights', 'IL', ARRAY[60004, 60006], 42.0955, (-87.9825)),
-('Kendall', 'FL', ARRAY[33176, 33156, 33183, 33116], 25.6697, (-80.3556)),
-('Waldorf', 'MD', ARRAY[20603, 20602, 20695, 20604], 38.6085, (-76.9195)),
-('Bolingbrook', 'IL', ARRAY[60440], 41.6903, (-88.1019)),
-('Rochester Hills', 'MI', ARRAY[48307, 48309], 42.6645, (-83.1563)),
-('Winchester', 'VA', ARRAY[22604], 39.1735, (-78.1746)),
-('Framingham', 'MA', ARRAY[01702, 01703, 01704, 01705], 42.3085, (-71.4368)),
-('Hilton Head Island', 'SC', ARRAY[29926, 29925, 29938], 32.1896, (-80.7499)),
-('Owensboro', 'KY', ARRAY[42301, 42302], 37.7574, (-87.1173)),
-('Jackson', 'TN', ARRAY[38301, 38302, 38303, 38308], 35.6535, (-88.8353)),
-('Cheektowaga', 'NY', ARRAY[14043, 14225, 14227, 14211], 42.9082, (-78.7496)),
-('Cleveland', 'TN', ARRAY[37311, 37320], 35.1817, (-84.8707)),
-('Wausau', 'WI', ARRAY[54403], 44.9620, (-89.6459)),
-('Camden', 'NJ', ARRAY[08105, 08102, 08103, 08101], 39.9362, (-75.1073)),
-('Anniston', 'AL', ARRAY[36206, 36207, 36205, 36202], 33.6712, (-85.8136)),
-('Evanston', 'IL', ARRAY[60201, 60204, 60208], 42.0463, (-87.6942)),
-('Apple Valley', 'CA', ARRAY[92307], 34.5328, (-117.2104)),
-('Mansfield', 'OH', ARRAY[44906, 44907, 44901, 44902], 40.7656, (-82.5275)),
-('Schaumburg', 'IL', ARRAY[60195, 60194, 60173, 60159], 42.0307, (-88.0838)),
-('Pocatello', 'ID', ARRAY[83201, 83209, 83205, 83206], 42.8724, (-112.4646)),
-('Woodbury', 'MN', ARRAY[55125], 44.9056, (-92.9230)),
-('Southfield', 'MI', ARRAY[48034, 48075, 48076, 48037], 42.4765, (-83.2605)),
-('Maple Grove', 'MN', ARRAY[55311], 45.1089, (-93.4626)),
-('New Britain', 'CT', ARRAY[06053, 06051, 06050], 41.6758, (-72.7862)),
-('Morgantown', 'WV', ARRAY[26505, 26506], 39.6380, (-79.9468)),
-('Hammond', 'LA', ARRAY[70403, 70401], 30.5061, (-90.4563)),
-('Dothan', 'AL', ARRAY[36301, 36305, 36321, 36302], 31.2335, (-85.4069)),
-('Harrisonburg', 'VA', ARRAY[22802, 22807, 22081], 38.4361, (-78.8735)),
-('Waukesha', 'WI', ARRAY[53188, 53189, 53187], 43.0087, (-88.2464)),
-('Ellicott City', 'MD', ARRAY[21043, 20140, 21041], 39.2773, (-76.8344)),
-('Pawtucket', 'RI', ARRAY[02860, 02862], 41.8744, (-71.3743)),
-('Redmond', 'WA', ARRAY[98073], 47.6762, (-122.1169)),
-('Lauderhill', 'FL', ARRAY[33313, 33311, 33319], 26.1605, (-80.2242)),
-('Sumter', 'SC', ARRAY[29152, 29153, 29150, 29151], 33.9392, (-80.3930)),
-('Redlands', 'CA', ARRAY[92374, 92346, 92403], 34.0511, (-117.1712)),
-('Daphne', 'AL', ARRAY[36526], 30.6286, (-87.8866)),
-('Mount Vernon', 'WA', ARRAY[98273], 48.4202, (-122.3115)),
-('Weston', 'FL', ARRAY[33327, 33331, 33332], 26.1006, (-80.4054)),
-('St. Charles', 'MO', ARRAY[63303], 38.7954, (-90.5157)),
-('Janesville', 'WI', ARRAY[53546, 53548, 53547], 42.6855, (-89.0136)),
-('Sherman', 'TX', ARRAY[75090], 33.6274, (-96.6218)),
-('North Richland Hills', 'TX', ARRAY[76182], 32.8605, (-97.2180)),
-('Broomfield', 'CO', ARRAY[80021, 80020, 80516, 80038], 39.9541, (-105.0527)),
-('El Paso de Robles', 'CA', ARRAY[93447], 35.6394, (-120.6560)),
-('Bristol', 'TN', ARRAY[37621, 37625], 36.5572, (-82.2154)),
-('Wilmington', 'DE', ARRAY[19802, 19801, 19806, 19805], 39.7415, (-75.5413)),
-('Walnut Creek', 'CA', ARRAY[94597, 94595, 94598, 94529], 37.9024, (-122.0398)),
-('Lynwood', 'CA', ARRAY[90267], 33.9240, (-118.2017)),
-('Glen Burnie', 'MD', ARRAY[21061, 21108], 39.1559, (-76.6072)),
-('Guaynabo', 'PR', ARRAY[00934, 00966, 00965, 00968], 18.3839, (-66.1134)),
-('Casas Adobes', 'AZ', ARRAY[85741, 85742], 32.3423, (-111.0114)),
-('Homestead', 'FL', ARRAY[33030, 33035, 33090, 33092], 25.4665, (-80.4472)),
-('West Bend', 'WI', ARRAY[53095], 43.4184, (-88.1824)),
-('Delray Beach', 'FL', ARRAY[33444, 33483, 33448, 33482], 26.4550, (-80.0905)),
-('Sheboygan', 'WI', ARRAY[53081, 53082], 43.7403, (-87.7316)),
-('Lake Elsinore', 'CA', ARRAY[92532, 92530, 92803], 33.6847, (-117.3344)),
-('Daytona Beach', 'FL', ARRAY[32174, 32117, 32114, 32118], 29.1994, (-81.0982)),
-('Lima', 'OH', ARRAY[45801, 45804, 45802], 40.7410, (-84.1121)),
-('Decatur', 'AL', ARRAY[35601, 35602, 35609, 35699], 34.5730, (-86.9906)),
-('Rocklin', 'CA', ARRAY[95765], 38.8075, (-121.2488)),
-('Rogers', 'AR', ARRAY[72756, 72718], 36.3172, (-94.1526)),
-('Castle Rock', 'CO', ARRAY[80108, 80109], 39.3763, (-104.8535)),
-('Hanover', 'PA', ARRAY[17332, 17333, 17334], 39.8117, (-76.9835)),
-('Bossier City', 'LA', ARRAY[71111, 71110, 71113, 71171], 32.5227, (-93.6666)),
-('Dubuque', 'IA', ARRAY[52003, 52001, 52004, 52099], 42.5008, (-90.7067)),
-('Rockville', 'MD', ARRAY[20850, 20851, 20847, 20848], 39.0834, (-77.1552)),
-('Victoria', 'TX', ARRAY[77904, 77905, 77903], 28.8285, (-96.9850)),
-('Gaithersburg', 'MD', ARRAY[20899, 20879, 20877], 39.1346, (-77.2132)),
-('Ames', 'IA', ARRAY[50012, 50011, 50010, 50013], 42.0259, (-93.6215)),
-('West Des Moines', 'IA', ARRAY[50266, 50263, 50061, 50398], 41.5522, (-93.7805)),
-('South San Francisco', 'CA', ARRAY[94128, 94083], 37.6536, (-122.4197)),
-('Yorba Linda', 'CA', ARRAY[92887, 92885], 33.8890, (-117.7714)),
-('Casper', 'WY', ARRAY[82601, 82609, 82605], 42.8420, (-106.3207)),
-('Palatine', 'IL', ARRAY[60067, 60038, 60055, 60078], 42.1181, (-88.0430)),
-('Corvallis', 'OR', ARRAY[97331, 97330, 97339], 44.5697, (-123.2780)),
-('Ankeny', 'IA', ARRAY[50021], 41.7285, (-93.6033)),
-('Mount Vernon', 'NY', ARRAY[10553, 10550, 10551], 40.9136, (-73.8291)),
-('Rowlett', 'TX', ARRAY[75088, 75030], 32.9157, (-96.5488)),
-('Alpharetta', 'GA', ARRAY[30004, 30005, 30009], 34.0704, (-84.2739)),
-('Poinciana', 'FL', ARRAY[34759], 28.1217, (-81.4820)),
-('Petaluma', 'CA', ARRAY[94952], 38.2423, (-122.6267)),
-('Redondo Beach', 'CA', ARRAY[90277], 33.8574, (-118.3766)),
-('Tamarac', 'FL', ARRAY[33319], 26.2056, (-80.2542)),
-('Eagan', 'MN', ARRAY[55122, 55123], 44.8169, (-93.1638)),
-('Kenner', 'LA', ARRAY[70062, 70063, 70064, 70097], 30.0109, (-90.2549)),
-('Bay City', 'MI', ARRAY[48708], 43.5903, (-83.8886)),
-('North Little Rock', 'AR', ARRAY[72116, 72114, 72118, 72117], 34.7808, (-92.2371)),
-('Sammamish', 'WA', ARRAY[98075, 98074], 47.6017, (-122.0416)),
-('Shawnee', 'KS', ARRAY[66216, 66217, 66218, 66227], 39.0158, (-94.8076)),
-('Jupiter', 'FL', ARRAY[33458, 33468], 26.9199, (-80.1128)),
-('Doral', 'FL', ARRAY[33172, 33122, 33166, 33191], 25.8151, (-80.3565)),
-('Carbondale', 'IL', ARRAY[62902, 62903], 37.7221, (-89.2238)),
-('Blaine', 'MN', ARRAY[55434, 55449], 45.1696, (-93.2077)),
-('Tulare', 'CA', ARRAY[93275], 36.1996, (-119.3400)),
-('Wellington', 'FL', ARRAY[33414, 33470], 26.6461, (-80.2699)),
-('Pflugerville', 'TX', ARRAY[78691], 30.4520, (-97.6022)),
-('Palo Alto', 'CA', ARRAY[95033, 94303, 94301, 94306], 37.3913, (-122.1468)),
-('Schenectady', 'NY', ARRAY[12304, 12307, 12308, 12301], 42.8025, (-73.9276)),
-('Great Falls', 'MT', ARRAY[59404, 59401, 59403], 47.5022, (-111.2995)),
-('Michigan City', 'IN', ARRAY[46361], 41.7099, (-86.8705)),
-('Eden Prairie', 'MN', ARRAY[55346, 55347], 44.8488, (-93.4595)),
-('Port Orange', 'FL', ARRAY[32129, 32128], 29.1084, (-81.0137)),
-('Dublin', 'CA', ARRAY[94551], 37.7161, (-121.8963)),
-('Carmichael', 'CA', ARRAY[95628, 95608, 95609], 38.6337, (-121.3230)),
-('Grand Forks', 'ND', ARRAY[58203, 58201, 58206, 58207], 47.9218, (-97.0886)),
-('Noblesville', 'IN', ARRAY[46062], 40.0354, (-86.0042)),
-('San Clemente', 'CA', ARRAY[92673, 92674], 33.4498, (-117.6103)),
-('East Orange', 'NJ', ARRAY[07017, 07019], 40.7651, (-74.2117)),
-('Florence-Graham', 'CA', ARRAY[90002, 90052], 33.9682, (-118.2447)),
-('Eastvale', 'CA', ARRAY[91752], 33.9617, (-117.5802)),
-('Chapel Hill', 'NC', ARRAY[27514, 27517, 27515, 27599], 35.9270, (-79.0391)),
-('Rocky Mount', 'NC', ARRAY[27803, 27801, 27802], 35.9676, (-77.8048)),
-('Haverhill', 'MA', ARRAY[01830, 01835, 01831], 42.7838, (-71.0871)),
-('Beloit', 'WI', ARRAY[53512], 42.5230, (-89.0184)),
-('Castro Valley', 'CA', ARRAY[94552, 94578], 37.7091, (-122.0631)),
-('Fairbanks', 'AK', ARRAY[99703, 99707, 99711], 64.8353, (-147.6534)),
-('Springfield', 'OR', ARRAY[97478, 97403, 97475], 44.0538, (-122.9810)),
-('Johnstown', 'PA', ARRAY[15905, 15902, 15901, 15907], 40.3258, (-78.9193)),
-('West Hartford', 'CT', ARRAY[06119, 06117, 06110, 06155], 41.7669, (-72.7536)),
-('Coon Rapids', 'MN', ARRAY[55448], 45.1755, (-93.3095)),
-('Elmira', 'NY', ARRAY[14905, 14904, 14902], 42.0938, (-76.8097)),
-('Mankato', 'MN', ARRAY[56002], 44.1712, (-93.9773)),
-('Albany', 'OR', ARRAY[97322], 44.6274, (-123.0966)),
-('North Miami', 'FL', ARRAY[33167, 33160, 33161, 33181], 25.9007, (-80.1686)),
-('Dundalk', 'MD', ARRAY[21224], 39.2703, (-76.4942)),
-('Encinitas', 'CA', ARRAY[92075, 92024, 92023], 33.0490, (-117.2613)),
-('Skokie', 'IL', ARRAY[60077, 60203], 42.0359, (-87.7400)),
-('Leander', 'TX', ARRAY[78646], 30.5728, (-97.8618)),
-('Mayagüez', 'PR', ARRAY[00680, 00681], 18.2003, (-67.1397)),
-('Parkersburg', 'WV', ARRAY[26101, 26102, 26103, 26106], 39.2624, (-81.5420)),
-('Waltham', 'MA', ARRAY[02451, 02453, 02454], 42.3889, (-71.2423)),
-('Bethesda', 'MD', ARRAY[20815, 20816, 20817, 20810], 38.9866, (-77.1188)),
-('San Luis Obispo', 'CA', ARRAY[93405], 35.2669, (-120.6691)),
-('Sebring', 'FL', ARRAY[33875], 27.4770, (-81.4530)),
-('Council Bluffs', 'IA', ARRAY[51501, 51502], 41.2369, (-95.8517)),
-('Hamilton', 'OH', ARRAY[45011, 45013, 45012], 39.3938, (-84.5653)),
-('Pico Rivera', 'CA', ARRAY[90661, 90662], 33.9902, (-118.0888)),
-('Palm Harbor', 'FL', ARRAY[34681, 34683, 34682], 28.0847, (-82.7481)),
-('Casa Grande', 'AZ', ARRAY[85193, 85122, 85130], 32.9068, (-111.7624)),
-('Rome', 'GA', ARRAY[30165, 30162], 34.2661, (-85.1862)),
-('Millcreek', 'UT', ARRAY[84124, 84109, 84106, 84107], 40.6892, (-111.8291)),
-('Sanford', 'FL', ARRAY[32771, 32772], 28.7893, (-81.2760)),
-('National City', 'CA', ARRAY[91951], 32.6654, (-117.0983)),
-('Burnsville', 'MN', ARRAY[55337], 44.7648, (-93.2795)),
-('Coconut Creek', 'FL', ARRAY[33063, 33066], 26.2803, (-80.1842)),
-('Port Charlotte', 'FL', ARRAY[33952, 33948, 33980, 33938], 26.9918, (-82.1140)),
-('Morristown', 'TN', ARRAY[37814, 37778, 37815, 37816], 36.2046, (-83.3006)),
-('Lakewood', 'WA', ARRAY[98498, 98496, 98497], 47.1628, (-122.5299)),
-('Gadsden', 'AL', ARRAY[35903, 35904], 34.0090, (-86.0156)),
-('Novi', 'MI', ARRAY[48375, 48374, 48167, 48376], 42.4786, (-83.4893)),
-('Marietta', 'GA', ARRAY[30062, 30064, 30067, 30008], 33.9533, (-84.5422)),
-('Hot Springs', 'AR', ARRAY[71913, 71902, 71903, 71914], 34.4892, (-93.0501)),
-('Woodland', 'CA', ARRAY[95695], 38.6712, (-121.7500)),
-('La Habra', 'CA', ARRAY[90632, 90633], 33.9278, (-117.9513)),
-('The Hammocks', 'FL', ARRAY[33186], 25.6700, (-80.4483)),
-('Commerce City', 'CO', ARRAY[80022], 39.8642, (-104.8434)),
-('Reston', 'VA', ARRAY[20191, 20190, 20101, 20102], 38.9497, (-77.3461)),
-('South Whittier', 'CA', ARRAY[90605], 33.9336, (-118.0311)),
-('Bristol', 'CT', ARRAY[06011], 41.6812, (-72.9407)),
-('Columbus', 'IN', ARRAY[47203, 47202], 39.2093, (-85.9183)),
-('West Allis', 'WI', ARRAY[53214, 53227], 43.0068, (-88.0296)),
-('Fountainebleau', 'FL', ARRAY[33174, 33126, 33144], 25.7723, (-80.3458)),
-('Taylorsville', 'UT', ARRAY[84123, 84118, 84129, 84184], 40.6570, (-111.9493)),
-('Bangor', 'ME', ARRAY[04402], 44.8322, (-68.7906)),
-('Monterey Park', 'CA', ARRAY[91754, 91756], 34.0497, (-118.1326)),
-('Greenwood', 'IN', ARRAY[46142, 46143], 39.6019, (-86.1073)),
-('Bartlett', 'TN', ARRAY[38133, 38134, 38135, 38029], 35.2337, (-89.8195)),
-('Bradenton', 'FL', ARRAY[34209, 34205, 33420, 34204], 27.4900, (-82.5739)),
-('Pontiac', 'MI', ARRAY[48340, 48341, 48343], 42.6493, (-83.2878)),
-('Staunton', 'VA', ARRAY[24402], 38.1593, (-79.0611)),
-('Meriden', 'CT', ARRAY[06450], 41.5367, (-72.7944)),
-('Gardena', 'CA', ARRAY[90249], 33.8944, (-118.3073)),
-('Apex', 'NC', ARRAY[27523, 27539], 35.7239, (-78.8728)),
-('Royal Oak', 'MI', ARRAY[48073, 48068], 42.5084, (-83.1539)),
-('Cupertino', 'CA', ARRAY[95015, 95108], 37.3168, (-122.0465)),
-('La Mesa', 'CA', ARRAY[91942, 91944], 32.7703, (-117.0204)),
-('Brookline', 'MA', ARRAY[02446, 02445, 02447], 42.3243, (-71.1408)),
-('Benton Harbor', 'MI', ARRAY[49023], 42.1159, (-86.4488)),
-('St. Clair Shores', 'MI', ARRAY[48080, 48082], 42.4921, (-82.8957)),
-('Des Plaines', 'IL', ARRAY[60016, 60011, 60017, 60019], 42.0345, (-87.9009)),
-('Lewiston', 'ME', ARRAY[04241, 04243], 44.0915, (-70.1681)),
-('Margate', 'FL', ARRAY[33068], 26.2466, (-80.2119)),
-('Midland', 'MI', ARRAY[48640, 48667, 48641, 48670], 43.6241, (-84.2319)),
-('Spring', 'TX', ARRAY[77383, 77391, 77393], 30.0613, (-95.3830)),
-('Carson City', 'NV', ARRAY[89703, 89702, 89705, 89706], 39.1512, (-119.7474)),
-('Bowie', 'MD', ARRAY[20721, 20716, 20715, 20717], 38.9569, (-76.7409)),
-('Caldwell', 'ID', ARRAY[83605], 43.6453, (-116.6591)),
-('San Rafael', 'CA', ARRAY[94903, 94915], 37.9905, (-122.5222)),
-('Kendale Lakes', 'FL', ARRAY[33183], 25.7081, (-80.4078)),
-('Towson', 'MD', ARRAY[21212, 21239, 21252, 21209], 39.3944, (-76.6190)),
-('Richland', 'WA', ARRAY[99354], 46.2824, (-119.2938)),
-('South Hill', 'WA', ARRAY[98374, 98373, 98343], 47.1203, (-122.2848)),
-('Hendersonville', 'TN', ARRAY[37077], 36.3063, (-86.5998)),
-('White Plains', 'NY', ARRAY[10601, 10604, 10605, 10606], 41.0220, (-73.7549)),
-('Huntersville', 'NC', ARRAY[28070], 35.4058, (-80.8727)),
-('Jefferson City', 'MO', ARRAY[65109, 65102, 65103, 65104], 38.5676, (-92.1759)),
-('Arcadia', 'CA', ARRAY[91006, 91066, 91077], 34.1342, (-118.0373)),
-('Titusville', 'FL', ARRAY[32780, 32781, 32783], 28.5727, (-80.8193)),
-('Cartersville', 'GA', ARRAY[30120], 34.1639, (-84.8007)),
-('Orland Park', 'IL', ARRAY[60462], 41.6074, (-87.8619)),
-('Weymouth Town', 'MA', ARRAY[02190, 02188, 02189], 42.1984, (-70.9466)),
-('Parker', 'CO', ARRAY[80134], 39.5084, (-104.7753)),
-('Palm Beach Gardens', 'FL', ARRAY[33410, 33412, 33403, 33318], 26.8466, (-80.1679)),
-('Bozeman', 'MT', ARRAY[59715, 59717, 59719], 45.6832, (-111.0552)),
-('Tamiami', 'FL', ARRAY[33182, 33184], 25.7556, (-80.4016)),
-('Taunton', 'MA', ARRAY[02767, 02718], 41.9036, (-71.0943)),
-('Midwest City', 'OK', ARRAY[73141, 73130], 35.4630, (-97.3709)),
-('Medford', 'MA', ARRAY[02153, 02156], 42.4234, (-71.1087)),
-('Goldsboro', 'NC', ARRAY[27530, 27531, 27532, 27533], 35.3778, (-77.9720)),
-('Euless', 'TX', ARRAY[76051, 76039, 75261], 32.8508, (-97.0799)),
-('Manhattan', 'KS', ARRAY[66502, 66503, 66505], 39.1886, (-96.6046)),
-('Shoreline', 'WA', ARRAY[98177, 98133, 98160], 47.7564, (-122.3426)),
-('Lake Havasu City', 'AZ', ARRAY[86406, 86404], 34.5006, (-114.3113)),
-('Smyrna', 'GA', ARRAY[30082, 30080], 33.8633, (-84.5168)),
-('Cape Girardeau', 'MO', ARRAY[63701], 37.3108, (-89.5597)),
-('Grants Pass', 'OR', ARRAY[97527], 42.4333, (-123.3317)),
-('Blue Springs', 'MO', ARRAY[64015, 64051], 39.0124, (-94.2721)),
-('Southaven', 'MS', ARRAY[38671, 38672], 34.9514, (-89.9787)),
-('Tinley Park', 'IL', ARRAY[60477], 41.5670, (-87.8050)),
-('Diamond Bar', 'CA', ARRAY[91765], 33.9991, (-117.8161)),
-('Pittsfield', 'MA', ARRAY[01202, 01203], 42.4517, (-73.2605)),
-('New Brunswick', 'NJ', ARRAY[08875, 08906, 08933], 40.4870, (-74.4450)),
-('Lenexa', 'KS', ARRAY[66215, 66216, 66217, 66219], 38.9609, (-94.8018)),
-('Brookhaven', 'GA', ARRAY[30319], 33.8744, (-84.3314)),
-('Novato', 'CA', ARRAY[94945, 94947, 94913, 94998], 38.0920, (-122.5576)),
-('Tigard', 'OR', ARRAY[97223, 97281], 45.4237, (-122.7845)),
-('Aloha', 'OR', ARRAY[97006, 97003, 97078, 97312], 45.4920, (-122.8726)),
-('Highland', 'CA', ARRAY[92410, 92346], 34.1113, (-117.1654)),
-('Fountain Valley', 'CA', ARRAY[92728], 33.7105, (-117.9514)),
-('Dearborn Heights', 'MI', ARRAY[48125], 42.3164, (-83.2769)),
-('Grapevine', 'TX', ARRAY[76099], 32.9343, (-97.0744)),
-('Fond du Lac', 'WI', ARRAY[54935, 54936], 43.7718, (-88.4396)),
-('Ithaca', 'NY', ARRAY[14850, 14851], 42.4442, (-76.5032)),
-('Chicopee', 'MA', ARRAY[01022, 01013, 01014, 01021], 42.1764, (-72.5719)),
-('Hempstead', 'NY', ARRAY[11551], 40.7043, (-73.6193)),
-('Wesley Chapel', 'FL', ARRAY[33545, 33559, 33544], 28.2106, (-82.3238)),
-('Oak Lawn', 'IL', ARRAY[60454], 41.7139, (-87.7528)),
-('Cathedral City', 'CA', ARRAY[92234], 33.8363, (-116.4642)),
-('Hacienda Heights', 'CA', ARRAY[91716], 33.9970, (-117.9728)),
-('Stonecrest', 'GA', ARRAY[30038, 30058, 30018], 33.6842, (-84.1372)),
-('Kettering', 'OH', ARRAY[45409, 45429, 45420, 45419], 39.6957, (-84.1495)),
-('Kingston', 'NY', ARRAY[12402], 41.9295, (-73.9968)),
-('West Haven', 'CT', ARRAY[06504], 41.2739, (-72.9672)),
-('St. Cloud', 'FL', ARRAY[34771, 34772, 34770], 28.2294, (-81.2829)),
-('Normal', 'IL', ARRAY[61790], 40.5218, (-88.9881)),
-('Minnetonka', 'MN', ARRAY[55345, 55343, 55391], 44.9322, (-93.4598)),
-('Rosemead', 'CA', ARRAY[91771, 91772], 34.0689, (-118.0823)),
-('Brunswick', 'GA', ARRAY[32523], 31.1450, (-81.4740)),
-('Williamsport', 'PA', ARRAY[17703, 17705], 41.2398, (-77.0371)),
-('Elyria', 'OH', ARRAY[44036], 41.3761, (-82.1063)),
-('Leesburg', 'VA', ARRAY[20175, 20178], 39.1058, (-77.5544)),
-('Mount Prospect', 'IL', ARRAY[60065], 42.0641, (-87.9375)),
-('Pinellas Park', 'FL', ARRAY[33782, 33762, 33760, 33773], 27.8589, (-82.7078)),
-('Bellevue', 'NE', ARRAY[68147, 68005, 68157], 41.1535, (-95.9357)),
-('West Sacramento', 'CA', ARRAY[95691, 95798, 95799, 95899], 38.5557, (-121.5504)),
-('Apopka', 'FL', ARRAY[32703, 32704, 32768], 28.7014, (-81.5304)),
-('Grand Island', 'NE', ARRAY[68801, 68802], 40.9214, (-98.3584)),
-('Palm Desert', 'CA', ARRAY[92211], 33.7378, (-116.3695)),
-('Milford city ', 'CT', ARRAY[06460], 41.2256, (-73.0625)),
-('Little Elm', 'TX', ARRAY[76227], 33.1856, (-96.9290)),
-('Peabody', 'MA', ARRAY[01961], 42.5335, (-70.9724)),
-('Wylie', 'TX', ARRAY[75173, 75407, 75166, 75086], 33.0362, (-96.5161)),
-('Beaufort', 'SC', ARRAY[29904, 29906], 32.4597, (-80.7235)),
-('DeSoto', 'TX', ARRAY[75123], 32.5992, (-96.8633)),
-('Helena', 'MT', ARRAY[59602, 59604, 59620, 59624], 46.5965, (-112.0202)),
-('Edina', 'MN', ARRAY[55436, 55435, 55439, 55410], 44.8914, (-93.3602)),
-('Aspen Hill', 'MD', ARRAY[20906, 20897], 39.0928, (-77.0823)),
-('Wheaton', 'IL', ARRAY[60189], 41.8561, (-88.1083)),
-('Lacey', 'WA', ARRAY[98516, 98509, 98561], 47.0460, (-122.7934)),
-('Summerville', 'SC', ARRAY[29483], 33.0015, (-80.1799)),
-('Oak Park', 'IL', ARRAY[60302, 60304, 60303], 41.8872, (-87.7899)),
-('Kentwood', 'MI', ARRAY[49512, 49546, 49508], 42.8852, (-85.5925)),
-('Sierra Vista', 'AZ', ARRAY[85635, 85613, 85670, 85671], 31.5630, (-110.3153)),
-('Levittown', 'PA', ARRAY[19055, 19056, 19057, 19058], 40.1537, (-74.8530)),
-('Madison', 'AL', ARRAY[35756], 34.7114, (-86.7626)),
-('Glendora', 'CA', ARRAY[91741], 34.1449, (-117.8468)),
-('Levittown', 'NY', ARRAY[11756, 11783], 40.7241, (-73.5125)),
-('Burien', 'WA', ARRAY[98148, 98168, 98166, 98062], 47.4762, (-122.3394)),
-('Perth Amboy', 'NJ', ARRAY[08862], 40.5203, (-74.2724)),
-('Farmington', 'NM', ARRAY[87402, 87415], 36.7555, (-108.1823)),
-('New Bern', 'NC', ARRAY[28562, 28561, 28563, 28564], 35.0955, (-77.0723)),
-('Placentia', 'CA', ARRAY[92811, 92871], 33.8807, (-117.8553)),
-('Collierville', 'TN', ARRAY[38017, 38027], 35.0471, (-89.6988)),
-('West Lafayette', 'IN', ARRAY[47907, 47996], 40.4432, (-86.9239)),
-('Florissant', 'MO', ARRAY[63031, 63032], 38.7996, (-90.3269)),
-('Hoffman Estates', 'IL', ARRAY[60192, 60195, 60169, 60120], 42.0639, (-88.1468)),
-('Queen Creek', 'AZ', ARRAY[85140], 33.2386, (-111.6343)),
-('Kannapolis', 'NC', ARRAY[28083, 28081, 28082], 35.4764, (-80.6403)),
-('Maricopa', 'AZ', ARRAY[85139], 33.0404, (-112.0006)),
-('Sahuarita', 'AZ', ARRAY[85614], 31.9323, (-110.9654)),
-('Rowland Heights', 'CA', ARRAY[91789], 33.9716, (-117.8911)),
-('Traverse City', 'MI', ARRAY[49684], 44.7547, (-85.6035)),
-('Wheaton', 'MD', ARRAY[20902], 39.0492, (-77.0572)),
-('East Hartford', 'CT', ARRAY[06118, 06128, 06138], 41.7634, (-72.6152)),
-('Irondequoit', 'NY', ARRAY[14621, 14622, 14617], 43.2096, (-77.5705)),
-('Catalina Foothills', 'AZ', ARRAY[85750, 85715, 85728], 32.3041, (-110.8835)),
-('Cookeville', 'TN', ARRAY[38506, 38505, 38502, 38503], 36.1484, (-85.5114)),
-('Mishawaka', 'IN', ARRAY[46545, 46546], 41.6736, (-86.1669)),
-('Plainfield', 'NJ', ARRAY[07063, 07060, 07061], 40.6154, (-74.4157)),
-('Bullhead City', 'AZ', ARRAY[86429, 86439], 35.1205, (-114.5460)),
-('Ashburn', 'VA', ARRAY[20166, 20103, 20149], 39.0300, (-77.4711)),
-('North Bethesda', 'MD', ARRAY[20814, 20817, 20852, 20857], 39.0393, (-77.1191)),
-('Severn', 'MD', ARRAY[21077, 21076], 39.1355, (-76.6958)),
-('Azusa', 'CA', ARRAY[91010], 34.1386, (-117.9124)),
-('Morehead City', 'NC', ARRAY[28516], 34.7308, (-76.7387)),
-('Coral Gables', 'FL', ARRAY[33143, 33134, 33158, 33156], 25.7037, (-80.2715)),
-('Oroville', 'CA', ARRAY[95966], 39.4999, (-121.5634)),
-('Wilson', 'NC', ARRAY[27896, 27894], 35.7312, (-77.9284)),
-('Lawrence', 'IN', ARRAY[46235, 46236, 46226, 46249], 39.8674, (-85.9905)),
-('Portage', 'MI', ARRAY[49024, 49081], 42.2000, (-85.5906)),
-('Minot', 'ND', ARRAY[58703, 58702, 58701], 48.2375, (-101.2781)),
-('Dunwoody', 'GA', ARRAY[30346, 30360, 31146], 33.9418, (-84.3122)),
-('Poway', 'CA', ARRAY[92074], 32.9871, (-117.0201)),
-('San Jacinto', 'CA', ARRAY[92582, 92581], 33.7970, (-116.9916)),
-('Troy', 'NY', ARRAY[12180, 12181], 42.7354, (-73.6751)),
-('Florin', 'CA', ARRAY[95823], 38.4832, (-121.4042)),
-('Cuyahoga Falls', 'OH', ARRAY[44223, 44264, 44313, 44222], 41.1641, (-81.5207)),
-('Downers Grove', 'IL', ARRAY[60516], 41.7949, (-88.0170)),
-('Bedford', 'TX', ARRAY[76021, 75064, 76095], 32.8464, (-97.1350)),
-('Dublin', 'OH', ARRAY[43017, 43016], 40.1112, (-83.1454)),
-('Marana', 'AZ', ARRAY[85741, 85743, 85742, 85658], 32.4355, (-111.1558)),
-('Stillwater', 'OK', ARRAY[74075, 74074, 74077], 36.1316, (-97.0740)),
-('Hollister', 'CA', ARRAY[95024], 36.8563, (-121.3981)),
-('North Highlands', 'CA', ARRAY[95841], 38.6713, (-121.3721)),
-('Murray', 'UT', ARRAY[84121, 84107, 84122, 84157], 40.6498, (-111.8874)),
-('Roswell', 'NM', ARRAY[88201], 33.3730, (-104.5294)),
-('Pascagoula', 'MS', ARRAY[39567, 39568, 39569, 39595], 30.3665, (-88.5507)),
-('Ceres', 'CA', ARRAY[95351, 95307], 37.5953, (-120.9625)),
-('St. Louis Park', 'MN', ARRAY[55416], 44.9488, (-93.3649)),
-('Palm Springs', 'CA', ARRAY[92264, 92258], 33.8017, (-116.5382)),
-('Paducah', 'KY', ARRAY[42001, 42002], 37.0711, (-88.6436)),
-('Findlay', 'OH', ARRAY[45839], 41.0467, (-83.6379)),
-('Kyle', 'TX', ARRAY[78640], 29.9937, (-97.8859)),
-('Monroe', 'MI', ARRAY[48161], 41.9154, (-83.3850)),
-('Tuckahoe', 'VA', ARRAY[23229, 23226], 37.5878, (-77.5858)),
-('Bel Air South', 'MD', ARRAY[21015, 21014], 39.5051, (-76.3197)),
-('Ocoee', 'FL', ARRAY[34734], 28.5787, (-81.5338)),
-('Burleson', 'TX', ARRAY[76058, 76097], 32.5170, (-97.3343)),
-('La Mirada', 'CA', ARRAY[90637, 90639], 33.9025, (-118.0093)),
-('Farmers Branch', 'TX', ARRAY[75244], 32.9272, (-96.8804)),
-('East Lansing', 'MI', ARRAY[48823, 48824, 48826], 42.7480, (-84.4835)),
-('Jeffersonville', 'IN', ARRAY[47131, 47132, 47134, 47144], 38.3376, (-85.7026)),
-('Wauwatosa', 'WI', ARRAY[53225, 53226, 53222], 43.0615, (-88.0347)),
-('Littleton', 'CO', ARRAY[80122, 80123, 80120, 80160], 39.5915, (-105.0188)),
-('Cumberland', 'MD', ARRAY[21503, 21505], 39.6515, (-78.7585)),
-('Cedar Hill', 'TX', ARRAY[75106], 32.5810, (-96.9591)),
-('Carrollton', 'GA', ARRAY[30116, 30117, 30112, 30119], 33.5817, (-85.0837)),
-('Enid', 'OK', ARRAY[73703, 73705, 73702, 73706], 36.4061, (-97.8701)),
-('Rancho Santa Margarita', 'CA', ARRAY[92688], 33.6318, (-117.5989)),
-('East Honolulu', 'HI', ARRAY[96825], 21.2975, (-157.7211)),
-('Beavercreek', 'OH', ARRAY[45434, 45432, 45431, 45430], 39.7310, (-84.0624)),
-('Niagara Falls', 'NY', ARRAY[14302, 14301, 14305, 14304], 43.0921, (-79.0147)),
-('East Providence', 'RI', ARRAY[02914, 02916], 41.8065, (-71.3565)),
-('Chesterfield', 'MO', ARRAY[63005], 38.6588, (-90.5804)),
-('Covina', 'CA', ARRAY[91722, 91723], 34.0903, (-117.8817)),
-('Bothell', 'WA', ARRAY[98011, 98041], 47.7735, (-122.2044)),
-('Glenview', 'IL', ARRAY[60026, 60082], 42.0825, (-87.8216)),
-('Keller', 'TX', ARRAY[76262], 32.9337, (-97.2255)),
-('McLean', 'VA', ARRAY[22043, 22101, 22102, 22067], 38.9436, (-77.1943)),
-('Danville', 'IL', ARRAY[61832], 40.1423, (-87.6114)),
-('Spring Hill', 'TN', ARRAY[37179], 35.7438, (-86.9116)),
-('Euclid', 'OH', ARRAY[44119, 44117, 44123], 41.5904, (-81.5188)),
-('Kingman', 'AZ', ARRAY[86401, 86402], 35.2170, (-114.0105)),
-('Galveston', 'TX', ARRAY[77550, 77554, 77552, 77553], 29.2487, (-94.8910)),
-('University', 'FL', ARRAY[33549, 33612, 33559], 28.0771, (-82.4335)),
-('Weatherford', 'TX', ARRAY[76087], 32.7536, (-97.7723)),
-('Middletown', 'CT', ARRAY[06459], 41.5476, (-72.6549)),
-('Roseburg', 'OR', ARRAY[97471], 43.2232, (-123.3518)),
-('Biloxi', 'MS', ARRAY[39530, 39532, 39534, 39533], 30.4422, (-88.9512)),
-('Leavenworth', 'KS', ARRAY[66048], 39.3239, (-94.9240)),
-('Pearl City', 'HI', ARRAY[96782], 21.4031, (-157.9566)),
-('Fort Pierce', 'FL', ARRAY[34947, 34982, 34981, 34950], 27.4256, (-80.3431)),
-('Winter Garden', 'FL', ARRAY[34777], 28.5421, (-81.5966)),
-('Oro Valley', 'AZ', ARRAY[85704, 85737], 32.4208, (-110.9768)),
-('Danville', 'VA', ARRAY[24541, 24543], 36.5831, (-79.4087)),
-('Rockwall', 'TX', ARRAY[75087, 75189], 32.9169, (-96.4377)),
-('Potomac', 'MD', ARRAY[20854, 20859], 39.0141, (-77.1943)),
-('El Dorado Hills', 'CA', ARRAY[95762, 95682], 38.6750, (-121.0490)),
-('Tupelo', 'MS', ARRAY[38801, 38826], 34.2692, (-88.7318)),
-('Pine Bluff', 'AR', ARRAY[71601, 71603], 34.2116, (-92.0178)),
-('Oakland Park', 'FL', ARRAY[33309, 33334, 33311], 26.1780, (-80.1528)),
-('Marion', 'OH', ARRAY[43301], 40.5933, (-83.1237)),
-('Arlington', 'MA', ARRAY[02474, 02475], 42.4187, (-71.1640)),
-('Altadena', 'CA', ARRAY[91001, 91003], 34.1928, (-118.1345)),
-('Lufkin', 'TX', ARRAY[75901, 75902], 31.3217, (-94.7277)),
-('Trujillo Alto', 'PR', ARRAY[00926, 00977, 00978], 18.3601, (-66.0103)),
-('Strongsville', 'OH', ARRAY[44149], 41.3128, (-81.8313)),
-('Danville', 'CA', ARRAY[94526], 37.8121, (-121.9698)),
-('Quincy', 'IL', ARRAY[62305, 62306], 39.9335, (-91.3799)),
-('Riverton', 'UT', ARRAY[84065], 40.5177, (-111.9635)),
-('The Colony', 'TX', ARRAY[75056], 33.0925, (-96.8977)),
-('Urbandale', 'IA', ARRAY[50323, 50322], 41.6390, (-93.7813)),
-('Plainfield', 'IL', ARRAY[60586, 60585], 41.6206, (-88.2252)),
-('Lombard', 'IL', ARRAY[60128], 41.8742, (-88.0157)),
-('Prescott', 'AZ', ARRAY[86301, 86303, 86313, 86304], 34.5850, (-112.4475)),
-('Eureka', 'CA', ARRAY[95501, 95521, 95502, 95534], 40.7942, (-124.1568)),
-('Hackensack', 'NJ', ARRAY[07602], 40.8890, (-74.0461)),
-('Sayreville', 'NJ', ARRAY[08879, 08859, 08871], 40.4656, (-74.3237)),
-('Altamonte Springs', 'FL', ARRAY[32701, 32715, 32716], 28.6615, (-81.3953)),
-('Del Rio', 'TX', ARRAY[78841, 78842, 78847], 29.3708, (-100.8800)),
-('Cleveland Heights', 'OH', ARRAY[44118, 44112, 44106], 41.5112, (-81.5636)),
-('Bountiful', 'UT', ARRAY[84011], 40.8722, (-111.8647)),
-('Desert Hot Springs', 'CA', ARRAY[92240, 92258], 33.9551, (-116.5430)),
-('Peachtree Corners', 'GA', ARRAY[30092, 30360], 33.9670, (-84.2319)),
-('Haltom City', 'TX', ARRAY[76148, 76117, 76136], 32.8176, (-97.2707)),
-('Ormond Beach', 'FL', ARRAY[32176, 32173, 32175], 29.2960, (-81.1003)),
-('Annandale', 'VA', ARRAY[22042], 38.8324, (-77.1960)),
-('Cutler Bay', 'FL', ARRAY[33157, 33189], 25.5765, (-80.3356)),
-('Moorhead', 'MN', ARRAY[56562, 56563], 46.8673, (-96.7461)),
-('Westfield', 'IN', ARRAY[46074], 40.0333, (-86.1532)),
-('Concord', 'NH', ARRAY[03301, 03302, 03305], 43.2305, (-71.5595)),
-('Rohnert Park', 'CA', ARRAY[94926, 94927], 38.3480, (-122.6964)),
-('Brea', 'CA', ARRAY[92823, 92822], 33.9254, (-117.8656)),
-('Klamath Falls', 'OR', ARRAY[97601], 42.2191, (-121.7754)),
-('Salem', 'MA', ARRAY[01971], 42.5129, (-70.9020)),
-('Whitney', 'NV', ARRAY[89112], 36.1005, (-115.0380)),
-('North Miami Beach', 'FL', ARRAY[33162], 25.9302, (-80.1660)),
-('Stevens Point', 'WI', ARRAY[54482, 54492], 44.5241, (-89.5508)),
-('Brentwood', 'TN', ARRAY[37024], 35.9918, (-86.7758)),
-('Burke', 'VA', ARRAY[22153, 22152, 22009], 38.7773, (-77.2633)),
-('Hicksville', 'NY', ARRAY[11802, 11815], 40.7637, (-73.5245)),
-('Edmonds', 'WA', ARRAY[98020], 47.8115, (-122.3533)),
-('Apache Junction', 'AZ', ARRAY[85120, 85117, 85178], 33.3985, (-111.5351)),
-('Fairfield', 'OH', ARRAY[45018], 39.3301, (-84.5409)),
-('Hutchinson', 'KS', ARRAY[67501, 67504], 38.0671, (-97.9081)),
-('Greenwood', 'SC', ARRAY[29646, 29647, 29648], 34.1945, (-82.1542)),
-('Richmond', 'IN', ARRAY[47375], 39.8318, (-84.8905)),
-('Puyallup', 'WA', ARRAY[98371, 98374, 98373], 47.1794, (-122.2902)),
-('Urbana', 'IL', ARRAY[61802, 61803], 40.1106, (-88.1972)),
-('Beverly', 'MA', ARRAY[01965], 42.5681, (-70.8627)),
-('Statesboro', 'GA', ARRAY[30461, 30458, 30459], 32.4376, (-81.7750)),
-('Hobbs', 'NM', ARRAY[88244], 32.7282, (-103.1600)),
-('Schertz', 'TX', ARRAY[78154], 29.5649, (-98.2537)),
-('Bell Gardens', 'CA', ARRAY[90202], 33.9663, (-118.1550)),
-('Channelview', 'TX', ARRAY[77049], 29.7914, (-95.1145)),
-('Oviedo', 'FL', ARRAY[32766, 32762], 28.6580, (-81.1872)),
-('Odenton', 'MD', ARRAY[21113], 39.0661, (-76.6939)),
-('Campbell', 'CA', ARRAY[95009, 95011], 37.2802, (-121.9538)),
-('Wentzville', 'MO', ARRAY[63346], 38.8152, (-90.8667)),
-('La Quinta', 'CA', ARRAY[92235, 92247, 92248], 33.6536, (-116.2785)),
-('North Fort Myers', 'FL', ARRAY[33903], 26.7243, (-81.8491)),
-('Zanesville', 'OH', ARRAY[43702], 39.9565, (-82.0132)),
-('Newnan', 'GA', ARRAY[30265, 30271], 33.3766, (-84.7761)),
-('Brighton', 'CO', ARRAY[80601], 39.9716, (-104.7964)),
-('Catonsville', 'MD', ARRAY[21228], 39.2646, (-76.7424)),
-('Moline', 'IL', ARRAY[61266], 41.4821, (-90.4921)),
-('Westfield', 'MA', ARRAY[01085], 42.1382, (-72.7561)),
-('Greenacres', 'FL', ARRAY[33415, 33463], 26.6272, (-80.1371)),
-('Westerville', 'OH', ARRAY[43082, 43086], 40.1241, (-82.9209)),
-('Linton Hall', 'VA', ARRAY[20155], 38.7551, (-77.5750)),
-('Manassas', 'VA', ARRAY[20108, 20113], 38.7479, (-77.4839)),
-('Kearny', 'NJ', ARRAY[07099], 40.7528, (-74.1202)),
-('South Valley', 'NM', ARRAY[87190], 35.0092, (-106.6819)),
-('Richmond', 'KY', ARRAY[40476], 37.7306, (-84.2926)),
-('Belleville', 'IL', ARRAY[62220, 62226, 62223, 62222], 38.5165, (-89.9900)),
-('Maplewood', 'MN', ARRAY[55119, 55109], 44.9842, (-93.0247)),
-('Wilkes-Barre', 'PA', ARRAY[18701, 18705, 18703, 18710], 41.2468, (-75.8759)),
-('Columbia', 'TN', ARRAY[38402], 35.6235, (-87.0486)),
-('Marion', 'IN', ARRAY[46952], 40.5496, (-85.6600)),
-('Cedar Falls', 'IA', ARRAY[50614], 42.5195, (-92.4534)),
-('Jamestown', 'NY', ARRAY[14702], 42.0975, (-79.2366)),
-('Huntsville', 'TX', ARRAY[77342, 77320, 77341, 77343], 30.7050, (-95.5544)),
-('Mableton', 'GA', ARRAY[30168], 33.8132, (-84.5656)),
-('Clarksburg', 'WV', ARRAY[26330, 26302, 26306], 39.2863, (-80.3230)),
-('Covington', 'KY', ARRAY[41015, 41014, 41017, 41016], 39.0334, (-84.5166)),
-('Friendswood', 'TX', ARRAY[77549], 29.5111, (-95.1979)),
-('Indian Trail', 'NC', ARRAY[28110, 28079], 35.0698, (-80.6457)),
-('Woburn', 'MA', ARRAY[01815, 01888], 42.4869, (-71.1543)),
-('Holyoke', 'MA', ARRAY[01041], 42.2125, (-72.6411)),
-('Arecibo', 'PR', ARRAY[00613, 00614], 18.4491, (-66.7387)),
-('Cedar City', 'UT', ARRAY[84721], 37.6834, (-113.0956)),
-('Coram', 'NY', ARRAY[11784, 11738, 11776], 40.8813, (-73.0059)),
-('San Gabriel', 'CA', ARRAY[91776, 91778], 34.0948, (-118.0990)),
-('Hallandale Beach', 'FL', ARRAY[33008], 25.9854, (-80.1423)),
-('Crystal Lake', 'IL', ARRAY[60012, 60039], 42.2333, (-88.3351)),
-('Lake Oswego', 'OR', ARRAY[97035, 97036], 45.4130, (-122.7003)),
-('Muskogee', 'OK', ARRAY[74401, 74402], 35.7431, (-95.3568)),
-('Romeoville', 'IL', ARRAY[60446], 41.6318, (-88.0996)),
-('Plant City', 'FL', ARRAY[33563, 33565, 33564], 28.0140, (-82.1201)),
-('Keizer', 'OR', ARRAY[97307], 45.0029, (-123.0241)),
-('New Berlin', 'WI', ARRAY[53151], 42.9726, (-88.1291)),
-('Chelsea', 'MA', ARRAY[02204], 42.3959, (-71.0325)),
-('The Acreage', 'FL', ARRAY[33412, 33470], 26.7741, (-80.2779)),
-('La Puente', 'CA', ARRAY[91744, 91747, 91749], 34.0323, (-117.9533)),
-('Milton', 'GA', ARRAY[30009], 34.1353, (-84.3138)),
-('Issaquah', 'WA', ARRAY[98027], 47.5440, (-122.0471)),
-('Kendall West', 'FL', ARRAY[33185], 25.7065, (-80.4388)),
-('Sun City', 'AZ', ARRAY[85373, 85372], 33.6165, (-112.2819)),
-('Bartlesville', 'OK', ARRAY[74003, 74004], 36.7357, (-95.9453)),
-('Lancaster', 'TX', ARRAY[75134], 32.5922, (-96.7737)),
-('Germantown', 'TN', ARRAY[38139, 38183], 35.0829, (-89.7825)),
-('Annapolis', 'MD', ARRAY[21403, 21404, 21411], 38.9706, (-76.5047)),
-('Carol Stream', 'IL', ARRAY[60116, 60197, 60199], 41.9182, (-88.1308)),
-('Asheboro', 'NC', ARRAY[27203, 27204], 35.7158, (-79.8129)),
-('Culver City', 'CA', ARRAY[90230, 90060, 90231, 90233], 34.0058, (-118.3968)),
-('Lynnwood', 'WA', ARRAY[98036, 98046], 47.8284, (-122.3033)),
-('Mooresville', 'NC', ARRAY[28115], 35.5849, (-80.8265)),
-('Brookfield', 'WI', ARRAY[53045, 53008], 43.0640, (-88.1231)),
-('Crestview', 'FL', ARRAY[32536], 30.7480, (-86.5784)),
-('Woodlawn', 'MD', ARRAY[21207, 21228, 21235, 21241], 39.3054, (-76.7489)),
-('New Castle', 'PA', ARRAY[16101, 16105, 16103, 16107], 40.9956, (-80.3459)),
-('Enterprise', 'AL', ARRAY[36331], 31.3276, (-85.8459)),
-('Frankfort', 'KY', ARRAY[40601, 40602, 40603, 40618], 38.1924, (-84.8643)),
-('Northglenn', 'CO', ARRAY[80233, 80234, 80603], 39.9108, (-104.9783)),
-('Warren', 'OH', ARRAY[44485, 44484, 44482, 44486], 41.2390, (-80.8174)),
-('Duncanville', 'TX', ARRAY[75137, 75138], 32.6460, (-96.9127)),
-('Hurst', 'TX', ARRAY[76053], 32.8353, (-97.1808)),
-('Clermont', 'FL', ARRAY[34712, 34713], 28.5402, (-81.7259)),
-('Severna Park', 'MD', ARRAY[21108, 21123], 39.0870, (-76.5687)),
-('Lake Worth', 'FL', ARRAY[33460, 33464, 33465, 33466], 26.6196, (-80.0591)),
-('Lebanon', 'TN', ARRAY[37087, 37088], 36.2040, (-86.3481)),
-('Eagle Mountain', 'UT', ARRAY[84005], 40.3137, (-112.0114)),
-('Reynoldsburg', 'OH', ARRAY[43069], 39.9587, (-82.7944)),
-('Oxford', 'MS', ARRAY[38677], 34.3627, (-89.5336)),
-('Rosenberg', 'TX', ARRAY[77469], 29.5460, (-95.8220)),
-('Valrico', 'FL', ARRAY[33596, 33587, 33601], 27.9193, (-82.2293)),
-('Security-Widefield', 'CO', ARRAY[80925], 38.7489, (-104.7142)),
-('Menomonee Falls', 'WI', ARRAY[53052], 43.1487, (-88.1227)),
-('Granbury', 'TX', ARRAY[76049], 32.4484, (-97.7685)),
-('Waxahachie', 'TX', ARRAY[75167], 32.4032, (-96.8444)),
-('Richmond West', 'FL', ARRAY[33187], 25.6105, (-80.4297)),
-('South Miami Heights', 'FL', ARRAY[33157], 25.5886, (-80.3862)),
-('Holly Springs', 'NC', ARRAY[27540], 35.6530, (-78.8397)),
-('Butler', 'PA', ARRAY[16003], 40.8616, (-79.8962)),
-('Albertville', 'AL', ARRAY[35950], 34.2634, (-86.2107)),
-('London', 'KY', ARRAY[40741, 40742, 40745], 37.1175, (-84.0767)),
-('Cottage Grove', 'MN', ARRAY[55033], 44.8161, (-92.9274)),
-('Mechanicsville', 'VA', ARRAY[23111], 37.6262, (-77.3561)),
-('Cleburne', 'TX', ARRAY[76031, 76033], 32.3570, (-97.4152)),
-('Valley Stream', 'NY', ARRAY[11581, 11582], 40.6647, (-73.7044)),
-('Winter Springs', 'FL', ARRAY[32719], 28.6889, (-81.2704)),
-('Greenfield', 'WI', ARRAY[53220, 53228], 42.9619, (-88.0051)),
-('Braintree Town', 'MA', ARRAY[02185], 42.2039, (-71.0022)),
-('Parkland', 'WA', ARRAY[98445, 98447], 47.1417, (-122.4376)),
-('Oakton', 'VA', ARRAY[22124, 22181, 22185], 38.8887, (-77.3016)),
-('Rock Island', 'IL', ARRAY[61204], 41.4699, (-90.5827)),
-('Mount Juliet', 'TN', ARRAY[37121], 36.1991, (-86.5114)),
-('Land O'' Lakes', 'FL', ARRAY[34638, 33559, 34639], 28.2075, (-82.4476)),
-('Aventura', 'FL', ARRAY[33180], 25.9565, (-80.1372)),
-('Park Ridge', 'IL', ARRAY[60668], 42.0125, (-87.8436)),
-('Commack', 'NY', ARRAY[11731], 40.8443, (-73.2834)),
-('Foley', 'AL', ARRAY[36530], 30.3983, (-87.6649)),
-('New Albany', 'IN', ARRAY[47151], 38.3089, (-85.8234)),
-('Benton', 'AR', ARRAY[72015, 72158], 34.5775, (-92.5712)),
-('Merritt Island', 'FL', ARRAY[32953], 28.3146, (-80.6713)),
-('Meridian', 'MS', ARRAY[39305, 39301, 39302, 39304], 32.3846, (-88.6896)),
-('Bettendorf', 'IA', ARRAY[52722], 41.5656, (-90.4764)),
-('Dunedin', 'FL', ARRAY[34697], 28.0329, (-82.7863)),
-('Phenix City', 'AL', ARRAY[36867, 36868], 32.4588, (-85.0251)),
-('West Hollywood', 'CA', ARRAY[90046, 90048], 34.0882, (-118.3718)),
-('Brighton', 'NY', ARRAY[14620, 14623, 14618, 14610], 43.1175, (-77.5835)),
-('Tucker', 'GA', ARRAY[30084, 30083, 30063, 30085], 33.8436, (-84.2021)),
-('Moorpark', 'CA', ARRAY[93020], 34.2855, (-118.8770)),
-('Monrovia', 'CA', ARRAY[91017, 91185], 34.1650, (-117.9921)),
-('Peachtree City', 'GA', ARRAY[30270, 31169], 33.3943, (-84.5712)),
-('Lauderdale Lakes', 'FL', ARRAY[33313, 33311, 33319], 26.1682, (-80.2017)),
-('Pahrump', 'NV', ARRAY[89060, 89061, 89041], 36.2411, (-116.0176)),
-('University', 'FL', ARRAY[32817, 32816], 28.5900, (-81.1990)),
-('Shawnee', 'OK', ARRAY[74801], 35.3529, (-96.9650)),
-('Gillette', 'WY', ARRAY[82716, 82717], 44.2752, (-105.4983)),
-('Prattville', 'AL', ARRAY[36067, 36068], 32.4605, (-86.4588)),
-('Watertown Town', 'MA', ARRAY[02471], 42.3700, (-71.1774)),
-('San Juan Capistrano', 'CA', ARRAY[92615], 33.5009, (-117.6544)),
-('Cooper City', 'FL', ARRAY[33026, 33330, 33328], 26.0463, (-80.2862)),
-('Chillum', 'MD', ARRAY[20782, 20712], 38.9667, (-76.9790)),
-('LaGrange', 'GA', ARRAY[30241], 33.0274, (-85.0384)),
-('La Vergne', 'TN', ARRAY[37089], 36.0203, (-86.5582)),
-('Mount Pleasant', 'MI', ARRAY[48804, 48859], 43.5966, (-84.7759)),
-('Inver Grove Heights', 'MN', ARRAY[55076], 44.8247, (-93.0596)),
-('Monroe', 'NC', ARRAY[28112, 28111], 35.0061, (-80.5595)),
-('Bell', 'CA', ARRAY[90096], 33.9801, (-118.1798)),
-('Sanford', 'NC', ARRAY[27332, 27259, 27331], 35.4874, (-79.1772)),
-('Riviera Beach', 'FL', ARRAY[33404], 26.7812, (-80.0742)),
-('Wildwood', 'MO', ARRAY[63021, 63011, 63040, 63038], 38.5799, (-90.6699)),
-('Upper Arlington', 'OH', ARRAY[43221, 43212], 40.0272, (-83.0704)),
-('Plainfield', 'IN', ARRAY[46231], 39.6953, (-86.3717)),
-('Olney', 'MD', ARRAY[20832, 20833, 20853, 20830], 39.1465, (-77.0715)),
-('Carrollwood', 'FL', ARRAY[33618, 33688], 28.0577, (-82.5149)),
-('La Porte', 'TX', ARRAY[77572], 29.6689, (-95.0484)),
-('Englewood', 'CO', ARRAY[80110, 80150, 80151], 39.6468, (-104.9942)),
-('Randallstown', 'MD', ARRAY[21133], 39.3723, (-76.8024)),
-('East Point', 'GA', ARRAY[30349, 30364], 33.6696, (-84.4701)),
-('DeLand', 'FL', ARRAY[32720, 32723], 29.0224, (-81.2873)),
-('Golden Glades', 'FL', ARRAY[33161, 33162, 33169, 33163], 25.9129, (-80.2013)),
-('Merrillville', 'IN', ARRAY[46307, 46411], 41.4728, (-87.3197)),
-('Leawood', 'KS', ARRAY[66224, 66209, 66206], 38.9076, (-94.6258)),
-('Oildale', 'CA', ARRAY[93388], 35.4249, (-119.0279)),
-('Menlo Park', 'CA', ARRAY[94026], 37.4686, (-122.1672)),
-('Sun Prairie', 'WI', ARRAY[53596], 43.1827, (-89.2358)),
-('New City', 'NY', ARRAY[10954, 10920], 41.1543, (-73.9909)),
-('Lockport', 'NY', ARRAY[14095], 43.1698, (-78.6956)),
-('Boardman', 'OH', ARRAY[44511, 44514], 41.0334, (-80.6671)),
-('Pullman', 'WA', ARRAY[99163], 46.7340, (-117.1669)),
-('Nacogdoches', 'TX', ARRAY[75961, 75964, 75965], 31.6134, (-94.6528)),
-('Kearney', 'NE', ARRAY[68845, 68849], 40.7010, (-99.0834)),
-('Ferry Pass', 'FL', ARRAY[32514], 30.5203, (-87.1903)),
-('Vestavia Hills', 'AL', ARRAY[35243, 35242], 33.4518, (-86.7438)),
-('Norristown', 'PA', ARRAY[19404, 19415], 40.1224, (-75.3398)),
-('Dakota Ridge', 'CO', ARRAY[80235, 80127], 39.6192, (-105.1344)),
-('Firestone', 'CO', ARRAY[80504], 40.1563, (-104.9494)),
-('Goshen', 'IN', ARRAY[46526, 46527], 41.5743, (-85.8308)),
-('Russellville', 'AR', ARRAY[72801, 72812], 35.2763, (-93.1383)),
-('Parkland', 'FL', ARRAY[33067], 26.3218, (-80.2533)),
-('University City', 'MO', ARRAY[63130], 38.6657, (-90.3315)),
-('Kennesaw', 'GA', ARRAY[30144], 34.0260, (-84.6177)),
-('University Place', 'WA', ARRAY[98467, 98464], 47.2147, (-122.5461)),
-('Douglasville', 'GA', ARRAY[30135, 30122, 30133], 33.7384, (-84.7065)),
-('Salisbury', 'NC', ARRAY[28144, 28147, 28145], 35.6656, (-80.4909)),
-('Laramie', 'WY', ARRAY[82070, 82071], 41.3099, (-105.6085)),
-('Lake Stevens', 'WA', ARRAY[98205], 48.0028, (-122.0960)),
-('Valparaiso', 'IN', ARRAY[46383, 46384], 41.4782, (-87.0507)),
-('Estero', 'FL', ARRAY[34135, 33928, 33929], 26.4277, (-81.7951)),
-('Cottonwood Heights', 'UT', ARRAY[84121, 84171], 40.6137, (-111.8144)),
-('French Valley', 'CA', ARRAY[92596, 92593], 33.5998, (-117.1069)),
-('Ken Caryl', 'CO', ARRAY[80127], 39.5770, (-105.1144)),
-('Beverly Hills', 'CA', ARRAY[90211, 90210, 90209], 34.0786, (-118.4021)),
-('Galesburg', 'IL', ARRAY[61402], 40.9506, (-90.3763)),
-('Foothill Farms', 'CA', ARRAY[95841], 38.6867, (-121.3475)),
-('Westmont', 'CA', ARRAY[90047], 33.9417, (-118.3018)),
-('Warsaw', 'IN', ARRAY[46580, 46581], 41.2448, (-85.8464)),
-('Fair Oaks', 'VA', ARRAY[22033, 22035], 38.8653, (-77.3586)),
-('San Dimas', 'CA', ARRAY[91768], 34.1082, (-117.8090)),
-('Dana Point', 'CA', ARRAY[92624], 33.4733, (-117.6968)),
-('Newark', 'DE', ARRAY[19711, 19717, 19716, 19712], 39.6776, (-75.7573)),
-('Alabaster', 'AL', ARRAY[35007, 35144], 33.2198, (-86.8225)),
-('Lexington', 'MA', ARRAY[02420], 42.4456, (-71.2307)),
-('Deer Park', 'TX', ARRAY[77571, 88581], 29.6898, (-95.1151)),
-('West Little River', 'FL', ARRAY[33150], 25.8570, (-80.2367)),
-('Pikesville', 'MD', ARRAY[21208, 21209, 21022], 39.3893, (-76.7020)),
-('Greer', 'SC', ARRAY[29650, 29652], 34.9313, (-82.2315)),
-('Springville', 'UT', ARRAY[84663], 40.1638, (-111.6206)),
-('Matthews', 'NC', ARRAY[28106], 35.1195, (-80.7101)),
-('Woodstock', 'GA', ARRAY[30189], 34.1026, (-84.5090)),
-('Fallbrook', 'CA', ARRAY[92088], 33.3693, (-117.2259)),
-('Florence', 'KY', ARRAY[41022], 38.9900, (-84.6470)),
-('St. Charles', 'IL', ARRAY[60174], 41.9193, (-88.3109)),
-('San Luis', 'AZ', ARRAY[85349], 32.4911, (-114.7089)),
-('Fairmont', 'WV', ARRAY[26544], 39.4768, (-80.1491)),
-('Massillon', 'OH', ARRAY[44646, 44648], 40.7838, (-81.5254)),
-('Starkville', 'MS', ARRAY[39762], 33.4608, (-88.8297)),
-('Horizon West', 'FL', ARRAY[34786], 28.4417, (-81.6145)),
-('Harker Heights', 'TX', ARRAY[76513], 31.0572, (-97.6445)),
-('Elk Grove Village', 'IL', ARRAY[60009], 42.0063, (-87.9921)),
-('Redan', 'GA', ARRAY[30088, 30074], 33.7394, (-84.1644)),
-('Des Moines', 'WA', ARRAY[98198], 47.3915, (-122.3157)),
-('Bethel Park', 'PA', ARRAY[15234], 40.3239, (-80.0364)),
-('East Lake', 'FL', ARRAY[34685, 34688, 33677], 28.1205, (-82.6868)),
-('Kahului', 'HI', ARRAY[96784], 20.8715, (-156.4603)),
-('Dania Beach', 'FL', ARRAY[33312], 26.0594, (-80.1637)),
-('Spring Valley', 'NY', ARRAY[10977], 41.1151, (-74.0486)),
-('Bowling Green', 'OH', ARRAY[43403], 41.3773, (-83.6500)),
-('College Park', 'MD', ARRAY[20742, 20741], 38.9960, (-76.9337)),
-('Coos Bay', 'OR', ARRAY[97420], 43.3789, (-124.2330)),
-('Spanaway', 'WA', ARRAY[98445], 47.0979, (-122.4233)),
-('Clearfield', 'UT', ARRAY[84016], 41.1030, (-112.0237)),
-('Marrero', 'LA', ARRAY[70073], 29.8871, (-90.1127)),
-('Pekin', 'IL', ARRAY[61555, 61558], 40.5679, (-89.6262)),
-('Martinsville', 'VA', ARRAY[24113, 24114, 24115], 36.6827, (-79.8636)),
-('Rome', 'NY', ARRAY[13440, 13308, 13442, 13449], 43.2260, (-75.4909)),
-('Uniondale', 'NY', ARRAY[11530, 11553, 11556, 11590], 40.7176, (-73.5947)),
-('Spring Valley', 'CA', ARRAY[91978, 91979], 32.7316, (-116.9766)),
-('Bel Air North', 'MD', ARRAY[21015, 21014], 39.5544, (-76.3733)),
-('Hopkinsville', 'KY', ARRAY[42241], 36.8386, (-87.4776)),
-('Rochester', 'NH', ARRAY[03868, 03867, 03866], 43.2990, (-70.9787)),
-('Milledgeville', 'GA', ARRAY[31061, 31034], 33.0874, (-83.2414)),
-('Eldersburg', 'MD', ARRAY[21104], 39.4041, (-76.9529)),
-('Sherwood', 'AR', ARRAY[72076, 72117], 34.8508, (-92.2028)),
-('Garner', 'NC', ARRAY[27603], 35.6934, (-78.6196)),
-('Key West', 'FL', ARRAY[33041, 33045], 24.5637, (-81.7768)),
-('Miami Lakes', 'FL', ARRAY[33016, 33018], 25.9125, (-80.3214)),
-('Petersburg', 'VA', ARRAY[23805, 23804], 37.2043, (-77.3913)),
-('Wheat Ridge', 'CO', ARRAY[80212, 80214, 80034], 39.7728, (-105.1029)),
-('Cibolo', 'TX', ARRAY[78108], 29.5639, (-98.2123)),
-('Princeton', 'NJ', ARRAY[08542, 08541, 08544], 40.3563, (-74.6693)),
-('Athens', 'AL', ARRAY[35613, 35612], 34.7847, (-86.9510)),
-('Springfield', 'VA', ARRAY[22150, 22156, 22158, 22159], 38.7809, (-77.1839)),
-('Columbus', 'MS', ARRAY[39701, 39705], 33.5088, (-88.4096)),
-('Rexburg', 'ID', ARRAY[83440], 43.8224, (-111.7920)),
-('Nicholasville', 'KY', ARRAY[40340], 37.8902, (-84.5669)),
-('Goleta', 'CA', ARRAY[93118], 34.4360, (-119.8596)),
-('Opelika', 'AL', ARRAY[36801, 36802], 32.6612, (-85.3769)),
-('Butte', 'MT', ARRAY[59748, 59727, 59759, 59750], 45.9020, (-112.6571)),
-('Lakeside', 'FL', ARRAY[32065, 32073, 32030], 30.1356, (-81.7674)),
-('Burlingame', 'CA', ARRAY[94011], 37.5860, (-122.3669)),
-('Aiken', 'SC', ARRAY[29803, 29804, 29808], 33.5310, (-81.7268)),
-('Lawrenceville', 'GA', ARRAY[30042, 30049], 33.9523, (-83.9931)),
-('Winter Park', 'FL', ARRAY[32789, 32790, 32793], 28.5987, (-81.3438)),
-('Granger', 'IN', ARRAY[46545, 46530], 41.7373, (-86.1350)),
-('Fitchburg', 'WI', ARRAY[53719, 53711, 53713, 53725], 42.9859, (-89.4255)),
-('Needham', 'MA', ARRAY[02494], 42.2814, (-71.2411)),
-('Brooklyn Center', 'MN', ARRAY[55430], 45.0681, (-93.3162)),
-('Barstow', 'CA', ARRAY[92327], 34.8661, (-117.0472)),
-('Auburn', 'NY', ARRAY[13024, 13022], 42.9338, (-76.5684)),
-('Orcutt', 'CA', ARRAY[93457], 34.8668, (-120.4269)),
-('Crown Point', 'IN', ARRAY[46308], 41.4141, (-87.3457)),
-('Windsor', 'CO', ARRAY[80551], 40.4693, (-104.9213)),
-('Gloucester', 'MA', ARRAY[01931], 42.6260, (-70.6897)),
-('Sterling', 'VA', ARRAY[20163, 20167], 39.0052, (-77.4050)),
-('Orangeburg', 'SC', ARRAY[29117, 29115], 33.4928, (-80.8670)),
-('Holladay', 'UT', ARRAY[84121, 84124], 40.6599, (-111.8226)),
-('Newington', 'CT', ARRAY[06131, 06153], 41.6870, (-72.7308)),
-('Chamblee', 'GA', ARRAY[30345, 30366], 33.8842, (-84.3008)),
-('Peru', 'IL', ARRAY[61354], 41.3484, (-89.1370)),
-('Santa Paula', 'CA', ARRAY[93061], 34.3521, (-119.0698)),
-('Los Gatos', 'CA', ARRAY[95030, 95036], 37.2303, (-121.9560)),
-('Westchester', 'FL', ARRAY[33144, 33165, 33155], 25.7474, (-80.3358)),
-('South Lake Tahoe', 'CA', ARRAY[96151, 96152, 96156, 96157], 38.9393, (-119.9828)),
-('Clinton', 'IA', ARRAY[52733, 52734, 52736], 41.8434, (-90.2408)),
-('Saratoga', 'CA', ARRAY[95071], 37.2684, (-122.0263)),
-('Los Altos', 'CA', ARRAY[94024, 94023], 37.3685, (-122.0966)),
-('Ballwin', 'MO', ARRAY[63011, 63022], 38.5951, (-90.5500)),
-('Atascadero', 'CA', ARRAY[93423], 35.4827, (-120.6858)),
-('Somerset', 'KY', ARRAY[42501, 42533], 37.0815, (-84.6091)),
-('Stockbridge', 'GA', ARRAY[30281], 33.5253, (-84.2294)),
-('Manchester', 'CT', ARRAY[06040, 06041, 06045], 41.7801, (-72.5192)),
-('Williston', 'ND', ARRAY[58802, 58803], 48.1814, (-103.6364)),
-('Lake Magdalene', 'FL', ARRAY[33613, 33612], 28.0875, (-82.4791)),
-('Carney', 'MD', ARRAY[21057], 39.4050, (-76.5236)),
-('Maryville', 'TN', ARRAY[37804, 37801, 37802], 35.7468, (-83.9789)),
-('Walnut', 'CA', ARRAY[91788], 34.0334, (-117.8593)),
-('Kent', 'OH', ARRAY[44240, 44242], 41.1490, (-81.3610)),
-('North Chicago', 'IL', ARRAY[60064, 60086], 42.3172, (-87.8596)),
-('Greenville', 'MS', ARRAY[38703], 33.3850, (-91.0514)),
-('Duluth', 'GA', ARRAY[30096, 30026, 30029, 30095], 34.0053, (-84.1492)),
-('Sanford', 'ME', ARRAY[04083], 43.4244, (-70.7573)),
-('Drexel Heights', 'AZ', ARRAY[85746], 32.1457, (-111.0478)),
-('Oak Park', 'MI', ARRAY[48325], 42.4649, (-83.1824)),
-('Central', 'LA', ARRAY[70791, 70714, 70739, 70819], 30.5593, (-91.0369)),
-('Chicago Heights', 'IL', ARRAY[60412], 41.5101, (-87.6345)),
-('Norwood', 'MA', ARRAY[02060], 42.1861, (-71.1948)),
-('Wellesley', 'MA', ARRAY[02481, 02457], 42.3043, (-71.2855)),
-('Oak Ridge', 'TN', ARRAY[37831], 35.9639, (-84.2938)),
-('SeaTac', 'WA', ARRAY[98148, 98198, 98168, 98188], 47.4444, (-122.2986)),
-('Raytown', 'MO', ARRAY[64133], 38.9944, (-94.4641)),
-('Harrison', 'NY', ARRAY[10580, 10577, 10528], 41.0233, (-73.7192)),
-('Fernandina Beach', 'FL', ARRAY[32035], 30.6579, (-81.4504)),
-('Bella Vista', 'AR', ARRAY[72715], 36.4667, (-94.2707)),
-('East Haven', 'CT', ARRAY[06512], 41.2984, (-72.8577)),
-('Morrisville', 'NC', ARRAY[27650], 35.8367, (-78.8348)),
-('Casselberry', 'FL', ARRAY[32718], 28.6625, (-81.3218)),
-('Plattsburgh', 'NY', ARRAY[12903], 44.6951, (-73.4563)),
-('Seguin', 'TX', ARRAY[78156], 29.5889, (-97.9671)),
-('Agawam Town', 'MA', ARRAY[01001], 42.0657, (-72.6526)),
-('East Lake-Orient Park', 'FL', ARRAY[33619, 33610, 33617], 27.9971, (-82.3653)),
-('Burton', 'MI', ARRAY[48529, 48519], 42.9974, (-83.6175)),
-('Fleming Island', 'FL', ARRAY[32006], 30.0988, (-81.7124)),
-('Schererville', 'IN', ARRAY[46307], 41.4860, (-87.4440)),
-('West Springfield Town', 'MA', ARRAY[01090], 42.1253, (-72.6503)),
-('New Iberia', 'LA', ARRAY[70563], 30.0049, (-91.8202)),
-('Northampton', 'MA', ARRAY[01062, 01063, 01053, 01061], 42.3266, (-72.6745)),
-('Austintown', 'OH', ARRAY[44511], 41.0932, (-80.7405)),
-('Crofton', 'MD', ARRAY[21114], 39.0144, (-76.6800)),
-('Mehlville', 'MO', ARRAY[63125], 38.5018, (-90.3149)),
-('Zionsville', 'IN', ARRAY[46077, 46075], 39.9897, (-86.3182)),
-('Pasadena', 'MD', ARRAY[21060, 21226], 39.1552, (-76.5537)),
-('Winchester', 'NV', ARRAY[89169, 89121, 89199], 36.1368, (-115.1299)),
-('Vineyard', 'CA', ARRAY[95829], 38.4744, (-121.3190)),
-('Lumberton', 'NC', ARRAY[28360], 34.6312, (-79.0186)),
-('Jacksonville', 'AR', ARRAY[72076, 72078], 34.8807, (-92.1302)),
-('Rockledge', 'FL', ARRAY[32956], 28.3201, (-80.7320)),
-('Monterey', 'CA', ARRAY[93940, 93942, 93944], 36.5922, (-121.8807)),
-('Newburgh', 'NY', ARRAY[12555], 41.5037, (-74.0205)),
-('Granite City', 'IL', ARRAY[62040], 38.7292, (-90.1266)),
-('Aberdeen', 'SD', ARRAY[57402], 45.4646, (-98.4680)),
-('Perry Hall', 'MD', ARRAY[21234, 21128], 39.4067, (-76.4781)),
-('Yukon', 'OK', ARRAY[73085], 35.5201, (-97.7639)),
-('South Laurel', 'MD', ARRAY[20811], 39.0603, (-76.8456)),
-('Wisconsin Rapids', 'WI', ARRAY[54494], 44.3927, (-89.8265)),
-('Forest Hills', 'MI', ARRAY[49546, 49355, 49356, 49357], 42.9577, (-85.4895)),
-('Hobart', 'IN', ARRAY[46410], 41.5139, (-87.2729)),
-('New Smyrna Beach', 'FL', ARRAY[32168, 32170], 29.0249, (-80.9651)),
-('Fridley', 'MN', ARRAY[55432], 45.0841, (-93.2595)),
-('East Chicago', 'IN', ARRAY[46325], 41.6484, (-87.4536)),
-('Morgan City', 'LA', ARRAY[70381], 29.7041, (-91.1920)),
-('Ruston', 'LA', ARRAY[71270, 71273], 32.5329, (-92.6363)),
-('Jeffersontown', 'KY', ARRAY[40220, 40223], 38.2048, (-85.5701)),
-('Isla Vista', 'CA', ARRAY[93106, 93107], 34.4144, (-119.8581)),
-('Danvers', 'MA', ARRAY[01923], 42.5740, (-70.9494)),
-('Milton', 'MA', ARRAY[02187], 42.2413, (-71.0844)),
-('Statesville', 'NC', ARRAY[28677, 28687, 28688], 35.7842, (-80.8714)),
-('Short Pump', 'VA', ARRAY[23233], 37.6549, (-77.6201)),
-('Gladstone', 'MO', ARRAY[64118], 39.2133, (-94.5593)),
-('Fremont', 'NE', ARRAY[68026], 41.4396, (-96.4879)),
-('Garfield Heights', 'OH', ARRAY[44105], 41.4199, (-81.6038)),
-('Imperial Beach', 'CA', ARRAY[91932, 91933], 32.5689, (-117.1184)),
-('Seneca', 'SC', ARRAY[29678], 34.6815, (-82.9609)),
-('Lansing', 'IL', ARRAY[60411], 41.5648, (-87.5462)),
-('Paragould', 'AR', ARRAY[72451], 36.0555, (-90.5149)),
-('Oakleaf Plantation', 'FL', ARRAY[32073], 30.1689, (-81.8337)),
-('Prior Lake', 'MN', ARRAY[55379], 44.7251, (-93.4409)),
-('Easton', 'PA', ARRAY[18043, 18044], 40.6858, (-75.2209)),
-('West Whittier-Los Nietos', 'CA', ARRAY[90610], 33.9759, (-118.0689)),
-('Indiana', 'PA', ARRAY[15705], 40.6220, (-79.1552)),
-('Plum', 'PA', ARRAY[15068, 15239, 15147, 15268], 40.5024, (-79.7496)),
-('Mount Pleasant', 'WI', ARRAY[53406, 53403, 53177], 42.7129, (-87.8875)),
-('Burlington', 'MA', ARRAY[01805], 42.5022, (-71.2027)),
-('Waterville', 'ME', ARRAY[04903], 44.5441, (-69.6624)),
-('Norfolk', 'NE', ARRAY[68702], 42.0327, (-97.4208)),
-('Shaker Heights', 'OH', ARRAY[44120], 41.4744, (-81.5496)),
-('Brownsburg', 'IN', ARRAY[46112], 39.8330, (-86.3824)),
-('Shelby', 'NC', ARRAY[28150], 35.2904, (-81.5451)),
-('Maryland Heights', 'MO', ARRAY[63146], 38.7189, (-90.4749)),
-('Reisterstown', 'MD', ARRAY[21136], 39.4552, (-76.8144)),
-('Kinston', 'NC', ARRAY[28504, 28502, 28503], 35.2748, (-77.5936)),
-('Searcy', 'AR', ARRAY[72143], 35.2418, (-91.7351)),
-('West Chicago', 'IL', ARRAY[60186], 41.8960, (-88.2253)),
-('Lemon Grove', 'CA', ARRAY[91946], 32.7331, (-117.0344)),
-('Immokalee', 'FL', ARRAY[34143], 26.4253, (-81.4251)),
-('McDonough', 'GA', ARRAY[30252], 33.4399, (-84.1509)),
-('Bayonet Point', 'FL', ARRAY[34668], 28.3254, (-82.6834)),
-('Alvin', 'TX', ARRAY[77583, 77512], 29.3871, (-95.2933)),
-('Lebanon', 'NH', ARRAY[03766, 03756], 43.6353, (-72.2531)),
-('Thomasville', 'NC', ARRAY[27361], 35.8813, (-80.0807)),
-('Ilchester', 'MD', ARRAY[21075], 39.2187, (-76.7684)),
-('Temple Terrace', 'FL', ARRAY[33617], 28.0437, (-82.3774)),
-('Citrus Park', 'FL', ARRAY[33556], 28.0730, (-82.5628)),
-('Sedalia', 'MO', ARRAY[65302], 38.7042, (-93.2351)),
-('Bessemer', 'AL', ARRAY[35020, 35021], 33.3709, (-86.9713)),
-('Batavia', 'IL', ARRAY[60510], 41.8479, (-88.3110)),
-('Garden City', 'MI', ARRAY[48136], 42.3244, (-83.3412)),
-('Chanhassen', 'MN', ARRAY[55317, 55318], 44.8544, (-93.5621)),
-('Vicksburg', 'MS', ARRAY[39183, 39181, 39182], 32.3173, (-90.8868)),
-('University Park', 'FL', ARRAY[33165, 33199], 25.7469, (-80.3684)),
-('Troy', 'OH', ARRAY[45374], 40.0436, (-84.2191)),
-('West Odessa', 'TX', ARRAY[79764], 31.8388, (-102.4996)),
-('Hercules', 'CA', ARRAY[94553], 38.0064, (-122.2564)),
-('Lake City', 'FL', ARRAY[32025, 32056], 30.1901, (-82.6470)),
-('Lochearn', 'MD', ARRAY[21207], 39.3460, (-76.7307)),
-('Wethersfield', 'CT', ARRAY[06129, 06161], 41.7013, (-72.6703)),
-('Paramus', 'NJ', ARRAY[07653], 40.9455, (-74.0712)),
-('Greenville', 'TX', ARRAY[75402, 75404], 33.1116, (-96.1098)),
-('Okeechobee', 'FL', ARRAY[34974], 27.2414, (-80.8298)),
-('Edgewood', 'MD', ARRAY[21010, 21040], 39.4210, (-76.2968)),
-('Moscow', 'ID', ARRAY[83844], 46.7307, (-116.9986)),
-('Sebastian', 'FL', ARRAY[32978], 27.7882, (-80.4813)),
-('Northport', 'AL', ARRAY[35475, 35476, 35452], 33.2589, (-87.5984)),
-('Natchez', 'MS', ARRAY[39121, 39122], 31.5437, (-91.3867)),
-('Winchester', 'KY', ARRAY[40392], 38.0017, (-84.1907)),
-('East St. Louis', 'IL', ARRAY[62205, 62204, 62203, 62201], 38.6156, (-90.1304)),
-('Belmont', 'MA', ARRAY[02479], 42.3960, (-71.1795)),
-('Paris', 'TX', ARRAY[75460, 75461], 33.6688, (-95.5460)),
-('Mason City', 'IA', ARRAY[50402], 43.1487, (-93.1998)),
-('Timberwood Park', 'TX', ARRAY[78260], 29.6994, (-98.4838)),
-('Medina', 'OH', ARRAY[44258], 41.1358, (-81.8694)),
-('Conway', 'SC', ARRAY[29526], 33.8399, (-79.0424)),
-('Española', 'NM', ARRAY[87532, 87533], 36.0041, (-106.0669)),
-('Laurel', 'MS', ARRAY[39443], 31.6956, (-89.1448)),
-('Green', 'OH', ARRAY[44312, 44319, 44216, 44720], 40.9483, (-81.4757)),
-('Decatur', 'GA', ARRAY[30031, 30036], 33.7711, (-84.2968)),
-('Madison', 'MS', ARRAY[39130], 32.4738, (-90.1300)),
-('Lancaster', 'SC', ARRAY[29722], 34.7247, (-80.7801)),
-('South Bradenton', 'FL', ARRAY[34207, 34210], 27.4612, (-82.5821)),
-('Laurel', 'MD', ARRAY[20709, 20725, 20726], 39.0950, (-76.8622)),
-('South Salt Lake', 'UT', ARRAY[84115, 84165], 40.7056, (-111.8986)),
-('Sevierville', 'TN', ARRAY[37764, 37876, 37864], 35.8873, (-83.5677)),
-('Holt', 'MI', ARRAY[48911], 42.6416, (-84.5307)),
-('San Lorenzo', 'CA', ARRAY[94580], 37.6737, (-122.1349)),
-('Claremore', 'OK', ARRAY[74017, 74018], 36.3143, (-95.6099)),
-('Homewood', 'AL', ARRAY[35209, 35142], 33.4617, (-86.8092)),
-('Dedham', 'MA', ARRAY[02027], 42.2466, (-71.1777)),
-('Middle River', 'MD', ARRAY[21221], 39.3345, (-76.4318)),
-('South Pasadena', 'CA', ARRAY[91031], 34.1103, (-118.1573)),
-('Salem', 'VA', ARRAY[24155, 24157], 37.2864, (-80.0555)),
-('Caledonia', 'WI', ARRAY[53404, 53406, 53402, 53126], 42.7986, (-87.8762)),
-('Coral Terrace', 'FL', ARRAY[33155], 25.7464, (-80.3049)),
-('Edwardsville', 'IL', ARRAY[62048, 62026], 38.7923, (-89.9877)),
-('Fajardo', 'PR', ARRAY[00738], 18.3330, (-65.6592)),
-('Palm City', 'FL', ARRAY[34991], 27.1736, (-80.2861)),
-('Palm Springs', 'FL', ARRAY[33406], 26.6349, (-80.0968)),
-('Riverside', 'OH', ARRAY[45431, 45404, 45424], 39.7836, (-84.1219)),
-('Hazelwood', 'MO', ARRAY[63031], 38.7931, (-90.3899)),
-('Scottsbluff', 'NE', ARRAY[69363], 41.8684, (-103.6616)),
-('Canyon Lake', 'TX', ARRAY[78132, 78133, 78070], 29.8761, (-98.2611)),
-('Reading', 'MA', ARRAY[01813], 42.5351, (-71.1056)),
-('Columbine', 'CO', ARRAY[80123], 39.5879, (-105.0694)),
-('Juneau', 'AK', ARRAY[99801, 99802, 99803, 99811], 58.4546, (-134.1739)),
-('Ridgewood', 'NJ', ARRAY[07451], 40.9822, (-74.1128)),
-('Yucca Valley', 'CA', ARRAY[92286], 34.1234, (-116.4216)),
-('Branson', 'MO', ARRAY[65615], 36.6510, (-93.2635)),
-('Balch Springs', 'TX', ARRAY[75181], 32.7194, (-96.6151)),
-('University Park', 'TX', ARRAY[75205, 75275], 32.8506, (-96.7937)),
-('De Pere', 'WI', ARRAY[54344], 44.4309, (-88.0785)),
-('Marysville', 'OH', ARRAY[43041], 40.2278, (-83.3595)),
-('Cataño', 'PR', ARRAY[00965, 00963], 18.4415, (-66.1388)),
-('Clayton', 'NC', ARRAY[27527, 27528], 35.6591, (-78.4499)),
-('Brookings', 'SD', ARRAY[57007], 44.3022, (-96.7859)),
-('Walker', 'MI', ARRAY[49534], 42.9853, (-85.7446)),
-('Fairland', 'MD', ARRAY[20904, 20905], 39.0804, (-76.9527)),
-('North Tustin', 'CA', ARRAY[92705, 92711], 33.7644, (-117.7945)),
-('Melrose Park', 'IL', ARRAY[60163, 60161], 41.9029, (-87.8642)),
-('Norton Shores', 'MI', ARRAY[49444], 43.1621, (-86.2519)),
-('Keystone', 'FL', ARRAY[33556, 33558], 28.1312, (-82.5999)),
-('Herndon', 'VA', ARRAY[20172, 20192, 22095], 38.9699, (-77.3867)),
-('Bailey''s Crossroads', 'VA', ARRAY[22311], 38.8477, (-77.1305)),
-('Chantilly', 'VA', ARRAY[20153], 38.8868, (-77.4453)),
-('Rockville Centre', 'NY', ARRAY[11571], 40.6644, (-73.6383)),
-('Palmetto Bay', 'FL', ARRAY[33157], 25.6220, (-80.3221)),
-('Lathrop', 'CA', ARRAY[95231], 37.8090, (-121.3131)),
-('Loma Linda', 'CA', ARRAY[92324, 92373, 92318, 92350], 34.0451, (-117.2498)),
-('Tifton', 'GA', ARRAY[31794], 31.4625, (-83.5205)),
-('Suitland', 'MD', ARRAY[20747, 20233, 20395, 20752], 38.8492, (-76.9225)),
-('Clinton', 'MS', ARRAY[39058, 39060], 32.3540, (-90.3403)),
-('Trotwood', 'OH', ARRAY[45426, 45417, 45416], 39.7927, (-84.3165)),
-('West Memphis', 'AR', ARRAY[72364, 72303], 35.1531, (-90.1995)),
-('Mequon', 'WI', ARRAY[53092], 43.2352, (-87.9838)),
-('Shelbyville', 'KY', ARRAY[40066], 38.2069, (-85.2293)),
-('Newport', 'RI', ARRAY[02840], 41.4803, (-71.3205)),
-('San Fernando', 'CA', ARRAY[91341], 34.2886, (-118.4363)),
-('Saginaw', 'TX', ARRAY[76179], 32.8657, (-97.3654)),
-('Port Angeles', 'WA', ARRAY[98362], 48.1142, (-123.4565)),
-('Thomasville', 'GA', ARRAY[31758, 31799], 30.8394, (-83.9782)),
-('Ponca City', 'OK', ARRAY[74604], 36.7235, (-97.0679)),
-('Lincolnton', 'NC', ARRAY[28093], 35.4747, (-81.2385)),
-('Simpsonville', 'SC', ARRAY[29681], 34.7287, (-82.2573)),
-('Fort Washington', 'MD', ARRAY[20749], 38.7339, (-77.0069)),
-('North Potomac', 'MD', ARRAY[20850], 39.0955, (-77.2372)),
-('Ridgeland', 'MS', ARRAY[39158], 32.4236, (-90.1481)),
-('Hastings', 'NE', ARRAY[68902], 40.5963, (-98.3914)),
-('Waukee', 'IA', ARRAY[50003], 41.5984, (-93.8872)),
-('Vero Beach South', 'FL', ARRAY[32968, 32966, 32962], 27.6164, (-80.4130)),
-('Wadsworth', 'OH', ARRAY[44282], 41.0279, (-81.7324)),
-('Tumwater', 'WA', ARRAY[98512, 98511, 98599], 46.9890, (-122.9173)),
-('Fairfax', 'VA', ARRAY[22031, 20030, 22038], 38.8531, (-77.2998)),
-('Venice', 'FL', ARRAY[34292, 34275, 34284], 27.1163, (-82.4135)),
-('Cottage Lake', 'WA', ARRAY[98077], 47.7466, (-122.0755)),
-('Edgewater', 'FL', ARRAY[32168, 32132], 28.9594, (-80.9407)),
-('Okemos', 'MI', ARRAY[48805], 42.7057, (-84.4135)),
-('Pelham', 'AL', ARRAY[35124], 33.3114, (-86.7573)),
-('Seal Beach', 'CA', ARRAY[90743, 90740], 33.7542, (-118.0714)),
-('Calabasas', 'CA', ARRAY[91372], 34.1375, (-118.6689)),
-('North Augusta', 'SC', ARRAY[29841, 29861], 33.5214, (-81.9547)),
-('Jenks', 'OK', ARRAY[74037], 35.9981, (-95.9737)),
-('Bloomingdale', 'FL', ARRAY[33596], 27.8784, (-82.2624)),
-('Tysons', 'VA', ARRAY[22182, 22036, 22103], 38.9215, (-77.2273)),
-('Coronado', 'CA', ARRAY[92135, 92118, 92178], 32.6640, (-117.1600)),
-('Copiague', 'NY', ARRAY[11757, 11701], 40.6728, (-73.3932)),
-('Oak Ridge', 'FL', ARRAY[32839], 28.4727, (-81.4169)),
-('Centerville', 'OH', ARRAY[45458], 39.6339, (-84.1449)),
-('Greeneville', 'TN', ARRAY[37743, 37744], 36.1680, (-82.8197)),
-('Van Buren', 'AR', ARRAY[72957], 35.4480, (-94.3528)),
-('Waycross', 'GA', ARRAY[31503], 31.2108, (-82.3579)),
-('Ashland', 'CA', ARRAY[94580, 94578], 37.6942, (-122.1159)),
-('West Puente Valley', 'CA', ARRAY[91744], 34.0512, (-117.9681)),
-('Jacksonville Beach', 'FL', ARRAY[32240], 30.2782, (-81.4045)),
-('Palm River-Clair Mel', 'FL', ARRAY[33578], 27.9239, (-82.3791)),
-('Rosemont', 'CA', ARRAY[95826], 38.5477, (-121.3553)),
-('Chalmette', 'LA', ARRAY[70044], 29.9437, (-89.9659)),
-('Romulus', 'MI', ARRAY[48242], 42.2237, (-83.3660)),
-('Clarksburg', 'MD', ARRAY[20876, 20871], 39.2314, (-77.2617)),
-('Leland', 'NC', ARRAY[28479], 34.2044, (-78.0277)),
-('Benbrook', 'TX', ARRAY[76126], 32.6787, (-97.4638)),
-('Sun City Center', 'FL', ARRAY[33573, 33571], 27.7149, (-82.3569)),
-('Montrose', 'CO', ARRAY[81401], 38.4690, (-107.8590)),
-('Ruskin', 'FL', ARRAY[33575], 27.7065, (-82.4209)),
-('Hialeah Gardens', 'FL', ARRAY[33018], 25.8878, (-80.3569)),
-('Columbus', 'NE', ARRAY[68602], 41.4368, (-97.3563)),
-('Plainview', 'TX', ARRAY[79073], 34.1911, (-101.7234)),
-('Auburn', 'ME', ARRAY[04211, 04212, 04223], 44.0850, (-70.2492)),
-('Loves Park', 'IL', ARRAY[61011, 61130, 61131, 61132], 42.3364, (-88.9975)),
-('Greenbelt', 'MD', ARRAY[20770, 20768], 38.9953, (-76.8885)),
-('Kenmore', 'WA', ARRAY[98034], 47.7516, (-122.2489)),
-('Winter Gardens', 'CA', ARRAY[92040], 32.8376, (-116.9268)),
-('Rockingham', 'NC', ARRAY[28380], 34.9386, (-79.7608)),
-('Greenfield', 'IN', ARRAY[46129], 39.7936, (-85.7737)),
-('Watertown', 'WI', ARRAY[53094], 43.1893, (-88.7285)),
-('Frederickson', 'WA', ARRAY[98375, 98446], 47.0914, (-122.3594)),
-('West Rancho Dominguez', 'CA', ARRAY[90061, 90059, 90220], 33.9057, (-118.2682)),
-('Gallup', 'NM', ARRAY[87322], 35.5183, (-108.7423)),
-('Radcliff', 'KY', ARRAY[42701, 40159], 37.8206, (-85.9366)),
-('Crystal', 'MN', ARRAY[55427, 55429, 55428], 45.0377, (-93.3599)),
-('Dickinson', 'ND', ARRAY[58602], 46.8917, (-102.7924)),
-('Allison Park', 'PA', ARRAY[15091], 40.5730, (-79.9603)),
-('Ensley', 'FL', ARRAY[32534], 30.5261, (-87.2735)),
-('Laguna Beach', 'CA', ARRAY[92652], 33.5448, (-117.7612)),
-('Acworth', 'GA', ARRAY[30101], 34.0566, (-84.6715)),
-('Griffin', 'GA', ARRAY[30223], 33.2418, (-84.2747)),
-('Corsicana', 'TX', ARRAY[75109], 32.0824, (-96.4665)),
-('Elizabeth City', 'NC', ARRAY[27907], 36.2943, (-76.2361)),
-('Fairhope', 'AL', ARRAY[36533], 30.5217, (-87.8815)),
-('Braidwood', 'IL', ARRAY[60408, 60481], 41.2696, (-88.2235)),
-('Trussville', 'AL', ARRAY[35173, 35015], 33.6404, (-86.5819)),
-('Meadville', 'PA', ARRAY[16388], 41.6476, (-80.1468)),
-('Lakeside', 'CA', ARRAY[92040], 32.8560, (-116.9040)),
-('Happy Valley', 'OR', ARRAY[97089, 97086], 45.4362, (-122.5077)),
-('West Carson', 'CA', ARRAY[90502], 33.8229, (-118.2931)),
-('Northdale', 'FL', ARRAY[33548, 33558], 28.1058, (-82.5263)),
-('Fort Walton Beach', 'FL', ARRAY[32547], 30.4249, (-86.6194)),
-('Christiansburg', 'VA', ARRAY[24068], 37.1411, (-80.4028)),
-('Garden City', 'NY', ARRAY[11531, 11599], 40.7266, (-73.6447)),
-('Granite Bay', 'CA', ARRAY[95650], 38.7601, (-121.1714)),
-('Willowbrook', 'CA', ARRAY[90222], 33.9199, (-118.2362)),
-('Union City', 'GA', ARRAY[30291, 30213], 33.5941, (-84.5629)),
-('Derry', 'NH', ARRAY[03041], 42.8941, (-71.2848)),
-('Prairie Village', 'KS', ARRAY[66207], 38.9874, (-94.6361)),
-('Kuna', 'ID', ARRAY[83642], 43.4869, (-116.3986)),
-('Fort Mill', 'SC', ARRAY[29716], 35.0062, (-80.9388)),
-('Hayesville', 'OR', ARRAY[97309], 44.9794, (-122.9739)),
-('Hudson', 'OH', ARRAY[44237, 44326], 41.2399, (-81.4408)),
-('Mukwonago', 'WI', ARRAY[53120], 42.8566, (-88.3269)),
-('Lexington', 'SC', ARRAY[29071], 33.9890, (-81.2202)),
-('Lino Lakes', 'MN', ARRAY[55038], 45.1679, (-93.0830)),
-('Augusta', 'ME', ARRAY[04332, 04333, 04336, 04338], 44.3341, (-69.7319)),
-('Corinth', 'TX', ARRAY[76210], 33.1435, (-97.0681)),
-('Naples', 'FL', ARRAY[34102, 34101, 34105, 34104], 26.1504, (-81.7936)),
-('Monsey', 'NY', ARRAY[10977], 41.1181, (-74.0681)),
-('Cockeysville', 'MD', ARRAY[21030, 21093, 21065], 39.4793, (-76.6300)),
-('Guayama', 'PR', ARRAY[00785], 17.9744, (-66.1104)),
-('Brent', 'FL', ARRAY[32503], 30.4729, (-87.2496)),
-('Silver Firs', 'WA', ARRAY[98012, 98208], 47.8635, (-122.1497)),
-('Landover', 'MD', ARRAY[20785], 38.9241, (-76.8875)),
-('Union Hill-Novelty Hill', 'WA', ARRAY[98077], 47.6788, (-122.0284)),
-('Rose Hill', 'VA', ARRAY[22310], 38.7872, (-77.1085)),
-('Port Hueneme', 'CA', ARRAY[93043, 93044], 34.1617, (-119.2036)),
-('Keene', 'NH', ARRAY[03435], 42.9494, (-72.2997)),
-('Summit', 'NJ', ARRAY[07902], 40.7154, (-74.3647)),
-('Secaucus', 'NJ', ARRAY[07096], 40.7810, (-74.0659)),
-('Golden Valley', 'MN', ARRAY[55427, 55426, 55416], 44.9901, (-93.3591)),
-('Bloomingdale', 'IL', ARRAY[60117], 41.9497, (-88.0895)),
-('Shelbyville', 'TN', ARRAY[37161, 37162], 35.4987, (-86.4516)),
-('Shafter', 'CA', ARRAY[93314], 35.4794, (-119.2013)),
-('Brownwood', 'TX', ARRAY[76802], 31.7127, (-98.9767)),
-('Katy', 'TX', ARRAY[77494, 77491, 77492], 29.7904, (-95.8353)),
-('Green Valley', 'AZ', ARRAY[85614], 31.8436, (-111.0174)),
-('Del City', 'OK', ARRAY[73117], 35.4483, (-97.4408)),
-('North Lynnwood', 'WA', ARRAY[98037], 47.8533, (-122.2762)),
-('Camp Springs', 'MD', ARRAY[20746, 20748], 38.8052, (-76.9198)),
-('Hamtramck', 'MI', ARRAY[48212], 42.3954, (-83.0560)),
-('La Porte', 'IN', ARRAY[46352], 41.6077, (-86.7136)),
-('Clarksville', 'IN', ARRAY[47172], 38.3221, (-85.7673)),
-('Biddeford', 'ME', ARRAY[04006, 04007], 43.4674, (-70.4512)),
-('St. Andrews', 'SC', ARRAY[29210], 34.0510, (-81.1057)),
-('Holiday', 'FL', ARRAY[34690, 34692], 28.1864, (-82.7429)),
-('Lutz', 'FL', ARRAY[33549, 33559, 33647], 28.1396, (-82.4467)),
-('Prichard', 'AL', ARRAY[36610, 36613, 36612], 30.7735, (-88.1301)),
-('Birmingham', 'MI', ARRAY[48012], 42.5447, (-83.2166)),
-('Easley', 'SC', ARRAY[29640], 34.8190, (-82.5828)),
-('Bear', 'DE', ARRAY[19702], 39.6188, (-75.6804)),
-('Marshall', 'TX', ARRAY[75670, 75671], 32.5370, (-94.3515)),
-('DeBary', 'FL', ARRAY[32753], 28.8815, (-81.3240)),
-('Eustis', 'FL', ARRAY[32736, 32627, 32727], 28.8560, (-81.6781)),
-('Salmon Creek', 'WA', ARRAY[98685], 45.7099, (-122.6632)),
-('South Euclid', 'OH', ARRAY[44143], 41.5239, (-81.5245)),
-('North Plainfield', 'NJ', ARRAY[07060], 40.6209, (-74.4386)),
-('Lealman', 'FL', ARRAY[33709, 33714], 27.8197, (-82.6847)),
-('Sapulpa', 'OK', ARRAY[74066, 74067], 36.0089, (-96.1006)),
-('Duarte', 'CA', ARRAY[91009], 34.1610, (-117.9504)),
-('Ardmore', 'OK', ARRAY[73402, 73403], 34.1944, (-97.1253)),
-('West Pensacola', 'FL', ARRAY[32506, 32507], 30.4263, (-87.2679)),
-('Oxford', 'AL', ARRAY[36203, 36253], 33.5967, (-85.8687)),
-('Evans', 'CO', ARRAY[80634, 80620], 40.3660, (-104.7389)),
-('Carrboro', 'NC', ARRAY[27510], 35.9260, (-79.0878)),
-('Gaffney', 'SC', ARRAY[29340, 29342], 35.0742, (-81.6558)),
-('Sidney', 'OH', ARRAY[45367], 40.2891, (-84.1667)),
-('Silverdale', 'WA', ARRAY[98370, 98383], 47.6663, (-122.6828)),
-('Rolla', 'MO', ARRAY[65409], 37.9458, (-91.7608)),
-('Pleasant Prairie', 'WI', ARRAY[53158], 42.5266, (-87.8895)),
-('Sweetwater', 'FL', ARRAY[33174], 25.7786, (-80.3760)),
-('Milwaukie', 'OR', ARRAY[97269], 45.4447, (-122.6221)),
-('Bryant', 'AR', ARRAY[72022, 72089], 34.6152, (-92.4914)),
-('Wade Hampton', 'SC', ARRAY[29609, 29687], 34.8821, (-82.3336)),
-('Makakilo', 'HI', ARRAY[96709], 21.3591, (-158.0813)),
-('New Hope', 'MN', ARRAY[55428], 45.0374, (-93.3869)),
-('Mill Creek', 'WA', ARRAY[98082], 47.8631, (-122.2037)),
-('Clemmons', 'NC', ARRAY[27103, 27102], 36.0319, (-80.3861)),
-('Stephenville', 'TX', ARRAY[76402], 32.2148, (-98.2205)),
-('Dyersburg', 'TN', ARRAY[38025], 36.0465, (-89.3777)),
-('Bayou Cane', 'LA', ARRAY[70364], 29.6244, (-90.7510)),
-('Lake Ronkonkoma', 'NY', ARRAY[11779], 40.8308, (-73.1112)),
-('Allendale', 'MI', ARRAY[49401], 42.9851, (-85.9509)),
-('Golden', 'CO', ARRAY[80403, 80419, 80402], 39.7406, (-105.2118)),
-('Harvey', 'LA', ARRAY[70059], 29.8876, (-90.0666)),
-('Gardner', 'MA', ARRAY[01441], 42.5845, (-71.9867)),
-('Havelock', 'NC', ARRAY[28532], 34.9078, (-76.8987)),
-('East Moline', 'IL', ARRAY[61236, 61257], 41.5199, (-90.3879)),
-('Yorkville', 'IL', ARRAY[60512], 41.6562, (-88.4507)),
-('South San Jose Hills', 'CA', ARRAY[91792], 34.0123, (-117.9041)),
-('Clifton', 'CO', ARRAY[81504], 39.0763, (-108.4606)),
-('Lynn Haven', 'FL', ARRAY[32404, 32444], 30.2337, (-85.6370)),
-('Ferguson', 'MO', ARRAY[63135], 38.7490, (-90.2950)),
-('Alice', 'TX', ARRAY[78333], 27.7556, (-98.0653)),
-('Montclair', 'VA', ARRAY[22025], 38.6111, (-77.3400)),
-('Papillion', 'NE', ARRAY[68138], 41.1516, (-96.0679)),
-('Crest Hill', 'IL', ARRAY[60441, 60434], 41.5723, (-88.1124)),
-('Poplar Bluff', 'MO', ARRAY[63901], 36.7632, (-90.4136)),
-('Tukwila', 'WA', ARRAY[98178, 98168, 98188, 98190], 47.4749, (-122.2727)),
-('Duncan', 'OK', ARRAY[73055, 73534, 73536], 34.5424, (-97.9190)),
-('Bothell West', 'WA', ARRAY[98036, 98012], 47.8056, (-122.2401)),
-('Mountain Brook', 'AL', ARRAY[35243, 35223], 33.4871, (-86.7400)),
-('Rotterdam', 'NY', ARRAY[12303], 42.7786, (-73.9536)),
-('Amherst Center', 'MA', ARRAY[01003, 01004], 42.3757, (-72.5188)),
-('Agoura Hills', 'CA', ARRAY[91376], 34.1510, (-118.7608)),
-('Durango', 'CO', ARRAY[81303, 81302], 37.2659, (-107.8782)),
-('Howard', 'WI', ARRAY[54303], 44.5703, (-88.0920)),
-('Monmouth', 'OR', ARRAY[97351], 44.8505, (-123.2283)),
-('Ypsilanti', 'MI', ARRAY[48197], 42.2437, (-83.6205)),
-('Bartow', 'FL', ARRAY[33880, 33835], 27.8868, (-81.8213)),
-('Ashland', 'KY', ARRAY[41101], 38.4592, (-82.6449)),
-('Miamisburg', 'OH', ARRAY[45343], 39.6323, (-84.2725)),
-('East Northport', 'NY', ARRAY[11731], 40.8792, (-73.3232)),
-('Germantown', 'WI', ARRAY[53022], 43.2343, (-88.1217)),
-('Sulphur', 'LA', ARRAY[70665, 70664], 30.2286, (-93.3565)),
-('Fish Hawk', 'FL', ARRAY[33569], 27.8511, (-82.2164)),
-('Middleton', 'WI', ARRAY[53597], 43.1065, (-89.5058)),
-('West Chester', 'PA', ARRAY[19382, 19383, 19381], 39.9601, (-75.6058)),
-('Brushy Creek', 'TX', ARRAY[78717], 30.5125, (-97.7388)),
-('Forest Park', 'GA', ARRAY[30294, 30298], 33.6209, (-84.3590)),
-('La Cañada Flintridge', 'CA', ARRAY[91012], 34.2097, (-118.2002)),
-('Safford', 'AZ', ARRAY[85548], 32.8317, (-109.7005)),
-('Eastchester', 'NY', ARRAY[10709, 10583], 40.9578, (-73.8079)),
-('Merrick', 'NY', ARRAY[11520], 40.6515, (-73.5535)),
-('Greenwood', 'MS', ARRAY[38935], 33.5126, (-90.1993)),
-('Martha Lake', 'WA', ARRAY[98012, 98208], 47.8479, (-122.2327)),
-('Valley', 'AL', ARRAY[36872], 32.8088, (-85.1809)),
-('Helena', 'AL', ARRAY[35080], 33.2845, (-86.8756)),
-('Cullman', 'AL', ARRAY[35057, 35055, 35056], 34.1777, (-86.8407)),
-('Sand Springs', 'OK', ARRAY[74063], 36.1342, (-96.1284)),
-('Cameron Park', 'CA', ARRAY[95682], 38.6737, (-120.9872)),
-('White Oak', 'OH', ARRAY[45239], 39.2106, (-84.6061)),
-('Vernal', 'UT', ARRAY[84008], 40.4517, (-109.5379)),
-('Ballenger Creek', 'MD', ARRAY[21703], 39.3807, (-77.4205)),
-('Schofield Barracks', 'HI', ARRAY[96786], 21.4936, (-158.0617)),
-('Norwood', 'OH', ARRAY[45280], 39.1605, (-84.4535)),
-('Selma', 'AL', ARRAY[36701], 32.4166, (-87.0336)),
-('Rockport', 'TX', ARRAY[78381], 28.0290, (-97.0722)),
-('Cherry Hill', 'VA', ARRAY[22026], 38.5696, (-77.2895)),
-('Franconia', 'VA', ARRAY[22315], 38.7682, (-77.1587)),
-('Haslett', 'MI', ARRAY[48823], 42.7525, (-84.4020)),
-('West Mifflin', 'PA', ARRAY[15123], 40.3581, (-79.9072)),
-('Casa de Oro-Mount Helix', 'CA', ARRAY[91941, 92020, 91976], 32.7640, (-116.9687)),
-('Stillwater', 'MN', ARRAY[55083], 45.0573, (-92.8313)),
-('Eloy', 'AZ', ARRAY[85194, 85193, 85123], 32.7470, (-111.5991)),
-('Rio Rico', 'AZ', ARRAY[85648], 31.4957, (-110.9886)),
-('Murrysville', 'PA', ARRAY[15632, 15626], 40.4456, (-79.6555)),
-('Prunedale', 'CA', ARRAY[95004, 93907], 36.8064, (-121.6555)),
-('Hauppauge', 'NY', ARRAY[11788, 11760], 40.8217, (-73.2119)),
-('Syosset', 'NY', ARRAY[11773], 40.8156, (-73.5020)),
-('Baldwin', 'PA', ARRAY[15227], 40.3690, (-79.9668)),
-('Meadowbrook', 'VA', ARRAY[23237], 37.4301, (-77.4740)),
-('Danville', 'KY', ARRAY[40423], 37.6418, (-84.7777)),
-('South Burlington', 'VT', ARRAY[05407], 44.4622, (-73.2203)),
-('La Crescenta-Montrose', 'CA', ARRAY[91020, 91021], 34.2322, (-118.2353)),
-('Apollo Beach', 'FL', ARRAY[33572], 27.7618, (-82.4002)),
-('Matteson', 'IL', ARRAY[60443], 41.5095, (-87.7468)),
-('Holtsville', 'NY', ARRAY[00501, 00544], 40.8124, (-73.0447)),
-('Rosedale', 'MD', ARRAY[21206], 39.3266, (-76.5084)),
-('Durant', 'OK', ARRAY[74702], 33.9957, (-96.3938)),
-('Linda', 'CA', ARRAY[95901], 39.1241, (-121.5421)),
-('Corning', 'NY', ARRAY[14831], 42.1470, (-77.0561)),
-('Langley Park', 'MD', ARRAY[20903], 38.9897, (-76.9808)),
-('Morristown', 'NJ', ARRAY[07963], 40.7966, (-74.4772)),
-('Erlanger', 'KY', ARRAY[41017, 41051], 39.0109, (-84.5864)),
-('North Valley Stream', 'NY', ARRAY[11003], 40.6840, (-73.7077)),
-('Westbrook', 'ME', ARRAY[04098], 43.6954, (-70.3539)),
-('Fox Crossing', 'WI', ARRAY[54956], 44.2229, (-88.4763)),
-('White Oak', 'MD', ARRAY[20904, 20903, 20993], 39.0433, (-76.9906)),
-('McKeesport', 'PA', ARRAY[15134], 40.3419, (-79.8439)),
-('Bellaire', 'TX', ARRAY[77402], 29.7040, (-95.4622)),
-('Lexington', 'NC', ARRAY[27295, 27294], 35.8017, (-80.2682)),
-('Whitehall', 'OH', ARRAY[43219], 39.9682, (-82.8833)),
-('Natchitoches', 'LA', ARRAY[71469, 71458, 71497], 31.7317, (-93.0979)),
-('Seminole', 'FL', ARRAY[33777, 33778, 33775], 27.8435, (-82.7839)),
-('North Amityville', 'NY', ARRAY[11701], 40.7005, (-73.4118)),
-('St. John', 'IN', ARRAY[46311], 41.4431, (-87.4700)),
-('Grandview', 'WA', ARRAY[98930], 46.2444, (-119.9091)),
-('Marshfield', 'WI', ARRAY[54404], 44.6627, (-90.1728)),
-('Franklin Farm', 'VA', ARRAY[20171], 38.9133, (-77.3969)),
-('Avon', 'IN', ARRAY[46213], 39.7603, (-86.3917)),
-('Westminster', 'MD', ARRAY[21157], 39.5796, (-77.0066)),
-('Cocoa', 'FL', ARRAY[32926, 32923, 32924], 28.3820, (-80.7674)),
-('Moultrie', 'GA', ARRAY[31788, 31776], 31.1591, (-83.7708)),
-('Winthrop Town', 'MA', ARRAY[02152], 42.3751, (-70.9847)),
-('Rancho Mirage', 'CA', ARRAY[92263], 33.7634, (-116.4271)),
-('Gautier', 'MS', ARRAY[39564], 30.4106, (-88.6568)),
-('Humacao', 'PR', ARRAY[00792], 18.1519, (-65.8204)),
-('Hopkins', 'MN', ARRAY[55343], 44.9261, (-93.4056)),
-('Mesquite', 'NV', ARRAY[89027, 89024, 89034], 36.8035, (-114.1325)),
-('Idylwood', 'VA', ARRAY[22043], 38.8896, (-77.2055)),
-('Berea', 'KY', ARRAY[40403], 37.5904, (-84.2898)),
-('Seabrook', 'MD', ARRAY[20771], 38.9802, (-76.8502)),
-('East Massapequa', 'NY', ARRAY[11758], 40.6743, (-73.4358)),
-('Wallingford Center', 'CT', ARRAY[06494, 06495], 41.4499, (-72.8189)),
-('Cimarron Hills', 'CO', ARRAY[80922], 38.8597, (-104.6995)),
-('Kilgore', 'TX', ARRAY[75663], 32.3979, (-94.8603)),
-('Radford', 'VA', ARRAY[24141, 24143], 37.1229, (-80.5587)),
-('Palestine', 'TX', ARRAY[75803, 75882], 31.7544, (-95.6471)),
-('Hyattsville', 'MD', ARRAY[20782, 20787, 20788], 38.9612, (-76.9548)),
-('Lake Placid', 'FL', ARRAY[33862], 27.2977, (-81.3715)),
-('Somerset', 'MA', ARRAY[02725], 41.7404, (-71.1612)),
-('St. Michael', 'MN', ARRAY[55376], 45.2014, (-93.6920)),
-('Rutland', 'VT', ARRAY[05702], 43.6091, (-72.9782)),
-('Imperial', 'CA', ARRAY[92255], 32.8390, (-115.5719)),
-('Orange', 'TX', ARRAY[77632], 30.1210, (-93.7616)),
-('Otsego', 'MN', ARRAY[55330, 55362], 45.2660, (-93.6200)),
-('St. Matthews', 'KY', ARRAY[40207], 38.2497, (-85.6383)),
-('Tullahoma', 'TN', ARRAY[37388], 35.3721, (-86.2173)),
-('Calverton', 'MD', ARRAY[20904], 39.0578, (-76.9488)),
-('Manchester', 'MO', ARRAY[63011], 38.5830, (-90.5065)),
-('North Wilkesboro', 'NC', ARRAY[28656], 36.1728, (-81.1390)),
-('Bensenville', 'IL', ARRAY[60105, 60399], 41.9593, (-87.9433)),
-('Eastlake', 'OH', ARRAY[44097], 41.6581, (-81.4323)),
-('Fayetteville', 'GA', ARRAY[30215], 33.4500, (-84.4709)),
-('Sunland Park', 'NM', ARRAY[88008], 31.8194, (-106.5943)),
-('El Reno', 'OK', ARRAY[73022], 35.5430, (-97.9660)),
-('Marco Island', 'FL', ARRAY[34140, 34146], 25.9330, (-81.6993)),
-('Ingleside', 'TX', ARRAY[78362], 27.8700, (-97.2077)),
-('Islip', 'NY', ARRAY[11706], 40.7357, (-73.2158)),
-('Lenoir', 'NC', ARRAY[28633], 35.9096, (-81.5247)),
-('Melville', 'NY', ARRAY[11775], 40.7823, (-73.4088)),
-('Ocean Springs', 'MS', ARRAY[39566], 30.4082, (-88.7861)),
-('Knightdale', 'NC', ARRAY[27545], 35.7918, (-78.4955)),
-('Crossville', 'TN', ARRAY[38555], 35.9527, (-85.0294)),
-('Tillmans Corner', 'AL', ARRAY[36619], 30.5818, (-88.2128)),
-('Glenvar Heights', 'FL', ARRAY[33155], 25.7090, (-80.3156)),
-('Jenison', 'MI', ARRAY[49429], 42.9063, (-85.8269)),
-('Merrifield', 'VA', ARRAY[22042, 22180, 22082, 22116], 38.8731, (-77.2426)),
-('Moraga', 'CA', ARRAY[94575], 37.8439, (-122.1225)),
-('Steubenville', 'OH', ARRAY[43953], 40.3653, (-80.6520)),
-('Takoma Park', 'MD', ARRAY[20913], 38.9810, (-77.0028)),
-('Oxon Hill', 'MD', ARRAY[20745, 20750], 38.7887, (-76.9733)),
-('El Dorado', 'AR', ARRAY[71731], 33.2184, (-92.6640)),
-('Terrell', 'TX', ARRAY[75161], 32.7341, (-96.2939)),
-('Maitland', 'FL', ARRAY[32794], 28.6295, (-81.3717)),
-('Concord', 'MO', ARRAY[63123], 38.5117, (-90.3574)),
-('Gretna', 'LA', ARRAY[70053, 70054], 29.9101, (-90.0515)),
-('Hinsdale', 'IL', ARRAY[60522], 41.8005, (-87.9273)),
-('Santa Fe Springs', 'CA', ARRAY[90671], 33.9330, (-118.0625)),
-('Franklin Park', 'IL', ARRAY[60132], 41.9361, (-87.8794)),
-('Beltsville', 'MD', ARRAY[20740, 20697, 20704, 20797], 39.0394, (-76.9211)),
-('Butner', 'NC', ARRAY[27509], 36.1285, (-78.7502)),
-('Marion', 'IL', ARRAY[62959], 37.7173, (-88.9279)),
-('Vero Beach', 'FL', ARRAY[32963, 32964, 32965, 32969], 27.6463, (-80.3930)),
-('Clemson', 'SC', ARRAY[29633], 34.6837, (-82.8124)),
-('Lake Mary', 'FL', ARRAY[32795, 32799], 28.7592, (-81.3359)),
-('Woodmere', 'NY', ARRAY[11598, 11516], 40.6374, (-73.7219)),
-('Ojus', 'FL', ARRAY[33180], 25.9563, (-80.1606)),
-('Ferndale', 'MD', ARRAY[21062], 39.1869, (-76.6330)),
-('Martinsburg', 'WV', ARRAY[25401, 25404, 25402], 39.4582, (-77.9776)),
-('Tinton Falls', 'NJ', ARRAY[07724, 07753], 40.2709, (-74.0948)),
-('Live Oak', 'CA', ARRAY[95062], 36.9860, (-121.9804)),
-('Stafford', 'TX', ARRAY[77497], 29.6271, (-95.5653)),
-('Wailuku', 'HI', ARRAY[96733], 20.8834, (-156.5059)),
-('La Marque', 'TX', ARRAY[77568], 29.3690, (-94.9957)),
-('Woodcrest', 'CA', ARRAY[92503, 92504, 92506], 33.8789, (-117.3686)),
-('Versailles', 'KY', ARRAY[40384], 38.0487, (-84.7259)),
-('North Druid Hills', 'GA', ARRAY[30324, 30033, 30359], 33.8186, (-84.3254)),
-('Portland', 'TX', ARRAY[78390], 27.8911, (-97.3284)),
-('Buckhall', 'VA', ARRAY[20111, 20112], 38.7250, (-77.4472)),
-('South Ogden', 'UT', ARRAY[84403, 84408], 41.1722, (-111.9577)),
-('Oak Grove', 'OR', ARRAY[97267, 97268], 45.4156, (-122.6349)),
-('North Canton', 'OH', ARRAY[44720], 40.8742, (-81.3971)),
-('Kingstowne', 'VA', ARRAY[22315], 38.7625, (-77.1445)),
-('Ashwaubenon', 'WI', ARRAY[54115, 54304], 44.4796, (-88.0889)),
-('Dickson', 'TN', ARRAY[37055, 37056], 36.0640, (-87.3668)),
-('Ammon', 'ID', ARRAY[83406], 43.4746, (-111.9569)),
-('Country Walk', 'FL', ARRAY[33186], 25.6331, (-80.4353)),
-('Yelm', 'WA', ARRAY[98597], 46.9398, (-122.6261)),
-('Upper Grand Lagoon', 'FL', ARRAY[32407, 32411], 30.1690, (-85.7407)),
-('Pinewood', 'FL', ARRAY[33147, 33167, 33150], 25.8697, (-80.2174)),
-('Vincent', 'CA', ARRAY[91702], 34.0982, (-117.9238)),
-('Sienna Plantation', 'TX', ARRAY[77583], 29.4834, (-95.5065)),
-('Sylacauga', 'AL', ARRAY[35150], 33.1778, (-86.2606)),
-('Redland', 'MD', ARRAY[20877], 39.1335, (-77.1465)),
-('Cinco Ranch', 'TX', ARRAY[77450], 29.7395, (-95.7607)),
-('Americus', 'GA', ARRAY[31719], 32.0736, (-84.2249)),
-('Republic', 'MO', ARRAY[65619, 65802], 37.1452, (-93.4446)),
-('Wolf Trap', 'VA', ARRAY[22182], 38.9395, (-77.2842)),
-('Myrtle Grove', 'FL', ARRAY[32511, 32512], 30.4158, (-87.3028)),
-('Fort Hunt', 'VA', ARRAY[22307, 22308], 38.7361, (-77.0589)),
-('Crescent City', 'CA', ARRAY[95532], 41.7727, (-124.1902)),
-('Groveton', 'VA', ARRAY[22307], 38.7605, (-77.0980)),
-('Picayune', 'MS', ARRAY[39466], 30.5322, (-89.6724)),
-('North Myrtle Beach', 'SC', ARRAY[29568, 29566, 29598], 33.8230, (-78.7089)),
-('Bemidji', 'MN', ARRAY[56619], 47.4828, (-94.8796)),
-('Ocean Acres', 'NJ', ARRAY[08005], 39.7430, (-74.2804)),
-('Goodlettsville', 'TN', ARRAY[37070], 36.3327, (-86.7029)),
-('Fairburn', 'GA', ARRAY[30213], 33.5496, (-84.5914)),
-('Bristol', 'VA', ARRAY[24202, 24203, 24205, 24209], 36.6180, (-82.1606)),
-('Lake Wales', 'FL', ARRAY[33853, 33859, 33885], 27.9195, (-81.5961)),
-('New Port Richey', 'FL', ARRAY[34652], 28.2468, (-82.7170)),
-('Troy', 'AL', ARRAY[36081, 36082], 31.8021, (-85.9665)),
-('Athens', 'TN', ARRAY[37371], 35.4573, (-84.6045)),
-('Auburndale', 'FL', ARRAY[33868], 28.0962, (-81.8011)),
-('Cutlerville', 'MI', ARRAY[49315], 42.8405, (-85.6739)),
-('Artesia', 'CA', ARRAY[90702], 33.8676, (-118.0806)),
-('Norcross', 'GA', ARRAY[30003, 30010], 33.9379, (-84.2065)),
-('Solvang', 'CA', ARRAY[93464], 34.5936, (-120.1401)),
-('World Golf Village', 'FL', ARRAY[32095], 29.9653, (-81.4898)),
-('Storrs', 'CT', ARRAY[06268], 41.8045, (-72.2552)),
-('Pearl River', 'NY', ARRAY[10962], 41.0615, (-74.0047)),
-('Vienna', 'VA', ARRAY[22183], 38.8996, (-77.2597)),
-('Eden', 'NC', ARRAY[27289], 36.5028, (-79.7412)),
-('Jasper', 'IN', ARRAY[47547, 47549], 38.3933, (-86.9402)),
-('Douglas', 'AZ', ARRAY[85607, 85655], 31.3602, (-109.5394)),
-('Glen Allen', 'VA', ARRAY[23059, 23058], 37.6660, (-77.4838)),
-('Groveland', 'FL', ARRAY[34737], 28.6021, (-81.8204)),
-('Mount Pleasant', 'TX', ARRAY[75456], 33.1613, (-94.9717)),
-('Hernando', 'MS', ARRAY[38651], 34.8500, (-89.9922)),
-('Glenmont', 'MD', ARRAY[20902], 39.0698, (-77.0467)),
-('Monroe', 'GA', ARRAY[30655], 33.7990, (-83.7160)),
-('Celina', 'TX', ARRAY[75078], 33.3188, (-96.7865)),
-('Los Osos', 'CA', ARRAY[93412], 35.3068, (-120.8249)),
-('Addison', 'TX', ARRAY[75001], 32.9590, (-96.8355)),
-('Mount Holly', 'NC', ARRAY[28012], 35.3136, (-81.0072)),
-('Conyers', 'GA', ARRAY[30012, 30094], 33.6645, (-83.9966)),
-('Centerton', 'AR', ARRAY[72719], 36.3567, (-94.2971)),
-('Spanish Springs', 'NV', ARRAY[89436], 39.6567, (-119.6695)),
-('Stuart', 'FL', ARRAY[34996, 34957, 34995], 27.1958, (-80.2438)),
-('Canyon', 'TX', ARRAY[79015], 34.9877, (-101.9178)),
-('West Haven', 'UT', ARRAY[84402], 41.2082, (-112.0540)),
-('Four Corners', 'OR', ARRAY[97317], 44.9291, (-122.9731)),
-('Sierra Vista Southeast', 'AZ', ARRAY[85615], 31.4525, (-110.2160)),
-('Washington', 'NC', ARRAY[27889], 35.5587, (-77.0545)),
-('Sayville', 'NY', ARRAY[11782], 40.7478, (-73.0840)),
-('Lakeway', 'TX', ARRAY[78738, 78734], 30.3547, (-97.9854)),
-('Archer Lodge', 'NC', ARRAY[27527], 35.6907, (-78.3749)),
-('Fillmore', 'CA', ARRAY[93016], 34.3989, (-118.9181)),
-('Bellevue', 'WI', ARRAY[54115], 44.4593, (-87.9554)),
-('Gainesville', 'VA', ARRAY[20155], 38.7931, (-77.6347)),
-('New Haven', 'IN', ARRAY[46803, 46806], 41.0675, (-85.0175)),
-('Avocado Heights', 'CA', ARRAY[90601], 34.0381, (-118.0026)),
-('Millbrook', 'AL', ARRAY[36022], 32.5028, (-86.3737)),
-('Parkway', 'CA', ARRAY[94206], 38.4993, (-121.4520)),
-('Pataskala', 'OH', ARRAY[43073], 40.0110, (-82.7155)),
-('Tanque Verde', 'AZ', ARRAY[85748, 85751], 32.2687, (-110.7437)),
-('Grandville', 'MI', ARRAY[49468], 42.9003, (-85.7564)),
-('Highland Springs', 'VA', ARRAY[23223], 37.5516, (-77.3285)),
-('White Center', 'WA', ARRAY[98146, 98168], 47.5086, (-122.3480)),
-('Laguna Woods', 'CA', ARRAY[92609, 92654], 33.6098, (-117.7299)),
-('Hope Mills', 'NC', ARRAY[28306], 34.9690, (-78.9559)),
-('Floral Park', 'NY', ARRAY[11002], 40.7226, (-73.7029)),
-('Humble', 'TX', ARRAY[77396, 77325, 77347], 29.9921, (-95.2655)),
-('Aldine', 'TX', ARRAY[77037, 77039], 29.9122, (-95.3785)),
-('New River', 'AZ', ARRAY[85087, 85080], 33.8835, (-112.0858)),
-('Adelphi', 'MD', ARRAY[20903], 39.0017, (-76.9649)),
-('Greenwood Village', 'CO', ARRAY[80111], 39.6152, (-104.9130)),
-('North New Hyde Park', 'NY', ARRAY[11040], 40.7460, (-73.6876)),
-('Blytheville', 'AR', ARRAY[72316], 35.9321, (-89.9051)),
-('Stanford', 'CA', ARRAY[94309], 37.4252, (-122.1674)),
-('Elkton', 'MD', ARRAY[21922], 39.6067, (-75.8208)),
-('Fate', 'TX', ARRAY[75189, 75132], 32.9429, (-96.3858)),
-('Port Washington', 'NY', ARRAY[11051, 11054], 40.8268, (-73.6764)),
-('Riverdale', 'GA', ARRAY[30296], 33.5640, (-84.4103)),
-('East Highland Park', 'VA', ARRAY[23223], 37.5770, (-77.3865)),
-('Longwood', 'FL', ARRAY[32752, 32791], 28.7014, (-81.3487)),
-('Seven Oaks', 'SC', ARRAY[29210], 34.0474, (-81.1434)),
-('Overland', 'MO', ARRAY[63132], 38.6966, (-90.3689)),
-('Dunn', 'NC', ARRAY[28335], 35.3113, (-78.6129)),
-('Belvedere Park', 'GA', ARRAY[30030], 33.7488, (-84.2598)),
-('Phelan', 'CA', ARRAY[92329], 34.4398, (-117.5248)),
-('Buford', 'GA', ARRAY[30519, 30515], 34.1185, (-83.9916)),
-('East Riverdale', 'MD', ARRAY[20737], 38.9600, (-76.9108)),
-('Red Hill', 'SC', ARRAY[29526, 29579], 33.7777, (-79.0111)),
-('Holly Springs', 'GA', ARRAY[30115], 34.1685, (-84.4845)),
-('Fort Carson', 'CO', ARRAY[80913], 38.7403, (-104.7840)),
-('Rossville', 'MD', ARRAY[21237], 39.3572, (-76.4767)),
-('Hueytown', 'AL', ARRAY[35061], 33.4237, (-87.0220)),
-('Bradley', 'IL', ARRAY[60914], 41.1641, (-87.8452)),
-('Kailua', 'HI', ARRAY[96740, 96745, 96840], 19.6634, (-155.9447)),
-('Hugo', 'MN', ARRAY[55038], 45.1671, (-92.9588)),
-('Englewood', 'FL', ARRAY[34224, 34295], 26.9603, (-82.3535)),
-('Fort Mohave', 'AZ', ARRAY[86427], 35.0004, (-114.5748)),
-('Lamont', 'CA', ARRAY[93241], 35.2651, (-118.9159)),
-('Gantt', 'SC', ARRAY[29605], 34.7837, (-82.4027)),
-('College Park', 'GA', ARRAY[30349, 30320], 33.6363, (-84.4640)),
-('Southchase', 'FL', ARRAY[32837], 28.3793, (-81.3903)),
-('Damascus', 'MD', ARRAY[20882], 39.2737, (-77.2006)),
-('West Richland', 'WA', ARRAY[99353], 46.3115, (-119.3998)),
-('Oldsmar', 'FL', ARRAY[34685], 28.0507, (-82.6698)),
-('Park City', 'UT', ARRAY[84068], 40.6505, (-111.5020)),
-('Vandalia', 'OH', ARRAY[45377], 39.8790, (-84.1930)),
-('Boulder City', 'NV', ARRAY[89005], 35.8407, (-114.9257)),
-('South Farmingdale', 'NY', ARRAY[11735], 40.7175, (-73.4471)),
-('Fords', 'NJ', ARRAY[07095, 08840], 40.5415, (-74.3124)),
-('Jamestown', 'ND', ARRAY[58402, 58405], 46.9063, (-98.6936)),
-('Beech Grove', 'IN', ARRAY[46203], 39.7157, (-86.0871)),
-('Newport', 'KY', ARRAY[41072], 39.0855, (-84.4868)),
-('Berea', 'SC', ARRAY[29611], 34.8802, (-82.4653)),
-('Taft', 'CA', ARRAY[93268], 35.1267, (-119.4242)),
-('Franklin Park', 'PA', ARRAY[15090, 15143], 40.5903, (-80.0999)),
-('Salem Lakes', 'WI', ARRAY[53192, 53179, 53170, 53102], 42.5366, (-88.1307)),
-('Azalea Park', 'FL', ARRAY[32807], 28.5473, (-81.2956)),
-('Lockhart', 'FL', ARRAY[32810], 28.6271, (-81.4354)),
-('Campbellsville', 'KY', ARRAY[42719], 37.3446, (-85.3511)),
-('Tonawanda', 'NY', ARRAY[14151], 43.0105, (-78.8805)),
-('Payson', 'AZ', ARRAY[85072, 85547], 34.2434, (-111.3195)),
-('Salida', 'CA', ARRAY[95358, 95356], 37.7145, (-121.0870)),
-('Southern Pines', 'NC', ARRAY[28387], 35.1927, (-79.4040)),
-('Horsham', 'PA', ARRAY[19040], 40.1825, (-75.1387)),
-('Halawa', 'HI', ARRAY[96818, 96861], 21.3753, (-157.9185)),
-('Pewaukee', 'WI', ARRAY[53702, 53186, 53188], 43.0701, (-88.2411)),
-('Falls Church', 'VA', ARRAY[22040], 38.8847, (-77.1751)),
-('Franklin Park', 'NJ', ARRAY[08873], 40.4439, (-74.5432)),
-('Cayey', 'PR', ARRAY[00737], 18.1150, (-66.1630)),
-('Port Orchard', 'WA', ARRAY[98367], 47.5163, (-122.6610)),
-('Mineral Wells', 'TX', ARRAY[76067], 32.8169, (-98.0776)),
-('Henderson', 'TX', ARRAY[75654], 32.1576, (-94.7960)),
-('North Fair Oaks', 'CA', ARRAY[94063], 37.4754, (-122.2035)),
-('Hershey', 'PA', ARRAY[17036], 40.2806, (-76.6458)),
-('Olympia Heights', 'FL', ARRAY[33155], 25.7241, (-80.3390)),
-('Hot Springs Village', 'AR', ARRAY[71910], 34.6568, (-92.9644)),
-('Jefferson Valley-Yorktown', 'NY', ARRAY[10535, 10588], 41.3179, (-73.8007)),
-('Thibodaux', 'LA', ARRAY[70302, 70310], 29.7941, (-90.8163)),
-('Warren', 'PA', ARRAY[16366, 16367], 41.8433, (-79.1445)),
-('Chippewa Falls', 'WI', ARRAY[54774], 44.9358, (-91.3902)),
-('Ocean View', 'DE', ARRAY[19945], 38.5355, (-75.0984)),
-('Forest City', 'FL', ARRAY[32703], 28.6619, (-81.4443)),
-('Glasgow', 'DE', ARRAY[19702], 39.6015, (-75.7474)),
-('California', 'MD', ARRAY[20619, 20634], 38.2969, (-76.4949)),
-('Douglas', 'GA', ARRAY[31535, 31534], 31.5065, (-82.8543)),
-('Black Forest', 'CO', ARRAY[80106], 39.0608, (-104.6752)),
-('Mill Valley', 'CA', ARRAY[94942], 37.9085, (-122.5421)),
-('Hollins', 'VA', ARRAY[24019], 37.3434, (-79.9535)),
-('Destin', 'FL', ARRAY[32540], 30.3950, (-86.4701)),
-('Red Wing', 'MN', ARRAY[55066], 44.5816, (-92.6036)),
-('Lewisville', 'NC', ARRAY[27040], 36.1030, (-80.4164)),
-('Glenn Dale', 'MD', ARRAY[20706, 20769], 38.9833, (-76.8040)),
-('Hopatcong', 'NJ', ARRAY[07843, 07837], 40.9541, (-74.6593)),
-('Gardendale', 'AL', ARRAY[35119], 33.6678, (-86.8069)),
-('Hendersonville', 'NC', ARRAY[28791, 28739, 28738], 35.3242, (-82.4576)),
-('Crowley', 'LA', ARRAY[70527], 30.2175, (-92.3752)),
-('New Franklin', 'OH', ARRAY[44319, 44216], 40.9525, (-81.5838)),
-('Chelsea', 'AL', ARRAY[35043], 33.3255, (-86.6299)),
-('Pineville', 'LA', ARRAY[71348, 71359, 71361], 31.3414, (-92.4096)),
-('Greensburg', 'PA', ARRAY[15606], 40.3113, (-79.5444)),
-('Steamboat Springs', 'CO', ARRAY[80488, 80477], 40.4777, (-106.8243)),
-('Elk Plain', 'WA', ARRAY[98338], 47.0448, (-122.3671)),
-('Piney Green', 'NC', ARRAY[28544], 34.7498, (-77.3208)),
-('Monroe', 'OH', ARRAY[45044, 45036], 39.4461, (-84.3666)),
-('D''Iberville', 'MS', ARRAY[39540], 30.4709, (-88.9011)),
-('Glasgow', 'KY', ARRAY[42142], 37.0047, (-85.9263)),
-('Cayce', 'SC', ARRAY[29209, 29172, 29033], 33.9458, (-81.0433)),
-('Dallas', 'GA', ARRAY[30157], 33.9153, (-84.8416)),
-('Greenlawn', 'NY', ARRAY[11743], 40.8630, (-73.3642)),
-('Thonotosassa', 'FL', ARRAY[33584, 33574], 28.0465, (-82.2910)),
-('Gonzalez', 'FL', ARRAY[32534, 32560], 30.5822, (-87.2906)),
-('Frederick', 'CO', ARRAY[80530, 80516], 40.1089, (-104.9694)),
-('Hobe Sound', 'FL', ARRAY[33475], 27.0729, (-80.1425)),
-('Glenpool', 'OK', ARRAY[74033], 35.9485, (-96.0052)),
-('Deming', 'NM', ARRAY[88031], 32.2631, (-107.7525)),
-('Fulshear', 'TX', ARRAY[77494, 77406], 29.6930, (-95.8792)),
-('Allouez', 'WI', ARRAY[54301], 44.4721, (-88.0261)),
-('Nesconset', 'NY', ARRAY[11787], 40.8467, (-73.1522)),
-('Collingswood', 'NJ', ARRAY[08108], 39.9160, (-75.0759)),
-('Oak Island', 'NC', ARRAY[28465], 33.9434, (-78.1366)),
-('Mountain Park', 'GA', ARRAY[30087], 33.8458, (-84.1313)),
-('Ephrata', 'PA', ARRAY[17549], 40.1812, (-76.1811)),
-('Lakeland South', 'WA', ARRAY[98003], 47.2784, (-122.2830)),
-('Kemp Mill', 'MD', ARRAY[20902], 39.0412, (-77.0215)),
-('Jericho', 'NY', ARRAY[11853], 40.7875, (-73.5416)),
-('Bridgetown', 'OH', ARRAY[45248], 39.1551, (-84.6359)),
-('Teays Valley', 'WV', ARRAY[25560], 38.4482, (-81.9240)),
-('Whitefish Bay', 'WI', ARRAY[53217], 43.1132, (-87.9004)),
-('Fruitville', 'FL', ARRAY[34240], 27.3328, (-82.4616)),
-('Levelland', 'TX', ARRAY[79338], 33.5806, (-102.3636)),
-('Cherry Hill Mall', 'NJ', ARRAY[08034], 39.9384, (-75.0117)),
-('Palmetto', 'FL', ARRAY[34220], 27.5251, (-82.5750)),
-('El Sobrante', 'CA', ARRAY[94820], 37.9723, (-122.2960)),
-('College', 'AK', ARRAY[99775], 64.8694, (-147.8217)),
-('North Auburn', 'CA', ARRAY[95602], 38.9306, (-121.0821)),
-('Forest Park', 'IL', ARRAY[60682], 41.8683, (-87.8157)),
-('Beach Park', 'IL', ARRAY[60083, 60087], 42.4261, (-87.8584)),
-('Soddy-Daisy', 'TN', ARRAY[37379], 35.2571, (-85.1739)),
-('Rendon', 'TX', ARRAY[76140, 76063], 32.5789, (-97.2350)),
-('Vadnais Heights', 'MN', ARRAY[55110], 45.0570, (-93.0748)),
-('Shiloh', 'IL', ARRAY[62269], 38.5534, (-89.9160)),
-('LaBelle', 'FL', ARRAY[33975], 26.7219, (-81.4506)),
-('Conway', 'FL', ARRAY[32812], 28.4968, (-81.3316)),
-('Oatfield', 'OR', ARRAY[97267], 45.4127, (-122.5942)),
-('Sun Village', 'CA', ARRAY[93543], 34.5596, (-117.9559)),
-('Ridge', 'NY', ARRAY[11786], 40.9068, (-72.8816)),
-('Elizabethton', 'TN', ARRAY[37682], 36.3367, (-82.2369)),
-('Belle Chasse', 'LA', ARRAY[70093], 29.8472, (-90.0069)),
-('Avenal', 'CA', ARRAY[93239], 36.0311, (-120.1162)),
-('Homosassa Springs', 'FL', ARRAY[34446, 34447], 28.8118, (-82.5392)),
-('Hockessin', 'DE', ARRAY[19736], 39.7837, (-75.6815)),
-('Grover Beach', 'CA', ARRAY[93483], 35.1204, (-120.6199)),
-('Santa Fe', 'TX', ARRAY[77510], 29.3892, (-95.1005)),
-('Lindale', 'TX', ARRAY[75771], 32.4934, (-95.4069)),
-('Princeton Meadows', 'NJ', ARRAY[08512], 40.3332, (-74.5628)),
-('Englewood', 'OH', ARRAY[45322], 39.8644, (-84.3071)),
-('Huron', 'SD', ARRAY[57399], 44.3622, (-98.2102)),
-('Twentynine Palms', 'CA', ARRAY[92278], 34.1478, (-116.0659)),
-('Whitehall', 'PA', ARRAY[15227], 40.3602, (-79.9898)),
-('Carpinteria', 'CA', ARRAY[93014], 34.3962, (-119.5118)),
-('Lyndhurst', 'OH', ARRAY[44122], 41.5172, (-81.4922)),
-('South Park Township', 'PA', ARRAY[15129], 40.2989, (-79.9944)),
-('Azle', 'TX', ARRAY[76098], 32.8955, (-97.5379)),
-('Vidalia', 'GA', ARRAY[30436], 32.2125, (-82.4019)),
-('Big Bear City', 'CA', ARRAY[92386], 34.2536, (-116.7903)),
-('Greenwich', 'CT', ARRAY[06831, 06836], 41.0253, (-73.6298)),
-('Solana Beach', 'CA', ARRAY[92014], 32.9942, (-117.2575)),
-('Rochester', 'MI', ARRAY[48308], 42.6866, (-83.1198)),
-('Richton Park', 'IL', ARRAY[60443], 41.4816, (-87.7387)),
-('Montgomeryville', 'PA', ARRAY[19446, 19454], 40.2502, (-75.2405)),
-('Union Park', 'FL', ARRAY[32817], 28.5645, (-81.2354)),
-('Jasper', 'AL', ARRAY[35504, 35501, 35502], 33.8503, (-87.2708)),
-('Bensville', 'MD', ARRAY[20675, 20695], 38.6176, (-77.0077)),
-('Channahon', 'IL', ARRAY[60410], 41.4213, (-88.2593)),
-('Port Royal', 'SC', ARRAY[29905, 29906, 29935], 32.3557, (-80.7029)),
-('Clayton', 'OH', ARRAY[45322, 45415], 39.8689, (-84.3292)),
-('Baker', 'LA', ARRAY[70704], 30.5833, (-91.1581)),
-('Globe', 'AZ', ARRAY[85532], 33.3869, (-110.7515)),
-('Goldenrod', 'FL', ARRAY[32733], 28.6114, (-81.2916)),
-('Fort Drum', 'NY', ARRAY[13602], 44.0451, (-75.7847)),
-('Warrensville Heights', 'OH', ARRAY[44122], 41.4363, (-81.5222)),
-('Lahaina', 'HI', ARRAY[96767], 20.8848, (-156.6618)),
-('Mahomet', 'IL', ARRAY[61853], 40.1885, (-88.3904)),
-('Ardmore', 'PA', ARRAY[19003], 40.0033, (-75.2947)),
-('Lone Tree', 'CO', ARRAY[80134], 39.5309, (-104.8710)),
-('Newington', 'VA', ARRAY[22150, 22079, 22122], 38.7358, (-77.1993)),
-('Moody', 'AL', ARRAY[35173, 35004, 35120], 33.5986, (-86.4963)),
-('Monfort Heights', 'OH', ARRAY[45247, 45239], 39.1822, (-84.6075)),
-('Davidson', 'NC', ARRAY[28035], 35.4846, (-80.8252)),
-('Edgewood', 'WA', ARRAY[98371], 47.2309, (-122.2832)),
-('Suamico', 'WI', ARRAY[54313], 44.6352, (-88.0664)),
-('San Marino', 'CA', ARRAY[91118], 34.1224, (-118.1132)),
-('Forest Hill', 'TX', ARRAY[76119], 32.6619, (-97.2662)),
-('Timberlake', 'VA', ARRAY[24550, 24502], 37.3167, (-79.2482)),
-('Braselton', 'GA', ARRAY[30517], 34.1088, (-83.8128)),
-('Dunmore', 'PA', ARRAY[18510, 18505, 18512], 41.4152, (-75.6072)),
-('Fort Lewis', 'WA', ARRAY[98433, 98431], 47.0955, (-122.5672)),
-('Mount Vernon', 'VA', ARRAY[22121], 38.7140, (-77.1043)),
-('Rocky Point', 'NY', ARRAY[11961, 11778], 40.9357, (-72.9364)),
-('Colonial Park', 'PA', ARRAY[17112], 40.2997, (-76.8068)),
-('Weigelstown', 'PA', ARRAY[17315], 39.9843, (-76.8315)),
-('West Carrollton', 'OH', ARRAY[45342], 39.6701, (-84.2542)),
-('Parker', 'SC', ARRAY[29611], 34.8514, (-82.4512)),
-('Spearfish', 'SD', ARRAY[57799], 44.4912, (-103.8167)),
-('Lilburn', 'GA', ARRAY[30048], 33.8887, (-84.1379)),
-('Glendale', 'WI', ARRAY[53217, 53212], 43.1288, (-87.9277)),
-('Wilton Manors', 'FL', ARRAY[33334, 33311], 26.1593, (-80.1395)),
-('Lansdowne', 'VA', ARRAY[20176], 39.0846, (-77.4839)),
-('Finneytown', 'OH', ARRAY[45231], 39.2159, (-84.5145)),
-('Herrin', 'IL', ARRAY[62933], 37.7983, (-89.0305)),
-('Fergus Falls', 'MN', ARRAY[56538], 46.2853, (-96.0760)),
-('Commerce', 'CA', ARRAY[90022, 90023, 90091], 33.9963, (-118.1519)),
-('Lakeland', 'TN', ARRAY[38014], 35.2585, (-89.7308)),
-('Elfers', 'FL', ARRAY[34653, 34652, 34680], 28.2140, (-82.7230)),
-('Clarkston', 'GA', ARRAY[30021], 33.8117, (-84.2404)),
-('Yulee', 'FL', ARRAY[32041], 30.6350, (-81.5678)),
-('Windsor Locks', 'CT', ARRAY[06199], 41.9267, (-72.6544)),
-('Minneola', 'FL', ARRAY[34755], 28.6067, (-81.7322)),
-('Panama City Beach', 'FL', ARRAY[32413], 30.2369, (-85.8775)),
-('Richmond', 'TX', ARRAY[77469], 29.5825, (-95.7602)),
-('Riviera Beach', 'MD', ARRAY[21226], 39.1628, (-76.5263)),
-('Jackson', 'WY', ARRAY[83002], 43.4721, (-110.7745)),
-('Mercerville', 'NJ', ARRAY[08619], 40.2360, (-74.6916)),
-('Lake Wylie', 'SC', ARRAY[29710], 35.0997, (-81.0677)),
-('Truckee', 'CA', ARRAY[95161, 96160], 39.3455, (-120.1848)),
-('Prairie Ridge', 'WA', ARRAY[98391], 47.1443, (-122.1408)),
-('Hamilton Square', 'NJ', ARRAY[08691], 40.2248, (-74.6526)),
-('Endicott', 'NY', ARRAY[13737, 13761, 13763], 42.0980, (-76.0639)),
-('Hudson', 'FL', ARRAY[34674], 28.3594, (-82.6888)),
-('Boone', 'IA', ARRAY[50037, 50099], 42.0530, (-93.8770)),
-('Paris', 'KY', ARRAY[40362], 38.2016, (-84.2719)),
-('Irmo', 'SC', ARRAY[29063, 29603], 34.1018, (-81.1957)),
-('Newington Forest', 'VA', ARRAY[22079], 38.7371, (-77.2339)),
-('Four Corners', 'TX', ARRAY[77083], 29.6705, (-95.6596)),
-('Shepherdsville', 'KY', ARRAY[40166], 37.9806, (-85.6999)),
-('Kelso', 'WA', ARRAY[98632], 46.1236, (-122.8910)),
-('Overlea', 'MD', ARRAY[21234, 21206], 39.3642, (-76.5176)),
-('Corinth', 'MS', ARRAY[38835], 34.9474, (-88.5143)),
-('Virginia', 'MN', ARRAY[55777], 47.5169, (-92.5128)),
-('Lakeland Highlands', 'FL', ARRAY[33831], 27.9572, (-81.9496)),
-('Blue Ash', 'OH', ARRAY[45242, 45236], 39.2480, (-84.3827)),
-('Harrison', 'WI', ARRAY[54169, 54130, 54915, 54129], 44.1935, (-88.2941)),
-('Maltby', 'WA', ARRAY[98296, 98072, 98077], 47.8027, (-122.1044)),
-('Gulfport', 'FL', ARRAY[33711], 27.7463, (-82.7100)),
-('Orange City', 'FL', ARRAY[32774], 28.9347, (-81.2881)),
-('Bastrop', 'LA', ARRAY[71221], 32.7749, (-91.9058)),
-('Forrest City', 'AR', ARRAY[72335], 35.0135, (-90.7931)),
-('Leon Valley', 'TX', ARRAY[78240], 29.4954, (-98.6143)),
-('Newcastle', 'WA', ARRAY[98056], 47.5303, (-122.1633)),
-('New Kensington', 'PA', ARRAY[15069], 40.5711, (-79.7521)),
-('Pell City', 'AL', ARRAY[35128], 33.5609, (-86.2669)),
-('Blythe', 'CA', ARRAY[92226], 33.6220, (-114.6188)),
-('Larkspur', 'CA', ARRAY[94904, 94977], 37.9393, (-122.5313)),
-('North Valley', 'NM', ARRAY[87114, 87107], 35.1736, (-106.6231)),
-('Palmer Town', 'MA', ARRAY[01080, 01009, 01079], 42.1888, (-72.3112)),
-('West Monroe', 'LA', ARRAY[71292, 71294], 32.5120, (-92.1513)),
-('Athens', 'TX', ARRAY[75752], 32.2041, (-95.8321)),
-('Jesup', 'GA', ARRAY[31546, 31598, 31599], 31.5992, (-81.8895)),
-('Speedway', 'IN', ARRAY[46222], 39.7937, (-86.2479)),
-('Lincoln City', 'OR', ARRAY[97367], 44.9751, (-124.0073)),
-('Eatontown', 'NJ', ARRAY[07703], 40.2913, (-74.0558)),
-('Newport', 'OR', ARRAY[97366], 44.6242, (-124.0513)),
-('Freeport', 'TX', ARRAY[77542], 28.9454, (-95.3601)),
-('Coolidge', 'AZ', ARRAY[85128], 32.9395, (-111.5261)),
-('Melissa', 'TX', ARRAY[75454], 33.2891, (-96.5573)),
-('Eureka', 'MO', ARRAY[63069], 38.5015, (-90.6492)),
-('Emeryville', 'CA', ARRAY[94662], 37.8382, (-122.2932)),
-('Little Chute', 'WI', ARRAY[54130, 54913, 54911], 44.2905, (-88.3206)),
-('Sedro-Woolley', 'WA', ARRAY[98384], 48.5112, (-122.2321)),
-('Gatesville', 'TX', ARRAY[76596, 76598, 76599], 31.4419, (-97.7351)),
-('South Charleston', 'WV', ARRAY[25303], 38.3482, (-81.7110)),
-('Vail', 'AZ', ARRAY[85744], 32.0217, (-110.6937)),
-('Leeds', 'AL', ARRAY[35173, 35123], 33.5429, (-86.5636)),
-('East Bethel', 'MN', ARRAY[55011, 55005], 45.3557, (-93.2038)),
-('Villas', 'FL', ARRAY[33907], 26.5504, (-81.8679)),
-('Spring Lake', 'NC', ARRAY[28390], 35.1842, (-78.9959)),
-('Babylon', 'NY', ARRAY[11707], 40.6949, (-73.3270)),
-('Diamond Springs', 'CA', ARRAY[95623, 95619], 38.6920, (-120.8391)),
-('Oak Hills', 'OR', ARRAY[97006], 45.5403, (-122.8413)),
-('Lansing', 'KS', ARRAY[66048], 39.2428, (-94.8971)),
-('Norwalk', 'IA', ARRAY[50061], 41.4895, (-93.6913)),
-('Fairfax Station', 'VA', ARRAY[22032, 22039], 38.7942, (-77.3358)),
-('Robinson', 'TX', ARRAY[76706], 31.4501, (-97.1201)),
-('Port Washington', 'WI', ARRAY[53024], 43.3847, (-87.8852)),
-('South Miami', 'FL', ARRAY[33155], 25.7079, (-80.2952)),
-('Accokeek', 'MD', ARRAY[20607], 38.6745, (-77.0023)),
-('Richfield', 'WI', ARRAY[53033, 53017], 43.2372, (-88.2413)),
-('Robertsville', 'NJ', ARRAY[07726, 07746], 40.3395, (-74.2939)),
-('Red Bank', 'TN', ARRAY[37405], 35.1117, (-85.2961)),
-('Brown Deer', 'WI', ARRAY[53223], 43.1743, (-87.9750)),
-('Crestwood', 'MO', ARRAY[63123], 38.5569, (-90.3782)),
-('Berkley', 'CO', ARRAY[80221], 39.8045, (-105.0281)),
-('North Wantagh', 'NY', ARRAY[11783], 40.6983, (-73.5086)),
-('Urbana', 'MD', ARRAY[21754], 39.3237, (-77.3411)),
-('Walker Mill', 'MD', ARRAY[20747], 38.8754, (-76.8862)),
-('Tomball', 'TX', ARRAY[77377], 30.0951, (-95.6194)),
-('Wanaque', 'NJ', ARRAY[07420], 41.0440, (-74.2900)),
-('Arizona City', 'AZ', ARRAY[85123], 32.7506, (-111.6707)),
-('Tucson Estates', 'AZ', ARRAY[85735], 32.1792, (-111.1254)),
-('East Renton Highlands', 'WA', ARRAY[98059, 98038], 47.4718, (-122.0854)),
-('Arlington', 'TN', ARRAY[38028], 35.2594, (-89.6680)),
-('Cocoa Beach', 'FL', ARRAY[32932, 32954], 28.3326, (-80.6274)),
-('Bayou Blue', 'LA', ARRAY[70364], 29.6341, (-90.6732)),
-('Brock Hall', 'MD', ARRAY[20772], 38.8617, (-76.7549)),
-('Pine Castle', 'FL', ARRAY[32839], 28.4651, (-81.3740)),
-('Endwell', 'NY', ARRAY[13762], 42.1185, (-76.0219)),
-('Travilah', 'MD', ARRAY[20850], 39.0571, (-77.2458)),
-('South Yarmouth', 'MA', ARRAY[02664], 41.6692, (-70.2005)),
-('Wyandanch', 'NY', ARRAY[11704], 40.7467, (-73.3769)),
-('North Bellport', 'NY', ARRAY[11772], 40.7868, (-72.9457)),
-('Annapolis Neck', 'MD', ARRAY[21037], 38.9408, (-76.4997)),
-('View Park-Windsor Hills', 'CA', ARRAY[90043, 90056], 33.9955, (-118.3484)),
-('Ozark', 'AL', ARRAY[36361], 31.4508, (-85.6473)),
-('Silver City', 'NM', ARRAY[88062], 32.7784, (-108.2698)),
-('Martinsville', 'NJ', ARRAY[08805, 08807], 40.6030, (-74.5751)),
-('Bainbridge', 'GA', ARRAY[39817, 39818], 30.9046, (-84.5727)),
-('Bridgeton', 'MO', ARRAY[63074], 38.7673, (-90.4275)),
-('Archdale', 'NC', ARRAY[27263], 35.9033, (-79.9592)),
-('Newport', 'TN', ARRAY[37822], 35.9617, (-83.1977)),
-('Florham Park', 'NJ', ARRAY[07932], 40.7773, (-74.3953)),
-('Bogalusa', 'LA', ARRAY[70429], 30.7812, (-89.8633)),
-('Madison Heights', 'VA', ARRAY[24505], 37.4487, (-79.1057)),
-('Lake Los Angeles', 'CA', ARRAY[93591], 34.6097, (-117.8339)),
-('Emmaus', 'PA', ARRAY[18098, 18099], 40.5352, (-75.4978)),
-('Chalco', 'NE', ARRAY[60138], 41.1817, (-96.1353)),
-('Goulds', 'FL', ARRAY[33177], 25.5614, (-80.3880)),
-('Greentree', 'NJ', ARRAY[08034], 39.8989, (-74.9614)),
-('Webster', 'TX', ARRAY[77058], 29.5317, (-95.1188)),
-('Home Gardens', 'CA', ARRAY[92879], 33.8784, (-117.5116)),
-('Elwood', 'NY', ARRAY[11731], 40.8462, (-73.3389)),
-('Byram', 'MS', ARRAY[39170, 39212], 32.1890, (-90.2861)),
-('Lyndon', 'KY', ARRAY[40223, 40222], 38.2644, (-85.5891)),
-('Mack', 'OH', ARRAY[45233, 45248], 39.1503, (-84.6792)),
-('Richmond Heights', 'FL', ARRAY[33186], 25.6347, (-80.3720)),
-('Los Alamitos', 'CA', ARRAY[90721], 33.7972, (-118.0594)),
-('Collegedale', 'TN', ARRAY[37363, 37315], 35.0525, (-85.0487)),
-('Dent', 'OH', ARRAY[45247], 39.1922, (-84.6593)),
-('Snyder', 'TX', ARRAY[79550], 32.7133, (-100.9113)),
-('Fairfield', 'IA', ARRAY[52557], 41.0061, (-91.9669)),
-('Bellmawr', 'NJ', ARRAY[08099], 39.8665, (-75.0941)),
-('Doctor Phillips', 'FL', ARRAY[32819], 28.4476, (-81.4922)),
-('Mendota Heights', 'MN', ARRAY[55118, 55150], 44.8815, (-93.1400)),
-('Haysville', 'KS', ARRAY[67217], 37.5649, (-97.3527)),
-('Evanston', 'WY', ARRAY[82931], 41.2602, (-110.9646)),
-('Port Salerno', 'FL', ARRAY[34992], 27.1461, (-80.1895)),
-('Pennsville', 'NJ', ARRAY[08070], 39.6508, (-75.5077)),
-('Lake Morton-Berrydale', 'WA', ARRAY[98042], 47.3325, (-122.1032)),
-('Hartsville', 'TN', ARRAY[37074, 37057, 37031], 36.3921, (-86.1568)),
-('Fairview Shores', 'FL', ARRAY[32789, 32810], 28.6020, (-81.3948)),
-('Mango', 'FL', ARRAY[33584, 33550], 27.9915, (-82.3070)),
-('Mitchellville', 'MD', ARRAY[20721], 38.9358, (-76.8146)),
-('Viera East', 'FL', ARRAY[32940], 28.2610, (-80.7150)),
-('Weddington', 'NC', ARRAY[28173], 35.0228, (-80.7383)),
-('Aguadilla', 'PR', ARRAY[00605], 18.4382, (-67.1536)),
-('Poulsbo', 'WA', ARRAY[98061], 47.7417, (-122.6407)),
-('Piedmont', 'CA', ARRAY[94610], 37.8226, (-122.2300)),
-('Viera West', 'FL', ARRAY[32940], 28.2430, (-80.7368)),
-('Yorktown', 'IN', ARRAY[47396, 47304], 40.1830, (-85.5123)),
-('Town and Country', 'MO', ARRAY[63141, 63131, 63006], 38.6317, (-90.4790)),
-('Jefferson Hills', 'PA', ARRAY[15025, 15332], 40.2927, (-79.9329)),
-('Lindon', 'UT', ARRAY[84602], 40.3414, (-111.7187)),
-('Maysville', 'KY', ARRAY[41096], 38.6454, (-83.7911)),
-('Campton Hills', 'IL', ARRAY[60175, 60124, 60183], 41.9499, (-88.4166)),
-('Woodbury', 'NY', ARRAY[10926, 10930], 41.3284, (-74.1004)),
-('Merriam', 'KS', ARRAY[66202, 66204], 39.0186, (-94.6933)),
-('Wahpeton', 'ND', ARRAY[58076], 46.2722, (-96.6118)),
-('Grand Haven', 'MI', ARRAY[49456], 43.0553, (-86.2201)),
-('Gold Canyon', 'AZ', ARRAY[85119], 33.3715, (-111.4369)),
-('Oak Grove', 'SC', ARRAY[29170], 33.9809, (-81.1438)),
-('California City', 'CA', ARRAY[93504], 35.1578, (-117.8721)),
-('Liberty Lake', 'WA', ARRAY[99016], 47.6687, (-117.1032)),
-('New Albany', 'OH', ARRAY[43031, 43062], 40.0802, (-82.7883)),
-('Cusseta', 'GA', ARRAY[31805, 31995], 32.3470, (-84.7870)),
-('Montgomery', 'OH', ARRAY[45242], 39.2496, (-84.3457)),
-('Forestville', 'OH', ARRAY[45230], 39.0711, (-84.3389)),
-('Soquel', 'CA', ARRAY[95003], 36.9978, (-121.9482)),
-('La Riviera', 'CA', ARRAY[95826], 38.5683, (-121.3544)),
-('Gardere', 'LA', ARRAY[70810], 30.3582, (-91.1345)),
-('Pleasant View', 'UT', ARRAY[84414], 41.3249, (-112.0011)),
-('Wasilla', 'AK', ARRAY[99629, 99687], 61.5770, (-149.4660)),
-('Northbrook', 'OH', ARRAY[45231], 39.2467, (-84.5796)),
-('Manchester', 'VA', ARRAY[23235, 23236], 37.4902, (-77.5396)),
-('Sierra Madre', 'CA', ARRAY[91025], 34.1687, (-118.0504)),
-('Totowa', 'NJ', ARRAY[07511], 40.9039, (-74.2213)),
-('Halfway', 'MD', ARRAY[21795], 39.6163, (-77.7700)),
-('Citrus', 'CA', ARRAY[91702], 34.1161, (-117.8890)),
-('Saks', 'AL', ARRAY[36206], 33.7118, (-85.8536)),
-('Galena Park', 'TX', ARRAY[77547, 77029], 29.7452, (-95.2333)),
-('Elk City', 'OK', ARRAY[73662, 73648], 35.3850, (-99.4331)),
-('Gig Harbor', 'WA', ARRAY[98335], 47.3353, (-122.5964)),
-('Crestwood', 'IL', ARRAY[60418], 41.6454, (-87.7396)),
-('Rosaryville', 'MD', ARRAY[20772], 38.7672, (-76.8266)),
-('Smithfield', 'VA', ARRAY[23431], 36.9754, (-76.6162)),
-('Scottdale', 'GA', ARRAY[30021, 30033, 30002], 33.7950, (-84.2634)),
-('DeForest', 'WI', ARRAY[53532], 43.2301, (-89.3437)),
-('Cleveland', 'TX', ARRAY[77328], 30.3374, (-95.0931)),
-('Bothell East', 'WA', ARRAY[98012], 47.8064, (-122.1845)),
-('Pike Creek Valley', 'DE', ARRAY[19711], 39.7296, (-75.6993)),
-('Newcastle', 'OK', ARRAY[73065], 35.2404, (-97.5998)),
-('Alamosa', 'CO', ARRAY[81102], 37.4751, (-105.8769)),
-('Highland City', 'FL', ARRAY[33830, 33812, 33846], 27.9633, (-81.8781)),
-('Millington', 'TN', ARRAY[38054, 38055, 38083], 35.3350, (-89.8991)),
-('Wyomissing', 'PA', ARRAY[19610], 40.3317, (-75.9703)),
-('Burtonsville', 'MD', ARRAY[20866], 39.1166, (-76.9356)),
-('Fort Bliss', 'TX', ARRAY[79908, 79916, 79918], 31.8137, (-106.4119)),
-('Lake Stickney', 'WA', ARRAY[98204], 47.8709, (-122.2596)),
-('North Lindenhurst', 'NY', ARRAY[11701], 40.7072, (-73.3859)),
-('Covington', 'LA', ARRAY[70434], 30.4808, (-90.1122)),
-('Morro Bay', 'CA', ARRAY[93443], 35.3681, (-120.8481)),
-('Milton', 'FL', ARRAY[32570, 32572], 30.6286, (-87.0522)),
-('Arkadelphia', 'AR', ARRAY[71999, 71998], 34.1255, (-93.0725)),
-('Farmington', 'MI', ARRAY[48335, 48332, 48333], 42.4614, (-83.3784)),
-('Lake Arbor', 'MD', ARRAY[20774], 38.9070, (-76.8299)),
-('Fox Lake', 'IL', ARRAY[60081, 60041], 42.4239, (-88.1844)),
-('Pine Hill', 'NJ', ARRAY[08021], 39.7879, (-74.9857)),
-('Martin', 'TN', ARRAY[38238], 36.3386, (-88.8513)),
-('Budd Lake', 'NJ', ARRAY[07836], 40.8733, (-74.7374)),
-('Shasta Lake', 'CA', ARRAY[96019, 96079], 40.6790, (-122.3775)),
-('Rodeo', 'CA', ARRAY[94572], 38.0368, (-122.2526)),
-('Vidor', 'TX', ARRAY[77670], 30.1291, (-93.9967)),
-('Bellefontaine Neighbors', 'MO', ARRAY[63137], 38.7529, (-90.2280)),
-('Lyons', 'IL', ARRAY[60525], 41.8121, (-87.8192)),
-('Miami Shores', 'FL', ARRAY[33138, 33153], 25.8670, (-80.1779)),
-('Magnolia', 'AR', ARRAY[71754], 33.2774, (-93.2261)),
-('Lanham', 'MD', ARRAY[20703], 38.9621, (-76.8421)),
-('Fairview', 'CA', ARRAY[94542, 94540], 37.6760, (-122.0480)),
-('Forest Acres', 'SC', ARRAY[29206], 34.0324, (-80.9716)),
-('Pine Ridge', 'FL', ARRAY[34442, 34445], 28.9330, (-82.4761)),
-('Doraville', 'GA', ARRAY[30360], 33.9072, (-84.2711)),
-('Box Elder', 'SD', ARRAY[57706, 57719], 44.1121, (-103.0827)),
-('Pasadena Hills', 'FL', ARRAY[33541, 33545], 28.2881, (-82.2380)),
-('Great Neck', 'NY', ARRAY[11023, 11027], 40.8028, (-73.7332)),
-('Victoria', 'MN', ARRAY[55331, 55318], 44.8634, (-93.6586)),
-('West Haverstraw', 'NY', ARRAY[10923], 41.2063, (-73.9883)),
-('Quartz Hill', 'CA', ARRAY[93586], 34.6527, (-118.2163)),
-('New Port Richey East', 'FL', ARRAY[34653], 28.2605, (-82.6930)),
-('Pike Road', 'AL', ARRAY[36013, 36116], 32.2934, (-86.0902)),
-('Snohomish', 'WA', ARRAY[98291], 47.9276, (-122.0968)),
-('Brookhaven', 'MS', ARRAY[39602, 39603], 31.5803, (-90.4432)),
-('Progress Village', 'FL', ARRAY[33578], 27.8832, (-82.3593)),
-('Warr Acres', 'OK', ARRAY[73122], 35.5285, (-97.6182)),
-('Hobart', 'WI', ARRAY[54115, 54155], 44.4967, (-88.1602)),
-('Clinton', 'TN', ARRAY[37717], 36.0981, (-84.1283)),
-('Garden City', 'SC', ARRAY[29576], 33.5927, (-79.0070)),
-('Wood River', 'IL', ARRAY[62095], 38.8631, (-90.0773)),
-('Fair Oaks Ranch', 'TX', ARRAY[78163], 29.7468, (-98.6375)),
-('Holmen', 'WI', ARRAY[54650], 43.9699, (-91.2661)),
-('Coweta', 'OK', ARRAY[74014], 35.9680, (-95.6543)),
-('Fairmount', 'NY', ARRAY[13031], 43.0414, (-76.2485)),
-('Fort Oglethorpe', 'GA', ARRAY[30707, 30741, 30742], 34.9319, (-85.2460)),
-('Alcoa', 'TN', ARRAY[37777, 37804], 35.8073, (-83.9752)),
-('Clay', 'AL', ARRAY[35126, 35048], 33.6976, (-86.6070)),
-('Mission', 'KS', ARRAY[66205], 39.0270, (-94.6568)),
-('Gages Lake', 'IL', ARRAY[60031], 42.3519, (-87.9828)),
-('Ellisville', 'MO', ARRAY[63011], 38.5897, (-90.5884)),
-('Mentone', 'CA', ARRAY[92374], 34.0609, (-117.1108)),
-('Scottsboro', 'AL', ARRAY[35769], 34.6438, (-86.0491)),
-('Lake Barcroft', 'VA', ARRAY[22041], 38.8514, (-77.1579)),
-('East Rockaway', 'NY', ARRAY[11518], 40.6432, (-73.6672)),
-('Inwood', 'NY', ARRAY[11096], 40.6218, (-73.7507)),
-('Gunbarrel', 'CO', ARRAY[80301], 40.0634, (-105.1714)),
-('Grenada', 'MS', ARRAY[38902, 38960], 33.7816, (-89.8130)),
-('Russellville', 'AL', ARRAY[35653], 34.5056, (-87.7282)),
-('Marina del Rey', 'CA', ARRAY[90295], 33.9765, (-118.4486)),
-('Lake Arrowhead', 'CA', ARRAY[92391, 92385, 92352, 92321], 34.2531, (-117.1945)),
-('Union City', 'TN', ARRAY[38281], 36.4268, (-89.0474)),
-('Denham Springs', 'LA', ARRAY[70727], 30.4743, (-90.9594)),
-('George Mason', 'VA', ARRAY[22032], 38.8355, (-77.3185)),
-('Boaz', 'AL', ARRAY[35956], 34.1985, (-86.1529)),
-('Medulla', 'FL', ARRAY[33811], 27.9570, (-81.9866)),
-('Gifford', 'FL', ARRAY[32967], 27.6747, (-80.4102)),
-('Valley Cottage', 'NY', ARRAY[10989], 41.1160, (-73.9436)),
-('Hermantown', 'MN', ARRAY[55810, 55811], 46.8058, (-92.2407)),
-('Wilmore', 'KY', ARRAY[40390], 37.8786, (-84.6545)),
-('Chevy Chase', 'MD', ARRAY[20815], 38.9943, (-77.0737)),
-('Howell', 'MI', ARRAY[48844], 42.6078, (-83.9339)),
-('Roxboro', 'NC', ARRAY[27574], 36.3879, (-78.9812)),
-('Bull Mountain', 'OR', ARRAY[97223, 97140], 45.4126, (-122.8322)),
-('Rice Lake', 'WI', ARRAY[54822], 45.4863, (-91.7447)),
-('Grand Rapids', 'MN', ARRAY[55730, 55745], 47.2380, (-93.5327)),
-('Harleysville', 'PA', ARRAY[19441], 40.2791, (-75.3872)),
-('Willoughby Hills', 'OH', ARRAY[44092], 41.5873, (-81.4333)),
-('Rye Brook', 'NY', ARRAY[10573], 41.0303, (-73.6865)),
-('Reedsburg', 'WI', ARRAY[53958], 43.5347, (-89.9965)),
-('Dayton', 'NV', ARRAY[89428], 39.2580, (-119.5677)),
-('Independent Hill', 'VA', ARRAY[20112], 38.6404, (-77.4090)),
-('Hope', 'AR', ARRAY[71802], 33.6682, (-93.5895)),
-('Helena-West Helena', 'AR', ARRAY[72342], 34.5314, (-90.6201)),
-('Airway Heights', 'WA', ARRAY[99001], 47.6460, (-117.5792)),
-('Laurel', 'FL', ARRAY[34272, 34274], 27.1446, (-82.4618)),
-('Orono', 'ME', ARRAY[04469], 44.8811, (-68.6792)),
-('Bithlo', 'FL', ARRAY[32833], 28.5644, (-81.1074)),
-('White Marsh', 'MD', ARRAY[21128, 21237, 21162], 39.3819, (-76.4573)),
-('Roxborough Park', 'CO', ARRAY[80135], 39.4492, (-105.0746)),
-('Picture Rocks', 'AZ', ARRAY[85743], 32.3274, (-111.2557)),
-('Carencro', 'LA', ARRAY[70507], 30.3126, (-92.0387)),
-('Ruidoso', 'NM', ARRAY[88338, 88355], 33.3647, (-105.6432)),
-('Monticello', 'AR', ARRAY[71656], 33.6258, (-91.7934)),
-('Brunswick', 'MD', ARRAY[21716], 39.3180, (-77.6253)),
-('Beverly Hills', 'FL', ARRAY[34464], 28.9175, (-82.4541)),
-('Crestline', 'CA', ARRAY[92322, 92325], 34.2486, (-117.2890)),
-('Flowood', 'MS', ARRAY[39208, 39232], 32.3359, (-90.0802)),
-('Bloomfield', 'NM', ARRAY[87410], 36.7401, (-107.9734)),
-('North Kensington', 'MD', ARRAY[20902], 39.0392, (-77.0723)),
-('Kendall Park', 'NJ', ARRAY[08852], 40.4138, (-74.5626)),
-('Woodlyn', 'PA', ARRAY[19022, 19033, 19081], 39.8774, (-75.3445)),
-('Fort Stewart', 'GA', ARRAY[31314], 31.8818, (-81.6105)),
-('Lenoir City', 'TN', ARRAY[37772], 35.8110, (-84.2818)),
-('College Place', 'WA', ARRAY[99362], 46.0419, (-118.3879)),
-('Wesley Chapel', 'NC', ARRAY[28173, 28110], 34.9985, (-80.6905)),
-('Gloucester Point', 'VA', ARRAY[23072, 23131, 23184], 37.2767, (-76.5043)),
-('Parsons', 'KS', ARRAY[67357], 37.3405, (-95.2959)),
-('Fultondale', 'AL', ARRAY[35119, 35068], 33.6177, (-86.8015)),
-('North College Hill', 'OH', ARRAY[45231, 45239], 39.2174, (-84.5520)),
-('Reserve', 'LA', ARRAY[70084], 30.0741, (-90.5557)),
-('Forestdale', 'AL', ARRAY[35005], 33.5737, (-86.9002)),
-('Marathon', 'FL', ARRAY[33052], 24.7262, (-81.0376)),
-('Hickam Housing', 'HI', ARRAY[96818], 21.3311, (-157.9474)),
-('St. Stephens', 'NC', ARRAY[28601], 35.7641, (-81.2746)),
-('Commerce', 'TX', ARRAY[75429], 33.2421, (-95.8991)),
-('Hampton', 'NH', ARRAY[03843], 42.9428, (-70.8261)),
-('Fort Polk South', 'LA', ARRAY[71459], 31.0512, (-93.2159)),
-('Girard', 'OH', ARRAY[44446], 41.1666, (-80.6963)),
-('Hillview', 'KY', ARRAY[40165, 40129], 38.0563, (-85.6848)),
-('Spanish Fort', 'AL', ARRAY[36527, 36578, 36577], 30.7257, (-87.8601)),
-('Bethalto', 'IL', ARRAY[62018], 38.9014, (-90.0467)),
-('Midland', 'WA', ARRAY[98445], 47.1734, (-122.4120)),
-('Plainedge', 'NY', ARRAY[11735], 40.7240, (-73.4770)),
-('Fair Oaks', 'GA', ARRAY[30008, 30080], 33.9192, (-84.5444)),
-('Stansbury Park', 'UT', ARRAY[84407], 40.6356, (-112.3054)),
-('Calimesa', 'CA', ARRAY[92223], 33.9874, (-117.0542)),
-('Dunn Loring', 'VA', ARRAY[22180, 22182], 38.8945, (-77.2316)),
-('Holualoa', 'HI', ARRAY[96740], 19.6238, (-155.9269)),
-('Beecher', 'MI', ARRAY[48505], 43.0903, (-83.7039)),
-('Economy', 'PA', ARRAY[15003, 15042, 15027, 15143], 40.6410, (-80.1840)),
-('Berthoud', 'CO', ARRAY[80534, 80513], 40.3070, (-105.0419)),
-('Whitestown', 'IN', ARRAY[46075], 39.9705, (-86.3612)),
-('Derby', 'CO', ARRAY[80024], 39.8401, (-104.9171)),
-('Sutherlin', 'OR', ARRAY[97462], 43.3884, (-123.3231)),
-('Alexander City', 'AL', ARRAY[35011], 32.9242, (-85.9361)),
-('Westphalia', 'MD', ARRAY[20772], 38.8385, (-76.8231)),
-('Dumbarton', 'VA', ARRAY[23230], 37.6130, (-77.5065)),
-('Northwest Harborcreek', 'PA', ARRAY[16511], 42.1494, (-79.9946)),
-('St. Anthony', 'MN', ARRAY[55418], 45.0278, (-93.2174)),
-('Farmingdale', 'NY', ARRAY[11737], 40.7328, (-73.4465)),
-('North Sarasota', 'FL', ARRAY[34243], 27.3711, (-82.5177)),
-('Powdersville', 'SC', ARRAY[29611, 29642], 34.7825, (-82.4958)),
-('Linganore', 'MD', ARRAY[21754], 39.4111, (-77.3026)),
-('Picnic Point', 'WA', ARRAY[98087], 47.8744, (-122.3078)),
-('Fort Knox', 'KY', ARRAY[40122], 37.8915, (-85.9636)),
-('Stony Brook University', 'NY', ARRAY[11794, 11733], 40.9099, (-73.1213)),
-('Oakwood', 'OH', ARRAY[45419], 39.7202, (-84.1733)),
-('Oakville', 'CT', ARRAY[06795], 41.5923, (-73.0858)),
-('Oak Grove', 'MN', ARRAY[55303, 55005], 45.3409, (-93.3264)),
-('Blanchard', 'OK', ARRAY[73101], 35.1523, (-97.6613)),
-('St. Albans', 'VT', ARRAY[05479], 44.8118, (-73.0846)),
-('Oakland', 'TN', ARRAY[38028], 35.2256, (-89.5372)),
-('Potsdam', 'NY', ARRAY[13699], 44.6699, (-74.9830)),
-('Sugarmill Woods', 'FL', ARRAY[34446], 28.7321, (-82.4986)),
-('Glencoe', 'IL', ARRAY[60022], 42.1347, (-87.7641)),
-('Orange Park', 'FL', ARRAY[32067], 30.1706, (-81.7041)),
-('Pine Lake Park', 'NJ', ARRAY[08759], 40.0017, (-74.2595)),
-('Old Orchard Beach', 'ME', ARRAY[04064], 43.5239, (-70.3904)),
-('Seffner', 'FL', ARRAY[33583], 27.9981, (-82.2735)),
-('Airmont', 'NY', ARRAY[10901, 10982], 41.0992, (-74.0990)),
-('Sans Souci', 'SC', ARRAY[29609], 34.8901, (-82.4241)),
-('South Kensington', 'MD', ARRAY[20814], 39.0188, (-77.0785)),
-('West Miami', 'FL', ARRAY[33155], 25.7578, (-80.2969)),
-('Clayton', 'NJ', ARRAY[08094], 39.6627, (-75.0782)),
-('Hernando', 'FL', ARRAY[34442, 34441], 28.9451, (-82.3781)),
-('Glenwood', 'IL', ARRAY[60411], 41.5409, (-87.6116)),
-('Garden City', 'GA', ARRAY[31405, 31415], 32.0868, (-81.1773)),
-('Fairmount', 'CO', ARRAY[80403], 39.7931, (-105.1712)),
-('Folsom', 'PA', ARRAY[19081], 39.8924, (-75.3287)),
-('Mount Vista', 'WA', ARRAY[98686], 45.7373, (-122.6315)),
-('Des Peres', 'MO', ARRAY[63131], 38.5973, (-90.4480)),
-('Perryville', 'MO', ARRAY[63776], 37.7263, (-89.8759)),
-('Scott', 'LA', ARRAY[70507, 70506], 30.2398, (-92.0947)),
-('West Vero Corridor', 'FL', ARRAY[32961], 27.6378, (-80.4855)),
-('Edgemere', 'MD', ARRAY[21052], 39.2273, (-76.4590)),
-('Salem', 'UT', ARRAY[84653], 40.0540, (-111.6720)),
-('Richlands', 'VA', ARRAY[24612], 37.0878, (-81.8080)),
-('Pleasant Hill', 'MO', ARRAY[64034], 38.8061, (-94.2655)),
-('Montecito', 'CA', ARRAY[93150], 34.4382, (-119.6286)),
-('Evergreen', 'CO', ARRAY[80437], 39.6349, (-105.3356)),
-('Elsmere', 'KY', ARRAY[41042], 38.9949, (-84.6017)),
-('Farmville', 'VA', ARRAY[23909], 37.2959, (-78.4002)),
-('Monroe', 'NY', ARRAY[10949], 41.3198, (-74.1848)),
-('Perry Heights', 'OH', ARRAY[44646], 40.7977, (-81.4680)),
-('Springfield', 'FL', ARRAY[32405, 32404], 30.1713, (-85.6089)),
-('Seven Corners', 'VA', ARRAY[22041], 38.8658, (-77.1445)),
-('West Athens', 'CA', ARRAY[90047], 33.9235, (-118.3033)),
-('Brooksville', 'FL', ARRAY[34603, 34605], 28.5404, (-82.3903)),
-('Fairfield Glade', 'TN', ARRAY[38557], 36.0028, (-84.8711)),
-('Fairwood', 'WA', ARRAY[99218], 47.7678, (-117.4157)),
-('Innsbrook', 'VA', ARRAY[23233], 37.6552, (-77.5775)),
-('Wetumpka', 'AL', ARRAY[36092], 32.5407, (-86.2052)),
-('Park Hills', 'MO', ARRAY[63640], 37.8211, (-90.5050)),
-('Odessa', 'FL', ARRAY[33558], 28.1820, (-82.5530)),
-('White Horse', 'NJ', ARRAY[08610], 40.1920, (-74.7022)),
-('Rolesville', 'NC', ARRAY[27587], 35.9224, (-78.4656)),
-('Incline Village', 'NV', ARRAY[89450, 89511, 89452], 39.2639, (-119.9453)),
-('University of Virginia', 'VA', ARRAY[22904], 38.0405, (-78.5163)),
-('Eufaula', 'AL', ARRAY[36072], 31.9102, (-85.1505)),
-('Cedar Hills', 'OR', ARRAY[97005, 97077], 45.5047, (-122.8051)),
-('Dock Junction', 'GA', ARRAY[31520, 31521], 31.2031, (-81.5156)),
-('Middleton', 'ID', ARRAY[83652], 43.7114, (-116.6155)),
-('Woodburn', 'VA', ARRAY[22003, 22042, 22037], 38.8503, (-77.2322)),
-('Sunset Hills', 'MO', ARRAY[63127], 38.5310, (-90.4087)),
-('Summit', 'WA', ARRAY[98373, 98446], 47.1694, (-122.3628)),
-('West Haven-Sylvan', 'OR', ARRAY[97229], 45.5164, (-122.7654)),
-('Los Altos Hills', 'CA', ARRAY[94024], 37.3671, (-122.1390)),
-('Citrus Springs', 'FL', ARRAY[34434, 34445], 28.9931, (-82.4595)),
-('Congers', 'NY', ARRAY[10920], 41.1484, (-73.9456)),
-('Savoy', 'IL', ARRAY[61822], 40.0600, (-88.2552)),
-('Center Moriches', 'NY', ARRAY[11955], 40.8015, (-72.7960)),
-('Aransas Pass', 'TX', ARRAY[78335], 27.8877, (-97.1134)),
-('Garrison', 'MD', ARRAY[21117, 21208], 39.4023, (-76.7514)),
-('Gaylord', 'MI', ARRAY[49734], 45.0213, (-84.6803)),
-('Greenville', 'RI', ARRAY[02917], 41.8800, (-71.5549)),
-('Somers', 'WI', ARRAY[53140, 53141, 53171], 42.6411, (-87.8919)),
-('Willow Street', 'PA', ARRAY[17602], 39.9809, (-76.2705)),
-('Millersville', 'PA', ARRAY[17603], 40.0047, (-76.3522)),
-('Jessup', 'MD', ARRAY[20794], 39.1457, (-76.7745)),
-('Tallulah', 'LA', ARRAY[71284], 32.4067, (-91.1915)),
-('Fern Park', 'FL', ARRAY[32730], 28.6484, (-81.3458)),
-('Orono', 'MN', ARRAY[55356, 55323], 44.9657, (-93.5908)),
-('Westwego', 'LA', ARRAY[70096], 29.9058, (-90.1434)),
-('Fair Lakes', 'VA', ARRAY[22033], 38.8530, (-77.3885)),
-('Pike Creek', 'DE', ARRAY[19707, 19711], 39.7485, (-75.6953)),
-('Bel Aire', 'KS', ARRAY[67226], 37.7749, (-97.2457)),
-('Milton', 'WA', ARRAY[98354], 47.2522, (-122.3156)),
-('Mahtomedi', 'MN', ARRAY[55115], 45.0619, (-92.9660)),
-('Haledon', 'NJ', ARRAY[07538], 40.9363, (-74.1887)),
-('Ashland', 'NJ', ARRAY[08034], 39.8782, (-75.0085)),
-('McRae-Helena', 'GA', ARRAY[31055], 32.0635, (-82.8968)),
-('Fishersville', 'VA', ARRAY[22939, 24401], 38.1005, (-78.9687)),
-('Druid Hills', 'GA', ARRAY[30306], 33.7842, (-84.3273)),
-('Fort Mitchell', 'KY', ARRAY[41017], 39.0459, (-84.5563)),
-('Westlake Village', 'CA', ARRAY[91362], 34.1369, (-118.8220)),
-('Kulpsville', 'PA', ARRAY[19446, 19443], 40.2440, (-75.3407)),
-('Burton', 'SC', ARRAY[29906], 32.4233, (-80.7454)),
-('Laurel Hill', 'VA', ARRAY[22199], 38.7026, (-77.2422)),
-('Monona', 'WI', ARRAY[53713, 53708], 43.0540, (-89.3334)),
-('Mayo', 'MD', ARRAY[21106], 38.9041, (-76.5180)),
-('Pismo Beach', 'CA', ARRAY[93448], 35.1484, (-120.6492)),
-('Milliken', 'CO', ARRAY[80543], 40.3115, (-104.8561)),
-('Murphy', 'MO', ARRAY[63049], 38.4922, (-90.4856)),
-('Kalifornsky', 'AK', ARRAY[99611, 99669], 60.4417, (-151.1972)),
-('Leesville', 'LA', ARRAY[71496], 31.1397, (-93.2741)),
-('Minnetrista', 'MN', ARRAY[55364, 55375, 55359], 44.9356, (-93.7103)),
-('Poteau', 'OK', ARRAY[74953, 74940], 35.0430, (-94.6357)),
-('Oak Hill', 'WV', ARRAY[25840, 25901], 37.9844, (-81.1277)),
-('Monument', 'CO', ARRAY[80921], 39.0735, (-104.8467)),
-('Alondra Park', 'CA', ARRAY[90260, 90506], 33.8885, (-118.3350)),
-('Shorewood', 'MN', ARRAY[55364], 44.9033, (-93.5903)),
-('Chester', 'IL', ARRAY[62259], 37.9199, (-89.8259)),
-('Gilberts', 'IL', ARRAY[60142, 60136], 42.1096, (-88.3716)),
-('Bargersville', 'IN', ARRAY[46106, 46143], 39.5412, (-86.2004)),
-('Rockmart', 'GA', ARRAY[30154], 34.0103, (-85.0441)),
-('South Cleveland', 'TN', ARRAY[37323], 35.1097, (-84.9097)),
-('Helena Valley Southeast', 'MT', ARRAY[59602], 46.6175, (-111.9186)),
-('Wyoming', 'MN', ARRAY[55092, 55013, 55025], 45.3365, (-92.9766)),
-('Bloomingdale', 'NJ', ARRAY[07465], 41.0300, (-74.3319)),
-('Conshohocken', 'PA', ARRAY[19429], 40.0772, (-75.3035)),
-('Wading River', 'NY', ARRAY[11792], 40.9464, (-72.8230)),
-('Chestnut Ridge', 'NY', ARRAY[10977], 41.0829, (-74.0551)),
-('Sudden Valley', 'WA', ARRAY[98228], 48.7199, (-122.3468)),
-('Ridgefield', 'CT', ARRAY[06879], 41.2712, (-73.4953)),
-('Southwest Ranches', 'FL', ARRAY[33330, 33332], 26.0476, (-80.3750)),
-('Quincy', 'FL', ARRAY[32353], 30.5659, (-84.5857)),
-('Templeton', 'CA', ARRAY[93465], 35.5560, (-120.7182)),
-('Hitchcock', 'TX', ARRAY[77563], 29.2945, (-95.0250)),
-('Lake Shore', 'WA', ARRAY[98685], 45.6911, (-122.6911)),
-('Camp Hill', 'PA', ARRAY[17001, 17089], 40.2423, (-76.9274)),
-('Waller', 'WA', ARRAY[98371, 98443], 47.2035, (-122.3699)),
-('Lincolnshire', 'IL', ARRAY[60045], 42.1957, (-87.9182)),
-('Jersey Village', 'TX', ARRAY[77040], 29.8903, (-95.5721)),
-('Centerville', 'GA', ARRAY[31093], 32.6342, (-83.6853)),
-('Middletown', 'KY', ARRAY[40299, 40223], 38.2410, (-85.5215)),
-('Tuskegee', 'AL', ARRAY[36083, 36803], 32.4395, (-85.7139)),
-('Grand Blanc', 'MI', ARRAY[48480], 42.9258, (-83.6181)),
-('Abingdon', 'VA', ARRAY[24211, 24212], 36.7089, (-81.9713)),
-('Temple Hills', 'MD', ARRAY[20748, 20757], 38.8106, (-76.9495)),
-('Boyes Hot Springs', 'CA', ARRAY[95416], 38.3126, (-122.4888)),
-('Bridge City', 'TX', ARRAY[77630], 30.0298, (-93.8406)),
-('DeFuniak Springs', 'FL', ARRAY[32435], 30.7123, (-86.1208)),
-('Montrose', 'VA', ARRAY[23231], 37.5200, (-77.3772)),
-('Port Jefferson Station', 'NY', ARRAY[11776], 40.9260, (-73.0651)),
-('Withamsville', 'OH', ARRAY[45245], 39.0628, (-84.2808)),
-('Pukalani', 'HI', ARRAY[96788], 20.8329, (-156.3415)),
-('Waite Park', 'MN', ARRAY[56301, 56388], 45.5313, (-94.2528)),
-('Park City', 'KS', ARRAY[67147], 37.8103, (-97.3255)),
-('Round Lake Park', 'IL', ARRAY[60030], 42.3309, (-88.0750)),
-('Rockwood', 'VA', ARRAY[23236], 37.4630, (-77.5744)),
-('West Samoset', 'FL', ARRAY[34203], 27.4702, (-82.5552)),
-('Oceano', 'CA', ARRAY[93475], 35.1019, (-120.6090)),
-('Sebastopol', 'CA', ARRAY[95473], 38.4001, (-122.8276)),
-('Half Moon', 'NC', ARRAY[28540], 34.8298, (-77.4591)),
-('Meadow Lakes', 'AK', ARRAY[99654], 61.6380, (-149.6080)),
-('Inwood', 'FL', ARRAY[33880], 28.0391, (-81.7677)),
-('Windsor', 'WI', ARRAY[53590, 53571, 53532], 43.2406, (-89.2952)),
-('Summit View', 'WA', ARRAY[98373], 47.1343, (-122.3468)),
-('Colonie', 'NY', ARRAY[12288], 42.7199, (-73.8333)),
-('Piñon Hills', 'CA', ARRAY[92372], 34.4438, (-117.6214)),
-('Sappington', 'MO', ARRAY[63126], 38.5260, (-90.3730)),
-('Harrison', 'TN', ARRAY[37341], 35.1276, (-85.1464)),
-('Delafield', 'WI', ARRAY[53058, 53029], 43.0720, (-88.3913)),
-('Pikeville', 'KY', ARRAY[41502], 37.4807, (-82.5262)),
-('Fairfax', 'CA', ARRAY[94978], 37.9886, (-122.5952)),
-('Laughlin', 'NV', ARRAY[89028], 35.1316, (-114.6890)),
-('Purcell', 'OK', ARRAY[73080], 35.0180, (-97.3747)),
-('West Slope', 'OR', ARRAY[97005, 97298], 45.4962, (-122.7731)),
-('Citrus Hills', 'FL', ARRAY[34453, 34442], 28.8870, (-82.4312)),
-('Silvis', 'IL', ARRAY[61239, 61282], 41.4976, (-90.4101)),
-('Ojai', 'CA', ARRAY[93024], 34.4487, (-119.2469)),
-('St. Gabriel', 'LA', ARRAY[70776, 70780], 30.2537, (-91.1013)),
-('Florence', 'CO', ARRAY[81290], 38.3836, (-105.1114)),
-('Old Town', 'ME', ARRAY[04489], 44.9491, (-68.7249)),
-('Etowah', 'NC', ARRAY[28739], 35.3061, (-82.5902)),
-('Hiawatha', 'IA', ARRAY[52233], 42.0547, (-91.6911)),
-('Belen', 'NM', ARRAY[87031], 34.7115, (-106.7985)),
-('Inverness', 'FL', ARRAY[34453, 34452], 28.8397, (-82.3437)),
-('Woodlawn', 'MD', ARRAY[20737], 38.9505, (-76.9000)),
-('Inverness', 'IL', ARRAY[60067], 42.1152, (-88.1019)),
-('Montpelier', 'VT', ARRAY[05603, 05604, 05620, 05633], 44.2658, (-72.5717)),
-('Pomona', 'NJ', ARRAY[08205], 39.4687, (-74.5501)),
-('St. Joseph', 'MN', ARRAY[56301], 45.5611, (-94.3081)),
-('Northridge', 'OH', ARRAY[45502], 39.9971, (-83.7770)),
-('Gibsonville', 'NC', ARRAY[27249], 36.0991, (-79.5417)),
-('Dade City', 'FL', ARRAY[33523, 33526], 28.3568, (-82.1942)),
-('Greenville', 'NY', ARRAY[10530], 40.9981, (-73.8194)),
-('Middleborough Center', 'MA', ARRAY[02344], 41.8945, (-70.9260)),
-('Bryans Road', 'MD', ARRAY[20640, 20616], 38.6144, (-77.0850)),
-('Meraux', 'LA', ARRAY[70092], 29.9284, (-89.9179)),
-('Hardeeville', 'SC', ARRAY[29936], 32.2951, (-81.0318)),
-('Wildwood', 'FL', ARRAY[34484, 34785], 28.8014, (-82.0058)),
-('Pinehurst', 'MA', ARRAY[01866], 42.5334, (-71.2340)),
-('Kenwood', 'OH', ARRAY[45243, 45236], 39.2067, (-84.3746)),
-('Richland', 'MS', ARRAY[39218], 32.2309, (-90.1592)),
-('Belle Isle', 'FL', ARRAY[32812], 28.4724, (-81.3491)),
-('East Hills', 'NY', ARRAY[11576], 40.7958, (-73.6292)),
-('Landen', 'OH', ARRAY[45039], 39.3153, (-84.2770)),
-('Riverdale Park', 'MD', ARRAY[20738], 38.9642, (-76.9266)),
-('Gunnison', 'CO', ARRAY[81230], 38.5455, (-106.9225)),
-('Hornsby Bend', 'TX', ARRAY[78724], 30.2450, (-97.5833)),
-('South Monrovia Island', 'CA', ARRAY[91010], 34.1234, (-117.9958)),
-('Morrow', 'GA', ARRAY[30287], 33.5816, (-84.3392)),
-('Pacific', 'WA', ARRAY[98047], 47.2610, (-122.2507)),
-('Commerce', 'GA', ARRAY[30599], 34.2133, (-83.4730)),
-('Austell', 'GA', ARRAY[30106, 30168, 30111], 33.8200, (-84.6450)),
-('Glenolden', 'PA', ARRAY[19039], 39.8996, (-75.2920)),
-('Gonzales', 'TX', ARRAY[78269], 29.5126, (-97.4472)),
-('Calverton', 'NY', ARRAY[11949], 40.9163, (-72.7645)),
-('Carneys Point', 'NJ', ARRAY[08069], 39.7075, (-75.4673)),
-('Yardville', 'NJ', ARRAY[08691], 40.1849, (-74.6603)),
-('De Soto', 'MO', ARRAY[63024], 38.1410, (-90.5609)),
-('Galliano', 'LA', ARRAY[70345], 29.4470, (-90.3096)),
-('Plymouth', 'MA', ARRAY[02362], 41.9539, (-70.6693)),
-('Pinson', 'AL', ARRAY[35126], 33.7057, (-86.6674)),
-('Selma', 'NC', ARRAY[27577], 35.5436, (-78.2954)),
-('Marble Falls', 'TX', ARRAY[78654], 30.5649, (-98.2768)),
-('Fort Myers Beach', 'FL', ARRAY[33932], 26.4324, (-81.9168)),
-('Ladera Heights', 'CA', ARRAY[90230, 90056], 33.9972, (-118.3740)),
-('Ben Lomond', 'CA', ARRAY[95018], 37.0782, (-122.0882)),
-('Fort Pierce North', 'FL', ARRAY[34946], 27.4736, (-80.3594)),
-('Sausalito', 'CA', ARRAY[94966], 37.8580, (-122.4932)),
-('Highland Heights', 'KY', ARRAY[41099], 39.0355, (-84.4567)),
-('Lemoore Station', 'CA', ARRAY[93246], 36.2633, (-119.9049)),
-('Sandston', 'VA', ARRAY[23250, 23231], 37.5120, (-77.3149)),
-('Oak Ridge', 'NC', ARRAY[27310], 36.1740, (-79.9916)),
-('Fort Payne', 'AL', ARRAY[35968], 34.4557, (-85.6965)),
-('Gateway', 'AK', ARRAY[99654], 61.5737, (-149.2389)),
-('Marksville', 'LA', ARRAY[71350], 31.1247, (-92.0652)),
-('Truth or Consequences', 'NM', ARRAY[87935], 33.1864, (-107.2589)),
-('Collinsville', 'VA', ARRAY[24112], 36.7215, (-79.9121)),
-('Willis', 'TX', ARRAY[77318, 77305], 30.4314, (-95.4832)),
-('East End', 'AR', ARRAY[72206, 72103], 34.5554, (-92.3261)),
-('San Martin', 'CA', ARRAY[95020], 37.0829, (-121.5963)),
-('Westmere', 'NY', ARRAY[12214, 12227], 42.6883, (-73.8744)),
-('Tappan', 'NY', ARRAY[10962, 10983], 41.0269, (-73.9520)),
-('Sedona', 'AZ', ARRAY[86339], 34.8574, (-111.7951)),
-('Leitchfield', 'KY', ARRAY[42755], 37.4862, (-86.2857)),
-('Catoosa', 'OK', ARRAY[74116], 36.1832, (-95.7662)),
-('Bremen', 'GA', ARRAY[30110], 33.7085, (-85.1495)),
-('Prairie View', 'TX', ARRAY[77445], 30.0850, (-95.9897)),
-('Ocean City', 'MD', ARRAY[21843], 38.3998, (-75.0715)),
-('Barberton', 'WA', ARRAY[98686, 98666, 98668], 45.7136, (-122.6115)),
-('Madison Park', 'NJ', ARRAY[08859, 08857], 40.4461, (-74.2959)),
-('Southport', 'NY', ARRAY[14904], 42.0640, (-76.8185)),
-('Lower Allen', 'PA', ARRAY[17011], 40.2261, (-76.9017)),
-('Fort Meade', 'FL', ARRAY[33841], 27.7645, (-81.8058)),
-('Willow Oak', 'FL', ARRAY[33811], 27.9216, (-82.0244)),
-('Kentfield', 'CA', ARRAY[94914, 94974], 37.9481, (-122.5496)),
-('Mount Ivy', 'NY', ARRAY[10970], 41.1926, (-74.0297)),
-('Page', 'AZ', ARRAY[86036], 36.9426, (-111.5071)),
-('Viola', 'NY', ARRAY[10901], 41.1287, (-74.0855)),
-('Mira Monte', 'CA', ARRAY[93022], 34.4284, (-119.2853)),
-('Pollock Pines', 'CA', ARRAY[95709], 38.7564, (-120.5904)),
-('Laurence Harbor', 'NJ', ARRAY[07721, 07735], 40.4489, (-74.2494)),
-('Clover Creek', 'WA', ARRAY[98446], 47.1404, (-122.3827)),
-('Gulf Breeze', 'FL', ARRAY[32562], 30.3685, (-87.1769)),
-('Union', 'OH', ARRAY[45377], 39.9090, (-84.2896)),
-('University Park', 'IL', ARRAY[60449], 41.4461, (-87.7154)),
-('Chestertown', 'MD', ARRAY[21690], 39.2182, (-76.0714)),
-('Belle Haven', 'VA', ARRAY[22307], 38.7775, (-77.0574)),
-('Beacon Square', 'FL', ARRAY[34652], 28.2118, (-82.7504)),
-('Harrisville', 'UT', ARRAY[84414], 41.2853, (-111.9859)),
-('Latimer', 'MS', ARRAY[39565], 30.4972, (-88.8607)),
-('North Branch', 'MN', ARRAY[55032], 45.5137, (-92.9601)),
-('Lake Mathews', 'CA', ARRAY[92504], 33.8250, (-117.3683)),
-('Moapa Valley', 'NV', ARRAY[89021], 36.6078, (-114.4566)),
-('Bee Cave', 'TX', ARRAY[78736], 30.3084, (-97.9629)),
-('Lovejoy', 'GA', ARRAY[30250], 33.4426, (-84.3176)),
-('Huntertown', 'IN', ARRAY[46845, 46818], 41.2155, (-85.1715)),
-('River Park', 'FL', ARRAY[34952], 27.3214, (-80.3307)),
-('Moores Mill', 'AL', ARRAY[35811, 35759], 34.8491, (-86.5222)),
-('St. Francis', 'MN', ARRAY[55070], 45.3991, (-93.3902)),
-('Kimberly', 'WI', ARRAY[54915], 44.2670, (-88.3377)),
-('Perry', 'FL', ARRAY[32348, 32357], 30.1090, (-83.5821)),
-('Kingston', 'RI', ARRAY[02881], 41.4738, (-71.5236)),
-('Lincoln', 'AL', ARRAY[35096], 33.5935, (-86.1371)),
-('Guánica', 'PR', ARRAY[00653], 17.9698, (-66.9309)),
-('Brattleboro', 'VT', ARRAY[05303, 05304], 42.8588, (-72.5628)),
-('Pembroke Park', 'FL', ARRAY[33009], 25.9852, (-80.1777)),
-('Lake Hallie', 'WI', ARRAY[54703], 44.8921, (-91.4199)),
-('Ellettsville', 'IN', ARRAY[47404], 39.2322, (-86.6232)),
-('Litchfield', 'IL', ARRAY[62015], 39.1959, (-89.6295)),
-('Homeacre-Lyndora', 'PA', ARRAY[16045], 40.8721, (-79.9211)),
-('Medina', 'MN', ARRAY[55356, 55359], 45.0326, (-93.5834)),
-('Dahlonega', 'GA', ARRAY[30597], 34.5309, (-83.9804)),
-('Dayton', 'MN', ARRAY[55327], 45.1906, (-93.4758)),
-('Savage', 'MD', ARRAY[20794], 39.1485, (-76.8228)),
-('West Point', 'NY', ARRAY[10928, 10997], 41.3642, (-74.0118)),
-('Lauderdale-by-the-Sea', 'FL', ARRAY[33062], 26.1990, (-80.0972)),
-('Groesbeck', 'OH', ARRAY[45251, 45239], 39.2292, (-84.5964)),
-('Cherry Hills Village', 'CO', ARRAY[80111], 39.6375, (-104.9481)),
-('Barrington', 'NJ', ARRAY[08033], 39.8689, (-75.0514)),
-('Tecumseh', 'OK', ARRAY[74873], 35.2639, (-96.9338)),
-('Air Force Academy', 'CO', ARRAY[80841], 38.9942, (-104.8639)),
-('Folcroft', 'PA', ARRAY[19079], 39.8891, (-75.2770)),
-('North Syracuse', 'NY', ARRAY[13220, 13225, 13251], 43.1339, (-76.1306)),
-('Brewton', 'AL', ARRAY[36427], 31.1111, (-87.0737)),
-('Maple Glen', 'PA', ARRAY[19002], 40.1778, (-75.1793)),
-('Meridianville', 'AL', ARRAY[35750, 35759], 34.8729, (-86.5722)),
-('Trinity', 'NC', ARRAY[27263, 27360], 35.8756, (-80.0093)),
-('Forest Glen', 'MD', ARRAY[20902], 39.0191, (-77.0445)),
-('Notre Dame', 'IN', ARRAY[46637], 41.7014, (-86.2378)),
-('Tanglewilde', 'WA', ARRAY[98516], 47.0512, (-122.7810)),
-('Orlovista', 'FL', ARRAY[32835, 32811], 28.5441, (-81.4629)),
-('Mont Belvieu', 'TX', ARRAY[77535, 77580], 29.8524, (-94.8784)),
-('Enola', 'PA', ARRAY[17025], 40.2908, (-76.9348)),
-('Keene', 'TX', ARRAY[76009, 76031], 32.3955, (-97.3226)),
-('Thompson''s Station', 'TN', ARRAY[37179], 35.8090, (-86.8994)),
-('Stickney', 'IL', ARRAY[60804], 41.8183, (-87.7730)),
-('Rossford', 'OH', ARRAY[43460], 41.5832, (-83.5692)),
-('Cumming', 'GA', ARRAY[30041], 34.2064, (-84.1337)),
-('Plaquemine', 'LA', ARRAY[70765], 30.2834, (-91.2429)),
-('Hapeville', 'GA', ARRAY[30394], 33.6609, (-84.4093)),
-('Valley Falls', 'SC', ARRAY[29316], 35.0073, (-81.9692)),
-('Fairview', 'GA', ARRAY[30741], 34.9296, (-85.2940)),
-('Otis Orchards-East Farms', 'WA', ARRAY[99027], 47.7030, (-117.0854)),
-('Avon', 'CO', ARRAY[81655], 39.6445, (-106.5133)),
-('Contra Costa Centre', 'CA', ARRAY[94598], 37.9261, (-122.0540)),
-('Champion Heights', 'OH', ARRAY[44481], 41.3031, (-80.8514)),
-('Mulvane', 'KS', ARRAY[67120], 37.4788, (-97.2724)),
-('Lynchburg', 'TN', ARRAY[37388, 37359, 37352], 35.2846, (-86.3587)),
-('East Shoreham', 'NY', ARRAY[11786], 40.9460, (-72.8811)),
-('Hewlett', 'NY', ARRAY[11557], 40.6422, (-73.6942)),
-('Cheshire Village', 'CT', ARRAY[06408, 06411], 41.5026, (-72.8993)),
-('Theodore', 'AL', ARRAY[36582], 30.5408, (-88.1884)),
-('Irvington', 'NY', ARRAY[10533], 41.0349, (-73.8661)),
-('Prestonsburg', 'KY', ARRAY[41602], 37.6816, (-82.7662)),
-('Edgemoor', 'DE', ARRAY[19802], 39.7551, (-75.5070)),
-('Moraine', 'OH', ARRAY[45439, 45418], 39.6983, (-84.2459)),
-('Bridgeport', 'MI', ARRAY[48601], 43.3706, (-83.8828)),
-('Vine Grove', 'KY', ARRAY[40160], 37.8133, (-85.9828)),
-('Liberty', 'TX', ARRAY[77535], 30.0379, (-94.7880)),
-('Skowhegan', 'ME', ARRAY[94976], 44.7735, (-69.7124)),
-('Lake Murray of Richland', 'SC', ARRAY[29063, 29002], 34.1209, (-81.2653)),
-('Darnestown', 'MD', ARRAY[20874], 39.0960, (-77.3033)),
-('Garrett', 'IN', ARRAY[46706], 41.3526, (-85.1238)),
-('Schriever', 'LA', ARRAY[70395], 29.7334, (-90.8310)),
-('Andalusia', 'AL', ARRAY[36421], 31.3101, (-86.4781)),
-('Mila Doce', 'TX', ARRAY[78596], 26.2230, (-97.9601)),
-('Rockford', 'MI', ARRAY[49351], 43.1266, (-85.5582)),
-('Rhome', 'TX', ARRAY[76234], 33.0647, (-97.4779)),
-('Ellenville', 'NY', ARRAY[12428], 41.7009, (-74.3609)),
-('International Falls', 'MN', ARRAY[56679], 48.5884, (-93.4083)),
-('Jasper', 'GA', ARRAY[30175], 34.4710, (-84.4496)),
-('Nitro', 'WV', ARRAY[25064], 38.4119, (-81.8194)),
-('East Glenville', 'NY', ARRAY[12302], 42.8614, (-73.9206)),
-('South Gate Ridge', 'FL', ARRAY[34233], 27.2856, (-82.4970)),
-('Bensley', 'VA', ARRAY[23237], 37.4470, (-77.4420)),
-('Lionville', 'PA', ARRAY[19480], 40.0524, (-75.6440)),
-('Barnhart', 'MO', ARRAY[63057], 38.3360, (-90.4046)),
-('Islamorada, Village of Islands', 'FL', ARRAY[33070], 24.9408, (-80.6097)),
-('Lakeview', 'NY', ARRAY[11570], 40.6775, (-73.6493)),
-('Mascotte', 'FL', ARRAY[34753], 28.6110, (-81.9107)),
-('South Run', 'VA', ARRAY[22153], 38.7467, (-77.2754)),
-('Waveland', 'MS', ARRAY[39520], 30.2930, (-89.3904)),
-('Hingham', 'MA', ARRAY[02044], 42.2366, (-70.8879)),
-('Stone Mountain', 'GA', ARRAY[30086], 33.8034, (-84.1724)),
-('California', 'PA', ARRAY[15419, 15417], 40.0692, (-79.9152)),
-('Lecanto', 'FL', ARRAY[34460], 28.8359, (-82.4880)),
-('Corcoran', 'MN', ARRAY[55374, 55357], 45.1089, (-93.5837)),
-('Holly Springs', 'MS', ARRAY[38634], 34.7768, (-89.4466)),
-('Orange Beach', 'AL', ARRAY[36530, 36547], 30.2941, (-87.5851)),
-('Hillandale', 'MD', ARRAY[20903], 39.0254, (-76.9751)),
-('Edinboro', 'PA', ARRAY[16444], 41.8762, (-80.1246)),
-('Pea Ridge', 'WV', ARRAY[25504], 38.4154, (-82.3188)),
-('Wescosville', 'PA', ARRAY[18103, 18062], 40.5617, (-75.5489)),
-('Blue Bell', 'PA', ARRAY[19424], 40.1474, (-75.2687)),
-('Blakely', 'PA', ARRAY[18452], 41.4859, (-75.6012)),
-('Covedale', 'OH', ARRAY[45238], 39.1267, (-84.6370)),
-('Fishhook', 'AK', ARRAY[99654], 61.7110, (-149.2657)),
-('Heathcote', 'NJ', ARRAY[08540], 40.3908, (-74.5756)),
-('Keyes', 'CA', ARRAY[95326, 95307], 37.5618, (-120.9088)),
-('Oyster Bay', 'NY', ARRAY[11732], 40.8661, (-73.5325)),
-('University at Buffalo', 'NY', ARRAY[14228, 14260], 43.0025, (-78.7887)),
-('Eagar', 'AZ', ARRAY[85925], 34.1058, (-109.2956)),
-('Hebron', 'KY', ARRAY[41005, 41021], 39.0626, (-84.7090)),
-('Pinehurst', 'TX', ARRAY[77362], 30.1889, (-95.7017)),
-('Homeland Park', 'SC', ARRAY[29626], 34.4644, (-82.6593)),
-('Cocoa West', 'FL', ARRAY[32926], 28.3595, (-80.7712)),
-('Gardnerville', 'NV', ARRAY[89410], 38.9390, (-119.7369)),
-('Heber Springs', 'AR', ARRAY[72545], 35.5003, (-92.0332)),
-('Ashton-Sandy Spring', 'MD', ARRAY[20860, 20833, 20905], 39.1515, (-77.0065)),
-('Dunlap', 'IN', ARRAY[46516], 41.6346, (-85.9235)),
-('Los Ranchos de Albuquerque', 'NM', ARRAY[87107], 35.1625, (-106.6481)),
-('Edgewood', 'NM', ARRAY[87015], 35.1318, (-106.2151)),
-('Scenic Oaks', 'TX', ARRAY[78006], 29.7038, (-98.6713)),
-('Alpine', 'TX', ARRAY[79832], 30.3640, (-103.6650)),
-('Willard', 'OH', ARRAY[44888], 41.0518, (-82.7232)),
-('Lee Acres', 'NM', ARRAY[87413], 36.7103, (-108.0725)),
-('Ontario', 'OH', ARRAY[44903, 44096, 44862], 40.7710, (-82.6105)),
-('North Hobbs', 'NM', ARRAY[88240], 32.7731, (-103.1250)),
-('Anaconda', 'MT', ARRAY[59711, 59762], 46.0607, (-113.0679)),
-('Country Homes', 'WA', ARRAY[99218, 99251], 47.7478, (-117.4196)),
-('Indian Hills', 'NV', ARRAY[89423], 39.0894, (-119.7977)),
-('Hidden Valley Lake', 'CA', ARRAY[95467], 38.8003, (-122.5505)),
-('Dacono', 'CO', ARRAY[80603, 80514], 40.0620, (-104.9484)),
-('Cumberland', 'IN', ARRAY[46140], 39.7844, (-85.9458)),
-('Davenport', 'FL', ARRAY[33837, 33836], 28.1588, (-81.6084)),
-('Conley', 'GA', ARRAY[30297, 30294], 33.6398, (-84.3376)),
-('Eldorado at Santa Fe', 'NM', ARRAY[87540], 35.5273, (-105.9340)),
-('Wheelersburg', 'OH', ARRAY[45694], 38.7383, (-82.8421)),
-('District Heights', 'MD', ARRAY[20753], 38.8588, (-76.8885)),
-('Northern Cambria', 'PA', ARRAY[15775], 40.6561, (-78.7784)),
-('North Hills', 'NY', ARRAY[11576], 40.7765, (-73.6778)),
-('Newport', 'AR', ARRAY[72043], 35.6234, (-91.2322)),
-('East Alton', 'IL', ARRAY[62018, 62002], 38.8840, (-90.1073)),
-('Progreso', 'TX', ARRAY[78596], 26.0962, (-97.9566)),
-('Tracyton', 'WA', ARRAY[98310], 47.6095, (-122.6533)),
-('Wesley Hills', 'NY', ARRAY[10901, 10977], 41.1579, (-74.0768)),
-('Taylor', 'PA', ARRAY[18518], 41.3957, (-75.7147)),
-('West Modesto', 'CA', ARRAY[95351], 37.6180, (-121.0343)),
-('Clanton', 'AL', ARRAY[35046, 36045], 32.8440, (-86.6230)),
-('Brookhaven', 'WV', ARRAY[26531], 39.6062, (-79.8812)),
-('Gray', 'LA', ARRAY[70360, 70364], 29.6776, (-90.7833)),
-('Raleigh Hills', 'OR', ARRAY[97223], 45.4852, (-122.7567)),
-('Willard', 'MO', ARRAY[65803], 37.2929, (-93.4171)),
-('Los Chaves', 'NM', ARRAY[87031], 34.7332, (-106.7631)),
-('Stratmoor', 'CO', ARRAY[80911], 38.7732, (-104.7787)),
-('St. Johnsbury', 'VT', ARRAY[05863], 44.4287, (-72.0116)),
-('Crosspointe', 'VA', ARRAY[22079], 38.7253, (-77.2638)),
-('Windcrest', 'TX', ARRAY[78218], 29.5149, (-98.3818)),
-('Elsmere', 'DE', ARRAY[19805], 39.7385, (-75.5946)),
-('Hutchins', 'TX', ARRAY[75241], 32.6421, (-96.7093)),
-('Posen', 'IL', ARRAY[60469], 41.6291, (-87.6858)),
-('Paoli', 'PA', ARRAY[19301], 40.0420, (-75.4912)),
-('Atmore', 'AL', ARRAY[36503], 31.0927, (-87.4763)),
-('Durham', 'CA', ARRAY[95928, 95938, 95958], 39.6232, (-121.7875)),
-('Mount Arlington', 'NJ', ARRAY[07856], 40.9190, (-74.6390)),
-('Shady Side', 'MD', ARRAY[20764, 20778], 38.8285, (-76.5211)),
-('Cave Creek', 'AZ', ARRAY[85331], 33.8513, (-111.9801)),
-('Luling', 'TX', ARRAY[78468], 29.6814, (-97.6468)),
-('Naval Academy', 'MD', ARRAY[21412], 38.9859, (-76.4880)),
-('Moosic', 'PA', ARRAY[18507], 41.3584, (-75.7027)),
-('Oreland', 'PA', ARRAY[19075], 40.1148, (-75.1801)),
-('Mayflower Village', 'CA', ARRAY[91006], 34.1160, (-118.0096)),
-('El Granada', 'CA', ARRAY[94018], 37.5134, (-122.4660)),
-('Volo', 'IL', ARRAY[60073, 60041], 42.3298, (-88.1599)),
-('Fellsmere', 'FL', ARRAY[32966], 27.7241, (-80.5975)),
-('Aptos', 'CA', ARRAY[95001], 36.9912, (-121.8934)),
-('Mount Zion', 'IL', ARRAY[62549], 39.7794, (-88.8834)),
-('Marianna', 'FL', ARRAY[32447, 32448], 30.7943, (-85.2260)),
-('The Village of Indian Hill', 'OH', ARRAY[45243], 39.1916, (-84.3344)),
-('Palmview', 'TX', ARRAY[78572], 26.2303, (-98.3791)),
-('Sidney', 'NE', ARRAY[69160], 41.1340, (-102.9681)),
-('Dickson City', 'PA', ARRAY[18519], 41.4684, (-75.6358)),
-('Fort Wright', 'KY', ARRAY[41015, 41017], 39.0462, (-84.5362)),
-('Warrenton', 'OR', ARRAY[97121], 46.1685, (-123.9302)),
-('Oceanport', 'NJ', ARRAY[07757], 40.3160, (-74.0205)),
-('Douglass Hills', 'KY', ARRAY[40223], 38.2366, (-85.5499)),
-('North Fort Lewis', 'WA', ARRAY[98493], 47.1220, (-122.5966)),
-('Demopolis', 'AL', ARRAY[36742], 32.4980, (-87.8298)),
-('James City', 'NC', ARRAY[28562], 35.0592, (-77.0200)),
-('Media', 'PA', ARRAY[19091], 39.9198, (-75.3888)),
-('Forestbrook', 'SC', ARRAY[29579], 33.7243, (-78.9678)),
-('Pecan Acres', 'TX', ARRAY[76179], 32.9703, (-97.4727)),
-('Wailea', 'HI', ARRAY[96753], 20.6873, (-156.4291)),
-('Gardiner', 'ME', ARRAY[04359], 44.1910, (-69.7921)),
-('Bright', 'IN', ARRAY[47060], 39.2254, (-84.8613)),
-('Pontoon Beach', 'IL', ARRAY[62040, 62234], 38.7208, (-90.0609)),
-('Groveport', 'OH', ARRAY[43195, 43199], 39.8585, (-82.8978)),
-('Salton City', 'CA', ARRAY[92274], 33.2994, (-115.9609)),
-('Lake Delton', 'WI', ARRAY[53965, 53940], 43.5932, (-89.7842)),
-('Cottleville', 'MO', ARRAY[63304, 63338], 38.7513, (-90.6582)),
-('Blaine', 'WA', ARRAY[98231], 48.9839, (-122.7414)),
-('Semmes', 'AL', ARRAY[36575, 36663], 30.7941, (-88.2358)),
-('Seminole', 'OK', ARRAY[74884, 74818], 35.2346, (-96.6500)),
-('Frankenmuth', 'MI', ARRAY[48787], 43.3321, (-83.7395)),
-('Belmar', 'NJ', ARRAY[07715], 40.1798, (-74.0255)),
-('Palermo', 'CA', ARRAY[95965, 95966], 39.4313, (-121.5225)),
-('Old Fig Garden', 'CA', ARRAY[93705], 36.7989, (-119.8051)),
-('Falcon Heights', 'MN', ARRAY[55108], 44.9899, (-93.1770)),
-('Elmwood', 'LA', ARRAY[70123], 29.9555, (-90.1880)),
-('Old Bethpage', 'NY', ARRAY[11735], 40.7557, (-73.4544)),
-('Massanetta Springs', 'VA', ARRAY[22846], 38.3899, (-78.8340)),
-('Baxley', 'GA', ARRAY[31515], 31.7643, (-82.3508)),
-('Swartz Creek', 'MI', ARRAY[48473], 42.9626, (-83.8260)),
-('Stokesdale', 'NC', ARRAY[27284], 36.2318, (-79.9834)),
-('Scituate', 'MA', ARRAY[02040], 42.1867, (-70.7355)),
-('Severance', 'CO', ARRAY[80550, 80615, 80610], 40.5270, (-104.8642)),
-('Peculiar', 'MO', ARRAY[64078], 38.7306, (-94.4736)),
-('Rincon Valley', 'AZ', ARRAY[85641], 32.1101, (-110.6889)),
-('Buckner', 'KY', ARRAY[40014, 40010], 38.3867, (-85.4503)),
-('Jim Thorpe', 'PA', ARRAY[18235], 40.8712, (-75.7433)),
-('Carlisle', 'OH', ARRAY[45005], 39.5807, (-84.3201)),
-('Arlington Heights', 'PA', ARRAY[18301], 41.0039, (-75.2116)),
-('Hanamaulu', 'HI', ARRAY[96715], 21.9954, (-159.3493)),
-('Basehor', 'KS', ARRAY[66007], 39.1332, (-94.9333)),
-('Kensington', 'CA', ARRAY[94707], 37.9084, (-122.2805)),
-('Kenai', 'AK', ARRAY[99511], 60.5619, (-151.1985)),
-('Coal City', 'IL', ARRAY[60416], 41.2772, (-88.2803)),
-('Valparaiso', 'FL', ARRAY[32542], 30.4926, (-86.5079)),
-('Pinardville', 'NH', ARRAY[03102], 43.0010, (-71.5171)),
-('Minot AFB', 'ND', ARRAY[58704, 58703], 48.4209, (-101.3381)),
-('Jamul', 'CA', ARRAY[91935], 32.7184, (-116.8709)),
-('Mount Carmel', 'OH', ARRAY[45245], 39.0978, (-84.2995)),
-('Sunset', 'UT', ARRAY[84056], 41.1392, (-112.0285)),
-('Ward', 'AR', ARRAY[72176], 35.0117, (-91.9577)),
-('De Soto', 'KS', ARRAY[66019], 38.9686, (-94.9548)),
-('West Hills', 'NY', ARRAY[11747], 40.8198, (-73.4339)),
-('Exton', 'PA', ARRAY[19353], 40.0307, (-75.6303)),
-('Sterling', 'AK', ARRAY[99669], 60.5405, (-150.8089)),
-('Cavalero', 'WA', ARRAY[98205], 47.9846, (-122.0743)),
-('Batesburg-Leesville', 'SC', ARRAY[29006], 33.9125, (-81.5313)),
-('Brent', 'AL', ARRAY[35034], 32.9421, (-87.1753)),
-('Bulverde', 'TX', ARRAY[78070], 29.7744, (-98.4364)),
-('Williamson', 'AZ', ARRAY[86305], 34.7082, (-112.5342)),
-('Kings Point', 'NY', ARRAY[11023], 40.8162, (-73.7407)),
-('Myrtletown', 'CA', ARRAY[95501], 40.7888, (-124.1286)),
-('Zephyrhills West', 'FL', ARRAY[33541], 28.2311, (-82.2052)),
-('Cave Springs', 'AR', ARRAY[72718], 36.2701, (-94.2225)),
-('Samsula-Spruce Creek', 'FL', ARRAY[32168], 29.0484, (-81.0628)),
-('Rothschild', 'WI', ARRAY[54476], 44.8761, (-89.6173)),
-('Grandwood Park', 'IL', ARRAY[60046], 42.3929, (-87.9871)),
-('Albertson', 'NY', ARRAY[11577], 40.7715, (-73.6482)),
-('McGuire AFB', 'NJ', ARRAY[08562], 40.0285, (-74.5883)),
-('Walkertown', 'NC', ARRAY[27101, 27051], 36.1578, (-80.1642)),
-('Ranson', 'WV', ARRAY[25430], 39.3250, (-77.8666)),
-('Wrightsboro', 'NC', ARRAY[28405, 28429], 34.2895, (-77.9217)),
-('Hollywood', 'SC', ARRAY[29449], 32.7523, (-80.2106)),
-('Gilmer', 'TX', ARRAY[75644], 32.7317, (-94.9460)),
-('Quantico Base', 'VA', ARRAY[22135], 38.5228, (-77.3187)),
-('Big Flats', 'NY', ARRAY[14814, 14903], 42.1621, (-76.9015)),
-('Lake Montezuma', 'AZ', ARRAY[86342], 34.6414, (-111.7960)),
-('Roseburg North', 'OR', ARRAY[97495], 43.2653, (-123.3025)),
-('Gardnertown', 'NY', ARRAY[12551, 12552], 41.5328, (-74.0594)),
-('Obetz', 'OH', ARRAY[43137, 43207], 39.8671, (-82.9451)),
-('Sawmills', 'NC', ARRAY[28638], 35.8162, (-81.4779)),
-('Thiells', 'NY', ARRAY[10923], 41.2067, (-74.0122)),
-('Parker', 'TX', ARRAY[75002], 33.0570, (-96.6248)),
-('Cold Spring Harbor', 'NY', ARRAY[11724], 40.8608, (-73.4488)),
-('Zephyrhills South', 'FL', ARRAY[33541], 28.2152, (-82.1886)),
-('Three Points', 'AZ', ARRAY[85736, 85732], 32.0596, (-111.2866)),
-('Ettrick', 'VA', ARRAY[23806, 23834], 37.2435, (-77.4287)),
-('Erwin', 'NC', ARRAY[28334], 35.3226, (-78.6734)),
-('Grambling', 'LA', ARRAY[71270], 32.5276, (-92.7124)),
-('Bristol', 'WI', ARRAY[53104, 53194], 42.5378, (-88.0149)),
-('Red Oak', 'IA', ARRAY[51591], 41.0141, (-95.2248)),
-('Margaret', 'AL', ARRAY[35120], 33.6735, (-86.4680)),
-('Lone Grove', 'OK', ARRAY[73401], 34.1809, (-97.2559)),
-('Utica', 'MI', ARRAY[48317, 48318], 42.6290, (-83.0218)),
-('Fox Chapel', 'PA', ARRAY[15238], 40.5247, (-79.8898)),
-('Midway North', 'TX', ARRAY[78596], 26.1872, (-98.0188)),
-('Offutt AFB', 'NE', ARRAY[68123], 41.1207, (-95.9209)),
-('Glencoe', 'AL', ARRAY[35905], 33.9449, (-85.9319)),
-('Bay Hill', 'FL', ARRAY[32819], 28.4558, (-81.5122)),
-('Munroe Falls', 'OH', ARRAY[44262], 41.1386, (-81.4344)),
-('Canutillo', 'TX', ARRAY[79835], 31.9185, (-106.6006)),
-('Garnet', 'CA', ARRAY[92241], 33.9179, (-116.4796)),
-('Carver', 'MN', ARRAY[55318], 44.7600, (-93.6305)),
-('Dundee', 'FL', ARRAY[33877, 33838, 33844], 28.0115, (-81.5995)),
-('East Flat Rock', 'NC', ARRAY[28726, 28731], 35.2802, (-82.4171)),
-('Barling', 'AR', ARRAY[72923], 35.3284, (-94.2792)),
-('Gates', 'NY', ARRAY[14624], 43.1569, (-77.6930)),
-('Citrus Park', 'AZ', ARRAY[85340], 33.5304, (-112.4440)),
-('Olyphant', 'PA', ARRAY[18512, 18448], 41.4507, (-75.5753)),
-('Midfield', 'AL', ARRAY[35228], 33.4552, (-86.9226)),
-('Timnath', 'CO', ARRAY[80528, 80524, 80525], 40.5343, (-104.9620)),
-('Dellwood', 'MO', ARRAY[63135], 38.7564, (-90.2767)),
-('Highgrove', 'CA', ARRAY[92324, 92507], 34.0106, (-117.3098)),
-('Loughman', 'FL', ARRAY[33837], 28.2381, (-81.5685)),
-('Huxley', 'IA', ARRAY[50124], 41.8963, (-93.5914)),
-('Harrah', 'OK', ARRAY[73045], 35.4779, (-97.1857)),
-('Marshfield', 'MA', ARRAY[02065], 42.0939, (-70.7049)),
-('White Hall', 'AR', ARRAY[71612], 34.2737, (-92.1005)),
-('Jonesboro', 'GA', ARRAY[30237], 33.5212, (-84.3541)),
-('Parker', 'AZ', ARRAY[85346], 34.0286, (-114.2224)),
-('Prairie Grove', 'AR', ARRAY[72730], 35.9858, (-94.3048)),
-('Eagleville', 'PA', ARRAY[19408], 40.1604, (-75.4090)),
-('Maize', 'KS', ARRAY[67223], 37.7748, (-97.4620)),
-('Pleasant Garden', 'NC', ARRAY[27313], 35.9595, (-79.7599)),
-('Long View', 'NC', ARRAY[28602], 35.7217, (-81.3858)),
-('Royal Pines', 'NC', ARRAY[28704], 35.4783, (-82.5038)),
-('Midway', 'NC', ARRAY[27107], 35.9751, (-80.2204)),
-('Eastwood', 'LA', ARRAY[71067], 32.5606, (-93.5625)),
-('Deale', 'MD', ARRAY[20733, 20779], 38.7910, (-76.5469)),
-('Sugarcreek', 'PA', ARRAY[16323, 16343], 41.4380, (-79.8183)),
-('Winona Lake', 'IN', ARRAY[46590], 41.2166, (-85.8106)),
-('Centreville', 'IL', ARRAY[62205, 62203], 38.5798, (-90.1039)),
-('Sawgrass', 'FL', ARRAY[32004], 30.1900, (-81.3704)),
-('Flower Hill', 'NY', ARRAY[11576, 11050], 40.8075, (-73.6755)),
-('Desloge', 'MO', ARRAY[63601], 37.8751, (-90.5192)),
-('Miami Heights', 'OH', ARRAY[45248], 39.1687, (-84.7152)),
-('Shenandoah', 'IA', ARRAY[51603], 40.7583, (-95.3720)),
-('Vamo', 'FL', ARRAY[34238, 34229], 27.2254, (-82.4944)),
-('East Harwich', 'MA', ARRAY[02661], 41.7081, (-70.0339)),
-('Highland', 'IN', ARRAY[47711], 38.0474, (-87.5616)),
-('Highland Lakes', 'NJ', ARRAY[07422], 41.1716, (-74.4643)),
-('Childersburg', 'AL', ARRAY[35014], 33.2961, (-86.3457)),
-('Green Tree', 'PA', ARRAY[15220, 15242, 15244, 15283], 40.4170, (-80.0544)),
-('Rockford', 'MN', ARRAY[55373], 45.0920, (-93.7453)),
-('West Milton', 'OH', ARRAY[45383], 39.9585, (-84.3262)),
-('Pascoag', 'RI', ARRAY[02824], 41.9518, (-71.7041)),
-('Hartsdale', 'NY', ARRAY[10530], 41.0153, (-73.8036)),
-('New Burlington', 'OH', ARRAY[45231], 39.2624, (-84.5520)),
-('Whitfield', 'PA', ARRAY[19608, 19610], 40.3358, (-76.0048)),
-('Guerneville', 'CA', ARRAY[95471], 38.5137, (-122.9894)),
-('West Sayville', 'NY', ARRAY[11796], 40.7294, (-73.1050)),
-('Bethel', 'AK', ARRAY[99545], 60.7928, (-161.7917)),
-('Magnolia', 'TX', ARRAY[77355], 30.2117, (-95.7419)),
-('West Jefferson', 'OH', ARRAY[43162], 39.9481, (-83.2983)),
-('Hyde Park', 'UT', ARRAY[84335], 41.8008, (-111.8119)),
-('Santa Venetia', 'CA', ARRAY[94903], 38.0055, (-122.5032)),
-('Vandercook Lake', 'MI', ARRAY[49203], 42.1916, (-84.3854)),
-('Clifton Forge', 'VA', ARRAY[24474], 37.8232, (-79.8250)),
-('Potosi', 'MO', ARRAY[63660], 37.9337, (-90.7750)),
-('Dodgeville', 'WI', ARRAY[53595], 42.9660, (-90.1297)),
-('Bloomfield', 'WI', ARRAY[53128, 53157], 42.5488, (-88.3520)),
-('Spry', 'PA', ARRAY[17402, 17313], 39.9125, (-76.6863)),
-('Nowthen', 'MN', ARRAY[55330], 45.3421, (-93.4495)),
-('Michigan Center', 'MI', ARRAY[49201, 49203], 42.2267, (-84.3230)),
-('Palos Park', 'IL', ARRAY[60439], 41.6682, (-87.8885)),
-('Battlement Mesa', 'CO', ARRAY[81636], 39.4505, (-108.0066)),
-('Mead', 'CO', ARRAY[80504, 80513], 40.2321, (-104.9928)),
-('Silverton', 'OH', ARRAY[45236, 45227], 39.1884, (-84.4010)),
-('Penitas', 'TX', ARRAY[78572], 26.2508, (-98.4426)),
-('Crystal City', 'MO', ARRAY[63019], 38.2226, (-90.3813)),
-('Briar', 'TX', ARRAY[76020], 32.9884, (-97.5528)),
-('Spotsylvania Courthouse', 'VA', ARRAY[22551], 38.1982, (-77.5885)),
-('Sherman', 'IL', ARRAY[62707], 39.8876, (-89.6066)),
-('South Lebanon', 'OH', ARRAY[45036, 45034, 45039], 39.3672, (-84.2204)),
-('Rock Hill', 'MO', ARRAY[63144], 38.6091, (-90.3673)),
-('Franklin Center', 'NJ', ARRAY[08890], 40.5321, (-74.5415)),
-('Old Westbury', 'NY', ARRAY[11568], 40.7866, (-73.5975)),
-('Perezville', 'TX', ARRAY[78572], 26.2396, (-98.4023)),
-('Wickenburg', 'AZ', ARRAY[85358], 33.9837, (-112.7668)),
-('Bushnell', 'FL', ARRAY[33538, 33585], 28.6856, (-82.1160)),
-('Harlan', 'IA', ARRAY[51593], 41.6496, (-95.3268)),
-('Loch Lomond', 'VA', ARRAY[20111], 38.7812, (-77.4817)),
-('Roselawn', 'IN', ARRAY[46372], 41.1535, (-87.2881)),
-('Neptune City', 'NJ', ARRAY[07754], 40.2005, (-74.0333)),
-('Hollister', 'MO', ARRAY[65673], 36.6058, (-93.2338)),
-('Coopertown', 'TN', ARRAY[37172, 37146], 36.4143, (-86.9658)),
-('Nikiski', 'AK', ARRAY[99635], 60.7152, (-151.2317)),
-('Pine Level', 'AL', ARRAY[36022], 32.5797, (-86.4529)),
-('White City', 'FL', ARRAY[34981], 27.3722, (-80.3403)),
-('Breckenridge Hills', 'MO', ARRAY[63074], 38.7158, (-90.3685)),
-('Campbelltown', 'PA', ARRAY[17010], 40.2761, (-76.5848)),
-('Paulden', 'AZ', ARRAY[86334], 34.8899, (-112.4938)),
-('Searingtown', 'NY', ARRAY[11577, 11576], 40.7705, (-73.6603)),
-('Pea Ridge', 'FL', ARRAY[32571], 30.6029, (-87.1022)),
-('Elko New Market', 'MN', ARRAY[55054], 44.5667, (-93.3380)),
-('Lake Holiday', 'IL', ARRAY[60552], 41.6156, (-88.6703)),
-('Surfside Beach', 'SC', ARRAY[29587], 33.6093, (-78.9772)),
-('Flourtown', 'PA', ARRAY[19031], 40.1039, (-75.2069)),
-('Raynham Center', 'MA', ARRAY[02768], 41.9327, (-71.0431)),
-('South Hill', 'VA', ARRAY[23950], 36.7254, (-78.1287)),
-('Gibraltar', 'MI', ARRAY[48183], 42.0960, (-83.2029)),
-('Reminderville', 'OH', ARRAY[44202], 41.3338, (-81.4018)),
-('Oak Hill', 'TN', ARRAY[37220], 36.0735, (-86.7856)),
-('Capitol Heights', 'MD', ARRAY[20790, 20791, 20799], 38.8766, (-76.9074)),
-('Westwood', 'KY', ARRAY[41101], 38.4806, (-82.6798)),
-('Crystal River', 'FL', ARRAY[34429], 28.8964, (-82.5992)),
-('Alachua', 'FL', ARRAY[32616], 29.7778, (-82.4831)),
-('Edwardsville', 'KS', ARRAY[66113], 39.0765, (-94.8166)),
-('Fremont', 'MI', ARRAY[49413], 43.4630, (-85.9541)),
-('Florence', 'MS', ARRAY[39218], 32.1557, (-90.1225)),
-('Ottawa Hills', 'OH', ARRAY[43606], 41.6682, (-83.6433)),
-('Jamestown', 'NC', ARRAY[27265], 35.9985, (-79.9347)),
-('Sierra View', 'PA', ARRAY[18610], 41.0007, (-75.4476)),
-('Spurgeon', 'TN', ARRAY[37663], 36.4430, (-82.4621)),
-('Walhalla', 'SC', ARRAY[29691], 34.7705, (-83.0615)),
-('Pinetop-Lakeside', 'AZ', ARRAY[85929], 34.1486, (-109.9658)),
-('Lindale', 'GA', ARRAY[30161], 34.1884, (-85.1808)),
-('Bonsall', 'CA', ARRAY[92084], 33.2761, (-117.1942)),
-('Connerton', 'FL', ARRAY[34639], 28.3022, (-82.4624)),
-('Pleasant Run', 'OH', ARRAY[45231], 39.2927, (-84.5757)),
-('Cramerton', 'NC', ARRAY[28012], 35.2344, (-81.0734)),
-('North Alamo', 'TX', ARRAY[78516], 26.2160, (-98.1264)),
-('Boiling Springs', 'NC', ARRAY[28152], 35.2521, (-81.6636)),
-('Cortez', 'FL', ARRAY[34210], 27.4668, (-82.6687)),
-('Unalaska', 'AK', ARRAY[99685], 53.8984, (-166.5680)),
-('Tazewell', 'VA', ARRAY[24630], 37.1268, (-81.5134)),
-('Fulton', 'MD', ARRAY[20759], 39.1516, (-76.9163)),
-('Crestline', 'OH', ARRAY[44827], 40.7836, (-82.7458)),
-('Valdese', 'NC', ARRAY[28690, 28655], 35.7566, (-81.5634)),
-('Perryville', 'MD', ARRAY[21904], 39.5738, (-76.0669)),
-('Planada', 'CA', ARRAY[95365], 37.2892, (-120.3207)),
-('McMurray', 'PA', ARRAY[15317], 40.2815, (-80.0874)),
-('Okauchee Lake', 'WI', ARRAY[53066], 43.1248, (-88.4408)),
-('Mather', 'CA', ARRAY[95827], 38.5489, (-121.2832)),
-('Cortland', 'IL', ARRAY[60151], 41.9255, (-88.6794)),
-('Kingsville', 'MD', ARRAY[21087], 39.4496, (-76.4204)),
-('Santa Ynez', 'CA', ARRAY[93460], 34.6151, (-120.0944)),
-('Clarkdale', 'AZ', ARRAY[86324], 34.7503, (-112.0550)),
-('Fort Pierce South', 'FL', ARRAY[34981], 27.4096, (-80.3539)),
-('Goldstream', 'AK', ARRAY[99708, 99710], 64.9339, (-148.0083)),
-('Larksville', 'PA', ARRAY[18651], 41.2639, (-75.9326)),
-('Cornwall', 'PA', ARRAY[17016, 17085], 40.2659, (-76.4077)),
-('Wonder Lake', 'IL', ARRAY[60050], 42.3792, (-88.3496)),
-('Euharlee', 'GA', ARRAY[30120], 34.1441, (-84.9327)),
-('Clarkson', 'NY', ARRAY[14430], 43.2398, (-77.9162)),
-('Lake Providence', 'LA', ARRAY[71254, 71154], 32.8133, (-91.1826)),
-('Shallotte', 'NC', ARRAY[28470], 33.9759, (-78.3807)),
-('Argo', 'AL', ARRAY[35120], 33.6961, (-86.5066)),
-('Lake Wisconsin', 'WI', ARRAY[53555], 43.3782, (-89.5762)),
-('Four Corners', 'MT', ARRAY[59771], 45.6704, (-111.1780)),
-('Hayfield', 'VA', ARRAY[22315], 38.7536, (-77.1321)),
-('Noyack', 'NY', ARRAY[11969], 40.9827, (-72.3350)),
-('Garden City South', 'NY', ARRAY[11552], 40.7121, (-73.6605)),
-('Beavercreek', 'OR', ARRAY[97004], 45.2756, (-122.5136)),
-('Spring Valley Village', 'TX', ARRAY[77055], 29.7898, (-95.5041)),
-('West Ocean City', 'MD', ARRAY[21811], 38.3476, (-75.1115)),
-('Clearwater', 'SC', ARRAY[29842], 33.5038, (-81.9100)),
-('Suquamish', 'WA', ARRAY[98370], 47.7237, (-122.5830)),
-('Holmes Beach', 'FL', ARRAY[34218], 27.5108, (-82.7153)),
-('Madeira Beach', 'FL', ARRAY[33738], 27.7985, (-82.7887)),
-('Goulding', 'FL', ARRAY[32503], 30.4397, (-87.2299)),
-('Slaughterville', 'OK', ARRAY[73068], 35.0910, (-97.2879)),
-('La Joya', 'TX', ARRAY[78560], 26.2518, (-98.4699)),
-('Nelson', 'GA', ARRAY[30107, 30151], 34.3790, (-84.3707)),
-('Grant-Valkaria', 'FL', ARRAY[32950, 32949], 27.9322, (-80.5655)),
-('Buena', 'NJ', ARRAY[08310, 08341, 08360], 39.5282, (-74.9448)),
-('Adamsville', 'AL', ARRAY[35005, 35060, 35073], 33.6063, (-86.9745)),
-('Imperial', 'MO', ARRAY[63052], 38.3672, (-90.3706)),
-('Welcome', 'NC', ARRAY[27374], 35.9066, (-80.2548)),
-('Shady Hollow', 'TX', ARRAY[78739], 30.1646, (-97.8629)),
-('Rising Sun-Lebanon', 'DE', ARRAY[19962, 19901], 39.0999, (-75.5047)),
-('Larch Way', 'WA', ARRAY[98037], 47.8429, (-122.2528)),
-('Mulberry', 'FL', ARRAY[33860, 33863], 27.9058, (-81.9872)),
-('Hokes Bluff', 'AL', ARRAY[35905], 33.9902, (-85.8639)),
-('Edgewood', 'OH', ARRAY[44005], 41.8783, (-80.7461)),
-('Freeburg', 'IL', ARRAY[62243], 38.4398, (-89.9170)),
-('Monroeville', 'AL', ARRAY[36461], 31.5162, (-87.3279)),
-('Mojave', 'CA', ARRAY[93502], 35.0139, (-118.1895)),
-('Dorneyville', 'PA', ARRAY[18103], 40.5755, (-75.5188)),
-('Harbison Canyon', 'CA', ARRAY[92019, 91901], 32.8273, (-116.8381)),
-('Mount Pleasant', 'PA', ARRAY[15685], 40.1510, (-79.5435)),
-('Kenmar', 'PA', ARRAY[17754], 41.2547, (-76.9550)),
-('University Gardens', 'NY', ARRAY[11020], 40.7751, (-73.7279)),
-('Woodstock', 'AL', ARRAY[35111], 33.2193, (-87.1489)),
-('Orangeburg', 'NY', ARRAY[10976], 41.0488, (-73.9407)),
-('Central Gardens', 'TX', ARRAY[77705], 29.9893, (-94.0217)),
-('Heritage Hills', 'NY', ARRAY[10540], 41.3398, (-73.7016)),
-('Scandia', 'MN', ARRAY[55047], 45.2540, (-92.8278)),
-('Indian Mountain Lake', 'PA', ARRAY[18210], 41.0003, (-75.5058)),
-('Tiffin', 'IA', ARRAY[52240], 41.7067, (-91.6582)),
-('Oakwood', 'GA', ARRAY[30542, 30502], 34.2237, (-83.8849)),
-('Port Reading', 'NJ', ARRAY[07001, 07064], 40.5669, (-74.2475)),
-('Herculaneum', 'MO', ARRAY[63048], 38.2579, (-90.3949)),
-('McSwain', 'CA', ARRAY[95301], 37.3146, (-120.5867)),
-('Dewey-Humboldt', 'AZ', ARRAY[86327], 34.5175, (-112.2498)),
-('Holtville', 'AL', ARRAY[36022], 32.6314, (-86.3268)),
-('Alfred', 'NY', ARRAY[14803], 42.2541, (-77.7897)),
-('Christopher', 'IL', ARRAY[62822], 37.9708, (-89.0531)),
-('New Tazewell', 'TN', ARRAY[37824], 36.4381, (-83.6053)),
-('Skippack', 'PA', ARRAY[19426, 19474, 19473, 19430], 40.2225, (-75.3998)),
-('Grant', 'MN', ARRAY[55082], 45.0825, (-92.9090)),
-('Malmstrom AFB', 'MT', ARRAY[59402], 47.5059, (-111.1825)),
-('Walthourville', 'GA', ARRAY[31313, 31333], 31.7716, (-81.6216)),
-('Goodview', 'MN', ARRAY[55987], 44.0693, (-91.7167)),
-('Niwot', 'CO', ARRAY[80503], 40.0980, (-105.1552)),
-('Moxee', 'WA', ARRAY[98901], 46.5640, (-120.3966)),
-('Rosewood Heights', 'IL', ARRAY[62018], 38.8885, (-90.0722)),
-('West Milwaukee', 'WI', ARRAY[53214, 53215], 43.0124, (-87.9710)),
-('Whiteman AFB', 'MO', ARRAY[65305], 38.7302, (-93.5590)),
-('Austin', 'AR', ARRAY[72176], 35.0061, (-91.9895)),
-('Herricks', 'NY', ARRAY[11596], 40.7567, (-73.6635)),
-('Mississippi State', 'MS', ARRAY[39762], 33.4515, (-88.7913)),
-('Arcadia', 'SC', ARRAY[29301, 29336], 34.9609, (-81.9929)),
-('Rio Dell', 'CA', ARRAY[95562], 40.5022, (-124.1103)),
-('Bethlehem', 'NC', ARRAY[28681], 35.8162, (-81.2962)),
-('Ellisburg', 'NJ', ARRAY[08034], 39.9199, (-75.0093)),
-('Haleiwa', 'HI', ARRAY[96791], 21.5871, (-158.1074)),
-('Lorane', 'PA', ARRAY[19508], 40.2921, (-75.8486)),
-('Eatonton', 'GA', ARRAY[31026], 33.3258, (-83.3886)),
-('Northwest Harwich', 'MA', ARRAY[02645, 02646], 41.6917, (-70.1027)),
-('Peaceful Valley', 'WA', ARRAY[98244, 98266], 48.9477, (-122.1406)),
-('North El Monte', 'CA', ARRAY[91006], 34.1030, (-118.0238)),
-('Weaverville', 'NC', ARRAY[28804], 35.6963, (-82.5584)),
-('Riva', 'MD', ARRAY[21037, 21140], 38.9449, (-76.5876)),
-('Fussels Corner', 'FL', ARRAY[33801], 28.0574, (-81.8610)),
-('Fenton', 'MO', ARRAY[63099], 38.5279, (-90.4489)),
-('Churchville', 'PA', ARRAY[18954], 40.1994, (-74.9986)),
-('South Chicago Heights', 'IL', ARRAY[60411], 41.4831, (-87.6370)),
-('Kahaluu-Keauhou', 'HI', ARRAY[96739], 19.5726, (-155.9580)),
-('Lakewood', 'IL', ARRAY[60098], 42.2278, (-88.3930)),
-('Alexandria', 'AL', ARRAY[36250], 33.7675, (-85.8792)),
-('Silver Lake', 'NJ', ARRAY[07003], 40.7804, (-74.1829)),
-('Shannon Hills', 'AR', ARRAY[72103], 34.6157, (-92.4217)),
-('Captain Cook', 'HI', ARRAY[96750], 19.4995, (-155.8937)),
-('Mills', 'WY', ARRAY[82601, 82644], 42.8473, (-106.3830)),
-('Shavano Park', 'TX', ARRAY[78230, 78249], 29.5861, (-98.5563)),
-('Park Hill', 'OK', ARRAY[74471, 74464], 35.8546, (-94.9559)),
-('Spencer', 'OK', ARRAY[73084], 35.5108, (-97.3715)),
-('Verona', 'VA', ARRAY[24482], 38.1939, (-79.0087)),
-('Thorndale', 'PA', ARRAY[19335], 39.9991, (-75.7517)),
-('Holloman AFB', 'NM', ARRAY[88352], 32.8483, (-106.0998)),
-('South Brooksville', 'FL', ARRAY[34601], 28.5243, (-82.4158)),
-('Nichols Hills', 'OK', ARRAY[73120], 35.5468, (-97.5444)),
-('Clearview', 'WA', ARRAY[98012, 98072], 47.8292, (-122.1452)),
-('Brewerton', 'NY', ARRAY[13036], 43.2344, (-76.1411)),
-('Deephaven', 'MN', ARRAY[55391], 44.9318, (-93.5293)),
-('Carefree', 'AZ', ARRAY[85327], 33.8234, (-111.9161)),
-('Glenwood Landing', 'NY', ARRAY[11545], 40.8295, (-73.6378)),
-('Tyro', 'NC', ARRAY[27295], 35.7997, (-80.3765)),
-('Fairview', 'NC', ARRAY[28079], 35.1545, (-80.5345)),
-('Green Oaks', 'IL', ARRAY[60048], 42.2954, (-87.9116)),
-('Belleville', 'MI', ARRAY[48112], 42.2021, (-83.4838)),
-('Haleyville', 'AL', ARRAY[35551], 34.2331, (-87.6175)),
-('Odenville', 'AL', ARRAY[35120], 33.6987, (-86.4225)),
-('Farmington', 'ME', ARRAY[04992], 44.6680, (-70.1459)),
-('Dupo', 'IL', ARRAY[62236, 62239], 38.5146, (-90.2168)),
-('Bunk Foss', 'WA', ARRAY[98205], 47.9617, (-122.0944)),
-('Angels', 'CA', ARRAY[95221], 38.0707, (-120.5501)),
-('Rochester', 'WI', ARRAY[53105, 53138], 42.7338, (-88.2489)),
-('Spring House', 'PA', ARRAY[19002], 40.1847, (-75.2267)),
-('Washington Park', 'IL', ARRAY[62203], 38.6285, (-90.0928)),
-('Menands', 'NY', ARRAY[12247], 42.6910, (-73.7271)),
-('Benson', 'AZ', ARRAY[85630], 31.9157, (-110.3257)),
-('Lyncourt', 'NY', ARRAY[13208], 43.0821, (-76.1264)),
-('Cle Elum', 'WA', ARRAY[98922], 47.1943, (-120.9539)),
-('Mountain Home', 'NC', ARRAY[28758], 35.3708, (-82.5021)),
-('Smithton', 'IL', ARRAY[62243, 62285], 38.4159, (-89.9903)),
-('Manchester', 'GA', ARRAY[31830], 32.8566, (-84.6329)),
-('Lake Goodwin', 'WA', ARRAY[98292, 98271], 48.1387, (-122.2804)),
-('Calcium', 'NY', ARRAY[13616], 44.0401, (-75.8468)),
-('Bardonia', 'NY', ARRAY[10954], 41.1129, (-73.9823)),
-('Conway', 'NH', ARRAY[03813, 03818], 43.9845, (-71.1180)),
-('Fairview', 'NJ', ARRAY[07799], 40.3658, (-74.0803)),
-('St. Augusta', 'MN', ARRAY[56301], 45.4497, (-94.1996)),
-('Abbotsford', 'WI', ARRAY[54421], 44.9432, (-90.3169)),
-('Toa Alta', 'PR', ARRAY[00954], 18.3883, (-66.2503)),
-('Nash', 'TX', ARRAY[75501], 33.4422, (-94.1283)),
-('Key Center', 'WA', ARRAY[98329, 98394, 98395], 47.3376, (-122.7505)),
-('Ellenton', 'FL', ARRAY[34221], 27.5266, (-82.5261)),
-('Maytown', 'PA', ARRAY[17547], 40.0791, (-76.5791)),
-('Carmel-by-the-Sea', 'CA', ARRAY[93921, 93922], 36.5528, (-121.9222)),
-('Moss Beach', 'CA', ARRAY[94019], 37.5184, (-122.5036)),
-('Longbranch', 'WA', ARRAY[98351], 47.2257, (-122.7739)),
-('Cross Mountain', 'TX', ARRAY[78255], 29.6535, (-98.6564)),
-('Armona', 'CA', ARRAY[93230], 36.3179, (-119.7054)),
-('Northlake', 'SC', ARRAY[29621], 34.5691, (-82.6837)),
-('Grayling', 'MI', ARRAY[49739], 44.6566, (-84.7091)),
-('Red Rock', 'AZ', ARRAY[85145, 85658], 32.5610, (-111.3745)),
-('Level Park-Oak Park', 'MI', ARRAY[49037], 42.3642, (-85.2665)),
-('Mount Pleasant', 'TN', ARRAY[38474], 35.5484, (-87.1872)),
-('Pleasant Hills', 'MD', ARRAY[21087, 21047, 21018], 39.4861, (-76.3908)),
-('Newfane', 'NY', ARRAY[14028], 43.2857, (-78.6940)),
-('Merton', 'WI', ARRAY[53029, 53056], 43.1423, (-88.3088)),
-('Stanley', 'NC', ARRAY[28164], 35.3552, (-81.0937)),
-('Eastover', 'NC', ARRAY[28312], 35.0958, (-78.7862)),
-('New Hope', 'MS', ARRAY[39703], 33.4521, (-88.3399)),
-('Madison', 'IL', ARRAY[62201, 62060], 38.7001, (-90.1425)),
-('Balm', 'FL', ARRAY[33503], 27.7541, (-82.2882)),
-('Johnson', 'AR', ARRAY[72762, 72741], 36.1328, (-94.1757)),
-('Sumiton', 'AL', ARRAY[35148], 33.7503, (-87.0483)),
-('Bryn Mawr', 'PA', ARRAY[19010], 40.0227, (-75.3156)),
-('West Point', 'GA', ARRAY[31833], 32.8937, (-85.1453)),
-('Madison', 'FL', ARRAY[32341], 30.4716, (-83.4130)),
-('Chattanooga Valley', 'GA', ARRAY[30725], 34.9241, (-85.3431)),
-('Narragansett Pier', 'RI', ARRAY[02880], 41.4280, (-71.4670)),
-('Boulevard Park', 'WA', ARRAY[98168], 47.5136, (-122.3160)),
-('Freedom', 'CA', ARRAY[95019], 36.9402, (-121.7953)),
-('Lyman', 'SC', ARRAY[29365], 34.9661, (-82.1231)),
-('Maiden', 'NC', ARRAY[28650], 35.5853, (-81.2201)),
-('Saxon', 'SC', ARRAY[29301], 34.9616, (-81.9713)),
-('Marietta-Alderwood', 'WA', ARRAY[98226], 48.7932, (-122.5566)),
-('Norwood Young America', 'MN', ARRAY[55368, 55554, 55573], 44.7721, (-93.9192)),
-('Barrett', 'TX', ARRAY[77562], 29.8671, (-95.0537)),
-('Aurora', 'IN', ARRAY[47001], 39.0677, (-84.9046)),
-('Alturas', 'FL', ARRAY[33859, 33841, 33820], 27.8419, (-81.6952)),
-('Sagamore', 'MA', ARRAY[02562], 41.7842, (-70.5332)),
-('Milan', 'NM', ARRAY[87021], 35.1950, (-107.8947)),
-('Muttontown', 'NY', ARRAY[11791, 11732], 40.8254, (-73.5363)),
-('Gordon Heights', 'NY', ARRAY[11953], 40.8645, (-72.9678)),
-('Empire', 'CA', ARRAY[95357], 37.6432, (-120.9045)),
-('Kennedy', 'CA', ARRAY[95206], 37.9290, (-121.2457)),
-('Lloyd Harbor', 'NY', ARRAY[11724], 40.9139, (-73.4618)),
-('Wadsworth', 'IL', ARRAY[60083], 42.4441, (-87.9198)),
-('Old River-Winfree', 'TX', ARRAY[77535], 29.8745, (-94.8268)),
-('North East', 'MD', ARRAY[21921], 39.6077, (-75.9414)),
-('Brookmont', 'MD', ARRAY[20816], 38.9546, (-77.1292)),
-('Duncan', 'SC', ARRAY[29651], 34.9351, (-82.1440)),
-('Panther Valley', 'NJ', ARRAY[07838], 40.9078, (-74.8412)),
-('Rockfish', 'NC', ARRAY[28306], 34.9902, (-79.0694)),
-('New London', 'MN', ARRAY[56273], 45.2975, (-94.9476)),
-('Meridian', 'CO', ARRAY[80134], 39.5389, (-104.8476)),
-('Shark River Hills', 'NJ', ARRAY[07753], 40.1923, (-74.0463)),
-('Brookville', 'NY', ARRAY[11548], 40.8123, (-73.5696)),
-('Paw Paw Lake', 'MI', ARRAY[49038], 42.2113, (-86.2759)),
-('Dunean', 'SC', ARRAY[29605], 34.8203, (-82.4225)),
-('Turnersville', 'NJ', ARRAY[08012], 39.7666, (-75.0614)),
-('Kimberly', 'AL', ARRAY[35091, 35116], 33.7760, (-86.7968)),
-('Pine Lawn', 'MO', ARRAY[63120], 38.6953, (-90.2756)),
-('Dana', 'NC', ARRAY[28731, 28724], 35.3239, (-82.3722)),
-('Darien', 'GA', ARRAY[31331], 31.3568, (-81.4315)),
-('Port Hadlock-Irondale', 'WA', ARRAY[98368, 98339], 48.0316, (-122.7890)),
-('Valley Grande', 'AL', ARRAY[36701], 32.4862, (-87.0305)),
-('Pantops', 'VA', ARRAY[22909], 38.0308, (-78.4444)),
-('Dixmoor', 'IL', ARRAY[60406], 41.6330, (-87.6672)),
-('Hainesville', 'IL', ARRAY[60030], 42.3414, (-88.0686)),
-('Camden', 'DE', ARRAY[19904], 39.0991, (-75.5570)),
-('Houghton Lake', 'MI', ARRAY[48630, 48629], 44.3124, (-84.7625)),
-('Amberley', 'OH', ARRAY[45236], 39.2035, (-84.4283)),
-('Sloan', 'NY', ARRAY[14212], 42.8921, (-78.7918)),
-('Robins', 'IA', ARRAY[52411, 52328], 42.0799, (-91.6762)),
-('Indianola', 'WA', ARRAY[98346, 98370], 47.7566, (-122.5142)),
-('Doolittle', 'TX', ARRAY[78541], 26.3598, (-98.1168)),
-('Ross', 'OH', ARRAY[45013, 45061], 39.3146, (-84.6599)),
-('Canyon Creek', 'WA', ARRAY[98252], 48.1157, (-121.9831)),
-('Putnam Lake', 'NY', ARRAY[10509], 41.4747, (-73.5483)),
-('Mariemont', 'OH', ARRAY[45227], 39.1429, (-84.3784)),
-('Gravette', 'AR', ARRAY[72736], 36.4291, (-94.3714)),
-('Old Mystic', 'CT', ARRAY[06372], 41.3854, (-71.9850)),
-('Lake Cassidy', 'WA', ARRAY[98258, 98270], 48.0639, (-122.0920)),
-('Clayton', 'DE', ARRAY[19938], 39.2846, (-75.6364)),
-('Watertown', 'FL', ARRAY[32025], 30.1855, (-82.6026)),
-('Cloverdale', 'VA', ARRAY[24019], 37.3566, (-79.9055)),
-('Holden Heights', 'FL', ARRAY[32839, 32855], 28.5013, (-81.3878)),
-('Saylorville', 'IA', ARRAY[50313], 41.6809, (-93.6279)),
-('High Springs', 'FL', ARRAY[32655], 29.8080, (-82.5949)),
-('Loyalhanna', 'PA', ARRAY[15650, 15620], 40.3144, (-79.3560)),
-('Elkins', 'AR', ARRAY[72727], 36.0163, (-94.0250)),
-('Shady Spring', 'WV', ARRAY[25918, 25989], 37.7032, (-81.0912)),
-('Royal Palm Estates', 'FL', ARRAY[33415], 26.6815, (-80.1265)),
-('Forsyth', 'IL', ARRAY[62535], 39.9259, (-88.9640)),
-('Mineral Ridge', 'OH', ARRAY[44515], 41.1379, (-80.7653)),
-('Bagdad', 'FL', ARRAY[32530], 30.5824, (-87.0447)),
-('Brentwood', 'MD', ARRAY[20712], 38.9439, (-76.9571)),
-('Cottondale', 'AL', ARRAY[35453], 33.1922, (-87.4544)),
-('Red Oak', 'NC', ARRAY[27856, 27804, 27868], 36.0415, (-77.9065)),
-('Lake Isabella', 'CA', ARRAY[93240], 35.6378, (-118.4819)),
-('Squaw Valley', 'CA', ARRAY[93646], 36.6944, (-119.2000)),
-('Ladonia', 'AL', ARRAY[36869], 32.4609, (-85.0877)),
-('Port Ewen', 'NY', ARRAY[12417, 12487], 41.9048, (-73.9776)),
-('Day Valley', 'CA', ARRAY[95003], 37.0255, (-121.8559)),
-('Reamstown', 'PA', ARRAY[17567], 40.2113, (-76.1180)),
-('Cherokee Village', 'AR', ARRAY[72525], 36.2959, (-91.5696)),
-('Riverton', 'IL', ARRAY[62707, 62651, 62761], 39.8456, (-89.5394)),
-('Richwood', 'NJ', ARRAY[08071, 08074, 08062, 08025], 39.7140, (-75.1734)),
-('Skidway Lake', 'MI', ARRAY[48756], 44.1919, (-84.0467)),
-('Oakhurst', 'CA', ARRAY[95644], 37.3342, (-119.6483)),
-('Bonanza', 'GA', ARRAY[30238], 33.4589, (-84.3379)),
-('La Vale', 'MD', ARRAY[21501, 21504], 39.6518, (-78.8162)),
-('Quartzsite', 'AZ', ARRAY[85359, 85369, 85376], 33.6675, (-114.2170)),
-('Ahtanum', 'WA', ARRAY[98908, 98909], 46.5583, (-120.6110)),
-('Long Lake', 'IL', ARRAY[60041], 42.3765, (-88.1266)),
-('Baldwin', 'GA', ARRAY[30510, 30511], 34.4864, (-83.5494)),
-('Hansville', 'WA', ARRAY[98346], 47.8978, (-122.5579)),
-('Fort Hall', 'ID', ARRAY[83203, 83221], 43.0145, (-112.4573)),
-('Ridgecrest', 'FL', ARRAY[33774], 27.8953, (-82.8063)),
-('Lockeford', 'CA', ARRAY[95237], 38.1509, (-121.1554)),
-('Frontenac', 'KS', ARRAY[66763], 37.4583, (-94.7018)),
-('Dewey', 'OK', ARRAY[74029], 36.7915, (-95.9328)),
-('Flat Rock', 'NC', ARRAY[28731], 35.2677, (-82.4526)),
-('Sylvan Beach', 'NY', ARRAY[13308], 43.2061, (-75.7234)),
-('Cleves', 'OH', ARRAY[45002], 39.1635, (-84.7469)),
-('County Center', 'VA', ARRAY[22195], 38.6917, (-77.3507)),
-('Inwood', 'WV', ARRAY[25428], 39.3538, (-78.0552)),
-('Cedar Grove', 'FL', ARRAY[32405], 30.1812, (-85.6268)),
-('La Center', 'WA', ARRAY[98642], 45.8595, (-122.6757)),
-('Northlake', 'TX', ARRAY[76247, 76262], 33.0802, (-97.2545)),
-('Kings Bay Base', 'GA', ARRAY[31547], 30.7985, (-81.5628)),
-('Howe', 'TX', ARRAY[75459], 33.5066, (-96.6155)),
-('Manor', 'PA', ARRAY[15665, 15636], 40.3459, (-79.6693)),
-('Nellis AFB', 'NV', ARRAY[89191], 36.2473, (-115.0574)),
-('Kinsey', 'AL', ARRAY[36345], 31.2926, (-85.3353)),
-('Mayfield', 'OH', ARRAY[44143], 41.5501, (-81.4369)),
-('Wynantskill', 'NY', ARRAY[12198], 42.6881, (-73.6467)),
-('Pottsville', 'AR', ARRAY[72802], 35.2314, (-93.0652)),
-('Upland', 'PA', ARRAY[19013], 39.8562, (-75.3795)),
-('Blennerhassett', 'WV', ARRAY[26181], 39.2562, (-81.6316)),
-('Chattahoochee Hills', 'GA', ARRAY[30213], 33.5695, (-84.7441)),
-('Goshen', 'CA', ARRAY[93227], 36.3518, (-119.4210)),
-('Ponce Inlet', 'FL', ARRAY[32168], 29.0927, (-80.9473)),
-('Richville', 'OH', ARRAY[44706, 44646], 40.7529, (-81.4684)),
-('Balcones Heights', 'TX', ARRAY[78213], 29.4900, (-98.5503)),
-('Mar-Mac', 'NC', ARRAY[27530], 35.3345, (-78.0545)),
-('Orange', 'OH', ARRAY[44022], 41.4415, (-81.4743)),
-('Smithville-Sanders', 'IN', ARRAY[47401], 39.0597, (-86.5108)),
-('Ohioville', 'PA', ARRAY[15052], 40.6872, (-80.4783)),
-('Alderton', 'WA', ARRAY[98372, 98374], 47.1718, (-122.2192)),
-('Cleveland', 'FL', ARRAY[33951], 26.9529, (-81.9925)),
-('Berwyn', 'PA', ARRAY[19301, 19333], 40.0396, (-75.4439)),
-('McChord AFB', 'WA', ARRAY[98438], 47.1328, (-122.4924)),
-('North Wales', 'PA', ARRAY[19455], 40.2111, (-75.2744)),
-('Rural Hall', 'NC', ARRAY[27094, 27098, 27099], 36.2251, (-80.2973)),
-('Pomona', 'NY', ARRAY[10970], 41.1892, (-74.0543)),
-('Sugar Creek', 'MO', ARRAY[64054, 64050, 64053], 39.1421, (-94.4018)),
-('Braddock Heights', 'MD', ARRAY[21702, 21714], 39.4114, (-77.5009)),
-('Lordstown', 'OH', ARRAY[44481], 41.1684, (-80.8590)),
-('Spencer', 'NC', ARRAY[28159], 35.6989, (-80.4248)),
-('North Pembroke', 'MA', ARRAY[02358], 42.0989, (-70.7823)),
-('Pistakee Highlands', 'IL', ARRAY[60051], 42.4023, (-88.2115)),
-('Newburgh', 'IN', ARRAY[47629], 37.9494, (-87.4053)),
-('Haviland', 'NY', ARRAY[12538], 41.7682, (-73.9007)),
-('Northwest Harwinton', 'CT', ARRAY[06792], 41.7769, (-73.0794)),
-('Greentown', 'OH', ARRAY[44720, 44630], 40.9274, (-81.4020)),
-('Christiana', 'TN', ARRAY[37128], 35.7204, (-86.4109)),
-('Kemmerer', 'WY', ARRAY[83121, 83116], 41.7761, (-110.5555)),
-('Locust', 'NC', ARRAY[28097], 35.2687, (-80.4368)),
-('Verona', 'MS', ARRAY[38879], 34.1907, (-88.7203)),
-('Russell', 'KY', ARRAY[41139], 38.5116, (-82.6996)),
-('Norris', 'TN', ARRAY[37828], 36.2136, (-84.0629)),
-('Port Monmouth', 'NJ', ARRAY[07758], 40.4337, (-74.1010)),
-('Lopezville', 'TX', ARRAY[78542], 26.2453, (-98.1537)),
-('Orchard City', 'CO', ARRAY[81418, 81414], 38.8144, (-107.9705)),
-('Algona', 'WA', ARRAY[98047], 47.2819, (-122.2504)),
-('Reno', 'TX', ARRAY[76082], 32.9454, (-97.5769)),
-('Bay Pines', 'FL', ARRAY[33744], 27.8139, (-82.7747)),
-('Emerald Mountain', 'AL', ARRAY[36078], 32.4396, (-86.0857)),
-('Port Washington North', 'NY', ARRAY[11052, 11053, 11055], 40.8434, (-73.7014)),
-('Fairview', 'NY', ARRAY[10607], 41.0442, (-73.7963)),
-('Bethel Acres', 'OK', ARRAY[74801], 35.3048, (-97.0370)),
-('Grand Mound', 'WA', ARRAY[98531], 46.8053, (-123.0119)),
-('Kenvil', 'NJ', ARRAY[07847], 40.8747, (-74.6274)),
-('Fiskdale', 'MA', ARRAY[01566], 42.1227, (-72.1087)),
-('Oak Ridge North', 'TX', ARRAY[77386], 30.1570, (-95.4421)),
-('Liberty', 'SC', ARRAY[29632], 34.7904, (-82.6962)),
-('Hurley', 'NY', ARRAY[12443], 41.9123, (-74.0591)),
-('Heritage Lake', 'IN', ARRAY[46121], 39.7288, (-86.7123)),
-('Lake Success', 'NY', ARRAY[11020], 40.7680, (-73.7089)),
-('Pleasant Valley', 'WV', ARRAY[26578], 39.4505, (-80.1552)),
-('North Lakeport', 'CA', ARRAY[95433], 39.0883, (-122.9054)),
-('Blanchard', 'LA', ARRAY[71009], 32.6090, (-93.8842)),
-('Centerville', 'PA', ARRAY[15358, 15417, 15333], 40.0300, (-79.9632)),
-('Landis', 'NC', ARRAY[28088], 35.5484, (-80.6116)),
-('Oakland', 'FL', ARRAY[34787, 34740], 28.5535, (-81.6357)),
-('South Hempstead', 'NY', ARRAY[11570], 40.6814, (-73.6233)),
-('Vails Gate', 'NY', ARRAY[12584], 41.4587, (-74.0533)),
-('Maugansville', 'MD', ARRAY[21740], 39.6936, (-77.7472)),
-('University Park', 'NM', ARRAY[88003], 32.2767, (-106.7462)),
-('Mauriceville', 'TX', ARRAY[77626], 30.2187, (-93.8758)),
-('Gosnell', 'AR', ARRAY[72319], 35.9645, (-89.9721)),
-('Mineral Springs', 'NC', ARRAY[28173, 28112], 34.9411, (-80.6846)),
-('Wallburg', 'NC', ARRAY[27373], 36.0088, (-80.1453)),
-('New Holstein', 'WI', ARRAY[53062], 43.9491, (-88.0942)),
-('Homer', 'NY', ARRAY[13045], 42.6371, (-76.1849)),
-('Vienna', 'GA', ARRAY[31902], 32.0925, (-83.7864)),
-('St. James', 'MD', ARRAY[21781, 21740], 39.5738, (-77.7482)),
-('Big Sky', 'MT', ARRAY[59716], 45.2592, (-111.3426)),
-('Zellwood', 'FL', ARRAY[32757], 28.7301, (-81.5915)),
-('High Bridge', 'WA', ARRAY[98272], 47.7968, (-122.0281)),
-('Lakemore', 'OH', ARRAY[44312], 41.0215, (-81.4264)),
-('Double Oak', 'TX', ARRAY[75077], 33.0633, (-97.1117)),
-('Emigsville', 'PA', ARRAY[17318], 40.0085, (-76.7310)),
-('Lake Junaluska', 'NC', ARRAY[28786, 28785], 35.5305, (-82.9749)),
-('Wilder', 'KY', ARRAY[41076], 39.0400, (-84.4816)),
-('Wormleysburg', 'PA', ARRAY[17011], 40.2604, (-76.9094)),
-('Sharpes', 'FL', ARRAY[32926, 32959], 28.4368, (-80.7555)),
-('Loxley', 'AL', ARRAY[36527, 36578], 30.6813, (-87.7418)),
-('Sherwood', 'WI', ARRAY[54169], 44.1764, (-88.2756)),
-('Greenfield', 'MN', ARRAY[55357], 45.0997, (-93.6884)),
-('Capitanejo', 'PR', ARRAY[00795], 18.0132, (-66.5359)),
-('Dade City North', 'FL', ARRAY[33523], 28.3838, (-82.1943)),
-('Ferrysburg', 'MI', ARRAY[49409], 43.0850, (-86.2221)),
-('Granite Quarry', 'NC', ARRAY[28072], 35.6126, (-80.4484)),
-('Lido Beach', 'NY', ARRAY[11561], 40.5904, (-73.6121)),
-('Johnson Creek', 'WI', ARRAY[53094], 43.0812, (-88.7702)),
-('Edgewood', 'FL', ARRAY[32809, 32839], 28.4878, (-81.3772)),
-('Byrnes Mill', 'MO', ARRAY[63051], 38.4395, (-90.5741)),
-('The Plains', 'OH', ARRAY[45780], 39.3656, (-82.1343)),
-('Iron River', 'MI', ARRAY[49964], 46.0966, (-88.6396)),
-('Palmer Lake', 'CO', ARRAY[80132, 80932, 80933], 39.1152, (-104.9057)),
-('Shenandoah', 'TX', ARRAY[77381, 77385], 30.1840, (-95.4555)),
-('Penbrook', 'PA', ARRAY[17109], 40.2780, (-76.8484)),
-('Combes', 'TX', ARRAY[78552, 78535, 78551, 78553], 26.2444, (-97.7254)),
-('Monument Beach', 'MA', ARRAY[02532, 02559], 41.7192, (-70.6061)),
-('Chevy Chase', 'MD', ARRAY[20825], 38.9819, (-77.0833)),
-('Hawaiian Acres', 'HI', ARRAY[96760], 19.5325, (-155.0497)),
-('Ferris', 'TX', ARRAY[75125], 32.5369, (-96.6738)),
-('Keeseville', 'NY', ARRAY[12911], 44.5035, (-73.4812)),
-('Vista Santa Rosa', 'CA', ARRAY[92236], 33.6227, (-116.2126)),
-('Yountville', 'CA', ARRAY[94558], 38.3963, (-122.3671)),
-('Andrews AFB', 'MD', ARRAY[20762], 38.8053, (-76.8744)),
-('Springfield', 'KY', ARRAY[40061], 37.6921, (-85.2193)),
-('Boutte', 'LA', ARRAY[70080], 29.8825, (-90.3936)),
-('Pioneer Village', 'KY', ARRAY[40165], 38.0599, (-85.6800)),
-('Port Richey', 'FL', ARRAY[34673], 28.2758, (-82.7250)),
-('Winchester', 'CA', ARRAY[92596], 33.7146, (-117.0775)),
-('Churchill', 'PA', ARRAY[15221], 40.4389, (-79.8417)),
-('Norco', 'LA', ARRAY[70047], 29.9986, (-90.4036)),
-('Greenbriar', 'FL', ARRAY[34698], 28.0112, (-82.7523)),
-('Murfreesboro', 'NC', ARRAY[27855], 36.4421, (-77.0964)),
-('Oxoboxo River', 'CT', ARRAY[06382], 41.4441, (-72.1250)),
-('Eagle Lake', 'FL', ARRAY[33839], 27.9760, (-81.7573)),
-('Wanakah', 'NY', ARRAY[14085], 42.7434, (-78.9028)),
-('East Norwich', 'NY', ARRAY[11732], 40.8496, (-73.5288)),
-('Fairbanks Ranch', 'CA', ARRAY[92168], 32.9919, (-117.1859)),
-('Westhampton', 'NY', ARRAY[11977], 40.8325, (-72.6617)),
-('Great Neck Estates', 'NY', ARRAY[11022], 40.7857, (-73.7396)),
-('Cherry Valley', 'IL', ARRAY[61016, 61109], 42.2222, (-88.9716)),
-('Buckeye Lake', 'OH', ARRAY[43008], 39.9355, (-82.4826)),
-('Wolfeboro', 'NH', ARRAY[03896], 43.5913, (-71.2092)),
-('Belle Meade', 'TN', ARRAY[37215], 36.0994, (-86.8562)),
-('Youngwood', 'PA', ARRAY[15601], 40.2443, (-79.5812)),
-('Oliver', 'PA', ARRAY[15401], 39.9153, (-79.7213)),
-('Experiment', 'GA', ARRAY[30212], 33.2789, (-84.2760)),
-('Konterra', 'MD', ARRAY[20707], 39.0774, (-76.9022)),
-('Ellsworth', 'WI', ARRAY[54011], 44.7364, (-92.4806)),
-('Peterborough', 'NH', ARRAY[03468], 42.8790, (-71.9594)),
-('Meadowood', 'PA', ARRAY[16045], 40.8443, (-79.8939)),
-('Manatee Road', 'FL', ARRAY[32693], 29.5145, (-82.9192)),
-('Midway South', 'TX', ARRAY[78596], 26.1567, (-98.0209)),
-('Chico', 'WA', ARRAY[98383], 47.6234, (-122.7198)),
-('North Boston', 'NY', ARRAY[14110], 42.6773, (-78.7797)),
-('Granite Hills', 'CA', ARRAY[92019], 32.8033, (-116.9056)),
-('St. Clair', 'PA', ARRAY[17901], 40.7211, (-76.1903)),
-('Gambrills', 'MD', ARRAY[21108], 39.0929, (-76.6512)),
-('Stamford', 'TX', ARRAY[79521], 33.0156, (-99.6716)),
-('Lyndonville', 'VT', ARRAY[05849], 44.5352, (-72.0016)),
-('Brush Prairie', 'WA', ARRAY[98662], 45.7251, (-122.5483)),
-('Escatawpa', 'MS', ARRAY[39552], 30.4912, (-88.5495)),
-('Lesslie', 'SC', ARRAY[29730], 34.8856, (-80.9541)),
-('Douglas', 'MI', ARRAY[49408], 42.6410, (-86.2082)),
-('Fraser', 'CO', ARRAY[80442], 39.9303, (-105.8030)),
-('Montana City', 'MT', ARRAY[59635], 46.5257, (-111.9400)),
-('Dallas', 'PA', ARRAY[18690], 41.3306, (-75.9736)),
-('North Kingsville', 'OH', ARRAY[44004, 44068], 41.9189, (-80.6724)),
-('Weatogue', 'CT', ARRAY[06089], 41.8459, (-72.8294)),
-('Gloverville', 'SC', ARRAY[29851], 33.5274, (-81.8145)),
-('Grantville', 'GA', ARRAY[30264], 33.2371, (-84.8293)),
-('Harveys Lake', 'PA', ARRAY[18612, 18654], 41.3626, (-76.0381)),
-('Hudson', 'CO', ARRAY[80642], 40.0898, (-104.6216)),
-('Big Lake', 'AK', ARRAY[99623], 61.5260, (-149.9720)),
-('Tainter Lake', 'WI', ARRAY[54730], 44.9882, (-91.8437)),
-('Talty', 'TX', ARRAY[75160], 32.6945, (-96.4007)),
-('Wilson''s Mills', 'NC', ARRAY[27577, 27527, 27593], 35.5863, (-78.3644)),
-('Sells', 'AZ', ARRAY[85734], 31.9202, (-111.8775)),
-('Burnettown', 'SC', ARRAY[29851, 29834, 29816, 29841], 33.5186, (-81.8634)),
-('Crest', 'CA', ARRAY[92019], 32.8000, (-116.8671)),
-('Chester Heights', 'PA', ARRAY[19063, 19017], 39.8926, (-75.4698)),
-('Osseo', 'MN', ARRAY[55569], 45.1179, (-93.3992)),
-('Springdale', 'SC', ARRAY[29171], 33.9616, (-81.1119)),
-('Snowmass Village', 'CO', ARRAY[81611], 39.2207, (-106.9386)),
-('Longtown', 'OK', ARRAY[74432, 74462], 35.2405, (-95.5183)),
-('Evendale', 'OH', ARRAY[45241], 39.2509, (-84.4268)),
-('Hartford', 'KY', ARRAY[42347], 37.4506, (-86.8930)),
-('Cohasset', 'MN', ARRAY[55721], 47.2389, (-93.6396)),
-('Homestead Valley', 'CA', ARRAY[92285], 34.2730, (-116.4145)),
-('Muse', 'PA', ARRAY[15350], 40.2924, (-80.2055)),
-('Tobaccoville', 'NC', ARRAY[27045, 27050], 36.2256, (-80.3591)),
-('South Creek', 'WA', ARRAY[98387, 98338], 46.9994, (-122.3921)),
-('Hamilton', 'IL', ARRAY[62341], 40.3899, (-91.3623)),
-('West Sand Lake', 'NY', ARRAY[12196], 42.6403, (-73.6032)),
-('Perryman', 'MD', ARRAY[21130], 39.4633, (-76.2115)),
-('Moonachie', 'NJ', ARRAY[07608], 40.8409, (-74.0590)),
-('Stroud', 'OK', ARRAY[74028], 35.7680, (-96.6474)),
-('Timberville', 'VA', ARRAY[22853], 38.6340, (-78.7730)),
-('Tusculum', 'TN', ARRAY[37745], 36.1750, (-82.7454)),
-('Gastonville', 'PA', ARRAY[15336], 40.2669, (-80.0095)),
-('Tilton', 'IL', ARRAY[61833, 61832], 40.0941, (-87.6398)),
-('Riverton', 'NJ', ARRAY[08076], 40.0115, (-75.0148)),
-('Grand Forks AFB', 'ND', ARRAY[58205], 47.9557, (-97.3913)),
-('Riverview', 'DE', ARRAY[19943], 39.0293, (-75.5202)),
-('Dupont', 'PA', ARRAY[18641], 41.3237, (-75.7421)),
-('Circle D-KC Estates', 'TX', ARRAY[78659], 30.1611, (-97.2349)),
-('Oronogo', 'MO', ARRAY[64855], 37.1917, (-94.4639)),
-('Arcola', 'TX', ARRAY[77583], 29.5032, (-95.4693)),
-('Folly Beach', 'SC', ARRAY[29412], 32.6693, (-79.9500)),
-('Summerset', 'SD', ARRAY[57769], 44.1912, (-103.3393)),
-('Pablo', 'MT', ARRAY[59864, 59860], 47.6035, (-114.1059)),
-('Reidsville', 'GA', ARRAY[30499], 32.0871, (-82.1244)),
-('De Leon Springs', 'FL', ARRAY[32130], 29.1172, (-81.3517)),
-('Collierville', 'CA', ARRAY[95220], 38.2141, (-121.2675)),
-('Gleed', 'WA', ARRAY[98908], 46.6594, (-120.6025)),
-('Thunderbolt', 'GA', ARRAY[31410], 32.0339, (-81.0480)),
-('Ridgeway', 'AK', ARRAY[99669], 60.5305, (-151.0301)),
-('Clarcona', 'FL', ARRAY[32818], 28.6201, (-81.5002)),
-('Glasco', 'NY', ARRAY[12432], 42.0461, (-73.9487)),
-('Turley', 'OK', ARRAY[74126], 36.2473, (-95.9654)),
-('Bella Vista', 'CA', ARRAY[96003], 40.6502, (-122.2450)),
-('Holiday Shores', 'IL', ARRAY[62097], 38.9227, (-89.9360)),
-('White Mountain Lake', 'AZ', ARRAY[85901], 34.3441, (-109.9879)),
-('Marietta', 'PA', ARRAY[17547], 40.0574, (-76.5515)),
-('Lexington Hills', 'CA', ARRAY[95026, 95044], 37.1616, (-121.9879)),
-('Hoxie', 'AR', ARRAY[72476], 36.0360, (-90.9736)),
-('Zephyrhills North', 'FL', ARRAY[33540], 28.2520, (-82.1654)),
-('Peapack and Gladstone', 'NJ', ARRAY[07934, 07977], 40.7168, (-74.6561)),
-('Gray Summit', 'MO', ARRAY[63069, 63055], 38.4951, (-90.8173)),
-('East Prospect', 'PA', ARRAY[17368], 39.9710, (-76.5215)),
-('Deenwood', 'GA', ARRAY[31503], 31.2476, (-82.3677)),
-('Rockville', 'MN', ARRAY[56369, 56301], 45.4650, (-94.3222)),
-('Vado', 'NM', ARRAY[88048], 32.1279, (-106.6571)),
-('Brooks', 'KY', ARRAY[40109, 40165], 38.0656, (-85.7178)),
-('Maine', 'WI', ARRAY[54417, 54452], 45.0497, (-89.6816)),
-('La Fermina', 'PR', ARRAY[00791], 18.1744, (-65.8527)),
-('Edwards AFB', 'CA', ARRAY[93524], 34.9045, (-117.9295)),
-('Williamsburg', 'OH', ARRAY[45176], 39.0556, (-84.0478)),
-('Yorkville', 'NY', ARRAY[13495], 43.1124, (-75.2739)),
-('Preston Heights', 'IL', ARRAY[60436], 41.4944, (-88.0757)),
-('Indian Springs Village', 'AL', ARRAY[35124], 33.3591, (-86.7493)),
-('Bakerstown', 'PA', ARRAY[15044], 40.6528, (-79.9407)),
-('Wrightsville Beach', 'NC', ARRAY[28408], 34.2130, (-77.7980)),
-('Woodside East', 'DE', ARRAY[19962], 39.0676, (-75.5376)),
-('Princeton Junction', 'NJ', ARRAY[08540], 40.3207, (-74.6236)),
-('Pacolet', 'SC', ARRAY[29373], 34.9100, (-81.7666)),
-('McQueeney', 'TX', ARRAY[78155], 29.6000, (-98.0439)),
-('Green Acres', 'CA', ARRAY[92596], 33.7350, (-117.0782)),
-('Heber-Overgaard', 'AZ', ARRAY[85928], 34.4141, (-110.5696)),
-('York Harbor', 'ME', ARRAY[03911], 43.1435, (-70.6490)),
-('South Fallsburg', 'NY', ARRAY[12747, 12733], 41.7218, (-74.6350)),
-('Haw River', 'NC', ARRAY[27258, 27217], 36.0925, (-79.3616)),
-('Whitesboro', 'NJ', ARRAY[08252], 39.0417, (-74.8674)),
-('Cannon AFB', 'NM', ARRAY[88103], 34.3885, (-103.3185)),
-('Twain Harte', 'CA', ARRAY[95383], 38.0384, (-120.2340)),
-('Downs', 'IL', ARRAY[61736], 40.3988, (-88.8894)),
-('West Simsbury', 'CT', ARRAY[06070], 41.8747, (-72.8448));
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/tables/cities/table.sql b/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/tables/cities/table.sql
deleted file mode 100644
index 02f4400df..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/tables/cities/table.sql
+++ /dev/null
@@ -1,29 +0,0 @@
--- Deploy schemas/faker/tables/cities/table to pg
-
--- requires: schemas/faker/schema
-
-BEGIN;
-
-CREATE TABLE faker.cities (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- city text,
- state text,
- zips int[],
- lat float,
- lng float
-);
-
-
-CREATE INDEX faker_city_idx1 ON faker.cities (
- city
-);
-
-CREATE INDEX faker_city_idx2 ON faker.cities (
- state
-);
-
-CREATE INDEX faker_city_idx3 ON faker.cities USING GIN (
- zips
-);
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/tables/dictionary/fixtures/1602969089665_fixture.sql b/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/tables/dictionary/fixtures/1602969089665_fixture.sql
deleted file mode 100644
index 28d9731a7..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/tables/dictionary/fixtures/1602969089665_fixture.sql
+++ /dev/null
@@ -1,6036 +0,0 @@
--- Deploy schemas/faker/tables/dictionary/fixtures/1602969089665_fixture to pg
-
--- requires: schemas/faker/schema
--- requires: schemas/faker/tables/dictionary/table
-
-BEGIN;
-
-insert into faker.dictionary (type, word) VALUES
- ('colors', 'amaranth'),
- ('colors', 'amber'),
- ('colors', 'amethyst'),
- ('colors', 'apricot'),
- ('colors', 'aqua'),
- ('colors', 'aquamarine'),
- ('colors', 'azure'),
- ('colors', 'beige'),
- ('colors', 'black'),
- ('colors', 'blue'),
- ('colors', 'blush'),
- ('colors', 'bronze'),
- ('colors', 'brown'),
- ('colors', 'chocolate'),
- ('colors', 'coffee'),
- ('colors', 'copper'),
- ('colors', 'coral'),
- ('colors', 'crimson'),
- ('colors', 'cyan'),
- ('colors', 'emerald'),
- ('colors', 'fuchsia'),
- ('colors', 'gold'),
- ('colors', 'gray'),
- ('colors', 'green'),
- ('colors', 'harlequin'),
- ('colors', 'indigo'),
- ('colors', 'ivory'),
- ('colors', 'jade'),
- ('colors', 'lavender'),
- ('colors', 'lime'),
- ('colors', 'magenta'),
- ('colors', 'maroon'),
- ('colors', 'moccasin'),
- ('colors', 'olive'),
- ('colors', 'orange'),
- ('colors', 'peach'),
- ('colors', 'pink'),
- ('colors', 'plum'),
- ('colors', 'purple'),
- ('colors', 'red'),
- ('colors', 'rose'),
- ('colors', 'salmon'),
- ('colors', 'sapphire'),
- ('colors', 'scarlet'),
- ('colors', 'silver'),
- ('colors', 'tan'),
- ('colors', 'teal'),
- ('colors', 'tomato'),
- ('colors', 'turquoise'),
- ('colors', 'violet'),
- ('colors', 'white'),
- ('colors', 'yellow'),
-
-
-
-
-('stop', 'I'),
-('stop', 'a'),
-('stop', 'about'),
-('stop', 'an'),
-('stop', 'are'),
-('stop', 'as'),
-('stop', 'at'),
-('stop', 'be'),
-('stop', 'by'),
-('stop', 'com'),
-('stop', 'for'),
-('stop', 'from'),
-('stop', 'how'),
-('stop', 'in'),
-('stop', 'is'),
-('stop', 'it'),
-('stop', 'of'),
-('stop', 'on'),
-('stop', 'or'),
-('stop', 'that'),
-('stop', 'the'),
-('stop', 'this'),
-('stop', 'to'),
-('stop', 'was'),
-('stop', 'what'),
-('stop', 'when'),
-('stop', 'where'),
-('stop', 'who'),
-('stop', 'will'),
-('stop', 'with'),
-('stop', 'the'),
-
-
-('bizsuffix', 'Inc.'),
-('bizsuffix', 'Corp.'),
-('bizsuffix', 'Co.'),
-
-('bizsurname', 'Networks'),
-('bizsurname', 'Systems'),
-('bizsurname', 'Industries'),
-('bizsurname', 'Corporation'),
-('bizsurname', 'Tech'),
-('bizsurname', 'Acoustics'),
-('bizsurname', 'Lighting'),
-('bizsurname', 'Partners'),
-('bizsurname', 'Solutions'),
-('bizsurname', 'Security'),
-('bizsurname', 'Fund'),
-('bizsurname', 'Software'),
-('bizsurname', 'Bank'),
-('bizsurname', 'Sports'),
-('bizsurname', 'Technologies'),
-('bizsurname', 'Media'),
-('bizsurname', 'Capital'),
-('bizsurname', 'Capital Partners'),
-('bizsurname', 'Enterprises'),
-('bizsurname', 'Electronics'),
-
-('bizname', 'Sail'),
-('bizname', 'Oak'),
-('bizname', 'Spirit'),
-('bizname', 'Thunder'),
-('bizname', 'Saturn'),
-('bizname', 'Angel'),
-('bizname', 'Dream'),
-('bizname', 'Sales'),
-('bizname', 'Soul'),
-('bizname', 'Wave'),
-('bizname', 'Jewel'),
-('bizname', 'Vine'),
-('bizname', 'Day'),
-('bizname', 'Micro'),
-('bizname', 'Flux'),
-('bizname', 'Seed'),
-('bizname', 'Brand'),
-('bizname', 'Blue'),
-('bizname', 'Iron'),
-('bizname', 'Famous'),
-('bizname', 'Happy'),
-('bizname', 'Umbrella'),
-('bizname', 'Maple'),
-('bizname', 'Hooli'),
-('bizname', 'Lioness'),
-('bizname', 'Touch'),
-('bizname', 'Timber'),
-('bizname', 'Jet'),
-('bizname', 'Tulip'),
-('bizname', 'Apache'),
-
-('bizpostfix', 'tronics'),
-('bizpostfix', 'works'),
-('bizpostfix', 'dale'),
-('bizpostfix', 'water'),
-('bizpostfix', 'coms'),
-('bizpostfix', 'records'),
-('bizpostfix', 'page'),
-('bizpostfix', 'space'),
-('bizpostfix', 'bond'),
-('bizpostfix', 'bit'),
-('bizpostfix', 'point'),
-('bizpostfix', 'cast'),
-('bizpostfix', 'fire'),
-('bizpostfix', 'arts'),
-('bizpostfix', 'scape'),
-('bizpostfix', 'bank'),
-('bizpostfix', 'life'),
-('bizpostfix', 'stone'),
-
-
- ('animals', 'canidae'),
- ('animals', 'felidae'),
- ('animals', 'cat'),
- ('animals', 'cattle'),
- ('animals', 'dog'),
- ('animals', 'donkey'),
- ('animals', 'goat'),
- ('animals', 'horse'),
- ('animals', 'pig'),
- ('animals', 'rabbit'),
- ('animals', 'aardvark'),
- ('animals', 'aardwolf'),
- ('animals', 'albatross'),
- ('animals', 'alligator'),
- ('animals', 'alpaca'),
- ('animals', 'amphibian'),
- ('animals', 'anaconda'),
- ('animals', 'angelfish'),
- ('animals', 'anglerfish'),
- ('animals', 'ant'),
- ('animals', 'anteater'),
- ('animals', 'antelope'),
- ('animals', 'antlion'),
- ('animals', 'ape'),
- ('animals', 'aphid'),
- ('animals', 'armadillo'),
- ('animals', 'asp'),
- ('animals', 'baboon'),
- ('animals', 'badger'),
- ('animals', 'bandicoot'),
- ('animals', 'barnacle'),
- ('animals', 'barracuda'),
- ('animals', 'basilisk'),
- ('animals', 'bass'),
- ('animals', 'bat'),
- ('animals', 'bear'),
- ('animals', 'beaver'),
- ('animals', 'bedbug'),
- ('animals', 'bee'),
- ('animals', 'beetle'),
- ('animals', 'bird'),
- ('animals', 'bison'),
- ('animals', 'blackbird'),
- ('animals', 'boa'),
- ('animals', 'boar'),
- ('animals', 'bobcat'),
- ('animals', 'bobolink'),
- ('animals', 'bonobo'),
- ('animals', 'booby'),
- ('animals', 'bovid'),
- ('animals', 'bug'),
- ('animals', 'butterfly'),
- ('animals', 'buzzard'),
- ('animals', 'camel'),
- ('animals', 'canid'),
- ('animals', 'capybara'),
- ('animals', 'cardinal'),
- ('animals', 'caribou'),
- ('animals', 'carp'),
- ('animals', 'cat'),
- ('animals', 'catshark'),
- ('animals', 'caterpillar'),
- ('animals', 'catfish'),
- ('animals', 'cattle'),
- ('animals', 'centipede'),
- ('animals', 'cephalopod'),
- ('animals', 'chameleon'),
- ('animals', 'cheetah'),
- ('animals', 'chickadee'),
- ('animals', 'chicken'),
- ('animals', 'chimpanzee'),
- ('animals', 'chinchilla'),
- ('animals', 'chipmunk'),
- ('animals', 'clam'),
- ('animals', 'clownfish'),
- ('animals', 'cobra'),
- ('animals', 'cockroach'),
- ('animals', 'cod'),
- ('animals', 'condor'),
- ('animals', 'constrictor'),
- ('animals', 'coral'),
- ('animals', 'cougar'),
- ('animals', 'cow'),
- ('animals', 'coyote'),
- ('animals', 'crab'),
- ('animals', 'crane'),
- ('animals', 'crawdad'),
- ('animals', 'crayfish'),
- ('animals', 'cricket'),
- ('animals', 'crocodile'),
- ('animals', 'crow'),
- ('animals', 'cuckoo'),
- ('animals', 'cicada'),
- ('animals', 'damselfly'),
- ('animals', 'deer'),
- ('animals', 'dingo'),
- ('animals', 'dinosaur'),
- ('animals', 'dog'),
- ('animals', 'dolphin'),
- ('animals', 'donkey'),
- ('animals', 'dormouse'),
- ('animals', 'dove'),
- ('animals', 'dragonfly'),
- ('animals', 'dragon'),
- ('animals', 'duck'),
- ('animals', 'eagle'),
- ('animals', 'earthworm'),
- ('animals', 'earwig'),
- ('animals', 'echidna'),
- ('animals', 'eel'),
- ('animals', 'egret'),
- ('animals', 'elephant'),
- ('animals', 'elk'),
- ('animals', 'emu'),
- ('animals', 'ermine'),
- ('animals', 'falcon'),
- ('animals', 'ferret'),
- ('animals', 'finch'),
- ('animals', 'firefly'),
- ('animals', 'fish'),
- ('animals', 'flamingo'),
- ('animals', 'flea'),
- ('animals', 'fly'),
- ('animals', 'flyingfish'),
- ('animals', 'fowl'),
- ('animals', 'fox'),
- ('animals', 'frog'),
- ('animals', 'gamefowl'),
- ('animals', 'galliform'),
- ('animals', 'gazelle'),
- ('animals', 'gecko'),
- ('animals', 'gerbil'),
- ('animals', 'gibbon'),
- ('animals', 'giraffe'),
- ('animals', 'goat'),
- ('animals', 'goldfish'),
- ('animals', 'goose'),
- ('animals', 'gopher'),
- ('animals', 'gorilla'),
- ('animals', 'grasshopper'),
- ('animals', 'grouse'),
- ('animals', 'guan'),
- ('animals', 'guanaco'),
- ('animals', 'guineafowl'),
- ('animals', 'gull'),
- ('animals', 'guppy'),
- ('animals', 'haddock'),
- ('animals', 'halibut'),
- ('animals', 'hamster'),
- ('animals', 'hare'),
- ('animals', 'harrier'),
- ('animals', 'hawk'),
- ('animals', 'hedgehog'),
- ('animals', 'heron'),
- ('animals', 'herring'),
- ('animals', 'hippopotamus'),
- ('animals', 'hookworm'),
- ('animals', 'hornet'),
- ('animals', 'horse'),
- ('animals', 'hoverfly'),
- ('animals', 'hummingbird'),
- ('animals', 'hyena'),
- ('animals', 'iguana'),
- ('animals', 'impala'),
- ('animals', 'jackal'),
- ('animals', 'jaguar'),
- ('animals', 'jay'),
- ('animals', 'jellyfish'),
- ('animals', 'junglefowl'),
- ('animals', 'kangaroo'),
- ('animals', 'kingfisher'),
- ('animals', 'kite'),
- ('animals', 'kiwi'),
- ('animals', 'koala'),
- ('animals', 'koi'),
- ('animals', 'krill'),
- ('animals', 'ladybug'),
- ('animals', 'lamprey'),
- ('animals', 'landfowl'),
- ('animals', 'lark'),
- ('animals', 'leech'),
- ('animals', 'lemming'),
- ('animals', 'lemur'),
- ('animals', 'leopard'),
- ('animals', 'leopon'),
- ('animals', 'limpet'),
- ('animals', 'lion'),
- ('animals', 'lizard'),
- ('animals', 'llama'),
- ('animals', 'lobster'),
- ('animals', 'locust'),
- ('animals', 'loon'),
- ('animals', 'louse'),
- ('animals', 'lungfish'),
- ('animals', 'lynx'),
- ('animals', 'macaw'),
- ('animals', 'mackerel'),
- ('animals', 'magpie'),
- ('animals', 'mammal'),
- ('animals', 'manatee'),
- ('animals', 'mandrill'),
- ('animals', 'marlin'),
- ('animals', 'marmoset'),
- ('animals', 'marmot'),
- ('animals', 'marsupial'),
- ('animals', 'marten'),
- ('animals', 'mastodon'),
- ('animals', 'meadowlark'),
- ('animals', 'meerkat'),
- ('animals', 'mink'),
- ('animals', 'minnow'),
- ('animals', 'mite'),
- ('animals', 'mockingbird'),
- ('animals', 'mole'),
- ('animals', 'mollusk'),
- ('animals', 'mongoose'),
- ('animals', 'monkey'),
- ('animals', 'moose'),
- ('animals', 'mosquito'),
- ('animals', 'moth'),
- ('animals', 'mouse'),
- ('animals', 'mule'),
- ('animals', 'muskox'),
- ('animals', 'narwhal'),
- ('animals', 'newt'),
- ('animals', 'nightingale'),
- ('animals', 'ocelot'),
- ('animals', 'octopus'),
- ('animals', 'opossum'),
- ('animals', 'orangutan'),
- ('animals', 'orca'),
- ('animals', 'ostrich'),
- ('animals', 'otter'),
- ('animals', 'owl'),
- ('animals', 'ox'),
- ('animals', 'panda'),
- ('animals', 'panther'),
- ('animals', 'parakeet'),
- ('animals', 'parrot'),
- ('animals', 'parrotfish'),
- ('animals', 'partridge'),
- ('animals', 'peacock'),
- ('animals', 'peafowl'),
- ('animals', 'pelican'),
- ('animals', 'penguin'),
- ('animals', 'perch'),
- ('animals', 'pheasant'),
- ('animals', 'pig'),
- ('animals', 'pigeon'),
- ('animals', 'pike'),
- ('animals', 'pinniped'),
- ('animals', 'piranha'),
- ('animals', 'planarian'),
- ('animals', 'platypus'),
- ('animals', 'pony'),
- ('animals', 'porcupine'),
- ('animals', 'porpoise'),
- ('animals', 'possum'),
- ('animals', 'prawn'),
- ('animals', 'primate'),
- ('animals', 'ptarmigan'),
- ('animals', 'puffin'),
- ('animals', 'puma'),
- ('animals', 'python'),
- ('animals', 'quail'),
- ('animals', 'quelea'),
- ('animals', 'quokka'),
- ('animals', 'rabbit'),
- ('animals', 'raccoon'),
- ('animals', 'rat'),
- ('animals', 'rattlesnake'),
- ('animals', 'raven'),
- ('animals', 'reindeer'),
- ('animals', 'reptile'),
- ('animals', 'rhinoceros'),
- ('animals', 'roadrunner'),
- ('animals', 'rodent'),
- ('animals', 'rook'),
- ('animals', 'rooster'),
- ('animals', 'roundworm'),
- ('animals', 'sailfish'),
- ('animals', 'salamander'),
- ('animals', 'salmon'),
- ('animals', 'sawfish'),
- ('animals', 'scallop'),
- ('animals', 'scorpion'),
- ('animals', 'seahorse'),
- ('animals', 'shark'),
- ('animals', 'sheep'),
- ('animals', 'shrew'),
- ('animals', 'shrimp'),
- ('animals', 'silkworm'),
- ('animals', 'silverfish'),
- ('animals', 'skink'),
- ('animals', 'skunk'),
- ('animals', 'sloth'),
- ('animals', 'slug'),
- ('animals', 'smelt'),
- ('animals', 'snail'),
- ('animals', 'snake'),
- ('animals', 'snipe'),
- ('animals', 'sole'),
- ('animals', 'sparrow'),
- ('animals', 'spider'),
- ('animals', 'spoonbill'),
- ('animals', 'squid'),
- ('animals', 'squirrel'),
- ('animals', 'starfish'),
- ('animals', 'stingray'),
- ('animals', 'stoat'),
- ('animals', 'stork'),
- ('animals', 'sturgeon'),
- ('animals', 'swallow'),
- ('animals', 'swan'),
- ('animals', 'swift'),
- ('animals', 'swordfish'),
- ('animals', 'swordtail'),
- ('animals', 'tahr'),
- ('animals', 'takin'),
- ('animals', 'tapir'),
- ('animals', 'tarantula'),
- ('animals', 'tarsier'),
- ('animals', 'termite'),
- ('animals', 'tern'),
- ('animals', 'thrush'),
- ('animals', 'tick'),
- ('animals', 'tiger'),
- ('animals', 'tiglon'),
- ('animals', 'toad'),
- ('animals', 'tortoise'),
- ('animals', 'toucan'),
- ('animals', 'trout'),
- ('animals', 'tuna'),
- ('animals', 'turkey'),
- ('animals', 'turtle'),
- ('animals', 'tyrannosaurus'),
- ('animals', 'urial'),
- ('animals', 'vicuna'),
- ('animals', 'viper'),
- ('animals', 'vole'),
- ('animals', 'vulture'),
- ('animals', 'wallaby'),
- ('animals', 'walrus'),
- ('animals', 'wasp'),
- ('animals', 'warbler'),
- ('animals', 'weasel'),
- ('animals', 'whale'),
- ('animals', 'whippet'),
- ('animals', 'whitefish'),
- ('animals', 'wildcat'),
- ('animals', 'wildebeest'),
- ('animals', 'wildfowl'),
- ('animals', 'wolf'),
- ('animals', 'wolverine'),
- ('animals', 'wombat'),
- ('animals', 'woodpecker'),
- ('animals', 'worm'),
- ('animals', 'wren'),
- ('animals', 'xerinae'),
- ('animals', 'yak'),
- ('animals', 'zebra'),
- ('animals', 'alpaca'),
- ('animals', 'cat'),
- ('animals', 'cattle'),
- ('animals', 'chicken'),
- ('animals', 'dog'),
- ('animals', 'donkey'),
- ('animals', 'ferret'),
- ('animals', 'gayal'),
- ('animals', 'goldfish'),
- ('animals', 'guppy'),
- ('animals', 'horse'),
- ('animals', 'koi'),
- ('animals', 'llama'),
- ('animals', 'sheep'),
- ('animals', 'yak'),
- ('animals', 'unicorn'),
-
- ('adjectives', 'average'),
- ('adjectives', 'big'),
- ('adjectives', 'colossal'),
- ('adjectives', 'fat'),
- ('adjectives', 'giant'),
- ('adjectives', 'gigantic'),
- ('adjectives', 'great'),
- ('adjectives', 'huge'),
- ('adjectives', 'immense'),
- ('adjectives', 'large'),
- ('adjectives', 'little'),
- ('adjectives', 'long'),
- ('adjectives', 'mammoth'),
- ('adjectives', 'massive'),
- ('adjectives', 'miniature'),
- ('adjectives', 'petite'),
- ('adjectives', 'puny'),
- ('adjectives', 'short'),
- ('adjectives', 'small'),
- ('adjectives', 'tall'),
- ('adjectives', 'tiny'),
- ('adjectives', 'boiling'),
- ('adjectives', 'breezy'),
- ('adjectives', 'broken'),
- ('adjectives', 'bumpy'),
- ('adjectives', 'chilly'),
- ('adjectives', 'cold'),
- ('adjectives', 'cool'),
- ('adjectives', 'creepy'),
- ('adjectives', 'crooked'),
- ('adjectives', 'cuddly'),
- ('adjectives', 'curly'),
- ('adjectives', 'damaged'),
- ('adjectives', 'damp'),
- ('adjectives', 'dirty'),
- ('adjectives', 'dry'),
- ('adjectives', 'dusty'),
- ('adjectives', 'filthy'),
- ('adjectives', 'flaky'),
- ('adjectives', 'fluffy'),
- ('adjectives', 'wet'),
- ('adjectives', 'broad'),
- ('adjectives', 'chubby'),
- ('adjectives', 'crooked'),
- ('adjectives', 'curved'),
- ('adjectives', 'deep'),
- ('adjectives', 'flat'),
- ('adjectives', 'high'),
- ('adjectives', 'hollow'),
- ('adjectives', 'low'),
- ('adjectives', 'narrow'),
- ('adjectives', 'round'),
- ('adjectives', 'shallow'),
- ('adjectives', 'skinny'),
- ('adjectives', 'square'),
- ('adjectives', 'steep'),
- ('adjectives', 'straight'),
- ('adjectives', 'wide'),
- ('adjectives', 'ancient'),
- ('adjectives', 'brief'),
- ('adjectives', 'early'),
- ('adjectives', 'fast'),
- ('adjectives', 'late'),
- ('adjectives', 'long'),
- ('adjectives', 'modern'),
- ('adjectives', 'old'),
- ('adjectives', 'quick'),
- ('adjectives', 'rapid'),
- ('adjectives', 'short'),
- ('adjectives', 'slow'),
- ('adjectives', 'swift'),
- ('adjectives', 'young'),
- ('adjectives', 'abundant'),
- ('adjectives', 'empty'),
- ('adjectives', 'few'),
- ('adjectives', 'heavy'),
- ('adjectives', 'light'),
- ('adjectives', 'many'),
- ('adjectives', 'numerous'),
- ('adjectives', 'Sound'),
- ('adjectives', 'cooing'),
- ('adjectives', 'deafening'),
- ('adjectives', 'faint'),
- ('adjectives', 'harsh'),
- ('adjectives', 'hissing'),
- ('adjectives', 'hushed'),
- ('adjectives', 'husky'),
- ('adjectives', 'loud'),
- ('adjectives', 'melodic'),
- ('adjectives', 'moaning'),
- ('adjectives', 'mute'),
- ('adjectives', 'noisy'),
- ('adjectives', 'purring'),
- ('adjectives', 'quiet'),
- ('adjectives', 'raspy'),
- ('adjectives', 'resonant'),
- ('adjectives', 'screeching'),
- ('adjectives', 'shrill'),
- ('adjectives', 'silent'),
- ('adjectives', 'soft'),
- ('adjectives', 'squealing'),
- ('adjectives', 'thundering'),
- ('adjectives', 'voiceless'),
- ('adjectives', 'whispering'),
- ('adjectives', 'bitter'),
- ('adjectives', 'delicious'),
- ('adjectives', 'fresh'),
- ('adjectives', 'juicy'),
- ('adjectives', 'ripe'),
- ('adjectives', 'rotten'),
- ('adjectives', 'salty'),
- ('adjectives', 'sour'),
- ('adjectives', 'spicy'),
- ('adjectives', 'stale'),
- ('adjectives', 'sticky'),
- ('adjectives', 'strong'),
- ('adjectives', 'sweet'),
- ('adjectives', 'tasteless'),
- ('adjectives', 'tasty'),
- ('adjectives', 'thirsty'),
- ('adjectives', 'fluttering'),
- ('adjectives', 'fuzzy'),
- ('adjectives', 'greasy'),
- ('adjectives', 'grubby'),
- ('adjectives', 'hard'),
- ('adjectives', 'hot'),
- ('adjectives', 'icy'),
- ('adjectives', 'loose'),
- ('adjectives', 'melted'),
- ('adjectives', 'plastic'),
- ('adjectives', 'prickly'),
- ('adjectives', 'rainy'),
- ('adjectives', 'rough'),
- ('adjectives', 'scattered'),
- ('adjectives', 'shaggy'),
- ('adjectives', 'shaky'),
- ('adjectives', 'sharp'),
- ('adjectives', 'shivering'),
- ('adjectives', 'silky'),
- ('adjectives', 'slimy'),
- ('adjectives', 'slippery'),
- ('adjectives', 'smooth'),
- ('adjectives', 'soft'),
- ('adjectives', 'solid'),
- ('adjectives', 'steady'),
- ('adjectives', 'sticky'),
- ('adjectives', 'tender'),
- ('adjectives', 'tight'),
- ('adjectives', 'uneven'),
- ('adjectives', 'weak'),
- ('adjectives', 'wet'),
- ('adjectives', 'wooden'),
- ('adjectives', 'afraid'),
- ('adjectives', 'angry'),
- ('adjectives', 'annoyed'),
- ('adjectives', 'anxious'),
- ('adjectives', 'arrogant'),
- ('adjectives', 'ashamed'),
- ('adjectives', 'awful'),
- ('adjectives', 'bad'),
- ('adjectives', 'bewildered'),
- ('adjectives', 'bored'),
- ('adjectives', 'combative'),
- ('adjectives', 'condemned'),
- ('adjectives', 'confused'),
- ('adjectives', 'creepy'),
- ('adjectives', 'cruel'),
- ('adjectives', 'dangerous'),
- ('adjectives', 'defeated'),
- ('adjectives', 'defiant'),
- ('adjectives', 'depressed'),
- ('adjectives', 'disgusted'),
- ('adjectives', 'disturbed'),
- ('adjectives', 'eerie'),
- ('adjectives', 'embarrassed'),
- ('adjectives', 'envious'),
- ('adjectives', 'evil'),
- ('adjectives', 'fierce'),
- ('adjectives', 'foolish'),
- ('adjectives', 'frantic'),
- ('adjectives', 'frightened'),
- ('adjectives', 'grieving'),
- ('adjectives', 'helpless'),
- ('adjectives', 'homeless'),
- ('adjectives', 'hungry'),
- ('adjectives', 'hurt'),
- ('adjectives', 'ill'),
- ('adjectives', 'jealous'),
- ('adjectives', 'lonely'),
- ('adjectives', 'mysterious'),
- ('adjectives', 'naughty'),
- ('adjectives', 'nervous'),
- ('adjectives', 'obnoxious'),
- ('adjectives', 'outrageous'),
- ('adjectives', 'panicky'),
- ('adjectives', 'repulsive'),
- ('adjectives', 'scary'),
- ('adjectives', 'scornful'),
- ('adjectives', 'selfish'),
- ('adjectives', 'sore'),
- ('adjectives', 'tense'),
- ('adjectives', 'terrible'),
- ('adjectives', 'thoughtless'),
- ('adjectives', 'tired'),
- ('adjectives', 'troubled'),
- ('adjectives', 'upset'),
- ('adjectives', 'uptight'),
- ('adjectives', 'weary'),
- ('adjectives', 'wicked'),
- ('adjectives', 'worried'),
- ('adjectives', 'agreeable'),
- ('adjectives', 'amused'),
- ('adjectives', 'brave'),
- ('adjectives', 'calm'),
- ('adjectives', 'charming'),
- ('adjectives', 'cheerful'),
- ('adjectives', 'comfortable'),
- ('adjectives', 'cooperative'),
- ('adjectives', 'courageous'),
- ('adjectives', 'delightful'),
- ('adjectives', 'determined'),
- ('adjectives', 'eager'),
- ('adjectives', 'elated'),
- ('adjectives', 'enchanting'),
- ('adjectives', 'encouraging'),
- ('adjectives', 'energetic'),
- ('adjectives', 'enthusiastic'),
- ('adjectives', 'excited'),
- ('adjectives', 'exuberant'),
- ('adjectives', 'fair'),
- ('adjectives', 'faithful'),
- ('adjectives', 'fantastic'),
- ('adjectives', 'fine'),
- ('adjectives', 'friendly'),
- ('adjectives', 'funny'),
- ('adjectives', 'gentle'),
- ('adjectives', 'glorious'),
- ('adjectives', 'good'),
- ('adjectives', 'happy'),
- ('adjectives', 'healthy'),
- ('adjectives', 'helpful'),
- ('adjectives', 'hilarious'),
- ('adjectives', 'jolly'),
- ('adjectives', 'joyous'),
- ('adjectives', 'kind'),
- ('adjectives', 'lively'),
- ('adjectives', 'lovely'),
- ('adjectives', 'lucky'),
- ('adjectives', 'obedient'),
- ('adjectives', 'perfect'),
- ('adjectives', 'pleasant'),
- ('adjectives', 'proud'),
- ('adjectives', 'relieved'),
- ('adjectives', 'silly'),
- ('adjectives', 'smiling'),
- ('adjectives', 'splendid'),
- ('adjectives', 'successful'),
- ('adjectives', 'thoughtful'),
- ('adjectives', 'victorious'),
- ('adjectives', 'vivacious'),
- ('adjectives', 'witty'),
- ('adjectives', 'wonderful'),
- ('adjectives', 'zealous'),
- ('adjectives', 'zany'),
- ('adjectives', 'other'),
- ('adjectives', 'good'),
- ('adjectives', 'new'),
- ('adjectives', 'old'),
- ('adjectives', 'great'),
- ('adjectives', 'high'),
- ('adjectives', 'small'),
- ('adjectives', 'different'),
- ('adjectives', 'large'),
- ('adjectives', 'local'),
- ('adjectives', 'social'),
- ('adjectives', 'important'),
- ('adjectives', 'long'),
- ('adjectives', 'young'),
- ('adjectives', 'national'),
- ('adjectives', 'british'),
- ('adjectives', 'right'),
- ('adjectives', 'early'),
- ('adjectives', 'possible'),
- ('adjectives', 'big'),
- ('adjectives', 'little'),
- ('adjectives', 'political'),
- ('adjectives', 'able'),
- ('adjectives', 'late'),
- ('adjectives', 'general'),
- ('adjectives', 'full'),
- ('adjectives', 'far'),
- ('adjectives', 'low'),
- ('adjectives', 'public'),
- ('adjectives', 'available'),
- ('adjectives', 'bad'),
- ('adjectives', 'main'),
- ('adjectives', 'sure'),
- ('adjectives', 'clear'),
- ('adjectives', 'major'),
- ('adjectives', 'economic'),
- ('adjectives', 'only'),
- ('adjectives', 'likely'),
- ('adjectives', 'real'),
- ('adjectives', 'black'),
- ('adjectives', 'particular'),
- ('adjectives', 'international'),
- ('adjectives', 'special'),
- ('adjectives', 'difficult'),
- ('adjectives', 'certain'),
- ('adjectives', 'open'),
- ('adjectives', 'whole'),
- ('adjectives', 'white'),
- ('adjectives', 'free'),
- ('adjectives', 'short'),
- ('adjectives', 'easy'),
- ('adjectives', 'strong'),
- ('adjectives', 'european'),
- ('adjectives', 'central'),
- ('adjectives', 'similar'),
- ('adjectives', 'human'),
- ('adjectives', 'common'),
- ('adjectives', 'necessary'),
- ('adjectives', 'single'),
- ('adjectives', 'personal'),
- ('adjectives', 'hard'),
- ('adjectives', 'private'),
- ('adjectives', 'poor'),
- ('adjectives', 'financial'),
- ('adjectives', 'wide'),
- ('adjectives', 'foreign'),
- ('adjectives', 'simple'),
- ('adjectives', 'recent'),
- ('adjectives', 'concerned'),
- ('adjectives', 'american'),
- ('adjectives', 'various'),
- ('adjectives', 'close'),
- ('adjectives', 'fine'),
- ('adjectives', 'english'),
- ('adjectives', 'wrong'),
- ('adjectives', 'present'),
- ('adjectives', 'royal'),
- ('adjectives', 'natural'),
- ('adjectives', 'individual'),
- ('adjectives', 'nice'),
- ('adjectives', 'french'),
- ('adjectives', 'following'),
- ('adjectives', 'current'),
- ('adjectives', 'modern'),
- ('adjectives', 'labour'),
- ('adjectives', 'legal'),
- ('adjectives', 'happy'),
- ('adjectives', 'final'),
- ('adjectives', 'red'),
- ('adjectives', 'normal'),
- ('adjectives', 'serious'),
- ('adjectives', 'previous'),
- ('adjectives', 'total'),
- ('adjectives', 'prime'),
- ('adjectives', 'significant'),
- ('adjectives', 'industrial'),
- ('adjectives', 'sorry'),
- ('adjectives', 'dead'),
- ('adjectives', 'specific'),
- ('adjectives', 'appropriate'),
- ('adjectives', 'top'),
- ('adjectives', 'soviet'),
- ('adjectives', 'basic'),
- ('adjectives', 'military'),
- ('adjectives', 'original'),
- ('adjectives', 'successful'),
- ('adjectives', 'aware'),
- ('adjectives', 'hon'),
- ('adjectives', 'popular'),
- ('adjectives', 'heavy'),
- ('adjectives', 'professional'),
- ('adjectives', 'direct'),
- ('adjectives', 'dark'),
- ('adjectives', 'cold'),
- ('adjectives', 'ready'),
- ('adjectives', 'green'),
- ('adjectives', 'useful'),
- ('adjectives', 'effective'),
- ('adjectives', 'western'),
- ('adjectives', 'traditional'),
- ('adjectives', 'scottish'),
- ('adjectives', 'german'),
- ('adjectives', 'independent'),
- ('adjectives', 'deep'),
- ('adjectives', 'interesting'),
- ('adjectives', 'considerable'),
- ('adjectives', 'involved'),
- ('adjectives', 'physical'),
- ('adjectives', 'left'),
- ('adjectives', 'hot'),
- ('adjectives', 'existing'),
- ('adjectives', 'responsible'),
- ('adjectives', 'complete'),
- ('adjectives', 'medical'),
- ('adjectives', 'blue'),
- ('adjectives', 'extra'),
- ('adjectives', 'past'),
- ('adjectives', 'male'),
- ('adjectives', 'interested'),
- ('adjectives', 'fair'),
- ('adjectives', 'essential'),
- ('adjectives', 'beautiful'),
- ('adjectives', 'civil'),
- ('adjectives', 'primary'),
- ('adjectives', 'obvious'),
- ('adjectives', 'future'),
- ('adjectives', 'environmental'),
- ('adjectives', 'positive'),
- ('adjectives', 'senior'),
- ('adjectives', 'nuclear'),
- ('adjectives', 'annual'),
- ('adjectives', 'relevant'),
- ('adjectives', 'huge'),
- ('adjectives', 'rich'),
- ('adjectives', 'commercial'),
- ('adjectives', 'safe'),
- ('adjectives', 'regional'),
- ('adjectives', 'practical'),
- ('adjectives', 'official'),
- ('adjectives', 'separate'),
- ('adjectives', 'key'),
- ('adjectives', 'chief'),
- ('adjectives', 'regular'),
- ('adjectives', 'due'),
- ('adjectives', 'additional'),
- ('adjectives', 'active'),
- ('adjectives', 'powerful'),
- ('adjectives', 'complex'),
- ('adjectives', 'standard'),
- ('adjectives', 'impossible'),
- ('adjectives', 'light'),
- ('adjectives', 'warm'),
- ('adjectives', 'middle'),
- ('adjectives', 'fresh'),
- ('adjectives', 'sexual'),
- ('adjectives', 'front'),
- ('adjectives', 'domestic'),
- ('adjectives', 'actual'),
- ('adjectives', 'united'),
- ('adjectives', 'technical'),
- ('adjectives', 'ordinary'),
- ('adjectives', 'cheap'),
- ('adjectives', 'strange'),
- ('adjectives', 'internal'),
- ('adjectives', 'excellent'),
- ('adjectives', 'quiet'),
- ('adjectives', 'soft'),
- ('adjectives', 'potential'),
- ('adjectives', 'northern'),
- ('adjectives', 'religious'),
- ('adjectives', 'quick'),
- ('adjectives', 'very'),
- ('adjectives', 'famous'),
- ('adjectives', 'cultural'),
- ('adjectives', 'proper'),
- ('adjectives', 'broad'),
- ('adjectives', 'joint'),
- ('adjectives', 'formal'),
- ('adjectives', 'limited'),
- ('adjectives', 'conservative'),
- ('adjectives', 'lovely'),
- ('adjectives', 'usual'),
- ('adjectives', 'ltd'),
- ('adjectives', 'unable'),
- ('adjectives', 'rural'),
- ('adjectives', 'initial'),
- ('adjectives', 'substantial'),
- ('adjectives', 'christian'),
- ('adjectives', 'bright'),
- ('adjectives', 'average'),
- ('adjectives', 'leading'),
- ('adjectives', 'reasonable'),
- ('adjectives', 'immediate'),
- ('adjectives', 'suitable'),
- ('adjectives', 'equal'),
- ('adjectives', 'detailed'),
- ('adjectives', 'working'),
- ('adjectives', 'overall'),
- ('adjectives', 'female'),
- ('adjectives', 'afraid'),
- ('adjectives', 'democratic'),
- ('adjectives', 'growing'),
- ('adjectives', 'sufficient'),
- ('adjectives', 'scientific'),
- ('adjectives', 'eastern'),
- ('adjectives', 'correct'),
- ('adjectives', 'inc'),
- ('adjectives', 'irish'),
- ('adjectives', 'expensive'),
- ('adjectives', 'educational'),
- ('adjectives', 'mental'),
- ('adjectives', 'dangerous'),
- ('adjectives', 'critical'),
- ('adjectives', 'increased'),
- ('adjectives', 'familiar'),
- ('adjectives', 'unlikely'),
- ('adjectives', 'double'),
- ('adjectives', 'perfect'),
- ('adjectives', 'slow'),
- ('adjectives', 'tiny'),
- ('adjectives', 'dry'),
- ('adjectives', 'historical'),
- ('adjectives', 'thin'),
- ('adjectives', 'daily'),
- ('adjectives', 'southern'),
- ('adjectives', 'increasing'),
- ('adjectives', 'wild'),
- ('adjectives', 'alone'),
- ('adjectives', 'urban'),
- ('adjectives', 'empty'),
- ('adjectives', 'married'),
- ('adjectives', 'narrow'),
- ('adjectives', 'liberal'),
- ('adjectives', 'supposed'),
- ('adjectives', 'upper'),
- ('adjectives', 'apparent'),
- ('adjectives', 'tall'),
- ('adjectives', 'busy'),
- ('adjectives', 'bloody'),
- ('adjectives', 'prepared'),
- ('adjectives', 'russian'),
- ('adjectives', 'moral'),
- ('adjectives', 'careful'),
- ('adjectives', 'clean'),
- ('adjectives', 'attractive'),
- ('adjectives', 'japanese'),
- ('adjectives', 'vital'),
- ('adjectives', 'thick'),
- ('adjectives', 'alternative'),
- ('adjectives', 'fast'),
- ('adjectives', 'ancient'),
- ('adjectives', 'elderly'),
- ('adjectives', 'rare'),
- ('adjectives', 'external'),
- ('adjectives', 'capable'),
- ('adjectives', 'brief'),
- ('adjectives', 'wonderful'),
- ('adjectives', 'grand'),
- ('adjectives', 'typical'),
- ('adjectives', 'entire'),
- ('adjectives', 'grey'),
- ('adjectives', 'constant'),
- ('adjectives', 'vast'),
- ('adjectives', 'surprised'),
- ('adjectives', 'ideal'),
- ('adjectives', 'terrible'),
- ('adjectives', 'academic'),
- ('adjectives', 'funny'),
- ('adjectives', 'minor'),
- ('adjectives', 'pleased'),
- ('adjectives', 'severe'),
- ('adjectives', 'ill'),
- ('adjectives', 'corporate'),
- ('adjectives', 'negative'),
- ('adjectives', 'permanent'),
- ('adjectives', 'weak'),
- ('adjectives', 'brown'),
- ('adjectives', 'fundamental'),
- ('adjectives', 'odd'),
- ('adjectives', 'crucial'),
- ('adjectives', 'inner'),
- ('adjectives', 'used'),
- ('adjectives', 'criminal'),
- ('adjectives', 'contemporary'),
- ('adjectives', 'sharp'),
- ('adjectives', 'sick'),
- ('adjectives', 'near'),
- ('adjectives', 'roman'),
- ('adjectives', 'massive'),
- ('adjectives', 'unique'),
- ('adjectives', 'secondary'),
- ('adjectives', 'parliamentary'),
- ('adjectives', 'african'),
- ('adjectives', 'unknown'),
- ('adjectives', 'subsequent'),
- ('adjectives', 'angry'),
- ('adjectives', 'alive'),
- ('adjectives', 'guilty'),
- ('adjectives', 'lucky'),
- ('adjectives', 'enormous'),
- ('adjectives', 'well'),
- ('adjectives', 'communist'),
- ('adjectives', 'yellow'),
- ('adjectives', 'unusual'),
- ('adjectives', 'net'),
- ('adjectives', 'tough'),
- ('adjectives', 'dear'),
- ('adjectives', 'extensive'),
- ('adjectives', 'glad'),
- ('adjectives', 'remaining'),
- ('adjectives', 'agricultural'),
- ('adjectives', 'alright'),
- ('adjectives', 'healthy'),
- ('adjectives', 'italian'),
- ('adjectives', 'principal'),
- ('adjectives', 'tired'),
- ('adjectives', 'efficient'),
- ('adjectives', 'comfortable'),
- ('adjectives', 'chinese'),
- ('adjectives', 'relative'),
- ('adjectives', 'friendly'),
- ('adjectives', 'conventional'),
- ('adjectives', 'willing'),
- ('adjectives', 'sudden'),
- ('adjectives', 'proposed'),
- ('adjectives', 'voluntary'),
- ('adjectives', 'slight'),
- ('adjectives', 'valuable'),
- ('adjectives', 'dramatic'),
- ('adjectives', 'golden'),
- ('adjectives', 'temporary'),
- ('adjectives', 'federal'),
- ('adjectives', 'keen'),
- ('adjectives', 'flat'),
- ('adjectives', 'silent'),
- ('adjectives', 'indian'),
- ('adjectives', 'worried'),
- ('adjectives', 'pale'),
- ('adjectives', 'statutory'),
- ('adjectives', 'welsh'),
- ('adjectives', 'dependent'),
- ('adjectives', 'firm'),
- ('adjectives', 'wet'),
- ('adjectives', 'competitive'),
- ('adjectives', 'armed'),
- ('adjectives', 'radical'),
- ('adjectives', 'outside'),
- ('adjectives', 'acceptable'),
- ('adjectives', 'sensitive'),
- ('adjectives', 'living'),
- ('adjectives', 'pure'),
- ('adjectives', 'global'),
- ('adjectives', 'emotional'),
- ('adjectives', 'sad'),
- ('adjectives', 'secret'),
- ('adjectives', 'rapid'),
- ('adjectives', 'adequate'),
- ('adjectives', 'fixed'),
- ('adjectives', 'sweet'),
- ('adjectives', 'administrative'),
- ('adjectives', 'wooden'),
- ('adjectives', 'remarkable'),
- ('adjectives', 'comprehensive'),
- ('adjectives', 'surprising'),
- ('adjectives', 'solid'),
- ('adjectives', 'rough'),
- ('adjectives', 'mere'),
- ('adjectives', 'mass'),
- ('adjectives', 'brilliant'),
- ('adjectives', 'maximum'),
- ('adjectives', 'absolute'),
- ('adjectives', 'tory'),
- ('adjectives', 'electronic'),
- ('adjectives', 'visual'),
- ('adjectives', 'electric'),
- ('adjectives', 'cool'),
- ('adjectives', 'spanish'),
- ('adjectives', 'literary'),
- ('adjectives', 'continuing'),
- ('adjectives', 'supreme'),
- ('adjectives', 'chemical'),
- ('adjectives', 'genuine'),
- ('adjectives', 'exciting'),
- ('adjectives', 'written'),
- ('adjectives', 'stupid'),
- ('adjectives', 'advanced'),
- ('adjectives', 'extreme'),
- ('adjectives', 'classical'),
- ('adjectives', 'fit'),
- ('adjectives', 'favourite'),
- ('adjectives', 'socialist'),
- ('adjectives', 'widespread'),
- ('adjectives', 'confident'),
- ('adjectives', 'straight'),
- ('adjectives', 'catholic'),
- ('adjectives', 'proud'),
- ('adjectives', 'numerous'),
- ('adjectives', 'opposite'),
- ('adjectives', 'distinct'),
- ('adjectives', 'mad'),
- ('adjectives', 'helpful'),
- ('adjectives', 'given'),
- ('adjectives', 'disabled'),
- ('adjectives', 'consistent'),
- ('adjectives', 'anxious'),
- ('adjectives', 'nervous'),
- ('adjectives', 'awful'),
- ('adjectives', 'stable'),
- ('adjectives', 'constitutional'),
- ('adjectives', 'satisfied'),
- ('adjectives', 'conscious'),
- ('adjectives', 'developing'),
- ('adjectives', 'strategic'),
- ('adjectives', 'holy'),
- ('adjectives', 'smooth'),
- ('adjectives', 'dominant'),
- ('adjectives', 'remote'),
- ('adjectives', 'theoretical'),
- ('adjectives', 'outstanding'),
- ('adjectives', 'pink'),
- ('adjectives', 'pretty'),
- ('adjectives', 'clinical'),
- ('adjectives', 'minimum'),
- ('adjectives', 'honest'),
- ('adjectives', 'impressive'),
- ('adjectives', 'related'),
- ('adjectives', 'residential'),
- ('adjectives', 'extraordinary'),
- ('adjectives', 'plain'),
- ('adjectives', 'visible'),
- ('adjectives', 'accurate'),
- ('adjectives', 'distant'),
- ('adjectives', 'still'),
- ('adjectives', 'greek'),
- ('adjectives', 'complicated'),
- ('adjectives', 'musical'),
- ('adjectives', 'precise'),
- ('adjectives', 'gentle'),
- ('adjectives', 'broken'),
- ('adjectives', 'live'),
- ('adjectives', 'silly'),
- ('adjectives', 'fat'),
- ('adjectives', 'tight'),
- ('adjectives', 'monetary'),
- ('adjectives', 'round'),
- ('adjectives', 'psychological'),
- ('adjectives', 'violent'),
- ('adjectives', 'unemployed'),
- ('adjectives', 'inevitable'),
- ('adjectives', 'junior'),
- ('adjectives', 'sensible'),
- ('adjectives', 'grateful'),
- ('adjectives', 'pleasant'),
- ('adjectives', 'dirty'),
- ('adjectives', 'structural'),
- ('adjectives', 'welcome'),
- ('adjectives', 'deaf'),
- ('adjectives', 'above'),
- ('adjectives', 'continuous'),
- ('adjectives', 'blind'),
- ('adjectives', 'overseas'),
- ('adjectives', 'mean'),
- ('adjectives', 'entitled'),
- ('adjectives', 'delighted'),
- ('adjectives', 'loose'),
- ('adjectives', 'occasional'),
- ('adjectives', 'evident'),
- ('adjectives', 'desperate'),
- ('adjectives', 'fellow'),
- ('adjectives', 'universal'),
- ('adjectives', 'square'),
- ('adjectives', 'steady'),
- ('adjectives', 'classic'),
- ('adjectives', 'equivalent'),
- ('adjectives', 'intellectual'),
- ('adjectives', 'victorian'),
- ('adjectives', 'level'),
- ('adjectives', 'ultimate'),
- ('adjectives', 'creative'),
- ('adjectives', 'lost'),
- ('adjectives', 'medieval'),
- ('adjectives', 'clever'),
- ('adjectives', 'linguistic'),
- ('adjectives', 'convinced'),
- ('adjectives', 'judicial'),
- ('adjectives', 'raw'),
- ('adjectives', 'sophisticated'),
- ('adjectives', 'asleep'),
- ('adjectives', 'vulnerable'),
- ('adjectives', 'illegal'),
- ('adjectives', 'outer'),
- ('adjectives', 'revolutionary'),
- ('adjectives', 'bitter'),
- ('adjectives', 'changing'),
- ('adjectives', 'australian'),
- ('adjectives', 'native'),
- ('adjectives', 'imperial'),
- ('adjectives', 'strict'),
- ('adjectives', 'wise'),
- ('adjectives', 'informal'),
- ('adjectives', 'flexible'),
- ('adjectives', 'collective'),
- ('adjectives', 'frequent'),
- ('adjectives', 'experimental'),
- ('adjectives', 'spiritual'),
- ('adjectives', 'intense'),
- ('adjectives', 'rational'),
- ('adjectives', 'ethnic'),
- ('adjectives', 'generous'),
- ('adjectives', 'inadequate'),
- ('adjectives', 'prominent'),
- ('adjectives', 'logical'),
- ('adjectives', 'bare'),
- ('adjectives', 'historic'),
- ('adjectives', 'modest'),
- ('adjectives', 'dutch'),
- ('adjectives', 'acute'),
- ('adjectives', 'electrical'),
- ('adjectives', 'valid'),
- ('adjectives', 'weekly'),
- ('adjectives', 'gross'),
- ('adjectives', 'automatic'),
- ('adjectives', 'loud'),
- ('adjectives', 'reliable'),
- ('adjectives', 'mutual'),
- ('adjectives', 'liable'),
- ('adjectives', 'multiple'),
- ('adjectives', 'ruling'),
- ('adjectives', 'curious'),
- ('adjectives', 'arab'),
- ('adjectives', 'sole'),
- ('adjectives', 'jewish'),
- ('adjectives', 'managing'),
- ('adjectives', 'pregnant'),
- ('adjectives', 'latin'),
- ('adjectives', 'nearby'),
- ('adjectives', 'exact'),
- ('adjectives', 'underlying'),
- ('adjectives', 'identical'),
- ('adjectives', 'satisfactory'),
- ('adjectives', 'marginal'),
- ('adjectives', 'distinctive'),
- ('adjectives', 'electoral'),
- ('adjectives', 'urgent'),
- ('adjectives', 'presidential'),
- ('adjectives', 'controversial'),
- ('adjectives', 'oral'),
- ('adjectives', 'everyday'),
- ('adjectives', 'encouraging'),
- ('adjectives', 'organic'),
- ('adjectives', 'continued'),
- ('adjectives', 'expected'),
- ('adjectives', 'statistical'),
- ('adjectives', 'desirable'),
- ('adjectives', 'innocent'),
- ('adjectives', 'improved'),
- ('adjectives', 'exclusive'),
- ('adjectives', 'marked'),
- ('adjectives', 'experienced'),
- ('adjectives', 'unexpected'),
- ('adjectives', 'superb'),
- ('adjectives', 'sheer'),
- ('adjectives', 'disappointed'),
- ('adjectives', 'frightened'),
- ('adjectives', 'gastric'),
- ('adjectives', 'capitalist'),
- ('adjectives', 'romantic'),
- ('adjectives', 'naked'),
- ('adjectives', 'reluctant'),
- ('adjectives', 'magnificent'),
- ('adjectives', 'convenient'),
- ('adjectives', 'established'),
- ('adjectives', 'closed'),
- ('adjectives', 'uncertain'),
- ('adjectives', 'artificial'),
- ('adjectives', 'diplomatic'),
- ('adjectives', 'tremendous'),
- ('adjectives', 'marine'),
- ('adjectives', 'mechanical'),
- ('adjectives', 'retail'),
- ('adjectives', 'institutional'),
- ('adjectives', 'mixed'),
- ('adjectives', 'required'),
- ('adjectives', 'biological'),
- ('adjectives', 'known'),
- ('adjectives', 'functional'),
- ('adjectives', 'straightforward'),
- ('adjectives', 'superior'),
- ('adjectives', 'digital'),
- ('adjectives', 'spectacular'),
- ('adjectives', 'unhappy'),
- ('adjectives', 'confused'),
- ('adjectives', 'unfair'),
- ('adjectives', 'aggressive'),
- ('adjectives', 'spare'),
- ('adjectives', 'painful'),
- ('adjectives', 'abstract'),
- ('adjectives', 'asian'),
- ('adjectives', 'associated'),
- ('adjectives', 'legislative'),
- ('adjectives', 'monthly'),
- ('adjectives', 'intelligent'),
- ('adjectives', 'hungry'),
- ('adjectives', 'explicit'),
- ('adjectives', 'nasty'),
- ('adjectives', 'just'),
- ('adjectives', 'faint'),
- ('adjectives', 'coloured'),
- ('adjectives', 'ridiculous'),
- ('adjectives', 'amazing'),
- ('adjectives', 'comparable'),
- ('adjectives', 'successive'),
- ('adjectives', 'realistic'),
- ('adjectives', 'back'),
- ('adjectives', 'decent'),
- ('adjectives', 'unnecessary'),
- ('adjectives', 'flying'),
- ('adjectives', 'random'),
- ('adjectives', 'influential'),
- ('adjectives', 'dull'),
- ('adjectives', 'genetic'),
- ('adjectives', 'neat'),
- ('adjectives', 'marvellous'),
- ('adjectives', 'crazy'),
- ('adjectives', 'damp'),
- ('adjectives', 'giant'),
- ('adjectives', 'secure'),
- ('adjectives', 'bottom'),
- ('adjectives', 'skilled'),
- ('adjectives', 'subtle'),
- ('adjectives', 'elegant'),
- ('adjectives', 'brave'),
- ('adjectives', 'lesser'),
- ('adjectives', 'parallel'),
- ('adjectives', 'steep'),
- ('adjectives', 'intensive'),
- ('adjectives', 'casual'),
- ('adjectives', 'tropical'),
- ('adjectives', 'lonely'),
- ('adjectives', 'partial'),
- ('adjectives', 'preliminary'),
- ('adjectives', 'concrete'),
- ('adjectives', 'alleged'),
- ('adjectives', 'assistant'),
- ('adjectives', 'vertical'),
- ('adjectives', 'upset'),
- ('adjectives', 'delicate'),
- ('adjectives', 'mild'),
- ('adjectives', 'occupational'),
- ('adjectives', 'excessive'),
- ('adjectives', 'progressive'),
- ('adjectives', 'iraqi'),
- ('adjectives', 'exceptional'),
- ('adjectives', 'integrated'),
- ('adjectives', 'striking'),
- ('adjectives', 'continental'),
- ('adjectives', 'okay'),
- ('adjectives', 'harsh'),
- ('adjectives', 'combined'),
- ('adjectives', 'fierce'),
- ('adjectives', 'handsome'),
- ('adjectives', 'characteristic'),
- ('adjectives', 'chronic'),
- ('adjectives', 'compulsory'),
- ('adjectives', 'interim'),
- ('adjectives', 'objective'),
- ('adjectives', 'splendid'),
- ('adjectives', 'magic'),
- ('adjectives', 'systematic'),
- ('adjectives', 'obliged'),
- ('adjectives', 'payable'),
- ('adjectives', 'fun'),
- ('adjectives', 'horrible'),
- ('adjectives', 'primitive'),
- ('adjectives', 'fascinating'),
- ('adjectives', 'ideological'),
- ('adjectives', 'metropolitan'),
- ('adjectives', 'surrounding'),
- ('adjectives', 'estimated'),
- ('adjectives', 'peaceful'),
- ('adjectives', 'premier'),
- ('adjectives', 'operational'),
- ('adjectives', 'technological'),
- ('adjectives', 'kind'),
- ('adjectives', 'advisory'),
- ('adjectives', 'hostile'),
- ('adjectives', 'precious'),
- ('adjectives', 'gay'),
- ('adjectives', 'accessible'),
- ('adjectives', 'determined'),
- ('adjectives', 'excited'),
- ('adjectives', 'impressed'),
- ('adjectives', 'provincial'),
- ('adjectives', 'smart'),
- ('adjectives', 'endless'),
- ('adjectives', 'isolated'),
- ('adjectives', 'drunk'),
- ('adjectives', 'geographical'),
- ('adjectives', 'like'),
- ('adjectives', 'dynamic'),
- ('adjectives', 'boring'),
- ('adjectives', 'forthcoming'),
- ('adjectives', 'unfortunate'),
- ('adjectives', 'definite'),
- ('adjectives', 'super'),
- ('adjectives', 'notable'),
- ('adjectives', 'indirect'),
- ('adjectives', 'stiff'),
- ('adjectives', 'wealthy'),
- ('adjectives', 'awkward'),
- ('adjectives', 'lively'),
- ('adjectives', 'neutral'),
- ('adjectives', 'artistic'),
- ('adjectives', 'content'),
- ('adjectives', 'mature'),
- ('adjectives', 'colonial'),
- ('adjectives', 'ambitious'),
- ('adjectives', 'evil'),
- ('adjectives', 'magnetic'),
- ('adjectives', 'verbal'),
- ('adjectives', 'legitimate'),
- ('adjectives', 'sympathetic'),
- ('adjectives', 'empirical'),
- ('adjectives', 'head'),
- ('adjectives', 'shallow'),
- ('adjectives', 'vague'),
- ('adjectives', 'naval'),
- ('adjectives', 'depressed'),
- ('adjectives', 'shared'),
- ('adjectives', 'added'),
- ('adjectives', 'shocked'),
- ('adjectives', 'mid'),
- ('adjectives', 'worthwhile'),
- ('adjectives', 'qualified'),
- ('adjectives', 'missing'),
- ('adjectives', 'blank'),
- ('adjectives', 'absent'),
- ('adjectives', 'favourable'),
- ('adjectives', 'polish'),
- ('adjectives', 'israeli'),
- ('adjectives', 'developed'),
- ('adjectives', 'profound'),
- ('adjectives', 'representative'),
- ('adjectives', 'enthusiastic'),
- ('adjectives', 'dreadful'),
- ('adjectives', 'rigid'),
- ('adjectives', 'reduced'),
- ('adjectives', 'cruel'),
- ('adjectives', 'coastal'),
- ('adjectives', 'peculiar'),
- ('adjectives', 'racial'),
- ('adjectives', 'ugly'),
- ('adjectives', 'swiss'),
- ('adjectives', 'crude'),
- ('adjectives', 'extended'),
- ('adjectives', 'selected'),
- ('adjectives', 'eager'),
- ('adjectives', 'feminist'),
- ('adjectives', 'canadian'),
- ('adjectives', 'bold'),
- ('adjectives', 'relaxed'),
- ('adjectives', 'corresponding'),
- ('adjectives', 'running'),
- ('adjectives', 'planned'),
- ('adjectives', 'applicable'),
- ('adjectives', 'immense'),
- ('adjectives', 'allied'),
- ('adjectives', 'comparative'),
- ('adjectives', 'uncomfortable'),
- ('adjectives', 'conservation'),
- ('adjectives', 'productive'),
- ('adjectives', 'beneficial'),
- ('adjectives', 'bored'),
- ('adjectives', 'charming'),
- ('adjectives', 'minimal'),
- ('adjectives', 'mobile'),
- ('adjectives', 'turkish'),
- ('adjectives', 'orange'),
- ('adjectives', 'rear'),
- ('adjectives', 'passive'),
- ('adjectives', 'suspicious'),
- ('adjectives', 'overwhelming'),
- ('adjectives', 'fatal'),
- ('adjectives', 'resulting'),
- ('adjectives', 'symbolic'),
- ('adjectives', 'registered'),
- ('adjectives', 'neighbouring'),
- ('adjectives', 'calm'),
- ('adjectives', 'irrelevant'),
- ('adjectives', 'patient'),
- ('adjectives', 'compact'),
- ('adjectives', 'profitable'),
- ('adjectives', 'rival'),
- ('adjectives', 'loyal'),
- ('adjectives', 'moderate'),
- ('adjectives', 'distinguished'),
- ('adjectives', 'interior'),
- ('adjectives', 'noble'),
- ('adjectives', 'insufficient'),
- ('adjectives', 'eligible'),
- ('adjectives', 'mysterious'),
- ('adjectives', 'varying'),
- ('adjectives', 'managerial'),
- ('adjectives', 'molecular'),
- ('adjectives', 'olympic'),
- ('adjectives', 'linear'),
- ('adjectives', 'prospective'),
- ('adjectives', 'printed'),
- ('adjectives', 'parental'),
- ('adjectives', 'diverse'),
- ('adjectives', 'elaborate'),
- ('adjectives', 'furious'),
- ('adjectives', 'fiscal'),
- ('adjectives', 'burning'),
- ('adjectives', 'useless'),
- ('adjectives', 'semantic'),
- ('adjectives', 'embarrassed'),
- ('adjectives', 'inherent'),
- ('adjectives', 'philosophical'),
- ('adjectives', 'deliberate'),
- ('adjectives', 'awake'),
- ('adjectives', 'variable'),
- ('adjectives', 'promising'),
- ('adjectives', 'unpleasant'),
- ('adjectives', 'varied'),
- ('adjectives', 'sacred'),
- ('adjectives', 'selective'),
- ('adjectives', 'inclined'),
- ('adjectives', 'tender'),
- ('adjectives', 'hidden'),
- ('adjectives', 'worthy'),
- ('adjectives', 'intermediate'),
- ('adjectives', 'sound'),
- ('adjectives', 'protective'),
- ('adjectives', 'fortunate'),
- ('adjectives', 'slim'),
- ('adjectives', 'islamic'),
- ('adjectives', 'defensive'),
- ('adjectives', 'divine'),
- ('adjectives', 'stuck'),
- ('adjectives', 'driving'),
- ('adjectives', 'invisible'),
- ('adjectives', 'misleading'),
- ('adjectives', 'circular'),
- ('adjectives', 'mathematical'),
- ('adjectives', 'inappropriate'),
- ('adjectives', 'liquid'),
- ('adjectives', 'persistent'),
- ('adjectives', 'solar'),
- ('adjectives', 'doubtful'),
- ('adjectives', 'manual'),
- ('adjectives', 'architectural'),
- ('adjectives', 'intact'),
- ('adjectives', 'incredible'),
- ('adjectives', 'devoted'),
- ('adjectives', 'prior'),
- ('adjectives', 'tragic'),
- ('adjectives', 'respectable'),
- ('adjectives', 'optimistic'),
- ('adjectives', 'convincing'),
- ('adjectives', 'unacceptable'),
- ('adjectives', 'decisive'),
- ('adjectives', 'competent'),
- ('adjectives', 'spatial'),
- ('adjectives', 'respective'),
- ('adjectives', 'binding'),
- ('adjectives', 'relieved'),
- ('adjectives', 'nursing'),
- ('adjectives', 'toxic'),
- ('adjectives', 'select'),
- ('adjectives', 'redundant'),
- ('adjectives', 'integral'),
- ('adjectives', 'then'),
- ('adjectives', 'probable'),
- ('adjectives', 'amateur'),
- ('adjectives', 'fond'),
- ('adjectives', 'passing'),
- ('adjectives', 'specified'),
- ('adjectives', 'territorial'),
- ('adjectives', 'horizontal'),
- ('adjectives', 'inland'),
- ('adjectives', 'cognitive'),
- ('adjectives', 'regulatory'),
- ('adjectives', 'miserable'),
- ('adjectives', 'resident'),
- ('adjectives', 'polite'),
- ('adjectives', 'scared'),
- ('adjectives', 'marxist'),
- ('adjectives', 'gothic'),
- ('adjectives', 'civilian'),
- ('adjectives', 'instant'),
- ('adjectives', 'lengthy'),
- ('adjectives', 'adverse'),
- ('adjectives', 'korean'),
- ('adjectives', 'unconscious'),
- ('adjectives', 'anonymous'),
- ('adjectives', 'aesthetic'),
- ('adjectives', 'orthodox'),
- ('adjectives', 'static'),
- ('adjectives', 'unaware'),
- ('adjectives', 'costly'),
- ('adjectives', 'fantastic'),
- ('adjectives', 'foolish'),
- ('adjectives', 'fashionable'),
- ('adjectives', 'causal'),
- ('adjectives', 'compatible'),
- ('adjectives', 'wee'),
- ('adjectives', 'implicit'),
- ('adjectives', 'dual'),
- ('adjectives', 'ok'),
- ('adjectives', 'cheerful'),
- ('adjectives', 'subjective'),
- ('adjectives', 'forward'),
- ('adjectives', 'surviving'),
- ('adjectives', 'exotic'),
- ('adjectives', 'purple'),
- ('adjectives', 'cautious'),
- ('adjectives', 'visiting'),
- ('adjectives', 'aggregate'),
- ('adjectives', 'ethical'),
- ('adjectives', 'protestant'),
- ('adjectives', 'teenage'),
- ('adjectives', 'dying'),
- ('adjectives', 'disastrous'),
- ('adjectives', 'delicious'),
- ('adjectives', 'confidential'),
- ('adjectives', 'underground'),
- ('adjectives', 'thorough'),
- ('adjectives', 'grim'),
- ('adjectives', 'autonomous'),
- ('adjectives', 'atomic'),
- ('adjectives', 'frozen'),
- ('adjectives', 'colourful'),
- ('adjectives', 'injured'),
- ('adjectives', 'uniform'),
- ('adjectives', 'ashamed'),
- ('adjectives', 'glorious'),
- ('adjectives', 'wicked'),
- ('adjectives', 'coherent'),
- ('adjectives', 'rising'),
- ('adjectives', 'shy'),
- ('adjectives', 'novel'),
- ('adjectives', 'balanced'),
- ('adjectives', 'delightful'),
- ('adjectives', 'arbitrary'),
- ('adjectives', 'adjacent'),
- ('adjectives', 'psychiatric'),
- ('adjectives', 'worrying'),
- ('adjectives', 'weird'),
- ('adjectives', 'unchanged'),
- ('adjectives', 'rolling'),
- ('adjectives', 'evolutionary'),
- ('adjectives', 'intimate'),
- ('adjectives', 'sporting'),
- ('adjectives', 'disciplinary'),
- ('adjectives', 'formidable'),
- ('adjectives', 'lexical'),
- ('adjectives', 'noisy'),
- ('adjectives', 'gradual'),
- ('adjectives', 'accused'),
- ('adjectives', 'homeless'),
- ('adjectives', 'supporting'),
- ('adjectives', 'coming'),
- ('adjectives', 'renewed'),
- ('adjectives', 'excess'),
- ('adjectives', 'retired'),
- ('adjectives', 'rubber'),
- ('adjectives', 'chosen'),
- ('adjectives', 'outdoor'),
- ('adjectives', 'embarrassing'),
- ('adjectives', 'preferred'),
- ('adjectives', 'bizarre'),
- ('adjectives', 'appalling'),
- ('adjectives', 'agreed'),
- ('adjectives', 'imaginative'),
- ('adjectives', 'governing'),
- ('adjectives', 'accepted'),
- ('adjectives', 'vocational'),
- ('adjectives', 'palestinian'),
- ('adjectives', 'mighty'),
- ('adjectives', 'puzzled'),
- ('adjectives', 'worldwide'),
- ('adjectives', 'handicapped'),
- ('adjectives', 'organisational'),
- ('adjectives', 'sunny'),
- ('adjectives', 'eldest'),
- ('adjectives', 'eventual'),
- ('adjectives', 'spontaneous'),
- ('adjectives', 'vivid'),
- ('adjectives', 'rude'),
- ('adjectives', 'faithful'),
- ('adjectives', 'ministerial'),
- ('adjectives', 'innovative'),
- ('adjectives', 'controlled'),
- ('adjectives', 'conceptual'),
- ('adjectives', 'unwilling'),
- ('adjectives', 'civic'),
- ('adjectives', 'meaningful'),
- ('adjectives', 'disturbing'),
- ('adjectives', 'alive'),
- ('adjectives', 'brainy'),
- ('adjectives', 'breakable'),
- ('adjectives', 'busy'),
- ('adjectives', 'careful'),
- ('adjectives', 'cautious'),
- ('adjectives', 'clever'),
- ('adjectives', 'concerned'),
- ('adjectives', 'crazy'),
- ('adjectives', 'curious'),
- ('adjectives', 'dead'),
- ('adjectives', 'different'),
- ('adjectives', 'difficult'),
- ('adjectives', 'doubtful'),
- ('adjectives', 'easy'),
- ('adjectives', 'famous'),
- ('adjectives', 'fragile'),
- ('adjectives', 'helpful'),
- ('adjectives', 'helpless'),
- ('adjectives', 'important'),
- ('adjectives', 'impossible'),
- ('adjectives', 'innocent'),
- ('adjectives', 'inquisitive'),
- ('adjectives', 'modern'),
- ('adjectives', 'open'),
- ('adjectives', 'outstanding'),
- ('adjectives', 'poor'),
- ('adjectives', 'powerful'),
- ('adjectives', 'puzzled'),
- ('adjectives', 'real'),
- ('adjectives', 'rich'),
- ('adjectives', 'shy'),
- ('adjectives', 'sleepy'),
- ('adjectives', 'stupid'),
- ('adjectives', 'super'),
- ('adjectives', 'tame'),
- ('adjectives', 'uninterested'),
- ('adjectives', 'wandering'),
- ('adjectives', 'wild'),
- ('adjectives', 'wrong'),
- ('adjectives', 'adorable'),
- ('adjectives', 'alert'),
- ('adjectives', 'average'),
- ('adjectives', 'beautiful'),
- ('adjectives', 'blonde'),
- ('adjectives', 'bloody'),
- ('adjectives', 'blushing'),
- ('adjectives', 'bright'),
- ('adjectives', 'clean'),
- ('adjectives', 'clear'),
- ('adjectives', 'cloudy'),
- ('adjectives', 'colorful'),
- ('adjectives', 'crowded'),
- ('adjectives', 'cute'),
- ('adjectives', 'dark'),
- ('adjectives', 'drab'),
- ('adjectives', 'distinct'),
- ('adjectives', 'dull'),
- ('adjectives', 'elegant'),
- ('adjectives', 'fancy'),
- ('adjectives', 'filthy'),
- ('adjectives', 'glamorous'),
- ('adjectives', 'gleaming'),
- ('adjectives', 'graceful'),
- ('adjectives', 'grotesque'),
- ('adjectives', 'homely'),
- ('adjectives', 'light'),
- ('adjectives', 'misty'),
- ('adjectives', 'motionless'),
- ('adjectives', 'muddy'),
- ('adjectives', 'plain'),
- ('adjectives', 'poised'),
- ('adjectives', 'quaint'),
- ('adjectives', 'shiny'),
- ('adjectives', 'smoggy'),
- ('adjectives', 'sparkling'),
- ('adjectives', 'spotless'),
- ('adjectives', 'stormy'),
- ('adjectives', 'strange'),
- ('adjectives', 'ugly'),
- ('adjectives', 'unsightly'),
- ('adjectives', 'unusual'),
- ('adjectives', 'bad'),
- ('adjectives', 'better'),
- ('adjectives', 'beautiful'),
- ('adjectives', 'big'),
- ('adjectives', 'black'),
- ('adjectives', 'blue'),
- ('adjectives', 'bright'),
- ('adjectives', 'clumsy'),
- ('adjectives', 'crazy'),
- ('adjectives', 'dizzy'),
- ('adjectives', 'dull'),
- ('adjectives', 'fat'),
- ('adjectives', 'frail'),
- ('adjectives', 'friendly'),
- ('adjectives', 'funny'),
- ('adjectives', 'great'),
- ('adjectives', 'green'),
- ('adjectives', 'gigantic'),
- ('adjectives', 'gorgeous'),
- ('adjectives', 'grumpy'),
- ('adjectives', 'handsome'),
- ('adjectives', 'happy'),
- ('adjectives', 'horrible'),
- ('adjectives', 'itchy'),
- ('adjectives', 'jittery'),
- ('adjectives', 'jolly'),
- ('adjectives', 'kind'),
- ('adjectives', 'long'),
- ('adjectives', 'lazy'),
- ('adjectives', 'magnificent'),
- ('adjectives', 'magenta'),
- ('adjectives', 'many'),
- ('adjectives', 'mighty'),
- ('adjectives', 'mushy'),
- ('adjectives', 'nasty'),
- ('adjectives', 'new'),
- ('adjectives', 'nice'),
- ('adjectives', 'nosy'),
- ('adjectives', 'nutty'),
- ('adjectives', 'nutritious'),
- ('adjectives', 'odd'),
- ('adjectives', 'orange'),
- ('adjectives', 'ordinary'),
- ('adjectives', 'pretty'),
- ('adjectives', 'precious'),
- ('adjectives', 'prickly'),
- ('adjectives', 'purple'),
- ('adjectives', 'quaint'),
- ('adjectives', 'quiet'),
- ('adjectives', 'quick'),
- ('adjectives', 'quickest'),
- ('adjectives', 'rainy'),
- ('adjectives', 'rare'),
- ('adjectives', 'ratty'),
- ('adjectives', 'red'),
- ('adjectives', 'roasted'),
- ('adjectives', 'robust'),
- ('adjectives', 'round'),
- ('adjectives', 'sad'),
- ('adjectives', 'scary'),
- ('adjectives', 'scrawny'),
- ('adjectives', 'short'),
- ('adjectives', 'silly'),
- ('adjectives', 'stingy'),
- ('adjectives', 'strange'),
- ('adjectives', 'striped'),
- ('adjectives', 'spotty'),
- ('adjectives', 'tart'),
- ('adjectives', 'tall'),
- ('adjectives', 'tame'),
- ('adjectives', 'tan'),
- ('adjectives', 'tender'),
- ('adjectives', 'testy'),
- ('adjectives', 'tricky'),
- ('adjectives', 'tough'),
- ('adjectives', 'ugly'),
- ('adjectives', 'ugliest'),
- ('adjectives', 'vast'),
- ('adjectives', 'watery'),
- ('adjectives', 'wasteful'),
- ('adjectives', 'wonderful'),
- ('adjectives', 'yellow'),
- ('adjectives', 'yummy'),
- ('adjectives', 'zany'),
-
-('lorem', 'aenean'),
-('lorem', 'aliquam'),
-('lorem', 'class'),
-('lorem', 'cras'),
-('lorem', 'curabitur'),
-('lorem', 'donec'),
-('lorem', 'duis'),
-('lorem', 'etiam'),
-('lorem', 'fusce'),
-('lorem', 'in'),
-('lorem', 'integer'),
-('lorem', 'interdum'),
-('lorem', 'lorem'),
-('lorem', 'maecenas'),
-('lorem', 'mauris'),
-('lorem', 'morbi'),
-('lorem', 'nam'),
-('lorem', 'nulla'),
-('lorem', 'nullam'),
-('lorem', 'nunc'),
-('lorem', 'pellentesque'),
-('lorem', 'phasellus'),
-('lorem', 'praesent'),
-('lorem', 'proin'),
-('lorem', 'quisque'),
-('lorem', 'sed'),
-('lorem', 'suspendisse'),
-('lorem', 'ut'),
-('lorem', 'vestibulum'),
-('lorem', 'vivamus'),
-('lorem', 'a'),
-('lorem', 'ac'),
-('lorem', 'accumsan'),
-('lorem', 'ad'),
-('lorem', 'adipiscing'),
-('lorem', 'aliquam'),
-('lorem', 'aliquet'),
-('lorem', 'amet'),
-('lorem', 'ante'),
-('lorem', 'aptent'),
-('lorem', 'arcu'),
-('lorem', 'at'),
-('lorem', 'auctor'),
-('lorem', 'augue'),
-('lorem', 'bibendum'),
-('lorem', 'blandit'),
-('lorem', 'commodo'),
-('lorem', 'condimentum'),
-('lorem', 'congue'),
-('lorem', 'consectetur'),
-('lorem', 'consequat'),
-('lorem', 'conubia'),
-('lorem', 'convallis'),
-('lorem', 'cubilia'),
-('lorem', 'curae;'),
-('lorem', 'cursus'),
-('lorem', 'dapibus'),
-('lorem', 'diam'),
-('lorem', 'dictum'),
-('lorem', 'dictumst'),
-('lorem', 'dignissim'),
-('lorem', 'dolor'),
-('lorem', 'dui'),
-('lorem', 'efficitur'),
-('lorem', 'egestas'),
-('lorem', 'eget'),
-('lorem', 'eleifend'),
-('lorem', 'elementum'),
-('lorem', 'elit'),
-('lorem', 'enim'),
-('lorem', 'erat'),
-('lorem', 'eros'),
-('lorem', 'est'),
-('lorem', 'et'),
-('lorem', 'eu'),
-('lorem', 'euismod'),
-('lorem', 'ex'),
-('lorem', 'facilisi'),
-('lorem', 'facilisis'),
-('lorem', 'fames'),
-('lorem', 'faucibus'),
-('lorem', 'felis'),
-('lorem', 'fermentum'),
-('lorem', 'feugiat'),
-('lorem', 'finibus'),
-('lorem', 'fringilla'),
-('lorem', 'gravida'),
-('lorem', 'habitant'),
-('lorem', 'habitasse'),
-('lorem', 'hac'),
-('lorem', 'hendrerit'),
-('lorem', 'himenaeos'),
-('lorem', 'iaculis'),
-('lorem', 'id'),
-('lorem', 'imperdiet'),
-('lorem', 'in'),
-('lorem', 'inceptos'),
-('lorem', 'interdum'),
-('lorem', 'ipsum'),
-('lorem', 'justo'),
-('lorem', 'lacinia'),
-('lorem', 'lacus'),
-('lorem', 'laoreet'),
-('lorem', 'lectus'),
-('lorem', 'leo'),
-('lorem', 'libero'),
-('lorem', 'ligula'),
-('lorem', 'litora'),
-('lorem', 'lobortis'),
-('lorem', 'lorem'),
-('lorem', 'luctus'),
-('lorem', 'magna'),
-('lorem', 'malesuada'),
-('lorem', 'massa'),
-('lorem', 'mattis'),
-('lorem', 'mauris'),
-('lorem', 'maximus'),
-('lorem', 'metus'),
-('lorem', 'mi'),
-('lorem', 'molestie'),
-('lorem', 'mollis'),
-('lorem', 'morbi'),
-('lorem', 'nec'),
-('lorem', 'neque'),
-('lorem', 'netus'),
-('lorem', 'nibh'),
-('lorem', 'nisi'),
-('lorem', 'nisl'),
-('lorem', 'non'),
-('lorem', 'nostra'),
-('lorem', 'nulla'),
-('lorem', 'nunc'),
-('lorem', 'odio'),
-('lorem', 'orci'),
-('lorem', 'ornare'),
-('lorem', 'pellentesque'),
-('lorem', 'per'),
-('lorem', 'pharetra'),
-('lorem', 'placerat'),
-('lorem', 'platea'),
-('lorem', 'porta'),
-('lorem', 'porttitor'),
-('lorem', 'posuere'),
-('lorem', 'pretium'),
-('lorem', 'primis'),
-('lorem', 'pulvinar'),
-('lorem', 'purus'),
-('lorem', 'quam'),
-('lorem', 'quis'),
-('lorem', 'rhoncus'),
-('lorem', 'risus'),
-('lorem', 'rutrum'),
-('lorem', 'sagittis'),
-('lorem', 'sapien'),
-('lorem', 'scelerisque'),
-('lorem', 'sed'),
-('lorem', 'sem'),
-('lorem', 'semper'),
-('lorem', 'senectus'),
-('lorem', 'sit'),
-('lorem', 'sociosqu'),
-('lorem', 'sodales'),
-('lorem', 'sollicitudin'),
-('lorem', 'suscipit'),
-('lorem', 'taciti'),
-('lorem', 'tellus'),
-('lorem', 'tempor'),
-('lorem', 'tempus'),
-('lorem', 'tincidunt'),
-('lorem', 'torquent'),
-('lorem', 'tortor'),
-('lorem', 'tristique'),
-('lorem', 'turpis'),
-('lorem', 'ullamcorper'),
-('lorem', 'ultrices'),
-('lorem', 'ultricies'),
-('lorem', 'urna'),
-('lorem', 'ut'),
-('lorem', 'varius'),
-('lorem', 'vehicula'),
-('lorem', 'vel'),
-('lorem', 'velit'),
-('lorem', 'venenatis'),
-('lorem', 'vestibulum'),
-('lorem', 'vitae'),
-('lorem', 'viverra'),
-('lorem', 'volutpat'),
-('lorem', 'vulputate'),
-
-
- ('mime', 'audio/mpeg'),
-
- ('mime', 'application/epub+zip'),
- ('mime', 'application/font-woff'),
- ('mime', 'application/font-woff2'),
- ('mime', 'application/javascript'),
- ('mime', 'application/json'),
- ('mime', 'application/pdf'),
- ('mime', 'application/vnd.oasis.opendocument.spreadsheet'),
- ('mime', 'application/vnd.oasis.opendocument.text'),
- ('mime', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'),
- ('mime', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'),
- ('mime', 'application/x-font-opentype'),
- ('mime', 'application/x-font-ttf'),
- ('mime', 'application/x-gzip'),
- ('mime', 'application/x-shockwave-flash'),
- ('mime', 'application/x-sql'),
- ('mime', 'application/zip'),
- ('mime', 'image/emf'),
- ('mime', 'image/gif'),
- ('mime', 'image/jpeg'),
- ('mime', 'image/png'),
- ('mime', 'image/svg+xml'),
- ('mime', 'image/tiff'),
- ('mime', 'image/vnd.adobe.photoshop'),
- ('mime', 'image/vnd.dwg'),
- ('mime', 'image/vnd.dxf'),
- ('mime', 'image/wmf'),
- ('mime', 'image/x-ms-bmp'),
- ('mime', 'image/x-pict'),
- ('mime', 'image/x-tga'),
- ('mime', 'text/css'),
- ('mime', 'text/csv'),
- ('mime', 'text/html'),
- ('mime', 'text/jsx'),
- ('mime', 'text/less'),
- ('mime', 'text/markdown'),
- ('mime', 'text/plain'),
- ('mime', 'text/tab-separated-values'),
- ('mime', 'text/x-scss'),
- ('mime', 'text/x-shellscript'),
- ('mime', 'text/x-typescript'),
- ('mime', 'text/yaml'),
- ('mime', 'video/mp4'),
-
--- extensions
-
- ('audio/mpeg', 'mp3'),
-
- ('application/epub+zip', 'zip'),
- ('application/font-woff', 'woff'),
- ('application/font-woff2', 'woff2'),
- ('application/javascript', 'js'),
- ('application/json', 'json'),
- ('application/pdf', 'pdf'),
- ('application/vnd.oasis.opendocument.spreadsheet', 'xls'),
- ('application/vnd.oasis.opendocument.text', 'txt'),
- ('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'xls'),
- ('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'doc'),
- ('application/x-font-opentype', 'opentype'),
- ('application/x-font-ttf', 'ttf'),
- ('application/x-gzip', 'gzip'),
- ('application/x-shockwave-flash', 'swf'),
- ('application/x-sql', 'sql'),
- ('application/zip', 'zip'),
- ('image/emf', 'emf'),
- ('image/gif', 'gif'),
- ('image/jpeg', 'jpeg'),
- ('image/jpeg', 'jpg'),
- ('image/png', 'png'),
- ('image/svg+xml', 'svg'),
- ('image/tiff', 'tiff'),
- ('image/vnd.adobe.photoshop', 'psd'),
- ('image/vnd.dwg', 'dwg'),
- ('image/vnd.dxf', 'dxf'),
- ('image/wmf', 'wmf'),
- ('image/x-ms-bmp', 'bmp'),
- ('image/x-pict', 'pict'),
- ('image/x-tga', 'tga'),
- ('text/css', 'css'),
- ('text/csv', 'csv'),
- ('text/html', 'html'),
- ('text/html', 'htm'),
- ('text/jsx', 'jsx'),
- ('text/less', 'less'),
- ('text/markdown', 'md'),
- ('text/plain', 'txt'),
- ('text/tab-separated-values', 'csv'),
- ('text/tab-separated-values', 'tsv'),
- ('text/x-scss', 'scss'),
- ('text/x-shellscript', 'sh'),
- ('text/x-typescript', 'ts'),
- ('text/x-typescript', 'tsx'),
- ('text/yaml', 'yaml'),
- ('text/yaml', 'yml'),
- ('video/mp4', 'mp4'),
-
- ('surname', 'smith'),
-('surname', 'johnson'),
-('surname', 'williams'),
-('surname', 'brown'),
-('surname', 'jones'),
-('surname', 'garcia'),
-('surname', 'miller'),
-('surname', 'davis'),
-('surname', 'rodriguez'),
-('surname', 'martinez'),
-('surname', 'hernandez'),
-('surname', 'lopez'),
-('surname', 'gonzalez'),
-('surname', 'wilson'),
-('surname', 'anderson'),
-('surname', 'thomas'),
-('surname', 'taylor'),
-('surname', 'moore'),
-('surname', 'jackson'),
-('surname', 'martin'),
-('surname', 'lee'),
-('surname', 'perez'),
-('surname', 'thompson'),
-('surname', 'white'),
-('surname', 'harris'),
-('surname', 'sanchez'),
-('surname', 'clark'),
-('surname', 'ramirez'),
-('surname', 'lewis'),
-('surname', 'robinson'),
-('surname', 'walker'),
-('surname', 'young'),
-('surname', 'allen'),
-('surname', 'king'),
-('surname', 'wright'),
-('surname', 'scott'),
-('surname', 'torres'),
-('surname', 'nguyen'),
-('surname', 'hill'),
-('surname', 'flores'),
-('surname', 'green'),
-('surname', 'adams'),
-('surname', 'nelson'),
-('surname', 'baker'),
-('surname', 'hall'),
-('surname', 'rivera'),
-('surname', 'campbell'),
-('surname', 'mitchell'),
-('surname', 'carter'),
-('surname', 'roberts'),
-('surname', 'gomez'),
-('surname', 'phillips'),
-('surname', 'evans'),
-('surname', 'turner'),
-('surname', 'diaz'),
-('surname', 'parker'),
-('surname', 'cruz'),
-('surname', 'edwards'),
-('surname', 'collins'),
-('surname', 'reyes'),
-('surname', 'stewart'),
-('surname', 'morris'),
-('surname', 'morales'),
-('surname', 'murphy'),
-('surname', 'cook'),
-('surname', 'rogers'),
-('surname', 'gutierrez'),
-('surname', 'ortiz'),
-('surname', 'morgan'),
-('surname', 'cooper'),
-('surname', 'peterson'),
-('surname', 'bailey'),
-('surname', 'reed'),
-('surname', 'kelly'),
-('surname', 'howard'),
-('surname', 'ramos'),
-('surname', 'kim'),
-('surname', 'cox'),
-('surname', 'ward'),
-('surname', 'richardson'),
-('surname', 'watson'),
-('surname', 'brooks'),
-('surname', 'chavez'),
-('surname', 'wood'),
-('surname', 'james'),
-('surname', 'bennett'),
-('surname', 'gray'),
-('surname', 'mendoza'),
-('surname', 'ruiz'),
-('surname', 'hughes'),
-('surname', 'price'),
-('surname', 'alvarez'),
-('surname', 'castillo'),
-('surname', 'sanders'),
-('surname', 'patel'),
-('surname', 'myers'),
-('surname', 'long'),
-('surname', 'ross'),
-('surname', 'foster'),
-('surname', 'jimenez'),
-('surname', 'powell'),
-('surname', 'jenkins'),
-('surname', 'perry'),
-('surname', 'russell'),
-('surname', 'sullivan'),
-('surname', 'bell'),
-('surname', 'coleman'),
-('surname', 'butler'),
-('surname', 'henderson'),
-('surname', 'barnes'),
-('surname', 'gonzales'),
-('surname', 'fisher'),
-('surname', 'vasquez'),
-('surname', 'simmons'),
-('surname', 'romero'),
-('surname', 'jordan'),
-('surname', 'patterson'),
-('surname', 'alexander'),
-('surname', 'hamilton'),
-('surname', 'graham'),
-('surname', 'reynolds'),
-('surname', 'griffin'),
-('surname', 'wallace'),
-('surname', 'moreno'),
-('surname', 'west'),
-('surname', 'cole'),
-('surname', 'hayes'),
-('surname', 'bryant'),
-('surname', 'herrera'),
-('surname', 'gibson'),
-('surname', 'ellis'),
-('surname', 'tran'),
-('surname', 'medina'),
-('surname', 'aguilar'),
-('surname', 'stevens'),
-('surname', 'murray'),
-('surname', 'ford'),
-('surname', 'castro'),
-('surname', 'marshall'),
-('surname', 'owens'),
-('surname', 'harrison'),
-('surname', 'fernandez'),
-('surname', 'mcdonald'),
-('surname', 'woods'),
-('surname', 'washington'),
-('surname', 'kennedy'),
-('surname', 'wells'),
-('surname', 'vargas'),
-('surname', 'henry'),
-('surname', 'chen'),
-('surname', 'freeman'),
-('surname', 'webb'),
-('surname', 'tucker'),
-('surname', 'guzman'),
-('surname', 'burns'),
-('surname', 'crawford'),
-('surname', 'olson'),
-('surname', 'simpson'),
-('surname', 'porter'),
-('surname', 'hunter'),
-('surname', 'gordon'),
-('surname', 'mendez'),
-('surname', 'silva'),
-('surname', 'shaw'),
-('surname', 'snyder'),
-('surname', 'mason'),
-('surname', 'dixon'),
-('surname', 'munoz'),
-('surname', 'hunt'),
-('surname', 'hicks'),
-('surname', 'holmes'),
-('surname', 'palmer'),
-('surname', 'wagner'),
-('surname', 'black'),
-('surname', 'robertson'),
-('surname', 'boyd'),
-('surname', 'rose'),
-('surname', 'stone'),
-('surname', 'salazar'),
-('surname', 'fox'),
-('surname', 'warren'),
-('surname', 'mills'),
-('surname', 'meyer'),
-('surname', 'rice'),
-('surname', 'schmidt'),
-('surname', 'garza'),
-('surname', 'daniels'),
-('surname', 'ferguson'),
-('surname', 'nichols'),
-('surname', 'stephens'),
-('surname', 'soto'),
-('surname', 'weaver'),
-('surname', 'ryan'),
-('surname', 'gardner'),
-('surname', 'payne'),
-('surname', 'grant'),
-('surname', 'dunn'),
-('surname', 'kelley'),
-('surname', 'spencer'),
-('surname', 'hawkins'),
-('surname', 'arnold'),
-('surname', 'pierce'),
-('surname', 'vazquez'),
-('surname', 'hansen'),
-('surname', 'peters'),
-('surname', 'santos'),
-('surname', 'hart'),
-('surname', 'bradley'),
-('surname', 'knight'),
-('surname', 'elliott'),
-('surname', 'cunningham'),
-('surname', 'duncan'),
-('surname', 'armstrong'),
-('surname', 'hudson'),
-('surname', 'carroll'),
-('surname', 'lane'),
-('surname', 'riley'),
-('surname', 'andrews'),
-('surname', 'alvarado'),
-('surname', 'ray'),
-('surname', 'delgado'),
-('surname', 'berry'),
-('surname', 'perkins'),
-('surname', 'hoffman'),
-('surname', 'johnston'),
-('surname', 'matthews'),
-('surname', 'pena'),
-('surname', 'richards'),
-('surname', 'contreras'),
-('surname', 'willis'),
-('surname', 'carpenter'),
-('surname', 'lawrence'),
-('surname', 'sandoval'),
-('surname', 'guerrero'),
-('surname', 'george'),
-('surname', 'chapman'),
-('surname', 'rios'),
-('surname', 'estrada'),
-('surname', 'ortega'),
-('surname', 'watkins'),
-('surname', 'greene'),
-('surname', 'nunez'),
-('surname', 'wheeler'),
-('surname', 'valdez'),
-('surname', 'harper'),
-('surname', 'burke'),
-('surname', 'larson'),
-('surname', 'santiago'),
-('surname', 'maldonado'),
-('surname', 'morrison'),
-('surname', 'franklin'),
-('surname', 'carlson'),
-('surname', 'austin'),
-('surname', 'dominguez'),
-('surname', 'carr'),
-('surname', 'lawson'),
-('surname', 'jacobs'),
-('surname', 'obrien'),
-('surname', 'lynch'),
-('surname', 'singh'),
-('surname', 'vega'),
-('surname', 'bishop'),
-('surname', 'montgomery'),
-('surname', 'oliver'),
-('surname', 'jensen'),
-('surname', 'harvey'),
-('surname', 'williamson'),
-('surname', 'gilbert'),
-('surname', 'dean'),
-('surname', 'sims'),
-('surname', 'espinoza'),
-('surname', 'howell'),
-('surname', 'li'),
-('surname', 'wong'),
-('surname', 'reid'),
-('surname', 'hanson'),
-('surname', 'le'),
-('surname', 'mccoy'),
-('surname', 'garrett'),
-('surname', 'burton'),
-('surname', 'fuller'),
-('surname', 'wang'),
-('surname', 'weber'),
-('surname', 'welch'),
-('surname', 'rojas'),
-('surname', 'lucas'),
-('surname', 'marquez'),
-('surname', 'fields'),
-('surname', 'park'),
-('surname', 'yang'),
-('surname', 'little'),
-('surname', 'banks'),
-('surname', 'padilla'),
-('surname', 'day'),
-('surname', 'walsh'),
-('surname', 'bowman'),
-('surname', 'schultz'),
-('surname', 'luna'),
-('surname', 'fowler'),
-('surname', 'mejia'),
-('surname', 'davidson'),
-('surname', 'acosta'),
-('surname', 'brewer'),
-('surname', 'may'),
-('surname', 'holland'),
-('surname', 'juarez'),
-('surname', 'newman'),
-('surname', 'pearson'),
-('surname', 'curtis'),
-('surname', 'cortez'),
-('surname', 'douglas'),
-('surname', 'schneider'),
-('surname', 'joseph'),
-('surname', 'barrett'),
-('surname', 'navarro'),
-('surname', 'figueroa'),
-('surname', 'keller'),
-('surname', 'avila'),
-('surname', 'wade'),
-('surname', 'molina'),
-('surname', 'stanley'),
-('surname', 'hopkins'),
-('surname', 'campos'),
-('surname', 'barnett'),
-('surname', 'bates'),
-('surname', 'chambers'),
-('surname', 'caldwell'),
-('surname', 'beck'),
-('surname', 'lambert'),
-('surname', 'miranda'),
-('surname', 'byrd'),
-('surname', 'craig'),
-('surname', 'ayala'),
-('surname', 'lowe'),
-('surname', 'frazier'),
-('surname', 'powers'),
-('surname', 'neal'),
-('surname', 'leonard'),
-('surname', 'gregory'),
-('surname', 'carrillo'),
-('surname', 'sutton'),
-('surname', 'fleming'),
-('surname', 'rhodes'),
-('surname', 'shelton'),
-('surname', 'schwartz'),
-('surname', 'norris'),
-('surname', 'jennings'),
-('surname', 'watts'),
-('surname', 'duran'),
-('surname', 'walters'),
-('surname', 'cohen'),
-('surname', 'mcdaniel'),
-('surname', 'moran'),
-('surname', 'parks'),
-('surname', 'steele'),
-('surname', 'vaughn'),
-('surname', 'becker'),
-('surname', 'holt'),
-('surname', 'deleon'),
-('surname', 'barker'),
-('surname', 'terry'),
-('surname', 'hale'),
-('surname', 'leon'),
-('surname', 'hail'),
-('surname', 'benson'),
-('surname', 'haynes'),
-('surname', 'horton'),
-('surname', 'miles'),
-('surname', 'lyons'),
-('surname', 'pham'),
-('surname', 'graves'),
-('surname', 'bush'),
-('surname', 'thornton'),
-('surname', 'wolfe'),
-('surname', 'warner'),
-('surname', 'cabrera'),
-('surname', 'mckinney'),
-('surname', 'mann'),
-('surname', 'zimmerman'),
-('surname', 'dawson'),
-('surname', 'lara'),
-('surname', 'fletcher'),
-('surname', 'page'),
-('surname', 'mccarthy'),
-('surname', 'love'),
-('surname', 'robles'),
-('surname', 'cervantes'),
-('surname', 'solis'),
-('surname', 'erickson'),
-('surname', 'reeves'),
-('surname', 'chang'),
-('surname', 'klein'),
-('surname', 'salinas'),
-('surname', 'fuentes'),
-('surname', 'baldwin'),
-('surname', 'daniel'),
-('surname', 'simon'),
-('surname', 'velasquez'),
-('surname', 'hardy'),
-('surname', 'higgins'),
-('surname', 'aguirre'),
-('surname', 'lin'),
-('surname', 'cummings'),
-('surname', 'chandler'),
-('surname', 'sharp'),
-('surname', 'barber'),
-('surname', 'bowen'),
-('surname', 'ochoa'),
-('surname', 'dennis'),
-('surname', 'robbins'),
-('surname', 'liu'),
-('surname', 'ramsey'),
-('surname', 'francis'),
-('surname', 'griffith'),
-('surname', 'paul'),
-('surname', 'blair'),
-('surname', 'oconnor'),
-('surname', 'cardenas'),
-('surname', 'pacheco'),
-('surname', 'cross'),
-('surname', 'calderon'),
-('surname', 'quinn'),
-('surname', 'moss'),
-('surname', 'swanson'),
-('surname', 'chan'),
-('surname', 'rivas'),
-('surname', 'khan'),
-('surname', 'rodgers'),
-('surname', 'serrano'),
-('surname', 'fitzgerald'),
-('surname', 'rosales'),
-('surname', 'stevenson'),
-('surname', 'christensen'),
-('surname', 'manning'),
-('surname', 'gill'),
-('surname', 'curry'),
-('surname', 'mclaughlin'),
-('surname', 'harmon'),
-('surname', 'mcgee'),
-('surname', 'gross'),
-('surname', 'doyle'),
-('surname', 'garner'),
-('surname', 'newton'),
-('surname', 'burgess'),
-('surname', 'reese'),
-('surname', 'walton'),
-('surname', 'blake'),
-('surname', 'trujillo'),
-('surname', 'adkins'),
-('surname', 'brady'),
-('surname', 'goodman'),
-('surname', 'roman'),
-('surname', 'webster'),
-('surname', 'goodwin'),
-('surname', 'fischer'),
-('surname', 'huang'),
-('surname', 'potter'),
-('surname', 'delacruz'),
-('surname', 'montoya'),
-('surname', 'todd'),
-('surname', 'wu'),
-('surname', 'hines'),
-('surname', 'mullins'),
-('surname', 'castaneda'),
-('surname', 'malone'),
-('surname', 'cannon'),
-('surname', 'tate'),
-('surname', 'mack'),
-('surname', 'sherman'),
-('surname', 'hubbard'),
-('surname', 'hodges'),
-('surname', 'zhang'),
-('surname', 'guerra'),
-('surname', 'wolf'),
-('surname', 'valencia'),
-('surname', 'saunders'),
-('surname', 'franco'),
-('surname', 'rowe'),
-('surname', 'gallagher'),
-('surname', 'farmer'),
-('surname', 'hammond'),
-('surname', 'hampton'),
-('surname', 'townsend'),
-('surname', 'ingram'),
-('surname', 'wise'),
-('surname', 'gallegos'),
-('surname', 'clarke'),
-('surname', 'barton'),
-('surname', 'schroeder'),
-('surname', 'maxwell'),
-('surname', 'waters'),
-('surname', 'logan'),
-('surname', 'camacho'),
-('surname', 'strickland'),
-('surname', 'norman'),
-('surname', 'person'),
-('surname', 'colon'),
-('surname', 'parsons'),
-('surname', 'frank'),
-('surname', 'harrington'),
-('surname', 'glover'),
-('surname', 'osborne'),
-('surname', 'buchanan'),
-('surname', 'casey'),
-('surname', 'floyd'),
-('surname', 'patton'),
-('surname', 'ibarra'),
-('surname', 'ball'),
-('surname', 'tyler'),
-('surname', 'suarez'),
-('surname', 'bowers'),
-('surname', 'orozco'),
-('surname', 'salas'),
-('surname', 'cobb'),
-('surname', 'gibbs'),
-('surname', 'andrade'),
-('surname', 'bauer'),
-('surname', 'conner'),
-('surname', 'moody'),
-('surname', 'escobar'),
-('surname', 'mcguire'),
-('surname', 'lloyd'),
-('surname', 'mueller'),
-('surname', 'hartman'),
-('surname', 'french'),
-('surname', 'kramer'),
-('surname', 'mcbride'),
-('surname', 'pope'),
-('surname', 'lindsey'),
-('surname', 'velazquez'),
-('surname', 'norton'),
-('surname', 'mccormick'),
-('surname', 'sparks'),
-('surname', 'flynn'),
-('surname', 'yates'),
-('surname', 'hogan'),
-('surname', 'marsh'),
-('surname', 'macias'),
-('surname', 'villanueva'),
-('surname', 'zamora'),
-('surname', 'pratt'),
-('surname', 'stokes'),
-('surname', 'owen'),
-('surname', 'ballard'),
-('surname', 'lang'),
-('surname', 'brock'),
-('surname', 'villarreal'),
-('surname', 'charles'),
-('surname', 'drake'),
-('surname', 'barrera'),
-('surname', 'cain'),
-('surname', 'patrick'),
-('surname', 'pineda'),
-('surname', 'burnett'),
-('surname', 'mercado'),
-('surname', 'santana'),
-('surname', 'shepherd'),
-('surname', 'bautista'),
-('surname', 'ali'),
-('surname', 'shaffer'),
-('surname', 'lamb'),
-('surname', 'trevino'),
-('surname', 'mckenzie'),
-('surname', 'hess'),
-('surname', 'beil'),
-('surname', 'olsen'),
-('surname', 'cochran'),
-('surname', 'morton'),
-('surname', 'nash'),
-('surname', 'wilkins'),
-('surname', 'petersen'),
-('surname', 'briggs'),
-('surname', 'shah'),
-('surname', 'roth'),
-('surname', 'nicholson'),
-('surname', 'holloway'),
-('surname', 'lozano'),
-('surname', 'rangel'),
-('surname', 'flowers'),
-('surname', 'hoover'),
-('surname', 'short'),
-('surname', 'arias'),
-('surname', 'mora'),
-('surname', 'valenzuela'),
-('surname', 'bryan'),
-('surname', 'meyers'),
-('surname', 'weiss'),
-('surname', 'underwood'),
-('surname', 'bass'),
-('surname', 'greer'),
-('surname', 'summers'),
-('surname', 'houston'),
-('surname', 'carson'),
-('surname', 'morrow'),
-('surname', 'clayton'),
-('surname', 'whitaker'),
-('surname', 'decker'),
-('surname', 'yoder'),
-('surname', 'collier'),
-('surname', 'zuniga'),
-('surname', 'carey'),
-('surname', 'wilcox'),
-('surname', 'melendez'),
-('surname', 'poole'),
-('surname', 'roberson'),
-('surname', 'larsen'),
-('surname', 'conley'),
-('surname', 'davenport'),
-('surname', 'copeland'),
-('surname', 'massey'),
-('surname', 'lam'),
-('surname', 'huff'),
-('surname', 'rocha'),
-('surname', 'cameron'),
-('surname', 'jefferson'),
-('surname', 'hood'),
-('surname', 'monroe'),
-('surname', 'anthony'),
-('surname', 'pittman'),
-('surname', 'huynh'),
-('surname', 'randall'),
-('surname', 'singleton'),
-('surname', 'kirk'),
-('surname', 'combs'),
-('surname', 'mathis'),
-('surname', 'christian'),
-('surname', 'skinner'),
-('surname', 'bradford'),
-('surname', 'richard'),
-('surname', 'galvan'),
-('surname', 'wall'),
-('surname', 'boone'),
-('surname', 'kirby'),
-('surname', 'wilkinson'),
-('surname', 'bridges'),
-('surname', 'bruce'),
-('surname', 'atkinson'),
-('surname', 'velez'),
-('surname', 'meza'),
-('surname', 'roy'),
-('surname', 'vincent'),
-('surname', 'york'),
-('surname', 'hodge'),
-('surname', 'villa'),
-('surname', 'abbott'),
-('surname', 'allison'),
-('surname', 'tapia'),
-('surname', 'gates'),
-('surname', 'chase'),
-('surname', 'sosa'),
-('surname', 'sweeney'),
-('surname', 'farrell'),
-('surname', 'wyatt'),
-('surname', 'dalton'),
-('surname', 'horn'),
-('surname', 'barron'),
-('surname', 'phelps'),
-('surname', 'yu'),
-('surname', 'dickerson'),
-('surname', 'heath'),
-('surname', 'foley'),
-('surname', 'atkins'),
-('surname', 'mathews'),
-('surname', 'bonilla'),
-('surname', 'acevedo'),
-('surname', 'benitez'),
-('surname', 'zavala'),
-('surname', 'hensley'),
-('surname', 'glenn'),
-('surname', 'cisneros'),
-('surname', 'harrell'),
-('surname', 'shields'),
-('surname', 'rubio'),
-('surname', 'huffman'),
-('surname', 'choi'),
-('surname', 'boyer'),
-('surname', 'garrison'),
-('surname', 'arroyo'),
-('surname', 'bond'),
-('surname', 'kane'),
-('surname', 'hancock'),
-('surname', 'callahan'),
-('surname', 'dillon'),
-('surname', 'cline'),
-('surname', 'wiggins'),
-('surname', 'grimes'),
-('surname', 'arellano'),
-('surname', 'melton'),
-('surname', 'oneill'),
-('surname', 'savage'),
-('surname', 'ho'),
-('surname', 'beltran'),
-('surname', 'pitts'),
-('surname', 'parrish'),
-('surname', 'ponce'),
-('surname', 'rich'),
-('surname', 'booth'),
-('surname', 'koch'),
-('surname', 'golden'),
-('surname', 'ware'),
-('surname', 'brennan'),
-('surname', 'mcdowell'),
-('surname', 'marks'),
-('surname', 'cantu'),
-('surname', 'humphrey'),
-('surname', 'baxter'),
-('surname', 'sawyer'),
-('surname', 'clay'),
-('surname', 'tanner'),
-('surname', 'hutchinson'),
-('surname', 'kaur'),
-('surname', 'berg'),
-('surname', 'wiley'),
-('surname', 'gilmore'),
-('surname', 'russo'),
-('surname', 'villegas'),
-('surname', 'hobbs'),
-('surname', 'keith'),
-('surname', 'wilkerson'),
-('surname', 'ahmed'),
-('surname', 'beard'),
-('surname', 'mcclain'),
-('surname', 'montes'),
-('surname', 'mata'),
-('surname', 'rosario'),
-('surname', 'vang'),
-('surname', 'walter'),
-('surname', 'henson'),
-('surname', 'oneal'),
-('surname', 'mosley'),
-('surname', 'mcclure'),
-('surname', 'beasley'),
-('surname', 'stephenson'),
-('surname', 'snow'),
-('surname', 'huerta'),
-('surname', 'preston'),
-('surname', 'vance'),
-('surname', 'barry'),
-('surname', 'johns'),
-('surname', 'eaton'),
-('surname', 'blackwell'),
-('surname', 'dyer'),
-('surname', 'prince'),
-('surname', 'macdonald'),
-('surname', 'solomon'),
-('surname', 'guevara'),
-('surname', 'stafford'),
-('surname', 'english'),
-('surname', 'hurst'),
-('surname', 'woodard'),
-('surname', 'cortes'),
-('surname', 'shannon'),
-('surname', 'kemp'),
-('surname', 'nolan'),
-('surname', 'mccullough'),
-('surname', 'merritt'),
-('surname', 'murillo'),
-('surname', 'moon'),
-('surname', 'salgado'),
-('surname', 'strong'),
-('surname', 'kline'),
-('surname', 'cordova'),
-('surname', 'barajas'),
-('surname', 'roach'),
-('surname', 'rosas'),
-('surname', 'winters'),
-('surname', 'jacobson'),
-('surname', 'lester'),
-('surname', 'knox'),
-('surname', 'bullock'),
-('surname', 'kerr'),
-('surname', 'leach'),
-('surname', 'meadows'),
-('surname', 'orr'),
-('surname', 'davila'),
-('surname', 'whitehead'),
-('surname', 'pruitt'),
-('surname', 'kent'),
-('surname', 'conway'),
-('surname', 'mckee'),
-('surname', 'barr'),
-('surname', 'david'),
-('surname', 'dejesus'),
-('surname', 'marin'),
-('surname', 'berger'),
-('surname', 'mcintyre'),
-('surname', 'blankenship'),
-('surname', 'gaines'),
-('surname', 'palacios'),
-('surname', 'cuevas'),
-('surname', 'bartlett'),
-('surname', 'durham'),
-('surname', 'dorsey'),
-('surname', 'mccall'),
-('surname', 'odonnell'),
-('surname', 'stein'),
-('surname', 'browning'),
-('surname', 'stout'),
-('surname', 'lowery'),
-('surname', 'sloan'),
-('surname', 'mclean'),
-('surname', 'hendricks'),
-('surname', 'calhoun'),
-('surname', 'sexton'),
-('surname', 'chung'),
-('surname', 'gentry'),
-('surname', 'hull'),
-('surname', 'duarte'),
-('surname', 'ellison'),
-('surname', 'nielsen'),
-('surname', 'gillespie'),
-('surname', 'buck'),
-('surname', 'middleton'),
-('surname', 'sellers'),
-('surname', 'leblanc'),
-('surname', 'esparza'),
-('surname', 'hardin'),
-('surname', 'bradshaw'),
-('surname', 'mcintosh'),
-('surname', 'howe'),
-('surname', 'livingston'),
-('surname', 'frost'),
-('surname', 'glass'),
-('surname', 'morse'),
-('surname', 'knapp'),
-('surname', 'herman'),
-('surname', 'stark'),
-('surname', 'bravo'),
-('surname', 'noble'),
-('surname', 'spears'),
-('surname', 'weeks'),
-('surname', 'corona'),
-('surname', 'frederick'),
-('surname', 'buckley'),
-('surname', 'mcfarland'),
-('surname', 'hebert'),
-('surname', 'enriquez'),
-('surname', 'hickman'),
-('surname', 'quintero'),
-('surname', 'randolph'),
-('surname', 'schaefer'),
-('surname', 'walls'),
-('surname', 'trejo'),
-('surname', 'house'),
-('surname', 'reilly'),
-('surname', 'pennington'),
-('surname', 'michael'),
-('surname', 'conrad'),
-('surname', 'giles'),
-('surname', 'benjamin'),
-('surname', 'crosby'),
-('surname', 'fitzpatrick'),
-('surname', 'donovan'),
-('surname', 'mays'),
-('surname', 'mahoney'),
-('surname', 'valentine'),
-('surname', 'raymond'),
-('surname', 'medrano'),
-('surname', 'hahn'),
-('surname', 'mcmillan'),
-('surname', 'small'),
-('surname', 'bentley'),
-('surname', 'felix'),
-('surname', 'peck'),
-('surname', 'lucero'),
-('surname', 'boyle'),
-('surname', 'hanna'),
-('surname', 'pace'),
-('surname', 'rush'),
-('surname', 'hurley'),
-('surname', 'harding'),
-('surname', 'mcconnell'),
-('surname', 'bernal'),
-('surname', 'nava'),
-('surname', 'ayers'),
-('surname', 'everett'),
-('surname', 'ventura'),
-('surname', 'avery'),
-('surname', 'pugh'),
-('surname', 'mayer'),
-('surname', 'bender'),
-('surname', 'shepard'),
-('surname', 'mcmahon'),
-('surname', 'landry'),
-('surname', 'case'),
-('surname', 'sampson'),
-('surname', 'moses'),
-('surname', 'magana'),
-('surname', 'blackburn'),
-('surname', 'dunlap'),
-('surname', 'gould'),
-('surname', 'duffy'),
-('surname', 'vaughan'),
-('surname', 'herring'),
-('surname', 'mckay'),
-('surname', 'espinosa'),
-('surname', 'rivers'),
-('surname', 'farley'),
-('surname', 'bernard'),
-('surname', 'ashley'),
-('surname', 'friedman'),
-('surname', 'potts'),
-('surname', 'truong'),
-('surname', 'costa'),
-('surname', 'correa'),
-('surname', 'blevins'),
-('surname', 'nixon'),
-('surname', 'clements'),
-('surname', 'fry'),
-('surname', 'delarosa'),
-('surname', 'best'),
-('surname', 'benton'),
-('surname', 'lugo'),
-('surname', 'portillo'),
-('surname', 'dougherty'),
-('surname', 'crane'),
-('surname', 'haley'),
-('surname', 'phan'),
-('surname', 'villalobos'),
-('surname', 'blanchard'),
-('surname', 'horne'),
-('surname', 'finley'),
-('surname', 'quintana'),
-('surname', 'lynn'),
-('surname', 'esquivel'),
-('surname', 'bean'),
-('surname', 'dodson'),
-('surname', 'mullen'),
-('surname', 'xiong'),
-('surname', 'hayden'),
-('surname', 'cano'),
-('surname', 'levy'),
-('surname', 'huber'),
-('surname', 'richmond'),
-('surname', 'moyer'),
-('surname', 'lim'),
-('surname', 'frye'),
-('surname', 'sheppard'),
-('surname', 'mccarty'),
-('surname', 'avalos'),
-('surname', 'booker'),
-('surname', 'waller'),
-('surname', 'parra'),
-('surname', 'woodward'),
-('surname', 'jaramillo'),
-('surname', 'krueger'),
-('surname', 'rasmussen'),
-('surname', 'brandt'),
-('surname', 'peralta'),
-('surname', 'donaldson'),
-('surname', 'stuart'),
-('surname', 'faulkner'),
-('surname', 'maynard'),
-('surname', 'galindo'),
-('surname', 'coffey'),
-('surname', 'estes'),
-('surname', 'sanford'),
-('surname', 'burch'),
-('surname', 'maddox'),
-('surname', 'vo'),
-('surname', 'oconnell'),
-('surname', 'vu'),
-('surname', 'andersen'),
-('surname', 'spence'),
-('surname', 'mcpherson'),
-('surname', 'church'),
-('surname', 'schmitt'),
-('surname', 'stanton'),
-('surname', 'leal'),
-('surname', 'cherry'),
-('surname', 'compton'),
-('surname', 'dudley'),
-('surname', 'sierra'),
-('surname', 'pollard'),
-('surname', 'alfaro'),
-('surname', 'hester'),
-('surname', 'proctor'),
-('surname', 'lu'),
-('surname', 'hinton'),
-('surname', 'novak'),
-('surname', 'good'),
-('surname', 'madden'),
-('surname', 'mccann'),
-('surname', 'terrell'),
-('surname', 'jarvis'),
-('surname', 'dickson'),
-('surname', 'reyna'),
-('surname', 'cantrell'),
-('surname', 'mayo'),
-('surname', 'branch'),
-('surname', 'hendrix'),
-('surname', 'rollins'),
-('surname', 'rowland'),
-('surname', 'whitney'),
-('surname', 'duke'),
-('surname', 'odom'),
-('surname', 'daugherty'),
-('surname', 'travis'),
-('surname', 'tang'),
-
-('boys', 'david'),
-('boys', 'christopher'),
-('boys', 'andrew'),
-('boys', 'john'),
-('boys', 'james'),
-('boys', 'craig'),
-('boys', 'steven'),
-('boys', 'paul'),
-('boys', 'michael'),
-('boys', 'scott'),
-('boys', 'robert'),
-('boys', 'mark'),
-('boys', 'william'),
-('boys', 'kevin'),
-('boys', 'stuart'),
-('boys', 'stephen'),
-('boys', 'alan'),
-('boys', 'gary'),
-('boys', 'ross'),
-('boys', 'colin'),
-('boys', 'richard'),
-('boys', 'martin'),
-('boys', 'thomas'),
-('boys', 'neil'),
-('boys', 'ryan'),
-('boys', 'graeme'),
-('boys', 'brian'),
-('boys', 'peter'),
-('boys', 'gordon'),
-('boys', 'darren'),
-('boys', 'ian'),
-('boys', 'jamie'),
-('boys', 'alexander'),
-('boys', 'iain'),
-('boys', 'graham'),
-('boys', 'barry'),
-('boys', 'allan'),
-('boys', 'jonathan'),
-('boys', 'daniel'),
-('boys', 'gavin'),
-('boys', 'derek'),
-('boys', 'kenneth'),
-('boys', 'sean'),
-('boys', 'matthew'),
-('boys', 'lee'),
-('boys', 'george'),
-('boys', 'nicholas'),
-('boys', 'anthony'),
-('boys', 'stewart'),
-('boys', 'fraser'),
-('boys', 'douglas'),
-('boys', 'keith'),
-('boys', 'joseph'),
-('boys', 'grant'),
-('boys', 'marc'),
-('boys', 'adam'),
-('boys', 'simon'),
-('boys', 'alistair'),
-('boys', 'garry'),
-('boys', 'alastair'),
-('boys', 'bryan'),
-('boys', 'liam'),
-('boys', 'jason'),
-('boys', 'duncan'),
-('boys', 'euan'),
-('boys', 'charles'),
-('boys', 'greg'),
-('boys', 'edward'),
-('boys', 'philip'),
-('boys', 'russell'),
-('boys', 'shaun'),
-('boys', 'gareth'),
-('boys', 'ewan'),
-('boys', 'calum'),
-('boys', 'callum'),
-('boys', 'donald'),
-('boys', 'cameron'),
-('boys', 'raymond'),
-('boys', 'patrick'),
-('boys', 'alasdair'),
-('boys', 'dean'),
-('boys', 'greig'),
-('boys', 'lewis'),
-('boys', 'benjamin'),
-('boys', 'malcolm'),
-('boys', 'niall'),
-('boys', 'gerard'),
-('boys', 'martyn'),
-('boys', 'jordan'),
-('boys', 'aaron'),
-('boys', 'francis'),
-('boys', 'hugh'),
-('boys', 'gregor'),
-('boys', 'mohammed'),
-('boys', 'robin'),
-('boys', 'samuel'),
-('boys', 'angus'),
-('boys', 'bruce'),
-('boys', 'kris'),
-('boys', 'ronald'),
-
-('girls', 'laura'),
-('girls', 'claire'),
-('girls', 'nicola'),
-('girls', 'jennifer'),
-('girls', 'louise'),
-('girls', 'sarah'),
-('girls', 'lisa'),
-('girls', 'michelle'),
-('girls', 'emma'),
-('girls', 'fiona'),
-('girls', 'karen'),
-('girls', 'gillian'),
-('girls', 'gemma'),
-('girls', 'kirsty'),
-('girls', 'lynsey'),
-('girls', 'victoria'),
-('girls', 'donna'),
-('girls', 'kelly'),
-('girls', 'susan'),
-('girls', 'julie'),
-('girls', 'angela'),
-('girls', 'pamela'),
-('girls', 'leanne'),
-('girls', 'amanda'),
-('girls', 'joanne'),
-('girls', 'alison'),
-('girls', 'caroline'),
-('girls', 'heather'),
-('girls', 'jacqueline'),
-('girls', 'suzanne'),
-('girls', 'stephanie'),
-('girls', 'catherine'),
-('girls', 'elaine'),
-('girls', 'natalie'),
-('girls', 'lynne'),
-('girls', 'stacey'),
-('girls', 'lindsay'),
-('girls', 'lauren'),
-('girls', 'cheryl'),
-('girls', 'elizabeth'),
-('girls', 'deborah'),
-('girls', 'lesley'),
-('girls', 'kerry'),
-('girls', 'lorna'),
-('girls', 'charlene'),
-('girls', 'sharon'),
-('girls', 'lorraine'),
-('girls', 'lynn'),
-('girls', 'amy'),
-('girls', 'tracy'),
-('girls', 'clare'),
-('girls', 'rebecca'),
-('girls', 'debbie'),
-('girls', 'samantha'),
-('girls', 'kimberley'),
-('girls', 'rachel'),
-('girls', 'yvonne'),
-('girls', 'helen'),
-('girls', 'margaret'),
-('girls', 'carol'),
-('girls', 'christine'),
-('girls', 'diane'),
-('girls', 'linda'),
-('girls', 'ashley'),
-('girls', 'dawn'),
-('girls', 'paula'),
-('girls', 'marie'),
-('girls', 'pauline'),
-('girls', 'danielle'),
-('girls', 'anna'),
-('girls', 'hazel'),
-('girls', 'jill'),
-('girls', 'shona'),
-('girls', 'catriona'),
-('girls', 'jane'),
-('girls', 'kim'),
-('girls', 'mhairi'),
-('girls', 'anne'),
-('girls', 'tracey'),
-('girls', 'hayley'),
-('girls', 'lyndsey'),
-('girls', 'sara'),
-('girls', 'melissa'),
-('girls', 'kathryn'),
-('girls', 'lyndsay'),
-('girls', 'lucy'),
-('girls', 'ruth'),
-('girls', 'mary'),
-('girls', 'andrea'),
-('girls', 'lindsey'),
-('girls', 'denise'),
-('girls', 'joanna'),
-('girls', 'alana'),
-('girls', 'adele'),
-('girls', 'kathleen'),
-('girls', 'melanie'),
-('girls', 'christina'),
-('girls', 'hannah'),
-('girls', 'kirsten'),
-('girls', 'siobhan'),
-
-('street', '01ST ST'),
-('street', '02ND AVE'),
-('street', '02ND ST'),
-('street', '03RD AVE'),
-('street', '03RD ST'),
-('street', '04TH AVE'),
-('street', '04TH ST'),
-('street', '05TH AVE'),
-('street', '05TH ST'),
-('street', '06TH AVE'),
-('street', '06TH ST'),
-('street', '07TH AVE'),
-('street', '07TH ST'),
-('street', '08TH AVE'),
-('street', '08TH ST'),
-('street', '09TH AVE'),
-('street', '09TH ST'),
-('street', '10TH AVE'),
-('street', '10TH ST'),
-('street', '11TH AVE'),
-('street', '11TH ST'),
-('street', '12TH AVE'),
-('street', '12TH ST'),
-('street', '13TH ST'),
-('street', '14TH AVE'),
-('street', '14TH ST'),
-('street', '15TH AVE'),
-('street', '15TH ST'),
-('street', '16TH AVE'),
-('street', '16TH ST'),
-('street', '17TH AVE'),
-('street', '17TH ST'),
-('street', '18TH AVE'),
-('street', '18TH ST'),
-('street', '19TH AVE'),
-('street', '19TH ST'),
-('street', '20TH AVE'),
-('street', '20TH ST'),
-('street', '21ST AVE'),
-('street', '21ST ST'),
-('street', '22ND AVE'),
-('street', '22ND ST'),
-('street', '23RD AVE'),
-('street', '23RD ST'),
-('street', '24TH AVE'),
-('street', '24TH ST'),
-('street', '25TH AVE'),
-('street', '25TH ST'),
-('street', '26TH AVE'),
-('street', '26TH ST'),
-('street', '27TH AVE'),
-('street', '27TH ST'),
-('street', '28TH AVE'),
-('street', '28TH ST'),
-('street', '29TH AVE'),
-('street', '29TH ST'),
-('street', '30TH AVE'),
-('street', '30TH ST'),
-('street', '31ST AVE'),
-('street', '31ST ST'),
-('street', '32ND AVE'),
-('street', '33RD AVE'),
-('street', '34TH AVE'),
-('street', '35TH AVE'),
-('street', '36TH AVE'),
-('street', '37TH AVE'),
-('street', '38TH AVE'),
-('street', '39TH AVE'),
-('street', '40TH AVE'),
-('street', '41ST AVE'),
-('street', '42ND AVE'),
-('street', '43RD AVE'),
-('street', '44TH AVE'),
-('street', '45TH AVE'),
-('street', '46TH AVE'),
-('street', '47TH AVE'),
-('street', '48TH AVE'),
-('street', 'A ST'),
-('street', 'ABBEY ST'),
-('street', 'ACACIA AVE'),
-('street', 'ACACIA ST'),
-('street', 'ACADIA ST'),
-('street', 'ACEVEDO AVE'),
-('street', 'ACME ALY'),
-('street', 'ACORN ALY'),
-('street', 'ACTON ST'),
-('street', 'ADA CT'),
-('street', 'ADAIR ST'),
-('street', 'ADAM ST'),
-('street', 'ADDISON ST'),
-('street', 'ADELE CT'),
-('street', 'ADMIRAL AVE'),
-('street', 'ADOLPH SUTRO CT'),
-('street', 'AERIAL WAY'),
-('street', 'AGNON AVE'),
-('street', 'AGUA WAY'),
-('street', 'AHERN WAY'),
-('street', 'ALABAMA ST'),
-('street', 'ALADDIN TER'),
-('street', 'ALAMEDA ST'),
-('street', 'ALANA WAY'),
-('street', 'ALBATROSS CT'),
-('street', 'ALBERTA ST'),
-('street', 'ALBION ST'),
-('street', 'ALDER ST'),
-('street', 'ALEMANY BLVD'),
-('street', 'ALEMANY BLVD OFF RAMP'),
-('street', 'ALERT ALY'),
-('street', 'ALHAMBRA ST'),
-('street', 'ALICE B TOKLAS PL'),
-('street', 'ALLEN ST'),
-('street', 'ALLISON ST'),
-('street', 'ALLSTON WAY'),
-('street', 'ALMA ST'),
-('street', 'ALMADEN CT'),
-('street', 'ALOHA AVE'),
-('street', 'ALPHA ST'),
-('street', 'ALPINE TER'),
-('street', 'ALTA ST'),
-('street', 'ALTA MAR WAY'),
-('street', 'ALTA VISTA TER'),
-('street', 'ALTON AVE'),
-('street', 'ALVARADO ST'),
-('street', 'ALVISO ST'),
-('street', 'ALVORD ST'),
-('street', 'AMADOR ST'),
-('street', 'AMATISTA LN'),
-('street', 'AMATURY LOOP'),
-('street', 'AMAZON AVE'),
-('street', 'AMBER DR'),
-('street', 'AMBROSE BIERCE ST'),
-('street', 'AMES ST'),
-('street', 'AMETHYST WAY'),
-('street', 'AMHERST ST'),
-('street', 'AMITY ALY'),
-('street', 'ANDERSON ST'),
-('street', 'ANDOVER ST'),
-('street', 'ANDREW ST'),
-('street', 'ANGELOS ALY'),
-('street', 'ANGLO ALY'),
-('street', 'ANKENY ST'),
-('street', 'ANNAPOLIS TER'),
-('street', 'ANNIE ST'),
-('street', 'ANSON PL'),
-('street', 'ANTHONY ST'),
-('street', 'ANTONIO ST'),
-('street', 'ANZA AVE'),
-('street', 'ANZA ST'),
-('street', 'ANZAVISTA AVE'),
-('street', 'APOLLO ST'),
-('street', 'APPAREL WAY'),
-('street', 'APPLETON AVE'),
-('street', 'APPLETON ST'),
-('street', 'APTOS AVE'),
-('street', 'AQUAVISTA WAY'),
-('street', 'ARAGO ST'),
-('street', 'ARBALLO DR'),
-('street', 'ARBOL LN'),
-('street', 'ARBOR ST'),
-('street', 'ARCH ST'),
-('street', 'ARCO WAY'),
-('street', 'ARDATH CT'),
-('street', 'ARDENWOOD WAY'),
-('street', 'ARELIOUS WALKER DR'),
-('street', 'ARELLANO AVE'),
-('street', 'ARGENT ALY'),
-('street', 'ARGONAUT AVE'),
-('street', 'ARGUELLO BLVD'),
-('street', 'ARKANSAS ST'),
-('street', 'ARLETA AVE'),
-('street', 'ARLINGTON ST'),
-('street', 'ARMISTEAD RD'),
-('street', 'ARMORY DR'),
-('street', 'ARMSTRONG AVE'),
-('street', 'ARNOLD AVE'),
-('street', 'ARROYO WAY'),
-('street', 'ARTHUR AVE'),
-('street', 'ASH ST'),
-('street', 'ASHBURTON PL'),
-('street', 'ASHBURY ST'),
-('street', 'ASHBURY TER'),
-('street', 'ASHTON AVE'),
-('street', 'ASHWOOD LN'),
-('street', 'ASPEN CT'),
-('street', 'ATALAYA TER'),
-('street', 'ATHENS ST'),
-('street', 'ATOLL CIR'),
-('street', 'ATTRIDGE ALY'),
-('street', 'AUBURN ST'),
-('street', 'AUGUST ALY'),
-('street', 'AUGUSTA ST'),
-('street', 'AUSTIN ST'),
-('street', 'AUTO DR'),
-('street', 'AUTOMOBILE DR'),
-('street', 'AVALON AVE'),
-('street', 'AVENUE B'),
-('street', 'AVENUE C'),
-('street', 'AVENUE D'),
-('street', 'AVENUE E'),
-('street', 'AVENUE F'),
-('street', 'AVENUE H'),
-('street', 'AVENUE I'),
-('street', 'AVENUE M'),
-('street', 'AVENUE N'),
-('street', 'AVENUE OF THE PALMS'),
-('street', 'AVERY ST'),
-('street', 'AVILA ST'),
-('street', 'AVOCA ALY'),
-('street', 'AVOCET WAY'),
-('street', 'AVON WAY'),
-('street', 'AZTEC ST'),
-('street', 'BACHE ST'),
-('street', 'BACON ST'),
-('street', 'BADEN ST'),
-('street', 'BADGER ST'),
-('street', 'BAKER CT'),
-('street', 'BAKER ST'),
-('street', 'BALANCE ST'),
-('street', 'BALBOA ST'),
-('street', 'BALCETA AVE'),
-('street', 'BALDWIN CT'),
-('street', 'BALHI CT'),
-('street', 'BALMY ST'),
-('street', 'BALTIMORE WAY'),
-('street', 'BANBURY DR'),
-('street', 'BANCROFT AVE'),
-('street', 'BANK ST'),
-('street', 'BANKS ST'),
-('street', 'BANNAN PL'),
-('street', 'BANNEKER WAY'),
-('street', 'BANNOCK ST'),
-('street', 'BARCELONA AVE'),
-('street', 'BARNARD AVE'),
-('street', 'BARNEVELD AVE'),
-('street', 'BARRY CT'),
-('street', 'BARTLETT ST'),
-('street', 'BARTOL ST'),
-('street', 'BASS CT'),
-('street', 'BATTERY ST'),
-('street', 'BATTERY BLANEY RD'),
-('street', 'BATTERY CAULFIELD RD'),
-('street', 'BATTERY CHAMBERLIN RD'),
-('street', 'BATTERY CRANSTON RD'),
-('street', 'BATTERY CROSBY RD'),
-('street', 'BATTERY DYNAMITE RD'),
-('street', 'BATTERY EAST RD'),
-('street', 'BATTERY SAFFORD RD'),
-('street', 'BATTERY WAGNER RD'),
-('street', 'BAXTER ALY'),
-('street', 'BAY ST'),
-('street', 'BAY SHORE BLVD'),
-('street', 'BAY SHORE BLVD OFF RAMP'),
-('street', 'BAY SHORE BLVD ON RAMP'),
-('street', 'BAY VIEW ST'),
-('street', 'BAYSIDE DR'),
-('street', 'BAYSIDE VILLAGE PL'),
-('street', 'BAYVIEW CIR'),
-('street', 'BAYVIEW PARK RD'),
-('street', 'BAYWOOD CT'),
-('street', 'BEACH ST'),
-('street', 'BEACHMONT DR'),
-('street', 'BEACON ST'),
-('street', 'BEALE ST'),
-('street', 'BEATRICE LN'),
-('street', 'BEAUMONT AVE'),
-('street', 'BEAVER ST'),
-('street', 'BECKETT ST'),
-('street', 'BEDFORD PL'),
-('street', 'BEEMAN LN'),
-('street', 'BEHR AVE'),
-('street', 'BEIDEMAN ST'),
-('street', 'BELCHER ST'),
-('street', 'BELDEN ST'),
-('street', 'BELGRAVE AVE'),
-('street', 'BELL CT'),
-('street', 'BELLA VISTA WAY'),
-('street', 'BELLAIR PL'),
-('street', 'BELLE AVE'),
-('street', 'BELLES ST'),
-('street', 'BELLEVUE AVE'),
-('street', 'BELMONT AVE'),
-('street', 'BELVEDERE ST'),
-('street', 'BEMIS ST'),
-('street', 'BENGAL ALY'),
-('street', 'BENNINGTON ST'),
-('street', 'BENTON AVE'),
-('street', 'BEPLER ST'),
-('street', 'BERCUT ACCESS RD'),
-('street', 'BERGEN ALY'),
-('street', 'BERKELEY WAY'),
-('street', 'BERKSHIRE WAY'),
-('street', 'BERNAL HEIGHTS BLVD'),
-('street', 'BERNARD ST'),
-('street', 'BERNICE ST'),
-('street', 'BERNICE RODGERS WAY'),
-('street', 'BERRY ST'),
-('street', 'BERRY EXTENSION ST'),
-('street', 'BERTHA LN'),
-('street', 'BERTIE MINOR LN'),
-('street', 'BERTITA ST'),
-('street', 'BERWICK PL'),
-('street', 'BESSIE ST'),
-('street', 'BEULAH ST'),
-('street', 'BEVERLY ST'),
-('street', 'BIGELOW CT'),
-('street', 'BIGLER AVE'),
-('street', 'BIRCH ST'),
-('street', 'BIRCHWOOD CT'),
-('street', 'BIRD ST'),
-('street', 'BIRMINGHAM RD'),
-('street', 'BISHOP ST'),
-('street', 'BITTING AVE'),
-('street', 'BLACK PL'),
-('street', 'BLACKSTONE CT'),
-('street', 'BLAIR TER'),
-('street', 'BLAIRWOOD LN'),
-('street', 'BLAKE ST'),
-('street', 'BLANCHE ST'),
-('street', 'BLANDY ST'),
-('street', 'BLANKEN AVE'),
-('street', 'BLATCHFORD LN'),
-('street', 'BLISS CT'),
-('street', 'BLISS RD'),
-('street', 'BLUXOME ST'),
-('street', 'BLYTHDALE AVE'),
-('street', 'BOALT ST'),
-('street', 'BOARDMAN PL'),
-('street', 'BOB KAUFMAN ALY'),
-('street', 'BOCANA ST'),
-('street', 'BONIFACIO ST'),
-('street', 'BONITA ST'),
-('street', 'BONNIE BRAE LN'),
-('street', 'BONVIEW ST'),
-('street', 'BORICA ST'),
-('street', 'BOSWORTH ST'),
-('street', 'BOUTWELL ST'),
-('street', 'BOWDOIN ST'),
-('street', 'BOWLEY CT'),
-('street', 'BOWLEY ST'),
-('street', 'BOWLING GREEN DR'),
-('street', 'BOWMAN CT'),
-('street', 'BOYD ST'),
-('street', 'BOYLSTON ST'),
-('street', 'BOYNTON CT'),
-('street', 'BRADFORD ST'),
-('street', 'BRADY ST'),
-('street', 'BRANNAN ST'),
-('street', 'BRANT ALY'),
-('street', 'BRAZIL AVE'),
-('street', 'BREEN PL'),
-('street', 'BRENTWOOD AVE'),
-('street', 'BRET HARTE TER'),
-('street', 'BREWSTER ST'),
-('street', 'BRICE TER'),
-('street', 'BRIDGEVIEW DR'),
-('street', 'BRIDGEVIEW WAY'),
-('street', 'BRIGHT ST'),
-('street', 'BRIGHTON AVE'),
-('street', 'BRITTON ST'),
-('street', 'BROAD ST'),
-('street', 'BROADMOOR DR'),
-('street', 'BROADWAY'),
-('street', 'BRODERICK ST'),
-('street', 'BROMLEY PL'),
-('street', 'BROMPTON AVE'),
-('street', 'BRONTE ST'),
-('street', 'BROOK ST'),
-('street', 'BROOKDALE AVE'),
-('street', 'BROOKHAVEN LN'),
-('street', 'BROOKLYN PL'),
-('street', 'BROOKS ST'),
-('street', 'BROSNAN ST'),
-('street', 'BROTHERHOOD WAY'),
-('street', 'BROWN ST'),
-('street', 'BRUCE AVE'),
-('street', 'BRUMISS TER'),
-('street', 'BRUNSWICK ST'),
-('street', 'BRUSH LN'),
-('street', 'BRUSH PL'),
-('street', 'BRUSSELS ST'),
-('street', 'BRYANT ST'),
-('street', 'BUCARELI DR'),
-('street', 'BUCHANAN ST'),
-('street', 'BUCKINGHAM WAY'),
-('street', 'BUENA VISTA TER'),
-('street', 'BURGOYNE ST'),
-('street', 'BURKE AVE'),
-('street', 'BURLWOOD DR'),
-('street', 'BURNETT AVE'),
-('street', 'BURNS PL'),
-('street', 'BURNSIDE AVE'),
-('street', 'BURR AVE'),
-('street', 'BURRITT ST'),
-('street', 'BURROWS DR'),
-('street', 'BURROWS ST'),
-('street', 'BUSH ST'),
-('street', 'BUTTE PL'),
-('street', 'BYRON CT'),
-('street', 'BYXBEE ST'),
-('street', 'C ST'),
-('street', 'CABRILLO ST'),
-('street', 'CADELL PL'),
-('street', 'CAINE AVE'),
-('street', 'CAIRE TER'),
-('street', 'CALEDONIA ST'),
-('street', 'CALGARY ST'),
-('street', 'CALHOUN TER'),
-('street', 'CALIFORNIA AVE'),
-('street', 'CALIFORNIA ST'),
-('street', 'CALVERT DR'),
-('street', 'CAMBON DR'),
-('street', 'CAMBRIDGE ST'),
-('street', 'CAMELLIA AVE'),
-('street', 'CAMEO WAY'),
-('street', 'CAMERON WAY'),
-('street', 'CAMP ST'),
-('street', 'CAMPBELL AVE'),
-('street', 'CAMPTON PL'),
-('street', 'CAMPUS LN'),
-('street', 'CAMPUS WAY'),
-('street', 'CANBY LN'),
-('street', 'CANBY ST'),
-('street', 'CANDLESTICK COVE WAY'),
-('street', 'CANDLESTICK POINT SRA'),
-('street', 'CANYON DR'),
-('street', 'CAPISTRANO AVE'),
-('street', 'CAPITOL AVE'),
-('street', 'CAPP ST'),
-('street', 'CAPRA WAY'),
-('street', 'CARD ALY'),
-('street', 'CARDENAS AVE'),
-('street', 'CARGO WAY'),
-('street', 'CARL ST'),
-('street', 'CARMEL ST'),
-('street', 'CARMELITA ST'),
-('street', 'CARNELIAN WAY'),
-('street', 'CAROLINA ST'),
-('street', 'CARPENTER CT'),
-('street', 'CARR ST'),
-('street', 'CARRIE ST'),
-('street', 'CARRIZAL ST'),
-('street', 'CARROLL AVE'),
-('street', 'CARSON ST'),
-('street', 'CARTER ST'),
-('street', 'CARVER ST'),
-('street', 'CASA WAY'),
-('street', 'CASCADE WALK'),
-('street', 'CASE ST'),
-('street', 'CASELLI AVE'),
-('street', 'CASHMERE ST'),
-('street', 'CASITAS AVE'),
-('street', 'CASSANDRA CT'),
-('street', 'CASTELO AVE'),
-('street', 'CASTENADA AVE'),
-('street', 'CASTILLO ST'),
-('street', 'CASTLE ST'),
-('street', 'CASTLE MANOR AVE'),
-('street', 'CASTRO ST'),
-('street', 'CATALINA ST'),
-('street', 'CATHERINE CT'),
-('street', 'CAYUGA AVE'),
-('street', 'CCSF PARKING LOT'),
-('street', 'CECILIA AVE'),
-('street', 'CEDAR ST'),
-('street', 'CEDRO AVE'),
-('street', 'CENTRAL AVE'),
-('street', 'CENTRAL MAGAZINE RD'),
-('street', 'CENTURY PL'),
-('street', 'CERES ST'),
-('street', 'CERRITOS AVE'),
-('street', 'CERVANTES BLVD'),
-('street', 'CESAR CHAVEZ ST'),
-('street', 'CESAR CHAVEZ ON RAMP'),
-('street', 'CHABOT TER'),
-('street', 'CHAIN OF LAKES DR'),
-('street', 'CHANCERY LN'),
-('street', 'CHANNEL'),
-('street', 'CHANNEL ST'),
-('street', 'CHAPMAN ST'),
-('street', 'CHARLES ST'),
-('street', 'CHARLES J BRENHAM PL'),
-('street', 'CHARLTON CT'),
-('street', 'CHARTER OAK AVE'),
-('street', 'CHASE CT'),
-('street', 'CHATHAM PL'),
-('street', 'CHATTANOOGA ST'),
-('street', 'CHAVES AVE'),
-('street', 'CHENERY ST'),
-('street', 'CHERRY ST'),
-('street', 'CHESLEY ST'),
-('street', 'CHESTER AVE'),
-('street', 'CHESTNUT ST'),
-('street', 'CHICAGO WAY'),
-('street', 'CHILD ST'),
-('street', 'CHILTON AVE'),
-('street', 'CHINA BASIN ST'),
-('street', 'CHINOOK CT'),
-('street', 'CHRISTMAS TREE POINT RD'),
-('street', 'CHRISTOPHER DR'),
-('street', 'CHULA LN'),
-('street', 'CHUMASERO DR'),
-('street', 'CHURCH ST'),
-('street', 'CHURCH ACCESS RD'),
-('street', 'CHURCH PARKING LOT'),
-('street', 'CIELITO DR'),
-('street', 'CIRCULAR AVE'),
-('street', 'CITYVIEW WAY'),
-('street', 'CLAIRVIEW CT'),
-('street', 'CLARA ST'),
-('street', 'CLAREMONT BLVD'),
-('street', 'CLARENCE PL'),
-('street', 'CLARENDON AVE'),
-('street', 'CLARION ALY'),
-('street', 'CLARKE LN'),
-('street', 'CLARKE ST'),
-('street', 'CLARKSON ST'),
-('street', 'CLAUDE LN'),
-('street', 'CLAY ST'),
-('street', 'CLAYTON ST'),
-('street', 'CLEARFIELD DR'),
-('street', 'CLEARVIEW CT'),
-('street', 'CLEARY CT'),
-('street', 'CLEMENT ST'),
-('street', 'CLEMENTINA ST'),
-('street', 'CLEO RAND AVE'),
-('street', 'CLEVELAND ST'),
-('street', 'CLIFFORD TER'),
-('street', 'CLINTON PARK'),
-('street', 'CLIPPER ST'),
-('street', 'CLIPPER TER'),
-('street', 'CLIPPER COVE WAY'),
-('street', 'CLOUD CIR'),
-('street', 'CLOVER LN'),
-('street', 'CLOVER ST'),
-('street', 'CLYDE ST'),
-('street', 'COCHRANE ST'),
-('street', 'CODMAN PL'),
-('street', 'COHEN PL'),
-('street', 'COLBY ST'),
-('street', 'COLE ST'),
-('street', 'COLEMAN ST'),
-('street', 'COLERIDGE ST'),
-('street', 'COLIN PL'),
-('street', 'COLIN P KELLY JR ST'),
-('street', 'COLLEEN WAY'),
-('street', 'COLLEGE AVE'),
-('street', 'COLLEGE TER'),
-('street', 'COLLINGWOOD ST'),
-('street', 'COLLINS ST'),
-('street', 'COLON AVE'),
-('street', 'COLONIAL WAY'),
-('street', 'COLTON ST'),
-('street', 'COLUMBIA SQUARE ST'),
-('street', 'COLUMBUS AVE'),
-('street', 'COLUSA PL'),
-('street', 'COMERFORD ST'),
-('street', 'COMMER CT'),
-('street', 'COMMERCIAL ST'),
-('street', 'COMMONWEALTH AVE'),
-('street', 'COMPTON RD'),
-('street', 'CONCORD ST'),
-('street', 'CONCOURSE DR'),
-('street', 'CONGDON ST'),
-('street', 'CONGO ST'),
-('street', 'CONKLING ST'),
-('street', 'CONNECTICUT ST'),
-('street', 'CONRAD ST'),
-('street', 'CONSERVATORY ACCESS RD'),
-('street', 'CONSTANSO WAY'),
-('street', 'CONTINUUM WAY'),
-('street', 'CONVERSE ST'),
-('street', 'COOK ST'),
-('street', 'COOPER ALY'),
-('street', 'COPPER ALY'),
-('street', 'CORA ST'),
-('street', 'CORAL CT'),
-('street', 'CORAL RD'),
-('street', 'CORALINO LN'),
-('street', 'CORBETT AVE'),
-('street', 'CORBIN PL'),
-('street', 'CORDELIA ST'),
-('street', 'CORDOVA ST'),
-('street', 'CORNWALL ST'),
-('street', 'CORONA ST'),
-('street', 'CORONADO ST'),
-('street', 'CORTES AVE'),
-('street', 'CORTLAND AVE'),
-('street', 'CORWIN ST'),
-('street', 'COSGROVE ST'),
-('street', 'COSMO PL'),
-('street', 'COSO AVE'),
-('street', 'COSTA ST'),
-('street', 'COTTAGE ROW'),
-('street', 'COTTER ST'),
-('street', 'COUNTRY CLUB DR'),
-('street', 'COVENTRY CT'),
-('street', 'COVENTRY LN'),
-('street', 'COWELL PL'),
-('street', 'COWLES ST'),
-('street', 'CRAGMONT AVE'),
-('street', 'CRAGS CT'),
-('street', 'CRAIG CT'),
-('street', 'CRANE ST'),
-('street', 'CRANLEIGH DR'),
-('street', 'CRAUT ST'),
-('street', 'CRESCENT AVE'),
-('street', 'CRESCENT CT'),
-('street', 'CRESCENT WAY'),
-('street', 'CRESCIO CT'),
-('street', 'CRESPI DR'),
-('street', 'CRESTA VISTA DR'),
-('street', 'CRESTLAKE DR'),
-('street', 'CRESTLINE DR'),
-('street', 'CRESTMONT DR'),
-('street', 'CRESTWELL WALK'),
-('street', 'CRISP RD'),
-('street', 'CRISSY FIELD AVE'),
-('street', 'CROAKER CT'),
-('street', 'CROOK ST'),
-('street', 'CROSS ST'),
-('street', 'CROSSOVER DR'),
-('street', 'CROWN CT'),
-('street', 'CROWN TER'),
-('street', 'CRYSTAL ST'),
-('street', 'CUBA ALY'),
-('street', 'CUESTA CT'),
-('street', 'CULEBRA TER'),
-('street', 'CUMBERLAND ST'),
-('street', 'CUNNINGHAM PL'),
-('street', 'CURTIS ST'),
-('street', 'CUSHMAN ST'),
-('street', 'CUSTER AVE'),
-('street', 'CUSTOM HOUSE PL'),
-('street', 'CUTLER AVE'),
-('street', 'CUVIER ST'),
-('street', 'CYPRESS ST'),
-('street', 'CYRIL MAGNIN ST'),
-('street', 'CYRUS PL'),
-('street', 'D ST'),
-('street', 'DAGGETT ST'),
-('street', 'DAKOTA ST'),
-('street', 'DALEWOOD WAY'),
-('street', 'DANIEL BURNHAM CT'),
-('street', 'DANTON ST'),
-('street', 'DANVERS ST'),
-('street', 'DARIEN WAY'),
-('street', 'DARRELL PL'),
-('street', 'DARTMOUTH ST'),
-('street', 'DASHIELL HAMMETT ST'),
-('street', 'DAVENPORT LN'),
-('street', 'DAVIDSON AVE'),
-('street', 'DAVIS CT'),
-('street', 'DAVIS ST'),
-('street', 'DAWNVIEW WAY'),
-('street', 'DAWSON PL'),
-('street', 'DAY ST'),
-('street', 'DE BOOM ST'),
-('street', 'DE FOREST WAY'),
-('street', 'DE HARO ST'),
-('street', 'DE LONG ST'),
-('street', 'DE MONTFORT AVE'),
-('street', 'DE SOTO ST'),
-('street', 'DE WOLF ST'),
-('street', 'DEARBORN ST'),
-('street', 'DECATUR ST'),
-('street', 'DECKER ALY'),
-('street', 'DEDMAN CT'),
-('street', 'DEEMS RD'),
-('street', 'DEHON ST'),
-('street', 'DEL MONTE ST'),
-('street', 'DEL SUR AVE'),
-('street', 'DEL VALE AVE'),
-('street', 'DELANCEY ST'),
-('street', 'DELANO AVE'),
-('street', 'DELAWARE ST'),
-('street', 'DELGADO PL'),
-('street', 'DELLBROOK AVE'),
-('street', 'DELMAR ST'),
-('street', 'DELTA ST'),
-('street', 'DEMING ST'),
-('street', 'DENSLOWE DR'),
-('street', 'DERBY ST'),
-('street', 'DESMOND ST'),
-('street', 'DETROIT ST'),
-('street', 'DEVONSHIRE WAY'),
-('street', 'DEWEY BLVD'),
-('street', 'DEWITT RD'),
-('street', 'DIAMOND ST'),
-('street', 'DIAMOND COVE TER'),
-('street', 'DIAMOND HEIGHTS BLVD'),
-('street', 'DIANA ST'),
-('street', 'DIAZ AVE'),
-('street', 'DICHA ALY'),
-('street', 'DICHIERA CT'),
-('street', 'DICKINSON ST'),
-('street', 'DIGBY ST'),
-('street', 'DIRK DIRKSEN PL'),
-('street', 'DIVISADERO ST'),
-('street', 'DIVISION ST'),
-('street', 'DIXIE ALY'),
-('street', 'DOCK ST'),
-('street', 'DODGE ST'),
-('street', 'DOLORES ST'),
-('street', 'DOLORES TER'),
-('street', 'DOLPHIN CT'),
-('street', 'DON CHEE WAY'),
-('street', 'DONAHUE ST'),
-('street', 'DONNER AVE'),
-('street', 'DORADO TER'),
-('street', 'DORANTES AVE'),
-('street', 'DORCAS WAY'),
-('street', 'DORCHESTER WAY'),
-('street', 'DORE ST'),
-('street', 'DORIC ALY'),
-('street', 'DORLAND ST'),
-('street', 'DORMAN AVE'),
-('street', 'DORMITORY RD'),
-('street', 'DOUBLE ROCK ST'),
-('street', 'DOUGLASS ST'),
-('street', 'DOVE LOOP'),
-('street', 'DOW PL'),
-('street', 'DOWNEY ST'),
-('street', 'DR CARLTON B GOODLETT PL'),
-('street', 'DRAKE ST'),
-('street', 'DRUMM ST'),
-('street', 'DRUMMOND ALY'),
-('street', 'DUBLIN ST'),
-('street', 'DUBOCE AVE'),
-('street', 'DUDLEY RD'),
-('street', 'DUKES CT'),
-('street', 'DUNCAN ST'),
-('street', 'DUNCOMBE ALY'),
-('street', 'DUNNES ALY'),
-('street', 'DUNSHEE ST'),
-('street', 'DUNSMUIR ST'),
-('street', 'DUTCH WINDMILL ACCESS RD'),
-('street', 'DWIGHT ST'),
-('street', 'E ST'),
-('street', 'EAGLE ST'),
-('street', 'EARL ST'),
-('street', 'EASEMENT'),
-('street', 'EAST RD'),
-('street', 'EAST BEACH RD'),
-('street', 'EAST CRYSTAL COVE TER'),
-('street', 'EAST FORT MILEY RD'),
-('street', 'EASTMAN ST'),
-('street', 'EASTWOOD DR'),
-('street', 'EATON PL'),
-('street', 'ECKER ST'),
-('street', 'EDDY ST'),
-('street', 'EDGAR AVE'),
-('street', 'EDGARDO PL'),
-('street', 'EDGEHILL WAY'),
-('street', 'EDGEWOOD AVE'),
-('street', 'EDIE RD'),
-('street', 'EDINBURGH ST'),
-('street', 'EDITH ST'),
-('street', 'EDNA ST'),
-('street', 'EDWARD ST'),
-('street', 'EGBERT AVE'),
-('street', 'EL CAMINO DEL MAR'),
-('street', 'EL DORADO ST'),
-('street', 'EL MIRASOL PL'),
-('street', 'EL PLAZUELA WAY'),
-('street', 'EL POLIN LOOP'),
-('street', 'EL SERENO CT'),
-('street', 'EL VERANO WAY'),
-('street', 'ELDRIDGE ST'),
-('street', 'ELGIN PARK'),
-('street', 'ELIM ALY'),
-('street', 'ELIZABETH ST'),
-('street', 'ELK ST'),
-('street', 'ELLERT ST'),
-('street', 'ELLINGTON AVE'),
-('street', 'ELLIOT ST'),
-('street', 'ELLIS ST'),
-('street', 'ELLSWORTH ST'),
-('street', 'ELM ST'),
-('street', 'ELMHURST DR'),
-('street', 'ELMIRA ST'),
-('street', 'ELMWOOD WAY'),
-('street', 'ELSIE ST'),
-('street', 'ELWOOD ST'),
-('street', 'EMERALD LN'),
-('street', 'EMERALD COVE WAY'),
-('street', 'EMERSON ST'),
-('street', 'EMERY LN'),
-('street', 'EMIL LN'),
-('street', 'EMMA ST'),
-('street', 'EMMETT CT'),
-('street', 'ENCANTO AVE'),
-('street', 'ENCINAL WALK'),
-('street', 'ENCLINE CT'),
-('street', 'ENGLISH ST'),
-('street', 'ENTERPRISE ST'),
-('street', 'ENTRADA CT'),
-('street', 'ERIE ST'),
-('street', 'ERKSON CT'),
-('street', 'ERVINE ST'),
-('street', 'ESCOLTA WAY'),
-('street', 'ESCONDIDO AVE'),
-('street', 'ESMERALDA AVE'),
-('street', 'ESPANOLA ST'),
-('street', 'ESQUINA DR'),
-('street', 'ESSEX ST'),
-('street', 'ESTERO AVE'),
-('street', 'EUCALYPTUS DR'),
-('street', 'EUCLID AVE'),
-('street', 'EUGENIA AVE'),
-('street', 'EUREKA ST'),
-('street', 'EVANS AVE'),
-('street', 'EVE ST'),
-('street', 'EVELYN WAY'),
-('street', 'EVERGLADE DR'),
-('street', 'EVERSON ST'),
-('street', 'EWER PL'),
-('street', 'EWING TER'),
-('street', 'EXCELSIOR AVE'),
-('street', 'EXCHANGE PL'),
-('street', 'EXECUTIVE PARK BLVD'),
-('street', 'EXETER ST'),
-('street', 'EXPOSITION DR'),
-('street', 'FAIR AVE'),
-('street', 'FAIR OAKS ST'),
-('street', 'FAIRBANKS ST'),
-('street', 'FAIRFAX AVE'),
-('street', 'FAIRFIELD WAY'),
-('street', 'FAIRMOUNT ST'),
-('street', 'FAITH ST'),
-('street', 'FALLON PL'),
-('street', 'FALMOUTH ST'),
-('street', 'FANNING WAY'),
-('street', 'FARALLONES ST'),
-('street', 'FARGO PL'),
-('street', 'FARNSWORTH LN'),
-('street', 'FARNUM ST'),
-('street', 'FARRAGUT AVE'),
-('street', 'FARVIEW CT'),
-('street', 'FAUNTLEROY LN'),
-('street', 'FAXON AVE'),
-('street', 'FEDERAL ST'),
-('street', 'FELIX AVE'),
-('street', 'FELL ST'),
-('street', 'FELL ACCESS RD'),
-('street', 'FELLA PL'),
-('street', 'FELTON ST'),
-('street', 'FENTON LN'),
-('street', 'FERN ST'),
-('street', 'FERNANDEZ ST'),
-('street', 'FERNWOOD DR'),
-('street', 'FIELDING ST'),
-('street', 'FIFTH ST'),
-('street', 'FILBERT ST'),
-('street', 'FILLMORE ST'),
-('street', 'FINLEY RD'),
-('street', 'FISHER ALY'),
-('street', 'FISHER AVE'),
-('street', 'FISHER LOOP'),
-('street', 'FITCH ST'),
-('street', 'FITZGERALD AVE'),
-('street', 'FLINT ST'),
-('street', 'FLOOD AVE'),
-('street', 'FLORA ST'),
-('street', 'FLORENCE ST'),
-('street', 'FLORENTINE AVE'),
-('street', 'FLORIDA ST'),
-('street', 'FLOUNDER CT'),
-('street', 'FLOURNOY ST'),
-('street', 'FLOWER ST'),
-('street', 'FOERSTER ST'),
-('street', 'FOLSOM ST'),
-('street', 'FONT BLVD'),
-('street', 'FONTINELLA TER'),
-('street', 'FOOTE AVE'),
-('street', 'FORD ST'),
-('street', 'FOREST RD'),
-('street', 'FOREST HILL PATH'),
-('street', 'FOREST KNOLLS DR'),
-('street', 'FOREST SIDE AVE'),
-('street', 'FOREST VIEW DR'),
-('street', 'FORSYTH LN'),
-('street', 'FORT FUNSTON RD'),
-('street', 'FORTUNA AVE'),
-('street', 'FOUNTAIN ST'),
-('street', 'FOWLER AVE'),
-('street', 'FRANCE AVE'),
-('street', 'FRANCIS ST'),
-('street', 'FRANCISCO ST'),
-('street', 'FRANCONIA ST'),
-('street', 'FRANK NORRIS ST'),
-('street', 'FRANKLIN ST'),
-('street', 'FRATESSA CT'),
-('street', 'FREDELA LN'),
-('street', 'FREDERICK ST'),
-('street', 'FREDSON CT'),
-('street', 'FREELON ST'),
-('street', 'FREEMAN CT'),
-('street', 'FREMONT ST'),
-('street', 'FRENCH CT'),
-('street', 'FRESNEL WAY'),
-('street', 'FRESNO ST'),
-('street', 'FRIEDELL ST'),
-('street', 'FRIENDSHIP CT'),
-('street', 'FRONT ST'),
-('street', 'FUENTE AVE'),
-('street', 'FULTON ST'),
-('street', 'FUNSTON AVE'),
-('street', 'FUNSTON RD'),
-('street', 'GABILAN WAY'),
-('street', 'GAISER CT'),
-('street', 'GALEWOOD CIR'),
-('street', 'GALILEE LN'),
-('street', 'GALINDO AVE'),
-('street', 'GALLAGHER LN'),
-('street', 'GALVEZ AVE'),
-('street', 'GAMBIER ST'),
-('street', 'GARCES DR'),
-('street', 'GARCIA AVE'),
-('street', 'GARDEN ST'),
-('street', 'GARDEN WAY'),
-('street', 'GARDENER RD'),
-('street', 'GARDENSIDE DR'),
-('street', 'GARFIELD ST'),
-('street', 'GARLINGTON CT'),
-('street', 'GARNETT TER'),
-('street', 'GARRISON AVE'),
-('street', 'GATES ST'),
-('street', 'GATEVIEW AVE'),
-('street', 'GATEVIEW CT'),
-('street', 'GATUN ALY'),
-('street', 'GAVEN ST'),
-('street', 'GAVIOTA WAY'),
-('street', 'GEARY BLVD'),
-('street', 'GEARY ST'),
-('street', 'GELLERT DR'),
-('street', 'GENE FRIEND WAY'),
-('street', 'GENEBERN WAY'),
-('street', 'GENERAL KENNEDY AVE'),
-('street', 'GENEVA AVE'),
-('street', 'GENNESSEE ST'),
-('street', 'GENOA PL'),
-('street', 'GEORGE CT'),
-('street', 'GEORGIA ST'),
-('street', 'GERKE ALY'),
-('street', 'GERMANIA ST'),
-('street', 'GETZ ST'),
-('street', 'GIANTS DR'),
-('street', 'GIBB ST'),
-('street', 'GIBBON CT'),
-('street', 'GIBBON LN'),
-('street', 'GIBSON RD'),
-('street', 'GILBERT ST'),
-('street', 'GILLETTE AVE'),
-('street', 'GILMAN AVE'),
-('street', 'GILROY ST'),
-('street', 'GIRARD RD'),
-('street', 'GIRARD ST'),
-('street', 'GLADEVIEW WAY'),
-('street', 'GLADIOLUS LN'),
-('street', 'GLADSTONE DR'),
-('street', 'GLADYS ST'),
-('street', 'GLEN CT'),
-('street', 'GLENBROOK AVE'),
-('street', 'GLENDALE ST'),
-('street', 'GLENHAVEN LN'),
-('street', 'GLENVIEW DR'),
-('street', 'GLOBE ALY'),
-('street', 'GLORIA CT'),
-('street', 'GLOVER ST'),
-('street', 'GODEUS ST'),
-('street', 'GOETHE ST'),
-('street', 'GOETTINGEN ST'),
-('street', 'GOLD ST'),
-('street', 'GOLD MINE DR'),
-('street', 'GOLDBERG LN'),
-('street', 'GOLDEN CT'),
-('street', 'GOLDEN GATE AVE'),
-('street', 'GOLDING LN'),
-('street', 'GOLETA AVE'),
-('street', 'GOLF COURSE ACCESS RD'),
-('street', 'GONZALEZ DR'),
-('street', 'GORDON ST'),
-('street', 'GORGAS AVE'),
-('street', 'GORHAM ST'),
-('street', 'GOUGH ST'),
-('street', 'GOULD ST'),
-('street', 'GRACE ST'),
-('street', 'GRAFTON AVE'),
-('street', 'GRAHAM ST'),
-('street', 'GRANADA AVE'),
-('street', 'GRAND VIEW AVE'),
-('street', 'GRAND VIEW TER'),
-('street', 'GRANT AVE'),
-('street', 'GRANVILLE WAY'),
-('street', 'GRATTAN ST'),
-('street', 'GRAYSTONE TER'),
-('street', 'GREAT HWY'),
-('street', 'GREELY CT'),
-('street', 'GREEN ST'),
-('street', 'GREENOUGH AVE'),
-('street', 'GREENVIEW CT'),
-('street', 'GREENWICH CT'),
-('street', 'GREENWICH ST'),
-('street', 'GREENWOOD AVE'),
-('street', 'GRENARD TER'),
-('street', 'GRIFFITH ST'),
-('street', 'GRIJALVA DR'),
-('street', 'GROTE PL'),
-('street', 'GROVE ST'),
-('street', 'GUERRERO ST'),
-('street', 'GUTTENBERG ST'),
-('street', 'GUY PL'),
-('street', 'H ST'),
-('street', 'HABITAT TER'),
-('street', 'HAGIWARA TEA GARDEN DR'),
-('street', 'HAHN ST'),
-('street', 'HAIGHT ST'),
-('street', 'HALE ST'),
-('street', 'HALIBUT CT'),
-('street', 'HALLAM ST'),
-('street', 'HALLECK ST'),
-('street', 'HALYBURTON CT'),
-('street', 'HAMERTON AVE'),
-('street', 'HAMILTON ST'),
-('street', 'HAMLIN ST'),
-('street', 'HAMPSHIRE ST'),
-('street', 'HANCOCK ST'),
-('street', 'HANGAH ST'),
-('street', 'HANOVER ST'),
-('street', 'HARBOR RD'),
-('street', 'HARDIE AVE'),
-('street', 'HARDIE PL'),
-('street', 'HARDING RD'),
-('street', 'HARE ST'),
-('street', 'HARKNESS AVE'),
-('street', 'HARLAN PL'),
-('street', 'HARLEM ALY'),
-('street', 'HARLOW ST'),
-('street', 'HARNEY WAY'),
-('street', 'HAROLD AVE'),
-('street', 'HARPER ST'),
-('street', 'HARRIET LN'),
-('street', 'HARRIET ST'),
-('street', 'HARRINGTON ST'),
-('street', 'HARRIS PL'),
-('street', 'HARRISON BLVD'),
-('street', 'HARRISON ST'),
-('street', 'HARRY ST'),
-('street', 'HARTFORD ST'),
-('street', 'HARVARD ST'),
-('street', 'HASTINGS TER'),
-('street', 'HATTIE ST'),
-('street', 'HAVELOCK ST'),
-('street', 'HAVENS ST'),
-('street', 'HAVENSIDE DR'),
-('street', 'HAWES ST'),
-('street', 'HAWKINS LN'),
-('street', 'HAWTHORNE ST'),
-('street', 'HAYES ST'),
-('street', 'HAYS ST'),
-('street', 'HAYWARD ST'),
-('street', 'HAZELWOOD AVE'),
-('street', 'HEAD ST'),
-('street', 'HEALY AVE'),
-('street', 'HEARST AVE'),
-('street', 'HEATHER AVE'),
-('street', 'HELEN ST'),
-('street', 'HELENA ST'),
-('street', 'HEMLOCK ST'),
-('street', 'HEMWAY TER'),
-('street', 'HENRY ST'),
-('street', 'HENRY ADAMS ST'),
-('street', 'HERITAGE LN'),
-('street', 'HERMANN ST'),
-('street', 'HERNANDEZ AVE'),
-('street', 'HERON ST'),
-('street', 'HESTER AVE'),
-('street', 'HEYMAN AVE'),
-('street', 'HICKORY ST'),
-('street', 'HICKS RD'),
-('street', 'HIDALGO TER'),
-('street', 'HIGH ST'),
-('street', 'HIGHLAND AVE'),
-('street', 'HIGUERA AVE'),
-('street', 'HILIRITAS AVE'),
-('street', 'HILL DR'),
-('street', 'HILL ST'),
-('street', 'HILL POINT AVE'),
-('street', 'HILLCREST CT'),
-('street', 'HILLCREST RD'),
-('street', 'HILLSIDE LN'),
-('street', 'HILLVIEW CT'),
-('street', 'HILLWAY AVE'),
-('street', 'HILTON ST'),
-('street', 'HIMMELMANN PL'),
-('street', 'HITCHCOCK LN'),
-('street', 'HITCHCOCK ST'),
-('street', 'HOBART ALY'),
-('street', 'HODGES ALY'),
-('street', 'HOFF ST'),
-('street', 'HOFFMAN AVE'),
-('street', 'HOFFMAN ST'),
-('street', 'HOLLADAY AVE'),
-('street', 'HOLLAND CT'),
-('street', 'HOLLIS ST'),
-('street', 'HOLLISTER AVE'),
-('street', 'HOLLOWAY AVE'),
-('street', 'HOLLY PARK CIR'),
-('street', 'HOLLYWOOD CT'),
-('street', 'HOLYOKE ST'),
-('street', 'HOMER ST'),
-('street', 'HOMESTEAD ST'),
-('street', 'HOMEWOOD CT'),
-('street', 'HOOKER ALY'),
-('street', 'HOOPER ST'),
-('street', 'HOPKINS AVE'),
-('street', 'HORACE ST'),
-('street', 'HORNE AVE'),
-('street', 'HOTALING PL'),
-('street', 'HOUSTON ST'),
-('street', 'HOWARD CT'),
-('street', 'HOWARD RD'),
-('street', 'HOWARD ST'),
-('street', 'HOWTH ST'),
-('street', 'HUBBELL ST'),
-('street', 'HUDSON AVE'),
-('street', 'HUGO ST'),
-('street', 'HULBERT ALY'),
-('street', 'HUMBOLDT ST'),
-('street', 'HUNT ST'),
-('street', 'HUNTER RD'),
-('street', 'HUNTER ST'),
-('street', 'HUNTERS POINT BLVD'),
-('street', 'HUNTERS POINT EXPY'),
-('street', 'HUNTINGTON DR'),
-('street', 'HURON AVE'),
-('street', 'HUSSEY ST'),
-('street', 'HUTCHINS CT'),
-('street', 'ICEHOUSE ALY'),
-('street', 'IDORA AVE'),
-('street', 'IGNACIO AVE'),
-('street', 'ILLINOIS ST'),
-('street', 'ILS LN'),
-('street', 'IMPERIAL ALY'),
-('street', 'INA CT'),
-('street', 'INCA LN'),
-('street', 'INCINERATOR RD'),
-('street', 'INDIA ST'),
-('street', 'INDIANA ST'),
-('street', 'INDUSTRIAL ST'),
-('street', 'INDUSTRIAL ST OFF RAMP'),
-('street', 'INDUSTRIAL ST ON RAMP'),
-('street', 'INFANTRY TER'),
-('street', 'INGALLS ST'),
-('street', 'INGERSON AVE'),
-('street', 'INGLESIDE PATH'),
-('street', 'INNES AVE'),
-('street', 'INNES CT'),
-('street', 'INVERNESS DR'),
-('street', 'IOWA ST'),
-('street', 'IRIS AVE'),
-('street', 'IRON ALY'),
-('street', 'IRONWOOD WAY'),
-('street', 'IRVING ST'),
-('street', 'IRWIN ST'),
-('street', 'ISADORA DUNCAN LN'),
-('street', 'ISIS ST'),
-('street', 'ISLAIS ST'),
-('street', 'ISOLA WAY'),
-('street', 'ISSLEIB AVE'),
-('street', 'ITALY AVE'),
-('street', 'IVY ST'),
-('street', 'J ST'),
-('street', 'JACK BALESTRERI WAY'),
-('street', 'JACK KEROUAC ALY'),
-('street', 'JACK LONDON ALY'),
-('street', 'JACK MICHELINE ALY'),
-('street', 'JACKSON ST'),
-('street', 'JADE PL'),
-('street', 'JAKEY CT'),
-('street', 'JAMES PL'),
-('street', 'JAMESTOWN AVE'),
-('street', 'JANSEN ST'),
-('street', 'JARBOE AVE'),
-('street', 'JASON CT'),
-('street', 'JASPER PL'),
-('street', 'JAUSS ST'),
-('street', 'JAVA ST'),
-('street', 'JEAN WAY'),
-('street', 'JEFFERSON ST'),
-('street', 'JENNIFER PL'),
-('street', 'JENNINGS CT'),
-('street', 'JENNINGS ST'),
-('street', 'JEROME ALY'),
-('street', 'JERROLD AVE'),
-('street', 'JERSEY ST'),
-('street', 'JESSIE ST'),
-('street', 'JESSIE EAST ST'),
-('street', 'JESSIE WEST ST'),
-('street', 'JEWETT ST'),
-('street', 'JOHN ST'),
-('street', 'JOHN F KENNEDY DR'),
-('street', 'JOHN F SHELLEY DR'),
-('street', 'JOHN MAHER ST'),
-('street', 'JOHN MUIR DR'),
-('street', 'JOHNSTONE DR'),
-('street', 'JOICE ST'),
-('street', 'JONES ST'),
-('street', 'JOOST AVE'),
-('street', 'JORDAN AVE'),
-('street', 'JOSE SARRIA CT'),
-('street', 'JOSEPHA AVE'),
-('street', 'JOSIAH AVE'),
-('street', 'JOY ST'),
-('street', 'JUAN BAUTISTA CIR'),
-('street', 'JUDAH ST'),
-('street', 'JUDSON AVE'),
-('street', 'JULES AVE'),
-('street', 'JULIA ST'),
-('street', 'JULIAN AVE'),
-('street', 'JULIUS ST'),
-('street', 'JUNIOR TER'),
-('street', 'JUNIPER ST'),
-('street', 'JUNIPERO SERRA BLVD'),
-('street', 'JUNIPERO SERRA BLVD OFF RAMP'),
-('street', 'JUNIPERO SERRA BLVD ON RAMP'),
-('street', 'JURI ST'),
-('street', 'JUSTIN DR'),
-('street', 'KALMANOVITZ ST'),
-('street', 'KAMILLE CT'),
-('street', 'KANSAS ST'),
-('street', 'KAPLAN LN'),
-('street', 'KAREN CT'),
-('street', 'KATE ST'),
-('street', 'KEARNY LN'),
-('street', 'KEARNY ST'),
-('street', 'KEITH ST'),
-('street', 'KELLOCH AVE'),
-('street', 'KEMPTON AVE'),
-('street', 'KENDALL DR'),
-('street', 'KENNEDY PL'),
-('street', 'KENNETH REXROTH PL'),
-('street', 'KENNY ALY'),
-('street', 'KENSINGTON WAY'),
-('street', 'KENT ST'),
-('street', 'KENWOOD WAY'),
-('street', 'KEPPLER CT'),
-('street', 'KERN ST'),
-('street', 'KEY AVE'),
-('street', 'KEYES ALY'),
-('street', 'KEYES AVE'),
-('street', 'KEYSTONE WAY'),
-('street', 'KEZAR DR'),
-('street', 'KIMBALL PL'),
-('street', 'KING ST'),
-('street', 'KINGSTON ST'),
-('street', 'KINZEY ST'),
-('street', 'KIRKHAM ST'),
-('street', 'KIRKWOOD AVE'),
-('street', 'KISKA RD'),
-('street', 'KISSLING ST'),
-('street', 'KITTREDGE TER'),
-('street', 'KNOCKASH HL'),
-('street', 'KNOLLVIEW WAY'),
-('street', 'KNOTT CT'),
-('street', 'KOBBE AVE'),
-('street', 'KOHLER PL'),
-('street', 'KORET WAY'),
-('street', 'KRAMER PL'),
-('street', 'KRAUSGRILL PL'),
-('street', 'KRONQUIST CT'),
-('street', 'LA AVANZADA'),
-('street', 'LA BICA WAY'),
-('street', 'LA FERRERA TER'),
-('street', 'LA GRANDE AVE'),
-('street', 'LA PLAYA'),
-('street', 'LA SALLE AVE'),
-('street', 'LAFAYETTE ST'),
-('street', 'LAGUNA ST'),
-('street', 'LAGUNA HONDA BLVD'),
-('street', 'LAGUNITAS DR'),
-('street', 'LAIDLEY ST'),
-('street', 'LAKE ST'),
-('street', 'LAKE FOREST CT'),
-('street', 'LAKE MERCED BLVD'),
-('street', 'LAKE MERCED HILL'),
-('street', 'LAKESHORE DR'),
-('street', 'LAKESHORE PLZ'),
-('street', 'LAKEVIEW AVE'),
-('street', 'LAKEWOOD AVE'),
-('street', 'LAMARTINE ST'),
-('street', 'LAMSON LN'),
-('street', 'LANCASTER LN'),
-('street', 'LANDERS ST'),
-('street', 'LANE ST'),
-('street', 'LANGDON CT'),
-('street', 'LANGTON ST'),
-('street', 'LANSDALE AVE'),
-('street', 'LANSING ST'),
-('street', 'LAPHAM WAY'),
-('street', 'LAPIDGE ST'),
-('street', 'LAPU-LAPU ST'),
-('street', 'LARCH ST'),
-('street', 'LARKIN ST'),
-('street', 'LAS VILLAS CT'),
-('street', 'LASKIE ST'),
-('street', 'LASSEN ALY'),
-('street', 'LATHROP AVE'),
-('street', 'LATONA ST'),
-('street', 'LAURA ST'),
-('street', 'LAUREL ST'),
-('street', 'LAUREN CT'),
-('street', 'LAUSSAT ST'),
-('street', 'LAWRENCE AVE'),
-('street', 'LAWTON ST'),
-('street', 'LE CONTE AVE'),
-('street', 'LE CONTE CIR'),
-('street', 'LEAVENWORTH ST'),
-('street', 'LEDYARD ST'),
-('street', 'LEE AVE'),
-('street', 'LEESE ST'),
-('street', 'LEGION CT'),
-('street', 'LEGION OF HONOR DR'),
-('street', 'LEIDESDORFF ST'),
-('street', 'LELAND AVE'),
-('street', 'LENDRUM CT'),
-('street', 'LENOX WAY'),
-('street', 'LEO ST'),
-('street', 'LEONA TER'),
-('street', 'LEROY PL'),
-('street', 'LESSING ST'),
-('street', 'LESTER CT'),
-('street', 'LETTERMAN DR'),
-('street', 'LETTERMAN HOSPITAL ACCESS'),
-('street', 'LETTUCE LN'),
-('street', 'LEVANT ST'),
-('street', 'LEXINGTON ST'),
-('street', 'LIBERTY ST'),
-('street', 'LICK PL'),
-('street', 'LIEBIG ST'),
-('street', 'LIGGETT AVE'),
-('street', 'LILAC ST'),
-('street', 'LILLIAN ST'),
-('street', 'LILY ST'),
-('street', 'LINARES AVE'),
-('street', 'LINCOLN BLVD'),
-('street', 'LINCOLN CT'),
-('street', 'LINCOLN WAY'),
-('street', 'LINDA ST'),
-('street', 'LINDA VISTA STPS'),
-('street', 'LINDEN ST'),
-('street', 'LINDSAY CIR'),
-('street', 'LIPPARD AVE'),
-('street', 'LISBON ST'),
-('street', 'LITTLEFIELD TER'),
-('street', 'LIVINGSTON ST'),
-('street', 'LLOYD ST'),
-('street', 'LOBOS ST'),
-('street', 'LOCKSLEY AVE'),
-('street', 'LOCKWOOD ST'),
-('street', 'LOCUST ST'),
-('street', 'LOEHR ST'),
-('street', 'LOIS LN'),
-('street', 'LOMA VISTA TER'),
-('street', 'LOMBARD ST'),
-('street', 'LOMITA AVE'),
-('street', 'LONDON ST'),
-('street', 'LONE MOUNTAIN TER'),
-('street', 'LONG AVE'),
-('street', 'LONG BRIDGE ST'),
-('street', 'LONGVIEW CT'),
-('street', 'LOOMIS ST'),
-('street', 'LOPEZ AVE'),
-('street', 'LORAINE CT'),
-('street', 'LORI LN'),
-('street', 'LOS PALMOS DR'),
-('street', 'LOTTIE BENNETT LN'),
-('street', 'LOUISBURG ST'),
-('street', 'LOUISIANA ST'),
-('street', 'LOWELL ST'),
-('street', 'LOWER TER'),
-('street', 'LOWER FORT MASON ST'),
-('street', 'LOYOLA TER'),
-('street', 'LUCERNE ST'),
-('street', 'LUCKY ST'),
-('street', 'LUCY ST'),
-('street', 'LUDLOW ALY'),
-('street', 'LULU ALY'),
-('street', 'LUNADO CT'),
-('street', 'LUNADO WAY'),
-('street', 'LUNDEEN ST'),
-('street', 'LUNDYS LN'),
-('street', 'LUPINE AVE'),
-('street', 'LURLINE ST'),
-('street', 'LURMONT TER'),
-('street', 'LUSK ST'),
-('street', 'LYDIA AVE'),
-('street', 'LYELL ST'),
-('street', 'LYNCH ST'),
-('street', 'LYNDHURST DR'),
-('street', 'LYON ST'),
-('street', 'LYSETTE ST'),
-('street', 'MABEL ALY'),
-('street', 'MABINI ST'),
-('street', 'MABREY CT'),
-('street', 'MACALLA CT'),
-('street', 'MACALLA RD'),
-('street', 'MACARTHUR AVE'),
-('street', 'MACEDONIA ST'),
-('street', 'MACONDRAY LN'),
-('street', 'MADDUX AVE'),
-('street', 'MADERA ST'),
-('street', 'MADISON ST'),
-('street', 'MADRID ST'),
-('street', 'MADRONE AVE'),
-('street', 'MAGELLAN AVE'),
-('street', 'MAGNOLIA ST'),
-('street', 'MAHAN ST'),
-('street', 'MAIDEN LN'),
-('street', 'MAIN DR'),
-('street', 'MAIN ST'),
-('street', 'MAJESTIC AVE'),
-('street', 'MALDEN ALY'),
-('street', 'MALLORCA WAY'),
-('street', 'MALTA DR'),
-('street', 'MALVINA PL'),
-('street', 'MANCHESTER ST'),
-('street', 'MANDALAY LN'),
-('street', 'MANGELS AVE'),
-('street', 'MANOR DR'),
-('street', 'MANSEAU ST'),
-('street', 'MANSELL ST'),
-('street', 'MANSFIELD ST'),
-('street', 'MANZANITA AVE'),
-('street', 'MAPLE ST'),
-('street', 'MARCELA AVE'),
-('street', 'MARCY PL'),
-('street', 'MARENGO ST'),
-('street', 'MARGARET AVE'),
-('street', 'MARGRAVE PL'),
-('street', 'MARIETTA DR'),
-('street', 'MARIN ST'),
-('street', 'MARINA BLVD'),
-('street', 'MARINA GREEN DR'),
-('street', 'MARINE DR'),
-('street', 'MARINER DR'),
-('street', 'MARION PL'),
-('street', 'MARIPOSA ST'),
-('street', 'MARIST CT'),
-('street', 'MARK LN'),
-('street', 'MARK TWAIN PL'),
-('street', 'MARKET ST'),
-('street', 'MARLIN CT'),
-('street', 'MARNE AVE'),
-('street', 'MARS ST'),
-('street', 'MARSHALL ST'),
-('street', 'MARSILY ST'),
-('street', 'MARSTON AVE'),
-('street', 'MARTHA AVE'),
-('street', 'MARTIN LUTHER KING JR DR'),
-('street', 'MARTINEZ ST'),
-('street', 'MARVEL CT'),
-('street', 'MARVIEW WAY'),
-('street', 'MARY ST'),
-('street', 'MARY TERESA ST'),
-('street', 'MARYLAND ST'),
-('street', 'MASON CT'),
-('street', 'MASON ST'),
-('street', 'MASONIC AVE'),
-('street', 'MASSACHUSETTS ST'),
-('street', 'MASSASOIT ST'),
-('street', 'MATEO ST'),
-('street', 'MATTHEW CT'),
-('street', 'MAULDIN ST'),
-('street', 'MAXWELL CT'),
-('street', 'MAYFAIR DR'),
-('street', 'MAYFLOWER ST'),
-('street', 'MAYNARD ST'),
-('street', 'MAYWOOD DR'),
-('street', 'MCALLISTER ST'),
-('street', 'MCCANN ST'),
-('street', 'MCCARTHY AVE'),
-('street', 'MCCOPPIN ST'),
-('street', 'MCCORMICK ST'),
-('street', 'MCDONALD ST'),
-('street', 'MCDOWELL AVE'),
-('street', 'MCKINLEY AVE'),
-('street', 'MCKINNON AVE'),
-('street', 'MCLAREN AVE'),
-('street', 'MCLAREN LODGE ACCESS RD'),
-('street', 'MCLEA CT'),
-('street', 'MCNAIR CT'),
-('street', 'MCRAE LN'),
-('street', 'MCRAE ST'),
-('street', 'MEACHAM PL'),
-('street', 'MEADE AVE'),
-('street', 'MEADOWBROOK DR'),
-('street', 'MEDA AVE'),
-('street', 'MEDAU PL'),
-('street', 'MEDICAL CENTER WAY'),
-('street', 'MEGAN DR'),
-('street', 'MELBA AVE'),
-('street', 'MELRA CT'),
-('street', 'MELROSE AVE'),
-('street', 'MENDELL ST'),
-('street', 'MENDOSA AVE'),
-('street', 'MENOHER LN'),
-('street', 'MERCATO CT'),
-('street', 'MERCED AVE'),
-('street', 'MERCEDES WAY'),
-('street', 'MERCHANT RD'),
-('street', 'MERCHANT ST'),
-('street', 'MERCURY ST'),
-('street', 'MERLIN ST'),
-('street', 'MERRIAM LN'),
-('street', 'MERRIE WAY'),
-('street', 'MERRILL ST'),
-('street', 'MERRIMAC ST'),
-('street', 'MERRITT ST'),
-('street', 'MERSEY ST'),
-('street', 'MESA AVE'),
-('street', 'MESA ST'),
-('street', 'METSON RD'),
-('street', 'MICHIGAN ST'),
-('street', 'MIDCREST WAY'),
-('street', 'MIDDLE POINT RD'),
-('street', 'MIDDLE WEST DR'),
-('street', 'MIDDLEFIELD DR'),
-('street', 'MIDWAY ST'),
-('street', 'MIGUEL ST'),
-('street', 'MILAN TER'),
-('street', 'MILES CT'),
-('street', 'MILES ST'),
-('street', 'MILEY ST'),
-('street', 'MILL ST'),
-('street', 'MILLER PL'),
-('street', 'MILLER RD'),
-('street', 'MILLWRIGHT COTTAGE ACCESS RD'),
-('street', 'MILTON ST'),
-('street', 'MILTON I ROSS ST'),
-('street', 'MINERVA ST'),
-('street', 'MINNA ST'),
-('street', 'MINNESOTA ST'),
-('street', 'MINT PLZ'),
-('street', 'MINT ST'),
-('street', 'MIRABEL AVE'),
-('street', 'MIRALOMA DR'),
-('street', 'MIRAMAR AVE'),
-('street', 'MIRANDO WAY'),
-('street', 'MISSION ST'),
-('street', 'MISSION BAY CIR'),
-('street', 'MISSION BAY DR'),
-('street', 'MISSION ROCK ST'),
-('street', 'MISSISSIPPI ST'),
-('street', 'MISSOURI ST'),
-('street', 'MISTRAL ST'),
-('street', 'MIZPAH ST'),
-('street', 'MODOC AVE'),
-('street', 'MOFFITT ST'),
-('street', 'MOJAVE ST'),
-('street', 'MOLIMO DR'),
-('street', 'MONCADA WAY'),
-('street', 'MONETA CT'),
-('street', 'MONETA WAY'),
-('street', 'MONO ST'),
-('street', 'MONTAGUE PL'),
-('street', 'MONTALVO AVE'),
-('street', 'MONTANA ST'),
-('street', 'MONTCALM ST'),
-('street', 'PARK ST'),
-('street', 'MONTCLAIR TER'),
-('street', 'MONTE VISTA DR'),
-('street', 'MONTECITO AVE'),
-('street', 'MONTEREY BLVD'),
-('street', 'MONTEZUMA ST'),
-('street', 'MONTGOMERY ST'),
-('street', 'MONTICELLO ST'),
-('street', 'MONUMENT WAY'),
-('street', 'MOORE LN'),
-('street', 'MOORE PL'),
-('street', 'MORAGA AVE'),
-('street', 'MORAGA ST'),
-('street', 'MORELAND ST'),
-('street', 'MORGAN ALY'),
-('street', 'MORNINGSIDE DR'),
-('street', 'MORRELL PL'),
-('street', 'MORRELL ST'),
-('street', 'MORRIS ST'),
-('street', 'MORSE ST'),
-('street', 'MORTON ST'),
-('street', 'MOSCOW ST'),
-('street', 'MOSS ST'),
-('street', 'MOULTON ST'),
-('street', 'MOULTRIE ST'),
-('street', 'MOUNT LN'),
-('street', 'MOUNT VERNON AVE'),
-('street', 'MOUNTAIN SPRING AVE'),
-('street', 'MOUNTVIEW CT'),
-('street', 'MUIR CT'),
-('street', 'MUIR LOOP'),
-('street', 'MULFORD ALY'),
-('street', 'MULLEN AVE'),
-('street', 'MUNICH ST'),
-('street', 'MURRAY LN'),
-('street', 'MURRAY ST'),
-('street', 'MUSEUM WAY'),
-('street', 'MUSIC CONCOURSE DR'),
-('street', 'MUSIC CONCOURSE ACCESS RD'),
-('street', 'MYRA WAY'),
-('street', 'MYRTLE ST'),
-('street', 'NADELL CT'),
-('street', 'NAGLEE AVE'),
-('street', 'NAHUA AVE'),
-('street', 'NANCY PELOSI DR'),
-('street', 'NANTUCKET AVE'),
-('street', 'NAPIER LN'),
-('street', 'NAPLES ST'),
-('street', 'NAPOLEON ST'),
-('street', 'NATICK ST'),
-('street', 'NATOMA ST'),
-('street', 'NAUMAN RD'),
-('street', 'NAUTILUS DR'),
-('street', 'NAVAJO AVE'),
-('street', 'NAVY RD'),
-('street', 'NAYLOR ST'),
-('street', 'NEBRASKA ST'),
-('street', 'NELLIE ST'),
-('street', 'NELSON AVE'),
-('street', 'NELSON RISING LN'),
-('street', 'NEPTUNE ST'),
-('street', 'NEVADA ST'),
-('street', 'NEW MONTGOMERY ST'),
-('street', 'NEWBURG ST'),
-('street', 'NEWCOMB AVE'),
-('street', 'NEWELL ST'),
-('street', 'NEWHALL ST'),
-('street', 'NEWMAN ST'),
-('street', 'NEWTON ST'),
-('street', 'NEY ST'),
-('street', 'NIAGARA AVE'),
-('street', 'NIANTIC AVE'),
-('street', 'NIBBI CT'),
-('street', 'NICHOLS WAY'),
-('street', 'NIDO AVE'),
-('street', 'NIMITZ AVE'),
-('street', 'NIMITZ DR'),
-('street', 'NIMITZ LN'),
-('street', 'NOB HILL PL'),
-('street', 'NOBLES ALY'),
-('street', 'NOE ST'),
-('street', 'NORDHOFF ST'),
-('street', 'NORFOLK ST'),
-('street', 'NORIEGA ST'),
-('street', 'NORMANDIE TER'),
-('street', 'NORTH DR'),
-('street', 'NORTH 15TH AVE'),
-('street', 'NORTH GATE RD'),
-('street', 'NORTH HUGHES LN'),
-('street', 'NORTH POINT ST'),
-('street', 'NORTH VAN HORN LN'),
-('street', 'NORTH VIEW CT'),
-('street', 'NORTHGATE DR'),
-('street', 'NORTHPOINT DR'),
-('street', 'NORTHRIDGE RD'),
-('street', 'NORTHWOOD DR'),
-('street', 'NORTON ST'),
-('street', 'NORWICH ST'),
-('street', 'NOTTINGHAM PL'),
-('street', 'NUEVA AVE'),
-('street', 'OAK ST'),
-('street', 'OAK ACCESS RD'),
-('street', 'OAK GROVE ST'),
-('street', 'OAK PARK DR'),
-('street', 'OAKDALE AVE'),
-('street', 'OAKHURST LN'),
-('street', 'OAKWOOD ST'),
-('street', 'OCEAN AVE'),
-('street', 'OCEANVIEW TER'),
-('street', 'OCTAVIA ST'),
-('street', 'OFARRELL ST'),
-('street', 'OGDEN AVE'),
-('street', 'OHLONE WAY'),
-('street', 'OLD CHINATOWN LN'),
-('street', 'OLD MASON ST'),
-('street', 'OLIVE ST'),
-('street', 'OLIVER ST'),
-('street', 'OLMSTEAD ST'),
-('street', 'OLNEY AVE'),
-('street', 'OLORAN AVE'),
-('street', 'OLYMPIA WAY'),
-('street', 'OLYMPIC COUNTRY CLUB RD'),
-('street', 'OMAR WAY'),
-('street', 'ONEIDA AVE'),
-('street', 'ONIQUE LN'),
-('street', 'ONONDAGA AVE'),
-('street', 'OPAL PL'),
-('street', 'OPALO LN'),
-('street', 'OPHIR ALY'),
-('street', 'ORA WAY'),
-('street', 'ORANGE ALY'),
-('street', 'ORBEN PL'),
-('street', 'ORD CT'),
-('street', 'ORD ST'),
-('street', 'ORDWAY ST'),
-('street', 'OREILLY AVE'),
-('street', 'ORIOLE WAY'),
-('street', 'ORIZABA AVE'),
-('street', 'ORSI CIR'),
-('street', 'ORTEGA ST'),
-('street', 'ORTEGA WAY'),
-('street', 'OSAGE ALY'),
-('street', 'OSCAR ALY'),
-('street', 'OSCEOLA LN'),
-('street', 'OSGOOD PL'),
-('street', 'OSHAUGHNESSY BLVD'),
-('street', 'OTEGA AVE'),
-('street', 'OTIS ST'),
-('street', 'OTSEGO AVE'),
-('street', 'OTTAWA AVE'),
-('street', 'OTTER COVE TER'),
-('street', 'OVERLOOK DR'),
-('street', 'OWEN ST'),
-('street', 'OWENS ST'),
-('street', 'OXFORD ST'),
-('street', 'OZBOURN CT'),
-('street', 'PACHECO ST'),
-('street', 'PACIFIC AVE'),
-('street', 'PAGE ST'),
-('street', 'PAGODA PL'),
-('street', 'PALM AVE'),
-('street', 'PALMETTO AVE'),
-('street', 'PALO ALTO AVE'),
-('street', 'PALOMA AVE'),
-('street', 'PALOS PL'),
-('street', 'PALOU AVE'),
-('street', 'PANAMA ST'),
-('street', 'PANORAMA DR'),
-('street', 'PARADISE AVE'),
-('street', 'PARAISO PL'),
-('street', 'PARAMOUNT TER'),
-('street', 'PARIS ST'),
-('street', 'PARK BLVD'),
-('street', 'PARK HILL AVE'),
-('street', 'PARK PRESIDIO BLVD'),
-('street', 'PARK PRESIDIO BYPASS DR'),
-('street', 'PARKER AVE'),
-('street', 'PARKHURST ALY'),
-('street', 'PARKRIDGE DR'),
-('street', 'PARNASSUS AVE'),
-('street', 'PARQUE DR'),
-('street', 'PARSONS ST'),
-('street', 'PASADENA ST'),
-('street', 'PATTEN RD'),
-('street', 'PATTERSON ST'),
-('street', 'PATTON CT'),
-('street', 'PATTON ST'),
-('street', 'PAUL AVE'),
-('street', 'PAULDING ST'),
-('street', 'PAYSON ST'),
-('street', 'PEABODY ST'),
-('street', 'PEARL ST'),
-('street', 'PEEK LN'),
-('street', 'PELICAN COVE TER'),
-('street', 'PELTON PL'),
-('street', 'PEMBERTON PL'),
-('street', 'PENA ST'),
-('street', 'PENINSULA AVE'),
-('street', 'PENNINGTON ST'),
-('street', 'PENNSYLVANIA AVE'),
-('street', 'PENNY LN'),
-('street', 'PERALTA AVE'),
-('street', 'PERASTO AVE'),
-('street', 'PEREGO TER'),
-('street', 'PERIMETER PATH'),
-('street', 'PERINE PL'),
-('street', 'PERRY ST'),
-('street', 'PERSHING DR'),
-('street', 'PERSIA AVE'),
-('street', 'PERU AVE'),
-('street', 'PETER YORKE WAY'),
-('street', 'PETERS AVE'),
-('street', 'PETRARCH PL'),
-('street', 'PFEIFFER ST'),
-('street', 'PHELPS ST'),
-('street', 'PHOENIX TER'),
-('street', 'PICO AVE'),
-('street', 'PIEDMONT ST'),
-('street', 'PIERCE ST'),
-('street', 'PIERPOINT LN'),
-('street', 'PILGRIM AVE'),
-('street', 'PINAR LN'),
-('street', 'PINE ST'),
-('street', 'PINEHURST WAY'),
-('street', 'PINK ALY'),
-('street', 'PINO ALY'),
-('street', 'PINTO AVE'),
-('street', 'PIOCHE ST'),
-('street', 'PIPER LOOP'),
-('street', 'PIXLEY ST'),
-('street', 'PIZARRO WAY'),
-('street', 'PLAZA ST'),
-('street', 'PLEASANT ST'),
-('street', 'PLUM ST'),
-('street', 'PLYMOUTH AVE'),
-('street', 'POINT LOBOS AVE'),
-('street', 'POLARIS WAY'),
-('street', 'POLK ST'),
-('street', 'POLLARD PL'),
-('street', 'POLLOCK ST'),
-('street', 'POMONA ST'),
-('street', 'POND ST'),
-('street', 'PONTIAC ST'),
-('street', 'POPE CT'),
-('street', 'POPE RD'),
-('street', 'POPE ST'),
-('street', 'POPLAR ST'),
-('street', 'POPPY LN'),
-('street', 'PORTAL DR'),
-('street', 'PORTAL PATH'),
-('street', 'PORTER ST'),
-('street', 'PORTOLA DR'),
-('street', 'PORTOLA ST'),
-('street', 'POST ST'),
-('street', 'POTOMAC ST'),
-('street', 'POTRERO AVE'),
-('street', 'POWELL ST'),
-('street', 'POWERS AVE'),
-('street', 'POWHATTAN AVE'),
-('street', 'PRADO ST'),
-('street', 'PRAGUE ST'),
-('street', 'PRATT PL'),
-('street', 'PRECITA AVE'),
-('street', 'PRENTISS ST'),
-('street', 'PRESCOTT CT'),
-('street', 'PRESIDIO AVE'),
-('street', 'PRESIDIO BLVD'),
-('street', 'PRESIDIO TER'),
-('street', 'PRETOR WAY'),
-('street', 'PRIEST ST'),
-('street', 'PRINCETON ST'),
-('street', 'PROGRESS ST'),
-('street', 'PROSPECT AVE'),
-('street', 'PROSPER ST'),
-('street', 'PUBLIC PARK'),
-('street', 'PUEBLO ST'),
-('street', 'PULASKI AVE'),
-('street', 'PUTNAM ST'),
-('street', 'QUANE ST'),
-('street', 'QUARRY RD'),
-('street', 'QUARTZ WAY'),
-('street', 'QUEBEC AVE'),
-('street', 'QUESADA AVE'),
-('street', 'QUICKSTEP LN'),
-('street', 'QUINCY ST'),
-('street', 'QUINT ST'),
-('street', 'QUINTARA ST'),
-('street', 'R ST'),
-('street', 'RACCOON DR'),
-('street', 'RACINE LN'),
-('street', 'RADIO TER'),
-('street', 'RAE AVE'),
-('street', 'RALEIGH ST'),
-('street', 'RALSTON AVE'),
-('street', 'RALSTON ST'),
-('street', 'RAMONA AVE'),
-('street', 'RAMSEL CT'),
-('street', 'RAMSELL ST'),
-('street', 'RANDALL ST'),
-('street', 'RANDOLPH ST'),
-('street', 'RANKIN ST'),
-('street', 'RAUSCH ST'),
-('street', 'RAVENWOOD DR'),
-('street', 'RAWLES ST'),
-('street', 'RAYBURN ST'),
-('street', 'RAYCLIFF TER'),
-('street', 'RAYMOND AVE'),
-('street', 'REARDON RD'),
-('street', 'REBECCA LN'),
-('street', 'RECYCLE RD'),
-('street', 'RECYCLING CENTER ACCESS RD'),
-('street', 'RED LEAF CT'),
-('street', 'RED ROCK WAY'),
-('street', 'REDDY ST'),
-('street', 'REDFIELD ALY'),
-('street', 'REDONDO ST'),
-('street', 'REDWOOD ST'),
-('street', 'REED ST'),
-('street', 'REEVES CT'),
-('street', 'REGENT ST'),
-('street', 'RENO PL'),
-('street', 'REPOSA WAY'),
-('street', 'RESERVOIR ST'),
-('street', 'RESTANI STWY'),
-('street', 'RESTANI WAY'),
-('street', 'RETIRO WAY'),
-('street', 'REUEL CT'),
-('street', 'REVERE AVE'),
-('street', 'REX AVE'),
-('street', 'REY ST'),
-('street', 'RHINE ST'),
-('street', 'RHODE ISLAND ST'),
-('street', 'RICE ST'),
-('street', 'RICHARD HENRY DANA PL'),
-('street', 'RICHARDS CIR'),
-('street', 'RICHARDSON AVE'),
-('street', 'RICHLAND AVE'),
-('street', 'RICHTER AVE'),
-('street', 'RICKARD ST'),
-('street', 'RICO WAY'),
-('street', 'RIDGE CT'),
-('street', 'RIDGE LN'),
-('street', 'RIDGEWOOD AVE'),
-('street', 'RILEY AVE'),
-('street', 'RINCON ST'),
-('street', 'RINGOLD ST'),
-('street', 'RIO CT'),
-('street', 'RIO VERDE ST'),
-('street', 'RIPLEY ST'),
-('street', 'RITCH ST'),
-('street', 'RIVAS AVE'),
-('street', 'RIVERA ST'),
-('street', 'RIVERTON DR'),
-('street', 'RIVOLI ST'),
-('street', 'RIZAL ST'),
-('street', 'ROACH ST'),
-('street', 'ROANOKE ST'),
-('street', 'ROBBLEE AVE'),
-('street', 'ROBERT C LEVY TUNL'),
-('street', 'ROBERT KIRK LN'),
-('street', 'ROBINHOOD DR'),
-('street', 'ROBINSON DR'),
-('street', 'ROBINSON ST'),
-('street', 'ROCK ALY'),
-('street', 'ROCKAWAY AVE'),
-('street', 'ROCKDALE DR'),
-('street', 'ROCKLAND ST'),
-('street', 'ROCKRIDGE DR'),
-('street', 'ROCKWOOD CT'),
-('street', 'ROD RD'),
-('street', 'RODGERS ST'),
-('street', 'RODRIGUEZ ST'),
-('street', 'ROEMER WAY'),
-('street', 'ROLPH ST'),
-('street', 'ROMAIN ST'),
-('street', 'ROME ST'),
-('street', 'ROMOLO ST'),
-('street', 'RONDEL PL'),
-('street', 'ROOSEVELT WAY'),
-('street', 'ROSA PARKS LN'),
-('street', 'ROSCOE ST'),
-('street', 'ROSE ST'),
-('street', 'ROSELLA CT'),
-('street', 'ROSELYN TER'),
-('street', 'ROSEMARY CT'),
-('street', 'ROSEMONT PL'),
-('street', 'ROSENKRANZ ST'),
-('street', 'ROSEWOOD DR'),
-('street', 'ROSIE LEE LN'),
-('street', 'ROSS ALY'),
-('street', 'ROSSI AVE'),
-('street', 'ROSSMOOR DR'),
-('street', 'ROTTECK ST'),
-('street', 'ROUSSEAU ST'),
-('street', 'ROYAL LN'),
-('street', 'RUCKMAN AVE'),
-('street', 'RUDDEN AVE'),
-('street', 'RUGER ST'),
-('street', 'RUSS ST'),
-('street', 'RUSSELL ST'),
-('street', 'RUSSIA AVE'),
-('street', 'RUSSIAN HILL PL'),
-('street', 'RUTH ST'),
-('street', 'RUTLAND ST'),
-('street', 'RUTLEDGE ST'),
-('street', 'SABIN PL'),
-('street', 'SACRAMENTO ST'),
-('street', 'SADDLEBACK DR'),
-('street', 'SADOWA ST'),
-('street', 'SAFIRA LN'),
-('street', 'SAGAMORE ST'),
-('street', 'SAINT CHARLES AVE'),
-('street', 'SAINT CROIX DR'),
-('street', 'SAINT ELMO WAY'),
-('street', 'SAINT FRANCIS BLVD'),
-('street', 'SAINT FRANCIS PL'),
-('street', 'SAINT GEORGE ALY'),
-('street', 'SAINT GERMAIN AVE'),
-('street', 'SAINT JOSEPHS AVE'),
-('street', 'SAINT LOUIS ALY'),
-('street', 'SAINT MARYS AVE'),
-('street', 'SAL ST'),
-('street', 'SALA TER'),
-('street', 'SALINAS AVE'),
-('street', 'SALMON ST'),
-('street', 'SAMOSET ST'),
-('street', 'SAMPSON AVE'),
-('street', 'SAN ALESO AVE'),
-('street', 'SAN ANDREAS WAY'),
-('street', 'SAN ANSELMO AVE'),
-('street', 'SAN ANTONIO PL'),
-('street', 'SAN BENITO WAY'),
-('street', 'SAN BRUNO AVE'),
-('street', 'SAN BRUNO AV OFF RAMP'),
-('street', 'SAN BRUNO AV ON RAMP'),
-('street', 'SAN BUENAVENTURA WAY'),
-('street', 'SAN CARLOS ST'),
-('street', 'SAN DIEGO AVE'),
-('street', 'SAN FELIPE AVE'),
-('street', 'SAN FERNANDO WAY'),
-('street', 'SAN GABRIEL AVE'),
-('street', 'SAN JACINTO WAY'),
-('street', 'SAN JOSE AVE'),
-('street', 'SAN JOSE AV OFF RAMP'),
-('street', 'SAN JOSE AV ON RAMP'),
-('street', 'SAN JUAN AVE'),
-('street', 'SAN LEANDRO WAY'),
-('street', 'SAN LORENZO WAY'),
-('street', 'SAN LUIS AVE'),
-('street', 'SAN MARCOS AVE'),
-('street', 'SAN MIGUEL ST'),
-('street', 'SAN PABLO AVE'),
-('street', 'SAN RAFAEL WAY'),
-('street', 'SAN RAMON WAY'),
-('street', 'SANCHES ST'),
-('street', 'SANCHEZ ST'),
-('street', 'SANDPIPER COVE WAY'),
-('street', 'SANSOME ST'),
-('street', 'SANTA ANA AVE'),
-('street', 'SANTA BARBARA AVE'),
-('street', 'SANTA CLARA AVE'),
-('street', 'SANTA CRUZ AVE'),
-('street', 'SANTA FE AVE'),
-('street', 'SANTA MARINA ST'),
-('street', 'SANTA MONICA WAY'),
-('street', 'SANTA PAULA AVE'),
-('street', 'SANTA RITA AVE'),
-('street', 'SANTA ROSA AVE'),
-('street', 'SANTA YNEZ AVE'),
-('street', 'SANTA YSABEL AVE'),
-('street', 'SANTIAGO ST'),
-('street', 'SANTOS ST'),
-('street', 'SARGENT ST'),
-('street', 'SAROYAN PL'),
-('street', 'SATURN ST'),
-('street', 'SAUL ST'),
-('street', 'SAWYER ST'),
-('street', 'SCENIC WAY'),
-('street', 'SCHOFIELD CT'),
-('street', 'SCHOFIELD RD'),
-('street', 'SCHOOL ALY'),
-('street', 'SCHWERIN ST'),
-('street', 'SCIENCE CIR'),
-('street', 'SCOTIA AVE'),
-('street', 'SCOTLAND ST'),
-('street', 'SCOTT ALY'),
-('street', 'SCOTT ST'),
-('street', 'SEA VIEW TER'),
-('street', 'SEACLIFF AVE'),
-('street', 'SEAL COVE TER'),
-('street', 'SEAL ROCK DR'),
-('street', 'SEARS ST'),
-('street', 'SEAWELL LN'),
-('street', 'SECOND DR'),
-('street', 'SECURITY PACIFIC PL'),
-('street', 'SELBY ST'),
-('street', 'SELMA WAY'),
-('street', 'SEMINOLE AVE'),
-('street', 'SENECA AVE'),
-('street', 'SEQUOIA WAY'),
-('street', 'SERGEANT JOHN V YOUNG ST'),
-('street', 'SERRANO DR'),
-('street', 'SERVICE ST'),
-('street', 'SEVERN ST'),
-('street', 'SEVILLE ST'),
-('street', 'SEWARD ST'),
-('street', 'SEYMOUR ST'),
-('street', 'SFGH ACCESS'),
-('street', 'SHAFTER AVE'),
-('street', 'SHAFTER CT'),
-('street', 'SHAFTER RD'),
-('street', 'SHAKESPEARE ST'),
-('street', 'SHANNON ST'),
-('street', 'SHARON ST'),
-('street', 'SHARP PL'),
-('street', 'SHAW ALY'),
-('street', 'SHAWNEE AVE'),
-('street', 'SHELDON TER'),
-('street', 'SHEPHARD PL'),
-('street', 'SHERIDAN AVE'),
-('street', 'SHERIDAN ST'),
-('street', 'SHERMAN RD'),
-('street', 'SHERMAN ST'),
-('street', 'SHERWOOD CT'),
-('street', 'SHIELDS ST'),
-('street', 'SHIP ST'),
-('street', 'SHIPLEY ST'),
-('street', 'SHORE VIEW AVE'),
-('street', 'SHORT ST'),
-('street', 'SHOTWELL ST'),
-('street', 'SHOUP AVE'),
-('street', 'SHRADER ST'),
-('street', 'SIBERT LN'),
-('street', 'SIBERT LOOP'),
-('street', 'SIBLEY RD'),
-('street', 'SICKLES AVE'),
-('street', 'SIERRA ST'),
-('street', 'SIGNAL RD'),
-('street', 'SILLIMAN ST'),
-('street', 'SILVER AVE'),
-('street', 'SILVERVIEW DR'),
-('street', 'SIMONDS LOOP'),
-('street', 'SIXTH ST'),
-('street', 'SKYLINE BLVD'),
-('street', 'SKYVIEW WAY'),
-('street', 'SLOAN ALY'),
-('street', 'SLOAT BLVD'),
-('street', 'SMITH LN'),
-('street', 'SOLA AVE'),
-('street', 'SOMERSET ST'),
-('street', 'SONOMA ST'),
-('street', 'SONORA LN'),
-('street', 'SOTELO AVE'),
-('street', 'SOULE LN'),
-('street', 'SOUTH DR'),
-('street', 'SOUTH GATE RD'),
-('street', 'SOUTH HILL BLVD'),
-('street', 'SOUTH HUGHES LN'),
-('street', 'SOUTH PARK'),
-('street', 'SOUTH VAN HORN LN'),
-('street', 'SOUTH VAN NESS AVE'),
-('street', 'SOUTHARD PL'),
-('street', 'SOUTHERN HEIGHTS AVE'),
-('street', 'SOUTHWOOD DR'),
-('street', 'SPARROW ST'),
-('street', 'SPARTA ST'),
-('street', 'SPEAR AVE'),
-('street', 'SPEAR ST'),
-('street', 'SPENCER ST'),
-('street', 'SPOFFORD ST'),
-('street', 'SPRECKELS LAKE DR'),
-('street', 'SPRING ST'),
-('street', 'SPRINGFIELD DR'),
-('street', 'SPROULE LN'),
-('street', 'SPRUCE ST'),
-('street', 'STANDISH AVE'),
-('street', 'STANFORD ST'),
-('street', 'STANFORD HEIGHTS AVE'),
-('street', 'STANLEY ST'),
-('street', 'STANTON ST'),
-('street', 'STANYAN BLVD'),
-('street', 'STANYAN ST'),
-('street', 'STAPLES AVE'),
-('street', 'STARK ST'),
-('street', 'STARR KING WAY'),
-('street', 'STARVIEW WAY'),
-('street', 'STATE DR'),
-('street', 'STATES ST'),
-('street', 'STEINER ST'),
-('street', 'STERLING ST'),
-('street', 'STERN GROVE CT'),
-('street', 'STERNBERG RD'),
-('street', 'STEUART ST'),
-('street', 'STEUBEN ST'),
-('street', 'STEVELOE PL'),
-('street', 'STEVENSON ST'),
-('street', 'STILL ST'),
-('street', 'STILLINGS AVE'),
-('street', 'STILLMAN ST'),
-('street', 'STILWELL RD'),
-('street', 'STOCKTON ST'),
-('street', 'STOCKTON TUNL'),
-('street', 'STONE ST'),
-('street', 'STONECREST DR'),
-('street', 'STONEMAN ST'),
-('street', 'STONERIDGE LN'),
-('street', 'STONEYBROOK AVE'),
-('street', 'STONEYFORD AVE'),
-('street', 'STOREY AVE'),
-('street', 'STORRIE ST'),
-('street', 'STOW LAKE DR'),
-('street', 'STRATFORD DR'),
-('street', 'STRIPED BASS ST'),
-('street', 'STURGEON ST'),
-('street', 'SUMMIT ST'),
-('street', 'SUMMIT WAY'),
-('street', 'SUMNER AVE'),
-('street', 'SUMNER ST'),
-('street', 'SUNBEAM LN'),
-('street', 'SUNGLOW LN'),
-('street', 'SUNNYDALE AVE'),
-('street', 'SUNNYSIDE TER'),
-('street', 'SUNRISE WAY'),
-('street', 'SUNSET BLVD'),
-('street', 'SUNSET BLVD OFF RAMP'),
-('street', 'SUNSET BLVD ON RAMP'),
-('street', 'SUNVIEW DR'),
-('street', 'SURREY ST'),
-('street', 'SUSSEX ST'),
-('street', 'SUTRO HEIGHTS AVE'),
-('street', 'SUTTER ST'),
-('street', 'SWEENY ST'),
-('street', 'SWISS AVE'),
-('street', 'SYCAMORE ST'),
-('street', 'SYDNEY WAY'),
-('street', 'SYLVAN DR'),
-('street', 'TABER PL'),
-('street', 'TACOMA ST'),
-('street', 'TALBERT CT'),
-('street', 'TALBERT ST'),
-('street', 'TAMALPAIS TER'),
-('street', 'TAMPA LN'),
-('street', 'TANDANG SORA'),
-('street', 'TAPIA DR'),
-('street', 'TARA ST'),
-('street', 'TARAVAL ST'),
-('street', 'TAYLOR RD'),
-('street', 'TAYLOR ST'),
-('street', 'TEDDY AVE'),
-('street', 'TEHAMA ST'),
-('street', 'TELEGRAPH PL'),
-('street', 'TELEGRAPH HILL BLVD'),
-('street', 'TEMESCAL TER'),
-('street', 'TEMPLE ST'),
-('street', 'TENNESSEE ST'),
-('street', 'TENNY PL'),
-('street', 'TERESITA BLVD'),
-('street', 'TERRA VISTA AVE'),
-('street', 'TERRACE DR'),
-('street', 'TERRACE WALK'),
-('street', 'TERRY A FRANCOIS BLVD'),
-('street', 'TEVIS ST'),
-('street', 'TEXAS ST'),
-('street', 'THE EMBARCADERO'),
-('street', 'THERESA ST'),
-('street', 'THOMAS AVE'),
-('street', 'THOMAS CT'),
-('street', 'THOMAS MELLON CIR'),
-('street', 'THOMAS MELLON DR'),
-('street', 'THOMAS MORE WAY'),
-('street', 'THOR AVE'),
-('street', 'THORNBURG RD'),
-('street', 'THORNE WAY'),
-('street', 'THORNTON AVE'),
-('street', 'THORP LN'),
-('street', 'THRIFT ST'),
-('street', 'TIFFANY AVE'),
-('street', 'TILLMAN PL'),
-('street', 'TIMOTHY PFLUEGER PL'),
-('street', 'TINGLEY ST'),
-('street', 'TIOGA AVE'),
-('street', 'TOCOLOMA AVE'),
-('street', 'TODD ST'),
-('street', 'TOLAND ST'),
-('street', 'TOLEDO WAY'),
-('street', 'TOLL PLAZA TUNNEL'),
-('street', 'TOMASO CT'),
-('street', 'TOMPKINS AVE'),
-('street', 'TONQUIN ST'),
-('street', 'TOPAZ WAY'),
-('street', 'TOPEKA AVE'),
-('street', 'TORNEY AVE'),
-('street', 'TORRENS CT'),
-('street', 'TOUCHARD ST'),
-('street', 'TOWERSIDE AVE'),
-('street', 'TOWNSEND ST'),
-('street', 'TOYON LN'),
-('street', 'TRADER VIC ALY'),
-('street', 'TRAINOR ST'),
-('street', 'TRANSBAY HUMP'),
-('street', 'TRANSBAY LOOP'),
-('street', 'TRANSVERSE DR'),
-('street', 'TREASURE ISLAND RD'),
-('street', 'TREASURY PL'),
-('street', 'TREAT AVE'),
-('street', 'TREAT LN'),
-('street', 'TREAT WAY'),
-('street', 'TRENTON ST'),
-('street', 'TRINITY ST'),
-('street', 'TROY ALY'),
-('street', 'TRUBY ST'),
-('street', 'TRUETT ST'),
-('street', 'TRUMBULL ST'),
-('street', 'TUBBS ST'),
-('street', 'TUCKER AVE'),
-('street', 'TULANE ST'),
-('street', 'TULARE ST'),
-('street', 'TULIP ALY'),
-('street', 'TUNNEL AVE'),
-('street', 'TURK BLVD'),
-('street', 'TURK ST'),
-('street', 'TURK MURPHY LN'),
-('street', 'TURNER TER'),
-('street', 'TURQUOISE WAY'),
-('street', 'TUSCANY ALY'),
-('street', 'TWIN PEAKS BLVD'),
-('street', 'ULLOA ST'),
-('street', 'UNDERWOOD AVE'),
-('street', 'UNION ST'),
-('street', 'UNITED NATIONS PLZ'),
-('street', 'UNIVERSITY ST'),
-('street', 'UPLAND DR'),
-('street', 'UPPER TER'),
-('street', 'UPPER SERVICE RD'),
-('street', 'UPTON AVE'),
-('street', 'UPTON ST'),
-('street', 'URANUS TER'),
-('street', 'URBANO DR'),
-('street', 'UTAH ST'),
-('street', 'VALDEZ AVE'),
-('street', 'VALE AVE'),
-('street', 'VALENCIA ST'),
-('street', 'VALERTON CT'),
-('street', 'VALLEJO ST'),
-('street', 'VALLETTA CT'),
-('street', 'VALLEY ST'),
-('street', 'VALMAR TER'),
-('street', 'VALPARAISO ST'),
-('street', 'VAN BUREN ST'),
-('street', 'VAN DYKE AVE'),
-('street', 'VAN KEUREN AVE'),
-('street', 'VAN NESS AVE'),
-('street', 'VANDEWATER ST'),
-('street', 'VARA ST'),
-('street', 'VARELA AVE'),
-('street', 'VARENNES ST'),
-('street', 'VARNEY PL'),
-('street', 'VASQUEZ AVE'),
-('street', 'VASSAR PL'),
-('street', 'VEGA ST'),
-('street', 'VELASCO AVE'),
-('street', 'VENARD ALY'),
-('street', 'VENTURA AVE'),
-('street', 'VENUS ST'),
-('street', 'VER MEHR PL'),
-('street', 'VERDI PL'),
-('street', 'VERDUN WAY'),
-('street', 'VERMONT ST'),
-('street', 'VERNA ST'),
-('street', 'VERNON ST'),
-('street', 'VESTA ST'),
-('street', 'VETERANS DR'),
-('street', 'VIA BUFANO'),
-('street', 'VIA FERLINGHETTI'),
-('street', 'VICENTE ST'),
-('street', 'VICKSBURG ST'),
-('street', 'VICTORIA ST'),
-('street', 'VIDAL DR'),
-('street', 'VIENNA ST'),
-('street', 'VILLA TER'),
-('street', 'VINE TER'),
-('street', 'VINTON CT'),
-('street', 'VIRGIL ST'),
-('street', 'VIRGINIA AVE'),
-('street', 'VISITACION AVE'),
-('street', 'VISTA CT'),
-('street', 'VISTA LN'),
-('street', 'VISTA VERDE CT'),
-('street', 'VISTA VIEW CT'),
-('street', 'VON SCHMIDT ST'),
-('street', 'VULCAN STWY'),
-('street', 'WABASH TER'),
-('street', 'WAGNER ALY'),
-('street', 'WAITHMAN WAY'),
-('street', 'WALBRIDGE ST'),
-('street', 'WALDO ALY'),
-('street', 'WALKER CT'),
-('street', 'WALKWAY'),
-('street', 'WALL PL'),
-('street', 'WALLACE AVE'),
-('street', 'WALLEN ST'),
-('street', 'WALLER ST'),
-('street', 'WALNUT ST'),
-('street', 'WALTER ST'),
-('street', 'WALTER U LUM PL'),
-('street', 'WALTHAM ST'),
-('street', 'WANDA ST'),
-('street', 'WARD ST'),
-('street', 'WARE ST'),
-('street', 'WARNER PL'),
-('street', 'WARREN DR'),
-('street', 'WASHBURN ST'),
-('street', 'WASHINGTON BLVD'),
-('street', 'WASHINGTON ST'),
-('street', 'WATCHMAN WAY'),
-('street', 'WATER ST'),
-('street', 'WATERLOO ST'),
-('street', 'WATERVILLE ST'),
-('street', 'WATT AVE'),
-('street', 'WATTSON PL'),
-('street', 'WAVERLY PL'),
-('street', 'WAWONA ST'),
-('street', 'WAYLAND ST'),
-('street', 'WAYNE PL'),
-('street', 'WEBB PL'),
-('street', 'WEBSTER ST'),
-('street', 'WEDEMEYER ST'),
-('street', 'WELDON ST'),
-('street', 'WELSH ST'),
-('street', 'WENTWORTH PL'),
-('street', 'WEST RD'),
-('street', 'WEST BROADWAY'),
-('street', 'WEST CLAY ST'),
-('street', 'WEST CRYSTAL COVE TER'),
-('street', 'WEST HALLECK ST'),
-('street', 'WEST PACIFIC AVE'),
-('street', 'WEST POINT RD'),
-('street', 'WEST PORTAL AVE'),
-('street', 'WEST VIEW AVE'),
-('street', 'WESTBROOK CT'),
-('street', 'WESTERN SHORE LN'),
-('street', 'WESTGATE DR'),
-('street', 'WESTMOORLAND DR'),
-('street', 'WESTON CT'),
-('street', 'WESTSIDE DR'),
-('street', 'WESTWOOD DR'),
-('street', 'WETMORE ST'),
-('street', 'WHEAT ST'),
-('street', 'WHEELER AVE'),
-('street', 'WHIPPLE AVE'),
-('street', 'WHITE ST'),
-('street', 'WHITECLIFF WAY'),
-('street', 'WHITFIELD CT'),
-('street', 'WHITING ST'),
-('street', 'WHITING WAY'),
-('street', 'WHITNEY ST'),
-('street', 'WHITNEY YOUNG CIR'),
-('street', 'WHITTIER ST'),
-('street', 'WIESE ST'),
-('street', 'WILDE AVE'),
-('street', 'WILDER ST'),
-('street', 'WILDWOOD WAY'),
-('street', 'WILLARD ST'),
-('street', 'WILLIAMS AVE'),
-('street', 'WILLIAR AVE'),
-('street', 'WILLIE B KENNEDY DR'),
-('street', 'WILLOW ST'),
-('street', 'WILLS ST'),
-('street', 'WILMOT ST'),
-('street', 'WILSON ST'),
-('street', 'WINDING WAY'),
-('street', 'WINDSOR PL'),
-('street', 'WINFIELD ST'),
-('street', 'WINN WAY'),
-('street', 'WINSTON DR'),
-('street', 'WINTER PL'),
-('street', 'WINTHROP ST'),
-('street', 'WISCONSIN ST'),
-('street', 'WISSER CT'),
-('street', 'WOOD ST'),
-('street', 'WOODACRE DR'),
-('street', 'WOODHAVEN CT'),
-('street', 'WOODLAND AVE'),
-('street', 'WOODSIDE AVE'),
-('street', 'WOODWARD ST'),
-('street', 'WOOL CT'),
-('street', 'WOOL ST'),
-('street', 'WOOLSEY ST'),
-('street', 'WORCESTER AVE'),
-('street', 'WORDEN ST'),
-('street', 'WORTH ST'),
-('street', 'WRIGHT CT'),
-('street', 'WRIGHT LOOP'),
-('street', 'WRIGHT ST'),
-('street', 'WYMAN AVE'),
-('street', 'WYTON LN'),
-('street', 'YACHT RD'),
-('street', 'YALE ST'),
-('street', 'YELLOW CAB ACCESS ROAD'),
-('street', 'YERBA BUENA AVE'),
-('street', 'YERBA BUENA DR'),
-('street', 'YERBA BUENA LN'),
-('street', 'YERBA BUENA RD'),
-('street', 'YORBA ST'),
-('street', 'YORK ST'),
-('street', 'YOSEMITE AVE'),
-('street', 'YOUNG CT'),
-('street', 'YOUNG ST'),
-('street', 'YUKON ST'),
-('street', 'ZAMPA LN'),
-('street', 'ZANOWITZ AVE'),
-('street', 'ZENO PL'),
-('street', 'ZIRCON PL'),
-('street', 'ZOE ST'),
-('street', 'ZOO RD'),
-('street', 'DR TOM WADDELL PL'),
-('street', 'AL SCOMA WAY'),
-('street', 'PALACE DR'),
-('street', 'MARTIN AVE'),
-('street', 'MISSION BAY BLVD SOUTH'),
-('street', 'BUENA VISTA AVE EAST'),
-('street', 'CONSERVATORY DR EAST'),
-('street', 'BURNETT AVE NORTH'),
-('street', 'LAKE MERCED HILL ST NORTH'),
-('street', 'BUENA VISTA AVE WEST'),
-('street', 'WILLARD ST NORTH'),
-('street', 'FIRST DR EAST'),
-('street', 'LAKE MERCED HILL ST SOUTH'),
-('street', 'MISSION BAY BLVD NORTH'),
-('street', '25TH AVE NORTH'),
-('street', 'CONSERVATORY DR WEST'),
-('street', 'FIRST DR WEST'),
-('street', 'ZANOWITZ ST'),
-('street', 'AVENUE G'),
-('street', 'ODD FELLOWS WAY'),
-('street', 'EL DORADO ST NORTH'),
-('street', 'EL DORADO ST SOUTH'),
-('street', 'FRIDA KAHLO WAY'),
-('street', 'WARRIORS WAY'),
-('street', 'WATERFRONT ST'),
-('street', 'PALM LN'),
-('street', 'WHIPPLE ST'),
-('street', 'SAM JORDANS WAY'),
-('street', 'SAN FRANCISCO GOLF CLUB RD'),
-('street', 'JEFF ADACHI WAY'),
-('street', 'LONG BRIDGE VARA'),
-('street', 'STEUART LN'),
-('street', 'EARL GAGE JR ST'),
-
- ('tag', 'Technology'),
- ('tag', 'Nature'),
- ('tag', 'Water'),
- ('tag', 'Programming'),
- ('tag', 'Excercise'),
- ('tag', 'Spritual'),
- ('tag', 'Skateboarding'),
- ('tag', 'Kitesurfing')
-;
-
-insert into faker.dictionary (type, word) VALUES
- ('cta', 'Start Your Journey'),
- ('cta', 'Reserve your spot now'),
- ('cta', 'Sign up'),
- ('cta', 'Sign up to attend now'),
- ('cta', 'Join Us!'),
- ('cta', 'Let’s Do It!'),
- ('cta', 'Get Started'),
- ('cta', 'Sign up free'),
- ('cta', 'Learn more'),
- ('cta', 'Join now'),
- ('cta', 'Start now'),
- ('cta', 'Get yours now')
-;
-
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/tables/dictionary/table.sql b/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/tables/dictionary/table.sql
deleted file mode 100644
index bf68f163c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/deploy/schemas/faker/tables/dictionary/table.sql
+++ /dev/null
@@ -1,17 +0,0 @@
--- Deploy schemas/faker/tables/dictionary/table to pg
-
--- requires: schemas/faker/schema
-
-BEGIN;
-
-CREATE TABLE faker.dictionary (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- type text,
- word text
-);
-
-CREATE INDEX faker_type_idx ON faker.dictionary (
- type
-);
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/jest.config.js b/__fixtures__/stage/extensions/@pgpm/faker/jest.config.js
deleted file mode 100644
index e20e7efb5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/jest.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @type {import('ts-jest').JestConfigWithTsJest} */
-module.exports = {
- preset: 'ts-jest',
- testEnvironment: 'node',
-
- // Match both __tests__ and colocated test files
- testMatch: ['**/?(*.)+(test|spec).{ts,tsx,js,jsx}'],
-
- // Ignore build artifacts and type declarations
- testPathIgnorePatterns: ['/dist/', '\\.d\\.ts$'],
- modulePathIgnorePatterns: ['/dist/'],
- watchPathIgnorePatterns: ['/dist/'],
-
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
-};
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/package.json b/__fixtures__/stage/extensions/@pgpm/faker/package.json
deleted file mode 100644
index e4b531f62..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/package.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "name": "@pgpm/faker",
- "version": "0.15.2",
- "description": "Fake data generation utilities for testing and development",
- "author": "Dan Lynch ",
- "contributors": [
- "Constructive "
- ],
- "keywords": [
- "postgresql",
- "pgpm",
- "faker",
- "testing"
- ],
- "publishConfig": {
- "access": "public"
- },
- "scripts": {
- "bundle": "pgpm package",
- "test": "jest",
- "test:watch": "jest --watch"
- },
- "dependencies": {
- "@pgpm/types": "0.15.2",
- "@pgpm/verify": "0.15.2"
- },
- "devDependencies": {
- "pgpm": "^1.0.0"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/constructive-io/pgpm-modules"
- },
- "homepage": "https://github.com/constructive-io/pgpm-modules",
- "bugs": {
- "url": "https://github.com/constructive-io/pgpm-modules/issues"
- }
-}
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/pgpm-faker.control b/__fixtures__/stage/extensions/@pgpm/faker/pgpm-faker.control
deleted file mode 100644
index a8617df23..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/pgpm-faker.control
+++ /dev/null
@@ -1,8 +0,0 @@
-# pgpm-faker extension
-comment = 'pgpm-faker extension'
-default_version = '0.14.0'
-module_pathname = '$libdir/pgpm-faker'
-requires = 'citext,pgcrypto,plpgsql,uuid-ossp,pgpm-types,pgpm-verify'
-relocatable = false
-superuser = false
-
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/pgpm.plan b/__fixtures__/stage/extensions/@pgpm/faker/pgpm.plan
deleted file mode 100644
index 7addd9e5a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/pgpm.plan
+++ /dev/null
@@ -1,10 +0,0 @@
-%syntax-version=1.0.0
-%project=pgpm-faker
-%uri=pgpm-faker
-
-schemas/faker/schema [pgpm-types:schemas/public/domains/url] 2017-08-11T08:11:51Z skitch # add schemas/faker/schema
-schemas/faker/tables/dictionary/table [schemas/faker/schema] 2017-08-11T08:11:51Z skitch # add schemas/faker/tables/dictionary/table
-schemas/faker/procedures/utils [schemas/faker/schema schemas/faker/tables/dictionary/table] 2017-08-11T08:11:51Z skitch # add schemas/faker/procedures/utils
-schemas/faker/tables/cities/table [schemas/faker/schema] 2017-08-11T08:11:51Z skitch # add schemas/faker/tables/cities/table
-schemas/faker/tables/cities/fixtures/1602987351008_fixture [schemas/faker/schema schemas/faker/tables/cities/table] 2017-08-11T08:11:51Z skitch # add schemas/faker/tables/cities/fixtures/1602987351008_fixture
-schemas/faker/tables/dictionary/fixtures/1602969089665_fixture [schemas/faker/schema schemas/faker/tables/dictionary/table] 2017-08-11T08:11:51Z skitch # add schemas/faker/tables/dictionary/fixtures/1602969089665_fixture
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/procedures/utils.sql b/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/procedures/utils.sql
deleted file mode 100644
index b81d4b6e1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/procedures/utils.sql
+++ /dev/null
@@ -1,51 +0,0 @@
--- Revert schemas/faker/procedures/utils from pg
-
-BEGIN;
-
-DROP FUNCTION faker.attachment;
-DROP FUNCTION faker.ip;
-DROP FUNCTION faker.upload;
-DROP FUNCTION faker.url;
-DROP FUNCTION faker.file;
-DROP FUNCTION faker.profilepic(gender text);
-DROP FUNCTION faker.profilepic();
-DROP FUNCTION faker.image;
-DROP FUNCTION faker.image_mime;
-DROP FUNCTION faker.ext;
-DROP FUNCTION faker.mime;
-DROP FUNCTION faker.timestamptz;
-DROP FUNCTION faker.boolean;
-DROP FUNCTION faker.interval(min int, max int);
-DROP FUNCTION faker.interval();
-DROP FUNCTION faker.birthdate;
-DROP FUNCTION faker.date;
-DROP FUNCTION faker.integer;
-DROP FUNCTION faker.float;
-DROP FUNCTION faker.time_unit;
-DROP FUNCTION faker.hostname;
-DROP FUNCTION faker.password;
-DROP FUNCTION faker.token;
-DROP FUNCTION faker.uuid;
-DROP FUNCTION faker.email;
-DROP FUNCTION faker.paragraph;
-DROP FUNCTION faker.sentence;
-DROP FUNCTION faker.tags;
-DROP FUNCTION faker.address;
-DROP FUNCTION faker.state;
-DROP FUNCTION faker.street;
-DROP FUNCTION faker.phone;
-DROP FUNCTION faker.lnglat(city text);
-DROP FUNCTION faker.lnglat(x1 float, y1 float, x2 float, y2 float);
-DROP FUNCTION faker.zip;
-DROP FUNCTION faker.city;
-DROP FUNCTION faker.business;
-DROP FUNCTION faker.fullname;
-DROP FUNCTION faker.surname;
-DROP FUNCTION faker.name;
-DROP FUNCTION faker.username;
-DROP FUNCTION faker.gender;
-DROP FUNCTION faker.word(wordtypes text[]);
-DROP FUNCTION faker.word(wordtype text);
-DROP FUNCTION faker.word_type;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/schema.sql b/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/schema.sql
deleted file mode 100644
index 7f0a8265e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/faker/schema from pg
-
-BEGIN;
-
-DROP SCHEMA faker;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/tables/cities/fixtures/1602987351008_fixture.sql b/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/tables/cities/fixtures/1602987351008_fixture.sql
deleted file mode 100644
index 414d587f6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/tables/cities/fixtures/1602987351008_fixture.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Revert schemas/faker/tables/cities/fixtures/1602987351008_fixture from pg
-
-BEGIN;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/tables/cities/table.sql b/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/tables/cities/table.sql
deleted file mode 100644
index 0fb485fe1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/tables/cities/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/faker/tables/cities/table from pg
-
-BEGIN;
-
-DROP TABLE faker.cities;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/tables/dictionary/fixtures/1602969089665_fixture.sql b/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/tables/dictionary/fixtures/1602969089665_fixture.sql
deleted file mode 100644
index 9ba28e011..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/tables/dictionary/fixtures/1602969089665_fixture.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Revert schemas/faker/tables/dictionary/fixtures/1602969089665_fixture from pg
-
-BEGIN;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/tables/dictionary/table.sql b/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/tables/dictionary/table.sql
deleted file mode 100644
index fbbd4a5fe..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/revert/schemas/faker/tables/dictionary/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/faker/tables/dictionary/table from pg
-
-BEGIN;
-
-DROP TABLE faker.dictionary;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/sql/pgpm-faker--0.14.0.sql b/__fixtures__/stage/extensions/@pgpm/faker/sql/pgpm-faker--0.14.0.sql
deleted file mode 100644
index 43c456195..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/sql/pgpm-faker--0.14.0.sql
+++ /dev/null
@@ -1,10404 +0,0 @@
-\echo Use "CREATE EXTENSION pgpm-faker" to load this file. \quit
-CREATE SCHEMA faker;
-
-CREATE TABLE faker.dictionary (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
- type text,
- word text
-);
-
-CREATE INDEX faker_type_idx ON faker.dictionary (type);
-
-CREATE FUNCTION faker.word_type() RETURNS text AS $EOFCODE$
-SELECT (CASE (RANDOM() * 2)::INT
- WHEN 0 THEN 'adjectives'
- WHEN 1 THEN 'colors'
- WHEN 2 THEN 'animals'
- END);
-$EOFCODE$ LANGUAGE sql;
-
-CREATE FUNCTION faker.word(wordtype text DEFAULT NULL) RETURNS text AS $EOFCODE$
-DECLARE
- vword text;
- vtype text;
-BEGIN
- IF (wordtype IS NOT NULL) THEN
- vtype = wordtype;
- ELSE
- vtype = faker.word_type();
- END IF;
-
-SELECT word FROM faker.dictionary
-WHERE type = vtype
-OFFSET floor( random() * (select count(*) from faker.dictionary WHERE type = vtype ) ) LIMIT 1
-INTO vword;
-
-RETURN vword;
-
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.word(wordtypes text[]) RETURNS text AS $EOFCODE$
-BEGIN
- RETURN faker.word(wordtypes[faker.integer(1, cardinality(wordtypes))]::text);
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.gender(gender text DEFAULT NULL) RETURNS text AS $EOFCODE$
-DECLARE
-BEGIN
- IF (gender IS NOT NULL) THEN
- RETURN gender;
- END IF;
- RETURN (CASE (RANDOM() * 1)::INT
- WHEN 0 THEN 'M'
- WHEN 1 THEN 'F'
- END);
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.username() RETURNS text AS $EOFCODE$
-DECLARE
-BEGIN
- RETURN (CASE (RANDOM() * 2)::INT
- WHEN 0 THEN faker.word() || (RANDOM() * 100)::INT
- WHEN 1 THEN faker.word() || '.' || faker.word() || (RANDOM() * 100)::INT
- WHEN 2 THEN faker.word()
- END);
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.name(gender text DEFAULT NULL) RETURNS text AS $EOFCODE$
-DECLARE
-
-BEGIN
- IF (gender IS NULL) THEN
- gender = faker.gender();
- END IF;
-
- IF (gender = 'M') THEN
- RETURN initcap(faker.word('boys'));
- ELSE
- RETURN initcap(faker.word('girls'));
- END IF;
-
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.surname() RETURNS text AS $EOFCODE$
-BEGIN
- RETURN initcap(faker.word('surname'));
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.fullname(gender text DEFAULT NULL) RETURNS text AS $EOFCODE$
-BEGIN
- RETURN initcap(faker.name(gender)) || ' ' || initcap(faker.word('surname'));
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.business() RETURNS text AS $EOFCODE$
-BEGIN
- RETURN (CASE (RANDOM() * 4)::INT
- WHEN 0 THEN array_to_string( ARRAY[faker.word('bizname'), faker.word('bizsurname') || ',', faker.word('bizsuffix')]::text[], ' ')
- WHEN 1 THEN array_to_string( ARRAY[faker.word('bizname'), faker.word('bizsurname')]::text[], ' ')
- WHEN 2 THEN array_to_string( ARRAY[faker.word('bizname'), faker.word('bizsurname')]::text[], ' ')
- WHEN 3 THEN array_to_string( ARRAY[faker.word('bizname') || faker.word('bizpostfix'), faker.word('bizsurname') ]::text[], ' ')
- WHEN 4 THEN array_to_string( ARRAY[faker.word('bizname') || faker.word('bizpostfix'), faker.word('bizsurname') || ',', faker.word('bizsuffix')]::text[], ' ')
- END);
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.city(state text DEFAULT NULL) RETURNS text AS $EOFCODE$
-DECLARE
- vcity text;
-BEGIN
-
-IF (state IS NOT NULL) THEN
-
- SELECT city FROM faker.cities
- WHERE cities.state = city.state
- OFFSET floor( random() * (select count(*) from faker.cities WHERE cities.state = city.state ) ) LIMIT 1
- INTO vcity;
-
-ELSE
-
- SELECT city FROM faker.cities
- OFFSET floor( random() * (select count(*) from faker.cities ) ) LIMIT 1
- INTO vcity;
-
-END IF;
-
-
-RETURN vcity;
-
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.zip(city text DEFAULT NULL) RETURNS int AS $EOFCODE$
-DECLARE
- vzips int[];
-BEGIN
-
-IF (city IS NOT NULL) THEN
-
- SELECT zips FROM faker.cities
- WHERE cities.city = zip.city
- OFFSET floor( random() * (select count(*) from faker.cities WHERE cities.city = zip.city ) ) LIMIT 1
- INTO vzips;
-
-ELSE
-
- SELECT zips FROM faker.cities
- OFFSET floor( random() * (select count(*) from faker.cities ) ) LIMIT 1
- INTO vzips;
-
-END IF;
-
-
-RETURN vzips[ faker.integer(1, cardinality(vzips)) ];
-
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.lnglat(x1 double precision, y1 double precision, x2 double precision, y2 double precision) RETURNS point AS $EOFCODE$
-DECLARE
- vlat float;
- vlng float;
-BEGIN
-
-RETURN Point(
- faker.float(least(x1, x2), greatest(x1, x2)),
- faker.float(least(y1, y2), greatest(y1, y2))
-);
-
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.lnglat(city text DEFAULT NULL) RETURNS point AS $EOFCODE$
-DECLARE
- vlat float;
- vlng float;
-BEGIN
-
-IF (city IS NOT NULL) THEN
- SELECT lat, lng FROM faker.cities
- WHERE cities.city = lnglat.city
- OFFSET floor( random() * (select count(*) from faker.cities WHERE cities.city = lnglat.city ) ) LIMIT 1
- INTO vlat, vlng;
-ELSE
- SELECT lat, lng FROM faker.cities
- OFFSET floor( random() * (select count(*) from faker.cities ) ) LIMIT 1
- INTO vlat, vlng;
-END IF;
-
-RETURN Point(vlng, vlat);
-
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.phone() RETURNS text AS $EOFCODE$
-BEGIN
-
- RETURN concat('+1 ',
-
- '(',
-
- array_to_string(ARRAY[
- faker.integer(0,9),
- faker.integer(0,9),
- faker.integer(0,9)
- ]::text[], ''),
-
- ') ',
-
- array_to_string(ARRAY[
- faker.integer(0,9),
- faker.integer(0,9),
- faker.integer(0,9)
- ]::text[], ''),
-
- '-',
-
- array_to_string(ARRAY[
- faker.integer(0,9),
- faker.integer(0,9),
- faker.integer(0,9),
- faker.integer(0,9)
- ]::text[], '')
-
- );
-
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.street() RETURNS text AS $EOFCODE$
-BEGIN
- RETURN faker.word('street');
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.state(state text DEFAULT NULL) RETURNS text AS $EOFCODE$
-DECLARE
- vstate text;
-BEGIN
-
-IF (state IS NULL) THEN
- SELECT distinct(c.state) FROM faker.cities c
- OFFSET floor( random() * (select count(distinct(c2.state)) from faker.cities c2 ) ) LIMIT 1
- INTO vstate;
-ELSE
- vstate = state;
-END IF;
-
-RETURN vstate;
-
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.address(state text DEFAULT NULL, city text DEFAULT NULL) RETURNS text AS $EOFCODE$
-DECLARE
- vcity text;
- vstate text;
- vstreet text;
- vstreetnum int;
- vzips int[];
- vzip int;
-BEGIN
-
-IF (state IS NULL) THEN
- vstate = faker.state();
-ELSE
- vstate = state;
-END IF;
-
-SELECT c.city, c.zips FROM faker.cities c
-WHERE c.state = vstate
-OFFSET floor( random() * (select count(*) from faker.cities WHERE cities.state = vstate ) ) LIMIT 1
-INTO vcity, vzips;
-
-vstreetnum = faker.integer(1, 3000);
-vstreet = faker.street();
-vzip = vzips[ faker.integer(1, cardinality(vzips)) ];
-
-RETURN concat(vstreetnum::text, ' ', vstreet, E'\n', vcity, ', ', vstate, ' ', vzip::text);
-
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.tags(min int DEFAULT 1, max int DEFAULT 5, dict text DEFAULT 'tag') RETURNS citext[] AS $EOFCODE$
-DECLARE
- words text[];
- lim int = faker.integer(min,max);
-BEGIN
-
-SELECT ARRAY (
- SELECT word FROM faker.dictionary
- WHERE type = dict
- OFFSET floor( random() * (select count(*) from faker.dictionary WHERE type = dict ) ) LIMIT lim
-) INTO words;
-
-RETURN words::citext[];
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.sentence(unit text DEFAULT 'word', min int DEFAULT 7, max int DEFAULT 20, cat text[] DEFAULT CAST(ARRAY['lorem'] AS text[]), period text DEFAULT '.') RETURNS text AS $EOFCODE$
-DECLARE
- num int = faker.integer(min, max);
- txt text;
- vtype text;
- n int;
- c int;
-BEGIN
-
- IF (unit = 'word') THEN
- txt = initcap(faker.word(cat));
- FOR n IN
- SELECT * FROM generate_series(1, num) g(n)
- LOOP
- txt = txt || ' ' || faker.word(cat);
- END LOOP;
- RETURN txt || period;
- ELSEIF (unit = 'char' OR unit = 'chars') THEN
- txt = initcap(faker.word(cat));
- c = char_length(txt);
- IF (c = num) THEN
- RETURN concat(txt, period);
- END IF;
- IF (c > num) THEN
- RETURN substring(txt from 1 for num) || period;
- END IF;
- WHILE (c < num)
- LOOP
- txt = txt || ' ' || faker.word(cat);
- c = char_length(txt);
- END LOOP;
- IF (c = num) THEN
- RETURN txt || period;
- END IF;
- IF (c > num) THEN
- RETURN substring(txt from 1 for num) || period;
- END IF;
- RETURN txt || period;
- END IF;
- RAISE EXCEPTION 'faker.sentence() bad input';
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.paragraph(unit text DEFAULT 'word', min int DEFAULT 7, max int DEFAULT 20, cat text[] DEFAULT CAST(ARRAY['lorem'] AS text[])) RETURNS text AS $EOFCODE$
-DECLARE
- num int = faker.integer(min, max);
- txt text;
- words text[];
- n int;
- needscaps boolean = false;
-BEGIN
- txt = faker.sentence(unit, min, max, cat, '');
- words = string_to_array(txt, ' ');
- txt = '';
-
- FOR n IN
- SELECT * FROM generate_series(1, cardinality(words)) g(n)
- LOOP
- IF (needscaps IS TRUE) THEN
- txt = concat(txt, ' ', initcap(words[n]));
- ELSE
- txt = concat(txt, ' ', words[n]);
- END IF;
-
- IF (faker.integer(1,100) > 70) THEN
- txt = txt || '.';
- needscaps = true;
- ELSE
- needscaps = false;
- END IF;
-
- END LOOP;
-
- IF (trim(txt) ~ '\.$') THEN
- RETURN trim(txt);
- ELSE
- RETURN trim(txt || '.');
- END IF;
-
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.email() RETURNS text AS $EOFCODE$
-SELECT
- faker.word() || (RANDOM() * 100)::INT || '@' || (
- CASE (RANDOM() * 3)::INT
- WHEN 0 THEN 'gmail'
- WHEN 1 THEN 'hotmail'
- WHEN 2 THEN 'yahoo'
- WHEN 3 THEN faker.word()
- END
- ) || '.com' AS email
-$EOFCODE$ LANGUAGE sql;
-
-CREATE FUNCTION faker.uuid() RETURNS uuid AS $EOFCODE$
-SELECT
- uuid_generate_v4();
-$EOFCODE$ LANGUAGE sql;
-
-CREATE FUNCTION faker.token(bytes int DEFAULT 16) RETURNS text AS $EOFCODE$
-SELECT
- encode( gen_random_bytes( bytes ), 'hex' )
-$EOFCODE$ LANGUAGE sql;
-
-CREATE FUNCTION faker.password() RETURNS text AS $EOFCODE$
-DECLARE
- chars text[] = regexp_split_to_array('!@#$%^&*():";''<>?,./~`'::text, '');
- num_special int = faker.integer(0, 4);
- n int = 0;
- pass text;
-BEGIN
-
- IF (num_special = 0) THEN
- pass = encode( gen_random_bytes( 16 ), 'hex' );
- ELSE
- pass = encode( gen_random_bytes( 4 ), 'hex' );
- FOR n IN
- SELECT * FROM generate_series(1, num_special) g(n)
- LOOP
- pass = pass ||
- encode( gen_random_bytes( faker.integer(1,4) ), 'hex' ) ||
- chars[ faker.integer(1, cardinality(chars)) ] ||
- encode( gen_random_bytes( faker.integer(1,4) ), 'hex' );
-
- END LOOP;
- END IF;
-
-
- RETURN pass;
-
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.hostname() RETURNS text AS $EOFCODE$
-SELECT
- faker.word() || '.' || (
- CASE (RANDOM() * 4)::INT
- WHEN 0 THEN 'com'
- WHEN 1 THEN 'net'
- WHEN 2 THEN 'io'
- WHEN 3 THEN 'org'
- WHEN 4 THEN 'co'
- END
- )
-$EOFCODE$ LANGUAGE sql;
-
-CREATE FUNCTION faker.time_unit() RETURNS text AS $EOFCODE$
-SELECT
- (
- CASE (RANDOM() * 5)::INT
- WHEN 0 THEN 'millisecond'
- WHEN 1 THEN 'second'
- WHEN 2 THEN 'minute'
- WHEN 3 THEN 'hour'
- WHEN 4 THEN 'day'
- WHEN 5 THEN 'week'
- END
- )
-$EOFCODE$ LANGUAGE sql;
-
-CREATE FUNCTION faker.float(min double precision DEFAULT 0, max double precision DEFAULT 100) RETURNS double precision AS $EOFCODE$
-DECLARE
- num float;
- high float;
- low float;
-BEGIN
- high = greatest(min, max);
- low = least(min, max);
- num = (RANDOM() * ( high - low )) + low;
- RETURN num;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.integer(min int DEFAULT 0, max int DEFAULT 100) RETURNS int AS $EOFCODE$
-DECLARE
- num int;
-BEGIN
- min = ceil(min);
- max = floor(max);
- num = floor(RANDOM() * ( max - min + 1 )) + min;
- RETURN num;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.date(min int DEFAULT 1, max int DEFAULT 100, future boolean DEFAULT false) RETURNS date AS $EOFCODE$
-DECLARE
- d date;
- num int = faker.integer(min, max);
-BEGIN
-IF (future) THEN
- d = now()::date + num;
-ELSE
- d = now()::date - num;
-END IF;
-RETURN d;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.birthdate(min int DEFAULT 1, max int DEFAULT 100) RETURNS date AS $EOFCODE$
-DECLARE
- d date;
- years int = faker.integer(min, max);
- days int = faker.integer(1, 365);
- itv interval;
-BEGIN
- itv = concat(years, ' years')::interval + concat(days, ' days')::interval;
- d = now()::date - itv;
- RETURN d;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.interval() RETURNS interval AS $EOFCODE$
-DECLARE
- ival text;
-BEGIN
- SELECT faker.time_unit() INTO ival;
- ival = (RANDOM() * 100)::text || ' ' || ival;
- RETURN ival::interval;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.interval(min int, max int) RETURNS interval AS $EOFCODE$
-SELECT (faker.integer(min, max)::text || ' ' || 'seconds')::interval;
-$EOFCODE$ LANGUAGE sql VOLATILE;
-
-CREATE FUNCTION faker.boolean() RETURNS boolean AS $EOFCODE$
-BEGIN
- RETURN (
- CASE (RANDOM() * 1)::INT
- WHEN 0 THEN TRUE
- WHEN 1 THEN FALSE
- END
- );
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.timestamptz(future boolean DEFAULT false) RETURNS timestamptz AS $EOFCODE$
-DECLARE
- ival interval;
- t timestamptz;
-BEGIN
- ival = faker.interval();
- IF (future) THEN
- SELECT now() + ival INTO t;
- ELSE
- SELECT now() - ival INTO t;
- END IF;
- RETURN t;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.mime() RETURNS text AS $EOFCODE$
- SELECT faker.word('mime');
-$EOFCODE$ LANGUAGE sql;
-
-CREATE FUNCTION faker.ext(mime text DEFAULT faker.mime()) RETURNS text AS $EOFCODE$
-DECLARE
- ext text;
-BEGIN
- IF (mime IS NULL) THEN
- ext = faker.word(faker.mime());
- ELSE
- ext = faker.word(mime);
- END IF;
- RETURN ext;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.image_mime() RETURNS text AS $EOFCODE$
-SELECT
- (
- CASE (RANDOM() * 3)::INT
- WHEN 0 THEN 'image/svg+xml'
- WHEN 1 THEN 'image/png'
- WHEN 2 THEN 'image/gif'
- WHEN 3 THEN 'image/jpeg'
- END
- )
-$EOFCODE$ LANGUAGE sql;
-
-CREATE FUNCTION faker.image(width int DEFAULT NULL, height int DEFAULT NULL) RETURNS image AS $EOFCODE$
-DECLARE
- w int;
- h int;
- obj jsonb = '{}'::jsonb;
- url text;
-BEGIN
- IF (width IS NULL) THEN
- w = faker.integer(800,1200);
- ELSE
- w = width;
- END IF;
- IF (height IS NULL) THEN
- h = faker.integer(800,1200);
- ELSE
- h = height;
- END IF;
-
- url = concat('https://picsum.photos/', w::text, '/', h::text);
-
- obj = jsonb_set(obj, '{url}', to_jsonb(url));
- obj = jsonb_set(obj, '{mime}', to_jsonb(faker.image_mime()));
-
- RETURN obj;
-
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.profilepic() RETURNS image AS $EOFCODE$
-DECLARE
- obj jsonb = '{}'::jsonb;
- vurl text = '';
- gndr text = 'women';
-BEGIN
- IF ((RANDOM() * 2)::INT = 0) THEN
- gndr = 'men';
- END IF;
- vurl = concat('https://randomuser.me/api/portraits/', gndr, '/', faker.integer(1, 99) , '.jpg');
- obj = jsonb_set(obj, '{url}', to_jsonb(vurl::text));
- obj = jsonb_set(obj, '{mime}', to_jsonb('image/jpeg'::text));
- RETURN obj;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.profilepic(gender text) RETURNS image AS $EOFCODE$
-DECLARE
- obj jsonb = '{}'::jsonb;
- vurl text = '';
- gndr text = 'women';
-BEGIN
- IF (gender = 'M') THEN
- gndr = 'men';
- END IF;
- vurl = concat('https://randomuser.me/api/portraits/', gndr, '/', faker.integer(1, 99) , '.jpg');
- obj = jsonb_set(obj, '{url}', to_jsonb(vurl::text));
- obj = jsonb_set(obj, '{mime}', to_jsonb('image/jpeg'::text));
- RETURN obj;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.file(mime text DEFAULT NULL) RETURNS text AS $EOFCODE$
-BEGIN
- RETURN concat(faker.word(), '.', faker.ext(mime));
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.url(mime text DEFAULT NULL) RETURNS url AS $EOFCODE$
-DECLARE
- obj jsonb = '{}'::jsonb;
- url text;
-BEGIN
- url = concat('https://', faker.hostname(), '/', faker.file(mime));
- RETURN url;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.upload(mime text DEFAULT NULL) RETURNS upload AS $EOFCODE$
-BEGIN
- RETURN faker.url(mime);
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.ip(mime text DEFAULT NULL) RETURNS text AS $EOFCODE$
-BEGIN
- RETURN
- array_to_string(ARRAY[
- faker.integer(0,255),
- faker.integer(0,255),
- faker.integer(0,255),
- faker.integer(0,255)
- ]::text[], '.');
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION faker.attachment(mime text DEFAULT NULL) RETURNS attachment AS $EOFCODE$
-BEGIN
- IF (mime IS NULL) THEN
- mime = faker.mime();
- END IF;
- RETURN faker.url(mime);
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE TABLE faker.cities (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
- city text,
- state text,
- zips int[],
- lat double precision,
- lng double precision
-);
-
-CREATE INDEX faker_city_idx1 ON faker.cities (city);
-
-CREATE INDEX faker_city_idx2 ON faker.cities (state);
-
-CREATE INDEX faker_city_idx3 ON faker.cities USING gin (zips);
-
-INSERT INTO faker.cities (
- city,
- state,
- zips,
- lat,
- lng
-) VALUES
- ('New York', 'NY', ARRAY[11226, 11225, 11224, 11222], 40.6943, -73.9249),
- ('Los Angeles', 'CA', ARRAY[90291, 90293, 90292, 91316, 91311, 90037, 90031, 90008, 90004, 90005, 90006, 90007, 90001, 90002, 90003, 90710, 90089, 91344, 91345, 91340, 91342, 91343, 90035, 90034, 90036, 90033, 90032, 90039, 90247, 90248, 91436, 91371, 91605, 91604, 91607, 91601, 91602, 90402, 90068, 90069, 90062, 90063, 90061, 90066, 90067, 90064, 90065, 91326, 91324, 91325, 90013, 90012, 90011, 90010, 90017, 90016, 90015, 90014, 90019, 90090, 90095, 90094, 91042, 91040, 91411, 91352, 91356, 90041, 90042, 90043, 90044, 90045, 90046, 90047, 90048, 90049, 90018, 91423, 90210, 91303, 91304, 91306, 91307, 90079, 90071, 90077, 90059, 91608, 91606, 91331, 91330, 91335, 90026, 90027, 90024, 90025, 90023, 90020, 90021, 90028, 90029, 90272, 90732, 90731, 90230, 91406, 91405, 91403, 91402, 91401, 91367, 91364, 90038, 90057, 90058, 90744, 90501, 90502, 90009, 90030, 90050, 90051, 90054, 90055, 90070, 90072, 90074, 90075, 90076, 90080, 90082, 90083, 90084, 90086, 90087, 90088, 90093, 90099, 90134, 90189, 90213, 90294, 90296, 90733, 90734, 90748, 91041, 91043, 91305, 91308, 91309, 91313, 91327, 91328, 91329, 91333, 91334, 91337, 91346, 91353, 91357, 91365, 91392, 91393, 91394, 91395, 91396, 91404, 91407, 91408, 91409, 91410, 91412, 91413, 91416, 91426, 91470, 91482, 91495, 91496, 91499, 91603, 91609, 91610, 91611, 91612, 91614, 91615, 91616, 91617, 91618], 34.1139, -118.4068),
- ('Chicago', 'IL', ARRAY[60649, 60641, 60640, 60643], 41.8373, -87.6862),
- ('Miami', 'FL', ARRAY[33125, 33126, 33127, 33128], 25.7839, -80.2102),
- ('Dallas', 'TX', ARRAY[75098, 75233, 75254, 75251], 32.7936, -96.7662),
- ('Philadelphia', 'PA', ARRAY[19151, 19150, 19153, 19152], 40.0077, -75.1339),
- ('Houston', 'TX', ARRAY[77068, 77061, 77060, 77063], 29.7863, -95.3889),
- ('Atlanta', 'GA', ARRAY[30331, 30332, 30309, 30308], 33.7627, -84.4224),
- ('Washington', 'DC', ARRAY[20011, 20012, 20015, 20228], 38.9047, -77.0163),
- ('Boston', 'MA', ARRAY[2121, 2122, 2124, 2125], 42.3188, -71.0846),
- ('Phoenix', 'AZ', ARRAY[85009, 85006, 85007, 85004], 33.5722, -112.0891),
- ('Seattle', 'WA', ARRAY[98108, 98104, 98107, 98106], 47.6211, -122.3244),
- ('San Francisco', 'CA', ARRAY[94131, 94132, 94133, 94134], 37.7562, -122.4430),
- ('Detroit', 'MI', ARRAY[48208, 48201, 48207, 48205], 42.3834, -83.1024),
- ('San Diego', 'CA', ARRAY[92108, 92103, 92111, 92154], 32.8312, -117.1225),
- ('Minneapolis', 'MN', ARRAY[55409, 55408, 55407, 55406], 44.9635, -93.2678),
- ('Tampa', 'FL', ARRAY[33629, 33621, 33620, 33619], 27.9942, -82.4451),
- ('Denver', 'CO', ARRAY[80230, 80231, 80236, 80237], 39.7621, -104.8759),
- ('Brooklyn', 'NY', ARRAY[11213, 11216, 11233, 11238], 40.6501, -73.9496),
- ('Queens', 'NY', ARRAY[11362, 11363, 11364, 11354], 40.7498, -73.7976),
- ('Riverside', 'CA', ARRAY[92503, 92501, 92505, 92504], 33.9381, -117.3948),
- ('Baltimore', 'MD', ARRAY[21211, 21210, 21213, 21212], 39.3051, -76.6144),
- ('Las Vegas', 'NV', ARRAY[89106, 89104, 89102, 89101], 36.2333, -115.2654),
- ('Portland', 'OR', ARRAY[97221, 97220, 97229, 97203], 45.5372, -122.6500),
- ('San Antonio', 'TX', ARRAY[78259, 78258, 78252, 78251], 29.4658, -98.5253),
- ('St. Louis', 'MO', ARRAY[63111, 63112, 63113, 63115], 38.6358, -90.2451),
- ('Sacramento', 'CA', ARRAY[95838, 95832, 95833, 95831], 38.5667, -121.4683),
- ('Orlando', 'FL', ARRAY[32827, 32824, 32822, 32804], 28.4772, -81.3369),
- ('San Jose', 'CA', ARRAY[95128, 95124, 95125, 95123], 37.3019, -121.8486),
- ('Cleveland', 'OH', ARRAY[44128, 44119, 44113, 44112], 41.4767, -81.6804),
- ('Pittsburgh', 'PA', ARRAY[15217, 15214, 15212, 15213], 40.4396, -79.9762),
- ('Austin', 'TX', ARRAY[78748, 78741, 78742, 78745], 30.3004, -97.7522),
- ('Cincinnati', 'OH', ARRAY[45213, 45212, 45211, 45217], 39.1413, -84.5061),
- ('Kansas City', 'MO', ARRAY[64163, 64165, 64167, 64053], 39.1239, -94.5541),
- ('Manhattan', 'NY', ARRAY[10027, 10030, 10037, 10039], 40.7834, -73.9662),
- ('Indianapolis', 'IN', ARRAY[46219, 46217, 46214, 46260], 39.7771, -86.1458),
- ('Columbus', 'OH', ARRAY[43109, 43054, 43220, 43221], 39.9862, -82.9850),
- ('Charlotte', 'NC', ARRAY[28262, 28105, 28280, 28282], 35.2080, -80.8304),
- ('Virginia Beach', 'VA', ARRAY[23451, 23453, 23452, 23455], 36.7335, -76.0435),
- ('Bronx', 'NY', ARRAY[10457, 10460, 10458, 10467], 40.8501, -73.8662),
- ('Milwaukee', 'WI', ARRAY[53202, 53207, 53206, 53205], 43.0642, -87.9673),
- ('Providence', 'RI', ARRAY[2906, 2907, 2905, 2908], 41.8230, -71.4187),
- ('Jacksonville', 'FL', ARRAY[32225, 32226, 32227, 32220], 30.3322, -81.6749),
- ('Salt Lake City', 'UT', ARRAY[84115, 84113, 84112, 84111], 40.7777, -111.9306),
- ('Nashville', 'TN', ARRAY[37138, 37076, 37072, 37205], 36.1715, -86.7843),
- ('Richmond', 'VA', ARRAY[23223, 23220, 23221, 23226], 37.5295, -77.4756),
- ('Memphis', 'TN', ARRAY[38127, 38107, 38106, 38105], 35.1046, -89.9773),
- ('Raleigh', 'NC', ARRAY[27616, 27615, 27614, 27613], 35.8325, -78.6435),
- ('New Orleans', 'LA', ARRAY[70130, 70131, 70114, 70115], 30.0687, -89.9288),
- ('Louisville', 'KY', ARRAY[40245, 40241, 40218, 40219], 38.1663, -85.6485),
- ('Oklahoma City', 'OK', ARRAY[73013, 73099, 73097, 73119], 35.4676, -97.5136),
- ('Bridgeport', 'CT', ARRAY[6604, 6607, 6606, 6608], 41.1918, -73.1953),
- ('Buffalo', 'NY', ARRAY[14209, 14202, 14203, 14201], 42.9016, -78.8487),
- ('Fort Worth', 'TX', ARRAY[76040, 76134, 76135, 76137], 32.7811, -97.3473),
- ('Hartford', 'CT', ARRAY[6105, 6103, 6120, 6112], 41.7661, -72.6834),
- ('Tucson', 'AZ', ARRAY[85707, 85706, 85756, 85723], 32.1545, -110.8782),
- ('Omaha', 'NE', ARRAY[68117, 68118, 68107, 68104], 41.2627, -96.0522),
- ('El Paso', 'TX', ARRAY[79902, 79903, 79904, 79905], 31.8479, -106.4309),
- ('Honolulu', 'HI', ARRAY[96850, 96822, 96826, 96813], 21.3294, -157.8460),
- ('McAllen', 'TX', ARRAY[78504, 78503, 78501, 78502], 26.2273, -98.2471),
- ('Albuquerque', 'NM', ARRAY[87120, 87123, 87112, 87113], 35.1053, -106.6464),
- ('Birmingham', 'AL', ARRAY[35214, 35215, 35217, 35210], 33.5277, -86.7987),
- ('Sarasota', 'FL', ARRAY[34234, 34237, 34236, 34239], 27.3386, -82.5431),
- ('Dayton', 'OH', ARRAY[45402, 45403, 45406, 45404], 39.7797, -84.1998),
- ('Rochester', 'NY', ARRAY[14609, 14606, 14604, 14605], 43.1680, -77.6162),
- ('Fresno', 'CA', ARRAY[93650, 93702, 93703, 93701], 36.7831, -119.7941),
- ('Allentown', 'PA', ARRAY[18104, 18101, 18103, 18102], 40.5961, -75.4756),
- ('Tulsa', 'OK', ARRAY[74134, 74135, 74132, 74130], 36.1284, -95.9042),
- ('Cape Coral', 'FL', ARRAY[33990, 33993, 33914, 33909], 26.6446, -81.9956),
- ('Concord', 'CA', ARRAY[94519, 94521, 94520, 94522], 37.9722, -122.0016),
- ('Colorado Springs', 'CO', ARRAY[80909, 80904, 80905, 80906], 38.8674, -104.7606),
- ('Charleston', 'SC', ARRAY[29424, 29455, 29407, 29401], 32.8153, -79.9628),
- ('Springfield', 'MA', ARRAY[1118, 1119, 1199, 1129], 42.1155, -72.5395),
- ('Grand Rapids', 'MI', ARRAY[49507, 49506, 49505, 49504], 42.9620, -85.6562),
- ('Mission Viejo', 'CA', ARRAY[92691], 33.6095, -117.6550),
- ('Albany', 'NY', ARRAY[12209, 12204, 12206, 12207], 42.6664, -73.7987),
- ('Knoxville', 'TN', ARRAY[37912, 37909, 37902, 37924], 35.9692, -83.9496),
- ('Bakersfield', 'CA', ARRAY[93307, 93304, 93305, 93301], 35.3529, -119.0359),
- ('Ogden', 'UT', ARRAY[84401, 84403, 84201, 84244], 41.2278, -111.9682),
- ('Baton Rouge', 'LA', ARRAY[70808, 70809, 70802, 70803], 30.4418, -91.1310),
- ('Akron', 'OH', ARRAY[44307, 44304, 44305, 44302], 41.0798, -81.5219),
- ('New Haven', 'CT', ARRAY[6511, 6510, 6513, 6512], 41.3112, -72.9246),
- ('Columbia', 'SC', ARRAY[29203, 29205, 29201, 29207], 34.0376, -80.9037),
- ('Mesa', 'AZ', ARRAY[85209, 85201, 85202, 85203], 33.4017, -111.7180),
- ('Palm Bay', 'FL', ARRAY[32905, 32907, 32976, 32948], 27.9550, -80.6627),
- ('Provo', 'UT', ARRAY[84606, 84601, 84603, 84605], 40.2457, -111.6457),
- ('Worcester', 'MA', ARRAY[1608, 1609, 1602, 1603], 42.2705, -71.8079),
- ('Murrieta', 'CA', ARRAY[92562, 92564], 33.5720, -117.1909),
- ('Greenville', 'SC', ARRAY[29607, 29605, 29601, 29609], 34.8353, -82.3647),
- ('Wichita', 'KS', ARRAY[67235, 67260, 67217, 67216], 37.6896, -97.3442),
- ('Toledo', 'OH', ARRAY[43611, 43613, 43612, 43614], 41.6639, -83.5822),
- ('Staten Island', 'NY', ARRAY[10303, 10310, 10306, 10307], 40.5834, -74.1496),
- ('Des Moines', 'IA', ARRAY[50312, 50314, 50316, 50317], 41.5725, -93.6105),
- ('Long Beach', 'CA', ARRAY[90804, 90805, 90806, 90807], 33.7981, -118.1675),
- ('Port St. Lucie', 'FL', ARRAY[34984, 34983, 34987, 34952], 27.2796, -80.3883),
- ('Denton', 'TX', ARRAY[76205, 76201, 76208, 76209], 33.2176, -97.1419),
- ('Madison', 'WI', ARRAY[53704, 53705, 53703, 53726], 43.0826, -89.3931),
- ('Reno', 'NV', ARRAY[89523, 89439, 89503, 89502], 39.5497, -119.8483),
- ('Harrisburg', 'PA', ARRAY[17102, 17103, 17104, 17120], 40.2752, -76.8843),
- ('Little Rock', 'AR', ARRAY[72210, 72212, 72223, 72209], 34.7256, -92.3576),
- ('Oakland', 'CA', ARRAY[94705, 94704, 94611, 94610], 37.7903, -122.2165),
- ('Durham', 'NC', ARRAY[27705, 27704, 27707, 27701], 35.9794, -78.9031),
- ('Winston-Salem', 'NC', ARRAY[27127, 27040, 27107, 27106], 36.1029, -80.2611),
- ('Bonita Springs', 'FL', ARRAY[34134, 34135, 34136], 26.3559, -81.7861),
- ('Indio', 'CA', ARRAY[92201, 92203, 92202], 33.7346, -116.2346),
- ('Palm Coast', 'FL', ARRAY[32136, 32137, 32135, 32142], 29.5392, -81.2460),
- ('Chattanooga', 'TN', ARRAY[37416, 37410, 37411, 37419], 35.0657, -85.2488),
- ('Spokane', 'WA', ARRAY[99203, 99202, 99205, 99204], 47.6671, -117.4330),
- ('Syracuse', 'NY', ARRAY[13214, 13290, 13224, 13207], 43.0409, -76.1438),
- ('Lancaster', 'PA', ARRAY[17602, 17601, 17604, 17607], 40.0421, -76.3012),
- ('Arlington', 'TX', ARRAY[76006, 76001, 76002, 76018], 32.6998, -97.1250),
- ('Stockton', 'CA', ARRAY[95212, 95210, 95211, 95209], 37.9765, -121.3109),
- ('Poughkeepsie', 'NY', ARRAY[12603, 12602], 41.6949, -73.9210),
- ('Augusta', 'GA', ARRAY[30815, 30812, 30907, 30906], 33.3645, -82.0708),
- ('Boise', 'ID', ARRAY[83702, 83705, 83704, 83709], 43.6007, -116.2312),
- ('Oxnard', 'CA', ARRAY[93036, 93030, 93033, 93031], 34.1963, -119.1815),
- ('Scranton', 'PA', ARRAY[18508, 18510, 18503, 18505], 41.4044, -75.6649),
- ('Modesto', 'CA', ARRAY[95356, 95355, 95354, 95351], 37.6374, -121.0028),
- ('Kissimmee', 'FL', ARRAY[34743, 34744, 34746, 34742], 28.3042, -81.4164),
- ('Aurora', 'CO', ARRAY[80137, 80045, 80018, 80019], 39.7087, -104.7273),
- ('Youngstown', 'OH', ARRAY[44503, 44504, 44505, 44506], 41.0993, -80.6463),
- ('Fayetteville', 'AR', ARRAY[72703, 72701], 36.0713, -94.1660),
- ('Anaheim', 'CA', ARRAY[92806, 92807, 92804, 92805], 33.8390, -117.8572),
- ('Pensacola', 'FL', ARRAY[32504, 32503, 32502, 32513], 30.4427, -87.1886),
- ('Victorville', 'CA', ARRAY[92395, 92392, 92393], 34.5277, -117.3536),
- ('Lancaster', 'CA', ARRAY[93534, 93536, 93539, 93584], 34.6935, -118.1753),
- ('Greensboro', 'NC', ARRAY[27455, 27214, 27408, 27409], 36.0956, -79.8269),
- ('Corpus Christi', 'TX', ARRAY[78408, 78409, 78406, 78407], 27.7260, -97.3755),
- ('Fort Wayne', 'IN', ARRAY[46845, 46818, 46814, 46815], 41.0886, -85.1437),
- ('Santa Ana', 'CA', ARRAY[92701, 92705, 92704, 92707], 33.7366, -117.8819),
- ('Flint', 'MI', ARRAY[48551, 48504, 48505, 48506], 43.0235, -83.6922),
- ('San Juan', 'PR', ARRAY[913, 911, 917, 915], 18.4037, -66.0636),
- ('Fayetteville', 'NC', ARRAY[28305, 28306, 28307, 28301], 35.0846, -78.9776),
- ('Jackson', 'MS', ARRAY[39206, 39204, 39203, 39202], 32.3163, -90.2124),
- ('Santa Rosa', 'CA', ARRAY[95409, 95403, 95401, 95407], 38.4458, -122.7067),
- ('Lansing', 'MI', ARRAY[48915, 48912, 48911, 48910], 42.7142, -84.5601),
- ('Ann Arbor', 'MI', ARRAY[48104, 48105, 48108, 48109], 42.2755, -83.7312),
- ('Henderson', 'NV', ARRAY[89052, 89002, 89074, 89015], 36.0133, -115.0380),
- ('Huntsville', 'AL', ARRAY[35803, 35802, 35805, 35806], 34.6988, -86.6412),
- ('Lexington', 'KY', ARRAY[40506, 40508, 40509, 40504], 38.0423, -84.4587),
- ('Mobile', 'AL', ARRAY[36607, 36604, 36605, 36602], 30.6783, -88.1162),
- ('Fort Collins', 'CO', ARRAY[80528, 80526, 80524, 80525], 40.5478, -105.0656),
- ('Asheville', 'NC', ARRAY[28805, 28804, 28803, 28801], 35.5704, -82.5536),
- ('Santa Clarita', 'CA', ARRAY[91351, 91350, 91355, 91354], 34.4175, -118.4964),
- ('St. Paul', 'MN', ARRAY[55117, 55116, 55119, 55130], 44.9477, -93.1040),
- ('Antioch', 'CA', ARRAY[94509], 37.9789, -121.7958),
- ('Lakeland', 'FL', ARRAY[33803, 33801, 33805, 33815], 28.0556, -81.9545),
- ('Trenton', 'NJ', ARRAY[8611, 8618, 8629, 8609], 40.2236, -74.7641),
- ('Lincoln', 'NE', ARRAY[68524, 68526, 68520, 68521], 40.8090, -96.6788),
- ('Springfield', 'MO', ARRAY[65802, 65803, 65804, 65806], 37.1943, -93.2916),
- ('Plano', 'TX', ARRAY[75023, 75025, 75024, 75074], 33.0502, -96.7487),
- ('Irvine', 'CA', ARRAY[92614, 92612, 92618, 92620], 33.6772, -117.7738),
- ('Davenport', 'IA', ARRAY[52803, 52801, 52806, 52807], 41.5563, -90.6052),
- ('Rockford', 'IL', ARRAY[61109, 61108, 61104, 61107], 42.2597, -89.0641),
- ('Newark', 'NJ', ARRAY[7102, 7105, 7104, 7107], 40.7245, -74.1725),
- ('South Bend', 'IN', ARRAY[46635, 46628, 46616, 46614], 41.6767, -86.2696),
- ('Shreveport', 'LA', ARRAY[71101, 71103, 71104, 71105], 32.4656, -93.7956),
- ('Savannah', 'GA', ARRAY[31409, 31408, 31401, 31405], 32.0281, -81.1784),
- ('Myrtle Beach', 'SC', ARRAY[29577], 33.7096, -78.8843),
- ('Chula Vista', 'CA', ARRAY[91910, 91913, 91915, 91914], 32.6281, -117.0145),
- ('Eugene', 'OR', ARRAY[97404, 97401, 97403, 97402], 44.0563, -123.1173),
- ('Canton', 'OH', ARRAY[44710, 44702, 44703, 44706], 40.8075, -81.3677),
- ('Lubbock', 'TX', ARRAY[79423, 79424, 79416, 79412], 33.5659, -101.8878),
- ('Reading', 'PA', ARRAY[19601, 19602, 19611, 19603], 40.3400, -75.9267),
- ('Winter Haven', 'FL', ARRAY[33880, 33884, 33882, 33883], 28.0118, -81.7017),
- ('Salem', 'OR', ARRAY[97301, 97306, 97304, 97317], 44.9231, -123.0246),
- ('St. Petersburg', 'FL', ARRAY[33702, 33762, 33713, 33712], 27.7931, -82.6652),
- ('Lafayette', 'LA', ARRAY[70507, 70506, 70503, 70501], 30.2084, -92.0323),
- ('Laredo', 'TX', ARRAY[78045, 78043, 78040, 78041], 27.5629, -99.4875),
- ('Jersey City', 'NJ', ARRAY[7311, 7302, 7307, 7306], 40.7161, -74.0682),
- ('Concord', 'NC', ARRAY[28027, 28026], 35.3933, -80.6366),
- ('Columbus', 'GA', ARRAY[31820, 31909, 31904, 31905], 32.5100, -84.8771),
- ('Chandler', 'AZ', ARRAY[85249, 85226, 85224, 85225], 33.2826, -111.8516),
- ('McKinney', 'TX', ARRAY[75070, 75071, 75072], 33.2015, -96.6669),
- ('Scottsdale', 'AZ', ARRAY[85258, 85251, 85250, 85257], 33.6872, -111.8651),
- ('Killeen', 'TX', ARRAY[76543, 76542, 76549, 76540], 31.0754, -97.7296),
- ('Tallahassee', 'FL', ARRAY[32312, 32399, 32304, 32303], 30.4551, -84.2526),
- ('Peoria', 'IL', ARRAY[61606, 61615, 61614, 61605], 40.7520, -89.6153),
- ('Wilmington', 'NC', ARRAY[28401, 28405, 28403, 28412], 34.2100, -77.8866),
- ('Montgomery', 'AL', ARRAY[36112, 36113, 36110, 36111], 32.3473, -86.2666),
- ('Gilbert', 'AZ', ARRAY[85234, 85297, 85296, 85295], 33.3101, -111.7463),
- ('Glendale', 'AZ', ARRAY[85303, 85302, 85304, 85306], 33.5791, -112.2311),
- ('North Las Vegas', 'NV', ARRAY[89031, 89030, 89086, 89084], 36.2880, -115.0901),
- ('Anchorage', 'AK', ARRAY[99515, 99517, 99516, 99513], 61.1508, -149.1091),
- ('Chesapeake', 'VA', ARRAY[23324, 23323, 23322, 23321], 36.6778, -76.3024),
- ('Barnstable Town', 'MA', ARRAY[2637, 2630, 2632, 2601], 41.6722, -70.3599),
- ('Norfolk', 'VA', ARRAY[23508, 23507, 23504, 23503], 36.8945, -76.2590),
- ('Fremont', 'CA', ARRAY[94538, 94539, 94555, 94537], 37.5265, -121.9852),
- ('Kennewick', 'WA', ARRAY[99336, 99338], 46.1978, -119.1732),
- ('Garland', 'TX', ARRAY[75041, 75040, 75043, 75042], 32.9100, -96.6305),
- ('Irving', 'TX', ARRAY[75061, 75060, 75038, 75039], 32.8584, -96.9702),
- ('Visalia', 'CA', ARRAY[93291, 93292, 93278, 93279], 36.3276, -119.3269),
- ('Atlantic City', 'NJ', ARRAY[8404, 8405], 39.3797, -74.4527),
- ('Nashua', 'NH', ARRAY[3063, 3060, 3064, 3061], 42.7491, -71.4910),
- ('Paradise', 'NV', ARRAY[89102, 89109, 89183, 89169], 36.0807, -115.1369),
- ('Hialeah', 'FL', ARRAY[33016, 33010, 33012, 33013], 25.8696, -80.3046),
- ('York', 'PA', ARRAY[17401, 17403], 39.9651, -76.7315),
- ('Arlington', 'VA', ARRAY[22203, 22202, 22201, 22207], 38.8786, -77.1011),
- ('Evansville', 'IN', ARRAY[47714, 47715, 47710, 47711], 37.9881, -87.5341),
- ('Avondale', 'AZ', ARRAY[85392, 85039], 33.3858, -112.3236),
- ('Brownsville', 'TX', ARRAY[78520, 78526, 78575, 78578], 25.9980, -97.4565),
- ('Gulfport', 'MS', ARRAY[39503, 39507, 39502, 39505], 30.4271, -89.0703),
- ('Appleton', 'WI', ARRAY[54915, 54913, 54911, 54912], 44.2779, -88.3891),
- ('Bremerton', 'WA', ARRAY[98314, 98310, 98367, 98337], 47.5436, -122.7122),
- ('Hickory', 'NC', ARRAY[28602, 28603], 35.7425, -81.3230),
- ('Tacoma', 'WA', ARRAY[98421, 98402, 98403, 98404], 47.2431, -122.4531),
- ('San Bernardino', 'CA', ARRAY[92407, 92405, 92408, 92404], 34.1417, -117.2946),
- ('College Station', 'TX', ARRAY[77840, 77841, 77842, 77843], 30.5852, -96.2960),
- ('Kalamazoo', 'MI', ARRAY[49006, 49007, 49008, 49074], 42.2749, -85.5882),
- ('Thousand Oaks', 'CA', ARRAY[91360, 91361, 91362, 91319], 34.1914, -118.8755),
- ('Roanoke', 'VA', ARRAY[24015, 24016, 24017, 24011], 37.2785, -79.9580),
- ('Fontana', 'CA', ARRAY[92336, 92337, 92331, 92334], 34.0968, -117.4599),
- ('Moreno Valley', 'CA', ARRAY[92553, 92555, 92557, 92554], 33.9244, -117.2045),
- ('North Port', 'FL', ARRAY[34287, 34288, 34289, 34293], 27.0577, -82.1975),
- ('Fargo', 'ND', ARRAY[58104, 58103, 58105, 58106], 46.8652, -96.8292),
- ('Green Bay', 'WI', ARRAY[54302, 54304, 54303, 54301], 44.5150, -87.9896),
- ('Amarillo', 'TX', ARRAY[79109, 79101, 79102, 79103], 35.1988, -101.8311),
- ('Portland', 'ME', ARRAY[4102, 4103, 4108, 4019], 43.6773, -70.2715),
- ('Santa Barbara', 'CA', ARRAY[93101, 93103, 93109, 93102], 34.4285, -119.7202),
- ('Gainesville', 'FL', ARRAY[32607, 32612, 32653, 32608], 29.6804, -82.3458),
- ('Olympia', 'WA', ARRAY[98502, 98506, 98504, 98507], 47.0417, -122.8959),
- ('Frisco', 'TX', ARRAY[75035, 75033, 75036], 33.1555, -96.8215),
- ('Yonkers', 'NY', ARRAY[10703, 10701, 10705, 10704], 40.9466, -73.8674),
- ('Norwich', 'CT', ARRAY[6389, 6360], 41.5495, -72.0882),
- ('Spring Valley', 'NV', ARRAY[89147, 89146, 89148, 89113], 36.0987, -115.2619),
- ('Glendale', 'CA', ARRAY[91214, 91046, 91201, 91204], 34.1818, -118.2468),
- ('Huntington Beach', 'CA', ARRAY[92647, 92648, 92649, 90742], 33.6960, -118.0025),
- ('Deltona', 'FL', ARRAY[32738, 32728, 32739], 28.9050, -81.2137),
- ('Aurora', 'IL', ARRAY[60504, 60505, 60502, 60503], 41.7637, -88.2901),
- ('Tempe', 'AZ', ARRAY[85282, 85283, 85284, 85252], 33.3881, -111.9318),
- ('Overland Park', 'KS', ARRAY[66210, 66211, 66212, 66213], 38.8870, -94.6870),
- ('Grand Prairie', 'TX', ARRAY[75050, 75051, 75054, 75053], 32.6872, -97.0209),
- ('Sunrise Manor', 'NV', ARRAY[89142, 89110, 89115, 89156], 36.1785, -115.0490),
- ('Waco', 'TX', ARRAY[76710, 76711, 76712, 76708], 31.5598, -97.1881),
- ('Salinas', 'CA', ARRAY[93905, 93906, 93902, 93915], 36.6884, -121.6317),
- ('Waterbury', 'CT', ARRAY[6702, 6704, 6706, 6705], 41.5583, -73.0361),
- ('Clarksville', 'TN', ARRAY[37043, 37042, 37040, 37044], 36.5695, -87.3420),
- ('Cedar Rapids', 'IA', ARRAY[52405, 52402, 52401, 52411], 41.9665, -91.6782),
- ('Sioux Falls', 'SD', ARRAY[57104, 57105, 57106, 57107], 43.5397, -96.7320),
- ('Huntington', 'WV', ARRAY[25702, 25701, 25705, 25704], 38.4109, -82.4344),
- ('Ontario', 'CA', ARRAY[91761, 91764, 91743, 91758], 34.0393, -117.6064),
- ('Hagerstown', 'MD', ARRAY[21742, 21741, 21747, 21749], 39.6401, -77.7217),
- ('Erie', 'PA', ARRAY[16510, 16511, 16508, 16502], 42.1168, -80.0733),
- ('Vancouver', 'WA', ARRAY[98664, 98665, 98660, 98661], 45.6366, -122.5967),
- ('Nampa', 'ID', ARRAY[83686, 83687], 43.5845, -116.5631),
- ('Spartanburg', 'SC', ARRAY[29301, 29307, 29306, 29305], 34.9437, -81.9257),
- ('Gastonia', 'NC', ARRAY[28056, 28052, 28053, 28055], 35.2494, -81.1853),
- ('Fort Lauderdale', 'FL', ARRAY[33304, 33305, 33306, 33308], 26.1412, -80.1464),
- ('Lorain', 'OH', ARRAY[44053, 44055], 41.4409, -82.1840),
- ('Murfreesboro', 'TN', ARRAY[37130, 37129, 37128, 37127], 35.8492, -86.4119),
- ('High Point', 'NC', ARRAY[27235, 27262, 27263, 27265], 35.9907, -79.9938),
- ('Newport News', 'VA', ARRAY[23603, 23608, 23604, 23605], 37.1051, -76.5185),
- ('Rancho Cucamonga', 'CA', ARRAY[91701, 91739, 91737, 91729], 34.1248, -117.5666),
- ('Hemet', 'CA', ARRAY[92543], 33.7341, -116.9969),
- ('Santa Cruz', 'CA', ARRAY[95064, 95060, 95062, 95061], 36.9789, -122.0346),
- ('Danbury', 'CT', ARRAY[6811, 6813, 96810], 41.4016, -73.4710),
- ('Peoria', 'AZ', ARRAY[85383, 85382, 85373, 85345], 33.7844, -112.2989),
- ('Oceanside', 'CA', ARRAY[92057, 92058, 92056, 92049], 33.2247, -117.3083),
- ('Elk Grove', 'CA', ARRAY[95758, 95624, 94624, 95759], 38.4160, -121.3842),
- ('Pembroke Pines', 'FL', ARRAY[33028, 33024, 33026, 33023], 26.0128, -80.3382),
- ('Vallejo', 'CA', ARRAY[94590, 94591, 94589], 38.1133, -122.2358),
- ('Garden Grove', 'CA', ARRAY[92843, 92840, 92841, 92845], 33.7787, -117.9601),
- ('Medford', 'OR', ARRAY[97501], 42.3372, -122.8537),
- ('Cary', 'NC', ARRAY[27511, 27518, 27519, 27513], 35.7820, -78.8191),
- ('Marysville', 'WA', ARRAY[98270], 48.0809, -122.1561),
- ('Corona', 'CA', ARRAY[92880, 92881, 92879, 92877], 33.8616, -117.5649),
- ('Ocala', 'FL', ARRAY[34474, 34471, 34470], 29.1780, -82.1511),
- ('Fredericksburg', 'VA', ARRAY[22403, 22412], 38.2992, -77.4872),
- ('Gainesville', 'GA', ARRAY[30507, 30504], 34.2903, -83.8301),
- ('Bayamón', 'PR', ARRAY[957, 956, 934, 960], 18.3793, -66.1635),
- ('Enterprise', 'NV', ARRAY[89183, 89054, 89139, 89141], 36.0164, -115.2208),
- ('Manchester', 'NH', ARRAY[3104, 3101, 3103, 3102], 42.9848, -71.4447),
- ('Champaign', 'IL', ARRAY[61820, 61821, 61824, 61825], 40.1144, -88.2735),
- ('Alexandria', 'VA', ARRAY[22301, 22304, 22305, 22311], 38.8185, -77.0861),
- ('Hayward', 'CA', ARRAY[94542, 94545, 94544, 94543], 37.6328, -122.0772),
- ('Springfield', 'IL', ARRAY[62712, 62702, 62703, 62701], 39.7710, -89.6538),
- ('Lakewood', 'CO', ARRAY[80232, 80235, 80214, 80215], 39.6977, -105.1168),
- ('Lafayette', 'IN', ARRAY[47905, 47904, 47901, 47902], 40.3990, -86.8594),
- ('Frederick', 'MD', ARRAY[21703, 21702, 21701, 21709], 39.4336, -77.4141),
- ('Lake Charles', 'LA', ARRAY[70607, 70601, 70615, 70602], 30.2012, -93.2122),
- ('Odessa', 'TX', ARRAY[79762, 79763, 79765, 79768], 31.8831, -102.3406),
- ('Tuscaloosa', 'AL', ARRAY[35476, 35405, 35404, 35406], 33.2348, -87.5267),
- ('Warner Robins', 'GA', ARRAY[31005, 31093, 31099], 32.5970, -83.6529),
- ('Palmdale', 'CA', ARRAY[93550, 93591, 93551, 93590], 34.5944, -118.1057),
- ('Hollywood', 'FL', ARRAY[33024, 33023, 33021, 33020], 26.0294, -80.1679),
- ('Midland', 'TX', ARRAY[79706, 79707, 79705, 79703], 32.0249, -102.1137),
- ('Leesburg', 'FL', ARRAY[34762, 34736, 34749, 34789], 28.7657, -81.8996),
- ('Port Arthur', 'TX', ARRAY[77640, 77642, 77611, 77641], 29.8554, -93.9264),
- ('Muskegon', 'MI', ARRAY[49440, 49441, 49443], 43.2281, -86.2563),
- ('Macon', 'GA', ARRAY[31052, 31210, 31211, 31213], 32.8065, -83.6974),
- ('Kansas City', 'KS', ARRAY[66102, 66103, 66104, 66105], 39.1234, -94.7443),
- ('Sunnyvale', 'CA', ARRAY[94089, 94085, 94086, 94087], 37.3836, -122.0256),
- ('Pomona', 'CA', ARRAY[91767, 91768, 91769], 34.0585, -117.7626),
- ('Escondido', 'CA', ARRAY[92025, 92026, 92027, 92030], 33.1347, -117.0722),
- ('Pasadena', 'TX', ARRAY[77059, 77586, 77506, 77507], 29.6583, -95.1499),
- ('New Bedford', 'MA', ARRAY[2744, 2745, 2746, 2741], 41.6697, -70.9428),
- ('Fairfield', 'CA', ARRAY[94533, 94534, 94535], 38.2592, -122.0324),
- ('Naperville', 'IL', ARRAY[60563, 60564, 60565, 60566], 41.7483, -88.1657),
- ('Bellevue', 'WA', ARRAY[98005, 98006, 98007, 98008], 47.5951, -122.1535),
- ('Binghamton', 'NY', ARRAY[13905, 13901, 13903], 42.1014, -75.9093),
- ('Elkhart', 'IN', ARRAY[46517, 46516, 46515], 41.6916, -85.9628),
- ('Topeka', 'KS', ARRAY[66622, 66609, 66608, 66607], 39.0346, -95.6955),
- ('Joliet', 'IL', ARRAY[60586, 60432, 60433, 60431], 41.5189, -88.1499),
- ('Beaumont', 'TX', ARRAY[77705, 77706, 77707, 77701], 30.0849, -94.1451),
- ('Paterson', 'NJ', ARRAY[7522, 7514, 7513, 7505], 40.9147, -74.1624),
- ('Merced', 'CA', ARRAY[95340, 95341, 98348], 37.3057, -120.4778),
- ('Pueblo', 'CO', ARRAY[81005, 81003, 81001, 81008], 38.2705, -104.6112),
- ('Tyler', 'TX', ARRAY[75702, 75703, 75701, 75710], 32.3184, -95.3062),
- ('Torrance', 'CA', ARRAY[90501, 90503, 90505, 90504], 33.8346, -118.3417),
- ('Metairie', 'LA', ARRAY[70003, 70001, 70006, 70005], 29.9977, -90.1780),
- ('Yuma', 'AZ', ARRAY[85364], 32.5992, -114.5488),
- ('Surprise', 'AZ', ARRAY[85379, 85388, 85387, 85374], 33.6800, -112.4524),
- ('Columbia', 'MO', ARRAY[65203, 65201, 65215, 65205], 38.9478, -92.3256),
- ('Athens', 'GA', ARRAY[30601, 30602, 30605, 30606], 33.9508, -83.3689),
- ('Roseville', 'CA', ARRAY[95747, 95678], 38.7703, -121.3196),
- ('Thornton', 'CO', ARRAY[80233, 80241, 80602, 80640], 39.9197, -104.9438),
- ('Miramar', 'FL', ARRAY[33023, 33027, 33025], 25.9773, -80.3351),
- ('Pasadena', 'CA', ARRAY[91106, 91107, 91105, 91103], 34.1597, -118.1390),
- ('Mesquite', 'TX', ARRAY[75150, 75181, 75185], 32.7623, -96.5889),
- ('Santa Maria', 'CA', ARRAY[93455, 93458], 34.9334, -120.4432),
- ('Olathe', 'KS', ARRAY[66061, 66051, 66063], 38.8832, -94.8198),
- ('Houma', 'LA', ARRAY[70360, 70361], 29.5799, -90.7058),
- ('Carolina', 'PR', ARRAY[987, 982, 983, 985], 18.4054, -65.9792),
- ('Carrollton', 'TX', ARRAY[75006, 75010, 75011], 32.9890, -96.8999),
- ('Grand Junction', 'CO', ARRAY[81504, 81507, 81506, 81501], 39.0876, -108.5673),
- ('Charleston', 'WV', ARRAY[25304, 25303, 25302, 25301], 38.3484, -81.6323),
- ('Orange', 'CA', ARRAY[92869, 92866, 92867, 92865], 33.8038, -117.8218),
- ('Fullerton', 'CA', ARRAY[92831, 92835, 92832, 92834], 33.8841, -117.9279),
- ('Greeley', 'CO', ARRAY[80631, 80632, 80633, 80638], 40.4151, -104.7706),
- ('Las Cruces', 'NM', ARRAY[88011, 88005, 88007, 88001], 32.3265, -106.7892),
- ('Panama City', 'FL', ARRAY[32405, 32404, 32402, 32406], 30.1995, -85.6004),
- ('Harlingen', 'TX', ARRAY[78552, 78522], 26.1917, -97.6976),
- ('West Valley City', 'UT', ARRAY[84120, 84128, 84118, 84125], 40.6889, -112.0115),
- ('Hampton', 'VA', ARRAY[23651, 23605, 23669, 23661], 37.0551, -76.3630),
- ('Warren', 'MI', ARRAY[48092, 48091, 48089, 48088], 42.4934, -83.0270),
- ('Mauldin', 'SC', ARRAY[29607], 34.7849, -82.3005),
- ('Bloomington', 'IL', ARRAY[61705, 61704, 61702, 61709], 40.4757, -88.9703),
- ('Coral Springs', 'FL', ARRAY[33076, 33065, 33067], 26.2702, -80.2591),
- ('Round Rock', 'TX', ARRAY[78664, 78665, 78680, 78682], 30.5254, -97.6660),
- ('Yakima', 'WA', ARRAY[98903, 98902, 98908, 98904], 46.5923, -120.5496),
- ('Sterling Heights', 'MI', ARRAY[48313, 48312, 48314, 48311], 42.5809, -83.0305),
- ('Kent', 'WA', ARRAY[98030, 98032, 98042, 98013], 47.3887, -122.2129),
- ('Burlington', 'NC', ARRAY[27215, 27216], 36.0758, -79.4686),
- ('Bellingham', 'WA', ARRAY[98225, 98226], 48.7543, -122.4687),
- ('Santa Clara', 'CA', ARRAY[95050, 95051, 95053, 95052], 37.3645, -121.9680),
- ('Racine', 'WI', ARRAY[53404, 53406, 53403, 53402], 42.7274, -87.8135),
- ('Greenville', 'NC', ARRAY[27858, 27835], 35.5956, -77.3768),
- ('Stamford', 'CT', ARRAY[6907, 6905, 6902, 6903], 41.1035, -73.5583),
- ('Elizabeth', 'NJ', ARRAY[7202, 7201, 7206, 7207], 40.6657, -74.1912),
- ('Johnson City', 'TN', ARRAY[37615, 37601, 37604, 37602], 36.3406, -82.3803),
- ('Lynchburg', 'VA', ARRAY[24502, 24503, 24501, 24506], 37.4003, -79.1909),
- ('Simi Valley', 'CA', ARRAY[93065, 93062, 93094, 93099], 34.2663, -118.7490),
- ('Fort Smith', 'AR', ARRAY[72904, 72908, 72903, 72923], 35.3493, -94.3695),
- ('Kenosha', 'WI', ARRAY[53140, 53142, 53143], 42.5864, -87.8765),
- ('Boulder', 'CO', ARRAY[80304, 80305, 80302, 80303], 40.0249, -105.2523),
- ('Pearland', 'TX', ARRAY[77089, 77584, 77581, 77588], 29.5585, -95.3215),
- ('Berkeley', 'CA', ARRAY[94707, 94705, 94704, 94703], 37.8723, -122.2760),
- ('Richardson', 'TX', ARRAY[75080, 75082, 75085], 32.9717, -96.7093),
- ('Redding', 'CA', ARRAY[96003, 96001], 40.5698, -122.3650),
- ('Arvada', 'CO', ARRAY[80004, 80007, 80003, 80002], 39.8321, -105.1511),
- ('St. George', 'UT', ARRAY[84790, 84771, 84791], 37.0770, -113.5770),
- ('Billings', 'MT', ARRAY[59105, 59102, 59101, 59104], 45.7891, -108.5524),
- ('Yuba City', 'CA', ARRAY[95993], 39.1357, -121.6381),
- ('Rochester', 'MN', ARRAY[55901, 55906, 55904, 55905], 44.0151, -92.4778),
- ('East Los Angeles', 'CA', ARRAY[90022, 90023, 90053], 34.0326, -118.1691),
- ('Kingsport', 'TN', ARRAY[37664, 37663, 37665, 37662], 36.5224, -82.5453),
- ('Duluth', 'MN', ARRAY[55802, 55805, 55804, 55808], 46.7756, -92.1392),
- ('Lehigh Acres', 'FL', ARRAY[33973, 33972, 33971, 33976], 26.6120, -81.6388),
- ('Rock Hill', 'SC', ARRAY[29733, 29730, 29731, 29734], 34.9416, -81.0244),
- ('Gilroy', 'CA', ARRAY[95021], 37.0047, -121.5855),
- ('Cambridge', 'MA', ARRAY[2140, 2141, 2139, 2138], 42.3759, -71.1185),
- ('Sugar Land', 'TX', ARRAY[77478, 77479, 77487], 29.5935, -95.6357),
- ('Texas City', 'TX', ARRAY[77590, 77539, 77554, 77592], 29.4128, -94.9658),
- ('Iowa City', 'IA', ARRAY[52246, 52240, 52242, 52243], 41.6559, -91.5303),
- ('Saginaw', 'MI', ARRAY[48602, 48601, 48605, 48608], 43.4199, -83.9501),
- ('Chico', 'CA', ARRAY[95926, 95928, 95927, 95929], 39.7575, -121.8152),
- ('Dover', 'DE', ARRAY[19901, 19904, 19903, 19905], 39.1610, -75.5203),
- ('Norman', 'OK', ARRAY[73026, 74857, 73072, 73071], 35.2335, -97.3471),
- ('Clearwater', 'FL', ARRAY[33759, 33756, 33763, 33761], 27.9789, -82.7622),
- ('Coeur d''Alene', 'ID', ARRAY[83814, 83816], 47.7041, -116.7935),
- ('Ponce', 'PR', ARRAY[717, 716, 730, 732], 18.0120, -66.6198),
- ('Independence', 'MO', ARRAY[64055, 64056, 64057, 64050], 39.0871, -94.3501),
- ('West Jordan', 'UT', ARRAY[84081, 84084], 40.6024, -112.0008),
- ('Abilene', 'TX', ARRAY[79699, 79603, 79601, 79607], 32.4543, -99.7384),
- ('Bloomington', 'IN', ARRAY[47408, 47401, 47403, 47404], 39.1637, -86.5257),
- ('El Monte', 'CA', ARRAY[91731, 91733, 91735], 34.0739, -118.0291),
- ('Carlsbad', 'CA', ARRAY[92009, 92011, 92010, 92013], 33.1247, -117.2837),
- ('North Charleston', 'SC', ARRAY[29420, 29456, 29485, 29483], 32.9066, -80.0722),
- ('St. Cloud', 'MN', ARRAY[56301, 56303, 56302, 56372], 45.5339, -94.1718),
- ('Temecula', 'CA', ARRAY[92591, 92592, 92589], 33.4928, -117.1315),
- ('Clovis', 'CA', ARRAY[93612, 93619, 93613, 93747], 36.8278, -119.6831),
- ('Meridian', 'ID', ARRAY[83642, 83680], 43.6112, -116.3968),
- ('Brandon', 'FL', ARRAY[33510, 33594, 33619, 33584], 27.9367, -82.3000),
- ('Westminster', 'CO', ARRAY[80031, 80234, 80005, 80003], 39.8837, -105.0624),
- ('Costa Mesa', 'CA', ARRAY[92627, 92628], 33.6667, -117.9135),
- ('Monroe', 'LA', ARRAY[71203, 71202, 71201, 71207], 32.5183, -92.0774),
- ('Utica', 'NY', ARRAY[13502, 13503, 13504, 13505], 43.0961, -75.2260),
- ('Pompano Beach', 'FL', ARRAY[33060, 33062, 33064, 33061], 26.2428, -80.1312),
- ('West Palm Beach', 'FL', ARRAY[33412, 33417, 33409, 33407], 26.7468, -80.1316),
- ('Waterloo', 'IA', ARRAY[50703, 50702, 50701, 50704], 42.4920, -92.3522),
- ('Everett', 'WA', ARRAY[98204, 98205, 98203, 98201], 47.9525, -122.1669),
- ('El Centro', 'CA', ARRAY[92244], 32.7867, -115.5586),
- ('Santa Fe', 'NM', ARRAY[87507, 87501, 87502, 87503], 35.6619, -105.9819),
- ('Downey', 'CA', ARRAY[90240, 90241, 90239], 33.9379, -118.1312),
- ('Lowell', 'MA', ARRAY[1850, 1852, 1854, 1853], 42.6389, -71.3217),
- ('Centennial', 'CO', ARRAY[80121, 80112, 80016, 80015], 39.5926, -104.8674),
- ('Elgin', 'IL', ARRAY[60123, 60124, 60121, 60122], 42.0385, -88.3229),
- ('Richmond', 'CA', ARRAY[94850, 94801, 94803, 94804], 37.9477, -122.3390),
- ('Broken Arrow', 'OK', ARRAY[74011, 74012, 74013, 74102], 36.0365, -95.7809),
- ('Miami Gardens', 'FL', ARRAY[33169, 33055, 33056, 33054], 25.9433, -80.2426),
- ('The Woodlands', 'TX', ARRAY[77381, 77382, 77384, 77389], 30.1738, -95.5134),
- ('Bend', 'OR', ARRAY[97701, 97703], 44.0562, -121.3087),
- ('Burlington', 'VT', ARRAY[5401, 5408, 5406], 44.4877, -73.2314),
- ('Jurupa Valley', 'CA', ARRAY[91752, 92519], 34.0010, -117.4705),
- ('Sandy Springs', 'GA', ARRAY[30350, 30327, 30328, 30342], 33.9366, -84.3703),
- ('Gresham', 'OR', ARRAY[97233, 97230, 97080], 45.5023, -122.4413),
- ('Lewisville', 'TX', ARRAY[75056, 75057, 75077, 75065], 33.0452, -96.9823),
- ('Hillsboro', 'OR', ARRAY[97123, 97124, 97129], 45.5272, -122.9361),
- ('San Buenaventura', 'CA', ARRAY[93001, 93003, 93005, 93006], 34.2741, -119.2314),
- ('Jacksonville', 'NC', ARRAY[28547, 28543, 28540, 28541], 34.7288, -77.3941),
- ('Inglewood', 'CA', ARRAY[90304, 90303, 90302, 90301], 33.9566, -118.3444),
- ('Spring Hill', 'FL', ARRAY[34608, 34604, 34606, 34611], 28.4797, -82.5300),
- ('League City', 'TX', ARRAY[77598, 77511, 77539, 77565], 29.4873, -95.1087),
- ('Eau Claire', 'WI', ARRAY[54701, 54702], 44.8199, -91.4949),
- ('Turlock', 'CA', ARRAY[95382, 95381], 37.5053, -120.8588),
- ('Temple', 'TX', ARRAY[76502, 76504, 76508, 76503], 31.1076, -97.3894),
- ('Sioux City', 'IA', ARRAY[51104, 51105, 51103, 51101], 42.4959, -96.3901),
- ('Salisbury', 'MD', ARRAY[21804, 21801, 21803], 38.3756, -75.5867),
- ('Davie', 'FL', ARRAY[33325, 33331, 33330, 33328], 26.0789, -80.2870),
- ('Daly City', 'CA', ARRAY[94014, 94016], 37.6862, -122.4685),
- ('Allen', 'TX', ARRAY[75013], 33.1088, -96.6735),
- ('Highlands Ranch', 'CO', ARRAY[80126, 80130], 39.5419, -104.9708),
- ('West Covina', 'CA', ARRAY[91791, 91790, 91793], 34.0555, -117.9112),
- ('Sparks', 'NV', ARRAY[89434, 89431, 89435, 89437], 39.5729, -119.7157),
- ('San Mateo', 'CA', ARRAY[94401, 94402, 94403, 94497], 37.5521, -122.3122),
- ('Norwalk', 'CA', ARRAY[90651, 90652], 33.9069, -118.0829),
- ('Columbia', 'MD', ARRAY[21045, 21046, 21029, 20146], 39.2004, -76.8590),
- ('Rialto', 'CA', ARRAY[92376, 92377], 34.1174, -117.3894),
- ('Manteca', 'CA', ARRAY[95336], 37.7927, -121.2264),
- ('El Cajon', 'CA', ARRAY[92021, 92019, 92022], 32.8017, -116.9605),
- ('Burbank', 'CA', ARRAY[91504, 91505, 91502, 91501], 34.1879, -118.3235),
- ('Longmont', 'CO', ARRAY[80503, 80504, 80502], 40.1686, -105.1005),
- ('Renton', 'WA', ARRAY[98058, 98057, 98056, 98055], 47.4784, -122.1919),
- ('Vista', 'CA', ARRAY[92083, 92081], 33.1896, -117.2386),
- ('Logan', 'UT', ARRAY[84341, 84323], 41.7400, -111.8419),
- ('Prescott Valley', 'AZ', ARRAY[86315, 86314, 86341], 34.5983, -112.3176),
- ('Vacaville', 'CA', ARRAY[95688, 95696], 38.3590, -121.9680),
- ('Edinburg', 'TX', ARRAY[78542, 78541, 78540], 26.3197, -98.1596),
- ('Carmel', 'IN', ARRAY[46032, 46033, 46280, 46082], 39.9650, -86.1460),
- ('Spokane Valley', 'WA', ARRAY[99016, 99212, 99216, 99037], 47.6626, -117.2346),
- ('San Angelo', 'TX', ARRAY[76904, 76901, 76903, 76908], 31.4424, -100.4506),
- ('La Crosse', 'WI', ARRAY[54603, 54602], 43.8240, -91.2268),
- ('Arden-Arcade', 'CA', ARRAY[95821, 95825, 95608, 95860], 38.6034, -121.3810),
- ('Idaho Falls', 'ID', ARRAY[83402, 83404, 83403, 83405], 43.4872, -112.0362),
- ('Holland', 'MI', ARRAY[49422], 42.7677, -86.0985),
- ('Charlottesville', 'VA', ARRAY[22902, 22903, 22905, 22906], 38.0375, -78.4855),
- ('Longview', 'TX', ARRAY[75601, 75605, 75604, 75607], 32.5193, -94.7621),
- ('Tracy', 'CA', ARRAY[95376, 95304], 37.7269, -121.4522),
- ('Boca Raton', 'FL', ARRAY[33487, 33486, 33432, 33433], 26.3752, -80.1080),
- ('Wichita Falls', 'TX', ARRAY[76310, 76311, 76309, 76306], 33.9072, -98.5291),
- ('Rio Rancho', 'NM', ARRAY[87121, 87144, 87174], 35.2872, -106.6981),
- ('South Fulton', 'GA', ARRAY[30331, 30349, 30291, 30296], 33.6269, -84.5802),
- ('Beaverton', 'OR', ARRAY[97005, 97007, 97006, 97008], 45.4779, -122.8168),
- ('Lawrence', 'KS', ARRAY[66044, 66047, 66046, 66049], 38.9597, -95.2641),
- ('Bismarck', 'ND', ARRAY[58504, 58501, 58503, 58502], 46.8144, -100.7694),
- ('Orem', 'UT', ARRAY[84057, 84058, 84059], 40.2983, -111.6992),
- ('Middletown', 'OH', ARRAY[45005, 45042], 39.5032, -84.3660),
- ('San Marcos', 'CA', ARRAY[92069, 92079, 92096], 33.1350, -117.1744),
- ('Sandy', 'UT', ARRAY[84093, 84094, 84070, 84090], 40.5710, -111.8505),
- ('Federal Way', 'WA', ARRAY[98001, 98003, 98063, 98093], 47.3091, -122.3358),
- ('Mandeville', 'LA', ARRAY[70471, 70470], 30.3751, -90.0904),
- ('Hesperia', 'CA', ARRAY[92344, 92340], 34.3975, -117.3147),
- ('Brockton', 'MA', ARRAY[2302, 2303, 2304, 2305], 42.0821, -71.0242),
- ('Compton', 'CA', ARRAY[90221, 90222, 90223], 33.8930, -118.2275),
- ('Fishers', 'IN', ARRAY[46040, 46256, 46037, 46085], 39.9589, -85.9661),
- ('Sunrise', 'FL', ARRAY[33323, 33326, 33351, 33313], 26.1547, -80.2997),
- ('Bowling Green', 'KY', ARRAY[42102, 42103, 42101], 36.9719, -86.4373),
- ('Roswell', 'GA', ARRAY[30075, 30077], 34.0391, -84.3513),
- ('Menifee', 'CA', ARRAY[92586, 92585, 92584], 33.6909, -117.1849),
- ('Plantation', 'FL', ARRAY[33323, 33324, 33325, 33317], 26.1260, -80.2617),
- ('Dover', 'NH', ARRAY[3821], 43.1887, -70.8845),
- ('Quincy', 'MA', ARRAY[2171, 2170, 2269], 42.2516, -71.0183),
- ('Portsmouth', 'VA', ARRAY[23708, 23704, 23707, 23701], 36.8468, -76.3540),
- ('Chino', 'CA', ARRAY[91708, 92878], 33.9836, -117.6654),
- ('Lynn', 'MA', ARRAY[1904, 1902, 1901, 1903], 42.4779, -70.9663),
- ('Edmond', 'OK', ARRAY[73013, 73007, 73003, 73034], 35.6689, -97.4159),
- ('Dearborn', 'MI', ARRAY[48120, 48126, 48124, 48121], 42.3127, -83.2129),
- ('Livonia', 'MI', ARRAY[48150, 48154, 48151, 48153], 42.3972, -83.3733),
- ('Vineland', 'NJ', ARRAY[8361, 8360, 8362], 39.4653, -74.9981),
- ('San Tan Valley', 'AZ', ARRAY[85140], 33.1879, -111.5472),
- ('Florence', 'SC', ARRAY[29506, 29501, 29502, 29504], 34.1781, -79.7877),
- ('Portsmouth', 'NH', ARRAY[3802, 3803, 3804], 43.0580, -70.7826),
- ('Slidell', 'LA', ARRAY[70458, 70469], 30.2881, -89.7826),
- ('Kirkland', 'WA', ARRAY[98033, 98011, 98083], 47.6974, -122.2054),
- ('Missoula', 'MT', ARRAY[59803, 59802, 59801, 59702], 46.8750, -114.0214),
- ('Auburn', 'AL', ARRAY[36832, 36830], 32.6087, -85.4899),
- ('Rapid City', 'SD', ARRAY[57703, 57701, 57709], 44.0716, -103.2204),
- ('Lee''s Summit', 'MO', ARRAY[64082, 64064, 64063, 64081], 38.9172, -94.3816),
- ('Terre Haute', 'IN', ARRAY[47807, 47802, 47803, 47809], 39.4654, -87.3763),
- ('Suffolk', 'VA', ARRAY[23432, 23437, 23436, 23435], 36.6953, -76.6398),
- ('Blacksburg', 'VA', ARRAY[24061, 24062, 24063], 37.2300, -80.4279),
- ('Mount Pleasant', 'SC', ARRAY[29464, 29465], 32.8538, -79.8204),
- ('Carson', 'CA', ARRAY[90810, 90747, 90746, 90745], 33.8374, -118.2559),
- ('Riverview', 'FL', ARRAY[33569, 33579, 33578, 33568], 27.8227, -82.3023),
- ('Conroe', 'TX', ARRAY[77301, 77303, 77304], 30.3239, -95.4825),
- ('Livermore', 'CA', ARRAY[94551], 37.6862, -121.7608),
- ('Germantown', 'MD', ARRAY[20874, 20875], 39.1755, -77.2643),
- ('Lawton', 'OK', ARRAY[73507, 73505, 73503, 73506], 34.6176, -98.4203),
- ('Westminster', 'CA', ARRAY[92684, 92685], 33.7523, -117.9938),
- ('Santa Monica', 'CA', ARRAY[90402, 90403, 90404, 90405], 34.0232, -118.4813),
- ('New Braunfels', 'TX', ARRAY[78130, 78135], 29.6994, -98.1148),
- ('Fall River', 'MA', ARRAY[2723, 2720, 2721, 2790], 41.7137, -71.1014),
- ('Albany', 'GA', ARRAY[31701, 31707, 31705, 31702], 31.5776, -84.1762),
- ('Miami Beach', 'FL', ARRAY[33141, 33139, 33109], 25.8171, -80.1396),
- ('Norwalk', 'CT', ARRAY[6855, 6856, 6850, 6851], 41.1144, -73.4215),
- ('San Leandro', 'CA', ARRAY[94579, 94577, 94622], 37.7071, -122.1601),
- ('Toms River', 'NJ', ARRAY[8753, 8754], 39.9931, -74.1857),
- ('O''Fallon', 'MO', ARRAY[63366, 63368], 38.7850, -90.7175),
- ('Alafaya', 'FL', ARRAY[32828, 32829], 28.5278, -81.1865),
- ('Newton', 'MA', ARRAY[2467, 2466, 2461, 2462], 42.3316, -71.2085),
- ('Muncie', 'IN', ARRAY[47305, 47303, 47304, 47302], 40.1989, -85.3950),
- ('Citrus Heights', 'CA', ARRAY[95610, 95611], 38.6948, -121.2880),
- ('State College', 'PA', ARRAY[16803, 16801, 16805], 40.7909, -77.8568),
- ('Decatur', 'IL', ARRAY[62523, 62521, 62526, 62535], 39.8556, -88.9337),
- ('Jackson', 'MI', ARRAY[49201, 49203, 49204], 42.2431, -84.4037),
- ('Fort Myers', 'FL', ARRAY[33916, 33966, 33901, 33907], 26.6195, -81.8303),
- ('Goodyear', 'AZ', ARRAY[85338, 85326, 85340, 85395], 33.2613, -112.3622),
- ('Dalton', 'GA', ARRAY[30720, 30719, 30722], 34.7690, -84.9712),
- ('Bryan', 'TX', ARRAY[77803, 77802, 77801, 77807], 30.6657, -96.3668),
- ('Waukegan', 'IL', ARRAY[60085, 60048, 60079], 42.3697, -87.8716),
- ('Hawthorne', 'CA', ARRAY[90251, 90261, 90310], 33.9146, -118.3476),
- ('Anderson', 'IN', ARRAY[46011, 46012, 46013, 46014], 40.0891, -85.6893),
- ('Redwood City', 'CA', ARRAY[94062, 94063, 94061, 94064], 37.5026, -122.2252),
- ('Hoover', 'AL', ARRAY[35244, 35242, 35080, 35226], 33.3754, -86.8064),
- ('Town ''n'' Country', 'FL', ARRAY[33634, 33635], 28.0108, -82.5760),
- ('Lake Forest', 'CA', ARRAY[92679, 92630], 33.6606, -117.6712),
- ('Napa', 'CA', ARRAY[94559, 94581], 38.2976, -122.3011),
- ('Whittier', 'CA', ARRAY[90602, 90601, 90606, 90605], 33.9678, -118.0188),
- ('Clifton', 'NJ', ARRAY[7013, 7012, 7011, 7015], 40.8631, -74.1575),
- ('Largo', 'FL', ARRAY[33771, 33760, 33764, 33770], 27.9088, -82.7711),
- ('Bloomington', 'MN', ARRAY[55420, 55431, 55437, 55438], 44.8306, -93.3151),
- ('Johns Creek', 'GA', ARRAY[30097, 30005, 30098], 34.0333, -84.2027),
- ('Newport Beach', 'CA', ARRAY[92663, 92660, 92661, 92625], 33.6151, -117.8669),
- ('Mission', 'TX', ARRAY[78572], 26.2041, -98.3251),
- ('Troy', 'MI', ARRAY[48083, 48085, 48084, 48007], 42.5818, -83.1457),
- ('Madera', 'CA', ARRAY[93638, 93639], 36.9631, -120.0782),
- ('Joplin', 'MO', ARRAY[64801, 64802], 37.0758, -94.5018),
- ('Alhambra', 'CA', ARRAY[91801, 91802, 91804, 91896], 34.0840, -118.1355),
- ('Franklin', 'TN', ARRAY[37064, 37067, 37065, 37068], 35.9216, -86.8525),
- ('Melbourne', 'FL', ARRAY[32903, 32934, 32935, 32904], 28.1085, -80.6627),
- ('Port Huron', 'MI', ARRAY[48061], 42.9822, -82.4387),
- ('Springfield', 'OH', ARRAY[45506, 45505, 45504, 45501], 39.9297, -83.7957),
- ('Mountain View', 'CA', ARRAY[94041, 94043, 94039, 94042], 37.4000, -122.0796),
- ('Zephyrhills', 'FL', ARRAY[33540, 33541, 33539], 28.2408, -82.1796),
- ('St. Augustine', 'FL', ARRAY[32080, 32095], 29.8977, -81.3100),
- ('Flagstaff', 'AZ', ARRAY[86011, 86004, 86005], 35.1872, -111.6195),
- ('Buena Park', 'CA', ARRAY[90620, 90622, 90624], 33.8572, -118.0046),
- ('Pleasanton', 'CA', ARRAY[94588], 37.6663, -121.8805),
- ('Westland', 'MI', ARRAY[48186], 42.3192, -83.3805),
- ('Auburn', 'WA', ARRAY[98002, 98092, 98071], 47.3039, -122.2108),
- ('Cranston', 'RI', ARRAY[2831, 2920, 2910, 2921], 41.7658, -71.4857),
- ('Somerville', 'MA', ARRAY[2145, 2143], 42.3908, -71.1013),
- ('Folsom', 'CA', ARRAY[95671, 95763], 38.6668, -121.1422),
- ('Springdale', 'AR', ARRAY[72762, 72765, 72766, 72770], 36.1899, -94.1574),
- ('Deerfield Beach', 'FL', ARRAY[33441, 33064, 33443], 26.3050, -80.1277),
- ('Warwick', 'RI', ARRAY[2886, 2889, 2888, 2887], 41.7062, -71.4334),
- ('Farmington Hills', 'MI', ARRAY[48335, 48334, 48331], 42.4860, -83.3771),
- ('Newark', 'OH', ARRAY[43058, 43093], 40.0705, -82.4251),
- ('Williamsburg', 'VA', ARRAY[23185, 23186], 37.2692, -76.7076),
- ('Brooklyn Park', 'MN', ARRAY[55429, 55428, 55443, 55445], 45.1112, -93.3505),
- ('Hattiesburg', 'MS', ARRAY[39402, 39406, 39403, 39404], 31.3074, -89.3170),
- ('Alexandria', 'LA', ARRAY[71303, 71301, 71306, 71307], 31.2923, -92.4702),
- ('Lawrence', 'MA', ARRAY[1840, 1841, 1842], 42.7003, -71.1626),
- ('Florence', 'AL', ARRAY[35630, 35631, 35632], 34.8303, -87.6654),
- ('Valdosta', 'GA', ARRAY[31602, 31601, 31605, 31604], 30.8502, -83.2788),
- ('Plymouth', 'MN', ARRAY[55441, 55447, 55446], 45.0225, -93.4618),
- ('Silver Spring', 'MD', ARRAY[20912, 20901, 20903, 20907], 39.0028, -77.0207),
- ('Buckeye', 'AZ', ARRAY[85396], 33.4314, -112.6429),
- ('Georgetown', 'TX', ARRAY[78626, 78628, 78627], 30.6668, -97.6953),
- ('Cheyenne', 'WY', ARRAY[82007, 82001, 82002, 82006], 41.1351, -104.7900),
- ('Kokomo', 'IN', ARRAY[46901, 46903, 46904, 46965], 40.4640, -86.1277),
- ('Tustin', 'CA', ARRAY[92782, 92606, 92781], 33.7309, -117.8106),
- ('Lakewood', 'CA', ARRAY[90712, 90713, 90711, 90714], 33.8471, -118.1221),
- ('Perris', 'CA', ARRAY[92571, 92585, 92572], 33.7899, -117.2233),
- ('St. Joseph', 'MO', ARRAY[64501, 64507, 64504, 64506], 39.7599, -94.8210),
- ('Flower Mound', 'TX', ARRAY[75028, 76262, 75027], 33.0344, -97.1146),
- ('Atascocita', 'TX', ARRAY[77396], 29.9777, -95.1953),
- ('Loveland', 'CO', ARRAY[80537, 80539], 40.4166, -105.0623),
- ('Boynton Beach', 'FL', ARRAY[33436, 33435, 33424, 33425], 26.5281, -80.0811),
- ('New Rochelle', 'NY', ARRAY[10801, 10805, 10802], 40.9305, -73.7836),
- ('Anderson', 'SC', ARRAY[29625, 29621], 34.5211, -82.6479),
- ('Lebanon', 'PA', ARRAY[17042], 40.3412, -76.4227),
- ('Parma', 'OH', ARRAY[44130, 44129], 41.3843, -81.7286),
- ('Layton', 'UT', ARRAY[84040], 41.0769, -111.9621),
- ('Texarkana', 'TX', ARRAY[75503, 75504, 75507, 75599], 33.4487, -94.0815),
- ('Alameda', 'CA', ARRAY[94501], 37.7670, -122.2672),
- ('The Villages', 'FL', ARRAY[32162, 32159, 32163], 28.9021, -81.9888),
- ('Watsonville', 'CA', ARRAY[95019, 95077], 36.9206, -121.7706),
- ('Baytown', 'TX', ARRAY[77521, 77522], 29.7586, -94.9669),
- ('Upland', 'CA', ARRAY[91786, 91785], 34.1178, -117.6603),
- ('Davis', 'CA', ARRAY[95616, 95617], 38.5552, -121.7365),
- ('Camarillo', 'CA', ARRAY[93010, 93011], 34.2230, -119.0322),
- ('Battle Creek', 'MI', ARRAY[49037, 49016, 49018], 42.2986, -85.2296),
- ('Bellflower', 'CA', ARRAY[90707], 33.8880, -118.1271),
- ('Jonesboro', 'AR', ARRAY[72404, 72401, 72402, 72403], 35.8212, -90.6791),
- ('San Marcos', 'TX', ARRAY[78667], 29.8736, -97.9381),
- ('San Ramon', 'CA', ARRAY[94583], 37.7625, -121.9365),
- ('Lake Jackson', 'TX', ARRAY[77566], 29.0516, -95.4522),
- ('Bethlehem', 'PA', ARRAY[18016, 18015, 18018, 18025], 40.6266, -75.3679),
- ('Wyoming', 'MI', ARRAY[49548, 49418, 49519, 49518], 42.8909, -85.7066),
- ('Pine Hills', 'FL', ARRAY[32818, 32710], 28.5818, -81.4693),
- ('Oshkosh', 'WI', ARRAY[54904, 54901, 54902, 54903], 44.0228, -88.5619),
- ('Hammond', 'IN', ARRAY[46323, 46320, 46327, 46324], 41.6169, -87.4910),
- ('Missouri City', 'TX', ARRAY[77545, 77071, 77459], 29.5630, -95.5365),
- ('Centreville', 'VA', ARRAY[20124, 20121, 20122], 38.8391, -77.4388),
- ('Pasco', 'WA', ARRAY[99302], 46.2506, -119.1304),
- ('Rancho Cordova', 'CA', ARRAY[95670, 95827, 95741], 38.5740, -121.2523),
- ('Caguas', 'PR', ARRAY[727, 726], 18.2319, -66.0388),
- ('Conway', 'AR', ARRAY[72035, 72034], 35.0754, -92.4694),
- ('Gary', 'IN', ARRAY[46408, 46407, 46406, 46405], 41.5906, -87.3472),
- ('Altoona', 'PA', ARRAY[16602, 16603, 16660], 40.5082, -78.4007),
- ('Lodi', 'CA', ARRAY[95242, 94240, 95241], 38.1218, -121.2932),
- ('Arlington Heights', 'IL', ARRAY[60004, 60006], 42.0955, -87.9825),
- ('Kendall', 'FL', ARRAY[33176, 33156, 33183, 33116], 25.6697, -80.3556),
- ('Waldorf', 'MD', ARRAY[20603, 20602, 20695, 20604], 38.6085, -76.9195),
- ('Bolingbrook', 'IL', ARRAY[60440], 41.6903, -88.1019),
- ('Rochester Hills', 'MI', ARRAY[48307, 48309], 42.6645, -83.1563),
- ('Winchester', 'VA', ARRAY[22604], 39.1735, -78.1746),
- ('Framingham', 'MA', ARRAY[1702, 1703, 1704, 1705], 42.3085, -71.4368),
- ('Hilton Head Island', 'SC', ARRAY[29926, 29925, 29938], 32.1896, -80.7499),
- ('Owensboro', 'KY', ARRAY[42301, 42302], 37.7574, -87.1173),
- ('Jackson', 'TN', ARRAY[38301, 38302, 38303, 38308], 35.6535, -88.8353),
- ('Cheektowaga', 'NY', ARRAY[14043, 14225, 14227, 14211], 42.9082, -78.7496),
- ('Cleveland', 'TN', ARRAY[37311, 37320], 35.1817, -84.8707),
- ('Wausau', 'WI', ARRAY[54403], 44.9620, -89.6459),
- ('Camden', 'NJ', ARRAY[8105, 8102, 8103, 8101], 39.9362, -75.1073),
- ('Anniston', 'AL', ARRAY[36206, 36207, 36205, 36202], 33.6712, -85.8136),
- ('Evanston', 'IL', ARRAY[60201, 60204, 60208], 42.0463, -87.6942),
- ('Apple Valley', 'CA', ARRAY[92307], 34.5328, -117.2104),
- ('Mansfield', 'OH', ARRAY[44906, 44907, 44901, 44902], 40.7656, -82.5275),
- ('Schaumburg', 'IL', ARRAY[60195, 60194, 60173, 60159], 42.0307, -88.0838),
- ('Pocatello', 'ID', ARRAY[83201, 83209, 83205, 83206], 42.8724, -112.4646),
- ('Woodbury', 'MN', ARRAY[55125], 44.9056, -92.9230),
- ('Southfield', 'MI', ARRAY[48034, 48075, 48076, 48037], 42.4765, -83.2605),
- ('Maple Grove', 'MN', ARRAY[55311], 45.1089, -93.4626),
- ('New Britain', 'CT', ARRAY[6053, 6051, 6050], 41.6758, -72.7862),
- ('Morgantown', 'WV', ARRAY[26505, 26506], 39.6380, -79.9468),
- ('Hammond', 'LA', ARRAY[70403, 70401], 30.5061, -90.4563),
- ('Dothan', 'AL', ARRAY[36301, 36305, 36321, 36302], 31.2335, -85.4069),
- ('Harrisonburg', 'VA', ARRAY[22802, 22807, 22081], 38.4361, -78.8735),
- ('Waukesha', 'WI', ARRAY[53188, 53189, 53187], 43.0087, -88.2464),
- ('Ellicott City', 'MD', ARRAY[21043, 20140, 21041], 39.2773, -76.8344),
- ('Pawtucket', 'RI', ARRAY[2860, 2862], 41.8744, -71.3743),
- ('Redmond', 'WA', ARRAY[98073], 47.6762, -122.1169),
- ('Lauderhill', 'FL', ARRAY[33313, 33311, 33319], 26.1605, -80.2242),
- ('Sumter', 'SC', ARRAY[29152, 29153, 29150, 29151], 33.9392, -80.3930),
- ('Redlands', 'CA', ARRAY[92374, 92346, 92403], 34.0511, -117.1712),
- ('Daphne', 'AL', ARRAY[36526], 30.6286, -87.8866),
- ('Mount Vernon', 'WA', ARRAY[98273], 48.4202, -122.3115),
- ('Weston', 'FL', ARRAY[33327, 33331, 33332], 26.1006, -80.4054),
- ('St. Charles', 'MO', ARRAY[63303], 38.7954, -90.5157),
- ('Janesville', 'WI', ARRAY[53546, 53548, 53547], 42.6855, -89.0136),
- ('Sherman', 'TX', ARRAY[75090], 33.6274, -96.6218),
- ('North Richland Hills', 'TX', ARRAY[76182], 32.8605, -97.2180),
- ('Broomfield', 'CO', ARRAY[80021, 80020, 80516, 80038], 39.9541, -105.0527),
- ('El Paso de Robles', 'CA', ARRAY[93447], 35.6394, -120.6560),
- ('Bristol', 'TN', ARRAY[37621, 37625], 36.5572, -82.2154),
- ('Wilmington', 'DE', ARRAY[19802, 19801, 19806, 19805], 39.7415, -75.5413),
- ('Walnut Creek', 'CA', ARRAY[94597, 94595, 94598, 94529], 37.9024, -122.0398),
- ('Lynwood', 'CA', ARRAY[90267], 33.9240, -118.2017),
- ('Glen Burnie', 'MD', ARRAY[21061, 21108], 39.1559, -76.6072),
- ('Guaynabo', 'PR', ARRAY[934, 966, 965, 968], 18.3839, -66.1134),
- ('Casas Adobes', 'AZ', ARRAY[85741, 85742], 32.3423, -111.0114),
- ('Homestead', 'FL', ARRAY[33030, 33035, 33090, 33092], 25.4665, -80.4472),
- ('West Bend', 'WI', ARRAY[53095], 43.4184, -88.1824),
- ('Delray Beach', 'FL', ARRAY[33444, 33483, 33448, 33482], 26.4550, -80.0905),
- ('Sheboygan', 'WI', ARRAY[53081, 53082], 43.7403, -87.7316),
- ('Lake Elsinore', 'CA', ARRAY[92532, 92530, 92803], 33.6847, -117.3344),
- ('Daytona Beach', 'FL', ARRAY[32174, 32117, 32114, 32118], 29.1994, -81.0982),
- ('Lima', 'OH', ARRAY[45801, 45804, 45802], 40.7410, -84.1121),
- ('Decatur', 'AL', ARRAY[35601, 35602, 35609, 35699], 34.5730, -86.9906),
- ('Rocklin', 'CA', ARRAY[95765], 38.8075, -121.2488),
- ('Rogers', 'AR', ARRAY[72756, 72718], 36.3172, -94.1526),
- ('Castle Rock', 'CO', ARRAY[80108, 80109], 39.3763, -104.8535),
- ('Hanover', 'PA', ARRAY[17332, 17333, 17334], 39.8117, -76.9835),
- ('Bossier City', 'LA', ARRAY[71111, 71110, 71113, 71171], 32.5227, -93.6666),
- ('Dubuque', 'IA', ARRAY[52003, 52001, 52004, 52099], 42.5008, -90.7067),
- ('Rockville', 'MD', ARRAY[20850, 20851, 20847, 20848], 39.0834, -77.1552),
- ('Victoria', 'TX', ARRAY[77904, 77905, 77903], 28.8285, -96.9850),
- ('Gaithersburg', 'MD', ARRAY[20899, 20879, 20877], 39.1346, -77.2132),
- ('Ames', 'IA', ARRAY[50012, 50011, 50010, 50013], 42.0259, -93.6215),
- ('West Des Moines', 'IA', ARRAY[50266, 50263, 50061, 50398], 41.5522, -93.7805),
- ('South San Francisco', 'CA', ARRAY[94128, 94083], 37.6536, -122.4197),
- ('Yorba Linda', 'CA', ARRAY[92887, 92885], 33.8890, -117.7714),
- ('Casper', 'WY', ARRAY[82601, 82609, 82605], 42.8420, -106.3207),
- ('Palatine', 'IL', ARRAY[60067, 60038, 60055, 60078], 42.1181, -88.0430),
- ('Corvallis', 'OR', ARRAY[97331, 97330, 97339], 44.5697, -123.2780),
- ('Ankeny', 'IA', ARRAY[50021], 41.7285, -93.6033),
- ('Mount Vernon', 'NY', ARRAY[10553, 10550, 10551], 40.9136, -73.8291),
- ('Rowlett', 'TX', ARRAY[75088, 75030], 32.9157, -96.5488),
- ('Alpharetta', 'GA', ARRAY[30004, 30005, 30009], 34.0704, -84.2739),
- ('Poinciana', 'FL', ARRAY[34759], 28.1217, -81.4820),
- ('Petaluma', 'CA', ARRAY[94952], 38.2423, -122.6267),
- ('Redondo Beach', 'CA', ARRAY[90277], 33.8574, -118.3766),
- ('Tamarac', 'FL', ARRAY[33319], 26.2056, -80.2542),
- ('Eagan', 'MN', ARRAY[55122, 55123], 44.8169, -93.1638),
- ('Kenner', 'LA', ARRAY[70062, 70063, 70064, 70097], 30.0109, -90.2549),
- ('Bay City', 'MI', ARRAY[48708], 43.5903, -83.8886),
- ('North Little Rock', 'AR', ARRAY[72116, 72114, 72118, 72117], 34.7808, -92.2371),
- ('Sammamish', 'WA', ARRAY[98075, 98074], 47.6017, -122.0416),
- ('Shawnee', 'KS', ARRAY[66216, 66217, 66218, 66227], 39.0158, -94.8076),
- ('Jupiter', 'FL', ARRAY[33458, 33468], 26.9199, -80.1128),
- ('Doral', 'FL', ARRAY[33172, 33122, 33166, 33191], 25.8151, -80.3565),
- ('Carbondale', 'IL', ARRAY[62902, 62903], 37.7221, -89.2238),
- ('Blaine', 'MN', ARRAY[55434, 55449], 45.1696, -93.2077),
- ('Tulare', 'CA', ARRAY[93275], 36.1996, -119.3400),
- ('Wellington', 'FL', ARRAY[33414, 33470], 26.6461, -80.2699),
- ('Pflugerville', 'TX', ARRAY[78691], 30.4520, -97.6022),
- ('Palo Alto', 'CA', ARRAY[95033, 94303, 94301, 94306], 37.3913, -122.1468),
- ('Schenectady', 'NY', ARRAY[12304, 12307, 12308, 12301], 42.8025, -73.9276),
- ('Great Falls', 'MT', ARRAY[59404, 59401, 59403], 47.5022, -111.2995),
- ('Michigan City', 'IN', ARRAY[46361], 41.7099, -86.8705),
- ('Eden Prairie', 'MN', ARRAY[55346, 55347], 44.8488, -93.4595),
- ('Port Orange', 'FL', ARRAY[32129, 32128], 29.1084, -81.0137),
- ('Dublin', 'CA', ARRAY[94551], 37.7161, -121.8963),
- ('Carmichael', 'CA', ARRAY[95628, 95608, 95609], 38.6337, -121.3230),
- ('Grand Forks', 'ND', ARRAY[58203, 58201, 58206, 58207], 47.9218, -97.0886),
- ('Noblesville', 'IN', ARRAY[46062], 40.0354, -86.0042),
- ('San Clemente', 'CA', ARRAY[92673, 92674], 33.4498, -117.6103),
- ('East Orange', 'NJ', ARRAY[7017, 7019], 40.7651, -74.2117),
- ('Florence-Graham', 'CA', ARRAY[90002, 90052], 33.9682, -118.2447),
- ('Eastvale', 'CA', ARRAY[91752], 33.9617, -117.5802),
- ('Chapel Hill', 'NC', ARRAY[27514, 27517, 27515, 27599], 35.9270, -79.0391),
- ('Rocky Mount', 'NC', ARRAY[27803, 27801, 27802], 35.9676, -77.8048),
- ('Haverhill', 'MA', ARRAY[1830, 1835, 1831], 42.7838, -71.0871),
- ('Beloit', 'WI', ARRAY[53512], 42.5230, -89.0184),
- ('Castro Valley', 'CA', ARRAY[94552, 94578], 37.7091, -122.0631),
- ('Fairbanks', 'AK', ARRAY[99703, 99707, 99711], 64.8353, -147.6534),
- ('Springfield', 'OR', ARRAY[97478, 97403, 97475], 44.0538, -122.9810),
- ('Johnstown', 'PA', ARRAY[15905, 15902, 15901, 15907], 40.3258, -78.9193),
- ('West Hartford', 'CT', ARRAY[6119, 6117, 6110, 6155], 41.7669, -72.7536),
- ('Coon Rapids', 'MN', ARRAY[55448], 45.1755, -93.3095),
- ('Elmira', 'NY', ARRAY[14905, 14904, 14902], 42.0938, -76.8097),
- ('Mankato', 'MN', ARRAY[56002], 44.1712, -93.9773),
- ('Albany', 'OR', ARRAY[97322], 44.6274, -123.0966),
- ('North Miami', 'FL', ARRAY[33167, 33160, 33161, 33181], 25.9007, -80.1686),
- ('Dundalk', 'MD', ARRAY[21224], 39.2703, -76.4942),
- ('Encinitas', 'CA', ARRAY[92075, 92024, 92023], 33.0490, -117.2613),
- ('Skokie', 'IL', ARRAY[60077, 60203], 42.0359, -87.7400),
- ('Leander', 'TX', ARRAY[78646], 30.5728, -97.8618),
- ('Mayagüez', 'PR', ARRAY[680, 681], 18.2003, -67.1397),
- ('Parkersburg', 'WV', ARRAY[26101, 26102, 26103, 26106], 39.2624, -81.5420),
- ('Waltham', 'MA', ARRAY[2451, 2453, 2454], 42.3889, -71.2423),
- ('Bethesda', 'MD', ARRAY[20815, 20816, 20817, 20810], 38.9866, -77.1188),
- ('San Luis Obispo', 'CA', ARRAY[93405], 35.2669, -120.6691),
- ('Sebring', 'FL', ARRAY[33875], 27.4770, -81.4530),
- ('Council Bluffs', 'IA', ARRAY[51501, 51502], 41.2369, -95.8517),
- ('Hamilton', 'OH', ARRAY[45011, 45013, 45012], 39.3938, -84.5653),
- ('Pico Rivera', 'CA', ARRAY[90661, 90662], 33.9902, -118.0888),
- ('Palm Harbor', 'FL', ARRAY[34681, 34683, 34682], 28.0847, -82.7481),
- ('Casa Grande', 'AZ', ARRAY[85193, 85122, 85130], 32.9068, -111.7624),
- ('Rome', 'GA', ARRAY[30165, 30162], 34.2661, -85.1862),
- ('Millcreek', 'UT', ARRAY[84124, 84109, 84106, 84107], 40.6892, -111.8291),
- ('Sanford', 'FL', ARRAY[32771, 32772], 28.7893, -81.2760),
- ('National City', 'CA', ARRAY[91951], 32.6654, -117.0983),
- ('Burnsville', 'MN', ARRAY[55337], 44.7648, -93.2795),
- ('Coconut Creek', 'FL', ARRAY[33063, 33066], 26.2803, -80.1842),
- ('Port Charlotte', 'FL', ARRAY[33952, 33948, 33980, 33938], 26.9918, -82.1140),
- ('Morristown', 'TN', ARRAY[37814, 37778, 37815, 37816], 36.2046, -83.3006),
- ('Lakewood', 'WA', ARRAY[98498, 98496, 98497], 47.1628, -122.5299),
- ('Gadsden', 'AL', ARRAY[35903, 35904], 34.0090, -86.0156),
- ('Novi', 'MI', ARRAY[48375, 48374, 48167, 48376], 42.4786, -83.4893),
- ('Marietta', 'GA', ARRAY[30062, 30064, 30067, 30008], 33.9533, -84.5422),
- ('Hot Springs', 'AR', ARRAY[71913, 71902, 71903, 71914], 34.4892, -93.0501),
- ('Woodland', 'CA', ARRAY[95695], 38.6712, -121.7500),
- ('La Habra', 'CA', ARRAY[90632, 90633], 33.9278, -117.9513),
- ('The Hammocks', 'FL', ARRAY[33186], 25.6700, -80.4483),
- ('Commerce City', 'CO', ARRAY[80022], 39.8642, -104.8434),
- ('Reston', 'VA', ARRAY[20191, 20190, 20101, 20102], 38.9497, -77.3461),
- ('South Whittier', 'CA', ARRAY[90605], 33.9336, -118.0311),
- ('Bristol', 'CT', ARRAY[6011], 41.6812, -72.9407),
- ('Columbus', 'IN', ARRAY[47203, 47202], 39.2093, -85.9183),
- ('West Allis', 'WI', ARRAY[53214, 53227], 43.0068, -88.0296),
- ('Fountainebleau', 'FL', ARRAY[33174, 33126, 33144], 25.7723, -80.3458),
- ('Taylorsville', 'UT', ARRAY[84123, 84118, 84129, 84184], 40.6570, -111.9493),
- ('Bangor', 'ME', ARRAY[4402], 44.8322, -68.7906),
- ('Monterey Park', 'CA', ARRAY[91754, 91756], 34.0497, -118.1326),
- ('Greenwood', 'IN', ARRAY[46142, 46143], 39.6019, -86.1073),
- ('Bartlett', 'TN', ARRAY[38133, 38134, 38135, 38029], 35.2337, -89.8195),
- ('Bradenton', 'FL', ARRAY[34209, 34205, 33420, 34204], 27.4900, -82.5739),
- ('Pontiac', 'MI', ARRAY[48340, 48341, 48343], 42.6493, -83.2878),
- ('Staunton', 'VA', ARRAY[24402], 38.1593, -79.0611),
- ('Meriden', 'CT', ARRAY[6450], 41.5367, -72.7944),
- ('Gardena', 'CA', ARRAY[90249], 33.8944, -118.3073),
- ('Apex', 'NC', ARRAY[27523, 27539], 35.7239, -78.8728),
- ('Royal Oak', 'MI', ARRAY[48073, 48068], 42.5084, -83.1539),
- ('Cupertino', 'CA', ARRAY[95015, 95108], 37.3168, -122.0465),
- ('La Mesa', 'CA', ARRAY[91942, 91944], 32.7703, -117.0204),
- ('Brookline', 'MA', ARRAY[2446, 2445, 2447], 42.3243, -71.1408),
- ('Benton Harbor', 'MI', ARRAY[49023], 42.1159, -86.4488),
- ('St. Clair Shores', 'MI', ARRAY[48080, 48082], 42.4921, -82.8957),
- ('Des Plaines', 'IL', ARRAY[60016, 60011, 60017, 60019], 42.0345, -87.9009),
- ('Lewiston', 'ME', ARRAY[4241, 4243], 44.0915, -70.1681),
- ('Margate', 'FL', ARRAY[33068], 26.2466, -80.2119),
- ('Midland', 'MI', ARRAY[48640, 48667, 48641, 48670], 43.6241, -84.2319),
- ('Spring', 'TX', ARRAY[77383, 77391, 77393], 30.0613, -95.3830),
- ('Carson City', 'NV', ARRAY[89703, 89702, 89705, 89706], 39.1512, -119.7474),
- ('Bowie', 'MD', ARRAY[20721, 20716, 20715, 20717], 38.9569, -76.7409),
- ('Caldwell', 'ID', ARRAY[83605], 43.6453, -116.6591),
- ('San Rafael', 'CA', ARRAY[94903, 94915], 37.9905, -122.5222),
- ('Kendale Lakes', 'FL', ARRAY[33183], 25.7081, -80.4078),
- ('Towson', 'MD', ARRAY[21212, 21239, 21252, 21209], 39.3944, -76.6190),
- ('Richland', 'WA', ARRAY[99354], 46.2824, -119.2938),
- ('South Hill', 'WA', ARRAY[98374, 98373, 98343], 47.1203, -122.2848),
- ('Hendersonville', 'TN', ARRAY[37077], 36.3063, -86.5998),
- ('White Plains', 'NY', ARRAY[10601, 10604, 10605, 10606], 41.0220, -73.7549),
- ('Huntersville', 'NC', ARRAY[28070], 35.4058, -80.8727),
- ('Jefferson City', 'MO', ARRAY[65109, 65102, 65103, 65104], 38.5676, -92.1759),
- ('Arcadia', 'CA', ARRAY[91006, 91066, 91077], 34.1342, -118.0373),
- ('Titusville', 'FL', ARRAY[32780, 32781, 32783], 28.5727, -80.8193),
- ('Cartersville', 'GA', ARRAY[30120], 34.1639, -84.8007),
- ('Orland Park', 'IL', ARRAY[60462], 41.6074, -87.8619),
- ('Weymouth Town', 'MA', ARRAY[2190, 2188, 2189], 42.1984, -70.9466),
- ('Parker', 'CO', ARRAY[80134], 39.5084, -104.7753),
- ('Palm Beach Gardens', 'FL', ARRAY[33410, 33412, 33403, 33318], 26.8466, -80.1679),
- ('Bozeman', 'MT', ARRAY[59715, 59717, 59719], 45.6832, -111.0552),
- ('Tamiami', 'FL', ARRAY[33182, 33184], 25.7556, -80.4016),
- ('Taunton', 'MA', ARRAY[2767, 2718], 41.9036, -71.0943),
- ('Midwest City', 'OK', ARRAY[73141, 73130], 35.4630, -97.3709),
- ('Medford', 'MA', ARRAY[2153, 2156], 42.4234, -71.1087),
- ('Goldsboro', 'NC', ARRAY[27530, 27531, 27532, 27533], 35.3778, -77.9720),
- ('Euless', 'TX', ARRAY[76051, 76039, 75261], 32.8508, -97.0799),
- ('Manhattan', 'KS', ARRAY[66502, 66503, 66505], 39.1886, -96.6046),
- ('Shoreline', 'WA', ARRAY[98177, 98133, 98160], 47.7564, -122.3426),
- ('Lake Havasu City', 'AZ', ARRAY[86406, 86404], 34.5006, -114.3113),
- ('Smyrna', 'GA', ARRAY[30082, 30080], 33.8633, -84.5168),
- ('Cape Girardeau', 'MO', ARRAY[63701], 37.3108, -89.5597),
- ('Grants Pass', 'OR', ARRAY[97527], 42.4333, -123.3317),
- ('Blue Springs', 'MO', ARRAY[64015, 64051], 39.0124, -94.2721),
- ('Southaven', 'MS', ARRAY[38671, 38672], 34.9514, -89.9787),
- ('Tinley Park', 'IL', ARRAY[60477], 41.5670, -87.8050),
- ('Diamond Bar', 'CA', ARRAY[91765], 33.9991, -117.8161),
- ('Pittsfield', 'MA', ARRAY[1202, 1203], 42.4517, -73.2605),
- ('New Brunswick', 'NJ', ARRAY[8875, 8906, 8933], 40.4870, -74.4450),
- ('Lenexa', 'KS', ARRAY[66215, 66216, 66217, 66219], 38.9609, -94.8018),
- ('Brookhaven', 'GA', ARRAY[30319], 33.8744, -84.3314),
- ('Novato', 'CA', ARRAY[94945, 94947, 94913, 94998], 38.0920, -122.5576),
- ('Tigard', 'OR', ARRAY[97223, 97281], 45.4237, -122.7845),
- ('Aloha', 'OR', ARRAY[97006, 97003, 97078, 97312], 45.4920, -122.8726),
- ('Highland', 'CA', ARRAY[92410, 92346], 34.1113, -117.1654),
- ('Fountain Valley', 'CA', ARRAY[92728], 33.7105, -117.9514),
- ('Dearborn Heights', 'MI', ARRAY[48125], 42.3164, -83.2769),
- ('Grapevine', 'TX', ARRAY[76099], 32.9343, -97.0744),
- ('Fond du Lac', 'WI', ARRAY[54935, 54936], 43.7718, -88.4396),
- ('Ithaca', 'NY', ARRAY[14850, 14851], 42.4442, -76.5032),
- ('Chicopee', 'MA', ARRAY[1022, 1013, 1014, 1021], 42.1764, -72.5719),
- ('Hempstead', 'NY', ARRAY[11551], 40.7043, -73.6193),
- ('Wesley Chapel', 'FL', ARRAY[33545, 33559, 33544], 28.2106, -82.3238),
- ('Oak Lawn', 'IL', ARRAY[60454], 41.7139, -87.7528),
- ('Cathedral City', 'CA', ARRAY[92234], 33.8363, -116.4642),
- ('Hacienda Heights', 'CA', ARRAY[91716], 33.9970, -117.9728),
- ('Stonecrest', 'GA', ARRAY[30038, 30058, 30018], 33.6842, -84.1372),
- ('Kettering', 'OH', ARRAY[45409, 45429, 45420, 45419], 39.6957, -84.1495),
- ('Kingston', 'NY', ARRAY[12402], 41.9295, -73.9968),
- ('West Haven', 'CT', ARRAY[6504], 41.2739, -72.9672),
- ('St. Cloud', 'FL', ARRAY[34771, 34772, 34770], 28.2294, -81.2829),
- ('Normal', 'IL', ARRAY[61790], 40.5218, -88.9881),
- ('Minnetonka', 'MN', ARRAY[55345, 55343, 55391], 44.9322, -93.4598),
- ('Rosemead', 'CA', ARRAY[91771, 91772], 34.0689, -118.0823),
- ('Brunswick', 'GA', ARRAY[32523], 31.1450, -81.4740),
- ('Williamsport', 'PA', ARRAY[17703, 17705], 41.2398, -77.0371),
- ('Elyria', 'OH', ARRAY[44036], 41.3761, -82.1063),
- ('Leesburg', 'VA', ARRAY[20175, 20178], 39.1058, -77.5544),
- ('Mount Prospect', 'IL', ARRAY[60065], 42.0641, -87.9375),
- ('Pinellas Park', 'FL', ARRAY[33782, 33762, 33760, 33773], 27.8589, -82.7078),
- ('Bellevue', 'NE', ARRAY[68147, 68005, 68157], 41.1535, -95.9357),
- ('West Sacramento', 'CA', ARRAY[95691, 95798, 95799, 95899], 38.5557, -121.5504),
- ('Apopka', 'FL', ARRAY[32703, 32704, 32768], 28.7014, -81.5304),
- ('Grand Island', 'NE', ARRAY[68801, 68802], 40.9214, -98.3584),
- ('Palm Desert', 'CA', ARRAY[92211], 33.7378, -116.3695),
- ('Milford city ', 'CT', ARRAY[6460], 41.2256, -73.0625),
- ('Little Elm', 'TX', ARRAY[76227], 33.1856, -96.9290),
- ('Peabody', 'MA', ARRAY[1961], 42.5335, -70.9724),
- ('Wylie', 'TX', ARRAY[75173, 75407, 75166, 75086], 33.0362, -96.5161),
- ('Beaufort', 'SC', ARRAY[29904, 29906], 32.4597, -80.7235),
- ('DeSoto', 'TX', ARRAY[75123], 32.5992, -96.8633),
- ('Helena', 'MT', ARRAY[59602, 59604, 59620, 59624], 46.5965, -112.0202),
- ('Edina', 'MN', ARRAY[55436, 55435, 55439, 55410], 44.8914, -93.3602),
- ('Aspen Hill', 'MD', ARRAY[20906, 20897], 39.0928, -77.0823),
- ('Wheaton', 'IL', ARRAY[60189], 41.8561, -88.1083),
- ('Lacey', 'WA', ARRAY[98516, 98509, 98561], 47.0460, -122.7934),
- ('Summerville', 'SC', ARRAY[29483], 33.0015, -80.1799),
- ('Oak Park', 'IL', ARRAY[60302, 60304, 60303], 41.8872, -87.7899),
- ('Kentwood', 'MI', ARRAY[49512, 49546, 49508], 42.8852, -85.5925),
- ('Sierra Vista', 'AZ', ARRAY[85635, 85613, 85670, 85671], 31.5630, -110.3153),
- ('Levittown', 'PA', ARRAY[19055, 19056, 19057, 19058], 40.1537, -74.8530),
- ('Madison', 'AL', ARRAY[35756], 34.7114, -86.7626),
- ('Glendora', 'CA', ARRAY[91741], 34.1449, -117.8468),
- ('Levittown', 'NY', ARRAY[11756, 11783], 40.7241, -73.5125),
- ('Burien', 'WA', ARRAY[98148, 98168, 98166, 98062], 47.4762, -122.3394),
- ('Perth Amboy', 'NJ', ARRAY[8862], 40.5203, -74.2724),
- ('Farmington', 'NM', ARRAY[87402, 87415], 36.7555, -108.1823),
- ('New Bern', 'NC', ARRAY[28562, 28561, 28563, 28564], 35.0955, -77.0723),
- ('Placentia', 'CA', ARRAY[92811, 92871], 33.8807, -117.8553),
- ('Collierville', 'TN', ARRAY[38017, 38027], 35.0471, -89.6988),
- ('West Lafayette', 'IN', ARRAY[47907, 47996], 40.4432, -86.9239),
- ('Florissant', 'MO', ARRAY[63031, 63032], 38.7996, -90.3269),
- ('Hoffman Estates', 'IL', ARRAY[60192, 60195, 60169, 60120], 42.0639, -88.1468),
- ('Queen Creek', 'AZ', ARRAY[85140], 33.2386, -111.6343),
- ('Kannapolis', 'NC', ARRAY[28083, 28081, 28082], 35.4764, -80.6403),
- ('Maricopa', 'AZ', ARRAY[85139], 33.0404, -112.0006),
- ('Sahuarita', 'AZ', ARRAY[85614], 31.9323, -110.9654),
- ('Rowland Heights', 'CA', ARRAY[91789], 33.9716, -117.8911),
- ('Traverse City', 'MI', ARRAY[49684], 44.7547, -85.6035),
- ('Wheaton', 'MD', ARRAY[20902], 39.0492, -77.0572),
- ('East Hartford', 'CT', ARRAY[6118, 6128, 6138], 41.7634, -72.6152),
- ('Irondequoit', 'NY', ARRAY[14621, 14622, 14617], 43.2096, -77.5705),
- ('Catalina Foothills', 'AZ', ARRAY[85750, 85715, 85728], 32.3041, -110.8835),
- ('Cookeville', 'TN', ARRAY[38506, 38505, 38502, 38503], 36.1484, -85.5114),
- ('Mishawaka', 'IN', ARRAY[46545, 46546], 41.6736, -86.1669),
- ('Plainfield', 'NJ', ARRAY[7063, 7060, 7061], 40.6154, -74.4157),
- ('Bullhead City', 'AZ', ARRAY[86429, 86439], 35.1205, -114.5460),
- ('Ashburn', 'VA', ARRAY[20166, 20103, 20149], 39.0300, -77.4711),
- ('North Bethesda', 'MD', ARRAY[20814, 20817, 20852, 20857], 39.0393, -77.1191),
- ('Severn', 'MD', ARRAY[21077, 21076], 39.1355, -76.6958),
- ('Azusa', 'CA', ARRAY[91010], 34.1386, -117.9124),
- ('Morehead City', 'NC', ARRAY[28516], 34.7308, -76.7387),
- ('Coral Gables', 'FL', ARRAY[33143, 33134, 33158, 33156], 25.7037, -80.2715),
- ('Oroville', 'CA', ARRAY[95966], 39.4999, -121.5634),
- ('Wilson', 'NC', ARRAY[27896, 27894], 35.7312, -77.9284),
- ('Lawrence', 'IN', ARRAY[46235, 46236, 46226, 46249], 39.8674, -85.9905),
- ('Portage', 'MI', ARRAY[49024, 49081], 42.2000, -85.5906),
- ('Minot', 'ND', ARRAY[58703, 58702, 58701], 48.2375, -101.2781),
- ('Dunwoody', 'GA', ARRAY[30346, 30360, 31146], 33.9418, -84.3122),
- ('Poway', 'CA', ARRAY[92074], 32.9871, -117.0201),
- ('San Jacinto', 'CA', ARRAY[92582, 92581], 33.7970, -116.9916),
- ('Troy', 'NY', ARRAY[12180, 12181], 42.7354, -73.6751),
- ('Florin', 'CA', ARRAY[95823], 38.4832, -121.4042),
- ('Cuyahoga Falls', 'OH', ARRAY[44223, 44264, 44313, 44222], 41.1641, -81.5207),
- ('Downers Grove', 'IL', ARRAY[60516], 41.7949, -88.0170),
- ('Bedford', 'TX', ARRAY[76021, 75064, 76095], 32.8464, -97.1350),
- ('Dublin', 'OH', ARRAY[43017, 43016], 40.1112, -83.1454),
- ('Marana', 'AZ', ARRAY[85741, 85743, 85742, 85658], 32.4355, -111.1558),
- ('Stillwater', 'OK', ARRAY[74075, 74074, 74077], 36.1316, -97.0740),
- ('Hollister', 'CA', ARRAY[95024], 36.8563, -121.3981),
- ('North Highlands', 'CA', ARRAY[95841], 38.6713, -121.3721),
- ('Murray', 'UT', ARRAY[84121, 84107, 84122, 84157], 40.6498, -111.8874),
- ('Roswell', 'NM', ARRAY[88201], 33.3730, -104.5294),
- ('Pascagoula', 'MS', ARRAY[39567, 39568, 39569, 39595], 30.3665, -88.5507),
- ('Ceres', 'CA', ARRAY[95351, 95307], 37.5953, -120.9625),
- ('St. Louis Park', 'MN', ARRAY[55416], 44.9488, -93.3649),
- ('Palm Springs', 'CA', ARRAY[92264, 92258], 33.8017, -116.5382),
- ('Paducah', 'KY', ARRAY[42001, 42002], 37.0711, -88.6436),
- ('Findlay', 'OH', ARRAY[45839], 41.0467, -83.6379),
- ('Kyle', 'TX', ARRAY[78640], 29.9937, -97.8859),
- ('Monroe', 'MI', ARRAY[48161], 41.9154, -83.3850),
- ('Tuckahoe', 'VA', ARRAY[23229, 23226], 37.5878, -77.5858),
- ('Bel Air South', 'MD', ARRAY[21015, 21014], 39.5051, -76.3197),
- ('Ocoee', 'FL', ARRAY[34734], 28.5787, -81.5338),
- ('Burleson', 'TX', ARRAY[76058, 76097], 32.5170, -97.3343),
- ('La Mirada', 'CA', ARRAY[90637, 90639], 33.9025, -118.0093),
- ('Farmers Branch', 'TX', ARRAY[75244], 32.9272, -96.8804),
- ('East Lansing', 'MI', ARRAY[48823, 48824, 48826], 42.7480, -84.4835),
- ('Jeffersonville', 'IN', ARRAY[47131, 47132, 47134, 47144], 38.3376, -85.7026),
- ('Wauwatosa', 'WI', ARRAY[53225, 53226, 53222], 43.0615, -88.0347),
- ('Littleton', 'CO', ARRAY[80122, 80123, 80120, 80160], 39.5915, -105.0188),
- ('Cumberland', 'MD', ARRAY[21503, 21505], 39.6515, -78.7585),
- ('Cedar Hill', 'TX', ARRAY[75106], 32.5810, -96.9591),
- ('Carrollton', 'GA', ARRAY[30116, 30117, 30112, 30119], 33.5817, -85.0837),
- ('Enid', 'OK', ARRAY[73703, 73705, 73702, 73706], 36.4061, -97.8701),
- ('Rancho Santa Margarita', 'CA', ARRAY[92688], 33.6318, -117.5989),
- ('East Honolulu', 'HI', ARRAY[96825], 21.2975, -157.7211),
- ('Beavercreek', 'OH', ARRAY[45434, 45432, 45431, 45430], 39.7310, -84.0624),
- ('Niagara Falls', 'NY', ARRAY[14302, 14301, 14305, 14304], 43.0921, -79.0147),
- ('East Providence', 'RI', ARRAY[2914, 2916], 41.8065, -71.3565),
- ('Chesterfield', 'MO', ARRAY[63005], 38.6588, -90.5804),
- ('Covina', 'CA', ARRAY[91722, 91723], 34.0903, -117.8817),
- ('Bothell', 'WA', ARRAY[98011, 98041], 47.7735, -122.2044),
- ('Glenview', 'IL', ARRAY[60026, 60082], 42.0825, -87.8216),
- ('Keller', 'TX', ARRAY[76262], 32.9337, -97.2255),
- ('McLean', 'VA', ARRAY[22043, 22101, 22102, 22067], 38.9436, -77.1943),
- ('Danville', 'IL', ARRAY[61832], 40.1423, -87.6114),
- ('Spring Hill', 'TN', ARRAY[37179], 35.7438, -86.9116),
- ('Euclid', 'OH', ARRAY[44119, 44117, 44123], 41.5904, -81.5188),
- ('Kingman', 'AZ', ARRAY[86401, 86402], 35.2170, -114.0105),
- ('Galveston', 'TX', ARRAY[77550, 77554, 77552, 77553], 29.2487, -94.8910),
- ('University', 'FL', ARRAY[33549, 33612, 33559], 28.0771, -82.4335),
- ('Weatherford', 'TX', ARRAY[76087], 32.7536, -97.7723),
- ('Middletown', 'CT', ARRAY[6459], 41.5476, -72.6549),
- ('Roseburg', 'OR', ARRAY[97471], 43.2232, -123.3518),
- ('Biloxi', 'MS', ARRAY[39530, 39532, 39534, 39533], 30.4422, -88.9512),
- ('Leavenworth', 'KS', ARRAY[66048], 39.3239, -94.9240),
- ('Pearl City', 'HI', ARRAY[96782], 21.4031, -157.9566),
- ('Fort Pierce', 'FL', ARRAY[34947, 34982, 34981, 34950], 27.4256, -80.3431),
- ('Winter Garden', 'FL', ARRAY[34777], 28.5421, -81.5966),
- ('Oro Valley', 'AZ', ARRAY[85704, 85737], 32.4208, -110.9768),
- ('Danville', 'VA', ARRAY[24541, 24543], 36.5831, -79.4087),
- ('Rockwall', 'TX', ARRAY[75087, 75189], 32.9169, -96.4377),
- ('Potomac', 'MD', ARRAY[20854, 20859], 39.0141, -77.1943),
- ('El Dorado Hills', 'CA', ARRAY[95762, 95682], 38.6750, -121.0490),
- ('Tupelo', 'MS', ARRAY[38801, 38826], 34.2692, -88.7318),
- ('Pine Bluff', 'AR', ARRAY[71601, 71603], 34.2116, -92.0178),
- ('Oakland Park', 'FL', ARRAY[33309, 33334, 33311], 26.1780, -80.1528),
- ('Marion', 'OH', ARRAY[43301], 40.5933, -83.1237),
- ('Arlington', 'MA', ARRAY[2474, 2475], 42.4187, -71.1640),
- ('Altadena', 'CA', ARRAY[91001, 91003], 34.1928, -118.1345),
- ('Lufkin', 'TX', ARRAY[75901, 75902], 31.3217, -94.7277),
- ('Trujillo Alto', 'PR', ARRAY[926, 977, 978], 18.3601, -66.0103),
- ('Strongsville', 'OH', ARRAY[44149], 41.3128, -81.8313),
- ('Danville', 'CA', ARRAY[94526], 37.8121, -121.9698),
- ('Quincy', 'IL', ARRAY[62305, 62306], 39.9335, -91.3799),
- ('Riverton', 'UT', ARRAY[84065], 40.5177, -111.9635),
- ('The Colony', 'TX', ARRAY[75056], 33.0925, -96.8977),
- ('Urbandale', 'IA', ARRAY[50323, 50322], 41.6390, -93.7813),
- ('Plainfield', 'IL', ARRAY[60586, 60585], 41.6206, -88.2252),
- ('Lombard', 'IL', ARRAY[60128], 41.8742, -88.0157),
- ('Prescott', 'AZ', ARRAY[86301, 86303, 86313, 86304], 34.5850, -112.4475),
- ('Eureka', 'CA', ARRAY[95501, 95521, 95502, 95534], 40.7942, -124.1568),
- ('Hackensack', 'NJ', ARRAY[7602], 40.8890, -74.0461),
- ('Sayreville', 'NJ', ARRAY[8879, 8859, 8871], 40.4656, -74.3237),
- ('Altamonte Springs', 'FL', ARRAY[32701, 32715, 32716], 28.6615, -81.3953),
- ('Del Rio', 'TX', ARRAY[78841, 78842, 78847], 29.3708, -100.8800),
- ('Cleveland Heights', 'OH', ARRAY[44118, 44112, 44106], 41.5112, -81.5636),
- ('Bountiful', 'UT', ARRAY[84011], 40.8722, -111.8647),
- ('Desert Hot Springs', 'CA', ARRAY[92240, 92258], 33.9551, -116.5430),
- ('Peachtree Corners', 'GA', ARRAY[30092, 30360], 33.9670, -84.2319),
- ('Haltom City', 'TX', ARRAY[76148, 76117, 76136], 32.8176, -97.2707),
- ('Ormond Beach', 'FL', ARRAY[32176, 32173, 32175], 29.2960, -81.1003),
- ('Annandale', 'VA', ARRAY[22042], 38.8324, -77.1960),
- ('Cutler Bay', 'FL', ARRAY[33157, 33189], 25.5765, -80.3356),
- ('Moorhead', 'MN', ARRAY[56562, 56563], 46.8673, -96.7461),
- ('Westfield', 'IN', ARRAY[46074], 40.0333, -86.1532),
- ('Concord', 'NH', ARRAY[3301, 3302, 3305], 43.2305, -71.5595),
- ('Rohnert Park', 'CA', ARRAY[94926, 94927], 38.3480, -122.6964),
- ('Brea', 'CA', ARRAY[92823, 92822], 33.9254, -117.8656),
- ('Klamath Falls', 'OR', ARRAY[97601], 42.2191, -121.7754),
- ('Salem', 'MA', ARRAY[1971], 42.5129, -70.9020),
- ('Whitney', 'NV', ARRAY[89112], 36.1005, -115.0380),
- ('North Miami Beach', 'FL', ARRAY[33162], 25.9302, -80.1660),
- ('Stevens Point', 'WI', ARRAY[54482, 54492], 44.5241, -89.5508),
- ('Brentwood', 'TN', ARRAY[37024], 35.9918, -86.7758),
- ('Burke', 'VA', ARRAY[22153, 22152, 22009], 38.7773, -77.2633),
- ('Hicksville', 'NY', ARRAY[11802, 11815], 40.7637, -73.5245),
- ('Edmonds', 'WA', ARRAY[98020], 47.8115, -122.3533),
- ('Apache Junction', 'AZ', ARRAY[85120, 85117, 85178], 33.3985, -111.5351),
- ('Fairfield', 'OH', ARRAY[45018], 39.3301, -84.5409),
- ('Hutchinson', 'KS', ARRAY[67501, 67504], 38.0671, -97.9081),
- ('Greenwood', 'SC', ARRAY[29646, 29647, 29648], 34.1945, -82.1542),
- ('Richmond', 'IN', ARRAY[47375], 39.8318, -84.8905),
- ('Puyallup', 'WA', ARRAY[98371, 98374, 98373], 47.1794, -122.2902),
- ('Urbana', 'IL', ARRAY[61802, 61803], 40.1106, -88.1972),
- ('Beverly', 'MA', ARRAY[1965], 42.5681, -70.8627),
- ('Statesboro', 'GA', ARRAY[30461, 30458, 30459], 32.4376, -81.7750),
- ('Hobbs', 'NM', ARRAY[88244], 32.7282, -103.1600),
- ('Schertz', 'TX', ARRAY[78154], 29.5649, -98.2537),
- ('Bell Gardens', 'CA', ARRAY[90202], 33.9663, -118.1550),
- ('Channelview', 'TX', ARRAY[77049], 29.7914, -95.1145),
- ('Oviedo', 'FL', ARRAY[32766, 32762], 28.6580, -81.1872),
- ('Odenton', 'MD', ARRAY[21113], 39.0661, -76.6939),
- ('Campbell', 'CA', ARRAY[95009, 95011], 37.2802, -121.9538),
- ('Wentzville', 'MO', ARRAY[63346], 38.8152, -90.8667),
- ('La Quinta', 'CA', ARRAY[92235, 92247, 92248], 33.6536, -116.2785),
- ('North Fort Myers', 'FL', ARRAY[33903], 26.7243, -81.8491),
- ('Zanesville', 'OH', ARRAY[43702], 39.9565, -82.0132),
- ('Newnan', 'GA', ARRAY[30265, 30271], 33.3766, -84.7761),
- ('Brighton', 'CO', ARRAY[80601], 39.9716, -104.7964),
- ('Catonsville', 'MD', ARRAY[21228], 39.2646, -76.7424),
- ('Moline', 'IL', ARRAY[61266], 41.4821, -90.4921),
- ('Westfield', 'MA', ARRAY[1085], 42.1382, -72.7561),
- ('Greenacres', 'FL', ARRAY[33415, 33463], 26.6272, -80.1371),
- ('Westerville', 'OH', ARRAY[43082, 43086], 40.1241, -82.9209),
- ('Linton Hall', 'VA', ARRAY[20155], 38.7551, -77.5750),
- ('Manassas', 'VA', ARRAY[20108, 20113], 38.7479, -77.4839),
- ('Kearny', 'NJ', ARRAY[7099], 40.7528, -74.1202),
- ('South Valley', 'NM', ARRAY[87190], 35.0092, -106.6819),
- ('Richmond', 'KY', ARRAY[40476], 37.7306, -84.2926),
- ('Belleville', 'IL', ARRAY[62220, 62226, 62223, 62222], 38.5165, -89.9900),
- ('Maplewood', 'MN', ARRAY[55119, 55109], 44.9842, -93.0247),
- ('Wilkes-Barre', 'PA', ARRAY[18701, 18705, 18703, 18710], 41.2468, -75.8759),
- ('Columbia', 'TN', ARRAY[38402], 35.6235, -87.0486),
- ('Marion', 'IN', ARRAY[46952], 40.5496, -85.6600),
- ('Cedar Falls', 'IA', ARRAY[50614], 42.5195, -92.4534),
- ('Jamestown', 'NY', ARRAY[14702], 42.0975, -79.2366),
- ('Huntsville', 'TX', ARRAY[77342, 77320, 77341, 77343], 30.7050, -95.5544),
- ('Mableton', 'GA', ARRAY[30168], 33.8132, -84.5656),
- ('Clarksburg', 'WV', ARRAY[26330, 26302, 26306], 39.2863, -80.3230),
- ('Covington', 'KY', ARRAY[41015, 41014, 41017, 41016], 39.0334, -84.5166),
- ('Friendswood', 'TX', ARRAY[77549], 29.5111, -95.1979),
- ('Indian Trail', 'NC', ARRAY[28110, 28079], 35.0698, -80.6457),
- ('Woburn', 'MA', ARRAY[1815, 1888], 42.4869, -71.1543),
- ('Holyoke', 'MA', ARRAY[1041], 42.2125, -72.6411),
- ('Arecibo', 'PR', ARRAY[613, 614], 18.4491, -66.7387),
- ('Cedar City', 'UT', ARRAY[84721], 37.6834, -113.0956),
- ('Coram', 'NY', ARRAY[11784, 11738, 11776], 40.8813, -73.0059),
- ('San Gabriel', 'CA', ARRAY[91776, 91778], 34.0948, -118.0990),
- ('Hallandale Beach', 'FL', ARRAY[33008], 25.9854, -80.1423),
- ('Crystal Lake', 'IL', ARRAY[60012, 60039], 42.2333, -88.3351),
- ('Lake Oswego', 'OR', ARRAY[97035, 97036], 45.4130, -122.7003),
- ('Muskogee', 'OK', ARRAY[74401, 74402], 35.7431, -95.3568),
- ('Romeoville', 'IL', ARRAY[60446], 41.6318, -88.0996),
- ('Plant City', 'FL', ARRAY[33563, 33565, 33564], 28.0140, -82.1201),
- ('Keizer', 'OR', ARRAY[97307], 45.0029, -123.0241),
- ('New Berlin', 'WI', ARRAY[53151], 42.9726, -88.1291),
- ('Chelsea', 'MA', ARRAY[2204], 42.3959, -71.0325),
- ('The Acreage', 'FL', ARRAY[33412, 33470], 26.7741, -80.2779),
- ('La Puente', 'CA', ARRAY[91744, 91747, 91749], 34.0323, -117.9533),
- ('Milton', 'GA', ARRAY[30009], 34.1353, -84.3138),
- ('Issaquah', 'WA', ARRAY[98027], 47.5440, -122.0471),
- ('Kendall West', 'FL', ARRAY[33185], 25.7065, -80.4388),
- ('Sun City', 'AZ', ARRAY[85373, 85372], 33.6165, -112.2819),
- ('Bartlesville', 'OK', ARRAY[74003, 74004], 36.7357, -95.9453),
- ('Lancaster', 'TX', ARRAY[75134], 32.5922, -96.7737),
- ('Germantown', 'TN', ARRAY[38139, 38183], 35.0829, -89.7825),
- ('Annapolis', 'MD', ARRAY[21403, 21404, 21411], 38.9706, -76.5047),
- ('Carol Stream', 'IL', ARRAY[60116, 60197, 60199], 41.9182, -88.1308),
- ('Asheboro', 'NC', ARRAY[27203, 27204], 35.7158, -79.8129),
- ('Culver City', 'CA', ARRAY[90230, 90060, 90231, 90233], 34.0058, -118.3968),
- ('Lynnwood', 'WA', ARRAY[98036, 98046], 47.8284, -122.3033),
- ('Mooresville', 'NC', ARRAY[28115], 35.5849, -80.8265),
- ('Brookfield', 'WI', ARRAY[53045, 53008], 43.0640, -88.1231),
- ('Crestview', 'FL', ARRAY[32536], 30.7480, -86.5784),
- ('Woodlawn', 'MD', ARRAY[21207, 21228, 21235, 21241], 39.3054, -76.7489),
- ('New Castle', 'PA', ARRAY[16101, 16105, 16103, 16107], 40.9956, -80.3459),
- ('Enterprise', 'AL', ARRAY[36331], 31.3276, -85.8459),
- ('Frankfort', 'KY', ARRAY[40601, 40602, 40603, 40618], 38.1924, -84.8643),
- ('Northglenn', 'CO', ARRAY[80233, 80234, 80603], 39.9108, -104.9783),
- ('Warren', 'OH', ARRAY[44485, 44484, 44482, 44486], 41.2390, -80.8174),
- ('Duncanville', 'TX', ARRAY[75137, 75138], 32.6460, -96.9127),
- ('Hurst', 'TX', ARRAY[76053], 32.8353, -97.1808),
- ('Clermont', 'FL', ARRAY[34712, 34713], 28.5402, -81.7259),
- ('Severna Park', 'MD', ARRAY[21108, 21123], 39.0870, -76.5687),
- ('Lake Worth', 'FL', ARRAY[33460, 33464, 33465, 33466], 26.6196, -80.0591),
- ('Lebanon', 'TN', ARRAY[37087, 37088], 36.2040, -86.3481),
- ('Eagle Mountain', 'UT', ARRAY[84005], 40.3137, -112.0114),
- ('Reynoldsburg', 'OH', ARRAY[43069], 39.9587, -82.7944),
- ('Oxford', 'MS', ARRAY[38677], 34.3627, -89.5336),
- ('Rosenberg', 'TX', ARRAY[77469], 29.5460, -95.8220),
- ('Valrico', 'FL', ARRAY[33596, 33587, 33601], 27.9193, -82.2293),
- ('Security-Widefield', 'CO', ARRAY[80925], 38.7489, -104.7142),
- ('Menomonee Falls', 'WI', ARRAY[53052], 43.1487, -88.1227),
- ('Granbury', 'TX', ARRAY[76049], 32.4484, -97.7685),
- ('Waxahachie', 'TX', ARRAY[75167], 32.4032, -96.8444),
- ('Richmond West', 'FL', ARRAY[33187], 25.6105, -80.4297),
- ('South Miami Heights', 'FL', ARRAY[33157], 25.5886, -80.3862),
- ('Holly Springs', 'NC', ARRAY[27540], 35.6530, -78.8397),
- ('Butler', 'PA', ARRAY[16003], 40.8616, -79.8962),
- ('Albertville', 'AL', ARRAY[35950], 34.2634, -86.2107),
- ('London', 'KY', ARRAY[40741, 40742, 40745], 37.1175, -84.0767),
- ('Cottage Grove', 'MN', ARRAY[55033], 44.8161, -92.9274),
- ('Mechanicsville', 'VA', ARRAY[23111], 37.6262, -77.3561),
- ('Cleburne', 'TX', ARRAY[76031, 76033], 32.3570, -97.4152),
- ('Valley Stream', 'NY', ARRAY[11581, 11582], 40.6647, -73.7044),
- ('Winter Springs', 'FL', ARRAY[32719], 28.6889, -81.2704),
- ('Greenfield', 'WI', ARRAY[53220, 53228], 42.9619, -88.0051),
- ('Braintree Town', 'MA', ARRAY[2185], 42.2039, -71.0022),
- ('Parkland', 'WA', ARRAY[98445, 98447], 47.1417, -122.4376),
- ('Oakton', 'VA', ARRAY[22124, 22181, 22185], 38.8887, -77.3016),
- ('Rock Island', 'IL', ARRAY[61204], 41.4699, -90.5827),
- ('Mount Juliet', 'TN', ARRAY[37121], 36.1991, -86.5114),
- ('Land O'' Lakes', 'FL', ARRAY[34638, 33559, 34639], 28.2075, -82.4476),
- ('Aventura', 'FL', ARRAY[33180], 25.9565, -80.1372),
- ('Park Ridge', 'IL', ARRAY[60668], 42.0125, -87.8436),
- ('Commack', 'NY', ARRAY[11731], 40.8443, -73.2834),
- ('Foley', 'AL', ARRAY[36530], 30.3983, -87.6649),
- ('New Albany', 'IN', ARRAY[47151], 38.3089, -85.8234),
- ('Benton', 'AR', ARRAY[72015, 72158], 34.5775, -92.5712),
- ('Merritt Island', 'FL', ARRAY[32953], 28.3146, -80.6713),
- ('Meridian', 'MS', ARRAY[39305, 39301, 39302, 39304], 32.3846, -88.6896),
- ('Bettendorf', 'IA', ARRAY[52722], 41.5656, -90.4764),
- ('Dunedin', 'FL', ARRAY[34697], 28.0329, -82.7863),
- ('Phenix City', 'AL', ARRAY[36867, 36868], 32.4588, -85.0251),
- ('West Hollywood', 'CA', ARRAY[90046, 90048], 34.0882, -118.3718),
- ('Brighton', 'NY', ARRAY[14620, 14623, 14618, 14610], 43.1175, -77.5835),
- ('Tucker', 'GA', ARRAY[30084, 30083, 30063, 30085], 33.8436, -84.2021),
- ('Moorpark', 'CA', ARRAY[93020], 34.2855, -118.8770),
- ('Monrovia', 'CA', ARRAY[91017, 91185], 34.1650, -117.9921),
- ('Peachtree City', 'GA', ARRAY[30270, 31169], 33.3943, -84.5712),
- ('Lauderdale Lakes', 'FL', ARRAY[33313, 33311, 33319], 26.1682, -80.2017),
- ('Pahrump', 'NV', ARRAY[89060, 89061, 89041], 36.2411, -116.0176),
- ('University', 'FL', ARRAY[32817, 32816], 28.5900, -81.1990),
- ('Shawnee', 'OK', ARRAY[74801], 35.3529, -96.9650),
- ('Gillette', 'WY', ARRAY[82716, 82717], 44.2752, -105.4983),
- ('Prattville', 'AL', ARRAY[36067, 36068], 32.4605, -86.4588),
- ('Watertown Town', 'MA', ARRAY[2471], 42.3700, -71.1774),
- ('San Juan Capistrano', 'CA', ARRAY[92615], 33.5009, -117.6544),
- ('Cooper City', 'FL', ARRAY[33026, 33330, 33328], 26.0463, -80.2862),
- ('Chillum', 'MD', ARRAY[20782, 20712], 38.9667, -76.9790),
- ('LaGrange', 'GA', ARRAY[30241], 33.0274, -85.0384),
- ('La Vergne', 'TN', ARRAY[37089], 36.0203, -86.5582),
- ('Mount Pleasant', 'MI', ARRAY[48804, 48859], 43.5966, -84.7759),
- ('Inver Grove Heights', 'MN', ARRAY[55076], 44.8247, -93.0596),
- ('Monroe', 'NC', ARRAY[28112, 28111], 35.0061, -80.5595),
- ('Bell', 'CA', ARRAY[90096], 33.9801, -118.1798),
- ('Sanford', 'NC', ARRAY[27332, 27259, 27331], 35.4874, -79.1772),
- ('Riviera Beach', 'FL', ARRAY[33404], 26.7812, -80.0742),
- ('Wildwood', 'MO', ARRAY[63021, 63011, 63040, 63038], 38.5799, -90.6699),
- ('Upper Arlington', 'OH', ARRAY[43221, 43212], 40.0272, -83.0704),
- ('Plainfield', 'IN', ARRAY[46231], 39.6953, -86.3717),
- ('Olney', 'MD', ARRAY[20832, 20833, 20853, 20830], 39.1465, -77.0715),
- ('Carrollwood', 'FL', ARRAY[33618, 33688], 28.0577, -82.5149),
- ('La Porte', 'TX', ARRAY[77572], 29.6689, -95.0484),
- ('Englewood', 'CO', ARRAY[80110, 80150, 80151], 39.6468, -104.9942),
- ('Randallstown', 'MD', ARRAY[21133], 39.3723, -76.8024),
- ('East Point', 'GA', ARRAY[30349, 30364], 33.6696, -84.4701),
- ('DeLand', 'FL', ARRAY[32720, 32723], 29.0224, -81.2873),
- ('Golden Glades', 'FL', ARRAY[33161, 33162, 33169, 33163], 25.9129, -80.2013),
- ('Merrillville', 'IN', ARRAY[46307, 46411], 41.4728, -87.3197),
- ('Leawood', 'KS', ARRAY[66224, 66209, 66206], 38.9076, -94.6258),
- ('Oildale', 'CA', ARRAY[93388], 35.4249, -119.0279),
- ('Menlo Park', 'CA', ARRAY[94026], 37.4686, -122.1672),
- ('Sun Prairie', 'WI', ARRAY[53596], 43.1827, -89.2358),
- ('New City', 'NY', ARRAY[10954, 10920], 41.1543, -73.9909),
- ('Lockport', 'NY', ARRAY[14095], 43.1698, -78.6956),
- ('Boardman', 'OH', ARRAY[44511, 44514], 41.0334, -80.6671),
- ('Pullman', 'WA', ARRAY[99163], 46.7340, -117.1669),
- ('Nacogdoches', 'TX', ARRAY[75961, 75964, 75965], 31.6134, -94.6528),
- ('Kearney', 'NE', ARRAY[68845, 68849], 40.7010, -99.0834),
- ('Ferry Pass', 'FL', ARRAY[32514], 30.5203, -87.1903),
- ('Vestavia Hills', 'AL', ARRAY[35243, 35242], 33.4518, -86.7438),
- ('Norristown', 'PA', ARRAY[19404, 19415], 40.1224, -75.3398),
- ('Dakota Ridge', 'CO', ARRAY[80235, 80127], 39.6192, -105.1344),
- ('Firestone', 'CO', ARRAY[80504], 40.1563, -104.9494),
- ('Goshen', 'IN', ARRAY[46526, 46527], 41.5743, -85.8308),
- ('Russellville', 'AR', ARRAY[72801, 72812], 35.2763, -93.1383),
- ('Parkland', 'FL', ARRAY[33067], 26.3218, -80.2533),
- ('University City', 'MO', ARRAY[63130], 38.6657, -90.3315),
- ('Kennesaw', 'GA', ARRAY[30144], 34.0260, -84.6177),
- ('University Place', 'WA', ARRAY[98467, 98464], 47.2147, -122.5461),
- ('Douglasville', 'GA', ARRAY[30135, 30122, 30133], 33.7384, -84.7065),
- ('Salisbury', 'NC', ARRAY[28144, 28147, 28145], 35.6656, -80.4909),
- ('Laramie', 'WY', ARRAY[82070, 82071], 41.3099, -105.6085),
- ('Lake Stevens', 'WA', ARRAY[98205], 48.0028, -122.0960),
- ('Valparaiso', 'IN', ARRAY[46383, 46384], 41.4782, -87.0507),
- ('Estero', 'FL', ARRAY[34135, 33928, 33929], 26.4277, -81.7951),
- ('Cottonwood Heights', 'UT', ARRAY[84121, 84171], 40.6137, -111.8144),
- ('French Valley', 'CA', ARRAY[92596, 92593], 33.5998, -117.1069),
- ('Ken Caryl', 'CO', ARRAY[80127], 39.5770, -105.1144),
- ('Beverly Hills', 'CA', ARRAY[90211, 90210, 90209], 34.0786, -118.4021),
- ('Galesburg', 'IL', ARRAY[61402], 40.9506, -90.3763),
- ('Foothill Farms', 'CA', ARRAY[95841], 38.6867, -121.3475),
- ('Westmont', 'CA', ARRAY[90047], 33.9417, -118.3018),
- ('Warsaw', 'IN', ARRAY[46580, 46581], 41.2448, -85.8464),
- ('Fair Oaks', 'VA', ARRAY[22033, 22035], 38.8653, -77.3586),
- ('San Dimas', 'CA', ARRAY[91768], 34.1082, -117.8090),
- ('Dana Point', 'CA', ARRAY[92624], 33.4733, -117.6968),
- ('Newark', 'DE', ARRAY[19711, 19717, 19716, 19712], 39.6776, -75.7573),
- ('Alabaster', 'AL', ARRAY[35007, 35144], 33.2198, -86.8225),
- ('Lexington', 'MA', ARRAY[2420], 42.4456, -71.2307),
- ('Deer Park', 'TX', ARRAY[77571, 88581], 29.6898, -95.1151),
- ('West Little River', 'FL', ARRAY[33150], 25.8570, -80.2367),
- ('Pikesville', 'MD', ARRAY[21208, 21209, 21022], 39.3893, -76.7020),
- ('Greer', 'SC', ARRAY[29650, 29652], 34.9313, -82.2315),
- ('Springville', 'UT', ARRAY[84663], 40.1638, -111.6206),
- ('Matthews', 'NC', ARRAY[28106], 35.1195, -80.7101),
- ('Woodstock', 'GA', ARRAY[30189], 34.1026, -84.5090),
- ('Fallbrook', 'CA', ARRAY[92088], 33.3693, -117.2259),
- ('Florence', 'KY', ARRAY[41022], 38.9900, -84.6470),
- ('St. Charles', 'IL', ARRAY[60174], 41.9193, -88.3109),
- ('San Luis', 'AZ', ARRAY[85349], 32.4911, -114.7089),
- ('Fairmont', 'WV', ARRAY[26544], 39.4768, -80.1491),
- ('Massillon', 'OH', ARRAY[44646, 44648], 40.7838, -81.5254),
- ('Starkville', 'MS', ARRAY[39762], 33.4608, -88.8297),
- ('Horizon West', 'FL', ARRAY[34786], 28.4417, -81.6145),
- ('Harker Heights', 'TX', ARRAY[76513], 31.0572, -97.6445),
- ('Elk Grove Village', 'IL', ARRAY[60009], 42.0063, -87.9921),
- ('Redan', 'GA', ARRAY[30088, 30074], 33.7394, -84.1644),
- ('Des Moines', 'WA', ARRAY[98198], 47.3915, -122.3157),
- ('Bethel Park', 'PA', ARRAY[15234], 40.3239, -80.0364),
- ('East Lake', 'FL', ARRAY[34685, 34688, 33677], 28.1205, -82.6868),
- ('Kahului', 'HI', ARRAY[96784], 20.8715, -156.4603),
- ('Dania Beach', 'FL', ARRAY[33312], 26.0594, -80.1637),
- ('Spring Valley', 'NY', ARRAY[10977], 41.1151, -74.0486),
- ('Bowling Green', 'OH', ARRAY[43403], 41.3773, -83.6500),
- ('College Park', 'MD', ARRAY[20742, 20741], 38.9960, -76.9337),
- ('Coos Bay', 'OR', ARRAY[97420], 43.3789, -124.2330),
- ('Spanaway', 'WA', ARRAY[98445], 47.0979, -122.4233),
- ('Clearfield', 'UT', ARRAY[84016], 41.1030, -112.0237),
- ('Marrero', 'LA', ARRAY[70073], 29.8871, -90.1127),
- ('Pekin', 'IL', ARRAY[61555, 61558], 40.5679, -89.6262),
- ('Martinsville', 'VA', ARRAY[24113, 24114, 24115], 36.6827, -79.8636),
- ('Rome', 'NY', ARRAY[13440, 13308, 13442, 13449], 43.2260, -75.4909),
- ('Uniondale', 'NY', ARRAY[11530, 11553, 11556, 11590], 40.7176, -73.5947),
- ('Spring Valley', 'CA', ARRAY[91978, 91979], 32.7316, -116.9766),
- ('Bel Air North', 'MD', ARRAY[21015, 21014], 39.5544, -76.3733),
- ('Hopkinsville', 'KY', ARRAY[42241], 36.8386, -87.4776),
- ('Rochester', 'NH', ARRAY[3868, 3867, 3866], 43.2990, -70.9787),
- ('Milledgeville', 'GA', ARRAY[31061, 31034], 33.0874, -83.2414),
- ('Eldersburg', 'MD', ARRAY[21104], 39.4041, -76.9529),
- ('Sherwood', 'AR', ARRAY[72076, 72117], 34.8508, -92.2028),
- ('Garner', 'NC', ARRAY[27603], 35.6934, -78.6196),
- ('Key West', 'FL', ARRAY[33041, 33045], 24.5637, -81.7768),
- ('Miami Lakes', 'FL', ARRAY[33016, 33018], 25.9125, -80.3214),
- ('Petersburg', 'VA', ARRAY[23805, 23804], 37.2043, -77.3913),
- ('Wheat Ridge', 'CO', ARRAY[80212, 80214, 80034], 39.7728, -105.1029),
- ('Cibolo', 'TX', ARRAY[78108], 29.5639, -98.2123),
- ('Princeton', 'NJ', ARRAY[8542, 8541, 8544], 40.3563, -74.6693),
- ('Athens', 'AL', ARRAY[35613, 35612], 34.7847, -86.9510),
- ('Springfield', 'VA', ARRAY[22150, 22156, 22158, 22159], 38.7809, -77.1839),
- ('Columbus', 'MS', ARRAY[39701, 39705], 33.5088, -88.4096),
- ('Rexburg', 'ID', ARRAY[83440], 43.8224, -111.7920),
- ('Nicholasville', 'KY', ARRAY[40340], 37.8902, -84.5669),
- ('Goleta', 'CA', ARRAY[93118], 34.4360, -119.8596),
- ('Opelika', 'AL', ARRAY[36801, 36802], 32.6612, -85.3769),
- ('Butte', 'MT', ARRAY[59748, 59727, 59759, 59750], 45.9020, -112.6571),
- ('Lakeside', 'FL', ARRAY[32065, 32073, 32030], 30.1356, -81.7674),
- ('Burlingame', 'CA', ARRAY[94011], 37.5860, -122.3669),
- ('Aiken', 'SC', ARRAY[29803, 29804, 29808], 33.5310, -81.7268),
- ('Lawrenceville', 'GA', ARRAY[30042, 30049], 33.9523, -83.9931),
- ('Winter Park', 'FL', ARRAY[32789, 32790, 32793], 28.5987, -81.3438),
- ('Granger', 'IN', ARRAY[46545, 46530], 41.7373, -86.1350),
- ('Fitchburg', 'WI', ARRAY[53719, 53711, 53713, 53725], 42.9859, -89.4255),
- ('Needham', 'MA', ARRAY[2494], 42.2814, -71.2411),
- ('Brooklyn Center', 'MN', ARRAY[55430], 45.0681, -93.3162),
- ('Barstow', 'CA', ARRAY[92327], 34.8661, -117.0472),
- ('Auburn', 'NY', ARRAY[13024, 13022], 42.9338, -76.5684),
- ('Orcutt', 'CA', ARRAY[93457], 34.8668, -120.4269),
- ('Crown Point', 'IN', ARRAY[46308], 41.4141, -87.3457),
- ('Windsor', 'CO', ARRAY[80551], 40.4693, -104.9213),
- ('Gloucester', 'MA', ARRAY[1931], 42.6260, -70.6897),
- ('Sterling', 'VA', ARRAY[20163, 20167], 39.0052, -77.4050),
- ('Orangeburg', 'SC', ARRAY[29117, 29115], 33.4928, -80.8670),
- ('Holladay', 'UT', ARRAY[84121, 84124], 40.6599, -111.8226),
- ('Newington', 'CT', ARRAY[6131, 6153], 41.6870, -72.7308),
- ('Chamblee', 'GA', ARRAY[30345, 30366], 33.8842, -84.3008),
- ('Peru', 'IL', ARRAY[61354], 41.3484, -89.1370),
- ('Santa Paula', 'CA', ARRAY[93061], 34.3521, -119.0698),
- ('Los Gatos', 'CA', ARRAY[95030, 95036], 37.2303, -121.9560),
- ('Westchester', 'FL', ARRAY[33144, 33165, 33155], 25.7474, -80.3358),
- ('South Lake Tahoe', 'CA', ARRAY[96151, 96152, 96156, 96157], 38.9393, -119.9828),
- ('Clinton', 'IA', ARRAY[52733, 52734, 52736], 41.8434, -90.2408),
- ('Saratoga', 'CA', ARRAY[95071], 37.2684, -122.0263),
- ('Los Altos', 'CA', ARRAY[94024, 94023], 37.3685, -122.0966),
- ('Ballwin', 'MO', ARRAY[63011, 63022], 38.5951, -90.5500),
- ('Atascadero', 'CA', ARRAY[93423], 35.4827, -120.6858),
- ('Somerset', 'KY', ARRAY[42501, 42533], 37.0815, -84.6091),
- ('Stockbridge', 'GA', ARRAY[30281], 33.5253, -84.2294),
- ('Manchester', 'CT', ARRAY[6040, 6041, 6045], 41.7801, -72.5192),
- ('Williston', 'ND', ARRAY[58802, 58803], 48.1814, -103.6364),
- ('Lake Magdalene', 'FL', ARRAY[33613, 33612], 28.0875, -82.4791),
- ('Carney', 'MD', ARRAY[21057], 39.4050, -76.5236),
- ('Maryville', 'TN', ARRAY[37804, 37801, 37802], 35.7468, -83.9789),
- ('Walnut', 'CA', ARRAY[91788], 34.0334, -117.8593),
- ('Kent', 'OH', ARRAY[44240, 44242], 41.1490, -81.3610),
- ('North Chicago', 'IL', ARRAY[60064, 60086], 42.3172, -87.8596),
- ('Greenville', 'MS', ARRAY[38703], 33.3850, -91.0514),
- ('Duluth', 'GA', ARRAY[30096, 30026, 30029, 30095], 34.0053, -84.1492),
- ('Sanford', 'ME', ARRAY[4083], 43.4244, -70.7573),
- ('Drexel Heights', 'AZ', ARRAY[85746], 32.1457, -111.0478),
- ('Oak Park', 'MI', ARRAY[48325], 42.4649, -83.1824),
- ('Central', 'LA', ARRAY[70791, 70714, 70739, 70819], 30.5593, -91.0369),
- ('Chicago Heights', 'IL', ARRAY[60412], 41.5101, -87.6345),
- ('Norwood', 'MA', ARRAY[2060], 42.1861, -71.1948),
- ('Wellesley', 'MA', ARRAY[2481, 2457], 42.3043, -71.2855),
- ('Oak Ridge', 'TN', ARRAY[37831], 35.9639, -84.2938),
- ('SeaTac', 'WA', ARRAY[98148, 98198, 98168, 98188], 47.4444, -122.2986),
- ('Raytown', 'MO', ARRAY[64133], 38.9944, -94.4641),
- ('Harrison', 'NY', ARRAY[10580, 10577, 10528], 41.0233, -73.7192),
- ('Fernandina Beach', 'FL', ARRAY[32035], 30.6579, -81.4504),
- ('Bella Vista', 'AR', ARRAY[72715], 36.4667, -94.2707),
- ('East Haven', 'CT', ARRAY[6512], 41.2984, -72.8577),
- ('Morrisville', 'NC', ARRAY[27650], 35.8367, -78.8348),
- ('Casselberry', 'FL', ARRAY[32718], 28.6625, -81.3218),
- ('Plattsburgh', 'NY', ARRAY[12903], 44.6951, -73.4563),
- ('Seguin', 'TX', ARRAY[78156], 29.5889, -97.9671),
- ('Agawam Town', 'MA', ARRAY[1001], 42.0657, -72.6526),
- ('East Lake-Orient Park', 'FL', ARRAY[33619, 33610, 33617], 27.9971, -82.3653),
- ('Burton', 'MI', ARRAY[48529, 48519], 42.9974, -83.6175),
- ('Fleming Island', 'FL', ARRAY[32006], 30.0988, -81.7124),
- ('Schererville', 'IN', ARRAY[46307], 41.4860, -87.4440),
- ('West Springfield Town', 'MA', ARRAY[1090], 42.1253, -72.6503),
- ('New Iberia', 'LA', ARRAY[70563], 30.0049, -91.8202),
- ('Northampton', 'MA', ARRAY[1062, 1063, 1053, 1061], 42.3266, -72.6745),
- ('Austintown', 'OH', ARRAY[44511], 41.0932, -80.7405),
- ('Crofton', 'MD', ARRAY[21114], 39.0144, -76.6800),
- ('Mehlville', 'MO', ARRAY[63125], 38.5018, -90.3149),
- ('Zionsville', 'IN', ARRAY[46077, 46075], 39.9897, -86.3182),
- ('Pasadena', 'MD', ARRAY[21060, 21226], 39.1552, -76.5537),
- ('Winchester', 'NV', ARRAY[89169, 89121, 89199], 36.1368, -115.1299),
- ('Vineyard', 'CA', ARRAY[95829], 38.4744, -121.3190),
- ('Lumberton', 'NC', ARRAY[28360], 34.6312, -79.0186),
- ('Jacksonville', 'AR', ARRAY[72076, 72078], 34.8807, -92.1302),
- ('Rockledge', 'FL', ARRAY[32956], 28.3201, -80.7320),
- ('Monterey', 'CA', ARRAY[93940, 93942, 93944], 36.5922, -121.8807),
- ('Newburgh', 'NY', ARRAY[12555], 41.5037, -74.0205),
- ('Granite City', 'IL', ARRAY[62040], 38.7292, -90.1266),
- ('Aberdeen', 'SD', ARRAY[57402], 45.4646, -98.4680),
- ('Perry Hall', 'MD', ARRAY[21234, 21128], 39.4067, -76.4781),
- ('Yukon', 'OK', ARRAY[73085], 35.5201, -97.7639),
- ('South Laurel', 'MD', ARRAY[20811], 39.0603, -76.8456),
- ('Wisconsin Rapids', 'WI', ARRAY[54494], 44.3927, -89.8265),
- ('Forest Hills', 'MI', ARRAY[49546, 49355, 49356, 49357], 42.9577, -85.4895),
- ('Hobart', 'IN', ARRAY[46410], 41.5139, -87.2729),
- ('New Smyrna Beach', 'FL', ARRAY[32168, 32170], 29.0249, -80.9651),
- ('Fridley', 'MN', ARRAY[55432], 45.0841, -93.2595),
- ('East Chicago', 'IN', ARRAY[46325], 41.6484, -87.4536),
- ('Morgan City', 'LA', ARRAY[70381], 29.7041, -91.1920),
- ('Ruston', 'LA', ARRAY[71270, 71273], 32.5329, -92.6363),
- ('Jeffersontown', 'KY', ARRAY[40220, 40223], 38.2048, -85.5701),
- ('Isla Vista', 'CA', ARRAY[93106, 93107], 34.4144, -119.8581),
- ('Danvers', 'MA', ARRAY[1923], 42.5740, -70.9494),
- ('Milton', 'MA', ARRAY[2187], 42.2413, -71.0844),
- ('Statesville', 'NC', ARRAY[28677, 28687, 28688], 35.7842, -80.8714),
- ('Short Pump', 'VA', ARRAY[23233], 37.6549, -77.6201),
- ('Gladstone', 'MO', ARRAY[64118], 39.2133, -94.5593),
- ('Fremont', 'NE', ARRAY[68026], 41.4396, -96.4879),
- ('Garfield Heights', 'OH', ARRAY[44105], 41.4199, -81.6038),
- ('Imperial Beach', 'CA', ARRAY[91932, 91933], 32.5689, -117.1184),
- ('Seneca', 'SC', ARRAY[29678], 34.6815, -82.9609),
- ('Lansing', 'IL', ARRAY[60411], 41.5648, -87.5462),
- ('Paragould', 'AR', ARRAY[72451], 36.0555, -90.5149),
- ('Oakleaf Plantation', 'FL', ARRAY[32073], 30.1689, -81.8337),
- ('Prior Lake', 'MN', ARRAY[55379], 44.7251, -93.4409),
- ('Easton', 'PA', ARRAY[18043, 18044], 40.6858, -75.2209),
- ('West Whittier-Los Nietos', 'CA', ARRAY[90610], 33.9759, -118.0689),
- ('Indiana', 'PA', ARRAY[15705], 40.6220, -79.1552),
- ('Plum', 'PA', ARRAY[15068, 15239, 15147, 15268], 40.5024, -79.7496),
- ('Mount Pleasant', 'WI', ARRAY[53406, 53403, 53177], 42.7129, -87.8875),
- ('Burlington', 'MA', ARRAY[1805], 42.5022, -71.2027),
- ('Waterville', 'ME', ARRAY[4903], 44.5441, -69.6624),
- ('Norfolk', 'NE', ARRAY[68702], 42.0327, -97.4208),
- ('Shaker Heights', 'OH', ARRAY[44120], 41.4744, -81.5496),
- ('Brownsburg', 'IN', ARRAY[46112], 39.8330, -86.3824),
- ('Shelby', 'NC', ARRAY[28150], 35.2904, -81.5451),
- ('Maryland Heights', 'MO', ARRAY[63146], 38.7189, -90.4749),
- ('Reisterstown', 'MD', ARRAY[21136], 39.4552, -76.8144),
- ('Kinston', 'NC', ARRAY[28504, 28502, 28503], 35.2748, -77.5936),
- ('Searcy', 'AR', ARRAY[72143], 35.2418, -91.7351),
- ('West Chicago', 'IL', ARRAY[60186], 41.8960, -88.2253),
- ('Lemon Grove', 'CA', ARRAY[91946], 32.7331, -117.0344),
- ('Immokalee', 'FL', ARRAY[34143], 26.4253, -81.4251),
- ('McDonough', 'GA', ARRAY[30252], 33.4399, -84.1509),
- ('Bayonet Point', 'FL', ARRAY[34668], 28.3254, -82.6834),
- ('Alvin', 'TX', ARRAY[77583, 77512], 29.3871, -95.2933),
- ('Lebanon', 'NH', ARRAY[3766, 3756], 43.6353, -72.2531),
- ('Thomasville', 'NC', ARRAY[27361], 35.8813, -80.0807),
- ('Ilchester', 'MD', ARRAY[21075], 39.2187, -76.7684),
- ('Temple Terrace', 'FL', ARRAY[33617], 28.0437, -82.3774),
- ('Citrus Park', 'FL', ARRAY[33556], 28.0730, -82.5628),
- ('Sedalia', 'MO', ARRAY[65302], 38.7042, -93.2351),
- ('Bessemer', 'AL', ARRAY[35020, 35021], 33.3709, -86.9713),
- ('Batavia', 'IL', ARRAY[60510], 41.8479, -88.3110),
- ('Garden City', 'MI', ARRAY[48136], 42.3244, -83.3412),
- ('Chanhassen', 'MN', ARRAY[55317, 55318], 44.8544, -93.5621),
- ('Vicksburg', 'MS', ARRAY[39183, 39181, 39182], 32.3173, -90.8868),
- ('University Park', 'FL', ARRAY[33165, 33199], 25.7469, -80.3684),
- ('Troy', 'OH', ARRAY[45374], 40.0436, -84.2191),
- ('West Odessa', 'TX', ARRAY[79764], 31.8388, -102.4996),
- ('Hercules', 'CA', ARRAY[94553], 38.0064, -122.2564),
- ('Lake City', 'FL', ARRAY[32025, 32056], 30.1901, -82.6470),
- ('Lochearn', 'MD', ARRAY[21207], 39.3460, -76.7307),
- ('Wethersfield', 'CT', ARRAY[6129, 6161], 41.7013, -72.6703),
- ('Paramus', 'NJ', ARRAY[7653], 40.9455, -74.0712),
- ('Greenville', 'TX', ARRAY[75402, 75404], 33.1116, -96.1098),
- ('Okeechobee', 'FL', ARRAY[34974], 27.2414, -80.8298),
- ('Edgewood', 'MD', ARRAY[21010, 21040], 39.4210, -76.2968),
- ('Moscow', 'ID', ARRAY[83844], 46.7307, -116.9986),
- ('Sebastian', 'FL', ARRAY[32978], 27.7882, -80.4813),
- ('Northport', 'AL', ARRAY[35475, 35476, 35452], 33.2589, -87.5984),
- ('Natchez', 'MS', ARRAY[39121, 39122], 31.5437, -91.3867),
- ('Winchester', 'KY', ARRAY[40392], 38.0017, -84.1907),
- ('East St. Louis', 'IL', ARRAY[62205, 62204, 62203, 62201], 38.6156, -90.1304),
- ('Belmont', 'MA', ARRAY[2479], 42.3960, -71.1795),
- ('Paris', 'TX', ARRAY[75460, 75461], 33.6688, -95.5460),
- ('Mason City', 'IA', ARRAY[50402], 43.1487, -93.1998),
- ('Timberwood Park', 'TX', ARRAY[78260], 29.6994, -98.4838),
- ('Medina', 'OH', ARRAY[44258], 41.1358, -81.8694),
- ('Conway', 'SC', ARRAY[29526], 33.8399, -79.0424),
- ('Española', 'NM', ARRAY[87532, 87533], 36.0041, -106.0669),
- ('Laurel', 'MS', ARRAY[39443], 31.6956, -89.1448),
- ('Green', 'OH', ARRAY[44312, 44319, 44216, 44720], 40.9483, -81.4757),
- ('Decatur', 'GA', ARRAY[30031, 30036], 33.7711, -84.2968),
- ('Madison', 'MS', ARRAY[39130], 32.4738, -90.1300),
- ('Lancaster', 'SC', ARRAY[29722], 34.7247, -80.7801),
- ('South Bradenton', 'FL', ARRAY[34207, 34210], 27.4612, -82.5821),
- ('Laurel', 'MD', ARRAY[20709, 20725, 20726], 39.0950, -76.8622),
- ('South Salt Lake', 'UT', ARRAY[84115, 84165], 40.7056, -111.8986),
- ('Sevierville', 'TN', ARRAY[37764, 37876, 37864], 35.8873, -83.5677),
- ('Holt', 'MI', ARRAY[48911], 42.6416, -84.5307),
- ('San Lorenzo', 'CA', ARRAY[94580], 37.6737, -122.1349),
- ('Claremore', 'OK', ARRAY[74017, 74018], 36.3143, -95.6099),
- ('Homewood', 'AL', ARRAY[35209, 35142], 33.4617, -86.8092),
- ('Dedham', 'MA', ARRAY[2027], 42.2466, -71.1777),
- ('Middle River', 'MD', ARRAY[21221], 39.3345, -76.4318),
- ('South Pasadena', 'CA', ARRAY[91031], 34.1103, -118.1573),
- ('Salem', 'VA', ARRAY[24155, 24157], 37.2864, -80.0555),
- ('Caledonia', 'WI', ARRAY[53404, 53406, 53402, 53126], 42.7986, -87.8762),
- ('Coral Terrace', 'FL', ARRAY[33155], 25.7464, -80.3049),
- ('Edwardsville', 'IL', ARRAY[62048, 62026], 38.7923, -89.9877),
- ('Fajardo', 'PR', ARRAY[738], 18.3330, -65.6592),
- ('Palm City', 'FL', ARRAY[34991], 27.1736, -80.2861),
- ('Palm Springs', 'FL', ARRAY[33406], 26.6349, -80.0968),
- ('Riverside', 'OH', ARRAY[45431, 45404, 45424], 39.7836, -84.1219),
- ('Hazelwood', 'MO', ARRAY[63031], 38.7931, -90.3899),
- ('Scottsbluff', 'NE', ARRAY[69363], 41.8684, -103.6616),
- ('Canyon Lake', 'TX', ARRAY[78132, 78133, 78070], 29.8761, -98.2611),
- ('Reading', 'MA', ARRAY[1813], 42.5351, -71.1056),
- ('Columbine', 'CO', ARRAY[80123], 39.5879, -105.0694),
- ('Juneau', 'AK', ARRAY[99801, 99802, 99803, 99811], 58.4546, -134.1739),
- ('Ridgewood', 'NJ', ARRAY[7451], 40.9822, -74.1128),
- ('Yucca Valley', 'CA', ARRAY[92286], 34.1234, -116.4216),
- ('Branson', 'MO', ARRAY[65615], 36.6510, -93.2635),
- ('Balch Springs', 'TX', ARRAY[75181], 32.7194, -96.6151),
- ('University Park', 'TX', ARRAY[75205, 75275], 32.8506, -96.7937),
- ('De Pere', 'WI', ARRAY[54344], 44.4309, -88.0785),
- ('Marysville', 'OH', ARRAY[43041], 40.2278, -83.3595),
- ('Cataño', 'PR', ARRAY[965, 963], 18.4415, -66.1388),
- ('Clayton', 'NC', ARRAY[27527, 27528], 35.6591, -78.4499),
- ('Brookings', 'SD', ARRAY[57007], 44.3022, -96.7859),
- ('Walker', 'MI', ARRAY[49534], 42.9853, -85.7446),
- ('Fairland', 'MD', ARRAY[20904, 20905], 39.0804, -76.9527),
- ('North Tustin', 'CA', ARRAY[92705, 92711], 33.7644, -117.7945),
- ('Melrose Park', 'IL', ARRAY[60163, 60161], 41.9029, -87.8642),
- ('Norton Shores', 'MI', ARRAY[49444], 43.1621, -86.2519),
- ('Keystone', 'FL', ARRAY[33556, 33558], 28.1312, -82.5999),
- ('Herndon', 'VA', ARRAY[20172, 20192, 22095], 38.9699, -77.3867),
- ('Bailey''s Crossroads', 'VA', ARRAY[22311], 38.8477, -77.1305),
- ('Chantilly', 'VA', ARRAY[20153], 38.8868, -77.4453),
- ('Rockville Centre', 'NY', ARRAY[11571], 40.6644, -73.6383),
- ('Palmetto Bay', 'FL', ARRAY[33157], 25.6220, -80.3221),
- ('Lathrop', 'CA', ARRAY[95231], 37.8090, -121.3131),
- ('Loma Linda', 'CA', ARRAY[92324, 92373, 92318, 92350], 34.0451, -117.2498),
- ('Tifton', 'GA', ARRAY[31794], 31.4625, -83.5205),
- ('Suitland', 'MD', ARRAY[20747, 20233, 20395, 20752], 38.8492, -76.9225),
- ('Clinton', 'MS', ARRAY[39058, 39060], 32.3540, -90.3403),
- ('Trotwood', 'OH', ARRAY[45426, 45417, 45416], 39.7927, -84.3165),
- ('West Memphis', 'AR', ARRAY[72364, 72303], 35.1531, -90.1995),
- ('Mequon', 'WI', ARRAY[53092], 43.2352, -87.9838),
- ('Shelbyville', 'KY', ARRAY[40066], 38.2069, -85.2293),
- ('Newport', 'RI', ARRAY[2840], 41.4803, -71.3205),
- ('San Fernando', 'CA', ARRAY[91341], 34.2886, -118.4363),
- ('Saginaw', 'TX', ARRAY[76179], 32.8657, -97.3654),
- ('Port Angeles', 'WA', ARRAY[98362], 48.1142, -123.4565),
- ('Thomasville', 'GA', ARRAY[31758, 31799], 30.8394, -83.9782),
- ('Ponca City', 'OK', ARRAY[74604], 36.7235, -97.0679),
- ('Lincolnton', 'NC', ARRAY[28093], 35.4747, -81.2385),
- ('Simpsonville', 'SC', ARRAY[29681], 34.7287, -82.2573),
- ('Fort Washington', 'MD', ARRAY[20749], 38.7339, -77.0069),
- ('North Potomac', 'MD', ARRAY[20850], 39.0955, -77.2372),
- ('Ridgeland', 'MS', ARRAY[39158], 32.4236, -90.1481),
- ('Hastings', 'NE', ARRAY[68902], 40.5963, -98.3914),
- ('Waukee', 'IA', ARRAY[50003], 41.5984, -93.8872),
- ('Vero Beach South', 'FL', ARRAY[32968, 32966, 32962], 27.6164, -80.4130),
- ('Wadsworth', 'OH', ARRAY[44282], 41.0279, -81.7324),
- ('Tumwater', 'WA', ARRAY[98512, 98511, 98599], 46.9890, -122.9173),
- ('Fairfax', 'VA', ARRAY[22031, 20030, 22038], 38.8531, -77.2998),
- ('Venice', 'FL', ARRAY[34292, 34275, 34284], 27.1163, -82.4135),
- ('Cottage Lake', 'WA', ARRAY[98077], 47.7466, -122.0755),
- ('Edgewater', 'FL', ARRAY[32168, 32132], 28.9594, -80.9407),
- ('Okemos', 'MI', ARRAY[48805], 42.7057, -84.4135),
- ('Pelham', 'AL', ARRAY[35124], 33.3114, -86.7573),
- ('Seal Beach', 'CA', ARRAY[90743, 90740], 33.7542, -118.0714),
- ('Calabasas', 'CA', ARRAY[91372], 34.1375, -118.6689),
- ('North Augusta', 'SC', ARRAY[29841, 29861], 33.5214, -81.9547),
- ('Jenks', 'OK', ARRAY[74037], 35.9981, -95.9737),
- ('Bloomingdale', 'FL', ARRAY[33596], 27.8784, -82.2624),
- ('Tysons', 'VA', ARRAY[22182, 22036, 22103], 38.9215, -77.2273),
- ('Coronado', 'CA', ARRAY[92135, 92118, 92178], 32.6640, -117.1600),
- ('Copiague', 'NY', ARRAY[11757, 11701], 40.6728, -73.3932),
- ('Oak Ridge', 'FL', ARRAY[32839], 28.4727, -81.4169),
- ('Centerville', 'OH', ARRAY[45458], 39.6339, -84.1449),
- ('Greeneville', 'TN', ARRAY[37743, 37744], 36.1680, -82.8197),
- ('Van Buren', 'AR', ARRAY[72957], 35.4480, -94.3528),
- ('Waycross', 'GA', ARRAY[31503], 31.2108, -82.3579),
- ('Ashland', 'CA', ARRAY[94580, 94578], 37.6942, -122.1159),
- ('West Puente Valley', 'CA', ARRAY[91744], 34.0512, -117.9681),
- ('Jacksonville Beach', 'FL', ARRAY[32240], 30.2782, -81.4045),
- ('Palm River-Clair Mel', 'FL', ARRAY[33578], 27.9239, -82.3791),
- ('Rosemont', 'CA', ARRAY[95826], 38.5477, -121.3553),
- ('Chalmette', 'LA', ARRAY[70044], 29.9437, -89.9659),
- ('Romulus', 'MI', ARRAY[48242], 42.2237, -83.3660),
- ('Clarksburg', 'MD', ARRAY[20876, 20871], 39.2314, -77.2617),
- ('Leland', 'NC', ARRAY[28479], 34.2044, -78.0277),
- ('Benbrook', 'TX', ARRAY[76126], 32.6787, -97.4638),
- ('Sun City Center', 'FL', ARRAY[33573, 33571], 27.7149, -82.3569),
- ('Montrose', 'CO', ARRAY[81401], 38.4690, -107.8590),
- ('Ruskin', 'FL', ARRAY[33575], 27.7065, -82.4209),
- ('Hialeah Gardens', 'FL', ARRAY[33018], 25.8878, -80.3569),
- ('Columbus', 'NE', ARRAY[68602], 41.4368, -97.3563),
- ('Plainview', 'TX', ARRAY[79073], 34.1911, -101.7234),
- ('Auburn', 'ME', ARRAY[4211, 4212, 4223], 44.0850, -70.2492),
- ('Loves Park', 'IL', ARRAY[61011, 61130, 61131, 61132], 42.3364, -88.9975),
- ('Greenbelt', 'MD', ARRAY[20770, 20768], 38.9953, -76.8885),
- ('Kenmore', 'WA', ARRAY[98034], 47.7516, -122.2489),
- ('Winter Gardens', 'CA', ARRAY[92040], 32.8376, -116.9268),
- ('Rockingham', 'NC', ARRAY[28380], 34.9386, -79.7608),
- ('Greenfield', 'IN', ARRAY[46129], 39.7936, -85.7737),
- ('Watertown', 'WI', ARRAY[53094], 43.1893, -88.7285),
- ('Frederickson', 'WA', ARRAY[98375, 98446], 47.0914, -122.3594),
- ('West Rancho Dominguez', 'CA', ARRAY[90061, 90059, 90220], 33.9057, -118.2682),
- ('Gallup', 'NM', ARRAY[87322], 35.5183, -108.7423),
- ('Radcliff', 'KY', ARRAY[42701, 40159], 37.8206, -85.9366),
- ('Crystal', 'MN', ARRAY[55427, 55429, 55428], 45.0377, -93.3599),
- ('Dickinson', 'ND', ARRAY[58602], 46.8917, -102.7924),
- ('Allison Park', 'PA', ARRAY[15091], 40.5730, -79.9603),
- ('Ensley', 'FL', ARRAY[32534], 30.5261, -87.2735),
- ('Laguna Beach', 'CA', ARRAY[92652], 33.5448, -117.7612),
- ('Acworth', 'GA', ARRAY[30101], 34.0566, -84.6715),
- ('Griffin', 'GA', ARRAY[30223], 33.2418, -84.2747),
- ('Corsicana', 'TX', ARRAY[75109], 32.0824, -96.4665),
- ('Elizabeth City', 'NC', ARRAY[27907], 36.2943, -76.2361),
- ('Fairhope', 'AL', ARRAY[36533], 30.5217, -87.8815),
- ('Braidwood', 'IL', ARRAY[60408, 60481], 41.2696, -88.2235),
- ('Trussville', 'AL', ARRAY[35173, 35015], 33.6404, -86.5819),
- ('Meadville', 'PA', ARRAY[16388], 41.6476, -80.1468),
- ('Lakeside', 'CA', ARRAY[92040], 32.8560, -116.9040),
- ('Happy Valley', 'OR', ARRAY[97089, 97086], 45.4362, -122.5077),
- ('West Carson', 'CA', ARRAY[90502], 33.8229, -118.2931),
- ('Northdale', 'FL', ARRAY[33548, 33558], 28.1058, -82.5263),
- ('Fort Walton Beach', 'FL', ARRAY[32547], 30.4249, -86.6194),
- ('Christiansburg', 'VA', ARRAY[24068], 37.1411, -80.4028),
- ('Garden City', 'NY', ARRAY[11531, 11599], 40.7266, -73.6447),
- ('Granite Bay', 'CA', ARRAY[95650], 38.7601, -121.1714),
- ('Willowbrook', 'CA', ARRAY[90222], 33.9199, -118.2362),
- ('Union City', 'GA', ARRAY[30291, 30213], 33.5941, -84.5629),
- ('Derry', 'NH', ARRAY[3041], 42.8941, -71.2848),
- ('Prairie Village', 'KS', ARRAY[66207], 38.9874, -94.6361),
- ('Kuna', 'ID', ARRAY[83642], 43.4869, -116.3986),
- ('Fort Mill', 'SC', ARRAY[29716], 35.0062, -80.9388),
- ('Hayesville', 'OR', ARRAY[97309], 44.9794, -122.9739),
- ('Hudson', 'OH', ARRAY[44237, 44326], 41.2399, -81.4408),
- ('Mukwonago', 'WI', ARRAY[53120], 42.8566, -88.3269),
- ('Lexington', 'SC', ARRAY[29071], 33.9890, -81.2202),
- ('Lino Lakes', 'MN', ARRAY[55038], 45.1679, -93.0830),
- ('Augusta', 'ME', ARRAY[4332, 4333, 4336, 4338], 44.3341, -69.7319),
- ('Corinth', 'TX', ARRAY[76210], 33.1435, -97.0681),
- ('Naples', 'FL', ARRAY[34102, 34101, 34105, 34104], 26.1504, -81.7936),
- ('Monsey', 'NY', ARRAY[10977], 41.1181, -74.0681),
- ('Cockeysville', 'MD', ARRAY[21030, 21093, 21065], 39.4793, -76.6300),
- ('Guayama', 'PR', ARRAY[785], 17.9744, -66.1104),
- ('Brent', 'FL', ARRAY[32503], 30.4729, -87.2496),
- ('Silver Firs', 'WA', ARRAY[98012, 98208], 47.8635, -122.1497),
- ('Landover', 'MD', ARRAY[20785], 38.9241, -76.8875),
- ('Union Hill-Novelty Hill', 'WA', ARRAY[98077], 47.6788, -122.0284),
- ('Rose Hill', 'VA', ARRAY[22310], 38.7872, -77.1085),
- ('Port Hueneme', 'CA', ARRAY[93043, 93044], 34.1617, -119.2036),
- ('Keene', 'NH', ARRAY[3435], 42.9494, -72.2997),
- ('Summit', 'NJ', ARRAY[7902], 40.7154, -74.3647),
- ('Secaucus', 'NJ', ARRAY[7096], 40.7810, -74.0659),
- ('Golden Valley', 'MN', ARRAY[55427, 55426, 55416], 44.9901, -93.3591),
- ('Bloomingdale', 'IL', ARRAY[60117], 41.9497, -88.0895),
- ('Shelbyville', 'TN', ARRAY[37161, 37162], 35.4987, -86.4516),
- ('Shafter', 'CA', ARRAY[93314], 35.4794, -119.2013),
- ('Brownwood', 'TX', ARRAY[76802], 31.7127, -98.9767),
- ('Katy', 'TX', ARRAY[77494, 77491, 77492], 29.7904, -95.8353),
- ('Green Valley', 'AZ', ARRAY[85614], 31.8436, -111.0174),
- ('Del City', 'OK', ARRAY[73117], 35.4483, -97.4408),
- ('North Lynnwood', 'WA', ARRAY[98037], 47.8533, -122.2762),
- ('Camp Springs', 'MD', ARRAY[20746, 20748], 38.8052, -76.9198),
- ('Hamtramck', 'MI', ARRAY[48212], 42.3954, -83.0560),
- ('La Porte', 'IN', ARRAY[46352], 41.6077, -86.7136),
- ('Clarksville', 'IN', ARRAY[47172], 38.3221, -85.7673),
- ('Biddeford', 'ME', ARRAY[4006, 4007], 43.4674, -70.4512),
- ('St. Andrews', 'SC', ARRAY[29210], 34.0510, -81.1057),
- ('Holiday', 'FL', ARRAY[34690, 34692], 28.1864, -82.7429),
- ('Lutz', 'FL', ARRAY[33549, 33559, 33647], 28.1396, -82.4467),
- ('Prichard', 'AL', ARRAY[36610, 36613, 36612], 30.7735, -88.1301),
- ('Birmingham', 'MI', ARRAY[48012], 42.5447, -83.2166),
- ('Easley', 'SC', ARRAY[29640], 34.8190, -82.5828),
- ('Bear', 'DE', ARRAY[19702], 39.6188, -75.6804),
- ('Marshall', 'TX', ARRAY[75670, 75671], 32.5370, -94.3515),
- ('DeBary', 'FL', ARRAY[32753], 28.8815, -81.3240),
- ('Eustis', 'FL', ARRAY[32736, 32627, 32727], 28.8560, -81.6781),
- ('Salmon Creek', 'WA', ARRAY[98685], 45.7099, -122.6632),
- ('South Euclid', 'OH', ARRAY[44143], 41.5239, -81.5245),
- ('North Plainfield', 'NJ', ARRAY[7060], 40.6209, -74.4386),
- ('Lealman', 'FL', ARRAY[33709, 33714], 27.8197, -82.6847),
- ('Sapulpa', 'OK', ARRAY[74066, 74067], 36.0089, -96.1006),
- ('Duarte', 'CA', ARRAY[91009], 34.1610, -117.9504),
- ('Ardmore', 'OK', ARRAY[73402, 73403], 34.1944, -97.1253),
- ('West Pensacola', 'FL', ARRAY[32506, 32507], 30.4263, -87.2679),
- ('Oxford', 'AL', ARRAY[36203, 36253], 33.5967, -85.8687),
- ('Evans', 'CO', ARRAY[80634, 80620], 40.3660, -104.7389),
- ('Carrboro', 'NC', ARRAY[27510], 35.9260, -79.0878),
- ('Gaffney', 'SC', ARRAY[29340, 29342], 35.0742, -81.6558),
- ('Sidney', 'OH', ARRAY[45367], 40.2891, -84.1667),
- ('Silverdale', 'WA', ARRAY[98370, 98383], 47.6663, -122.6828),
- ('Rolla', 'MO', ARRAY[65409], 37.9458, -91.7608),
- ('Pleasant Prairie', 'WI', ARRAY[53158], 42.5266, -87.8895),
- ('Sweetwater', 'FL', ARRAY[33174], 25.7786, -80.3760),
- ('Milwaukie', 'OR', ARRAY[97269], 45.4447, -122.6221),
- ('Bryant', 'AR', ARRAY[72022, 72089], 34.6152, -92.4914),
- ('Wade Hampton', 'SC', ARRAY[29609, 29687], 34.8821, -82.3336),
- ('Makakilo', 'HI', ARRAY[96709], 21.3591, -158.0813),
- ('New Hope', 'MN', ARRAY[55428], 45.0374, -93.3869),
- ('Mill Creek', 'WA', ARRAY[98082], 47.8631, -122.2037),
- ('Clemmons', 'NC', ARRAY[27103, 27102], 36.0319, -80.3861),
- ('Stephenville', 'TX', ARRAY[76402], 32.2148, -98.2205),
- ('Dyersburg', 'TN', ARRAY[38025], 36.0465, -89.3777),
- ('Bayou Cane', 'LA', ARRAY[70364], 29.6244, -90.7510),
- ('Lake Ronkonkoma', 'NY', ARRAY[11779], 40.8308, -73.1112),
- ('Allendale', 'MI', ARRAY[49401], 42.9851, -85.9509),
- ('Golden', 'CO', ARRAY[80403, 80419, 80402], 39.7406, -105.2118),
- ('Harvey', 'LA', ARRAY[70059], 29.8876, -90.0666),
- ('Gardner', 'MA', ARRAY[1441], 42.5845, -71.9867),
- ('Havelock', 'NC', ARRAY[28532], 34.9078, -76.8987),
- ('East Moline', 'IL', ARRAY[61236, 61257], 41.5199, -90.3879),
- ('Yorkville', 'IL', ARRAY[60512], 41.6562, -88.4507),
- ('South San Jose Hills', 'CA', ARRAY[91792], 34.0123, -117.9041),
- ('Clifton', 'CO', ARRAY[81504], 39.0763, -108.4606),
- ('Lynn Haven', 'FL', ARRAY[32404, 32444], 30.2337, -85.6370),
- ('Ferguson', 'MO', ARRAY[63135], 38.7490, -90.2950),
- ('Alice', 'TX', ARRAY[78333], 27.7556, -98.0653),
- ('Montclair', 'VA', ARRAY[22025], 38.6111, -77.3400),
- ('Papillion', 'NE', ARRAY[68138], 41.1516, -96.0679),
- ('Crest Hill', 'IL', ARRAY[60441, 60434], 41.5723, -88.1124),
- ('Poplar Bluff', 'MO', ARRAY[63901], 36.7632, -90.4136),
- ('Tukwila', 'WA', ARRAY[98178, 98168, 98188, 98190], 47.4749, -122.2727),
- ('Duncan', 'OK', ARRAY[73055, 73534, 73536], 34.5424, -97.9190),
- ('Bothell West', 'WA', ARRAY[98036, 98012], 47.8056, -122.2401),
- ('Mountain Brook', 'AL', ARRAY[35243, 35223], 33.4871, -86.7400),
- ('Rotterdam', 'NY', ARRAY[12303], 42.7786, -73.9536),
- ('Amherst Center', 'MA', ARRAY[1003, 1004], 42.3757, -72.5188),
- ('Agoura Hills', 'CA', ARRAY[91376], 34.1510, -118.7608),
- ('Durango', 'CO', ARRAY[81303, 81302], 37.2659, -107.8782),
- ('Howard', 'WI', ARRAY[54303], 44.5703, -88.0920),
- ('Monmouth', 'OR', ARRAY[97351], 44.8505, -123.2283),
- ('Ypsilanti', 'MI', ARRAY[48197], 42.2437, -83.6205),
- ('Bartow', 'FL', ARRAY[33880, 33835], 27.8868, -81.8213),
- ('Ashland', 'KY', ARRAY[41101], 38.4592, -82.6449),
- ('Miamisburg', 'OH', ARRAY[45343], 39.6323, -84.2725),
- ('East Northport', 'NY', ARRAY[11731], 40.8792, -73.3232),
- ('Germantown', 'WI', ARRAY[53022], 43.2343, -88.1217),
- ('Sulphur', 'LA', ARRAY[70665, 70664], 30.2286, -93.3565),
- ('Fish Hawk', 'FL', ARRAY[33569], 27.8511, -82.2164),
- ('Middleton', 'WI', ARRAY[53597], 43.1065, -89.5058),
- ('West Chester', 'PA', ARRAY[19382, 19383, 19381], 39.9601, -75.6058),
- ('Brushy Creek', 'TX', ARRAY[78717], 30.5125, -97.7388),
- ('Forest Park', 'GA', ARRAY[30294, 30298], 33.6209, -84.3590),
- ('La Cañada Flintridge', 'CA', ARRAY[91012], 34.2097, -118.2002),
- ('Safford', 'AZ', ARRAY[85548], 32.8317, -109.7005),
- ('Eastchester', 'NY', ARRAY[10709, 10583], 40.9578, -73.8079),
- ('Merrick', 'NY', ARRAY[11520], 40.6515, -73.5535),
- ('Greenwood', 'MS', ARRAY[38935], 33.5126, -90.1993),
- ('Martha Lake', 'WA', ARRAY[98012, 98208], 47.8479, -122.2327),
- ('Valley', 'AL', ARRAY[36872], 32.8088, -85.1809),
- ('Helena', 'AL', ARRAY[35080], 33.2845, -86.8756),
- ('Cullman', 'AL', ARRAY[35057, 35055, 35056], 34.1777, -86.8407),
- ('Sand Springs', 'OK', ARRAY[74063], 36.1342, -96.1284),
- ('Cameron Park', 'CA', ARRAY[95682], 38.6737, -120.9872),
- ('White Oak', 'OH', ARRAY[45239], 39.2106, -84.6061),
- ('Vernal', 'UT', ARRAY[84008], 40.4517, -109.5379),
- ('Ballenger Creek', 'MD', ARRAY[21703], 39.3807, -77.4205),
- ('Schofield Barracks', 'HI', ARRAY[96786], 21.4936, -158.0617),
- ('Norwood', 'OH', ARRAY[45280], 39.1605, -84.4535),
- ('Selma', 'AL', ARRAY[36701], 32.4166, -87.0336),
- ('Rockport', 'TX', ARRAY[78381], 28.0290, -97.0722),
- ('Cherry Hill', 'VA', ARRAY[22026], 38.5696, -77.2895),
- ('Franconia', 'VA', ARRAY[22315], 38.7682, -77.1587),
- ('Haslett', 'MI', ARRAY[48823], 42.7525, -84.4020),
- ('West Mifflin', 'PA', ARRAY[15123], 40.3581, -79.9072),
- ('Casa de Oro-Mount Helix', 'CA', ARRAY[91941, 92020, 91976], 32.7640, -116.9687),
- ('Stillwater', 'MN', ARRAY[55083], 45.0573, -92.8313),
- ('Eloy', 'AZ', ARRAY[85194, 85193, 85123], 32.7470, -111.5991),
- ('Rio Rico', 'AZ', ARRAY[85648], 31.4957, -110.9886),
- ('Murrysville', 'PA', ARRAY[15632, 15626], 40.4456, -79.6555),
- ('Prunedale', 'CA', ARRAY[95004, 93907], 36.8064, -121.6555),
- ('Hauppauge', 'NY', ARRAY[11788, 11760], 40.8217, -73.2119),
- ('Syosset', 'NY', ARRAY[11773], 40.8156, -73.5020),
- ('Baldwin', 'PA', ARRAY[15227], 40.3690, -79.9668),
- ('Meadowbrook', 'VA', ARRAY[23237], 37.4301, -77.4740),
- ('Danville', 'KY', ARRAY[40423], 37.6418, -84.7777),
- ('South Burlington', 'VT', ARRAY[5407], 44.4622, -73.2203),
- ('La Crescenta-Montrose', 'CA', ARRAY[91020, 91021], 34.2322, -118.2353),
- ('Apollo Beach', 'FL', ARRAY[33572], 27.7618, -82.4002),
- ('Matteson', 'IL', ARRAY[60443], 41.5095, -87.7468),
- ('Holtsville', 'NY', ARRAY[501, 544], 40.8124, -73.0447),
- ('Rosedale', 'MD', ARRAY[21206], 39.3266, -76.5084),
- ('Durant', 'OK', ARRAY[74702], 33.9957, -96.3938),
- ('Linda', 'CA', ARRAY[95901], 39.1241, -121.5421),
- ('Corning', 'NY', ARRAY[14831], 42.1470, -77.0561),
- ('Langley Park', 'MD', ARRAY[20903], 38.9897, -76.9808),
- ('Morristown', 'NJ', ARRAY[7963], 40.7966, -74.4772),
- ('Erlanger', 'KY', ARRAY[41017, 41051], 39.0109, -84.5864),
- ('North Valley Stream', 'NY', ARRAY[11003], 40.6840, -73.7077),
- ('Westbrook', 'ME', ARRAY[4098], 43.6954, -70.3539),
- ('Fox Crossing', 'WI', ARRAY[54956], 44.2229, -88.4763),
- ('White Oak', 'MD', ARRAY[20904, 20903, 20993], 39.0433, -76.9906),
- ('McKeesport', 'PA', ARRAY[15134], 40.3419, -79.8439),
- ('Bellaire', 'TX', ARRAY[77402], 29.7040, -95.4622),
- ('Lexington', 'NC', ARRAY[27295, 27294], 35.8017, -80.2682),
- ('Whitehall', 'OH', ARRAY[43219], 39.9682, -82.8833),
- ('Natchitoches', 'LA', ARRAY[71469, 71458, 71497], 31.7317, -93.0979),
- ('Seminole', 'FL', ARRAY[33777, 33778, 33775], 27.8435, -82.7839),
- ('North Amityville', 'NY', ARRAY[11701], 40.7005, -73.4118),
- ('St. John', 'IN', ARRAY[46311], 41.4431, -87.4700),
- ('Grandview', 'WA', ARRAY[98930], 46.2444, -119.9091),
- ('Marshfield', 'WI', ARRAY[54404], 44.6627, -90.1728),
- ('Franklin Farm', 'VA', ARRAY[20171], 38.9133, -77.3969),
- ('Avon', 'IN', ARRAY[46213], 39.7603, -86.3917),
- ('Westminster', 'MD', ARRAY[21157], 39.5796, -77.0066),
- ('Cocoa', 'FL', ARRAY[32926, 32923, 32924], 28.3820, -80.7674),
- ('Moultrie', 'GA', ARRAY[31788, 31776], 31.1591, -83.7708),
- ('Winthrop Town', 'MA', ARRAY[2152], 42.3751, -70.9847),
- ('Rancho Mirage', 'CA', ARRAY[92263], 33.7634, -116.4271),
- ('Gautier', 'MS', ARRAY[39564], 30.4106, -88.6568),
- ('Humacao', 'PR', ARRAY[792], 18.1519, -65.8204),
- ('Hopkins', 'MN', ARRAY[55343], 44.9261, -93.4056),
- ('Mesquite', 'NV', ARRAY[89027, 89024, 89034], 36.8035, -114.1325),
- ('Idylwood', 'VA', ARRAY[22043], 38.8896, -77.2055),
- ('Berea', 'KY', ARRAY[40403], 37.5904, -84.2898),
- ('Seabrook', 'MD', ARRAY[20771], 38.9802, -76.8502),
- ('East Massapequa', 'NY', ARRAY[11758], 40.6743, -73.4358),
- ('Wallingford Center', 'CT', ARRAY[6494, 6495], 41.4499, -72.8189),
- ('Cimarron Hills', 'CO', ARRAY[80922], 38.8597, -104.6995),
- ('Kilgore', 'TX', ARRAY[75663], 32.3979, -94.8603),
- ('Radford', 'VA', ARRAY[24141, 24143], 37.1229, -80.5587),
- ('Palestine', 'TX', ARRAY[75803, 75882], 31.7544, -95.6471),
- ('Hyattsville', 'MD', ARRAY[20782, 20787, 20788], 38.9612, -76.9548),
- ('Lake Placid', 'FL', ARRAY[33862], 27.2977, -81.3715),
- ('Somerset', 'MA', ARRAY[2725], 41.7404, -71.1612),
- ('St. Michael', 'MN', ARRAY[55376], 45.2014, -93.6920),
- ('Rutland', 'VT', ARRAY[5702], 43.6091, -72.9782),
- ('Imperial', 'CA', ARRAY[92255], 32.8390, -115.5719),
- ('Orange', 'TX', ARRAY[77632], 30.1210, -93.7616),
- ('Otsego', 'MN', ARRAY[55330, 55362], 45.2660, -93.6200),
- ('St. Matthews', 'KY', ARRAY[40207], 38.2497, -85.6383),
- ('Tullahoma', 'TN', ARRAY[37388], 35.3721, -86.2173),
- ('Calverton', 'MD', ARRAY[20904], 39.0578, -76.9488),
- ('Manchester', 'MO', ARRAY[63011], 38.5830, -90.5065),
- ('North Wilkesboro', 'NC', ARRAY[28656], 36.1728, -81.1390),
- ('Bensenville', 'IL', ARRAY[60105, 60399], 41.9593, -87.9433),
- ('Eastlake', 'OH', ARRAY[44097], 41.6581, -81.4323),
- ('Fayetteville', 'GA', ARRAY[30215], 33.4500, -84.4709),
- ('Sunland Park', 'NM', ARRAY[88008], 31.8194, -106.5943),
- ('El Reno', 'OK', ARRAY[73022], 35.5430, -97.9660),
- ('Marco Island', 'FL', ARRAY[34140, 34146], 25.9330, -81.6993),
- ('Ingleside', 'TX', ARRAY[78362], 27.8700, -97.2077),
- ('Islip', 'NY', ARRAY[11706], 40.7357, -73.2158),
- ('Lenoir', 'NC', ARRAY[28633], 35.9096, -81.5247),
- ('Melville', 'NY', ARRAY[11775], 40.7823, -73.4088),
- ('Ocean Springs', 'MS', ARRAY[39566], 30.4082, -88.7861),
- ('Knightdale', 'NC', ARRAY[27545], 35.7918, -78.4955),
- ('Crossville', 'TN', ARRAY[38555], 35.9527, -85.0294),
- ('Tillmans Corner', 'AL', ARRAY[36619], 30.5818, -88.2128),
- ('Glenvar Heights', 'FL', ARRAY[33155], 25.7090, -80.3156),
- ('Jenison', 'MI', ARRAY[49429], 42.9063, -85.8269),
- ('Merrifield', 'VA', ARRAY[22042, 22180, 22082, 22116], 38.8731, -77.2426),
- ('Moraga', 'CA', ARRAY[94575], 37.8439, -122.1225),
- ('Steubenville', 'OH', ARRAY[43953], 40.3653, -80.6520),
- ('Takoma Park', 'MD', ARRAY[20913], 38.9810, -77.0028),
- ('Oxon Hill', 'MD', ARRAY[20745, 20750], 38.7887, -76.9733),
- ('El Dorado', 'AR', ARRAY[71731], 33.2184, -92.6640),
- ('Terrell', 'TX', ARRAY[75161], 32.7341, -96.2939),
- ('Maitland', 'FL', ARRAY[32794], 28.6295, -81.3717),
- ('Concord', 'MO', ARRAY[63123], 38.5117, -90.3574),
- ('Gretna', 'LA', ARRAY[70053, 70054], 29.9101, -90.0515),
- ('Hinsdale', 'IL', ARRAY[60522], 41.8005, -87.9273),
- ('Santa Fe Springs', 'CA', ARRAY[90671], 33.9330, -118.0625),
- ('Franklin Park', 'IL', ARRAY[60132], 41.9361, -87.8794),
- ('Beltsville', 'MD', ARRAY[20740, 20697, 20704, 20797], 39.0394, -76.9211),
- ('Butner', 'NC', ARRAY[27509], 36.1285, -78.7502),
- ('Marion', 'IL', ARRAY[62959], 37.7173, -88.9279),
- ('Vero Beach', 'FL', ARRAY[32963, 32964, 32965, 32969], 27.6463, -80.3930),
- ('Clemson', 'SC', ARRAY[29633], 34.6837, -82.8124),
- ('Lake Mary', 'FL', ARRAY[32795, 32799], 28.7592, -81.3359),
- ('Woodmere', 'NY', ARRAY[11598, 11516], 40.6374, -73.7219),
- ('Ojus', 'FL', ARRAY[33180], 25.9563, -80.1606),
- ('Ferndale', 'MD', ARRAY[21062], 39.1869, -76.6330),
- ('Martinsburg', 'WV', ARRAY[25401, 25404, 25402], 39.4582, -77.9776),
- ('Tinton Falls', 'NJ', ARRAY[7724, 7753], 40.2709, -74.0948),
- ('Live Oak', 'CA', ARRAY[95062], 36.9860, -121.9804),
- ('Stafford', 'TX', ARRAY[77497], 29.6271, -95.5653),
- ('Wailuku', 'HI', ARRAY[96733], 20.8834, -156.5059),
- ('La Marque', 'TX', ARRAY[77568], 29.3690, -94.9957),
- ('Woodcrest', 'CA', ARRAY[92503, 92504, 92506], 33.8789, -117.3686),
- ('Versailles', 'KY', ARRAY[40384], 38.0487, -84.7259),
- ('North Druid Hills', 'GA', ARRAY[30324, 30033, 30359], 33.8186, -84.3254),
- ('Portland', 'TX', ARRAY[78390], 27.8911, -97.3284),
- ('Buckhall', 'VA', ARRAY[20111, 20112], 38.7250, -77.4472),
- ('South Ogden', 'UT', ARRAY[84403, 84408], 41.1722, -111.9577),
- ('Oak Grove', 'OR', ARRAY[97267, 97268], 45.4156, -122.6349),
- ('North Canton', 'OH', ARRAY[44720], 40.8742, -81.3971),
- ('Kingstowne', 'VA', ARRAY[22315], 38.7625, -77.1445),
- ('Ashwaubenon', 'WI', ARRAY[54115, 54304], 44.4796, -88.0889),
- ('Dickson', 'TN', ARRAY[37055, 37056], 36.0640, -87.3668),
- ('Ammon', 'ID', ARRAY[83406], 43.4746, -111.9569),
- ('Country Walk', 'FL', ARRAY[33186], 25.6331, -80.4353),
- ('Yelm', 'WA', ARRAY[98597], 46.9398, -122.6261),
- ('Upper Grand Lagoon', 'FL', ARRAY[32407, 32411], 30.1690, -85.7407),
- ('Pinewood', 'FL', ARRAY[33147, 33167, 33150], 25.8697, -80.2174),
- ('Vincent', 'CA', ARRAY[91702], 34.0982, -117.9238),
- ('Sienna Plantation', 'TX', ARRAY[77583], 29.4834, -95.5065),
- ('Sylacauga', 'AL', ARRAY[35150], 33.1778, -86.2606),
- ('Redland', 'MD', ARRAY[20877], 39.1335, -77.1465),
- ('Cinco Ranch', 'TX', ARRAY[77450], 29.7395, -95.7607),
- ('Americus', 'GA', ARRAY[31719], 32.0736, -84.2249),
- ('Republic', 'MO', ARRAY[65619, 65802], 37.1452, -93.4446),
- ('Wolf Trap', 'VA', ARRAY[22182], 38.9395, -77.2842),
- ('Myrtle Grove', 'FL', ARRAY[32511, 32512], 30.4158, -87.3028),
- ('Fort Hunt', 'VA', ARRAY[22307, 22308], 38.7361, -77.0589),
- ('Crescent City', 'CA', ARRAY[95532], 41.7727, -124.1902),
- ('Groveton', 'VA', ARRAY[22307], 38.7605, -77.0980),
- ('Picayune', 'MS', ARRAY[39466], 30.5322, -89.6724),
- ('North Myrtle Beach', 'SC', ARRAY[29568, 29566, 29598], 33.8230, -78.7089),
- ('Bemidji', 'MN', ARRAY[56619], 47.4828, -94.8796),
- ('Ocean Acres', 'NJ', ARRAY[8005], 39.7430, -74.2804),
- ('Goodlettsville', 'TN', ARRAY[37070], 36.3327, -86.7029),
- ('Fairburn', 'GA', ARRAY[30213], 33.5496, -84.5914),
- ('Bristol', 'VA', ARRAY[24202, 24203, 24205, 24209], 36.6180, -82.1606),
- ('Lake Wales', 'FL', ARRAY[33853, 33859, 33885], 27.9195, -81.5961),
- ('New Port Richey', 'FL', ARRAY[34652], 28.2468, -82.7170),
- ('Troy', 'AL', ARRAY[36081, 36082], 31.8021, -85.9665),
- ('Athens', 'TN', ARRAY[37371], 35.4573, -84.6045),
- ('Auburndale', 'FL', ARRAY[33868], 28.0962, -81.8011),
- ('Cutlerville', 'MI', ARRAY[49315], 42.8405, -85.6739),
- ('Artesia', 'CA', ARRAY[90702], 33.8676, -118.0806),
- ('Norcross', 'GA', ARRAY[30003, 30010], 33.9379, -84.2065),
- ('Solvang', 'CA', ARRAY[93464], 34.5936, -120.1401),
- ('World Golf Village', 'FL', ARRAY[32095], 29.9653, -81.4898),
- ('Storrs', 'CT', ARRAY[6268], 41.8045, -72.2552),
- ('Pearl River', 'NY', ARRAY[10962], 41.0615, -74.0047),
- ('Vienna', 'VA', ARRAY[22183], 38.8996, -77.2597),
- ('Eden', 'NC', ARRAY[27289], 36.5028, -79.7412),
- ('Jasper', 'IN', ARRAY[47547, 47549], 38.3933, -86.9402),
- ('Douglas', 'AZ', ARRAY[85607, 85655], 31.3602, -109.5394),
- ('Glen Allen', 'VA', ARRAY[23059, 23058], 37.6660, -77.4838),
- ('Groveland', 'FL', ARRAY[34737], 28.6021, -81.8204),
- ('Mount Pleasant', 'TX', ARRAY[75456], 33.1613, -94.9717),
- ('Hernando', 'MS', ARRAY[38651], 34.8500, -89.9922),
- ('Glenmont', 'MD', ARRAY[20902], 39.0698, -77.0467),
- ('Monroe', 'GA', ARRAY[30655], 33.7990, -83.7160),
- ('Celina', 'TX', ARRAY[75078], 33.3188, -96.7865),
- ('Los Osos', 'CA', ARRAY[93412], 35.3068, -120.8249),
- ('Addison', 'TX', ARRAY[75001], 32.9590, -96.8355),
- ('Mount Holly', 'NC', ARRAY[28012], 35.3136, -81.0072),
- ('Conyers', 'GA', ARRAY[30012, 30094], 33.6645, -83.9966),
- ('Centerton', 'AR', ARRAY[72719], 36.3567, -94.2971),
- ('Spanish Springs', 'NV', ARRAY[89436], 39.6567, -119.6695),
- ('Stuart', 'FL', ARRAY[34996, 34957, 34995], 27.1958, -80.2438),
- ('Canyon', 'TX', ARRAY[79015], 34.9877, -101.9178),
- ('West Haven', 'UT', ARRAY[84402], 41.2082, -112.0540),
- ('Four Corners', 'OR', ARRAY[97317], 44.9291, -122.9731),
- ('Sierra Vista Southeast', 'AZ', ARRAY[85615], 31.4525, -110.2160),
- ('Washington', 'NC', ARRAY[27889], 35.5587, -77.0545),
- ('Sayville', 'NY', ARRAY[11782], 40.7478, -73.0840),
- ('Lakeway', 'TX', ARRAY[78738, 78734], 30.3547, -97.9854),
- ('Archer Lodge', 'NC', ARRAY[27527], 35.6907, -78.3749),
- ('Fillmore', 'CA', ARRAY[93016], 34.3989, -118.9181),
- ('Bellevue', 'WI', ARRAY[54115], 44.4593, -87.9554),
- ('Gainesville', 'VA', ARRAY[20155], 38.7931, -77.6347),
- ('New Haven', 'IN', ARRAY[46803, 46806], 41.0675, -85.0175),
- ('Avocado Heights', 'CA', ARRAY[90601], 34.0381, -118.0026),
- ('Millbrook', 'AL', ARRAY[36022], 32.5028, -86.3737),
- ('Parkway', 'CA', ARRAY[94206], 38.4993, -121.4520),
- ('Pataskala', 'OH', ARRAY[43073], 40.0110, -82.7155),
- ('Tanque Verde', 'AZ', ARRAY[85748, 85751], 32.2687, -110.7437),
- ('Grandville', 'MI', ARRAY[49468], 42.9003, -85.7564),
- ('Highland Springs', 'VA', ARRAY[23223], 37.5516, -77.3285),
- ('White Center', 'WA', ARRAY[98146, 98168], 47.5086, -122.3480),
- ('Laguna Woods', 'CA', ARRAY[92609, 92654], 33.6098, -117.7299),
- ('Hope Mills', 'NC', ARRAY[28306], 34.9690, -78.9559),
- ('Floral Park', 'NY', ARRAY[11002], 40.7226, -73.7029),
- ('Humble', 'TX', ARRAY[77396, 77325, 77347], 29.9921, -95.2655),
- ('Aldine', 'TX', ARRAY[77037, 77039], 29.9122, -95.3785),
- ('New River', 'AZ', ARRAY[85087, 85080], 33.8835, -112.0858),
- ('Adelphi', 'MD', ARRAY[20903], 39.0017, -76.9649),
- ('Greenwood Village', 'CO', ARRAY[80111], 39.6152, -104.9130),
- ('North New Hyde Park', 'NY', ARRAY[11040], 40.7460, -73.6876),
- ('Blytheville', 'AR', ARRAY[72316], 35.9321, -89.9051),
- ('Stanford', 'CA', ARRAY[94309], 37.4252, -122.1674),
- ('Elkton', 'MD', ARRAY[21922], 39.6067, -75.8208),
- ('Fate', 'TX', ARRAY[75189, 75132], 32.9429, -96.3858),
- ('Port Washington', 'NY', ARRAY[11051, 11054], 40.8268, -73.6764),
- ('Riverdale', 'GA', ARRAY[30296], 33.5640, -84.4103),
- ('East Highland Park', 'VA', ARRAY[23223], 37.5770, -77.3865),
- ('Longwood', 'FL', ARRAY[32752, 32791], 28.7014, -81.3487),
- ('Seven Oaks', 'SC', ARRAY[29210], 34.0474, -81.1434),
- ('Overland', 'MO', ARRAY[63132], 38.6966, -90.3689),
- ('Dunn', 'NC', ARRAY[28335], 35.3113, -78.6129),
- ('Belvedere Park', 'GA', ARRAY[30030], 33.7488, -84.2598),
- ('Phelan', 'CA', ARRAY[92329], 34.4398, -117.5248),
- ('Buford', 'GA', ARRAY[30519, 30515], 34.1185, -83.9916),
- ('East Riverdale', 'MD', ARRAY[20737], 38.9600, -76.9108),
- ('Red Hill', 'SC', ARRAY[29526, 29579], 33.7777, -79.0111),
- ('Holly Springs', 'GA', ARRAY[30115], 34.1685, -84.4845),
- ('Fort Carson', 'CO', ARRAY[80913], 38.7403, -104.7840),
- ('Rossville', 'MD', ARRAY[21237], 39.3572, -76.4767),
- ('Hueytown', 'AL', ARRAY[35061], 33.4237, -87.0220),
- ('Bradley', 'IL', ARRAY[60914], 41.1641, -87.8452),
- ('Kailua', 'HI', ARRAY[96740, 96745, 96840], 19.6634, -155.9447),
- ('Hugo', 'MN', ARRAY[55038], 45.1671, -92.9588),
- ('Englewood', 'FL', ARRAY[34224, 34295], 26.9603, -82.3535),
- ('Fort Mohave', 'AZ', ARRAY[86427], 35.0004, -114.5748),
- ('Lamont', 'CA', ARRAY[93241], 35.2651, -118.9159),
- ('Gantt', 'SC', ARRAY[29605], 34.7837, -82.4027),
- ('College Park', 'GA', ARRAY[30349, 30320], 33.6363, -84.4640),
- ('Southchase', 'FL', ARRAY[32837], 28.3793, -81.3903),
- ('Damascus', 'MD', ARRAY[20882], 39.2737, -77.2006),
- ('West Richland', 'WA', ARRAY[99353], 46.3115, -119.3998),
- ('Oldsmar', 'FL', ARRAY[34685], 28.0507, -82.6698),
- ('Park City', 'UT', ARRAY[84068], 40.6505, -111.5020),
- ('Vandalia', 'OH', ARRAY[45377], 39.8790, -84.1930),
- ('Boulder City', 'NV', ARRAY[89005], 35.8407, -114.9257),
- ('South Farmingdale', 'NY', ARRAY[11735], 40.7175, -73.4471),
- ('Fords', 'NJ', ARRAY[7095, 8840], 40.5415, -74.3124),
- ('Jamestown', 'ND', ARRAY[58402, 58405], 46.9063, -98.6936),
- ('Beech Grove', 'IN', ARRAY[46203], 39.7157, -86.0871),
- ('Newport', 'KY', ARRAY[41072], 39.0855, -84.4868),
- ('Berea', 'SC', ARRAY[29611], 34.8802, -82.4653),
- ('Taft', 'CA', ARRAY[93268], 35.1267, -119.4242),
- ('Franklin Park', 'PA', ARRAY[15090, 15143], 40.5903, -80.0999),
- ('Salem Lakes', 'WI', ARRAY[53192, 53179, 53170, 53102], 42.5366, -88.1307),
- ('Azalea Park', 'FL', ARRAY[32807], 28.5473, -81.2956),
- ('Lockhart', 'FL', ARRAY[32810], 28.6271, -81.4354),
- ('Campbellsville', 'KY', ARRAY[42719], 37.3446, -85.3511),
- ('Tonawanda', 'NY', ARRAY[14151], 43.0105, -78.8805),
- ('Payson', 'AZ', ARRAY[85072, 85547], 34.2434, -111.3195),
- ('Salida', 'CA', ARRAY[95358, 95356], 37.7145, -121.0870),
- ('Southern Pines', 'NC', ARRAY[28387], 35.1927, -79.4040),
- ('Horsham', 'PA', ARRAY[19040], 40.1825, -75.1387),
- ('Halawa', 'HI', ARRAY[96818, 96861], 21.3753, -157.9185),
- ('Pewaukee', 'WI', ARRAY[53702, 53186, 53188], 43.0701, -88.2411),
- ('Falls Church', 'VA', ARRAY[22040], 38.8847, -77.1751),
- ('Franklin Park', 'NJ', ARRAY[8873], 40.4439, -74.5432),
- ('Cayey', 'PR', ARRAY[737], 18.1150, -66.1630),
- ('Port Orchard', 'WA', ARRAY[98367], 47.5163, -122.6610),
- ('Mineral Wells', 'TX', ARRAY[76067], 32.8169, -98.0776),
- ('Henderson', 'TX', ARRAY[75654], 32.1576, -94.7960),
- ('North Fair Oaks', 'CA', ARRAY[94063], 37.4754, -122.2035),
- ('Hershey', 'PA', ARRAY[17036], 40.2806, -76.6458),
- ('Olympia Heights', 'FL', ARRAY[33155], 25.7241, -80.3390),
- ('Hot Springs Village', 'AR', ARRAY[71910], 34.6568, -92.9644),
- ('Jefferson Valley-Yorktown', 'NY', ARRAY[10535, 10588], 41.3179, -73.8007),
- ('Thibodaux', 'LA', ARRAY[70302, 70310], 29.7941, -90.8163),
- ('Warren', 'PA', ARRAY[16366, 16367], 41.8433, -79.1445),
- ('Chippewa Falls', 'WI', ARRAY[54774], 44.9358, -91.3902),
- ('Ocean View', 'DE', ARRAY[19945], 38.5355, -75.0984),
- ('Forest City', 'FL', ARRAY[32703], 28.6619, -81.4443),
- ('Glasgow', 'DE', ARRAY[19702], 39.6015, -75.7474),
- ('California', 'MD', ARRAY[20619, 20634], 38.2969, -76.4949),
- ('Douglas', 'GA', ARRAY[31535, 31534], 31.5065, -82.8543),
- ('Black Forest', 'CO', ARRAY[80106], 39.0608, -104.6752),
- ('Mill Valley', 'CA', ARRAY[94942], 37.9085, -122.5421),
- ('Hollins', 'VA', ARRAY[24019], 37.3434, -79.9535),
- ('Destin', 'FL', ARRAY[32540], 30.3950, -86.4701),
- ('Red Wing', 'MN', ARRAY[55066], 44.5816, -92.6036),
- ('Lewisville', 'NC', ARRAY[27040], 36.1030, -80.4164),
- ('Glenn Dale', 'MD', ARRAY[20706, 20769], 38.9833, -76.8040),
- ('Hopatcong', 'NJ', ARRAY[7843, 7837], 40.9541, -74.6593),
- ('Gardendale', 'AL', ARRAY[35119], 33.6678, -86.8069),
- ('Hendersonville', 'NC', ARRAY[28791, 28739, 28738], 35.3242, -82.4576),
- ('Crowley', 'LA', ARRAY[70527], 30.2175, -92.3752),
- ('New Franklin', 'OH', ARRAY[44319, 44216], 40.9525, -81.5838),
- ('Chelsea', 'AL', ARRAY[35043], 33.3255, -86.6299),
- ('Pineville', 'LA', ARRAY[71348, 71359, 71361], 31.3414, -92.4096),
- ('Greensburg', 'PA', ARRAY[15606], 40.3113, -79.5444),
- ('Steamboat Springs', 'CO', ARRAY[80488, 80477], 40.4777, -106.8243),
- ('Elk Plain', 'WA', ARRAY[98338], 47.0448, -122.3671),
- ('Piney Green', 'NC', ARRAY[28544], 34.7498, -77.3208),
- ('Monroe', 'OH', ARRAY[45044, 45036], 39.4461, -84.3666),
- ('D''Iberville', 'MS', ARRAY[39540], 30.4709, -88.9011),
- ('Glasgow', 'KY', ARRAY[42142], 37.0047, -85.9263),
- ('Cayce', 'SC', ARRAY[29209, 29172, 29033], 33.9458, -81.0433),
- ('Dallas', 'GA', ARRAY[30157], 33.9153, -84.8416),
- ('Greenlawn', 'NY', ARRAY[11743], 40.8630, -73.3642),
- ('Thonotosassa', 'FL', ARRAY[33584, 33574], 28.0465, -82.2910),
- ('Gonzalez', 'FL', ARRAY[32534, 32560], 30.5822, -87.2906),
- ('Frederick', 'CO', ARRAY[80530, 80516], 40.1089, -104.9694),
- ('Hobe Sound', 'FL', ARRAY[33475], 27.0729, -80.1425),
- ('Glenpool', 'OK', ARRAY[74033], 35.9485, -96.0052),
- ('Deming', 'NM', ARRAY[88031], 32.2631, -107.7525),
- ('Fulshear', 'TX', ARRAY[77494, 77406], 29.6930, -95.8792),
- ('Allouez', 'WI', ARRAY[54301], 44.4721, -88.0261),
- ('Nesconset', 'NY', ARRAY[11787], 40.8467, -73.1522),
- ('Collingswood', 'NJ', ARRAY[8108], 39.9160, -75.0759),
- ('Oak Island', 'NC', ARRAY[28465], 33.9434, -78.1366),
- ('Mountain Park', 'GA', ARRAY[30087], 33.8458, -84.1313),
- ('Ephrata', 'PA', ARRAY[17549], 40.1812, -76.1811),
- ('Lakeland South', 'WA', ARRAY[98003], 47.2784, -122.2830),
- ('Kemp Mill', 'MD', ARRAY[20902], 39.0412, -77.0215),
- ('Jericho', 'NY', ARRAY[11853], 40.7875, -73.5416),
- ('Bridgetown', 'OH', ARRAY[45248], 39.1551, -84.6359),
- ('Teays Valley', 'WV', ARRAY[25560], 38.4482, -81.9240),
- ('Whitefish Bay', 'WI', ARRAY[53217], 43.1132, -87.9004),
- ('Fruitville', 'FL', ARRAY[34240], 27.3328, -82.4616),
- ('Levelland', 'TX', ARRAY[79338], 33.5806, -102.3636),
- ('Cherry Hill Mall', 'NJ', ARRAY[8034], 39.9384, -75.0117),
- ('Palmetto', 'FL', ARRAY[34220], 27.5251, -82.5750),
- ('El Sobrante', 'CA', ARRAY[94820], 37.9723, -122.2960),
- ('College', 'AK', ARRAY[99775], 64.8694, -147.8217),
- ('North Auburn', 'CA', ARRAY[95602], 38.9306, -121.0821),
- ('Forest Park', 'IL', ARRAY[60682], 41.8683, -87.8157),
- ('Beach Park', 'IL', ARRAY[60083, 60087], 42.4261, -87.8584),
- ('Soddy-Daisy', 'TN', ARRAY[37379], 35.2571, -85.1739),
- ('Rendon', 'TX', ARRAY[76140, 76063], 32.5789, -97.2350),
- ('Vadnais Heights', 'MN', ARRAY[55110], 45.0570, -93.0748),
- ('Shiloh', 'IL', ARRAY[62269], 38.5534, -89.9160),
- ('LaBelle', 'FL', ARRAY[33975], 26.7219, -81.4506),
- ('Conway', 'FL', ARRAY[32812], 28.4968, -81.3316),
- ('Oatfield', 'OR', ARRAY[97267], 45.4127, -122.5942),
- ('Sun Village', 'CA', ARRAY[93543], 34.5596, -117.9559),
- ('Ridge', 'NY', ARRAY[11786], 40.9068, -72.8816),
- ('Elizabethton', 'TN', ARRAY[37682], 36.3367, -82.2369),
- ('Belle Chasse', 'LA', ARRAY[70093], 29.8472, -90.0069),
- ('Avenal', 'CA', ARRAY[93239], 36.0311, -120.1162),
- ('Homosassa Springs', 'FL', ARRAY[34446, 34447], 28.8118, -82.5392),
- ('Hockessin', 'DE', ARRAY[19736], 39.7837, -75.6815),
- ('Grover Beach', 'CA', ARRAY[93483], 35.1204, -120.6199),
- ('Santa Fe', 'TX', ARRAY[77510], 29.3892, -95.1005),
- ('Lindale', 'TX', ARRAY[75771], 32.4934, -95.4069),
- ('Princeton Meadows', 'NJ', ARRAY[8512], 40.3332, -74.5628),
- ('Englewood', 'OH', ARRAY[45322], 39.8644, -84.3071),
- ('Huron', 'SD', ARRAY[57399], 44.3622, -98.2102),
- ('Twentynine Palms', 'CA', ARRAY[92278], 34.1478, -116.0659),
- ('Whitehall', 'PA', ARRAY[15227], 40.3602, -79.9898),
- ('Carpinteria', 'CA', ARRAY[93014], 34.3962, -119.5118),
- ('Lyndhurst', 'OH', ARRAY[44122], 41.5172, -81.4922),
- ('South Park Township', 'PA', ARRAY[15129], 40.2989, -79.9944),
- ('Azle', 'TX', ARRAY[76098], 32.8955, -97.5379),
- ('Vidalia', 'GA', ARRAY[30436], 32.2125, -82.4019),
- ('Big Bear City', 'CA', ARRAY[92386], 34.2536, -116.7903),
- ('Greenwich', 'CT', ARRAY[6831, 6836], 41.0253, -73.6298),
- ('Solana Beach', 'CA', ARRAY[92014], 32.9942, -117.2575),
- ('Rochester', 'MI', ARRAY[48308], 42.6866, -83.1198),
- ('Richton Park', 'IL', ARRAY[60443], 41.4816, -87.7387),
- ('Montgomeryville', 'PA', ARRAY[19446, 19454], 40.2502, -75.2405),
- ('Union Park', 'FL', ARRAY[32817], 28.5645, -81.2354),
- ('Jasper', 'AL', ARRAY[35504, 35501, 35502], 33.8503, -87.2708),
- ('Bensville', 'MD', ARRAY[20675, 20695], 38.6176, -77.0077),
- ('Channahon', 'IL', ARRAY[60410], 41.4213, -88.2593),
- ('Port Royal', 'SC', ARRAY[29905, 29906, 29935], 32.3557, -80.7029),
- ('Clayton', 'OH', ARRAY[45322, 45415], 39.8689, -84.3292),
- ('Baker', 'LA', ARRAY[70704], 30.5833, -91.1581),
- ('Globe', 'AZ', ARRAY[85532], 33.3869, -110.7515),
- ('Goldenrod', 'FL', ARRAY[32733], 28.6114, -81.2916),
- ('Fort Drum', 'NY', ARRAY[13602], 44.0451, -75.7847),
- ('Warrensville Heights', 'OH', ARRAY[44122], 41.4363, -81.5222),
- ('Lahaina', 'HI', ARRAY[96767], 20.8848, -156.6618),
- ('Mahomet', 'IL', ARRAY[61853], 40.1885, -88.3904),
- ('Ardmore', 'PA', ARRAY[19003], 40.0033, -75.2947),
- ('Lone Tree', 'CO', ARRAY[80134], 39.5309, -104.8710),
- ('Newington', 'VA', ARRAY[22150, 22079, 22122], 38.7358, -77.1993),
- ('Moody', 'AL', ARRAY[35173, 35004, 35120], 33.5986, -86.4963),
- ('Monfort Heights', 'OH', ARRAY[45247, 45239], 39.1822, -84.6075),
- ('Davidson', 'NC', ARRAY[28035], 35.4846, -80.8252),
- ('Edgewood', 'WA', ARRAY[98371], 47.2309, -122.2832),
- ('Suamico', 'WI', ARRAY[54313], 44.6352, -88.0664),
- ('San Marino', 'CA', ARRAY[91118], 34.1224, -118.1132),
- ('Forest Hill', 'TX', ARRAY[76119], 32.6619, -97.2662),
- ('Timberlake', 'VA', ARRAY[24550, 24502], 37.3167, -79.2482),
- ('Braselton', 'GA', ARRAY[30517], 34.1088, -83.8128),
- ('Dunmore', 'PA', ARRAY[18510, 18505, 18512], 41.4152, -75.6072),
- ('Fort Lewis', 'WA', ARRAY[98433, 98431], 47.0955, -122.5672),
- ('Mount Vernon', 'VA', ARRAY[22121], 38.7140, -77.1043),
- ('Rocky Point', 'NY', ARRAY[11961, 11778], 40.9357, -72.9364),
- ('Colonial Park', 'PA', ARRAY[17112], 40.2997, -76.8068),
- ('Weigelstown', 'PA', ARRAY[17315], 39.9843, -76.8315),
- ('West Carrollton', 'OH', ARRAY[45342], 39.6701, -84.2542),
- ('Parker', 'SC', ARRAY[29611], 34.8514, -82.4512),
- ('Spearfish', 'SD', ARRAY[57799], 44.4912, -103.8167),
- ('Lilburn', 'GA', ARRAY[30048], 33.8887, -84.1379),
- ('Glendale', 'WI', ARRAY[53217, 53212], 43.1288, -87.9277),
- ('Wilton Manors', 'FL', ARRAY[33334, 33311], 26.1593, -80.1395),
- ('Lansdowne', 'VA', ARRAY[20176], 39.0846, -77.4839),
- ('Finneytown', 'OH', ARRAY[45231], 39.2159, -84.5145),
- ('Herrin', 'IL', ARRAY[62933], 37.7983, -89.0305),
- ('Fergus Falls', 'MN', ARRAY[56538], 46.2853, -96.0760),
- ('Commerce', 'CA', ARRAY[90022, 90023, 90091], 33.9963, -118.1519),
- ('Lakeland', 'TN', ARRAY[38014], 35.2585, -89.7308),
- ('Elfers', 'FL', ARRAY[34653, 34652, 34680], 28.2140, -82.7230),
- ('Clarkston', 'GA', ARRAY[30021], 33.8117, -84.2404),
- ('Yulee', 'FL', ARRAY[32041], 30.6350, -81.5678),
- ('Windsor Locks', 'CT', ARRAY[6199], 41.9267, -72.6544),
- ('Minneola', 'FL', ARRAY[34755], 28.6067, -81.7322),
- ('Panama City Beach', 'FL', ARRAY[32413], 30.2369, -85.8775),
- ('Richmond', 'TX', ARRAY[77469], 29.5825, -95.7602),
- ('Riviera Beach', 'MD', ARRAY[21226], 39.1628, -76.5263),
- ('Jackson', 'WY', ARRAY[83002], 43.4721, -110.7745),
- ('Mercerville', 'NJ', ARRAY[8619], 40.2360, -74.6916),
- ('Lake Wylie', 'SC', ARRAY[29710], 35.0997, -81.0677),
- ('Truckee', 'CA', ARRAY[95161, 96160], 39.3455, -120.1848),
- ('Prairie Ridge', 'WA', ARRAY[98391], 47.1443, -122.1408),
- ('Hamilton Square', 'NJ', ARRAY[8691], 40.2248, -74.6526),
- ('Endicott', 'NY', ARRAY[13737, 13761, 13763], 42.0980, -76.0639),
- ('Hudson', 'FL', ARRAY[34674], 28.3594, -82.6888),
- ('Boone', 'IA', ARRAY[50037, 50099], 42.0530, -93.8770),
- ('Paris', 'KY', ARRAY[40362], 38.2016, -84.2719),
- ('Irmo', 'SC', ARRAY[29063, 29603], 34.1018, -81.1957),
- ('Newington Forest', 'VA', ARRAY[22079], 38.7371, -77.2339),
- ('Four Corners', 'TX', ARRAY[77083], 29.6705, -95.6596),
- ('Shepherdsville', 'KY', ARRAY[40166], 37.9806, -85.6999),
- ('Kelso', 'WA', ARRAY[98632], 46.1236, -122.8910),
- ('Overlea', 'MD', ARRAY[21234, 21206], 39.3642, -76.5176),
- ('Corinth', 'MS', ARRAY[38835], 34.9474, -88.5143),
- ('Virginia', 'MN', ARRAY[55777], 47.5169, -92.5128),
- ('Lakeland Highlands', 'FL', ARRAY[33831], 27.9572, -81.9496),
- ('Blue Ash', 'OH', ARRAY[45242, 45236], 39.2480, -84.3827),
- ('Harrison', 'WI', ARRAY[54169, 54130, 54915, 54129], 44.1935, -88.2941),
- ('Maltby', 'WA', ARRAY[98296, 98072, 98077], 47.8027, -122.1044),
- ('Gulfport', 'FL', ARRAY[33711], 27.7463, -82.7100),
- ('Orange City', 'FL', ARRAY[32774], 28.9347, -81.2881),
- ('Bastrop', 'LA', ARRAY[71221], 32.7749, -91.9058),
- ('Forrest City', 'AR', ARRAY[72335], 35.0135, -90.7931),
- ('Leon Valley', 'TX', ARRAY[78240], 29.4954, -98.6143),
- ('Newcastle', 'WA', ARRAY[98056], 47.5303, -122.1633),
- ('New Kensington', 'PA', ARRAY[15069], 40.5711, -79.7521),
- ('Pell City', 'AL', ARRAY[35128], 33.5609, -86.2669),
- ('Blythe', 'CA', ARRAY[92226], 33.6220, -114.6188),
- ('Larkspur', 'CA', ARRAY[94904, 94977], 37.9393, -122.5313),
- ('North Valley', 'NM', ARRAY[87114, 87107], 35.1736, -106.6231),
- ('Palmer Town', 'MA', ARRAY[1080, 1009, 1079], 42.1888, -72.3112),
- ('West Monroe', 'LA', ARRAY[71292, 71294], 32.5120, -92.1513),
- ('Athens', 'TX', ARRAY[75752], 32.2041, -95.8321),
- ('Jesup', 'GA', ARRAY[31546, 31598, 31599], 31.5992, -81.8895),
- ('Speedway', 'IN', ARRAY[46222], 39.7937, -86.2479),
- ('Lincoln City', 'OR', ARRAY[97367], 44.9751, -124.0073),
- ('Eatontown', 'NJ', ARRAY[7703], 40.2913, -74.0558),
- ('Newport', 'OR', ARRAY[97366], 44.6242, -124.0513),
- ('Freeport', 'TX', ARRAY[77542], 28.9454, -95.3601),
- ('Coolidge', 'AZ', ARRAY[85128], 32.9395, -111.5261),
- ('Melissa', 'TX', ARRAY[75454], 33.2891, -96.5573),
- ('Eureka', 'MO', ARRAY[63069], 38.5015, -90.6492),
- ('Emeryville', 'CA', ARRAY[94662], 37.8382, -122.2932),
- ('Little Chute', 'WI', ARRAY[54130, 54913, 54911], 44.2905, -88.3206),
- ('Sedro-Woolley', 'WA', ARRAY[98384], 48.5112, -122.2321),
- ('Gatesville', 'TX', ARRAY[76596, 76598, 76599], 31.4419, -97.7351),
- ('South Charleston', 'WV', ARRAY[25303], 38.3482, -81.7110),
- ('Vail', 'AZ', ARRAY[85744], 32.0217, -110.6937),
- ('Leeds', 'AL', ARRAY[35173, 35123], 33.5429, -86.5636),
- ('East Bethel', 'MN', ARRAY[55011, 55005], 45.3557, -93.2038),
- ('Villas', 'FL', ARRAY[33907], 26.5504, -81.8679),
- ('Spring Lake', 'NC', ARRAY[28390], 35.1842, -78.9959),
- ('Babylon', 'NY', ARRAY[11707], 40.6949, -73.3270),
- ('Diamond Springs', 'CA', ARRAY[95623, 95619], 38.6920, -120.8391),
- ('Oak Hills', 'OR', ARRAY[97006], 45.5403, -122.8413),
- ('Lansing', 'KS', ARRAY[66048], 39.2428, -94.8971),
- ('Norwalk', 'IA', ARRAY[50061], 41.4895, -93.6913),
- ('Fairfax Station', 'VA', ARRAY[22032, 22039], 38.7942, -77.3358),
- ('Robinson', 'TX', ARRAY[76706], 31.4501, -97.1201),
- ('Port Washington', 'WI', ARRAY[53024], 43.3847, -87.8852),
- ('South Miami', 'FL', ARRAY[33155], 25.7079, -80.2952),
- ('Accokeek', 'MD', ARRAY[20607], 38.6745, -77.0023),
- ('Richfield', 'WI', ARRAY[53033, 53017], 43.2372, -88.2413),
- ('Robertsville', 'NJ', ARRAY[7726, 7746], 40.3395, -74.2939),
- ('Red Bank', 'TN', ARRAY[37405], 35.1117, -85.2961),
- ('Brown Deer', 'WI', ARRAY[53223], 43.1743, -87.9750),
- ('Crestwood', 'MO', ARRAY[63123], 38.5569, -90.3782),
- ('Berkley', 'CO', ARRAY[80221], 39.8045, -105.0281),
- ('North Wantagh', 'NY', ARRAY[11783], 40.6983, -73.5086),
- ('Urbana', 'MD', ARRAY[21754], 39.3237, -77.3411),
- ('Walker Mill', 'MD', ARRAY[20747], 38.8754, -76.8862),
- ('Tomball', 'TX', ARRAY[77377], 30.0951, -95.6194),
- ('Wanaque', 'NJ', ARRAY[7420], 41.0440, -74.2900),
- ('Arizona City', 'AZ', ARRAY[85123], 32.7506, -111.6707),
- ('Tucson Estates', 'AZ', ARRAY[85735], 32.1792, -111.1254),
- ('East Renton Highlands', 'WA', ARRAY[98059, 98038], 47.4718, -122.0854),
- ('Arlington', 'TN', ARRAY[38028], 35.2594, -89.6680),
- ('Cocoa Beach', 'FL', ARRAY[32932, 32954], 28.3326, -80.6274),
- ('Bayou Blue', 'LA', ARRAY[70364], 29.6341, -90.6732),
- ('Brock Hall', 'MD', ARRAY[20772], 38.8617, -76.7549),
- ('Pine Castle', 'FL', ARRAY[32839], 28.4651, -81.3740),
- ('Endwell', 'NY', ARRAY[13762], 42.1185, -76.0219),
- ('Travilah', 'MD', ARRAY[20850], 39.0571, -77.2458),
- ('South Yarmouth', 'MA', ARRAY[2664], 41.6692, -70.2005),
- ('Wyandanch', 'NY', ARRAY[11704], 40.7467, -73.3769),
- ('North Bellport', 'NY', ARRAY[11772], 40.7868, -72.9457),
- ('Annapolis Neck', 'MD', ARRAY[21037], 38.9408, -76.4997),
- ('View Park-Windsor Hills', 'CA', ARRAY[90043, 90056], 33.9955, -118.3484),
- ('Ozark', 'AL', ARRAY[36361], 31.4508, -85.6473),
- ('Silver City', 'NM', ARRAY[88062], 32.7784, -108.2698),
- ('Martinsville', 'NJ', ARRAY[8805, 8807], 40.6030, -74.5751),
- ('Bainbridge', 'GA', ARRAY[39817, 39818], 30.9046, -84.5727),
- ('Bridgeton', 'MO', ARRAY[63074], 38.7673, -90.4275),
- ('Archdale', 'NC', ARRAY[27263], 35.9033, -79.9592),
- ('Newport', 'TN', ARRAY[37822], 35.9617, -83.1977),
- ('Florham Park', 'NJ', ARRAY[7932], 40.7773, -74.3953),
- ('Bogalusa', 'LA', ARRAY[70429], 30.7812, -89.8633),
- ('Madison Heights', 'VA', ARRAY[24505], 37.4487, -79.1057),
- ('Lake Los Angeles', 'CA', ARRAY[93591], 34.6097, -117.8339),
- ('Emmaus', 'PA', ARRAY[18098, 18099], 40.5352, -75.4978),
- ('Chalco', 'NE', ARRAY[60138], 41.1817, -96.1353),
- ('Goulds', 'FL', ARRAY[33177], 25.5614, -80.3880),
- ('Greentree', 'NJ', ARRAY[8034], 39.8989, -74.9614),
- ('Webster', 'TX', ARRAY[77058], 29.5317, -95.1188),
- ('Home Gardens', 'CA', ARRAY[92879], 33.8784, -117.5116),
- ('Elwood', 'NY', ARRAY[11731], 40.8462, -73.3389),
- ('Byram', 'MS', ARRAY[39170, 39212], 32.1890, -90.2861),
- ('Lyndon', 'KY', ARRAY[40223, 40222], 38.2644, -85.5891),
- ('Mack', 'OH', ARRAY[45233, 45248], 39.1503, -84.6792),
- ('Richmond Heights', 'FL', ARRAY[33186], 25.6347, -80.3720),
- ('Los Alamitos', 'CA', ARRAY[90721], 33.7972, -118.0594),
- ('Collegedale', 'TN', ARRAY[37363, 37315], 35.0525, -85.0487),
- ('Dent', 'OH', ARRAY[45247], 39.1922, -84.6593),
- ('Snyder', 'TX', ARRAY[79550], 32.7133, -100.9113),
- ('Fairfield', 'IA', ARRAY[52557], 41.0061, -91.9669),
- ('Bellmawr', 'NJ', ARRAY[8099], 39.8665, -75.0941),
- ('Doctor Phillips', 'FL', ARRAY[32819], 28.4476, -81.4922),
- ('Mendota Heights', 'MN', ARRAY[55118, 55150], 44.8815, -93.1400),
- ('Haysville', 'KS', ARRAY[67217], 37.5649, -97.3527),
- ('Evanston', 'WY', ARRAY[82931], 41.2602, -110.9646),
- ('Port Salerno', 'FL', ARRAY[34992], 27.1461, -80.1895),
- ('Pennsville', 'NJ', ARRAY[8070], 39.6508, -75.5077),
- ('Lake Morton-Berrydale', 'WA', ARRAY[98042], 47.3325, -122.1032),
- ('Hartsville', 'TN', ARRAY[37074, 37057, 37031], 36.3921, -86.1568),
- ('Fairview Shores', 'FL', ARRAY[32789, 32810], 28.6020, -81.3948),
- ('Mango', 'FL', ARRAY[33584, 33550], 27.9915, -82.3070),
- ('Mitchellville', 'MD', ARRAY[20721], 38.9358, -76.8146),
- ('Viera East', 'FL', ARRAY[32940], 28.2610, -80.7150),
- ('Weddington', 'NC', ARRAY[28173], 35.0228, -80.7383),
- ('Aguadilla', 'PR', ARRAY[605], 18.4382, -67.1536),
- ('Poulsbo', 'WA', ARRAY[98061], 47.7417, -122.6407),
- ('Piedmont', 'CA', ARRAY[94610], 37.8226, -122.2300),
- ('Viera West', 'FL', ARRAY[32940], 28.2430, -80.7368),
- ('Yorktown', 'IN', ARRAY[47396, 47304], 40.1830, -85.5123),
- ('Town and Country', 'MO', ARRAY[63141, 63131, 63006], 38.6317, -90.4790),
- ('Jefferson Hills', 'PA', ARRAY[15025, 15332], 40.2927, -79.9329),
- ('Lindon', 'UT', ARRAY[84602], 40.3414, -111.7187),
- ('Maysville', 'KY', ARRAY[41096], 38.6454, -83.7911),
- ('Campton Hills', 'IL', ARRAY[60175, 60124, 60183], 41.9499, -88.4166),
- ('Woodbury', 'NY', ARRAY[10926, 10930], 41.3284, -74.1004),
- ('Merriam', 'KS', ARRAY[66202, 66204], 39.0186, -94.6933),
- ('Wahpeton', 'ND', ARRAY[58076], 46.2722, -96.6118),
- ('Grand Haven', 'MI', ARRAY[49456], 43.0553, -86.2201),
- ('Gold Canyon', 'AZ', ARRAY[85119], 33.3715, -111.4369),
- ('Oak Grove', 'SC', ARRAY[29170], 33.9809, -81.1438),
- ('California City', 'CA', ARRAY[93504], 35.1578, -117.8721),
- ('Liberty Lake', 'WA', ARRAY[99016], 47.6687, -117.1032),
- ('New Albany', 'OH', ARRAY[43031, 43062], 40.0802, -82.7883),
- ('Cusseta', 'GA', ARRAY[31805, 31995], 32.3470, -84.7870),
- ('Montgomery', 'OH', ARRAY[45242], 39.2496, -84.3457),
- ('Forestville', 'OH', ARRAY[45230], 39.0711, -84.3389),
- ('Soquel', 'CA', ARRAY[95003], 36.9978, -121.9482),
- ('La Riviera', 'CA', ARRAY[95826], 38.5683, -121.3544),
- ('Gardere', 'LA', ARRAY[70810], 30.3582, -91.1345),
- ('Pleasant View', 'UT', ARRAY[84414], 41.3249, -112.0011),
- ('Wasilla', 'AK', ARRAY[99629, 99687], 61.5770, -149.4660),
- ('Northbrook', 'OH', ARRAY[45231], 39.2467, -84.5796),
- ('Manchester', 'VA', ARRAY[23235, 23236], 37.4902, -77.5396),
- ('Sierra Madre', 'CA', ARRAY[91025], 34.1687, -118.0504),
- ('Totowa', 'NJ', ARRAY[7511], 40.9039, -74.2213),
- ('Halfway', 'MD', ARRAY[21795], 39.6163, -77.7700),
- ('Citrus', 'CA', ARRAY[91702], 34.1161, -117.8890),
- ('Saks', 'AL', ARRAY[36206], 33.7118, -85.8536),
- ('Galena Park', 'TX', ARRAY[77547, 77029], 29.7452, -95.2333),
- ('Elk City', 'OK', ARRAY[73662, 73648], 35.3850, -99.4331),
- ('Gig Harbor', 'WA', ARRAY[98335], 47.3353, -122.5964),
- ('Crestwood', 'IL', ARRAY[60418], 41.6454, -87.7396),
- ('Rosaryville', 'MD', ARRAY[20772], 38.7672, -76.8266),
- ('Smithfield', 'VA', ARRAY[23431], 36.9754, -76.6162),
- ('Scottdale', 'GA', ARRAY[30021, 30033, 30002], 33.7950, -84.2634),
- ('DeForest', 'WI', ARRAY[53532], 43.2301, -89.3437),
- ('Cleveland', 'TX', ARRAY[77328], 30.3374, -95.0931),
- ('Bothell East', 'WA', ARRAY[98012], 47.8064, -122.1845),
- ('Pike Creek Valley', 'DE', ARRAY[19711], 39.7296, -75.6993),
- ('Newcastle', 'OK', ARRAY[73065], 35.2404, -97.5998),
- ('Alamosa', 'CO', ARRAY[81102], 37.4751, -105.8769),
- ('Highland City', 'FL', ARRAY[33830, 33812, 33846], 27.9633, -81.8781),
- ('Millington', 'TN', ARRAY[38054, 38055, 38083], 35.3350, -89.8991),
- ('Wyomissing', 'PA', ARRAY[19610], 40.3317, -75.9703),
- ('Burtonsville', 'MD', ARRAY[20866], 39.1166, -76.9356),
- ('Fort Bliss', 'TX', ARRAY[79908, 79916, 79918], 31.8137, -106.4119),
- ('Lake Stickney', 'WA', ARRAY[98204], 47.8709, -122.2596),
- ('North Lindenhurst', 'NY', ARRAY[11701], 40.7072, -73.3859),
- ('Covington', 'LA', ARRAY[70434], 30.4808, -90.1122),
- ('Morro Bay', 'CA', ARRAY[93443], 35.3681, -120.8481),
- ('Milton', 'FL', ARRAY[32570, 32572], 30.6286, -87.0522),
- ('Arkadelphia', 'AR', ARRAY[71999, 71998], 34.1255, -93.0725),
- ('Farmington', 'MI', ARRAY[48335, 48332, 48333], 42.4614, -83.3784),
- ('Lake Arbor', 'MD', ARRAY[20774], 38.9070, -76.8299),
- ('Fox Lake', 'IL', ARRAY[60081, 60041], 42.4239, -88.1844),
- ('Pine Hill', 'NJ', ARRAY[8021], 39.7879, -74.9857),
- ('Martin', 'TN', ARRAY[38238], 36.3386, -88.8513),
- ('Budd Lake', 'NJ', ARRAY[7836], 40.8733, -74.7374),
- ('Shasta Lake', 'CA', ARRAY[96019, 96079], 40.6790, -122.3775),
- ('Rodeo', 'CA', ARRAY[94572], 38.0368, -122.2526),
- ('Vidor', 'TX', ARRAY[77670], 30.1291, -93.9967),
- ('Bellefontaine Neighbors', 'MO', ARRAY[63137], 38.7529, -90.2280),
- ('Lyons', 'IL', ARRAY[60525], 41.8121, -87.8192),
- ('Miami Shores', 'FL', ARRAY[33138, 33153], 25.8670, -80.1779),
- ('Magnolia', 'AR', ARRAY[71754], 33.2774, -93.2261),
- ('Lanham', 'MD', ARRAY[20703], 38.9621, -76.8421),
- ('Fairview', 'CA', ARRAY[94542, 94540], 37.6760, -122.0480),
- ('Forest Acres', 'SC', ARRAY[29206], 34.0324, -80.9716),
- ('Pine Ridge', 'FL', ARRAY[34442, 34445], 28.9330, -82.4761),
- ('Doraville', 'GA', ARRAY[30360], 33.9072, -84.2711),
- ('Box Elder', 'SD', ARRAY[57706, 57719], 44.1121, -103.0827),
- ('Pasadena Hills', 'FL', ARRAY[33541, 33545], 28.2881, -82.2380),
- ('Great Neck', 'NY', ARRAY[11023, 11027], 40.8028, -73.7332),
- ('Victoria', 'MN', ARRAY[55331, 55318], 44.8634, -93.6586),
- ('West Haverstraw', 'NY', ARRAY[10923], 41.2063, -73.9883),
- ('Quartz Hill', 'CA', ARRAY[93586], 34.6527, -118.2163),
- ('New Port Richey East', 'FL', ARRAY[34653], 28.2605, -82.6930),
- ('Pike Road', 'AL', ARRAY[36013, 36116], 32.2934, -86.0902),
- ('Snohomish', 'WA', ARRAY[98291], 47.9276, -122.0968),
- ('Brookhaven', 'MS', ARRAY[39602, 39603], 31.5803, -90.4432),
- ('Progress Village', 'FL', ARRAY[33578], 27.8832, -82.3593),
- ('Warr Acres', 'OK', ARRAY[73122], 35.5285, -97.6182),
- ('Hobart', 'WI', ARRAY[54115, 54155], 44.4967, -88.1602),
- ('Clinton', 'TN', ARRAY[37717], 36.0981, -84.1283),
- ('Garden City', 'SC', ARRAY[29576], 33.5927, -79.0070),
- ('Wood River', 'IL', ARRAY[62095], 38.8631, -90.0773),
- ('Fair Oaks Ranch', 'TX', ARRAY[78163], 29.7468, -98.6375),
- ('Holmen', 'WI', ARRAY[54650], 43.9699, -91.2661),
- ('Coweta', 'OK', ARRAY[74014], 35.9680, -95.6543),
- ('Fairmount', 'NY', ARRAY[13031], 43.0414, -76.2485),
- ('Fort Oglethorpe', 'GA', ARRAY[30707, 30741, 30742], 34.9319, -85.2460),
- ('Alcoa', 'TN', ARRAY[37777, 37804], 35.8073, -83.9752),
- ('Clay', 'AL', ARRAY[35126, 35048], 33.6976, -86.6070),
- ('Mission', 'KS', ARRAY[66205], 39.0270, -94.6568),
- ('Gages Lake', 'IL', ARRAY[60031], 42.3519, -87.9828),
- ('Ellisville', 'MO', ARRAY[63011], 38.5897, -90.5884),
- ('Mentone', 'CA', ARRAY[92374], 34.0609, -117.1108),
- ('Scottsboro', 'AL', ARRAY[35769], 34.6438, -86.0491),
- ('Lake Barcroft', 'VA', ARRAY[22041], 38.8514, -77.1579),
- ('East Rockaway', 'NY', ARRAY[11518], 40.6432, -73.6672),
- ('Inwood', 'NY', ARRAY[11096], 40.6218, -73.7507),
- ('Gunbarrel', 'CO', ARRAY[80301], 40.0634, -105.1714),
- ('Grenada', 'MS', ARRAY[38902, 38960], 33.7816, -89.8130),
- ('Russellville', 'AL', ARRAY[35653], 34.5056, -87.7282),
- ('Marina del Rey', 'CA', ARRAY[90295], 33.9765, -118.4486),
- ('Lake Arrowhead', 'CA', ARRAY[92391, 92385, 92352, 92321], 34.2531, -117.1945),
- ('Union City', 'TN', ARRAY[38281], 36.4268, -89.0474),
- ('Denham Springs', 'LA', ARRAY[70727], 30.4743, -90.9594),
- ('George Mason', 'VA', ARRAY[22032], 38.8355, -77.3185),
- ('Boaz', 'AL', ARRAY[35956], 34.1985, -86.1529),
- ('Medulla', 'FL', ARRAY[33811], 27.9570, -81.9866),
- ('Gifford', 'FL', ARRAY[32967], 27.6747, -80.4102),
- ('Valley Cottage', 'NY', ARRAY[10989], 41.1160, -73.9436),
- ('Hermantown', 'MN', ARRAY[55810, 55811], 46.8058, -92.2407),
- ('Wilmore', 'KY', ARRAY[40390], 37.8786, -84.6545),
- ('Chevy Chase', 'MD', ARRAY[20815], 38.9943, -77.0737),
- ('Howell', 'MI', ARRAY[48844], 42.6078, -83.9339),
- ('Roxboro', 'NC', ARRAY[27574], 36.3879, -78.9812),
- ('Bull Mountain', 'OR', ARRAY[97223, 97140], 45.4126, -122.8322),
- ('Rice Lake', 'WI', ARRAY[54822], 45.4863, -91.7447),
- ('Grand Rapids', 'MN', ARRAY[55730, 55745], 47.2380, -93.5327),
- ('Harleysville', 'PA', ARRAY[19441], 40.2791, -75.3872),
- ('Willoughby Hills', 'OH', ARRAY[44092], 41.5873, -81.4333),
- ('Rye Brook', 'NY', ARRAY[10573], 41.0303, -73.6865),
- ('Reedsburg', 'WI', ARRAY[53958], 43.5347, -89.9965),
- ('Dayton', 'NV', ARRAY[89428], 39.2580, -119.5677),
- ('Independent Hill', 'VA', ARRAY[20112], 38.6404, -77.4090),
- ('Hope', 'AR', ARRAY[71802], 33.6682, -93.5895),
- ('Helena-West Helena', 'AR', ARRAY[72342], 34.5314, -90.6201),
- ('Airway Heights', 'WA', ARRAY[99001], 47.6460, -117.5792),
- ('Laurel', 'FL', ARRAY[34272, 34274], 27.1446, -82.4618),
- ('Orono', 'ME', ARRAY[4469], 44.8811, -68.6792),
- ('Bithlo', 'FL', ARRAY[32833], 28.5644, -81.1074),
- ('White Marsh', 'MD', ARRAY[21128, 21237, 21162], 39.3819, -76.4573),
- ('Roxborough Park', 'CO', ARRAY[80135], 39.4492, -105.0746),
- ('Picture Rocks', 'AZ', ARRAY[85743], 32.3274, -111.2557),
- ('Carencro', 'LA', ARRAY[70507], 30.3126, -92.0387),
- ('Ruidoso', 'NM', ARRAY[88338, 88355], 33.3647, -105.6432),
- ('Monticello', 'AR', ARRAY[71656], 33.6258, -91.7934),
- ('Brunswick', 'MD', ARRAY[21716], 39.3180, -77.6253),
- ('Beverly Hills', 'FL', ARRAY[34464], 28.9175, -82.4541),
- ('Crestline', 'CA', ARRAY[92322, 92325], 34.2486, -117.2890),
- ('Flowood', 'MS', ARRAY[39208, 39232], 32.3359, -90.0802),
- ('Bloomfield', 'NM', ARRAY[87410], 36.7401, -107.9734),
- ('North Kensington', 'MD', ARRAY[20902], 39.0392, -77.0723),
- ('Kendall Park', 'NJ', ARRAY[8852], 40.4138, -74.5626),
- ('Woodlyn', 'PA', ARRAY[19022, 19033, 19081], 39.8774, -75.3445),
- ('Fort Stewart', 'GA', ARRAY[31314], 31.8818, -81.6105),
- ('Lenoir City', 'TN', ARRAY[37772], 35.8110, -84.2818),
- ('College Place', 'WA', ARRAY[99362], 46.0419, -118.3879),
- ('Wesley Chapel', 'NC', ARRAY[28173, 28110], 34.9985, -80.6905),
- ('Gloucester Point', 'VA', ARRAY[23072, 23131, 23184], 37.2767, -76.5043),
- ('Parsons', 'KS', ARRAY[67357], 37.3405, -95.2959),
- ('Fultondale', 'AL', ARRAY[35119, 35068], 33.6177, -86.8015),
- ('North College Hill', 'OH', ARRAY[45231, 45239], 39.2174, -84.5520),
- ('Reserve', 'LA', ARRAY[70084], 30.0741, -90.5557),
- ('Forestdale', 'AL', ARRAY[35005], 33.5737, -86.9002),
- ('Marathon', 'FL', ARRAY[33052], 24.7262, -81.0376),
- ('Hickam Housing', 'HI', ARRAY[96818], 21.3311, -157.9474),
- ('St. Stephens', 'NC', ARRAY[28601], 35.7641, -81.2746),
- ('Commerce', 'TX', ARRAY[75429], 33.2421, -95.8991),
- ('Hampton', 'NH', ARRAY[3843], 42.9428, -70.8261),
- ('Fort Polk South', 'LA', ARRAY[71459], 31.0512, -93.2159),
- ('Girard', 'OH', ARRAY[44446], 41.1666, -80.6963),
- ('Hillview', 'KY', ARRAY[40165, 40129], 38.0563, -85.6848),
- ('Spanish Fort', 'AL', ARRAY[36527, 36578, 36577], 30.7257, -87.8601),
- ('Bethalto', 'IL', ARRAY[62018], 38.9014, -90.0467),
- ('Midland', 'WA', ARRAY[98445], 47.1734, -122.4120),
- ('Plainedge', 'NY', ARRAY[11735], 40.7240, -73.4770),
- ('Fair Oaks', 'GA', ARRAY[30008, 30080], 33.9192, -84.5444),
- ('Stansbury Park', 'UT', ARRAY[84407], 40.6356, -112.3054),
- ('Calimesa', 'CA', ARRAY[92223], 33.9874, -117.0542),
- ('Dunn Loring', 'VA', ARRAY[22180, 22182], 38.8945, -77.2316),
- ('Holualoa', 'HI', ARRAY[96740], 19.6238, -155.9269),
- ('Beecher', 'MI', ARRAY[48505], 43.0903, -83.7039),
- ('Economy', 'PA', ARRAY[15003, 15042, 15027, 15143], 40.6410, -80.1840),
- ('Berthoud', 'CO', ARRAY[80534, 80513], 40.3070, -105.0419),
- ('Whitestown', 'IN', ARRAY[46075], 39.9705, -86.3612),
- ('Derby', 'CO', ARRAY[80024], 39.8401, -104.9171),
- ('Sutherlin', 'OR', ARRAY[97462], 43.3884, -123.3231),
- ('Alexander City', 'AL', ARRAY[35011], 32.9242, -85.9361),
- ('Westphalia', 'MD', ARRAY[20772], 38.8385, -76.8231),
- ('Dumbarton', 'VA', ARRAY[23230], 37.6130, -77.5065),
- ('Northwest Harborcreek', 'PA', ARRAY[16511], 42.1494, -79.9946),
- ('St. Anthony', 'MN', ARRAY[55418], 45.0278, -93.2174),
- ('Farmingdale', 'NY', ARRAY[11737], 40.7328, -73.4465),
- ('North Sarasota', 'FL', ARRAY[34243], 27.3711, -82.5177),
- ('Powdersville', 'SC', ARRAY[29611, 29642], 34.7825, -82.4958),
- ('Linganore', 'MD', ARRAY[21754], 39.4111, -77.3026),
- ('Picnic Point', 'WA', ARRAY[98087], 47.8744, -122.3078),
- ('Fort Knox', 'KY', ARRAY[40122], 37.8915, -85.9636),
- ('Stony Brook University', 'NY', ARRAY[11794, 11733], 40.9099, -73.1213),
- ('Oakwood', 'OH', ARRAY[45419], 39.7202, -84.1733),
- ('Oakville', 'CT', ARRAY[6795], 41.5923, -73.0858),
- ('Oak Grove', 'MN', ARRAY[55303, 55005], 45.3409, -93.3264),
- ('Blanchard', 'OK', ARRAY[73101], 35.1523, -97.6613),
- ('St. Albans', 'VT', ARRAY[5479], 44.8118, -73.0846),
- ('Oakland', 'TN', ARRAY[38028], 35.2256, -89.5372),
- ('Potsdam', 'NY', ARRAY[13699], 44.6699, -74.9830),
- ('Sugarmill Woods', 'FL', ARRAY[34446], 28.7321, -82.4986),
- ('Glencoe', 'IL', ARRAY[60022], 42.1347, -87.7641),
- ('Orange Park', 'FL', ARRAY[32067], 30.1706, -81.7041),
- ('Pine Lake Park', 'NJ', ARRAY[8759], 40.0017, -74.2595),
- ('Old Orchard Beach', 'ME', ARRAY[4064], 43.5239, -70.3904),
- ('Seffner', 'FL', ARRAY[33583], 27.9981, -82.2735),
- ('Airmont', 'NY', ARRAY[10901, 10982], 41.0992, -74.0990),
- ('Sans Souci', 'SC', ARRAY[29609], 34.8901, -82.4241),
- ('South Kensington', 'MD', ARRAY[20814], 39.0188, -77.0785),
- ('West Miami', 'FL', ARRAY[33155], 25.7578, -80.2969),
- ('Clayton', 'NJ', ARRAY[8094], 39.6627, -75.0782),
- ('Hernando', 'FL', ARRAY[34442, 34441], 28.9451, -82.3781),
- ('Glenwood', 'IL', ARRAY[60411], 41.5409, -87.6116),
- ('Garden City', 'GA', ARRAY[31405, 31415], 32.0868, -81.1773),
- ('Fairmount', 'CO', ARRAY[80403], 39.7931, -105.1712),
- ('Folsom', 'PA', ARRAY[19081], 39.8924, -75.3287),
- ('Mount Vista', 'WA', ARRAY[98686], 45.7373, -122.6315),
- ('Des Peres', 'MO', ARRAY[63131], 38.5973, -90.4480),
- ('Perryville', 'MO', ARRAY[63776], 37.7263, -89.8759),
- ('Scott', 'LA', ARRAY[70507, 70506], 30.2398, -92.0947),
- ('West Vero Corridor', 'FL', ARRAY[32961], 27.6378, -80.4855),
- ('Edgemere', 'MD', ARRAY[21052], 39.2273, -76.4590),
- ('Salem', 'UT', ARRAY[84653], 40.0540, -111.6720),
- ('Richlands', 'VA', ARRAY[24612], 37.0878, -81.8080),
- ('Pleasant Hill', 'MO', ARRAY[64034], 38.8061, -94.2655),
- ('Montecito', 'CA', ARRAY[93150], 34.4382, -119.6286),
- ('Evergreen', 'CO', ARRAY[80437], 39.6349, -105.3356),
- ('Elsmere', 'KY', ARRAY[41042], 38.9949, -84.6017),
- ('Farmville', 'VA', ARRAY[23909], 37.2959, -78.4002),
- ('Monroe', 'NY', ARRAY[10949], 41.3198, -74.1848),
- ('Perry Heights', 'OH', ARRAY[44646], 40.7977, -81.4680),
- ('Springfield', 'FL', ARRAY[32405, 32404], 30.1713, -85.6089),
- ('Seven Corners', 'VA', ARRAY[22041], 38.8658, -77.1445),
- ('West Athens', 'CA', ARRAY[90047], 33.9235, -118.3033),
- ('Brooksville', 'FL', ARRAY[34603, 34605], 28.5404, -82.3903),
- ('Fairfield Glade', 'TN', ARRAY[38557], 36.0028, -84.8711),
- ('Fairwood', 'WA', ARRAY[99218], 47.7678, -117.4157),
- ('Innsbrook', 'VA', ARRAY[23233], 37.6552, -77.5775),
- ('Wetumpka', 'AL', ARRAY[36092], 32.5407, -86.2052),
- ('Park Hills', 'MO', ARRAY[63640], 37.8211, -90.5050),
- ('Odessa', 'FL', ARRAY[33558], 28.1820, -82.5530),
- ('White Horse', 'NJ', ARRAY[8610], 40.1920, -74.7022),
- ('Rolesville', 'NC', ARRAY[27587], 35.9224, -78.4656),
- ('Incline Village', 'NV', ARRAY[89450, 89511, 89452], 39.2639, -119.9453),
- ('University of Virginia', 'VA', ARRAY[22904], 38.0405, -78.5163),
- ('Eufaula', 'AL', ARRAY[36072], 31.9102, -85.1505),
- ('Cedar Hills', 'OR', ARRAY[97005, 97077], 45.5047, -122.8051),
- ('Dock Junction', 'GA', ARRAY[31520, 31521], 31.2031, -81.5156),
- ('Middleton', 'ID', ARRAY[83652], 43.7114, -116.6155),
- ('Woodburn', 'VA', ARRAY[22003, 22042, 22037], 38.8503, -77.2322),
- ('Sunset Hills', 'MO', ARRAY[63127], 38.5310, -90.4087),
- ('Summit', 'WA', ARRAY[98373, 98446], 47.1694, -122.3628),
- ('West Haven-Sylvan', 'OR', ARRAY[97229], 45.5164, -122.7654),
- ('Los Altos Hills', 'CA', ARRAY[94024], 37.3671, -122.1390),
- ('Citrus Springs', 'FL', ARRAY[34434, 34445], 28.9931, -82.4595),
- ('Congers', 'NY', ARRAY[10920], 41.1484, -73.9456),
- ('Savoy', 'IL', ARRAY[61822], 40.0600, -88.2552),
- ('Center Moriches', 'NY', ARRAY[11955], 40.8015, -72.7960),
- ('Aransas Pass', 'TX', ARRAY[78335], 27.8877, -97.1134),
- ('Garrison', 'MD', ARRAY[21117, 21208], 39.4023, -76.7514),
- ('Gaylord', 'MI', ARRAY[49734], 45.0213, -84.6803),
- ('Greenville', 'RI', ARRAY[2917], 41.8800, -71.5549),
- ('Somers', 'WI', ARRAY[53140, 53141, 53171], 42.6411, -87.8919),
- ('Willow Street', 'PA', ARRAY[17602], 39.9809, -76.2705),
- ('Millersville', 'PA', ARRAY[17603], 40.0047, -76.3522),
- ('Jessup', 'MD', ARRAY[20794], 39.1457, -76.7745),
- ('Tallulah', 'LA', ARRAY[71284], 32.4067, -91.1915),
- ('Fern Park', 'FL', ARRAY[32730], 28.6484, -81.3458),
- ('Orono', 'MN', ARRAY[55356, 55323], 44.9657, -93.5908),
- ('Westwego', 'LA', ARRAY[70096], 29.9058, -90.1434),
- ('Fair Lakes', 'VA', ARRAY[22033], 38.8530, -77.3885),
- ('Pike Creek', 'DE', ARRAY[19707, 19711], 39.7485, -75.6953),
- ('Bel Aire', 'KS', ARRAY[67226], 37.7749, -97.2457),
- ('Milton', 'WA', ARRAY[98354], 47.2522, -122.3156),
- ('Mahtomedi', 'MN', ARRAY[55115], 45.0619, -92.9660),
- ('Haledon', 'NJ', ARRAY[7538], 40.9363, -74.1887),
- ('Ashland', 'NJ', ARRAY[8034], 39.8782, -75.0085),
- ('McRae-Helena', 'GA', ARRAY[31055], 32.0635, -82.8968),
- ('Fishersville', 'VA', ARRAY[22939, 24401], 38.1005, -78.9687),
- ('Druid Hills', 'GA', ARRAY[30306], 33.7842, -84.3273),
- ('Fort Mitchell', 'KY', ARRAY[41017], 39.0459, -84.5563),
- ('Westlake Village', 'CA', ARRAY[91362], 34.1369, -118.8220),
- ('Kulpsville', 'PA', ARRAY[19446, 19443], 40.2440, -75.3407),
- ('Burton', 'SC', ARRAY[29906], 32.4233, -80.7454),
- ('Laurel Hill', 'VA', ARRAY[22199], 38.7026, -77.2422),
- ('Monona', 'WI', ARRAY[53713, 53708], 43.0540, -89.3334),
- ('Mayo', 'MD', ARRAY[21106], 38.9041, -76.5180),
- ('Pismo Beach', 'CA', ARRAY[93448], 35.1484, -120.6492),
- ('Milliken', 'CO', ARRAY[80543], 40.3115, -104.8561),
- ('Murphy', 'MO', ARRAY[63049], 38.4922, -90.4856),
- ('Kalifornsky', 'AK', ARRAY[99611, 99669], 60.4417, -151.1972),
- ('Leesville', 'LA', ARRAY[71496], 31.1397, -93.2741),
- ('Minnetrista', 'MN', ARRAY[55364, 55375, 55359], 44.9356, -93.7103),
- ('Poteau', 'OK', ARRAY[74953, 74940], 35.0430, -94.6357),
- ('Oak Hill', 'WV', ARRAY[25840, 25901], 37.9844, -81.1277),
- ('Monument', 'CO', ARRAY[80921], 39.0735, -104.8467),
- ('Alondra Park', 'CA', ARRAY[90260, 90506], 33.8885, -118.3350),
- ('Shorewood', 'MN', ARRAY[55364], 44.9033, -93.5903),
- ('Chester', 'IL', ARRAY[62259], 37.9199, -89.8259),
- ('Gilberts', 'IL', ARRAY[60142, 60136], 42.1096, -88.3716),
- ('Bargersville', 'IN', ARRAY[46106, 46143], 39.5412, -86.2004),
- ('Rockmart', 'GA', ARRAY[30154], 34.0103, -85.0441),
- ('South Cleveland', 'TN', ARRAY[37323], 35.1097, -84.9097),
- ('Helena Valley Southeast', 'MT', ARRAY[59602], 46.6175, -111.9186),
- ('Wyoming', 'MN', ARRAY[55092, 55013, 55025], 45.3365, -92.9766),
- ('Bloomingdale', 'NJ', ARRAY[7465], 41.0300, -74.3319),
- ('Conshohocken', 'PA', ARRAY[19429], 40.0772, -75.3035),
- ('Wading River', 'NY', ARRAY[11792], 40.9464, -72.8230),
- ('Chestnut Ridge', 'NY', ARRAY[10977], 41.0829, -74.0551),
- ('Sudden Valley', 'WA', ARRAY[98228], 48.7199, -122.3468),
- ('Ridgefield', 'CT', ARRAY[6879], 41.2712, -73.4953),
- ('Southwest Ranches', 'FL', ARRAY[33330, 33332], 26.0476, -80.3750),
- ('Quincy', 'FL', ARRAY[32353], 30.5659, -84.5857),
- ('Templeton', 'CA', ARRAY[93465], 35.5560, -120.7182),
- ('Hitchcock', 'TX', ARRAY[77563], 29.2945, -95.0250),
- ('Lake Shore', 'WA', ARRAY[98685], 45.6911, -122.6911),
- ('Camp Hill', 'PA', ARRAY[17001, 17089], 40.2423, -76.9274),
- ('Waller', 'WA', ARRAY[98371, 98443], 47.2035, -122.3699),
- ('Lincolnshire', 'IL', ARRAY[60045], 42.1957, -87.9182),
- ('Jersey Village', 'TX', ARRAY[77040], 29.8903, -95.5721),
- ('Centerville', 'GA', ARRAY[31093], 32.6342, -83.6853),
- ('Middletown', 'KY', ARRAY[40299, 40223], 38.2410, -85.5215),
- ('Tuskegee', 'AL', ARRAY[36083, 36803], 32.4395, -85.7139),
- ('Grand Blanc', 'MI', ARRAY[48480], 42.9258, -83.6181),
- ('Abingdon', 'VA', ARRAY[24211, 24212], 36.7089, -81.9713),
- ('Temple Hills', 'MD', ARRAY[20748, 20757], 38.8106, -76.9495),
- ('Boyes Hot Springs', 'CA', ARRAY[95416], 38.3126, -122.4888),
- ('Bridge City', 'TX', ARRAY[77630], 30.0298, -93.8406),
- ('DeFuniak Springs', 'FL', ARRAY[32435], 30.7123, -86.1208),
- ('Montrose', 'VA', ARRAY[23231], 37.5200, -77.3772),
- ('Port Jefferson Station', 'NY', ARRAY[11776], 40.9260, -73.0651),
- ('Withamsville', 'OH', ARRAY[45245], 39.0628, -84.2808),
- ('Pukalani', 'HI', ARRAY[96788], 20.8329, -156.3415),
- ('Waite Park', 'MN', ARRAY[56301, 56388], 45.5313, -94.2528),
- ('Park City', 'KS', ARRAY[67147], 37.8103, -97.3255),
- ('Round Lake Park', 'IL', ARRAY[60030], 42.3309, -88.0750),
- ('Rockwood', 'VA', ARRAY[23236], 37.4630, -77.5744),
- ('West Samoset', 'FL', ARRAY[34203], 27.4702, -82.5552),
- ('Oceano', 'CA', ARRAY[93475], 35.1019, -120.6090),
- ('Sebastopol', 'CA', ARRAY[95473], 38.4001, -122.8276),
- ('Half Moon', 'NC', ARRAY[28540], 34.8298, -77.4591),
- ('Meadow Lakes', 'AK', ARRAY[99654], 61.6380, -149.6080),
- ('Inwood', 'FL', ARRAY[33880], 28.0391, -81.7677),
- ('Windsor', 'WI', ARRAY[53590, 53571, 53532], 43.2406, -89.2952),
- ('Summit View', 'WA', ARRAY[98373], 47.1343, -122.3468),
- ('Colonie', 'NY', ARRAY[12288], 42.7199, -73.8333),
- ('Piñon Hills', 'CA', ARRAY[92372], 34.4438, -117.6214),
- ('Sappington', 'MO', ARRAY[63126], 38.5260, -90.3730),
- ('Harrison', 'TN', ARRAY[37341], 35.1276, -85.1464),
- ('Delafield', 'WI', ARRAY[53058, 53029], 43.0720, -88.3913),
- ('Pikeville', 'KY', ARRAY[41502], 37.4807, -82.5262),
- ('Fairfax', 'CA', ARRAY[94978], 37.9886, -122.5952),
- ('Laughlin', 'NV', ARRAY[89028], 35.1316, -114.6890),
- ('Purcell', 'OK', ARRAY[73080], 35.0180, -97.3747),
- ('West Slope', 'OR', ARRAY[97005, 97298], 45.4962, -122.7731),
- ('Citrus Hills', 'FL', ARRAY[34453, 34442], 28.8870, -82.4312),
- ('Silvis', 'IL', ARRAY[61239, 61282], 41.4976, -90.4101),
- ('Ojai', 'CA', ARRAY[93024], 34.4487, -119.2469),
- ('St. Gabriel', 'LA', ARRAY[70776, 70780], 30.2537, -91.1013),
- ('Florence', 'CO', ARRAY[81290], 38.3836, -105.1114),
- ('Old Town', 'ME', ARRAY[4489], 44.9491, -68.7249),
- ('Etowah', 'NC', ARRAY[28739], 35.3061, -82.5902),
- ('Hiawatha', 'IA', ARRAY[52233], 42.0547, -91.6911),
- ('Belen', 'NM', ARRAY[87031], 34.7115, -106.7985),
- ('Inverness', 'FL', ARRAY[34453, 34452], 28.8397, -82.3437),
- ('Woodlawn', 'MD', ARRAY[20737], 38.9505, -76.9000),
- ('Inverness', 'IL', ARRAY[60067], 42.1152, -88.1019),
- ('Montpelier', 'VT', ARRAY[5603, 5604, 5620, 5633], 44.2658, -72.5717),
- ('Pomona', 'NJ', ARRAY[8205], 39.4687, -74.5501),
- ('St. Joseph', 'MN', ARRAY[56301], 45.5611, -94.3081),
- ('Northridge', 'OH', ARRAY[45502], 39.9971, -83.7770),
- ('Gibsonville', 'NC', ARRAY[27249], 36.0991, -79.5417),
- ('Dade City', 'FL', ARRAY[33523, 33526], 28.3568, -82.1942),
- ('Greenville', 'NY', ARRAY[10530], 40.9981, -73.8194),
- ('Middleborough Center', 'MA', ARRAY[2344], 41.8945, -70.9260),
- ('Bryans Road', 'MD', ARRAY[20640, 20616], 38.6144, -77.0850),
- ('Meraux', 'LA', ARRAY[70092], 29.9284, -89.9179),
- ('Hardeeville', 'SC', ARRAY[29936], 32.2951, -81.0318),
- ('Wildwood', 'FL', ARRAY[34484, 34785], 28.8014, -82.0058),
- ('Pinehurst', 'MA', ARRAY[1866], 42.5334, -71.2340),
- ('Kenwood', 'OH', ARRAY[45243, 45236], 39.2067, -84.3746),
- ('Richland', 'MS', ARRAY[39218], 32.2309, -90.1592),
- ('Belle Isle', 'FL', ARRAY[32812], 28.4724, -81.3491),
- ('East Hills', 'NY', ARRAY[11576], 40.7958, -73.6292),
- ('Landen', 'OH', ARRAY[45039], 39.3153, -84.2770),
- ('Riverdale Park', 'MD', ARRAY[20738], 38.9642, -76.9266),
- ('Gunnison', 'CO', ARRAY[81230], 38.5455, -106.9225),
- ('Hornsby Bend', 'TX', ARRAY[78724], 30.2450, -97.5833),
- ('South Monrovia Island', 'CA', ARRAY[91010], 34.1234, -117.9958),
- ('Morrow', 'GA', ARRAY[30287], 33.5816, -84.3392),
- ('Pacific', 'WA', ARRAY[98047], 47.2610, -122.2507),
- ('Commerce', 'GA', ARRAY[30599], 34.2133, -83.4730),
- ('Austell', 'GA', ARRAY[30106, 30168, 30111], 33.8200, -84.6450),
- ('Glenolden', 'PA', ARRAY[19039], 39.8996, -75.2920),
- ('Gonzales', 'TX', ARRAY[78269], 29.5126, -97.4472),
- ('Calverton', 'NY', ARRAY[11949], 40.9163, -72.7645),
- ('Carneys Point', 'NJ', ARRAY[8069], 39.7075, -75.4673),
- ('Yardville', 'NJ', ARRAY[8691], 40.1849, -74.6603),
- ('De Soto', 'MO', ARRAY[63024], 38.1410, -90.5609),
- ('Galliano', 'LA', ARRAY[70345], 29.4470, -90.3096),
- ('Plymouth', 'MA', ARRAY[2362], 41.9539, -70.6693),
- ('Pinson', 'AL', ARRAY[35126], 33.7057, -86.6674),
- ('Selma', 'NC', ARRAY[27577], 35.5436, -78.2954),
- ('Marble Falls', 'TX', ARRAY[78654], 30.5649, -98.2768),
- ('Fort Myers Beach', 'FL', ARRAY[33932], 26.4324, -81.9168),
- ('Ladera Heights', 'CA', ARRAY[90230, 90056], 33.9972, -118.3740),
- ('Ben Lomond', 'CA', ARRAY[95018], 37.0782, -122.0882),
- ('Fort Pierce North', 'FL', ARRAY[34946], 27.4736, -80.3594),
- ('Sausalito', 'CA', ARRAY[94966], 37.8580, -122.4932),
- ('Highland Heights', 'KY', ARRAY[41099], 39.0355, -84.4567),
- ('Lemoore Station', 'CA', ARRAY[93246], 36.2633, -119.9049),
- ('Sandston', 'VA', ARRAY[23250, 23231], 37.5120, -77.3149),
- ('Oak Ridge', 'NC', ARRAY[27310], 36.1740, -79.9916),
- ('Fort Payne', 'AL', ARRAY[35968], 34.4557, -85.6965),
- ('Gateway', 'AK', ARRAY[99654], 61.5737, -149.2389),
- ('Marksville', 'LA', ARRAY[71350], 31.1247, -92.0652),
- ('Truth or Consequences', 'NM', ARRAY[87935], 33.1864, -107.2589),
- ('Collinsville', 'VA', ARRAY[24112], 36.7215, -79.9121),
- ('Willis', 'TX', ARRAY[77318, 77305], 30.4314, -95.4832),
- ('East End', 'AR', ARRAY[72206, 72103], 34.5554, -92.3261),
- ('San Martin', 'CA', ARRAY[95020], 37.0829, -121.5963),
- ('Westmere', 'NY', ARRAY[12214, 12227], 42.6883, -73.8744),
- ('Tappan', 'NY', ARRAY[10962, 10983], 41.0269, -73.9520),
- ('Sedona', 'AZ', ARRAY[86339], 34.8574, -111.7951),
- ('Leitchfield', 'KY', ARRAY[42755], 37.4862, -86.2857),
- ('Catoosa', 'OK', ARRAY[74116], 36.1832, -95.7662),
- ('Bremen', 'GA', ARRAY[30110], 33.7085, -85.1495),
- ('Prairie View', 'TX', ARRAY[77445], 30.0850, -95.9897),
- ('Ocean City', 'MD', ARRAY[21843], 38.3998, -75.0715),
- ('Barberton', 'WA', ARRAY[98686, 98666, 98668], 45.7136, -122.6115),
- ('Madison Park', 'NJ', ARRAY[8859, 8857], 40.4461, -74.2959),
- ('Southport', 'NY', ARRAY[14904], 42.0640, -76.8185),
- ('Lower Allen', 'PA', ARRAY[17011], 40.2261, -76.9017),
- ('Fort Meade', 'FL', ARRAY[33841], 27.7645, -81.8058),
- ('Willow Oak', 'FL', ARRAY[33811], 27.9216, -82.0244),
- ('Kentfield', 'CA', ARRAY[94914, 94974], 37.9481, -122.5496),
- ('Mount Ivy', 'NY', ARRAY[10970], 41.1926, -74.0297),
- ('Page', 'AZ', ARRAY[86036], 36.9426, -111.5071),
- ('Viola', 'NY', ARRAY[10901], 41.1287, -74.0855),
- ('Mira Monte', 'CA', ARRAY[93022], 34.4284, -119.2853),
- ('Pollock Pines', 'CA', ARRAY[95709], 38.7564, -120.5904),
- ('Laurence Harbor', 'NJ', ARRAY[7721, 7735], 40.4489, -74.2494),
- ('Clover Creek', 'WA', ARRAY[98446], 47.1404, -122.3827),
- ('Gulf Breeze', 'FL', ARRAY[32562], 30.3685, -87.1769),
- ('Union', 'OH', ARRAY[45377], 39.9090, -84.2896),
- ('University Park', 'IL', ARRAY[60449], 41.4461, -87.7154),
- ('Chestertown', 'MD', ARRAY[21690], 39.2182, -76.0714),
- ('Belle Haven', 'VA', ARRAY[22307], 38.7775, -77.0574),
- ('Beacon Square', 'FL', ARRAY[34652], 28.2118, -82.7504),
- ('Harrisville', 'UT', ARRAY[84414], 41.2853, -111.9859),
- ('Latimer', 'MS', ARRAY[39565], 30.4972, -88.8607),
- ('North Branch', 'MN', ARRAY[55032], 45.5137, -92.9601),
- ('Lake Mathews', 'CA', ARRAY[92504], 33.8250, -117.3683),
- ('Moapa Valley', 'NV', ARRAY[89021], 36.6078, -114.4566),
- ('Bee Cave', 'TX', ARRAY[78736], 30.3084, -97.9629),
- ('Lovejoy', 'GA', ARRAY[30250], 33.4426, -84.3176),
- ('Huntertown', 'IN', ARRAY[46845, 46818], 41.2155, -85.1715),
- ('River Park', 'FL', ARRAY[34952], 27.3214, -80.3307),
- ('Moores Mill', 'AL', ARRAY[35811, 35759], 34.8491, -86.5222),
- ('St. Francis', 'MN', ARRAY[55070], 45.3991, -93.3902),
- ('Kimberly', 'WI', ARRAY[54915], 44.2670, -88.3377),
- ('Perry', 'FL', ARRAY[32348, 32357], 30.1090, -83.5821),
- ('Kingston', 'RI', ARRAY[2881], 41.4738, -71.5236),
- ('Lincoln', 'AL', ARRAY[35096], 33.5935, -86.1371),
- ('Guánica', 'PR', ARRAY[653], 17.9698, -66.9309),
- ('Brattleboro', 'VT', ARRAY[5303, 5304], 42.8588, -72.5628),
- ('Pembroke Park', 'FL', ARRAY[33009], 25.9852, -80.1777),
- ('Lake Hallie', 'WI', ARRAY[54703], 44.8921, -91.4199),
- ('Ellettsville', 'IN', ARRAY[47404], 39.2322, -86.6232),
- ('Litchfield', 'IL', ARRAY[62015], 39.1959, -89.6295),
- ('Homeacre-Lyndora', 'PA', ARRAY[16045], 40.8721, -79.9211),
- ('Medina', 'MN', ARRAY[55356, 55359], 45.0326, -93.5834),
- ('Dahlonega', 'GA', ARRAY[30597], 34.5309, -83.9804),
- ('Dayton', 'MN', ARRAY[55327], 45.1906, -93.4758),
- ('Savage', 'MD', ARRAY[20794], 39.1485, -76.8228),
- ('West Point', 'NY', ARRAY[10928, 10997], 41.3642, -74.0118),
- ('Lauderdale-by-the-Sea', 'FL', ARRAY[33062], 26.1990, -80.0972),
- ('Groesbeck', 'OH', ARRAY[45251, 45239], 39.2292, -84.5964),
- ('Cherry Hills Village', 'CO', ARRAY[80111], 39.6375, -104.9481),
- ('Barrington', 'NJ', ARRAY[8033], 39.8689, -75.0514),
- ('Tecumseh', 'OK', ARRAY[74873], 35.2639, -96.9338),
- ('Air Force Academy', 'CO', ARRAY[80841], 38.9942, -104.8639),
- ('Folcroft', 'PA', ARRAY[19079], 39.8891, -75.2770),
- ('North Syracuse', 'NY', ARRAY[13220, 13225, 13251], 43.1339, -76.1306),
- ('Brewton', 'AL', ARRAY[36427], 31.1111, -87.0737),
- ('Maple Glen', 'PA', ARRAY[19002], 40.1778, -75.1793),
- ('Meridianville', 'AL', ARRAY[35750, 35759], 34.8729, -86.5722),
- ('Trinity', 'NC', ARRAY[27263, 27360], 35.8756, -80.0093),
- ('Forest Glen', 'MD', ARRAY[20902], 39.0191, -77.0445),
- ('Notre Dame', 'IN', ARRAY[46637], 41.7014, -86.2378),
- ('Tanglewilde', 'WA', ARRAY[98516], 47.0512, -122.7810),
- ('Orlovista', 'FL', ARRAY[32835, 32811], 28.5441, -81.4629),
- ('Mont Belvieu', 'TX', ARRAY[77535, 77580], 29.8524, -94.8784),
- ('Enola', 'PA', ARRAY[17025], 40.2908, -76.9348),
- ('Keene', 'TX', ARRAY[76009, 76031], 32.3955, -97.3226),
- ('Thompson''s Station', 'TN', ARRAY[37179], 35.8090, -86.8994),
- ('Stickney', 'IL', ARRAY[60804], 41.8183, -87.7730),
- ('Rossford', 'OH', ARRAY[43460], 41.5832, -83.5692),
- ('Cumming', 'GA', ARRAY[30041], 34.2064, -84.1337),
- ('Plaquemine', 'LA', ARRAY[70765], 30.2834, -91.2429),
- ('Hapeville', 'GA', ARRAY[30394], 33.6609, -84.4093),
- ('Valley Falls', 'SC', ARRAY[29316], 35.0073, -81.9692),
- ('Fairview', 'GA', ARRAY[30741], 34.9296, -85.2940),
- ('Otis Orchards-East Farms', 'WA', ARRAY[99027], 47.7030, -117.0854),
- ('Avon', 'CO', ARRAY[81655], 39.6445, -106.5133),
- ('Contra Costa Centre', 'CA', ARRAY[94598], 37.9261, -122.0540),
- ('Champion Heights', 'OH', ARRAY[44481], 41.3031, -80.8514),
- ('Mulvane', 'KS', ARRAY[67120], 37.4788, -97.2724),
- ('Lynchburg', 'TN', ARRAY[37388, 37359, 37352], 35.2846, -86.3587),
- ('East Shoreham', 'NY', ARRAY[11786], 40.9460, -72.8811),
- ('Hewlett', 'NY', ARRAY[11557], 40.6422, -73.6942),
- ('Cheshire Village', 'CT', ARRAY[6408, 6411], 41.5026, -72.8993),
- ('Theodore', 'AL', ARRAY[36582], 30.5408, -88.1884),
- ('Irvington', 'NY', ARRAY[10533], 41.0349, -73.8661),
- ('Prestonsburg', 'KY', ARRAY[41602], 37.6816, -82.7662),
- ('Edgemoor', 'DE', ARRAY[19802], 39.7551, -75.5070),
- ('Moraine', 'OH', ARRAY[45439, 45418], 39.6983, -84.2459),
- ('Bridgeport', 'MI', ARRAY[48601], 43.3706, -83.8828),
- ('Vine Grove', 'KY', ARRAY[40160], 37.8133, -85.9828),
- ('Liberty', 'TX', ARRAY[77535], 30.0379, -94.7880),
- ('Skowhegan', 'ME', ARRAY[94976], 44.7735, -69.7124),
- ('Lake Murray of Richland', 'SC', ARRAY[29063, 29002], 34.1209, -81.2653),
- ('Darnestown', 'MD', ARRAY[20874], 39.0960, -77.3033),
- ('Garrett', 'IN', ARRAY[46706], 41.3526, -85.1238),
- ('Schriever', 'LA', ARRAY[70395], 29.7334, -90.8310),
- ('Andalusia', 'AL', ARRAY[36421], 31.3101, -86.4781),
- ('Mila Doce', 'TX', ARRAY[78596], 26.2230, -97.9601),
- ('Rockford', 'MI', ARRAY[49351], 43.1266, -85.5582),
- ('Rhome', 'TX', ARRAY[76234], 33.0647, -97.4779),
- ('Ellenville', 'NY', ARRAY[12428], 41.7009, -74.3609),
- ('International Falls', 'MN', ARRAY[56679], 48.5884, -93.4083),
- ('Jasper', 'GA', ARRAY[30175], 34.4710, -84.4496),
- ('Nitro', 'WV', ARRAY[25064], 38.4119, -81.8194),
- ('East Glenville', 'NY', ARRAY[12302], 42.8614, -73.9206),
- ('South Gate Ridge', 'FL', ARRAY[34233], 27.2856, -82.4970),
- ('Bensley', 'VA', ARRAY[23237], 37.4470, -77.4420),
- ('Lionville', 'PA', ARRAY[19480], 40.0524, -75.6440),
- ('Barnhart', 'MO', ARRAY[63057], 38.3360, -90.4046),
- ('Islamorada, Village of Islands', 'FL', ARRAY[33070], 24.9408, -80.6097),
- ('Lakeview', 'NY', ARRAY[11570], 40.6775, -73.6493),
- ('Mascotte', 'FL', ARRAY[34753], 28.6110, -81.9107),
- ('South Run', 'VA', ARRAY[22153], 38.7467, -77.2754),
- ('Waveland', 'MS', ARRAY[39520], 30.2930, -89.3904),
- ('Hingham', 'MA', ARRAY[2044], 42.2366, -70.8879),
- ('Stone Mountain', 'GA', ARRAY[30086], 33.8034, -84.1724),
- ('California', 'PA', ARRAY[15419, 15417], 40.0692, -79.9152),
- ('Lecanto', 'FL', ARRAY[34460], 28.8359, -82.4880),
- ('Corcoran', 'MN', ARRAY[55374, 55357], 45.1089, -93.5837),
- ('Holly Springs', 'MS', ARRAY[38634], 34.7768, -89.4466),
- ('Orange Beach', 'AL', ARRAY[36530, 36547], 30.2941, -87.5851),
- ('Hillandale', 'MD', ARRAY[20903], 39.0254, -76.9751),
- ('Edinboro', 'PA', ARRAY[16444], 41.8762, -80.1246),
- ('Pea Ridge', 'WV', ARRAY[25504], 38.4154, -82.3188),
- ('Wescosville', 'PA', ARRAY[18103, 18062], 40.5617, -75.5489),
- ('Blue Bell', 'PA', ARRAY[19424], 40.1474, -75.2687),
- ('Blakely', 'PA', ARRAY[18452], 41.4859, -75.6012),
- ('Covedale', 'OH', ARRAY[45238], 39.1267, -84.6370),
- ('Fishhook', 'AK', ARRAY[99654], 61.7110, -149.2657),
- ('Heathcote', 'NJ', ARRAY[8540], 40.3908, -74.5756),
- ('Keyes', 'CA', ARRAY[95326, 95307], 37.5618, -120.9088),
- ('Oyster Bay', 'NY', ARRAY[11732], 40.8661, -73.5325),
- ('University at Buffalo', 'NY', ARRAY[14228, 14260], 43.0025, -78.7887),
- ('Eagar', 'AZ', ARRAY[85925], 34.1058, -109.2956),
- ('Hebron', 'KY', ARRAY[41005, 41021], 39.0626, -84.7090),
- ('Pinehurst', 'TX', ARRAY[77362], 30.1889, -95.7017),
- ('Homeland Park', 'SC', ARRAY[29626], 34.4644, -82.6593),
- ('Cocoa West', 'FL', ARRAY[32926], 28.3595, -80.7712),
- ('Gardnerville', 'NV', ARRAY[89410], 38.9390, -119.7369),
- ('Heber Springs', 'AR', ARRAY[72545], 35.5003, -92.0332),
- ('Ashton-Sandy Spring', 'MD', ARRAY[20860, 20833, 20905], 39.1515, -77.0065),
- ('Dunlap', 'IN', ARRAY[46516], 41.6346, -85.9235),
- ('Los Ranchos de Albuquerque', 'NM', ARRAY[87107], 35.1625, -106.6481),
- ('Edgewood', 'NM', ARRAY[87015], 35.1318, -106.2151),
- ('Scenic Oaks', 'TX', ARRAY[78006], 29.7038, -98.6713),
- ('Alpine', 'TX', ARRAY[79832], 30.3640, -103.6650),
- ('Willard', 'OH', ARRAY[44888], 41.0518, -82.7232),
- ('Lee Acres', 'NM', ARRAY[87413], 36.7103, -108.0725),
- ('Ontario', 'OH', ARRAY[44903, 44096, 44862], 40.7710, -82.6105),
- ('North Hobbs', 'NM', ARRAY[88240], 32.7731, -103.1250),
- ('Anaconda', 'MT', ARRAY[59711, 59762], 46.0607, -113.0679),
- ('Country Homes', 'WA', ARRAY[99218, 99251], 47.7478, -117.4196),
- ('Indian Hills', 'NV', ARRAY[89423], 39.0894, -119.7977),
- ('Hidden Valley Lake', 'CA', ARRAY[95467], 38.8003, -122.5505),
- ('Dacono', 'CO', ARRAY[80603, 80514], 40.0620, -104.9484),
- ('Cumberland', 'IN', ARRAY[46140], 39.7844, -85.9458),
- ('Davenport', 'FL', ARRAY[33837, 33836], 28.1588, -81.6084),
- ('Conley', 'GA', ARRAY[30297, 30294], 33.6398, -84.3376),
- ('Eldorado at Santa Fe', 'NM', ARRAY[87540], 35.5273, -105.9340),
- ('Wheelersburg', 'OH', ARRAY[45694], 38.7383, -82.8421),
- ('District Heights', 'MD', ARRAY[20753], 38.8588, -76.8885),
- ('Northern Cambria', 'PA', ARRAY[15775], 40.6561, -78.7784),
- ('North Hills', 'NY', ARRAY[11576], 40.7765, -73.6778),
- ('Newport', 'AR', ARRAY[72043], 35.6234, -91.2322),
- ('East Alton', 'IL', ARRAY[62018, 62002], 38.8840, -90.1073),
- ('Progreso', 'TX', ARRAY[78596], 26.0962, -97.9566),
- ('Tracyton', 'WA', ARRAY[98310], 47.6095, -122.6533),
- ('Wesley Hills', 'NY', ARRAY[10901, 10977], 41.1579, -74.0768),
- ('Taylor', 'PA', ARRAY[18518], 41.3957, -75.7147),
- ('West Modesto', 'CA', ARRAY[95351], 37.6180, -121.0343),
- ('Clanton', 'AL', ARRAY[35046, 36045], 32.8440, -86.6230),
- ('Brookhaven', 'WV', ARRAY[26531], 39.6062, -79.8812),
- ('Gray', 'LA', ARRAY[70360, 70364], 29.6776, -90.7833),
- ('Raleigh Hills', 'OR', ARRAY[97223], 45.4852, -122.7567),
- ('Willard', 'MO', ARRAY[65803], 37.2929, -93.4171),
- ('Los Chaves', 'NM', ARRAY[87031], 34.7332, -106.7631),
- ('Stratmoor', 'CO', ARRAY[80911], 38.7732, -104.7787),
- ('St. Johnsbury', 'VT', ARRAY[5863], 44.4287, -72.0116),
- ('Crosspointe', 'VA', ARRAY[22079], 38.7253, -77.2638),
- ('Windcrest', 'TX', ARRAY[78218], 29.5149, -98.3818),
- ('Elsmere', 'DE', ARRAY[19805], 39.7385, -75.5946),
- ('Hutchins', 'TX', ARRAY[75241], 32.6421, -96.7093),
- ('Posen', 'IL', ARRAY[60469], 41.6291, -87.6858),
- ('Paoli', 'PA', ARRAY[19301], 40.0420, -75.4912),
- ('Atmore', 'AL', ARRAY[36503], 31.0927, -87.4763),
- ('Durham', 'CA', ARRAY[95928, 95938, 95958], 39.6232, -121.7875),
- ('Mount Arlington', 'NJ', ARRAY[7856], 40.9190, -74.6390),
- ('Shady Side', 'MD', ARRAY[20764, 20778], 38.8285, -76.5211),
- ('Cave Creek', 'AZ', ARRAY[85331], 33.8513, -111.9801),
- ('Luling', 'TX', ARRAY[78468], 29.6814, -97.6468),
- ('Naval Academy', 'MD', ARRAY[21412], 38.9859, -76.4880),
- ('Moosic', 'PA', ARRAY[18507], 41.3584, -75.7027),
- ('Oreland', 'PA', ARRAY[19075], 40.1148, -75.1801),
- ('Mayflower Village', 'CA', ARRAY[91006], 34.1160, -118.0096),
- ('El Granada', 'CA', ARRAY[94018], 37.5134, -122.4660),
- ('Volo', 'IL', ARRAY[60073, 60041], 42.3298, -88.1599),
- ('Fellsmere', 'FL', ARRAY[32966], 27.7241, -80.5975),
- ('Aptos', 'CA', ARRAY[95001], 36.9912, -121.8934),
- ('Mount Zion', 'IL', ARRAY[62549], 39.7794, -88.8834),
- ('Marianna', 'FL', ARRAY[32447, 32448], 30.7943, -85.2260),
- ('The Village of Indian Hill', 'OH', ARRAY[45243], 39.1916, -84.3344),
- ('Palmview', 'TX', ARRAY[78572], 26.2303, -98.3791),
- ('Sidney', 'NE', ARRAY[69160], 41.1340, -102.9681),
- ('Dickson City', 'PA', ARRAY[18519], 41.4684, -75.6358),
- ('Fort Wright', 'KY', ARRAY[41015, 41017], 39.0462, -84.5362),
- ('Warrenton', 'OR', ARRAY[97121], 46.1685, -123.9302),
- ('Oceanport', 'NJ', ARRAY[7757], 40.3160, -74.0205),
- ('Douglass Hills', 'KY', ARRAY[40223], 38.2366, -85.5499),
- ('North Fort Lewis', 'WA', ARRAY[98493], 47.1220, -122.5966),
- ('Demopolis', 'AL', ARRAY[36742], 32.4980, -87.8298),
- ('James City', 'NC', ARRAY[28562], 35.0592, -77.0200),
- ('Media', 'PA', ARRAY[19091], 39.9198, -75.3888),
- ('Forestbrook', 'SC', ARRAY[29579], 33.7243, -78.9678),
- ('Pecan Acres', 'TX', ARRAY[76179], 32.9703, -97.4727),
- ('Wailea', 'HI', ARRAY[96753], 20.6873, -156.4291),
- ('Gardiner', 'ME', ARRAY[4359], 44.1910, -69.7921),
- ('Bright', 'IN', ARRAY[47060], 39.2254, -84.8613),
- ('Pontoon Beach', 'IL', ARRAY[62040, 62234], 38.7208, -90.0609),
- ('Groveport', 'OH', ARRAY[43195, 43199], 39.8585, -82.8978),
- ('Salton City', 'CA', ARRAY[92274], 33.2994, -115.9609),
- ('Lake Delton', 'WI', ARRAY[53965, 53940], 43.5932, -89.7842),
- ('Cottleville', 'MO', ARRAY[63304, 63338], 38.7513, -90.6582),
- ('Blaine', 'WA', ARRAY[98231], 48.9839, -122.7414),
- ('Semmes', 'AL', ARRAY[36575, 36663], 30.7941, -88.2358),
- ('Seminole', 'OK', ARRAY[74884, 74818], 35.2346, -96.6500),
- ('Frankenmuth', 'MI', ARRAY[48787], 43.3321, -83.7395),
- ('Belmar', 'NJ', ARRAY[7715], 40.1798, -74.0255),
- ('Palermo', 'CA', ARRAY[95965, 95966], 39.4313, -121.5225),
- ('Old Fig Garden', 'CA', ARRAY[93705], 36.7989, -119.8051),
- ('Falcon Heights', 'MN', ARRAY[55108], 44.9899, -93.1770),
- ('Elmwood', 'LA', ARRAY[70123], 29.9555, -90.1880),
- ('Old Bethpage', 'NY', ARRAY[11735], 40.7557, -73.4544),
- ('Massanetta Springs', 'VA', ARRAY[22846], 38.3899, -78.8340),
- ('Baxley', 'GA', ARRAY[31515], 31.7643, -82.3508),
- ('Swartz Creek', 'MI', ARRAY[48473], 42.9626, -83.8260),
- ('Stokesdale', 'NC', ARRAY[27284], 36.2318, -79.9834),
- ('Scituate', 'MA', ARRAY[2040], 42.1867, -70.7355),
- ('Severance', 'CO', ARRAY[80550, 80615, 80610], 40.5270, -104.8642),
- ('Peculiar', 'MO', ARRAY[64078], 38.7306, -94.4736),
- ('Rincon Valley', 'AZ', ARRAY[85641], 32.1101, -110.6889),
- ('Buckner', 'KY', ARRAY[40014, 40010], 38.3867, -85.4503),
- ('Jim Thorpe', 'PA', ARRAY[18235], 40.8712, -75.7433),
- ('Carlisle', 'OH', ARRAY[45005], 39.5807, -84.3201),
- ('Arlington Heights', 'PA', ARRAY[18301], 41.0039, -75.2116),
- ('Hanamaulu', 'HI', ARRAY[96715], 21.9954, -159.3493),
- ('Basehor', 'KS', ARRAY[66007], 39.1332, -94.9333),
- ('Kensington', 'CA', ARRAY[94707], 37.9084, -122.2805),
- ('Kenai', 'AK', ARRAY[99511], 60.5619, -151.1985),
- ('Coal City', 'IL', ARRAY[60416], 41.2772, -88.2803),
- ('Valparaiso', 'FL', ARRAY[32542], 30.4926, -86.5079),
- ('Pinardville', 'NH', ARRAY[3102], 43.0010, -71.5171),
- ('Minot AFB', 'ND', ARRAY[58704, 58703], 48.4209, -101.3381),
- ('Jamul', 'CA', ARRAY[91935], 32.7184, -116.8709),
- ('Mount Carmel', 'OH', ARRAY[45245], 39.0978, -84.2995),
- ('Sunset', 'UT', ARRAY[84056], 41.1392, -112.0285),
- ('Ward', 'AR', ARRAY[72176], 35.0117, -91.9577),
- ('De Soto', 'KS', ARRAY[66019], 38.9686, -94.9548),
- ('West Hills', 'NY', ARRAY[11747], 40.8198, -73.4339),
- ('Exton', 'PA', ARRAY[19353], 40.0307, -75.6303),
- ('Sterling', 'AK', ARRAY[99669], 60.5405, -150.8089),
- ('Cavalero', 'WA', ARRAY[98205], 47.9846, -122.0743),
- ('Batesburg-Leesville', 'SC', ARRAY[29006], 33.9125, -81.5313),
- ('Brent', 'AL', ARRAY[35034], 32.9421, -87.1753),
- ('Bulverde', 'TX', ARRAY[78070], 29.7744, -98.4364),
- ('Williamson', 'AZ', ARRAY[86305], 34.7082, -112.5342),
- ('Kings Point', 'NY', ARRAY[11023], 40.8162, -73.7407),
- ('Myrtletown', 'CA', ARRAY[95501], 40.7888, -124.1286),
- ('Zephyrhills West', 'FL', ARRAY[33541], 28.2311, -82.2052),
- ('Cave Springs', 'AR', ARRAY[72718], 36.2701, -94.2225),
- ('Samsula-Spruce Creek', 'FL', ARRAY[32168], 29.0484, -81.0628),
- ('Rothschild', 'WI', ARRAY[54476], 44.8761, -89.6173),
- ('Grandwood Park', 'IL', ARRAY[60046], 42.3929, -87.9871),
- ('Albertson', 'NY', ARRAY[11577], 40.7715, -73.6482),
- ('McGuire AFB', 'NJ', ARRAY[8562], 40.0285, -74.5883),
- ('Walkertown', 'NC', ARRAY[27101, 27051], 36.1578, -80.1642),
- ('Ranson', 'WV', ARRAY[25430], 39.3250, -77.8666),
- ('Wrightsboro', 'NC', ARRAY[28405, 28429], 34.2895, -77.9217),
- ('Hollywood', 'SC', ARRAY[29449], 32.7523, -80.2106),
- ('Gilmer', 'TX', ARRAY[75644], 32.7317, -94.9460),
- ('Quantico Base', 'VA', ARRAY[22135], 38.5228, -77.3187),
- ('Big Flats', 'NY', ARRAY[14814, 14903], 42.1621, -76.9015),
- ('Lake Montezuma', 'AZ', ARRAY[86342], 34.6414, -111.7960),
- ('Roseburg North', 'OR', ARRAY[97495], 43.2653, -123.3025),
- ('Gardnertown', 'NY', ARRAY[12551, 12552], 41.5328, -74.0594),
- ('Obetz', 'OH', ARRAY[43137, 43207], 39.8671, -82.9451),
- ('Sawmills', 'NC', ARRAY[28638], 35.8162, -81.4779),
- ('Thiells', 'NY', ARRAY[10923], 41.2067, -74.0122),
- ('Parker', 'TX', ARRAY[75002], 33.0570, -96.6248),
- ('Cold Spring Harbor', 'NY', ARRAY[11724], 40.8608, -73.4488),
- ('Zephyrhills South', 'FL', ARRAY[33541], 28.2152, -82.1886),
- ('Three Points', 'AZ', ARRAY[85736, 85732], 32.0596, -111.2866),
- ('Ettrick', 'VA', ARRAY[23806, 23834], 37.2435, -77.4287),
- ('Erwin', 'NC', ARRAY[28334], 35.3226, -78.6734),
- ('Grambling', 'LA', ARRAY[71270], 32.5276, -92.7124),
- ('Bristol', 'WI', ARRAY[53104, 53194], 42.5378, -88.0149),
- ('Red Oak', 'IA', ARRAY[51591], 41.0141, -95.2248),
- ('Margaret', 'AL', ARRAY[35120], 33.6735, -86.4680),
- ('Lone Grove', 'OK', ARRAY[73401], 34.1809, -97.2559),
- ('Utica', 'MI', ARRAY[48317, 48318], 42.6290, -83.0218),
- ('Fox Chapel', 'PA', ARRAY[15238], 40.5247, -79.8898),
- ('Midway North', 'TX', ARRAY[78596], 26.1872, -98.0188),
- ('Offutt AFB', 'NE', ARRAY[68123], 41.1207, -95.9209),
- ('Glencoe', 'AL', ARRAY[35905], 33.9449, -85.9319),
- ('Bay Hill', 'FL', ARRAY[32819], 28.4558, -81.5122),
- ('Munroe Falls', 'OH', ARRAY[44262], 41.1386, -81.4344),
- ('Canutillo', 'TX', ARRAY[79835], 31.9185, -106.6006),
- ('Garnet', 'CA', ARRAY[92241], 33.9179, -116.4796),
- ('Carver', 'MN', ARRAY[55318], 44.7600, -93.6305),
- ('Dundee', 'FL', ARRAY[33877, 33838, 33844], 28.0115, -81.5995),
- ('East Flat Rock', 'NC', ARRAY[28726, 28731], 35.2802, -82.4171),
- ('Barling', 'AR', ARRAY[72923], 35.3284, -94.2792),
- ('Gates', 'NY', ARRAY[14624], 43.1569, -77.6930),
- ('Citrus Park', 'AZ', ARRAY[85340], 33.5304, -112.4440),
- ('Olyphant', 'PA', ARRAY[18512, 18448], 41.4507, -75.5753),
- ('Midfield', 'AL', ARRAY[35228], 33.4552, -86.9226),
- ('Timnath', 'CO', ARRAY[80528, 80524, 80525], 40.5343, -104.9620),
- ('Dellwood', 'MO', ARRAY[63135], 38.7564, -90.2767),
- ('Highgrove', 'CA', ARRAY[92324, 92507], 34.0106, -117.3098),
- ('Loughman', 'FL', ARRAY[33837], 28.2381, -81.5685),
- ('Huxley', 'IA', ARRAY[50124], 41.8963, -93.5914),
- ('Harrah', 'OK', ARRAY[73045], 35.4779, -97.1857),
- ('Marshfield', 'MA', ARRAY[2065], 42.0939, -70.7049),
- ('White Hall', 'AR', ARRAY[71612], 34.2737, -92.1005),
- ('Jonesboro', 'GA', ARRAY[30237], 33.5212, -84.3541),
- ('Parker', 'AZ', ARRAY[85346], 34.0286, -114.2224),
- ('Prairie Grove', 'AR', ARRAY[72730], 35.9858, -94.3048),
- ('Eagleville', 'PA', ARRAY[19408], 40.1604, -75.4090),
- ('Maize', 'KS', ARRAY[67223], 37.7748, -97.4620),
- ('Pleasant Garden', 'NC', ARRAY[27313], 35.9595, -79.7599),
- ('Long View', 'NC', ARRAY[28602], 35.7217, -81.3858),
- ('Royal Pines', 'NC', ARRAY[28704], 35.4783, -82.5038),
- ('Midway', 'NC', ARRAY[27107], 35.9751, -80.2204),
- ('Eastwood', 'LA', ARRAY[71067], 32.5606, -93.5625),
- ('Deale', 'MD', ARRAY[20733, 20779], 38.7910, -76.5469),
- ('Sugarcreek', 'PA', ARRAY[16323, 16343], 41.4380, -79.8183),
- ('Winona Lake', 'IN', ARRAY[46590], 41.2166, -85.8106),
- ('Centreville', 'IL', ARRAY[62205, 62203], 38.5798, -90.1039),
- ('Sawgrass', 'FL', ARRAY[32004], 30.1900, -81.3704),
- ('Flower Hill', 'NY', ARRAY[11576, 11050], 40.8075, -73.6755),
- ('Desloge', 'MO', ARRAY[63601], 37.8751, -90.5192),
- ('Miami Heights', 'OH', ARRAY[45248], 39.1687, -84.7152),
- ('Shenandoah', 'IA', ARRAY[51603], 40.7583, -95.3720),
- ('Vamo', 'FL', ARRAY[34238, 34229], 27.2254, -82.4944),
- ('East Harwich', 'MA', ARRAY[2661], 41.7081, -70.0339),
- ('Highland', 'IN', ARRAY[47711], 38.0474, -87.5616),
- ('Highland Lakes', 'NJ', ARRAY[7422], 41.1716, -74.4643),
- ('Childersburg', 'AL', ARRAY[35014], 33.2961, -86.3457),
- ('Green Tree', 'PA', ARRAY[15220, 15242, 15244, 15283], 40.4170, -80.0544),
- ('Rockford', 'MN', ARRAY[55373], 45.0920, -93.7453),
- ('West Milton', 'OH', ARRAY[45383], 39.9585, -84.3262),
- ('Pascoag', 'RI', ARRAY[2824], 41.9518, -71.7041),
- ('Hartsdale', 'NY', ARRAY[10530], 41.0153, -73.8036),
- ('New Burlington', 'OH', ARRAY[45231], 39.2624, -84.5520),
- ('Whitfield', 'PA', ARRAY[19608, 19610], 40.3358, -76.0048),
- ('Guerneville', 'CA', ARRAY[95471], 38.5137, -122.9894),
- ('West Sayville', 'NY', ARRAY[11796], 40.7294, -73.1050),
- ('Bethel', 'AK', ARRAY[99545], 60.7928, -161.7917),
- ('Magnolia', 'TX', ARRAY[77355], 30.2117, -95.7419),
- ('West Jefferson', 'OH', ARRAY[43162], 39.9481, -83.2983),
- ('Hyde Park', 'UT', ARRAY[84335], 41.8008, -111.8119),
- ('Santa Venetia', 'CA', ARRAY[94903], 38.0055, -122.5032),
- ('Vandercook Lake', 'MI', ARRAY[49203], 42.1916, -84.3854),
- ('Clifton Forge', 'VA', ARRAY[24474], 37.8232, -79.8250),
- ('Potosi', 'MO', ARRAY[63660], 37.9337, -90.7750),
- ('Dodgeville', 'WI', ARRAY[53595], 42.9660, -90.1297),
- ('Bloomfield', 'WI', ARRAY[53128, 53157], 42.5488, -88.3520),
- ('Spry', 'PA', ARRAY[17402, 17313], 39.9125, -76.6863),
- ('Nowthen', 'MN', ARRAY[55330], 45.3421, -93.4495),
- ('Michigan Center', 'MI', ARRAY[49201, 49203], 42.2267, -84.3230),
- ('Palos Park', 'IL', ARRAY[60439], 41.6682, -87.8885),
- ('Battlement Mesa', 'CO', ARRAY[81636], 39.4505, -108.0066),
- ('Mead', 'CO', ARRAY[80504, 80513], 40.2321, -104.9928),
- ('Silverton', 'OH', ARRAY[45236, 45227], 39.1884, -84.4010),
- ('Penitas', 'TX', ARRAY[78572], 26.2508, -98.4426),
- ('Crystal City', 'MO', ARRAY[63019], 38.2226, -90.3813),
- ('Briar', 'TX', ARRAY[76020], 32.9884, -97.5528),
- ('Spotsylvania Courthouse', 'VA', ARRAY[22551], 38.1982, -77.5885),
- ('Sherman', 'IL', ARRAY[62707], 39.8876, -89.6066),
- ('South Lebanon', 'OH', ARRAY[45036, 45034, 45039], 39.3672, -84.2204),
- ('Rock Hill', 'MO', ARRAY[63144], 38.6091, -90.3673),
- ('Franklin Center', 'NJ', ARRAY[8890], 40.5321, -74.5415),
- ('Old Westbury', 'NY', ARRAY[11568], 40.7866, -73.5975),
- ('Perezville', 'TX', ARRAY[78572], 26.2396, -98.4023),
- ('Wickenburg', 'AZ', ARRAY[85358], 33.9837, -112.7668),
- ('Bushnell', 'FL', ARRAY[33538, 33585], 28.6856, -82.1160),
- ('Harlan', 'IA', ARRAY[51593], 41.6496, -95.3268),
- ('Loch Lomond', 'VA', ARRAY[20111], 38.7812, -77.4817),
- ('Roselawn', 'IN', ARRAY[46372], 41.1535, -87.2881),
- ('Neptune City', 'NJ', ARRAY[7754], 40.2005, -74.0333),
- ('Hollister', 'MO', ARRAY[65673], 36.6058, -93.2338),
- ('Coopertown', 'TN', ARRAY[37172, 37146], 36.4143, -86.9658),
- ('Nikiski', 'AK', ARRAY[99635], 60.7152, -151.2317),
- ('Pine Level', 'AL', ARRAY[36022], 32.5797, -86.4529),
- ('White City', 'FL', ARRAY[34981], 27.3722, -80.3403),
- ('Breckenridge Hills', 'MO', ARRAY[63074], 38.7158, -90.3685),
- ('Campbelltown', 'PA', ARRAY[17010], 40.2761, -76.5848),
- ('Paulden', 'AZ', ARRAY[86334], 34.8899, -112.4938),
- ('Searingtown', 'NY', ARRAY[11577, 11576], 40.7705, -73.6603),
- ('Pea Ridge', 'FL', ARRAY[32571], 30.6029, -87.1022),
- ('Elko New Market', 'MN', ARRAY[55054], 44.5667, -93.3380),
- ('Lake Holiday', 'IL', ARRAY[60552], 41.6156, -88.6703),
- ('Surfside Beach', 'SC', ARRAY[29587], 33.6093, -78.9772),
- ('Flourtown', 'PA', ARRAY[19031], 40.1039, -75.2069),
- ('Raynham Center', 'MA', ARRAY[2768], 41.9327, -71.0431),
- ('South Hill', 'VA', ARRAY[23950], 36.7254, -78.1287),
- ('Gibraltar', 'MI', ARRAY[48183], 42.0960, -83.2029),
- ('Reminderville', 'OH', ARRAY[44202], 41.3338, -81.4018),
- ('Oak Hill', 'TN', ARRAY[37220], 36.0735, -86.7856),
- ('Capitol Heights', 'MD', ARRAY[20790, 20791, 20799], 38.8766, -76.9074),
- ('Westwood', 'KY', ARRAY[41101], 38.4806, -82.6798),
- ('Crystal River', 'FL', ARRAY[34429], 28.8964, -82.5992),
- ('Alachua', 'FL', ARRAY[32616], 29.7778, -82.4831),
- ('Edwardsville', 'KS', ARRAY[66113], 39.0765, -94.8166),
- ('Fremont', 'MI', ARRAY[49413], 43.4630, -85.9541),
- ('Florence', 'MS', ARRAY[39218], 32.1557, -90.1225),
- ('Ottawa Hills', 'OH', ARRAY[43606], 41.6682, -83.6433),
- ('Jamestown', 'NC', ARRAY[27265], 35.9985, -79.9347),
- ('Sierra View', 'PA', ARRAY[18610], 41.0007, -75.4476),
- ('Spurgeon', 'TN', ARRAY[37663], 36.4430, -82.4621),
- ('Walhalla', 'SC', ARRAY[29691], 34.7705, -83.0615),
- ('Pinetop-Lakeside', 'AZ', ARRAY[85929], 34.1486, -109.9658),
- ('Lindale', 'GA', ARRAY[30161], 34.1884, -85.1808),
- ('Bonsall', 'CA', ARRAY[92084], 33.2761, -117.1942),
- ('Connerton', 'FL', ARRAY[34639], 28.3022, -82.4624),
- ('Pleasant Run', 'OH', ARRAY[45231], 39.2927, -84.5757),
- ('Cramerton', 'NC', ARRAY[28012], 35.2344, -81.0734),
- ('North Alamo', 'TX', ARRAY[78516], 26.2160, -98.1264),
- ('Boiling Springs', 'NC', ARRAY[28152], 35.2521, -81.6636),
- ('Cortez', 'FL', ARRAY[34210], 27.4668, -82.6687),
- ('Unalaska', 'AK', ARRAY[99685], 53.8984, -166.5680),
- ('Tazewell', 'VA', ARRAY[24630], 37.1268, -81.5134),
- ('Fulton', 'MD', ARRAY[20759], 39.1516, -76.9163),
- ('Crestline', 'OH', ARRAY[44827], 40.7836, -82.7458),
- ('Valdese', 'NC', ARRAY[28690, 28655], 35.7566, -81.5634),
- ('Perryville', 'MD', ARRAY[21904], 39.5738, -76.0669),
- ('Planada', 'CA', ARRAY[95365], 37.2892, -120.3207),
- ('McMurray', 'PA', ARRAY[15317], 40.2815, -80.0874),
- ('Okauchee Lake', 'WI', ARRAY[53066], 43.1248, -88.4408),
- ('Mather', 'CA', ARRAY[95827], 38.5489, -121.2832),
- ('Cortland', 'IL', ARRAY[60151], 41.9255, -88.6794),
- ('Kingsville', 'MD', ARRAY[21087], 39.4496, -76.4204),
- ('Santa Ynez', 'CA', ARRAY[93460], 34.6151, -120.0944),
- ('Clarkdale', 'AZ', ARRAY[86324], 34.7503, -112.0550),
- ('Fort Pierce South', 'FL', ARRAY[34981], 27.4096, -80.3539),
- ('Goldstream', 'AK', ARRAY[99708, 99710], 64.9339, -148.0083),
- ('Larksville', 'PA', ARRAY[18651], 41.2639, -75.9326),
- ('Cornwall', 'PA', ARRAY[17016, 17085], 40.2659, -76.4077),
- ('Wonder Lake', 'IL', ARRAY[60050], 42.3792, -88.3496),
- ('Euharlee', 'GA', ARRAY[30120], 34.1441, -84.9327),
- ('Clarkson', 'NY', ARRAY[14430], 43.2398, -77.9162),
- ('Lake Providence', 'LA', ARRAY[71254, 71154], 32.8133, -91.1826),
- ('Shallotte', 'NC', ARRAY[28470], 33.9759, -78.3807),
- ('Argo', 'AL', ARRAY[35120], 33.6961, -86.5066),
- ('Lake Wisconsin', 'WI', ARRAY[53555], 43.3782, -89.5762),
- ('Four Corners', 'MT', ARRAY[59771], 45.6704, -111.1780),
- ('Hayfield', 'VA', ARRAY[22315], 38.7536, -77.1321),
- ('Noyack', 'NY', ARRAY[11969], 40.9827, -72.3350),
- ('Garden City South', 'NY', ARRAY[11552], 40.7121, -73.6605),
- ('Beavercreek', 'OR', ARRAY[97004], 45.2756, -122.5136),
- ('Spring Valley Village', 'TX', ARRAY[77055], 29.7898, -95.5041),
- ('West Ocean City', 'MD', ARRAY[21811], 38.3476, -75.1115),
- ('Clearwater', 'SC', ARRAY[29842], 33.5038, -81.9100),
- ('Suquamish', 'WA', ARRAY[98370], 47.7237, -122.5830),
- ('Holmes Beach', 'FL', ARRAY[34218], 27.5108, -82.7153),
- ('Madeira Beach', 'FL', ARRAY[33738], 27.7985, -82.7887),
- ('Goulding', 'FL', ARRAY[32503], 30.4397, -87.2299),
- ('Slaughterville', 'OK', ARRAY[73068], 35.0910, -97.2879),
- ('La Joya', 'TX', ARRAY[78560], 26.2518, -98.4699),
- ('Nelson', 'GA', ARRAY[30107, 30151], 34.3790, -84.3707),
- ('Grant-Valkaria', 'FL', ARRAY[32950, 32949], 27.9322, -80.5655),
- ('Buena', 'NJ', ARRAY[8310, 8341, 8360], 39.5282, -74.9448),
- ('Adamsville', 'AL', ARRAY[35005, 35060, 35073], 33.6063, -86.9745),
- ('Imperial', 'MO', ARRAY[63052], 38.3672, -90.3706),
- ('Welcome', 'NC', ARRAY[27374], 35.9066, -80.2548),
- ('Shady Hollow', 'TX', ARRAY[78739], 30.1646, -97.8629),
- ('Rising Sun-Lebanon', 'DE', ARRAY[19962, 19901], 39.0999, -75.5047),
- ('Larch Way', 'WA', ARRAY[98037], 47.8429, -122.2528),
- ('Mulberry', 'FL', ARRAY[33860, 33863], 27.9058, -81.9872),
- ('Hokes Bluff', 'AL', ARRAY[35905], 33.9902, -85.8639),
- ('Edgewood', 'OH', ARRAY[44005], 41.8783, -80.7461),
- ('Freeburg', 'IL', ARRAY[62243], 38.4398, -89.9170),
- ('Monroeville', 'AL', ARRAY[36461], 31.5162, -87.3279),
- ('Mojave', 'CA', ARRAY[93502], 35.0139, -118.1895),
- ('Dorneyville', 'PA', ARRAY[18103], 40.5755, -75.5188),
- ('Harbison Canyon', 'CA', ARRAY[92019, 91901], 32.8273, -116.8381),
- ('Mount Pleasant', 'PA', ARRAY[15685], 40.1510, -79.5435),
- ('Kenmar', 'PA', ARRAY[17754], 41.2547, -76.9550),
- ('University Gardens', 'NY', ARRAY[11020], 40.7751, -73.7279),
- ('Woodstock', 'AL', ARRAY[35111], 33.2193, -87.1489),
- ('Orangeburg', 'NY', ARRAY[10976], 41.0488, -73.9407),
- ('Central Gardens', 'TX', ARRAY[77705], 29.9893, -94.0217),
- ('Heritage Hills', 'NY', ARRAY[10540], 41.3398, -73.7016),
- ('Scandia', 'MN', ARRAY[55047], 45.2540, -92.8278),
- ('Indian Mountain Lake', 'PA', ARRAY[18210], 41.0003, -75.5058),
- ('Tiffin', 'IA', ARRAY[52240], 41.7067, -91.6582),
- ('Oakwood', 'GA', ARRAY[30542, 30502], 34.2237, -83.8849),
- ('Port Reading', 'NJ', ARRAY[7001, 7064], 40.5669, -74.2475),
- ('Herculaneum', 'MO', ARRAY[63048], 38.2579, -90.3949),
- ('McSwain', 'CA', ARRAY[95301], 37.3146, -120.5867),
- ('Dewey-Humboldt', 'AZ', ARRAY[86327], 34.5175, -112.2498),
- ('Holtville', 'AL', ARRAY[36022], 32.6314, -86.3268),
- ('Alfred', 'NY', ARRAY[14803], 42.2541, -77.7897),
- ('Christopher', 'IL', ARRAY[62822], 37.9708, -89.0531),
- ('New Tazewell', 'TN', ARRAY[37824], 36.4381, -83.6053),
- ('Skippack', 'PA', ARRAY[19426, 19474, 19473, 19430], 40.2225, -75.3998),
- ('Grant', 'MN', ARRAY[55082], 45.0825, -92.9090),
- ('Malmstrom AFB', 'MT', ARRAY[59402], 47.5059, -111.1825),
- ('Walthourville', 'GA', ARRAY[31313, 31333], 31.7716, -81.6216),
- ('Goodview', 'MN', ARRAY[55987], 44.0693, -91.7167),
- ('Niwot', 'CO', ARRAY[80503], 40.0980, -105.1552),
- ('Moxee', 'WA', ARRAY[98901], 46.5640, -120.3966),
- ('Rosewood Heights', 'IL', ARRAY[62018], 38.8885, -90.0722),
- ('West Milwaukee', 'WI', ARRAY[53214, 53215], 43.0124, -87.9710),
- ('Whiteman AFB', 'MO', ARRAY[65305], 38.7302, -93.5590),
- ('Austin', 'AR', ARRAY[72176], 35.0061, -91.9895),
- ('Herricks', 'NY', ARRAY[11596], 40.7567, -73.6635),
- ('Mississippi State', 'MS', ARRAY[39762], 33.4515, -88.7913),
- ('Arcadia', 'SC', ARRAY[29301, 29336], 34.9609, -81.9929),
- ('Rio Dell', 'CA', ARRAY[95562], 40.5022, -124.1103),
- ('Bethlehem', 'NC', ARRAY[28681], 35.8162, -81.2962),
- ('Ellisburg', 'NJ', ARRAY[8034], 39.9199, -75.0093),
- ('Haleiwa', 'HI', ARRAY[96791], 21.5871, -158.1074),
- ('Lorane', 'PA', ARRAY[19508], 40.2921, -75.8486),
- ('Eatonton', 'GA', ARRAY[31026], 33.3258, -83.3886),
- ('Northwest Harwich', 'MA', ARRAY[2645, 2646], 41.6917, -70.1027),
- ('Peaceful Valley', 'WA', ARRAY[98244, 98266], 48.9477, -122.1406),
- ('North El Monte', 'CA', ARRAY[91006], 34.1030, -118.0238),
- ('Weaverville', 'NC', ARRAY[28804], 35.6963, -82.5584),
- ('Riva', 'MD', ARRAY[21037, 21140], 38.9449, -76.5876),
- ('Fussels Corner', 'FL', ARRAY[33801], 28.0574, -81.8610),
- ('Fenton', 'MO', ARRAY[63099], 38.5279, -90.4489),
- ('Churchville', 'PA', ARRAY[18954], 40.1994, -74.9986),
- ('South Chicago Heights', 'IL', ARRAY[60411], 41.4831, -87.6370),
- ('Kahaluu-Keauhou', 'HI', ARRAY[96739], 19.5726, -155.9580),
- ('Lakewood', 'IL', ARRAY[60098], 42.2278, -88.3930),
- ('Alexandria', 'AL', ARRAY[36250], 33.7675, -85.8792),
- ('Silver Lake', 'NJ', ARRAY[7003], 40.7804, -74.1829),
- ('Shannon Hills', 'AR', ARRAY[72103], 34.6157, -92.4217),
- ('Captain Cook', 'HI', ARRAY[96750], 19.4995, -155.8937),
- ('Mills', 'WY', ARRAY[82601, 82644], 42.8473, -106.3830),
- ('Shavano Park', 'TX', ARRAY[78230, 78249], 29.5861, -98.5563),
- ('Park Hill', 'OK', ARRAY[74471, 74464], 35.8546, -94.9559),
- ('Spencer', 'OK', ARRAY[73084], 35.5108, -97.3715),
- ('Verona', 'VA', ARRAY[24482], 38.1939, -79.0087),
- ('Thorndale', 'PA', ARRAY[19335], 39.9991, -75.7517),
- ('Holloman AFB', 'NM', ARRAY[88352], 32.8483, -106.0998),
- ('South Brooksville', 'FL', ARRAY[34601], 28.5243, -82.4158),
- ('Nichols Hills', 'OK', ARRAY[73120], 35.5468, -97.5444),
- ('Clearview', 'WA', ARRAY[98012, 98072], 47.8292, -122.1452),
- ('Brewerton', 'NY', ARRAY[13036], 43.2344, -76.1411),
- ('Deephaven', 'MN', ARRAY[55391], 44.9318, -93.5293),
- ('Carefree', 'AZ', ARRAY[85327], 33.8234, -111.9161),
- ('Glenwood Landing', 'NY', ARRAY[11545], 40.8295, -73.6378),
- ('Tyro', 'NC', ARRAY[27295], 35.7997, -80.3765),
- ('Fairview', 'NC', ARRAY[28079], 35.1545, -80.5345),
- ('Green Oaks', 'IL', ARRAY[60048], 42.2954, -87.9116),
- ('Belleville', 'MI', ARRAY[48112], 42.2021, -83.4838),
- ('Haleyville', 'AL', ARRAY[35551], 34.2331, -87.6175),
- ('Odenville', 'AL', ARRAY[35120], 33.6987, -86.4225),
- ('Farmington', 'ME', ARRAY[4992], 44.6680, -70.1459),
- ('Dupo', 'IL', ARRAY[62236, 62239], 38.5146, -90.2168),
- ('Bunk Foss', 'WA', ARRAY[98205], 47.9617, -122.0944),
- ('Angels', 'CA', ARRAY[95221], 38.0707, -120.5501),
- ('Rochester', 'WI', ARRAY[53105, 53138], 42.7338, -88.2489),
- ('Spring House', 'PA', ARRAY[19002], 40.1847, -75.2267),
- ('Washington Park', 'IL', ARRAY[62203], 38.6285, -90.0928),
- ('Menands', 'NY', ARRAY[12247], 42.6910, -73.7271),
- ('Benson', 'AZ', ARRAY[85630], 31.9157, -110.3257),
- ('Lyncourt', 'NY', ARRAY[13208], 43.0821, -76.1264),
- ('Cle Elum', 'WA', ARRAY[98922], 47.1943, -120.9539),
- ('Mountain Home', 'NC', ARRAY[28758], 35.3708, -82.5021),
- ('Smithton', 'IL', ARRAY[62243, 62285], 38.4159, -89.9903),
- ('Manchester', 'GA', ARRAY[31830], 32.8566, -84.6329),
- ('Lake Goodwin', 'WA', ARRAY[98292, 98271], 48.1387, -122.2804),
- ('Calcium', 'NY', ARRAY[13616], 44.0401, -75.8468),
- ('Bardonia', 'NY', ARRAY[10954], 41.1129, -73.9823),
- ('Conway', 'NH', ARRAY[3813, 3818], 43.9845, -71.1180),
- ('Fairview', 'NJ', ARRAY[7799], 40.3658, -74.0803),
- ('St. Augusta', 'MN', ARRAY[56301], 45.4497, -94.1996),
- ('Abbotsford', 'WI', ARRAY[54421], 44.9432, -90.3169),
- ('Toa Alta', 'PR', ARRAY[954], 18.3883, -66.2503),
- ('Nash', 'TX', ARRAY[75501], 33.4422, -94.1283),
- ('Key Center', 'WA', ARRAY[98329, 98394, 98395], 47.3376, -122.7505),
- ('Ellenton', 'FL', ARRAY[34221], 27.5266, -82.5261),
- ('Maytown', 'PA', ARRAY[17547], 40.0791, -76.5791),
- ('Carmel-by-the-Sea', 'CA', ARRAY[93921, 93922], 36.5528, -121.9222),
- ('Moss Beach', 'CA', ARRAY[94019], 37.5184, -122.5036),
- ('Longbranch', 'WA', ARRAY[98351], 47.2257, -122.7739),
- ('Cross Mountain', 'TX', ARRAY[78255], 29.6535, -98.6564),
- ('Armona', 'CA', ARRAY[93230], 36.3179, -119.7054),
- ('Northlake', 'SC', ARRAY[29621], 34.5691, -82.6837),
- ('Grayling', 'MI', ARRAY[49739], 44.6566, -84.7091),
- ('Red Rock', 'AZ', ARRAY[85145, 85658], 32.5610, -111.3745),
- ('Level Park-Oak Park', 'MI', ARRAY[49037], 42.3642, -85.2665),
- ('Mount Pleasant', 'TN', ARRAY[38474], 35.5484, -87.1872),
- ('Pleasant Hills', 'MD', ARRAY[21087, 21047, 21018], 39.4861, -76.3908),
- ('Newfane', 'NY', ARRAY[14028], 43.2857, -78.6940),
- ('Merton', 'WI', ARRAY[53029, 53056], 43.1423, -88.3088),
- ('Stanley', 'NC', ARRAY[28164], 35.3552, -81.0937),
- ('Eastover', 'NC', ARRAY[28312], 35.0958, -78.7862),
- ('New Hope', 'MS', ARRAY[39703], 33.4521, -88.3399),
- ('Madison', 'IL', ARRAY[62201, 62060], 38.7001, -90.1425),
- ('Balm', 'FL', ARRAY[33503], 27.7541, -82.2882),
- ('Johnson', 'AR', ARRAY[72762, 72741], 36.1328, -94.1757),
- ('Sumiton', 'AL', ARRAY[35148], 33.7503, -87.0483),
- ('Bryn Mawr', 'PA', ARRAY[19010], 40.0227, -75.3156),
- ('West Point', 'GA', ARRAY[31833], 32.8937, -85.1453),
- ('Madison', 'FL', ARRAY[32341], 30.4716, -83.4130),
- ('Chattanooga Valley', 'GA', ARRAY[30725], 34.9241, -85.3431),
- ('Narragansett Pier', 'RI', ARRAY[2880], 41.4280, -71.4670),
- ('Boulevard Park', 'WA', ARRAY[98168], 47.5136, -122.3160),
- ('Freedom', 'CA', ARRAY[95019], 36.9402, -121.7953),
- ('Lyman', 'SC', ARRAY[29365], 34.9661, -82.1231),
- ('Maiden', 'NC', ARRAY[28650], 35.5853, -81.2201),
- ('Saxon', 'SC', ARRAY[29301], 34.9616, -81.9713),
- ('Marietta-Alderwood', 'WA', ARRAY[98226], 48.7932, -122.5566),
- ('Norwood Young America', 'MN', ARRAY[55368, 55554, 55573], 44.7721, -93.9192),
- ('Barrett', 'TX', ARRAY[77562], 29.8671, -95.0537),
- ('Aurora', 'IN', ARRAY[47001], 39.0677, -84.9046),
- ('Alturas', 'FL', ARRAY[33859, 33841, 33820], 27.8419, -81.6952),
- ('Sagamore', 'MA', ARRAY[2562], 41.7842, -70.5332),
- ('Milan', 'NM', ARRAY[87021], 35.1950, -107.8947),
- ('Muttontown', 'NY', ARRAY[11791, 11732], 40.8254, -73.5363),
- ('Gordon Heights', 'NY', ARRAY[11953], 40.8645, -72.9678),
- ('Empire', 'CA', ARRAY[95357], 37.6432, -120.9045),
- ('Kennedy', 'CA', ARRAY[95206], 37.9290, -121.2457),
- ('Lloyd Harbor', 'NY', ARRAY[11724], 40.9139, -73.4618),
- ('Wadsworth', 'IL', ARRAY[60083], 42.4441, -87.9198),
- ('Old River-Winfree', 'TX', ARRAY[77535], 29.8745, -94.8268),
- ('North East', 'MD', ARRAY[21921], 39.6077, -75.9414),
- ('Brookmont', 'MD', ARRAY[20816], 38.9546, -77.1292),
- ('Duncan', 'SC', ARRAY[29651], 34.9351, -82.1440),
- ('Panther Valley', 'NJ', ARRAY[7838], 40.9078, -74.8412),
- ('Rockfish', 'NC', ARRAY[28306], 34.9902, -79.0694),
- ('New London', 'MN', ARRAY[56273], 45.2975, -94.9476),
- ('Meridian', 'CO', ARRAY[80134], 39.5389, -104.8476),
- ('Shark River Hills', 'NJ', ARRAY[7753], 40.1923, -74.0463),
- ('Brookville', 'NY', ARRAY[11548], 40.8123, -73.5696),
- ('Paw Paw Lake', 'MI', ARRAY[49038], 42.2113, -86.2759),
- ('Dunean', 'SC', ARRAY[29605], 34.8203, -82.4225),
- ('Turnersville', 'NJ', ARRAY[8012], 39.7666, -75.0614),
- ('Kimberly', 'AL', ARRAY[35091, 35116], 33.7760, -86.7968),
- ('Pine Lawn', 'MO', ARRAY[63120], 38.6953, -90.2756),
- ('Dana', 'NC', ARRAY[28731, 28724], 35.3239, -82.3722),
- ('Darien', 'GA', ARRAY[31331], 31.3568, -81.4315),
- ('Port Hadlock-Irondale', 'WA', ARRAY[98368, 98339], 48.0316, -122.7890),
- ('Valley Grande', 'AL', ARRAY[36701], 32.4862, -87.0305),
- ('Pantops', 'VA', ARRAY[22909], 38.0308, -78.4444),
- ('Dixmoor', 'IL', ARRAY[60406], 41.6330, -87.6672),
- ('Hainesville', 'IL', ARRAY[60030], 42.3414, -88.0686),
- ('Camden', 'DE', ARRAY[19904], 39.0991, -75.5570),
- ('Houghton Lake', 'MI', ARRAY[48630, 48629], 44.3124, -84.7625),
- ('Amberley', 'OH', ARRAY[45236], 39.2035, -84.4283),
- ('Sloan', 'NY', ARRAY[14212], 42.8921, -78.7918),
- ('Robins', 'IA', ARRAY[52411, 52328], 42.0799, -91.6762),
- ('Indianola', 'WA', ARRAY[98346, 98370], 47.7566, -122.5142),
- ('Doolittle', 'TX', ARRAY[78541], 26.3598, -98.1168),
- ('Ross', 'OH', ARRAY[45013, 45061], 39.3146, -84.6599),
- ('Canyon Creek', 'WA', ARRAY[98252], 48.1157, -121.9831),
- ('Putnam Lake', 'NY', ARRAY[10509], 41.4747, -73.5483),
- ('Mariemont', 'OH', ARRAY[45227], 39.1429, -84.3784),
- ('Gravette', 'AR', ARRAY[72736], 36.4291, -94.3714),
- ('Old Mystic', 'CT', ARRAY[6372], 41.3854, -71.9850),
- ('Lake Cassidy', 'WA', ARRAY[98258, 98270], 48.0639, -122.0920),
- ('Clayton', 'DE', ARRAY[19938], 39.2846, -75.6364),
- ('Watertown', 'FL', ARRAY[32025], 30.1855, -82.6026),
- ('Cloverdale', 'VA', ARRAY[24019], 37.3566, -79.9055),
- ('Holden Heights', 'FL', ARRAY[32839, 32855], 28.5013, -81.3878),
- ('Saylorville', 'IA', ARRAY[50313], 41.6809, -93.6279),
- ('High Springs', 'FL', ARRAY[32655], 29.8080, -82.5949),
- ('Loyalhanna', 'PA', ARRAY[15650, 15620], 40.3144, -79.3560),
- ('Elkins', 'AR', ARRAY[72727], 36.0163, -94.0250),
- ('Shady Spring', 'WV', ARRAY[25918, 25989], 37.7032, -81.0912),
- ('Royal Palm Estates', 'FL', ARRAY[33415], 26.6815, -80.1265),
- ('Forsyth', 'IL', ARRAY[62535], 39.9259, -88.9640),
- ('Mineral Ridge', 'OH', ARRAY[44515], 41.1379, -80.7653),
- ('Bagdad', 'FL', ARRAY[32530], 30.5824, -87.0447),
- ('Brentwood', 'MD', ARRAY[20712], 38.9439, -76.9571),
- ('Cottondale', 'AL', ARRAY[35453], 33.1922, -87.4544),
- ('Red Oak', 'NC', ARRAY[27856, 27804, 27868], 36.0415, -77.9065),
- ('Lake Isabella', 'CA', ARRAY[93240], 35.6378, -118.4819),
- ('Squaw Valley', 'CA', ARRAY[93646], 36.6944, -119.2000),
- ('Ladonia', 'AL', ARRAY[36869], 32.4609, -85.0877),
- ('Port Ewen', 'NY', ARRAY[12417, 12487], 41.9048, -73.9776),
- ('Day Valley', 'CA', ARRAY[95003], 37.0255, -121.8559),
- ('Reamstown', 'PA', ARRAY[17567], 40.2113, -76.1180),
- ('Cherokee Village', 'AR', ARRAY[72525], 36.2959, -91.5696),
- ('Riverton', 'IL', ARRAY[62707, 62651, 62761], 39.8456, -89.5394),
- ('Richwood', 'NJ', ARRAY[8071, 8074, 8062, 8025], 39.7140, -75.1734),
- ('Skidway Lake', 'MI', ARRAY[48756], 44.1919, -84.0467),
- ('Oakhurst', 'CA', ARRAY[95644], 37.3342, -119.6483),
- ('Bonanza', 'GA', ARRAY[30238], 33.4589, -84.3379),
- ('La Vale', 'MD', ARRAY[21501, 21504], 39.6518, -78.8162),
- ('Quartzsite', 'AZ', ARRAY[85359, 85369, 85376], 33.6675, -114.2170),
- ('Ahtanum', 'WA', ARRAY[98908, 98909], 46.5583, -120.6110),
- ('Long Lake', 'IL', ARRAY[60041], 42.3765, -88.1266),
- ('Baldwin', 'GA', ARRAY[30510, 30511], 34.4864, -83.5494),
- ('Hansville', 'WA', ARRAY[98346], 47.8978, -122.5579),
- ('Fort Hall', 'ID', ARRAY[83203, 83221], 43.0145, -112.4573),
- ('Ridgecrest', 'FL', ARRAY[33774], 27.8953, -82.8063),
- ('Lockeford', 'CA', ARRAY[95237], 38.1509, -121.1554),
- ('Frontenac', 'KS', ARRAY[66763], 37.4583, -94.7018),
- ('Dewey', 'OK', ARRAY[74029], 36.7915, -95.9328),
- ('Flat Rock', 'NC', ARRAY[28731], 35.2677, -82.4526),
- ('Sylvan Beach', 'NY', ARRAY[13308], 43.2061, -75.7234),
- ('Cleves', 'OH', ARRAY[45002], 39.1635, -84.7469),
- ('County Center', 'VA', ARRAY[22195], 38.6917, -77.3507),
- ('Inwood', 'WV', ARRAY[25428], 39.3538, -78.0552),
- ('Cedar Grove', 'FL', ARRAY[32405], 30.1812, -85.6268),
- ('La Center', 'WA', ARRAY[98642], 45.8595, -122.6757),
- ('Northlake', 'TX', ARRAY[76247, 76262], 33.0802, -97.2545),
- ('Kings Bay Base', 'GA', ARRAY[31547], 30.7985, -81.5628),
- ('Howe', 'TX', ARRAY[75459], 33.5066, -96.6155),
- ('Manor', 'PA', ARRAY[15665, 15636], 40.3459, -79.6693),
- ('Nellis AFB', 'NV', ARRAY[89191], 36.2473, -115.0574),
- ('Kinsey', 'AL', ARRAY[36345], 31.2926, -85.3353),
- ('Mayfield', 'OH', ARRAY[44143], 41.5501, -81.4369),
- ('Wynantskill', 'NY', ARRAY[12198], 42.6881, -73.6467),
- ('Pottsville', 'AR', ARRAY[72802], 35.2314, -93.0652),
- ('Upland', 'PA', ARRAY[19013], 39.8562, -75.3795),
- ('Blennerhassett', 'WV', ARRAY[26181], 39.2562, -81.6316),
- ('Chattahoochee Hills', 'GA', ARRAY[30213], 33.5695, -84.7441),
- ('Goshen', 'CA', ARRAY[93227], 36.3518, -119.4210),
- ('Ponce Inlet', 'FL', ARRAY[32168], 29.0927, -80.9473),
- ('Richville', 'OH', ARRAY[44706, 44646], 40.7529, -81.4684),
- ('Balcones Heights', 'TX', ARRAY[78213], 29.4900, -98.5503),
- ('Mar-Mac', 'NC', ARRAY[27530], 35.3345, -78.0545),
- ('Orange', 'OH', ARRAY[44022], 41.4415, -81.4743),
- ('Smithville-Sanders', 'IN', ARRAY[47401], 39.0597, -86.5108),
- ('Ohioville', 'PA', ARRAY[15052], 40.6872, -80.4783),
- ('Alderton', 'WA', ARRAY[98372, 98374], 47.1718, -122.2192),
- ('Cleveland', 'FL', ARRAY[33951], 26.9529, -81.9925),
- ('Berwyn', 'PA', ARRAY[19301, 19333], 40.0396, -75.4439),
- ('McChord AFB', 'WA', ARRAY[98438], 47.1328, -122.4924),
- ('North Wales', 'PA', ARRAY[19455], 40.2111, -75.2744),
- ('Rural Hall', 'NC', ARRAY[27094, 27098, 27099], 36.2251, -80.2973),
- ('Pomona', 'NY', ARRAY[10970], 41.1892, -74.0543),
- ('Sugar Creek', 'MO', ARRAY[64054, 64050, 64053], 39.1421, -94.4018),
- ('Braddock Heights', 'MD', ARRAY[21702, 21714], 39.4114, -77.5009),
- ('Lordstown', 'OH', ARRAY[44481], 41.1684, -80.8590),
- ('Spencer', 'NC', ARRAY[28159], 35.6989, -80.4248),
- ('North Pembroke', 'MA', ARRAY[2358], 42.0989, -70.7823),
- ('Pistakee Highlands', 'IL', ARRAY[60051], 42.4023, -88.2115),
- ('Newburgh', 'IN', ARRAY[47629], 37.9494, -87.4053),
- ('Haviland', 'NY', ARRAY[12538], 41.7682, -73.9007),
- ('Northwest Harwinton', 'CT', ARRAY[6792], 41.7769, -73.0794),
- ('Greentown', 'OH', ARRAY[44720, 44630], 40.9274, -81.4020),
- ('Christiana', 'TN', ARRAY[37128], 35.7204, -86.4109),
- ('Kemmerer', 'WY', ARRAY[83121, 83116], 41.7761, -110.5555),
- ('Locust', 'NC', ARRAY[28097], 35.2687, -80.4368),
- ('Verona', 'MS', ARRAY[38879], 34.1907, -88.7203),
- ('Russell', 'KY', ARRAY[41139], 38.5116, -82.6996),
- ('Norris', 'TN', ARRAY[37828], 36.2136, -84.0629),
- ('Port Monmouth', 'NJ', ARRAY[7758], 40.4337, -74.1010),
- ('Lopezville', 'TX', ARRAY[78542], 26.2453, -98.1537),
- ('Orchard City', 'CO', ARRAY[81418, 81414], 38.8144, -107.9705),
- ('Algona', 'WA', ARRAY[98047], 47.2819, -122.2504),
- ('Reno', 'TX', ARRAY[76082], 32.9454, -97.5769),
- ('Bay Pines', 'FL', ARRAY[33744], 27.8139, -82.7747),
- ('Emerald Mountain', 'AL', ARRAY[36078], 32.4396, -86.0857),
- ('Port Washington North', 'NY', ARRAY[11052, 11053, 11055], 40.8434, -73.7014),
- ('Fairview', 'NY', ARRAY[10607], 41.0442, -73.7963),
- ('Bethel Acres', 'OK', ARRAY[74801], 35.3048, -97.0370),
- ('Grand Mound', 'WA', ARRAY[98531], 46.8053, -123.0119),
- ('Kenvil', 'NJ', ARRAY[7847], 40.8747, -74.6274),
- ('Fiskdale', 'MA', ARRAY[1566], 42.1227, -72.1087),
- ('Oak Ridge North', 'TX', ARRAY[77386], 30.1570, -95.4421),
- ('Liberty', 'SC', ARRAY[29632], 34.7904, -82.6962),
- ('Hurley', 'NY', ARRAY[12443], 41.9123, -74.0591),
- ('Heritage Lake', 'IN', ARRAY[46121], 39.7288, -86.7123),
- ('Lake Success', 'NY', ARRAY[11020], 40.7680, -73.7089),
- ('Pleasant Valley', 'WV', ARRAY[26578], 39.4505, -80.1552),
- ('North Lakeport', 'CA', ARRAY[95433], 39.0883, -122.9054),
- ('Blanchard', 'LA', ARRAY[71009], 32.6090, -93.8842),
- ('Centerville', 'PA', ARRAY[15358, 15417, 15333], 40.0300, -79.9632),
- ('Landis', 'NC', ARRAY[28088], 35.5484, -80.6116),
- ('Oakland', 'FL', ARRAY[34787, 34740], 28.5535, -81.6357),
- ('South Hempstead', 'NY', ARRAY[11570], 40.6814, -73.6233),
- ('Vails Gate', 'NY', ARRAY[12584], 41.4587, -74.0533),
- ('Maugansville', 'MD', ARRAY[21740], 39.6936, -77.7472),
- ('University Park', 'NM', ARRAY[88003], 32.2767, -106.7462),
- ('Mauriceville', 'TX', ARRAY[77626], 30.2187, -93.8758),
- ('Gosnell', 'AR', ARRAY[72319], 35.9645, -89.9721),
- ('Mineral Springs', 'NC', ARRAY[28173, 28112], 34.9411, -80.6846),
- ('Wallburg', 'NC', ARRAY[27373], 36.0088, -80.1453),
- ('New Holstein', 'WI', ARRAY[53062], 43.9491, -88.0942),
- ('Homer', 'NY', ARRAY[13045], 42.6371, -76.1849),
- ('Vienna', 'GA', ARRAY[31902], 32.0925, -83.7864),
- ('St. James', 'MD', ARRAY[21781, 21740], 39.5738, -77.7482),
- ('Big Sky', 'MT', ARRAY[59716], 45.2592, -111.3426),
- ('Zellwood', 'FL', ARRAY[32757], 28.7301, -81.5915),
- ('High Bridge', 'WA', ARRAY[98272], 47.7968, -122.0281),
- ('Lakemore', 'OH', ARRAY[44312], 41.0215, -81.4264),
- ('Double Oak', 'TX', ARRAY[75077], 33.0633, -97.1117),
- ('Emigsville', 'PA', ARRAY[17318], 40.0085, -76.7310),
- ('Lake Junaluska', 'NC', ARRAY[28786, 28785], 35.5305, -82.9749),
- ('Wilder', 'KY', ARRAY[41076], 39.0400, -84.4816),
- ('Wormleysburg', 'PA', ARRAY[17011], 40.2604, -76.9094),
- ('Sharpes', 'FL', ARRAY[32926, 32959], 28.4368, -80.7555),
- ('Loxley', 'AL', ARRAY[36527, 36578], 30.6813, -87.7418),
- ('Sherwood', 'WI', ARRAY[54169], 44.1764, -88.2756),
- ('Greenfield', 'MN', ARRAY[55357], 45.0997, -93.6884),
- ('Capitanejo', 'PR', ARRAY[795], 18.0132, -66.5359),
- ('Dade City North', 'FL', ARRAY[33523], 28.3838, -82.1943),
- ('Ferrysburg', 'MI', ARRAY[49409], 43.0850, -86.2221),
- ('Granite Quarry', 'NC', ARRAY[28072], 35.6126, -80.4484),
- ('Lido Beach', 'NY', ARRAY[11561], 40.5904, -73.6121),
- ('Johnson Creek', 'WI', ARRAY[53094], 43.0812, -88.7702),
- ('Edgewood', 'FL', ARRAY[32809, 32839], 28.4878, -81.3772),
- ('Byrnes Mill', 'MO', ARRAY[63051], 38.4395, -90.5741),
- ('The Plains', 'OH', ARRAY[45780], 39.3656, -82.1343),
- ('Iron River', 'MI', ARRAY[49964], 46.0966, -88.6396),
- ('Palmer Lake', 'CO', ARRAY[80132, 80932, 80933], 39.1152, -104.9057),
- ('Shenandoah', 'TX', ARRAY[77381, 77385], 30.1840, -95.4555),
- ('Penbrook', 'PA', ARRAY[17109], 40.2780, -76.8484),
- ('Combes', 'TX', ARRAY[78552, 78535, 78551, 78553], 26.2444, -97.7254),
- ('Monument Beach', 'MA', ARRAY[2532, 2559], 41.7192, -70.6061),
- ('Chevy Chase', 'MD', ARRAY[20825], 38.9819, -77.0833),
- ('Hawaiian Acres', 'HI', ARRAY[96760], 19.5325, -155.0497),
- ('Ferris', 'TX', ARRAY[75125], 32.5369, -96.6738),
- ('Keeseville', 'NY', ARRAY[12911], 44.5035, -73.4812),
- ('Vista Santa Rosa', 'CA', ARRAY[92236], 33.6227, -116.2126),
- ('Yountville', 'CA', ARRAY[94558], 38.3963, -122.3671),
- ('Andrews AFB', 'MD', ARRAY[20762], 38.8053, -76.8744),
- ('Springfield', 'KY', ARRAY[40061], 37.6921, -85.2193),
- ('Boutte', 'LA', ARRAY[70080], 29.8825, -90.3936),
- ('Pioneer Village', 'KY', ARRAY[40165], 38.0599, -85.6800),
- ('Port Richey', 'FL', ARRAY[34673], 28.2758, -82.7250),
- ('Winchester', 'CA', ARRAY[92596], 33.7146, -117.0775),
- ('Churchill', 'PA', ARRAY[15221], 40.4389, -79.8417),
- ('Norco', 'LA', ARRAY[70047], 29.9986, -90.4036),
- ('Greenbriar', 'FL', ARRAY[34698], 28.0112, -82.7523),
- ('Murfreesboro', 'NC', ARRAY[27855], 36.4421, -77.0964),
- ('Oxoboxo River', 'CT', ARRAY[6382], 41.4441, -72.1250),
- ('Eagle Lake', 'FL', ARRAY[33839], 27.9760, -81.7573),
- ('Wanakah', 'NY', ARRAY[14085], 42.7434, -78.9028),
- ('East Norwich', 'NY', ARRAY[11732], 40.8496, -73.5288),
- ('Fairbanks Ranch', 'CA', ARRAY[92168], 32.9919, -117.1859),
- ('Westhampton', 'NY', ARRAY[11977], 40.8325, -72.6617),
- ('Great Neck Estates', 'NY', ARRAY[11022], 40.7857, -73.7396),
- ('Cherry Valley', 'IL', ARRAY[61016, 61109], 42.2222, -88.9716),
- ('Buckeye Lake', 'OH', ARRAY[43008], 39.9355, -82.4826),
- ('Wolfeboro', 'NH', ARRAY[3896], 43.5913, -71.2092),
- ('Belle Meade', 'TN', ARRAY[37215], 36.0994, -86.8562),
- ('Youngwood', 'PA', ARRAY[15601], 40.2443, -79.5812),
- ('Oliver', 'PA', ARRAY[15401], 39.9153, -79.7213),
- ('Experiment', 'GA', ARRAY[30212], 33.2789, -84.2760),
- ('Konterra', 'MD', ARRAY[20707], 39.0774, -76.9022),
- ('Ellsworth', 'WI', ARRAY[54011], 44.7364, -92.4806),
- ('Peterborough', 'NH', ARRAY[3468], 42.8790, -71.9594),
- ('Meadowood', 'PA', ARRAY[16045], 40.8443, -79.8939),
- ('Manatee Road', 'FL', ARRAY[32693], 29.5145, -82.9192),
- ('Midway South', 'TX', ARRAY[78596], 26.1567, -98.0209),
- ('Chico', 'WA', ARRAY[98383], 47.6234, -122.7198),
- ('North Boston', 'NY', ARRAY[14110], 42.6773, -78.7797),
- ('Granite Hills', 'CA', ARRAY[92019], 32.8033, -116.9056),
- ('St. Clair', 'PA', ARRAY[17901], 40.7211, -76.1903),
- ('Gambrills', 'MD', ARRAY[21108], 39.0929, -76.6512),
- ('Stamford', 'TX', ARRAY[79521], 33.0156, -99.6716),
- ('Lyndonville', 'VT', ARRAY[5849], 44.5352, -72.0016),
- ('Brush Prairie', 'WA', ARRAY[98662], 45.7251, -122.5483),
- ('Escatawpa', 'MS', ARRAY[39552], 30.4912, -88.5495),
- ('Lesslie', 'SC', ARRAY[29730], 34.8856, -80.9541),
- ('Douglas', 'MI', ARRAY[49408], 42.6410, -86.2082),
- ('Fraser', 'CO', ARRAY[80442], 39.9303, -105.8030),
- ('Montana City', 'MT', ARRAY[59635], 46.5257, -111.9400),
- ('Dallas', 'PA', ARRAY[18690], 41.3306, -75.9736),
- ('North Kingsville', 'OH', ARRAY[44004, 44068], 41.9189, -80.6724),
- ('Weatogue', 'CT', ARRAY[6089], 41.8459, -72.8294),
- ('Gloverville', 'SC', ARRAY[29851], 33.5274, -81.8145),
- ('Grantville', 'GA', ARRAY[30264], 33.2371, -84.8293),
- ('Harveys Lake', 'PA', ARRAY[18612, 18654], 41.3626, -76.0381),
- ('Hudson', 'CO', ARRAY[80642], 40.0898, -104.6216),
- ('Big Lake', 'AK', ARRAY[99623], 61.5260, -149.9720),
- ('Tainter Lake', 'WI', ARRAY[54730], 44.9882, -91.8437),
- ('Talty', 'TX', ARRAY[75160], 32.6945, -96.4007),
- ('Wilson''s Mills', 'NC', ARRAY[27577, 27527, 27593], 35.5863, -78.3644),
- ('Sells', 'AZ', ARRAY[85734], 31.9202, -111.8775),
- ('Burnettown', 'SC', ARRAY[29851, 29834, 29816, 29841], 33.5186, -81.8634),
- ('Crest', 'CA', ARRAY[92019], 32.8000, -116.8671),
- ('Chester Heights', 'PA', ARRAY[19063, 19017], 39.8926, -75.4698),
- ('Osseo', 'MN', ARRAY[55569], 45.1179, -93.3992),
- ('Springdale', 'SC', ARRAY[29171], 33.9616, -81.1119),
- ('Snowmass Village', 'CO', ARRAY[81611], 39.2207, -106.9386),
- ('Longtown', 'OK', ARRAY[74432, 74462], 35.2405, -95.5183),
- ('Evendale', 'OH', ARRAY[45241], 39.2509, -84.4268),
- ('Hartford', 'KY', ARRAY[42347], 37.4506, -86.8930),
- ('Cohasset', 'MN', ARRAY[55721], 47.2389, -93.6396),
- ('Homestead Valley', 'CA', ARRAY[92285], 34.2730, -116.4145),
- ('Muse', 'PA', ARRAY[15350], 40.2924, -80.2055),
- ('Tobaccoville', 'NC', ARRAY[27045, 27050], 36.2256, -80.3591),
- ('South Creek', 'WA', ARRAY[98387, 98338], 46.9994, -122.3921),
- ('Hamilton', 'IL', ARRAY[62341], 40.3899, -91.3623),
- ('West Sand Lake', 'NY', ARRAY[12196], 42.6403, -73.6032),
- ('Perryman', 'MD', ARRAY[21130], 39.4633, -76.2115),
- ('Moonachie', 'NJ', ARRAY[7608], 40.8409, -74.0590),
- ('Stroud', 'OK', ARRAY[74028], 35.7680, -96.6474),
- ('Timberville', 'VA', ARRAY[22853], 38.6340, -78.7730),
- ('Tusculum', 'TN', ARRAY[37745], 36.1750, -82.7454),
- ('Gastonville', 'PA', ARRAY[15336], 40.2669, -80.0095),
- ('Tilton', 'IL', ARRAY[61833, 61832], 40.0941, -87.6398),
- ('Riverton', 'NJ', ARRAY[8076], 40.0115, -75.0148),
- ('Grand Forks AFB', 'ND', ARRAY[58205], 47.9557, -97.3913),
- ('Riverview', 'DE', ARRAY[19943], 39.0293, -75.5202),
- ('Dupont', 'PA', ARRAY[18641], 41.3237, -75.7421),
- ('Circle D-KC Estates', 'TX', ARRAY[78659], 30.1611, -97.2349),
- ('Oronogo', 'MO', ARRAY[64855], 37.1917, -94.4639),
- ('Arcola', 'TX', ARRAY[77583], 29.5032, -95.4693),
- ('Folly Beach', 'SC', ARRAY[29412], 32.6693, -79.9500),
- ('Summerset', 'SD', ARRAY[57769], 44.1912, -103.3393),
- ('Pablo', 'MT', ARRAY[59864, 59860], 47.6035, -114.1059),
- ('Reidsville', 'GA', ARRAY[30499], 32.0871, -82.1244),
- ('De Leon Springs', 'FL', ARRAY[32130], 29.1172, -81.3517),
- ('Collierville', 'CA', ARRAY[95220], 38.2141, -121.2675),
- ('Gleed', 'WA', ARRAY[98908], 46.6594, -120.6025),
- ('Thunderbolt', 'GA', ARRAY[31410], 32.0339, -81.0480),
- ('Ridgeway', 'AK', ARRAY[99669], 60.5305, -151.0301),
- ('Clarcona', 'FL', ARRAY[32818], 28.6201, -81.5002),
- ('Glasco', 'NY', ARRAY[12432], 42.0461, -73.9487),
- ('Turley', 'OK', ARRAY[74126], 36.2473, -95.9654),
- ('Bella Vista', 'CA', ARRAY[96003], 40.6502, -122.2450),
- ('Holiday Shores', 'IL', ARRAY[62097], 38.9227, -89.9360),
- ('White Mountain Lake', 'AZ', ARRAY[85901], 34.3441, -109.9879),
- ('Marietta', 'PA', ARRAY[17547], 40.0574, -76.5515),
- ('Lexington Hills', 'CA', ARRAY[95026, 95044], 37.1616, -121.9879),
- ('Hoxie', 'AR', ARRAY[72476], 36.0360, -90.9736),
- ('Zephyrhills North', 'FL', ARRAY[33540], 28.2520, -82.1654),
- ('Peapack and Gladstone', 'NJ', ARRAY[7934, 7977], 40.7168, -74.6561),
- ('Gray Summit', 'MO', ARRAY[63069, 63055], 38.4951, -90.8173),
- ('East Prospect', 'PA', ARRAY[17368], 39.9710, -76.5215),
- ('Deenwood', 'GA', ARRAY[31503], 31.2476, -82.3677),
- ('Rockville', 'MN', ARRAY[56369, 56301], 45.4650, -94.3222),
- ('Vado', 'NM', ARRAY[88048], 32.1279, -106.6571),
- ('Brooks', 'KY', ARRAY[40109, 40165], 38.0656, -85.7178),
- ('Maine', 'WI', ARRAY[54417, 54452], 45.0497, -89.6816),
- ('La Fermina', 'PR', ARRAY[791], 18.1744, -65.8527),
- ('Edwards AFB', 'CA', ARRAY[93524], 34.9045, -117.9295),
- ('Williamsburg', 'OH', ARRAY[45176], 39.0556, -84.0478),
- ('Yorkville', 'NY', ARRAY[13495], 43.1124, -75.2739),
- ('Preston Heights', 'IL', ARRAY[60436], 41.4944, -88.0757),
- ('Indian Springs Village', 'AL', ARRAY[35124], 33.3591, -86.7493),
- ('Bakerstown', 'PA', ARRAY[15044], 40.6528, -79.9407),
- ('Wrightsville Beach', 'NC', ARRAY[28408], 34.2130, -77.7980),
- ('Woodside East', 'DE', ARRAY[19962], 39.0676, -75.5376),
- ('Princeton Junction', 'NJ', ARRAY[8540], 40.3207, -74.6236),
- ('Pacolet', 'SC', ARRAY[29373], 34.9100, -81.7666),
- ('McQueeney', 'TX', ARRAY[78155], 29.6000, -98.0439),
- ('Green Acres', 'CA', ARRAY[92596], 33.7350, -117.0782),
- ('Heber-Overgaard', 'AZ', ARRAY[85928], 34.4141, -110.5696),
- ('York Harbor', 'ME', ARRAY[3911], 43.1435, -70.6490),
- ('South Fallsburg', 'NY', ARRAY[12747, 12733], 41.7218, -74.6350),
- ('Haw River', 'NC', ARRAY[27258, 27217], 36.0925, -79.3616),
- ('Whitesboro', 'NJ', ARRAY[8252], 39.0417, -74.8674),
- ('Cannon AFB', 'NM', ARRAY[88103], 34.3885, -103.3185),
- ('Twain Harte', 'CA', ARRAY[95383], 38.0384, -120.2340),
- ('Downs', 'IL', ARRAY[61736], 40.3988, -88.8894),
- ('West Simsbury', 'CT', ARRAY[6070], 41.8747, -72.8448);
-
-INSERT INTO faker.dictionary (
- type,
- word
-) VALUES
- ('colors', 'amaranth'),
- ('colors', 'amber'),
- ('colors', 'amethyst'),
- ('colors', 'apricot'),
- ('colors', 'aqua'),
- ('colors', 'aquamarine'),
- ('colors', 'azure'),
- ('colors', 'beige'),
- ('colors', 'black'),
- ('colors', 'blue'),
- ('colors', 'blush'),
- ('colors', 'bronze'),
- ('colors', 'brown'),
- ('colors', 'chocolate'),
- ('colors', 'coffee'),
- ('colors', 'copper'),
- ('colors', 'coral'),
- ('colors', 'crimson'),
- ('colors', 'cyan'),
- ('colors', 'emerald'),
- ('colors', 'fuchsia'),
- ('colors', 'gold'),
- ('colors', 'gray'),
- ('colors', 'green'),
- ('colors', 'harlequin'),
- ('colors', 'indigo'),
- ('colors', 'ivory'),
- ('colors', 'jade'),
- ('colors', 'lavender'),
- ('colors', 'lime'),
- ('colors', 'magenta'),
- ('colors', 'maroon'),
- ('colors', 'moccasin'),
- ('colors', 'olive'),
- ('colors', 'orange'),
- ('colors', 'peach'),
- ('colors', 'pink'),
- ('colors', 'plum'),
- ('colors', 'purple'),
- ('colors', 'red'),
- ('colors', 'rose'),
- ('colors', 'salmon'),
- ('colors', 'sapphire'),
- ('colors', 'scarlet'),
- ('colors', 'silver'),
- ('colors', 'tan'),
- ('colors', 'teal'),
- ('colors', 'tomato'),
- ('colors', 'turquoise'),
- ('colors', 'violet'),
- ('colors', 'white'),
- ('colors', 'yellow'),
- ('stop', 'I'),
- ('stop', 'a'),
- ('stop', 'about'),
- ('stop', 'an'),
- ('stop', 'are'),
- ('stop', 'as'),
- ('stop', 'at'),
- ('stop', 'be'),
- ('stop', 'by'),
- ('stop', 'com'),
- ('stop', 'for'),
- ('stop', 'from'),
- ('stop', 'how'),
- ('stop', 'in'),
- ('stop', 'is'),
- ('stop', 'it'),
- ('stop', 'of'),
- ('stop', 'on'),
- ('stop', 'or'),
- ('stop', 'that'),
- ('stop', 'the'),
- ('stop', 'this'),
- ('stop', 'to'),
- ('stop', 'was'),
- ('stop', 'what'),
- ('stop', 'when'),
- ('stop', 'where'),
- ('stop', 'who'),
- ('stop', 'will'),
- ('stop', 'with'),
- ('stop', 'the'),
- ('bizsuffix', 'Inc.'),
- ('bizsuffix', 'Corp.'),
- ('bizsuffix', 'Co.'),
- ('bizsurname', 'Networks'),
- ('bizsurname', 'Systems'),
- ('bizsurname', 'Industries'),
- ('bizsurname', 'Corporation'),
- ('bizsurname', 'Tech'),
- ('bizsurname', 'Acoustics'),
- ('bizsurname', 'Lighting'),
- ('bizsurname', 'Partners'),
- ('bizsurname', 'Solutions'),
- ('bizsurname', 'Security'),
- ('bizsurname', 'Fund'),
- ('bizsurname', 'Software'),
- ('bizsurname', 'Bank'),
- ('bizsurname', 'Sports'),
- ('bizsurname', 'Technologies'),
- ('bizsurname', 'Media'),
- ('bizsurname', 'Capital'),
- ('bizsurname', 'Capital Partners'),
- ('bizsurname', 'Enterprises'),
- ('bizsurname', 'Electronics'),
- ('bizname', 'Sail'),
- ('bizname', 'Oak'),
- ('bizname', 'Spirit'),
- ('bizname', 'Thunder'),
- ('bizname', 'Saturn'),
- ('bizname', 'Angel'),
- ('bizname', 'Dream'),
- ('bizname', 'Sales'),
- ('bizname', 'Soul'),
- ('bizname', 'Wave'),
- ('bizname', 'Jewel'),
- ('bizname', 'Vine'),
- ('bizname', 'Day'),
- ('bizname', 'Micro'),
- ('bizname', 'Flux'),
- ('bizname', 'Seed'),
- ('bizname', 'Brand'),
- ('bizname', 'Blue'),
- ('bizname', 'Iron'),
- ('bizname', 'Famous'),
- ('bizname', 'Happy'),
- ('bizname', 'Umbrella'),
- ('bizname', 'Maple'),
- ('bizname', 'Hooli'),
- ('bizname', 'Lioness'),
- ('bizname', 'Touch'),
- ('bizname', 'Timber'),
- ('bizname', 'Jet'),
- ('bizname', 'Tulip'),
- ('bizname', 'Apache'),
- ('bizpostfix', 'tronics'),
- ('bizpostfix', 'works'),
- ('bizpostfix', 'dale'),
- ('bizpostfix', 'water'),
- ('bizpostfix', 'coms'),
- ('bizpostfix', 'records'),
- ('bizpostfix', 'page'),
- ('bizpostfix', 'space'),
- ('bizpostfix', 'bond'),
- ('bizpostfix', 'bit'),
- ('bizpostfix', 'point'),
- ('bizpostfix', 'cast'),
- ('bizpostfix', 'fire'),
- ('bizpostfix', 'arts'),
- ('bizpostfix', 'scape'),
- ('bizpostfix', 'bank'),
- ('bizpostfix', 'life'),
- ('bizpostfix', 'stone'),
- ('animals', 'canidae'),
- ('animals', 'felidae'),
- ('animals', 'cat'),
- ('animals', 'cattle'),
- ('animals', 'dog'),
- ('animals', 'donkey'),
- ('animals', 'goat'),
- ('animals', 'horse'),
- ('animals', 'pig'),
- ('animals', 'rabbit'),
- ('animals', 'aardvark'),
- ('animals', 'aardwolf'),
- ('animals', 'albatross'),
- ('animals', 'alligator'),
- ('animals', 'alpaca'),
- ('animals', 'amphibian'),
- ('animals', 'anaconda'),
- ('animals', 'angelfish'),
- ('animals', 'anglerfish'),
- ('animals', 'ant'),
- ('animals', 'anteater'),
- ('animals', 'antelope'),
- ('animals', 'antlion'),
- ('animals', 'ape'),
- ('animals', 'aphid'),
- ('animals', 'armadillo'),
- ('animals', 'asp'),
- ('animals', 'baboon'),
- ('animals', 'badger'),
- ('animals', 'bandicoot'),
- ('animals', 'barnacle'),
- ('animals', 'barracuda'),
- ('animals', 'basilisk'),
- ('animals', 'bass'),
- ('animals', 'bat'),
- ('animals', 'bear'),
- ('animals', 'beaver'),
- ('animals', 'bedbug'),
- ('animals', 'bee'),
- ('animals', 'beetle'),
- ('animals', 'bird'),
- ('animals', 'bison'),
- ('animals', 'blackbird'),
- ('animals', 'boa'),
- ('animals', 'boar'),
- ('animals', 'bobcat'),
- ('animals', 'bobolink'),
- ('animals', 'bonobo'),
- ('animals', 'booby'),
- ('animals', 'bovid'),
- ('animals', 'bug'),
- ('animals', 'butterfly'),
- ('animals', 'buzzard'),
- ('animals', 'camel'),
- ('animals', 'canid'),
- ('animals', 'capybara'),
- ('animals', 'cardinal'),
- ('animals', 'caribou'),
- ('animals', 'carp'),
- ('animals', 'cat'),
- ('animals', 'catshark'),
- ('animals', 'caterpillar'),
- ('animals', 'catfish'),
- ('animals', 'cattle'),
- ('animals', 'centipede'),
- ('animals', 'cephalopod'),
- ('animals', 'chameleon'),
- ('animals', 'cheetah'),
- ('animals', 'chickadee'),
- ('animals', 'chicken'),
- ('animals', 'chimpanzee'),
- ('animals', 'chinchilla'),
- ('animals', 'chipmunk'),
- ('animals', 'clam'),
- ('animals', 'clownfish'),
- ('animals', 'cobra'),
- ('animals', 'cockroach'),
- ('animals', 'cod'),
- ('animals', 'condor'),
- ('animals', 'constrictor'),
- ('animals', 'coral'),
- ('animals', 'cougar'),
- ('animals', 'cow'),
- ('animals', 'coyote'),
- ('animals', 'crab'),
- ('animals', 'crane'),
- ('animals', 'crawdad'),
- ('animals', 'crayfish'),
- ('animals', 'cricket'),
- ('animals', 'crocodile'),
- ('animals', 'crow'),
- ('animals', 'cuckoo'),
- ('animals', 'cicada'),
- ('animals', 'damselfly'),
- ('animals', 'deer'),
- ('animals', 'dingo'),
- ('animals', 'dinosaur'),
- ('animals', 'dog'),
- ('animals', 'dolphin'),
- ('animals', 'donkey'),
- ('animals', 'dormouse'),
- ('animals', 'dove'),
- ('animals', 'dragonfly'),
- ('animals', 'dragon'),
- ('animals', 'duck'),
- ('animals', 'eagle'),
- ('animals', 'earthworm'),
- ('animals', 'earwig'),
- ('animals', 'echidna'),
- ('animals', 'eel'),
- ('animals', 'egret'),
- ('animals', 'elephant'),
- ('animals', 'elk'),
- ('animals', 'emu'),
- ('animals', 'ermine'),
- ('animals', 'falcon'),
- ('animals', 'ferret'),
- ('animals', 'finch'),
- ('animals', 'firefly'),
- ('animals', 'fish'),
- ('animals', 'flamingo'),
- ('animals', 'flea'),
- ('animals', 'fly'),
- ('animals', 'flyingfish'),
- ('animals', 'fowl'),
- ('animals', 'fox'),
- ('animals', 'frog'),
- ('animals', 'gamefowl'),
- ('animals', 'galliform'),
- ('animals', 'gazelle'),
- ('animals', 'gecko'),
- ('animals', 'gerbil'),
- ('animals', 'gibbon'),
- ('animals', 'giraffe'),
- ('animals', 'goat'),
- ('animals', 'goldfish'),
- ('animals', 'goose'),
- ('animals', 'gopher'),
- ('animals', 'gorilla'),
- ('animals', 'grasshopper'),
- ('animals', 'grouse'),
- ('animals', 'guan'),
- ('animals', 'guanaco'),
- ('animals', 'guineafowl'),
- ('animals', 'gull'),
- ('animals', 'guppy'),
- ('animals', 'haddock'),
- ('animals', 'halibut'),
- ('animals', 'hamster'),
- ('animals', 'hare'),
- ('animals', 'harrier'),
- ('animals', 'hawk'),
- ('animals', 'hedgehog'),
- ('animals', 'heron'),
- ('animals', 'herring'),
- ('animals', 'hippopotamus'),
- ('animals', 'hookworm'),
- ('animals', 'hornet'),
- ('animals', 'horse'),
- ('animals', 'hoverfly'),
- ('animals', 'hummingbird'),
- ('animals', 'hyena'),
- ('animals', 'iguana'),
- ('animals', 'impala'),
- ('animals', 'jackal'),
- ('animals', 'jaguar'),
- ('animals', 'jay'),
- ('animals', 'jellyfish'),
- ('animals', 'junglefowl'),
- ('animals', 'kangaroo'),
- ('animals', 'kingfisher'),
- ('animals', 'kite'),
- ('animals', 'kiwi'),
- ('animals', 'koala'),
- ('animals', 'koi'),
- ('animals', 'krill'),
- ('animals', 'ladybug'),
- ('animals', 'lamprey'),
- ('animals', 'landfowl'),
- ('animals', 'lark'),
- ('animals', 'leech'),
- ('animals', 'lemming'),
- ('animals', 'lemur'),
- ('animals', 'leopard'),
- ('animals', 'leopon'),
- ('animals', 'limpet'),
- ('animals', 'lion'),
- ('animals', 'lizard'),
- ('animals', 'llama'),
- ('animals', 'lobster'),
- ('animals', 'locust'),
- ('animals', 'loon'),
- ('animals', 'louse'),
- ('animals', 'lungfish'),
- ('animals', 'lynx'),
- ('animals', 'macaw'),
- ('animals', 'mackerel'),
- ('animals', 'magpie'),
- ('animals', 'mammal'),
- ('animals', 'manatee'),
- ('animals', 'mandrill'),
- ('animals', 'marlin'),
- ('animals', 'marmoset'),
- ('animals', 'marmot'),
- ('animals', 'marsupial'),
- ('animals', 'marten'),
- ('animals', 'mastodon'),
- ('animals', 'meadowlark'),
- ('animals', 'meerkat'),
- ('animals', 'mink'),
- ('animals', 'minnow'),
- ('animals', 'mite'),
- ('animals', 'mockingbird'),
- ('animals', 'mole'),
- ('animals', 'mollusk'),
- ('animals', 'mongoose'),
- ('animals', 'monkey'),
- ('animals', 'moose'),
- ('animals', 'mosquito'),
- ('animals', 'moth'),
- ('animals', 'mouse'),
- ('animals', 'mule'),
- ('animals', 'muskox'),
- ('animals', 'narwhal'),
- ('animals', 'newt'),
- ('animals', 'nightingale'),
- ('animals', 'ocelot'),
- ('animals', 'octopus'),
- ('animals', 'opossum'),
- ('animals', 'orangutan'),
- ('animals', 'orca'),
- ('animals', 'ostrich'),
- ('animals', 'otter'),
- ('animals', 'owl'),
- ('animals', 'ox'),
- ('animals', 'panda'),
- ('animals', 'panther'),
- ('animals', 'parakeet'),
- ('animals', 'parrot'),
- ('animals', 'parrotfish'),
- ('animals', 'partridge'),
- ('animals', 'peacock'),
- ('animals', 'peafowl'),
- ('animals', 'pelican'),
- ('animals', 'penguin'),
- ('animals', 'perch'),
- ('animals', 'pheasant'),
- ('animals', 'pig'),
- ('animals', 'pigeon'),
- ('animals', 'pike'),
- ('animals', 'pinniped'),
- ('animals', 'piranha'),
- ('animals', 'planarian'),
- ('animals', 'platypus'),
- ('animals', 'pony'),
- ('animals', 'porcupine'),
- ('animals', 'porpoise'),
- ('animals', 'possum'),
- ('animals', 'prawn'),
- ('animals', 'primate'),
- ('animals', 'ptarmigan'),
- ('animals', 'puffin'),
- ('animals', 'puma'),
- ('animals', 'python'),
- ('animals', 'quail'),
- ('animals', 'quelea'),
- ('animals', 'quokka'),
- ('animals', 'rabbit'),
- ('animals', 'raccoon'),
- ('animals', 'rat'),
- ('animals', 'rattlesnake'),
- ('animals', 'raven'),
- ('animals', 'reindeer'),
- ('animals', 'reptile'),
- ('animals', 'rhinoceros'),
- ('animals', 'roadrunner'),
- ('animals', 'rodent'),
- ('animals', 'rook'),
- ('animals', 'rooster'),
- ('animals', 'roundworm'),
- ('animals', 'sailfish'),
- ('animals', 'salamander'),
- ('animals', 'salmon'),
- ('animals', 'sawfish'),
- ('animals', 'scallop'),
- ('animals', 'scorpion'),
- ('animals', 'seahorse'),
- ('animals', 'shark'),
- ('animals', 'sheep'),
- ('animals', 'shrew'),
- ('animals', 'shrimp'),
- ('animals', 'silkworm'),
- ('animals', 'silverfish'),
- ('animals', 'skink'),
- ('animals', 'skunk'),
- ('animals', 'sloth'),
- ('animals', 'slug'),
- ('animals', 'smelt'),
- ('animals', 'snail'),
- ('animals', 'snake'),
- ('animals', 'snipe'),
- ('animals', 'sole'),
- ('animals', 'sparrow'),
- ('animals', 'spider'),
- ('animals', 'spoonbill'),
- ('animals', 'squid'),
- ('animals', 'squirrel'),
- ('animals', 'starfish'),
- ('animals', 'stingray'),
- ('animals', 'stoat'),
- ('animals', 'stork'),
- ('animals', 'sturgeon'),
- ('animals', 'swallow'),
- ('animals', 'swan'),
- ('animals', 'swift'),
- ('animals', 'swordfish'),
- ('animals', 'swordtail'),
- ('animals', 'tahr'),
- ('animals', 'takin'),
- ('animals', 'tapir'),
- ('animals', 'tarantula'),
- ('animals', 'tarsier'),
- ('animals', 'termite'),
- ('animals', 'tern'),
- ('animals', 'thrush'),
- ('animals', 'tick'),
- ('animals', 'tiger'),
- ('animals', 'tiglon'),
- ('animals', 'toad'),
- ('animals', 'tortoise'),
- ('animals', 'toucan'),
- ('animals', 'trout'),
- ('animals', 'tuna'),
- ('animals', 'turkey'),
- ('animals', 'turtle'),
- ('animals', 'tyrannosaurus'),
- ('animals', 'urial'),
- ('animals', 'vicuna'),
- ('animals', 'viper'),
- ('animals', 'vole'),
- ('animals', 'vulture'),
- ('animals', 'wallaby'),
- ('animals', 'walrus'),
- ('animals', 'wasp'),
- ('animals', 'warbler'),
- ('animals', 'weasel'),
- ('animals', 'whale'),
- ('animals', 'whippet'),
- ('animals', 'whitefish'),
- ('animals', 'wildcat'),
- ('animals', 'wildebeest'),
- ('animals', 'wildfowl'),
- ('animals', 'wolf'),
- ('animals', 'wolverine'),
- ('animals', 'wombat'),
- ('animals', 'woodpecker'),
- ('animals', 'worm'),
- ('animals', 'wren'),
- ('animals', 'xerinae'),
- ('animals', 'yak'),
- ('animals', 'zebra'),
- ('animals', 'alpaca'),
- ('animals', 'cat'),
- ('animals', 'cattle'),
- ('animals', 'chicken'),
- ('animals', 'dog'),
- ('animals', 'donkey'),
- ('animals', 'ferret'),
- ('animals', 'gayal'),
- ('animals', 'goldfish'),
- ('animals', 'guppy'),
- ('animals', 'horse'),
- ('animals', 'koi'),
- ('animals', 'llama'),
- ('animals', 'sheep'),
- ('animals', 'yak'),
- ('animals', 'unicorn'),
- ('adjectives', 'average'),
- ('adjectives', 'big'),
- ('adjectives', 'colossal'),
- ('adjectives', 'fat'),
- ('adjectives', 'giant'),
- ('adjectives', 'gigantic'),
- ('adjectives', 'great'),
- ('adjectives', 'huge'),
- ('adjectives', 'immense'),
- ('adjectives', 'large'),
- ('adjectives', 'little'),
- ('adjectives', 'long'),
- ('adjectives', 'mammoth'),
- ('adjectives', 'massive'),
- ('adjectives', 'miniature'),
- ('adjectives', 'petite'),
- ('adjectives', 'puny'),
- ('adjectives', 'short'),
- ('adjectives', 'small'),
- ('adjectives', 'tall'),
- ('adjectives', 'tiny'),
- ('adjectives', 'boiling'),
- ('adjectives', 'breezy'),
- ('adjectives', 'broken'),
- ('adjectives', 'bumpy'),
- ('adjectives', 'chilly'),
- ('adjectives', 'cold'),
- ('adjectives', 'cool'),
- ('adjectives', 'creepy'),
- ('adjectives', 'crooked'),
- ('adjectives', 'cuddly'),
- ('adjectives', 'curly'),
- ('adjectives', 'damaged'),
- ('adjectives', 'damp'),
- ('adjectives', 'dirty'),
- ('adjectives', 'dry'),
- ('adjectives', 'dusty'),
- ('adjectives', 'filthy'),
- ('adjectives', 'flaky'),
- ('adjectives', 'fluffy'),
- ('adjectives', 'wet'),
- ('adjectives', 'broad'),
- ('adjectives', 'chubby'),
- ('adjectives', 'crooked'),
- ('adjectives', 'curved'),
- ('adjectives', 'deep'),
- ('adjectives', 'flat'),
- ('adjectives', 'high'),
- ('adjectives', 'hollow'),
- ('adjectives', 'low'),
- ('adjectives', 'narrow'),
- ('adjectives', 'round'),
- ('adjectives', 'shallow'),
- ('adjectives', 'skinny'),
- ('adjectives', 'square'),
- ('adjectives', 'steep'),
- ('adjectives', 'straight'),
- ('adjectives', 'wide'),
- ('adjectives', 'ancient'),
- ('adjectives', 'brief'),
- ('adjectives', 'early'),
- ('adjectives', 'fast'),
- ('adjectives', 'late'),
- ('adjectives', 'long'),
- ('adjectives', 'modern'),
- ('adjectives', 'old'),
- ('adjectives', 'quick'),
- ('adjectives', 'rapid'),
- ('adjectives', 'short'),
- ('adjectives', 'slow'),
- ('adjectives', 'swift'),
- ('adjectives', 'young'),
- ('adjectives', 'abundant'),
- ('adjectives', 'empty'),
- ('adjectives', 'few'),
- ('adjectives', 'heavy'),
- ('adjectives', 'light'),
- ('adjectives', 'many'),
- ('adjectives', 'numerous'),
- ('adjectives', 'Sound'),
- ('adjectives', 'cooing'),
- ('adjectives', 'deafening'),
- ('adjectives', 'faint'),
- ('adjectives', 'harsh'),
- ('adjectives', 'hissing'),
- ('adjectives', 'hushed'),
- ('adjectives', 'husky'),
- ('adjectives', 'loud'),
- ('adjectives', 'melodic'),
- ('adjectives', 'moaning'),
- ('adjectives', 'mute'),
- ('adjectives', 'noisy'),
- ('adjectives', 'purring'),
- ('adjectives', 'quiet'),
- ('adjectives', 'raspy'),
- ('adjectives', 'resonant'),
- ('adjectives', 'screeching'),
- ('adjectives', 'shrill'),
- ('adjectives', 'silent'),
- ('adjectives', 'soft'),
- ('adjectives', 'squealing'),
- ('adjectives', 'thundering'),
- ('adjectives', 'voiceless'),
- ('adjectives', 'whispering'),
- ('adjectives', 'bitter'),
- ('adjectives', 'delicious'),
- ('adjectives', 'fresh'),
- ('adjectives', 'juicy'),
- ('adjectives', 'ripe'),
- ('adjectives', 'rotten'),
- ('adjectives', 'salty'),
- ('adjectives', 'sour'),
- ('adjectives', 'spicy'),
- ('adjectives', 'stale'),
- ('adjectives', 'sticky'),
- ('adjectives', 'strong'),
- ('adjectives', 'sweet'),
- ('adjectives', 'tasteless'),
- ('adjectives', 'tasty'),
- ('adjectives', 'thirsty'),
- ('adjectives', 'fluttering'),
- ('adjectives', 'fuzzy'),
- ('adjectives', 'greasy'),
- ('adjectives', 'grubby'),
- ('adjectives', 'hard'),
- ('adjectives', 'hot'),
- ('adjectives', 'icy'),
- ('adjectives', 'loose'),
- ('adjectives', 'melted'),
- ('adjectives', 'plastic'),
- ('adjectives', 'prickly'),
- ('adjectives', 'rainy'),
- ('adjectives', 'rough'),
- ('adjectives', 'scattered'),
- ('adjectives', 'shaggy'),
- ('adjectives', 'shaky'),
- ('adjectives', 'sharp'),
- ('adjectives', 'shivering'),
- ('adjectives', 'silky'),
- ('adjectives', 'slimy'),
- ('adjectives', 'slippery'),
- ('adjectives', 'smooth'),
- ('adjectives', 'soft'),
- ('adjectives', 'solid'),
- ('adjectives', 'steady'),
- ('adjectives', 'sticky'),
- ('adjectives', 'tender'),
- ('adjectives', 'tight'),
- ('adjectives', 'uneven'),
- ('adjectives', 'weak'),
- ('adjectives', 'wet'),
- ('adjectives', 'wooden'),
- ('adjectives', 'afraid'),
- ('adjectives', 'angry'),
- ('adjectives', 'annoyed'),
- ('adjectives', 'anxious'),
- ('adjectives', 'arrogant'),
- ('adjectives', 'ashamed'),
- ('adjectives', 'awful'),
- ('adjectives', 'bad'),
- ('adjectives', 'bewildered'),
- ('adjectives', 'bored'),
- ('adjectives', 'combative'),
- ('adjectives', 'condemned'),
- ('adjectives', 'confused'),
- ('adjectives', 'creepy'),
- ('adjectives', 'cruel'),
- ('adjectives', 'dangerous'),
- ('adjectives', 'defeated'),
- ('adjectives', 'defiant'),
- ('adjectives', 'depressed'),
- ('adjectives', 'disgusted'),
- ('adjectives', 'disturbed'),
- ('adjectives', 'eerie'),
- ('adjectives', 'embarrassed'),
- ('adjectives', 'envious'),
- ('adjectives', 'evil'),
- ('adjectives', 'fierce'),
- ('adjectives', 'foolish'),
- ('adjectives', 'frantic'),
- ('adjectives', 'frightened'),
- ('adjectives', 'grieving'),
- ('adjectives', 'helpless'),
- ('adjectives', 'homeless'),
- ('adjectives', 'hungry'),
- ('adjectives', 'hurt'),
- ('adjectives', 'ill'),
- ('adjectives', 'jealous'),
- ('adjectives', 'lonely'),
- ('adjectives', 'mysterious'),
- ('adjectives', 'naughty'),
- ('adjectives', 'nervous'),
- ('adjectives', 'obnoxious'),
- ('adjectives', 'outrageous'),
- ('adjectives', 'panicky'),
- ('adjectives', 'repulsive'),
- ('adjectives', 'scary'),
- ('adjectives', 'scornful'),
- ('adjectives', 'selfish'),
- ('adjectives', 'sore'),
- ('adjectives', 'tense'),
- ('adjectives', 'terrible'),
- ('adjectives', 'thoughtless'),
- ('adjectives', 'tired'),
- ('adjectives', 'troubled'),
- ('adjectives', 'upset'),
- ('adjectives', 'uptight'),
- ('adjectives', 'weary'),
- ('adjectives', 'wicked'),
- ('adjectives', 'worried'),
- ('adjectives', 'agreeable'),
- ('adjectives', 'amused'),
- ('adjectives', 'brave'),
- ('adjectives', 'calm'),
- ('adjectives', 'charming'),
- ('adjectives', 'cheerful'),
- ('adjectives', 'comfortable'),
- ('adjectives', 'cooperative'),
- ('adjectives', 'courageous'),
- ('adjectives', 'delightful'),
- ('adjectives', 'determined'),
- ('adjectives', 'eager'),
- ('adjectives', 'elated'),
- ('adjectives', 'enchanting'),
- ('adjectives', 'encouraging'),
- ('adjectives', 'energetic'),
- ('adjectives', 'enthusiastic'),
- ('adjectives', 'excited'),
- ('adjectives', 'exuberant'),
- ('adjectives', 'fair'),
- ('adjectives', 'faithful'),
- ('adjectives', 'fantastic'),
- ('adjectives', 'fine'),
- ('adjectives', 'friendly'),
- ('adjectives', 'funny'),
- ('adjectives', 'gentle'),
- ('adjectives', 'glorious'),
- ('adjectives', 'good'),
- ('adjectives', 'happy'),
- ('adjectives', 'healthy'),
- ('adjectives', 'helpful'),
- ('adjectives', 'hilarious'),
- ('adjectives', 'jolly'),
- ('adjectives', 'joyous'),
- ('adjectives', 'kind'),
- ('adjectives', 'lively'),
- ('adjectives', 'lovely'),
- ('adjectives', 'lucky'),
- ('adjectives', 'obedient'),
- ('adjectives', 'perfect'),
- ('adjectives', 'pleasant'),
- ('adjectives', 'proud'),
- ('adjectives', 'relieved'),
- ('adjectives', 'silly'),
- ('adjectives', 'smiling'),
- ('adjectives', 'splendid'),
- ('adjectives', 'successful'),
- ('adjectives', 'thoughtful'),
- ('adjectives', 'victorious'),
- ('adjectives', 'vivacious'),
- ('adjectives', 'witty'),
- ('adjectives', 'wonderful'),
- ('adjectives', 'zealous'),
- ('adjectives', 'zany'),
- ('adjectives', 'other'),
- ('adjectives', 'good'),
- ('adjectives', 'new'),
- ('adjectives', 'old'),
- ('adjectives', 'great'),
- ('adjectives', 'high'),
- ('adjectives', 'small'),
- ('adjectives', 'different'),
- ('adjectives', 'large'),
- ('adjectives', 'local'),
- ('adjectives', 'social'),
- ('adjectives', 'important'),
- ('adjectives', 'long'),
- ('adjectives', 'young'),
- ('adjectives', 'national'),
- ('adjectives', 'british'),
- ('adjectives', 'right'),
- ('adjectives', 'early'),
- ('adjectives', 'possible'),
- ('adjectives', 'big'),
- ('adjectives', 'little'),
- ('adjectives', 'political'),
- ('adjectives', 'able'),
- ('adjectives', 'late'),
- ('adjectives', 'general'),
- ('adjectives', 'full'),
- ('adjectives', 'far'),
- ('adjectives', 'low'),
- ('adjectives', 'public'),
- ('adjectives', 'available'),
- ('adjectives', 'bad'),
- ('adjectives', 'main'),
- ('adjectives', 'sure'),
- ('adjectives', 'clear'),
- ('adjectives', 'major'),
- ('adjectives', 'economic'),
- ('adjectives', 'only'),
- ('adjectives', 'likely'),
- ('adjectives', 'real'),
- ('adjectives', 'black'),
- ('adjectives', 'particular'),
- ('adjectives', 'international'),
- ('adjectives', 'special'),
- ('adjectives', 'difficult'),
- ('adjectives', 'certain'),
- ('adjectives', 'open'),
- ('adjectives', 'whole'),
- ('adjectives', 'white'),
- ('adjectives', 'free'),
- ('adjectives', 'short'),
- ('adjectives', 'easy'),
- ('adjectives', 'strong'),
- ('adjectives', 'european'),
- ('adjectives', 'central'),
- ('adjectives', 'similar'),
- ('adjectives', 'human'),
- ('adjectives', 'common'),
- ('adjectives', 'necessary'),
- ('adjectives', 'single'),
- ('adjectives', 'personal'),
- ('adjectives', 'hard'),
- ('adjectives', 'private'),
- ('adjectives', 'poor'),
- ('adjectives', 'financial'),
- ('adjectives', 'wide'),
- ('adjectives', 'foreign'),
- ('adjectives', 'simple'),
- ('adjectives', 'recent'),
- ('adjectives', 'concerned'),
- ('adjectives', 'american'),
- ('adjectives', 'various'),
- ('adjectives', 'close'),
- ('adjectives', 'fine'),
- ('adjectives', 'english'),
- ('adjectives', 'wrong'),
- ('adjectives', 'present'),
- ('adjectives', 'royal'),
- ('adjectives', 'natural'),
- ('adjectives', 'individual'),
- ('adjectives', 'nice'),
- ('adjectives', 'french'),
- ('adjectives', 'following'),
- ('adjectives', 'current'),
- ('adjectives', 'modern'),
- ('adjectives', 'labour'),
- ('adjectives', 'legal'),
- ('adjectives', 'happy'),
- ('adjectives', 'final'),
- ('adjectives', 'red'),
- ('adjectives', 'normal'),
- ('adjectives', 'serious'),
- ('adjectives', 'previous'),
- ('adjectives', 'total'),
- ('adjectives', 'prime'),
- ('adjectives', 'significant'),
- ('adjectives', 'industrial'),
- ('adjectives', 'sorry'),
- ('adjectives', 'dead'),
- ('adjectives', 'specific'),
- ('adjectives', 'appropriate'),
- ('adjectives', 'top'),
- ('adjectives', 'soviet'),
- ('adjectives', 'basic'),
- ('adjectives', 'military'),
- ('adjectives', 'original'),
- ('adjectives', 'successful'),
- ('adjectives', 'aware'),
- ('adjectives', 'hon'),
- ('adjectives', 'popular'),
- ('adjectives', 'heavy'),
- ('adjectives', 'professional'),
- ('adjectives', 'direct'),
- ('adjectives', 'dark'),
- ('adjectives', 'cold'),
- ('adjectives', 'ready'),
- ('adjectives', 'green'),
- ('adjectives', 'useful'),
- ('adjectives', 'effective'),
- ('adjectives', 'western'),
- ('adjectives', 'traditional'),
- ('adjectives', 'scottish'),
- ('adjectives', 'german'),
- ('adjectives', 'independent'),
- ('adjectives', 'deep'),
- ('adjectives', 'interesting'),
- ('adjectives', 'considerable'),
- ('adjectives', 'involved'),
- ('adjectives', 'physical'),
- ('adjectives', 'left'),
- ('adjectives', 'hot'),
- ('adjectives', 'existing'),
- ('adjectives', 'responsible'),
- ('adjectives', 'complete'),
- ('adjectives', 'medical'),
- ('adjectives', 'blue'),
- ('adjectives', 'extra'),
- ('adjectives', 'past'),
- ('adjectives', 'male'),
- ('adjectives', 'interested'),
- ('adjectives', 'fair'),
- ('adjectives', 'essential'),
- ('adjectives', 'beautiful'),
- ('adjectives', 'civil'),
- ('adjectives', 'primary'),
- ('adjectives', 'obvious'),
- ('adjectives', 'future'),
- ('adjectives', 'environmental'),
- ('adjectives', 'positive'),
- ('adjectives', 'senior'),
- ('adjectives', 'nuclear'),
- ('adjectives', 'annual'),
- ('adjectives', 'relevant'),
- ('adjectives', 'huge'),
- ('adjectives', 'rich'),
- ('adjectives', 'commercial'),
- ('adjectives', 'safe'),
- ('adjectives', 'regional'),
- ('adjectives', 'practical'),
- ('adjectives', 'official'),
- ('adjectives', 'separate'),
- ('adjectives', 'key'),
- ('adjectives', 'chief'),
- ('adjectives', 'regular'),
- ('adjectives', 'due'),
- ('adjectives', 'additional'),
- ('adjectives', 'active'),
- ('adjectives', 'powerful'),
- ('adjectives', 'complex'),
- ('adjectives', 'standard'),
- ('adjectives', 'impossible'),
- ('adjectives', 'light'),
- ('adjectives', 'warm'),
- ('adjectives', 'middle'),
- ('adjectives', 'fresh'),
- ('adjectives', 'sexual'),
- ('adjectives', 'front'),
- ('adjectives', 'domestic'),
- ('adjectives', 'actual'),
- ('adjectives', 'united'),
- ('adjectives', 'technical'),
- ('adjectives', 'ordinary'),
- ('adjectives', 'cheap'),
- ('adjectives', 'strange'),
- ('adjectives', 'internal'),
- ('adjectives', 'excellent'),
- ('adjectives', 'quiet'),
- ('adjectives', 'soft'),
- ('adjectives', 'potential'),
- ('adjectives', 'northern'),
- ('adjectives', 'religious'),
- ('adjectives', 'quick'),
- ('adjectives', 'very'),
- ('adjectives', 'famous'),
- ('adjectives', 'cultural'),
- ('adjectives', 'proper'),
- ('adjectives', 'broad'),
- ('adjectives', 'joint'),
- ('adjectives', 'formal'),
- ('adjectives', 'limited'),
- ('adjectives', 'conservative'),
- ('adjectives', 'lovely'),
- ('adjectives', 'usual'),
- ('adjectives', 'ltd'),
- ('adjectives', 'unable'),
- ('adjectives', 'rural'),
- ('adjectives', 'initial'),
- ('adjectives', 'substantial'),
- ('adjectives', 'christian'),
- ('adjectives', 'bright'),
- ('adjectives', 'average'),
- ('adjectives', 'leading'),
- ('adjectives', 'reasonable'),
- ('adjectives', 'immediate'),
- ('adjectives', 'suitable'),
- ('adjectives', 'equal'),
- ('adjectives', 'detailed'),
- ('adjectives', 'working'),
- ('adjectives', 'overall'),
- ('adjectives', 'female'),
- ('adjectives', 'afraid'),
- ('adjectives', 'democratic'),
- ('adjectives', 'growing'),
- ('adjectives', 'sufficient'),
- ('adjectives', 'scientific'),
- ('adjectives', 'eastern'),
- ('adjectives', 'correct'),
- ('adjectives', 'inc'),
- ('adjectives', 'irish'),
- ('adjectives', 'expensive'),
- ('adjectives', 'educational'),
- ('adjectives', 'mental'),
- ('adjectives', 'dangerous'),
- ('adjectives', 'critical'),
- ('adjectives', 'increased'),
- ('adjectives', 'familiar'),
- ('adjectives', 'unlikely'),
- ('adjectives', 'double'),
- ('adjectives', 'perfect'),
- ('adjectives', 'slow'),
- ('adjectives', 'tiny'),
- ('adjectives', 'dry'),
- ('adjectives', 'historical'),
- ('adjectives', 'thin'),
- ('adjectives', 'daily'),
- ('adjectives', 'southern'),
- ('adjectives', 'increasing'),
- ('adjectives', 'wild'),
- ('adjectives', 'alone'),
- ('adjectives', 'urban'),
- ('adjectives', 'empty'),
- ('adjectives', 'married'),
- ('adjectives', 'narrow'),
- ('adjectives', 'liberal'),
- ('adjectives', 'supposed'),
- ('adjectives', 'upper'),
- ('adjectives', 'apparent'),
- ('adjectives', 'tall'),
- ('adjectives', 'busy'),
- ('adjectives', 'bloody'),
- ('adjectives', 'prepared'),
- ('adjectives', 'russian'),
- ('adjectives', 'moral'),
- ('adjectives', 'careful'),
- ('adjectives', 'clean'),
- ('adjectives', 'attractive'),
- ('adjectives', 'japanese'),
- ('adjectives', 'vital'),
- ('adjectives', 'thick'),
- ('adjectives', 'alternative'),
- ('adjectives', 'fast'),
- ('adjectives', 'ancient'),
- ('adjectives', 'elderly'),
- ('adjectives', 'rare'),
- ('adjectives', 'external'),
- ('adjectives', 'capable'),
- ('adjectives', 'brief'),
- ('adjectives', 'wonderful'),
- ('adjectives', 'grand'),
- ('adjectives', 'typical'),
- ('adjectives', 'entire'),
- ('adjectives', 'grey'),
- ('adjectives', 'constant'),
- ('adjectives', 'vast'),
- ('adjectives', 'surprised'),
- ('adjectives', 'ideal'),
- ('adjectives', 'terrible'),
- ('adjectives', 'academic'),
- ('adjectives', 'funny'),
- ('adjectives', 'minor'),
- ('adjectives', 'pleased'),
- ('adjectives', 'severe'),
- ('adjectives', 'ill'),
- ('adjectives', 'corporate'),
- ('adjectives', 'negative'),
- ('adjectives', 'permanent'),
- ('adjectives', 'weak'),
- ('adjectives', 'brown'),
- ('adjectives', 'fundamental'),
- ('adjectives', 'odd'),
- ('adjectives', 'crucial'),
- ('adjectives', 'inner'),
- ('adjectives', 'used'),
- ('adjectives', 'criminal'),
- ('adjectives', 'contemporary'),
- ('adjectives', 'sharp'),
- ('adjectives', 'sick'),
- ('adjectives', 'near'),
- ('adjectives', 'roman'),
- ('adjectives', 'massive'),
- ('adjectives', 'unique'),
- ('adjectives', 'secondary'),
- ('adjectives', 'parliamentary'),
- ('adjectives', 'african'),
- ('adjectives', 'unknown'),
- ('adjectives', 'subsequent'),
- ('adjectives', 'angry'),
- ('adjectives', 'alive'),
- ('adjectives', 'guilty'),
- ('adjectives', 'lucky'),
- ('adjectives', 'enormous'),
- ('adjectives', 'well'),
- ('adjectives', 'communist'),
- ('adjectives', 'yellow'),
- ('adjectives', 'unusual'),
- ('adjectives', 'net'),
- ('adjectives', 'tough'),
- ('adjectives', 'dear'),
- ('adjectives', 'extensive'),
- ('adjectives', 'glad'),
- ('adjectives', 'remaining'),
- ('adjectives', 'agricultural'),
- ('adjectives', 'alright'),
- ('adjectives', 'healthy'),
- ('adjectives', 'italian'),
- ('adjectives', 'principal'),
- ('adjectives', 'tired'),
- ('adjectives', 'efficient'),
- ('adjectives', 'comfortable'),
- ('adjectives', 'chinese'),
- ('adjectives', 'relative'),
- ('adjectives', 'friendly'),
- ('adjectives', 'conventional'),
- ('adjectives', 'willing'),
- ('adjectives', 'sudden'),
- ('adjectives', 'proposed'),
- ('adjectives', 'voluntary'),
- ('adjectives', 'slight'),
- ('adjectives', 'valuable'),
- ('adjectives', 'dramatic'),
- ('adjectives', 'golden'),
- ('adjectives', 'temporary'),
- ('adjectives', 'federal'),
- ('adjectives', 'keen'),
- ('adjectives', 'flat'),
- ('adjectives', 'silent'),
- ('adjectives', 'indian'),
- ('adjectives', 'worried'),
- ('adjectives', 'pale'),
- ('adjectives', 'statutory'),
- ('adjectives', 'welsh'),
- ('adjectives', 'dependent'),
- ('adjectives', 'firm'),
- ('adjectives', 'wet'),
- ('adjectives', 'competitive'),
- ('adjectives', 'armed'),
- ('adjectives', 'radical'),
- ('adjectives', 'outside'),
- ('adjectives', 'acceptable'),
- ('adjectives', 'sensitive'),
- ('adjectives', 'living'),
- ('adjectives', 'pure'),
- ('adjectives', 'global'),
- ('adjectives', 'emotional'),
- ('adjectives', 'sad'),
- ('adjectives', 'secret'),
- ('adjectives', 'rapid'),
- ('adjectives', 'adequate'),
- ('adjectives', 'fixed'),
- ('adjectives', 'sweet'),
- ('adjectives', 'administrative'),
- ('adjectives', 'wooden'),
- ('adjectives', 'remarkable'),
- ('adjectives', 'comprehensive'),
- ('adjectives', 'surprising'),
- ('adjectives', 'solid'),
- ('adjectives', 'rough'),
- ('adjectives', 'mere'),
- ('adjectives', 'mass'),
- ('adjectives', 'brilliant'),
- ('adjectives', 'maximum'),
- ('adjectives', 'absolute'),
- ('adjectives', 'tory'),
- ('adjectives', 'electronic'),
- ('adjectives', 'visual'),
- ('adjectives', 'electric'),
- ('adjectives', 'cool'),
- ('adjectives', 'spanish'),
- ('adjectives', 'literary'),
- ('adjectives', 'continuing'),
- ('adjectives', 'supreme'),
- ('adjectives', 'chemical'),
- ('adjectives', 'genuine'),
- ('adjectives', 'exciting'),
- ('adjectives', 'written'),
- ('adjectives', 'stupid'),
- ('adjectives', 'advanced'),
- ('adjectives', 'extreme'),
- ('adjectives', 'classical'),
- ('adjectives', 'fit'),
- ('adjectives', 'favourite'),
- ('adjectives', 'socialist'),
- ('adjectives', 'widespread'),
- ('adjectives', 'confident'),
- ('adjectives', 'straight'),
- ('adjectives', 'catholic'),
- ('adjectives', 'proud'),
- ('adjectives', 'numerous'),
- ('adjectives', 'opposite'),
- ('adjectives', 'distinct'),
- ('adjectives', 'mad'),
- ('adjectives', 'helpful'),
- ('adjectives', 'given'),
- ('adjectives', 'disabled'),
- ('adjectives', 'consistent'),
- ('adjectives', 'anxious'),
- ('adjectives', 'nervous'),
- ('adjectives', 'awful'),
- ('adjectives', 'stable'),
- ('adjectives', 'constitutional'),
- ('adjectives', 'satisfied'),
- ('adjectives', 'conscious'),
- ('adjectives', 'developing'),
- ('adjectives', 'strategic'),
- ('adjectives', 'holy'),
- ('adjectives', 'smooth'),
- ('adjectives', 'dominant'),
- ('adjectives', 'remote'),
- ('adjectives', 'theoretical'),
- ('adjectives', 'outstanding'),
- ('adjectives', 'pink'),
- ('adjectives', 'pretty'),
- ('adjectives', 'clinical'),
- ('adjectives', 'minimum'),
- ('adjectives', 'honest'),
- ('adjectives', 'impressive'),
- ('adjectives', 'related'),
- ('adjectives', 'residential'),
- ('adjectives', 'extraordinary'),
- ('adjectives', 'plain'),
- ('adjectives', 'visible'),
- ('adjectives', 'accurate'),
- ('adjectives', 'distant'),
- ('adjectives', 'still'),
- ('adjectives', 'greek'),
- ('adjectives', 'complicated'),
- ('adjectives', 'musical'),
- ('adjectives', 'precise'),
- ('adjectives', 'gentle'),
- ('adjectives', 'broken'),
- ('adjectives', 'live'),
- ('adjectives', 'silly'),
- ('adjectives', 'fat'),
- ('adjectives', 'tight'),
- ('adjectives', 'monetary'),
- ('adjectives', 'round'),
- ('adjectives', 'psychological'),
- ('adjectives', 'violent'),
- ('adjectives', 'unemployed'),
- ('adjectives', 'inevitable'),
- ('adjectives', 'junior'),
- ('adjectives', 'sensible'),
- ('adjectives', 'grateful'),
- ('adjectives', 'pleasant'),
- ('adjectives', 'dirty'),
- ('adjectives', 'structural'),
- ('adjectives', 'welcome'),
- ('adjectives', 'deaf'),
- ('adjectives', 'above'),
- ('adjectives', 'continuous'),
- ('adjectives', 'blind'),
- ('adjectives', 'overseas'),
- ('adjectives', 'mean'),
- ('adjectives', 'entitled'),
- ('adjectives', 'delighted'),
- ('adjectives', 'loose'),
- ('adjectives', 'occasional'),
- ('adjectives', 'evident'),
- ('adjectives', 'desperate'),
- ('adjectives', 'fellow'),
- ('adjectives', 'universal'),
- ('adjectives', 'square'),
- ('adjectives', 'steady'),
- ('adjectives', 'classic'),
- ('adjectives', 'equivalent'),
- ('adjectives', 'intellectual'),
- ('adjectives', 'victorian'),
- ('adjectives', 'level'),
- ('adjectives', 'ultimate'),
- ('adjectives', 'creative'),
- ('adjectives', 'lost'),
- ('adjectives', 'medieval'),
- ('adjectives', 'clever'),
- ('adjectives', 'linguistic'),
- ('adjectives', 'convinced'),
- ('adjectives', 'judicial'),
- ('adjectives', 'raw'),
- ('adjectives', 'sophisticated'),
- ('adjectives', 'asleep'),
- ('adjectives', 'vulnerable'),
- ('adjectives', 'illegal'),
- ('adjectives', 'outer'),
- ('adjectives', 'revolutionary'),
- ('adjectives', 'bitter'),
- ('adjectives', 'changing'),
- ('adjectives', 'australian'),
- ('adjectives', 'native'),
- ('adjectives', 'imperial'),
- ('adjectives', 'strict'),
- ('adjectives', 'wise'),
- ('adjectives', 'informal'),
- ('adjectives', 'flexible'),
- ('adjectives', 'collective'),
- ('adjectives', 'frequent'),
- ('adjectives', 'experimental'),
- ('adjectives', 'spiritual'),
- ('adjectives', 'intense'),
- ('adjectives', 'rational'),
- ('adjectives', 'ethnic'),
- ('adjectives', 'generous'),
- ('adjectives', 'inadequate'),
- ('adjectives', 'prominent'),
- ('adjectives', 'logical'),
- ('adjectives', 'bare'),
- ('adjectives', 'historic'),
- ('adjectives', 'modest'),
- ('adjectives', 'dutch'),
- ('adjectives', 'acute'),
- ('adjectives', 'electrical'),
- ('adjectives', 'valid'),
- ('adjectives', 'weekly'),
- ('adjectives', 'gross'),
- ('adjectives', 'automatic'),
- ('adjectives', 'loud'),
- ('adjectives', 'reliable'),
- ('adjectives', 'mutual'),
- ('adjectives', 'liable'),
- ('adjectives', 'multiple'),
- ('adjectives', 'ruling'),
- ('adjectives', 'curious'),
- ('adjectives', 'arab'),
- ('adjectives', 'sole'),
- ('adjectives', 'jewish'),
- ('adjectives', 'managing'),
- ('adjectives', 'pregnant'),
- ('adjectives', 'latin'),
- ('adjectives', 'nearby'),
- ('adjectives', 'exact'),
- ('adjectives', 'underlying'),
- ('adjectives', 'identical'),
- ('adjectives', 'satisfactory'),
- ('adjectives', 'marginal'),
- ('adjectives', 'distinctive'),
- ('adjectives', 'electoral'),
- ('adjectives', 'urgent'),
- ('adjectives', 'presidential'),
- ('adjectives', 'controversial'),
- ('adjectives', 'oral'),
- ('adjectives', 'everyday'),
- ('adjectives', 'encouraging'),
- ('adjectives', 'organic'),
- ('adjectives', 'continued'),
- ('adjectives', 'expected'),
- ('adjectives', 'statistical'),
- ('adjectives', 'desirable'),
- ('adjectives', 'innocent'),
- ('adjectives', 'improved'),
- ('adjectives', 'exclusive'),
- ('adjectives', 'marked'),
- ('adjectives', 'experienced'),
- ('adjectives', 'unexpected'),
- ('adjectives', 'superb'),
- ('adjectives', 'sheer'),
- ('adjectives', 'disappointed'),
- ('adjectives', 'frightened'),
- ('adjectives', 'gastric'),
- ('adjectives', 'capitalist'),
- ('adjectives', 'romantic'),
- ('adjectives', 'naked'),
- ('adjectives', 'reluctant'),
- ('adjectives', 'magnificent'),
- ('adjectives', 'convenient'),
- ('adjectives', 'established'),
- ('adjectives', 'closed'),
- ('adjectives', 'uncertain'),
- ('adjectives', 'artificial'),
- ('adjectives', 'diplomatic'),
- ('adjectives', 'tremendous'),
- ('adjectives', 'marine'),
- ('adjectives', 'mechanical'),
- ('adjectives', 'retail'),
- ('adjectives', 'institutional'),
- ('adjectives', 'mixed'),
- ('adjectives', 'required'),
- ('adjectives', 'biological'),
- ('adjectives', 'known'),
- ('adjectives', 'functional'),
- ('adjectives', 'straightforward'),
- ('adjectives', 'superior'),
- ('adjectives', 'digital'),
- ('adjectives', 'spectacular'),
- ('adjectives', 'unhappy'),
- ('adjectives', 'confused'),
- ('adjectives', 'unfair'),
- ('adjectives', 'aggressive'),
- ('adjectives', 'spare'),
- ('adjectives', 'painful'),
- ('adjectives', 'abstract'),
- ('adjectives', 'asian'),
- ('adjectives', 'associated'),
- ('adjectives', 'legislative'),
- ('adjectives', 'monthly'),
- ('adjectives', 'intelligent'),
- ('adjectives', 'hungry'),
- ('adjectives', 'explicit'),
- ('adjectives', 'nasty'),
- ('adjectives', 'just'),
- ('adjectives', 'faint'),
- ('adjectives', 'coloured'),
- ('adjectives', 'ridiculous'),
- ('adjectives', 'amazing'),
- ('adjectives', 'comparable'),
- ('adjectives', 'successive'),
- ('adjectives', 'realistic'),
- ('adjectives', 'back'),
- ('adjectives', 'decent'),
- ('adjectives', 'unnecessary'),
- ('adjectives', 'flying'),
- ('adjectives', 'random'),
- ('adjectives', 'influential'),
- ('adjectives', 'dull'),
- ('adjectives', 'genetic'),
- ('adjectives', 'neat'),
- ('adjectives', 'marvellous'),
- ('adjectives', 'crazy'),
- ('adjectives', 'damp'),
- ('adjectives', 'giant'),
- ('adjectives', 'secure'),
- ('adjectives', 'bottom'),
- ('adjectives', 'skilled'),
- ('adjectives', 'subtle'),
- ('adjectives', 'elegant'),
- ('adjectives', 'brave'),
- ('adjectives', 'lesser'),
- ('adjectives', 'parallel'),
- ('adjectives', 'steep'),
- ('adjectives', 'intensive'),
- ('adjectives', 'casual'),
- ('adjectives', 'tropical'),
- ('adjectives', 'lonely'),
- ('adjectives', 'partial'),
- ('adjectives', 'preliminary'),
- ('adjectives', 'concrete'),
- ('adjectives', 'alleged'),
- ('adjectives', 'assistant'),
- ('adjectives', 'vertical'),
- ('adjectives', 'upset'),
- ('adjectives', 'delicate'),
- ('adjectives', 'mild'),
- ('adjectives', 'occupational'),
- ('adjectives', 'excessive'),
- ('adjectives', 'progressive'),
- ('adjectives', 'iraqi'),
- ('adjectives', 'exceptional'),
- ('adjectives', 'integrated'),
- ('adjectives', 'striking'),
- ('adjectives', 'continental'),
- ('adjectives', 'okay'),
- ('adjectives', 'harsh'),
- ('adjectives', 'combined'),
- ('adjectives', 'fierce'),
- ('adjectives', 'handsome'),
- ('adjectives', 'characteristic'),
- ('adjectives', 'chronic'),
- ('adjectives', 'compulsory'),
- ('adjectives', 'interim'),
- ('adjectives', 'objective'),
- ('adjectives', 'splendid'),
- ('adjectives', 'magic'),
- ('adjectives', 'systematic'),
- ('adjectives', 'obliged'),
- ('adjectives', 'payable'),
- ('adjectives', 'fun'),
- ('adjectives', 'horrible'),
- ('adjectives', 'primitive'),
- ('adjectives', 'fascinating'),
- ('adjectives', 'ideological'),
- ('adjectives', 'metropolitan'),
- ('adjectives', 'surrounding'),
- ('adjectives', 'estimated'),
- ('adjectives', 'peaceful'),
- ('adjectives', 'premier'),
- ('adjectives', 'operational'),
- ('adjectives', 'technological'),
- ('adjectives', 'kind'),
- ('adjectives', 'advisory'),
- ('adjectives', 'hostile'),
- ('adjectives', 'precious'),
- ('adjectives', 'gay'),
- ('adjectives', 'accessible'),
- ('adjectives', 'determined'),
- ('adjectives', 'excited'),
- ('adjectives', 'impressed'),
- ('adjectives', 'provincial'),
- ('adjectives', 'smart'),
- ('adjectives', 'endless'),
- ('adjectives', 'isolated'),
- ('adjectives', 'drunk'),
- ('adjectives', 'geographical'),
- ('adjectives', 'like'),
- ('adjectives', 'dynamic'),
- ('adjectives', 'boring'),
- ('adjectives', 'forthcoming'),
- ('adjectives', 'unfortunate'),
- ('adjectives', 'definite'),
- ('adjectives', 'super'),
- ('adjectives', 'notable'),
- ('adjectives', 'indirect'),
- ('adjectives', 'stiff'),
- ('adjectives', 'wealthy'),
- ('adjectives', 'awkward'),
- ('adjectives', 'lively'),
- ('adjectives', 'neutral'),
- ('adjectives', 'artistic'),
- ('adjectives', 'content'),
- ('adjectives', 'mature'),
- ('adjectives', 'colonial'),
- ('adjectives', 'ambitious'),
- ('adjectives', 'evil'),
- ('adjectives', 'magnetic'),
- ('adjectives', 'verbal'),
- ('adjectives', 'legitimate'),
- ('adjectives', 'sympathetic'),
- ('adjectives', 'empirical'),
- ('adjectives', 'head'),
- ('adjectives', 'shallow'),
- ('adjectives', 'vague'),
- ('adjectives', 'naval'),
- ('adjectives', 'depressed'),
- ('adjectives', 'shared'),
- ('adjectives', 'added'),
- ('adjectives', 'shocked'),
- ('adjectives', 'mid'),
- ('adjectives', 'worthwhile'),
- ('adjectives', 'qualified'),
- ('adjectives', 'missing'),
- ('adjectives', 'blank'),
- ('adjectives', 'absent'),
- ('adjectives', 'favourable'),
- ('adjectives', 'polish'),
- ('adjectives', 'israeli'),
- ('adjectives', 'developed'),
- ('adjectives', 'profound'),
- ('adjectives', 'representative'),
- ('adjectives', 'enthusiastic'),
- ('adjectives', 'dreadful'),
- ('adjectives', 'rigid'),
- ('adjectives', 'reduced'),
- ('adjectives', 'cruel'),
- ('adjectives', 'coastal'),
- ('adjectives', 'peculiar'),
- ('adjectives', 'racial'),
- ('adjectives', 'ugly'),
- ('adjectives', 'swiss'),
- ('adjectives', 'crude'),
- ('adjectives', 'extended'),
- ('adjectives', 'selected'),
- ('adjectives', 'eager'),
- ('adjectives', 'feminist'),
- ('adjectives', 'canadian'),
- ('adjectives', 'bold'),
- ('adjectives', 'relaxed'),
- ('adjectives', 'corresponding'),
- ('adjectives', 'running'),
- ('adjectives', 'planned'),
- ('adjectives', 'applicable'),
- ('adjectives', 'immense'),
- ('adjectives', 'allied'),
- ('adjectives', 'comparative'),
- ('adjectives', 'uncomfortable'),
- ('adjectives', 'conservation'),
- ('adjectives', 'productive'),
- ('adjectives', 'beneficial'),
- ('adjectives', 'bored'),
- ('adjectives', 'charming'),
- ('adjectives', 'minimal'),
- ('adjectives', 'mobile'),
- ('adjectives', 'turkish'),
- ('adjectives', 'orange'),
- ('adjectives', 'rear'),
- ('adjectives', 'passive'),
- ('adjectives', 'suspicious'),
- ('adjectives', 'overwhelming'),
- ('adjectives', 'fatal'),
- ('adjectives', 'resulting'),
- ('adjectives', 'symbolic'),
- ('adjectives', 'registered'),
- ('adjectives', 'neighbouring'),
- ('adjectives', 'calm'),
- ('adjectives', 'irrelevant'),
- ('adjectives', 'patient'),
- ('adjectives', 'compact'),
- ('adjectives', 'profitable'),
- ('adjectives', 'rival'),
- ('adjectives', 'loyal'),
- ('adjectives', 'moderate'),
- ('adjectives', 'distinguished'),
- ('adjectives', 'interior'),
- ('adjectives', 'noble'),
- ('adjectives', 'insufficient'),
- ('adjectives', 'eligible'),
- ('adjectives', 'mysterious'),
- ('adjectives', 'varying'),
- ('adjectives', 'managerial'),
- ('adjectives', 'molecular'),
- ('adjectives', 'olympic'),
- ('adjectives', 'linear'),
- ('adjectives', 'prospective'),
- ('adjectives', 'printed'),
- ('adjectives', 'parental'),
- ('adjectives', 'diverse'),
- ('adjectives', 'elaborate'),
- ('adjectives', 'furious'),
- ('adjectives', 'fiscal'),
- ('adjectives', 'burning'),
- ('adjectives', 'useless'),
- ('adjectives', 'semantic'),
- ('adjectives', 'embarrassed'),
- ('adjectives', 'inherent'),
- ('adjectives', 'philosophical'),
- ('adjectives', 'deliberate'),
- ('adjectives', 'awake'),
- ('adjectives', 'variable'),
- ('adjectives', 'promising'),
- ('adjectives', 'unpleasant'),
- ('adjectives', 'varied'),
- ('adjectives', 'sacred'),
- ('adjectives', 'selective'),
- ('adjectives', 'inclined'),
- ('adjectives', 'tender'),
- ('adjectives', 'hidden'),
- ('adjectives', 'worthy'),
- ('adjectives', 'intermediate'),
- ('adjectives', 'sound'),
- ('adjectives', 'protective'),
- ('adjectives', 'fortunate'),
- ('adjectives', 'slim'),
- ('adjectives', 'islamic'),
- ('adjectives', 'defensive'),
- ('adjectives', 'divine'),
- ('adjectives', 'stuck'),
- ('adjectives', 'driving'),
- ('adjectives', 'invisible'),
- ('adjectives', 'misleading'),
- ('adjectives', 'circular'),
- ('adjectives', 'mathematical'),
- ('adjectives', 'inappropriate'),
- ('adjectives', 'liquid'),
- ('adjectives', 'persistent'),
- ('adjectives', 'solar'),
- ('adjectives', 'doubtful'),
- ('adjectives', 'manual'),
- ('adjectives', 'architectural'),
- ('adjectives', 'intact'),
- ('adjectives', 'incredible'),
- ('adjectives', 'devoted'),
- ('adjectives', 'prior'),
- ('adjectives', 'tragic'),
- ('adjectives', 'respectable'),
- ('adjectives', 'optimistic'),
- ('adjectives', 'convincing'),
- ('adjectives', 'unacceptable'),
- ('adjectives', 'decisive'),
- ('adjectives', 'competent'),
- ('adjectives', 'spatial'),
- ('adjectives', 'respective'),
- ('adjectives', 'binding'),
- ('adjectives', 'relieved'),
- ('adjectives', 'nursing'),
- ('adjectives', 'toxic'),
- ('adjectives', 'select'),
- ('adjectives', 'redundant'),
- ('adjectives', 'integral'),
- ('adjectives', 'then'),
- ('adjectives', 'probable'),
- ('adjectives', 'amateur'),
- ('adjectives', 'fond'),
- ('adjectives', 'passing'),
- ('adjectives', 'specified'),
- ('adjectives', 'territorial'),
- ('adjectives', 'horizontal'),
- ('adjectives', 'inland'),
- ('adjectives', 'cognitive'),
- ('adjectives', 'regulatory'),
- ('adjectives', 'miserable'),
- ('adjectives', 'resident'),
- ('adjectives', 'polite'),
- ('adjectives', 'scared'),
- ('adjectives', 'marxist'),
- ('adjectives', 'gothic'),
- ('adjectives', 'civilian'),
- ('adjectives', 'instant'),
- ('adjectives', 'lengthy'),
- ('adjectives', 'adverse'),
- ('adjectives', 'korean'),
- ('adjectives', 'unconscious'),
- ('adjectives', 'anonymous'),
- ('adjectives', 'aesthetic'),
- ('adjectives', 'orthodox'),
- ('adjectives', 'static'),
- ('adjectives', 'unaware'),
- ('adjectives', 'costly'),
- ('adjectives', 'fantastic'),
- ('adjectives', 'foolish'),
- ('adjectives', 'fashionable'),
- ('adjectives', 'causal'),
- ('adjectives', 'compatible'),
- ('adjectives', 'wee'),
- ('adjectives', 'implicit'),
- ('adjectives', 'dual'),
- ('adjectives', 'ok'),
- ('adjectives', 'cheerful'),
- ('adjectives', 'subjective'),
- ('adjectives', 'forward'),
- ('adjectives', 'surviving'),
- ('adjectives', 'exotic'),
- ('adjectives', 'purple'),
- ('adjectives', 'cautious'),
- ('adjectives', 'visiting'),
- ('adjectives', 'aggregate'),
- ('adjectives', 'ethical'),
- ('adjectives', 'protestant'),
- ('adjectives', 'teenage'),
- ('adjectives', 'dying'),
- ('adjectives', 'disastrous'),
- ('adjectives', 'delicious'),
- ('adjectives', 'confidential'),
- ('adjectives', 'underground'),
- ('adjectives', 'thorough'),
- ('adjectives', 'grim'),
- ('adjectives', 'autonomous'),
- ('adjectives', 'atomic'),
- ('adjectives', 'frozen'),
- ('adjectives', 'colourful'),
- ('adjectives', 'injured'),
- ('adjectives', 'uniform'),
- ('adjectives', 'ashamed'),
- ('adjectives', 'glorious'),
- ('adjectives', 'wicked'),
- ('adjectives', 'coherent'),
- ('adjectives', 'rising'),
- ('adjectives', 'shy'),
- ('adjectives', 'novel'),
- ('adjectives', 'balanced'),
- ('adjectives', 'delightful'),
- ('adjectives', 'arbitrary'),
- ('adjectives', 'adjacent'),
- ('adjectives', 'psychiatric'),
- ('adjectives', 'worrying'),
- ('adjectives', 'weird'),
- ('adjectives', 'unchanged'),
- ('adjectives', 'rolling'),
- ('adjectives', 'evolutionary'),
- ('adjectives', 'intimate'),
- ('adjectives', 'sporting'),
- ('adjectives', 'disciplinary'),
- ('adjectives', 'formidable'),
- ('adjectives', 'lexical'),
- ('adjectives', 'noisy'),
- ('adjectives', 'gradual'),
- ('adjectives', 'accused'),
- ('adjectives', 'homeless'),
- ('adjectives', 'supporting'),
- ('adjectives', 'coming'),
- ('adjectives', 'renewed'),
- ('adjectives', 'excess'),
- ('adjectives', 'retired'),
- ('adjectives', 'rubber'),
- ('adjectives', 'chosen'),
- ('adjectives', 'outdoor'),
- ('adjectives', 'embarrassing'),
- ('adjectives', 'preferred'),
- ('adjectives', 'bizarre'),
- ('adjectives', 'appalling'),
- ('adjectives', 'agreed'),
- ('adjectives', 'imaginative'),
- ('adjectives', 'governing'),
- ('adjectives', 'accepted'),
- ('adjectives', 'vocational'),
- ('adjectives', 'palestinian'),
- ('adjectives', 'mighty'),
- ('adjectives', 'puzzled'),
- ('adjectives', 'worldwide'),
- ('adjectives', 'handicapped'),
- ('adjectives', 'organisational'),
- ('adjectives', 'sunny'),
- ('adjectives', 'eldest'),
- ('adjectives', 'eventual'),
- ('adjectives', 'spontaneous'),
- ('adjectives', 'vivid'),
- ('adjectives', 'rude'),
- ('adjectives', 'faithful'),
- ('adjectives', 'ministerial'),
- ('adjectives', 'innovative'),
- ('adjectives', 'controlled'),
- ('adjectives', 'conceptual'),
- ('adjectives', 'unwilling'),
- ('adjectives', 'civic'),
- ('adjectives', 'meaningful'),
- ('adjectives', 'disturbing'),
- ('adjectives', 'alive'),
- ('adjectives', 'brainy'),
- ('adjectives', 'breakable'),
- ('adjectives', 'busy'),
- ('adjectives', 'careful'),
- ('adjectives', 'cautious'),
- ('adjectives', 'clever'),
- ('adjectives', 'concerned'),
- ('adjectives', 'crazy'),
- ('adjectives', 'curious'),
- ('adjectives', 'dead'),
- ('adjectives', 'different'),
- ('adjectives', 'difficult'),
- ('adjectives', 'doubtful'),
- ('adjectives', 'easy'),
- ('adjectives', 'famous'),
- ('adjectives', 'fragile'),
- ('adjectives', 'helpful'),
- ('adjectives', 'helpless'),
- ('adjectives', 'important'),
- ('adjectives', 'impossible'),
- ('adjectives', 'innocent'),
- ('adjectives', 'inquisitive'),
- ('adjectives', 'modern'),
- ('adjectives', 'open'),
- ('adjectives', 'outstanding'),
- ('adjectives', 'poor'),
- ('adjectives', 'powerful'),
- ('adjectives', 'puzzled'),
- ('adjectives', 'real'),
- ('adjectives', 'rich'),
- ('adjectives', 'shy'),
- ('adjectives', 'sleepy'),
- ('adjectives', 'stupid'),
- ('adjectives', 'super'),
- ('adjectives', 'tame'),
- ('adjectives', 'uninterested'),
- ('adjectives', 'wandering'),
- ('adjectives', 'wild'),
- ('adjectives', 'wrong'),
- ('adjectives', 'adorable'),
- ('adjectives', 'alert'),
- ('adjectives', 'average'),
- ('adjectives', 'beautiful'),
- ('adjectives', 'blonde'),
- ('adjectives', 'bloody'),
- ('adjectives', 'blushing'),
- ('adjectives', 'bright'),
- ('adjectives', 'clean'),
- ('adjectives', 'clear'),
- ('adjectives', 'cloudy'),
- ('adjectives', 'colorful'),
- ('adjectives', 'crowded'),
- ('adjectives', 'cute'),
- ('adjectives', 'dark'),
- ('adjectives', 'drab'),
- ('adjectives', 'distinct'),
- ('adjectives', 'dull'),
- ('adjectives', 'elegant'),
- ('adjectives', 'fancy'),
- ('adjectives', 'filthy'),
- ('adjectives', 'glamorous'),
- ('adjectives', 'gleaming'),
- ('adjectives', 'graceful'),
- ('adjectives', 'grotesque'),
- ('adjectives', 'homely'),
- ('adjectives', 'light'),
- ('adjectives', 'misty'),
- ('adjectives', 'motionless'),
- ('adjectives', 'muddy'),
- ('adjectives', 'plain'),
- ('adjectives', 'poised'),
- ('adjectives', 'quaint'),
- ('adjectives', 'shiny'),
- ('adjectives', 'smoggy'),
- ('adjectives', 'sparkling'),
- ('adjectives', 'spotless'),
- ('adjectives', 'stormy'),
- ('adjectives', 'strange'),
- ('adjectives', 'ugly'),
- ('adjectives', 'unsightly'),
- ('adjectives', 'unusual'),
- ('adjectives', 'bad'),
- ('adjectives', 'better'),
- ('adjectives', 'beautiful'),
- ('adjectives', 'big'),
- ('adjectives', 'black'),
- ('adjectives', 'blue'),
- ('adjectives', 'bright'),
- ('adjectives', 'clumsy'),
- ('adjectives', 'crazy'),
- ('adjectives', 'dizzy'),
- ('adjectives', 'dull'),
- ('adjectives', 'fat'),
- ('adjectives', 'frail'),
- ('adjectives', 'friendly'),
- ('adjectives', 'funny'),
- ('adjectives', 'great'),
- ('adjectives', 'green'),
- ('adjectives', 'gigantic'),
- ('adjectives', 'gorgeous'),
- ('adjectives', 'grumpy'),
- ('adjectives', 'handsome'),
- ('adjectives', 'happy'),
- ('adjectives', 'horrible'),
- ('adjectives', 'itchy'),
- ('adjectives', 'jittery'),
- ('adjectives', 'jolly'),
- ('adjectives', 'kind'),
- ('adjectives', 'long'),
- ('adjectives', 'lazy'),
- ('adjectives', 'magnificent'),
- ('adjectives', 'magenta'),
- ('adjectives', 'many'),
- ('adjectives', 'mighty'),
- ('adjectives', 'mushy'),
- ('adjectives', 'nasty'),
- ('adjectives', 'new'),
- ('adjectives', 'nice'),
- ('adjectives', 'nosy'),
- ('adjectives', 'nutty'),
- ('adjectives', 'nutritious'),
- ('adjectives', 'odd'),
- ('adjectives', 'orange'),
- ('adjectives', 'ordinary'),
- ('adjectives', 'pretty'),
- ('adjectives', 'precious'),
- ('adjectives', 'prickly'),
- ('adjectives', 'purple'),
- ('adjectives', 'quaint'),
- ('adjectives', 'quiet'),
- ('adjectives', 'quick'),
- ('adjectives', 'quickest'),
- ('adjectives', 'rainy'),
- ('adjectives', 'rare'),
- ('adjectives', 'ratty'),
- ('adjectives', 'red'),
- ('adjectives', 'roasted'),
- ('adjectives', 'robust'),
- ('adjectives', 'round'),
- ('adjectives', 'sad'),
- ('adjectives', 'scary'),
- ('adjectives', 'scrawny'),
- ('adjectives', 'short'),
- ('adjectives', 'silly'),
- ('adjectives', 'stingy'),
- ('adjectives', 'strange'),
- ('adjectives', 'striped'),
- ('adjectives', 'spotty'),
- ('adjectives', 'tart'),
- ('adjectives', 'tall'),
- ('adjectives', 'tame'),
- ('adjectives', 'tan'),
- ('adjectives', 'tender'),
- ('adjectives', 'testy'),
- ('adjectives', 'tricky'),
- ('adjectives', 'tough'),
- ('adjectives', 'ugly'),
- ('adjectives', 'ugliest'),
- ('adjectives', 'vast'),
- ('adjectives', 'watery'),
- ('adjectives', 'wasteful'),
- ('adjectives', 'wonderful'),
- ('adjectives', 'yellow'),
- ('adjectives', 'yummy'),
- ('adjectives', 'zany'),
- ('lorem', 'aenean'),
- ('lorem', 'aliquam'),
- ('lorem', 'class'),
- ('lorem', 'cras'),
- ('lorem', 'curabitur'),
- ('lorem', 'donec'),
- ('lorem', 'duis'),
- ('lorem', 'etiam'),
- ('lorem', 'fusce'),
- ('lorem', 'in'),
- ('lorem', 'integer'),
- ('lorem', 'interdum'),
- ('lorem', 'lorem'),
- ('lorem', 'maecenas'),
- ('lorem', 'mauris'),
- ('lorem', 'morbi'),
- ('lorem', 'nam'),
- ('lorem', 'nulla'),
- ('lorem', 'nullam'),
- ('lorem', 'nunc'),
- ('lorem', 'pellentesque'),
- ('lorem', 'phasellus'),
- ('lorem', 'praesent'),
- ('lorem', 'proin'),
- ('lorem', 'quisque'),
- ('lorem', 'sed'),
- ('lorem', 'suspendisse'),
- ('lorem', 'ut'),
- ('lorem', 'vestibulum'),
- ('lorem', 'vivamus'),
- ('lorem', 'a'),
- ('lorem', 'ac'),
- ('lorem', 'accumsan'),
- ('lorem', 'ad'),
- ('lorem', 'adipiscing'),
- ('lorem', 'aliquam'),
- ('lorem', 'aliquet'),
- ('lorem', 'amet'),
- ('lorem', 'ante'),
- ('lorem', 'aptent'),
- ('lorem', 'arcu'),
- ('lorem', 'at'),
- ('lorem', 'auctor'),
- ('lorem', 'augue'),
- ('lorem', 'bibendum'),
- ('lorem', 'blandit'),
- ('lorem', 'commodo'),
- ('lorem', 'condimentum'),
- ('lorem', 'congue'),
- ('lorem', 'consectetur'),
- ('lorem', 'consequat'),
- ('lorem', 'conubia'),
- ('lorem', 'convallis'),
- ('lorem', 'cubilia'),
- ('lorem', 'curae;'),
- ('lorem', 'cursus'),
- ('lorem', 'dapibus'),
- ('lorem', 'diam'),
- ('lorem', 'dictum'),
- ('lorem', 'dictumst'),
- ('lorem', 'dignissim'),
- ('lorem', 'dolor'),
- ('lorem', 'dui'),
- ('lorem', 'efficitur'),
- ('lorem', 'egestas'),
- ('lorem', 'eget'),
- ('lorem', 'eleifend'),
- ('lorem', 'elementum'),
- ('lorem', 'elit'),
- ('lorem', 'enim'),
- ('lorem', 'erat'),
- ('lorem', 'eros'),
- ('lorem', 'est'),
- ('lorem', 'et'),
- ('lorem', 'eu'),
- ('lorem', 'euismod'),
- ('lorem', 'ex'),
- ('lorem', 'facilisi'),
- ('lorem', 'facilisis'),
- ('lorem', 'fames'),
- ('lorem', 'faucibus'),
- ('lorem', 'felis'),
- ('lorem', 'fermentum'),
- ('lorem', 'feugiat'),
- ('lorem', 'finibus'),
- ('lorem', 'fringilla'),
- ('lorem', 'gravida'),
- ('lorem', 'habitant'),
- ('lorem', 'habitasse'),
- ('lorem', 'hac'),
- ('lorem', 'hendrerit'),
- ('lorem', 'himenaeos'),
- ('lorem', 'iaculis'),
- ('lorem', 'id'),
- ('lorem', 'imperdiet'),
- ('lorem', 'in'),
- ('lorem', 'inceptos'),
- ('lorem', 'interdum'),
- ('lorem', 'ipsum'),
- ('lorem', 'justo'),
- ('lorem', 'lacinia'),
- ('lorem', 'lacus'),
- ('lorem', 'laoreet'),
- ('lorem', 'lectus'),
- ('lorem', 'leo'),
- ('lorem', 'libero'),
- ('lorem', 'ligula'),
- ('lorem', 'litora'),
- ('lorem', 'lobortis'),
- ('lorem', 'lorem'),
- ('lorem', 'luctus'),
- ('lorem', 'magna'),
- ('lorem', 'malesuada'),
- ('lorem', 'massa'),
- ('lorem', 'mattis'),
- ('lorem', 'mauris'),
- ('lorem', 'maximus'),
- ('lorem', 'metus'),
- ('lorem', 'mi'),
- ('lorem', 'molestie'),
- ('lorem', 'mollis'),
- ('lorem', 'morbi'),
- ('lorem', 'nec'),
- ('lorem', 'neque'),
- ('lorem', 'netus'),
- ('lorem', 'nibh'),
- ('lorem', 'nisi'),
- ('lorem', 'nisl'),
- ('lorem', 'non'),
- ('lorem', 'nostra'),
- ('lorem', 'nulla'),
- ('lorem', 'nunc'),
- ('lorem', 'odio'),
- ('lorem', 'orci'),
- ('lorem', 'ornare'),
- ('lorem', 'pellentesque'),
- ('lorem', 'per'),
- ('lorem', 'pharetra'),
- ('lorem', 'placerat'),
- ('lorem', 'platea'),
- ('lorem', 'porta'),
- ('lorem', 'porttitor'),
- ('lorem', 'posuere'),
- ('lorem', 'pretium'),
- ('lorem', 'primis'),
- ('lorem', 'pulvinar'),
- ('lorem', 'purus'),
- ('lorem', 'quam'),
- ('lorem', 'quis'),
- ('lorem', 'rhoncus'),
- ('lorem', 'risus'),
- ('lorem', 'rutrum'),
- ('lorem', 'sagittis'),
- ('lorem', 'sapien'),
- ('lorem', 'scelerisque'),
- ('lorem', 'sed'),
- ('lorem', 'sem'),
- ('lorem', 'semper'),
- ('lorem', 'senectus'),
- ('lorem', 'sit'),
- ('lorem', 'sociosqu'),
- ('lorem', 'sodales'),
- ('lorem', 'sollicitudin'),
- ('lorem', 'suscipit'),
- ('lorem', 'taciti'),
- ('lorem', 'tellus'),
- ('lorem', 'tempor'),
- ('lorem', 'tempus'),
- ('lorem', 'tincidunt'),
- ('lorem', 'torquent'),
- ('lorem', 'tortor'),
- ('lorem', 'tristique'),
- ('lorem', 'turpis'),
- ('lorem', 'ullamcorper'),
- ('lorem', 'ultrices'),
- ('lorem', 'ultricies'),
- ('lorem', 'urna'),
- ('lorem', 'ut'),
- ('lorem', 'varius'),
- ('lorem', 'vehicula'),
- ('lorem', 'vel'),
- ('lorem', 'velit'),
- ('lorem', 'venenatis'),
- ('lorem', 'vestibulum'),
- ('lorem', 'vitae'),
- ('lorem', 'viverra'),
- ('lorem', 'volutpat'),
- ('lorem', 'vulputate'),
- ('mime', 'audio/mpeg'),
- ('mime', 'application/epub+zip'),
- ('mime', 'application/font-woff'),
- ('mime', 'application/font-woff2'),
- ('mime', 'application/javascript'),
- ('mime', 'application/json'),
- ('mime', 'application/pdf'),
- ('mime', 'application/vnd.oasis.opendocument.spreadsheet'),
- ('mime', 'application/vnd.oasis.opendocument.text'),
- ('mime', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'),
- ('mime', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'),
- ('mime', 'application/x-font-opentype'),
- ('mime', 'application/x-font-ttf'),
- ('mime', 'application/x-gzip'),
- ('mime', 'application/x-shockwave-flash'),
- ('mime', 'application/x-sql'),
- ('mime', 'application/zip'),
- ('mime', 'image/emf'),
- ('mime', 'image/gif'),
- ('mime', 'image/jpeg'),
- ('mime', 'image/png'),
- ('mime', 'image/svg+xml'),
- ('mime', 'image/tiff'),
- ('mime', 'image/vnd.adobe.photoshop'),
- ('mime', 'image/vnd.dwg'),
- ('mime', 'image/vnd.dxf'),
- ('mime', 'image/wmf'),
- ('mime', 'image/x-ms-bmp'),
- ('mime', 'image/x-pict'),
- ('mime', 'image/x-tga'),
- ('mime', 'text/css'),
- ('mime', 'text/csv'),
- ('mime', 'text/html'),
- ('mime', 'text/jsx'),
- ('mime', 'text/less'),
- ('mime', 'text/markdown'),
- ('mime', 'text/plain'),
- ('mime', 'text/tab-separated-values'),
- ('mime', 'text/x-scss'),
- ('mime', 'text/x-shellscript'),
- ('mime', 'text/x-typescript'),
- ('mime', 'text/yaml'),
- ('mime', 'video/mp4'),
- ('audio/mpeg', 'mp3'),
- ('application/epub+zip', 'zip'),
- ('application/font-woff', 'woff'),
- ('application/font-woff2', 'woff2'),
- ('application/javascript', 'js'),
- ('application/json', 'json'),
- ('application/pdf', 'pdf'),
- ('application/vnd.oasis.opendocument.spreadsheet', 'xls'),
- ('application/vnd.oasis.opendocument.text', 'txt'),
- ('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'xls'),
- ('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'doc'),
- ('application/x-font-opentype', 'opentype'),
- ('application/x-font-ttf', 'ttf'),
- ('application/x-gzip', 'gzip'),
- ('application/x-shockwave-flash', 'swf'),
- ('application/x-sql', 'sql'),
- ('application/zip', 'zip'),
- ('image/emf', 'emf'),
- ('image/gif', 'gif'),
- ('image/jpeg', 'jpeg'),
- ('image/jpeg', 'jpg'),
- ('image/png', 'png'),
- ('image/svg+xml', 'svg'),
- ('image/tiff', 'tiff'),
- ('image/vnd.adobe.photoshop', 'psd'),
- ('image/vnd.dwg', 'dwg'),
- ('image/vnd.dxf', 'dxf'),
- ('image/wmf', 'wmf'),
- ('image/x-ms-bmp', 'bmp'),
- ('image/x-pict', 'pict'),
- ('image/x-tga', 'tga'),
- ('text/css', 'css'),
- ('text/csv', 'csv'),
- ('text/html', 'html'),
- ('text/html', 'htm'),
- ('text/jsx', 'jsx'),
- ('text/less', 'less'),
- ('text/markdown', 'md'),
- ('text/plain', 'txt'),
- ('text/tab-separated-values', 'csv'),
- ('text/tab-separated-values', 'tsv'),
- ('text/x-scss', 'scss'),
- ('text/x-shellscript', 'sh'),
- ('text/x-typescript', 'ts'),
- ('text/x-typescript', 'tsx'),
- ('text/yaml', 'yaml'),
- ('text/yaml', 'yml'),
- ('video/mp4', 'mp4'),
- ('surname', 'smith'),
- ('surname', 'johnson'),
- ('surname', 'williams'),
- ('surname', 'brown'),
- ('surname', 'jones'),
- ('surname', 'garcia'),
- ('surname', 'miller'),
- ('surname', 'davis'),
- ('surname', 'rodriguez'),
- ('surname', 'martinez'),
- ('surname', 'hernandez'),
- ('surname', 'lopez'),
- ('surname', 'gonzalez'),
- ('surname', 'wilson'),
- ('surname', 'anderson'),
- ('surname', 'thomas'),
- ('surname', 'taylor'),
- ('surname', 'moore'),
- ('surname', 'jackson'),
- ('surname', 'martin'),
- ('surname', 'lee'),
- ('surname', 'perez'),
- ('surname', 'thompson'),
- ('surname', 'white'),
- ('surname', 'harris'),
- ('surname', 'sanchez'),
- ('surname', 'clark'),
- ('surname', 'ramirez'),
- ('surname', 'lewis'),
- ('surname', 'robinson'),
- ('surname', 'walker'),
- ('surname', 'young'),
- ('surname', 'allen'),
- ('surname', 'king'),
- ('surname', 'wright'),
- ('surname', 'scott'),
- ('surname', 'torres'),
- ('surname', 'nguyen'),
- ('surname', 'hill'),
- ('surname', 'flores'),
- ('surname', 'green'),
- ('surname', 'adams'),
- ('surname', 'nelson'),
- ('surname', 'baker'),
- ('surname', 'hall'),
- ('surname', 'rivera'),
- ('surname', 'campbell'),
- ('surname', 'mitchell'),
- ('surname', 'carter'),
- ('surname', 'roberts'),
- ('surname', 'gomez'),
- ('surname', 'phillips'),
- ('surname', 'evans'),
- ('surname', 'turner'),
- ('surname', 'diaz'),
- ('surname', 'parker'),
- ('surname', 'cruz'),
- ('surname', 'edwards'),
- ('surname', 'collins'),
- ('surname', 'reyes'),
- ('surname', 'stewart'),
- ('surname', 'morris'),
- ('surname', 'morales'),
- ('surname', 'murphy'),
- ('surname', 'cook'),
- ('surname', 'rogers'),
- ('surname', 'gutierrez'),
- ('surname', 'ortiz'),
- ('surname', 'morgan'),
- ('surname', 'cooper'),
- ('surname', 'peterson'),
- ('surname', 'bailey'),
- ('surname', 'reed'),
- ('surname', 'kelly'),
- ('surname', 'howard'),
- ('surname', 'ramos'),
- ('surname', 'kim'),
- ('surname', 'cox'),
- ('surname', 'ward'),
- ('surname', 'richardson'),
- ('surname', 'watson'),
- ('surname', 'brooks'),
- ('surname', 'chavez'),
- ('surname', 'wood'),
- ('surname', 'james'),
- ('surname', 'bennett'),
- ('surname', 'gray'),
- ('surname', 'mendoza'),
- ('surname', 'ruiz'),
- ('surname', 'hughes'),
- ('surname', 'price'),
- ('surname', 'alvarez'),
- ('surname', 'castillo'),
- ('surname', 'sanders'),
- ('surname', 'patel'),
- ('surname', 'myers'),
- ('surname', 'long'),
- ('surname', 'ross'),
- ('surname', 'foster'),
- ('surname', 'jimenez'),
- ('surname', 'powell'),
- ('surname', 'jenkins'),
- ('surname', 'perry'),
- ('surname', 'russell'),
- ('surname', 'sullivan'),
- ('surname', 'bell'),
- ('surname', 'coleman'),
- ('surname', 'butler'),
- ('surname', 'henderson'),
- ('surname', 'barnes'),
- ('surname', 'gonzales'),
- ('surname', 'fisher'),
- ('surname', 'vasquez'),
- ('surname', 'simmons'),
- ('surname', 'romero'),
- ('surname', 'jordan'),
- ('surname', 'patterson'),
- ('surname', 'alexander'),
- ('surname', 'hamilton'),
- ('surname', 'graham'),
- ('surname', 'reynolds'),
- ('surname', 'griffin'),
- ('surname', 'wallace'),
- ('surname', 'moreno'),
- ('surname', 'west'),
- ('surname', 'cole'),
- ('surname', 'hayes'),
- ('surname', 'bryant'),
- ('surname', 'herrera'),
- ('surname', 'gibson'),
- ('surname', 'ellis'),
- ('surname', 'tran'),
- ('surname', 'medina'),
- ('surname', 'aguilar'),
- ('surname', 'stevens'),
- ('surname', 'murray'),
- ('surname', 'ford'),
- ('surname', 'castro'),
- ('surname', 'marshall'),
- ('surname', 'owens'),
- ('surname', 'harrison'),
- ('surname', 'fernandez'),
- ('surname', 'mcdonald'),
- ('surname', 'woods'),
- ('surname', 'washington'),
- ('surname', 'kennedy'),
- ('surname', 'wells'),
- ('surname', 'vargas'),
- ('surname', 'henry'),
- ('surname', 'chen'),
- ('surname', 'freeman'),
- ('surname', 'webb'),
- ('surname', 'tucker'),
- ('surname', 'guzman'),
- ('surname', 'burns'),
- ('surname', 'crawford'),
- ('surname', 'olson'),
- ('surname', 'simpson'),
- ('surname', 'porter'),
- ('surname', 'hunter'),
- ('surname', 'gordon'),
- ('surname', 'mendez'),
- ('surname', 'silva'),
- ('surname', 'shaw'),
- ('surname', 'snyder'),
- ('surname', 'mason'),
- ('surname', 'dixon'),
- ('surname', 'munoz'),
- ('surname', 'hunt'),
- ('surname', 'hicks'),
- ('surname', 'holmes'),
- ('surname', 'palmer'),
- ('surname', 'wagner'),
- ('surname', 'black'),
- ('surname', 'robertson'),
- ('surname', 'boyd'),
- ('surname', 'rose'),
- ('surname', 'stone'),
- ('surname', 'salazar'),
- ('surname', 'fox'),
- ('surname', 'warren'),
- ('surname', 'mills'),
- ('surname', 'meyer'),
- ('surname', 'rice'),
- ('surname', 'schmidt'),
- ('surname', 'garza'),
- ('surname', 'daniels'),
- ('surname', 'ferguson'),
- ('surname', 'nichols'),
- ('surname', 'stephens'),
- ('surname', 'soto'),
- ('surname', 'weaver'),
- ('surname', 'ryan'),
- ('surname', 'gardner'),
- ('surname', 'payne'),
- ('surname', 'grant'),
- ('surname', 'dunn'),
- ('surname', 'kelley'),
- ('surname', 'spencer'),
- ('surname', 'hawkins'),
- ('surname', 'arnold'),
- ('surname', 'pierce'),
- ('surname', 'vazquez'),
- ('surname', 'hansen'),
- ('surname', 'peters'),
- ('surname', 'santos'),
- ('surname', 'hart'),
- ('surname', 'bradley'),
- ('surname', 'knight'),
- ('surname', 'elliott'),
- ('surname', 'cunningham'),
- ('surname', 'duncan'),
- ('surname', 'armstrong'),
- ('surname', 'hudson'),
- ('surname', 'carroll'),
- ('surname', 'lane'),
- ('surname', 'riley'),
- ('surname', 'andrews'),
- ('surname', 'alvarado'),
- ('surname', 'ray'),
- ('surname', 'delgado'),
- ('surname', 'berry'),
- ('surname', 'perkins'),
- ('surname', 'hoffman'),
- ('surname', 'johnston'),
- ('surname', 'matthews'),
- ('surname', 'pena'),
- ('surname', 'richards'),
- ('surname', 'contreras'),
- ('surname', 'willis'),
- ('surname', 'carpenter'),
- ('surname', 'lawrence'),
- ('surname', 'sandoval'),
- ('surname', 'guerrero'),
- ('surname', 'george'),
- ('surname', 'chapman'),
- ('surname', 'rios'),
- ('surname', 'estrada'),
- ('surname', 'ortega'),
- ('surname', 'watkins'),
- ('surname', 'greene'),
- ('surname', 'nunez'),
- ('surname', 'wheeler'),
- ('surname', 'valdez'),
- ('surname', 'harper'),
- ('surname', 'burke'),
- ('surname', 'larson'),
- ('surname', 'santiago'),
- ('surname', 'maldonado'),
- ('surname', 'morrison'),
- ('surname', 'franklin'),
- ('surname', 'carlson'),
- ('surname', 'austin'),
- ('surname', 'dominguez'),
- ('surname', 'carr'),
- ('surname', 'lawson'),
- ('surname', 'jacobs'),
- ('surname', 'obrien'),
- ('surname', 'lynch'),
- ('surname', 'singh'),
- ('surname', 'vega'),
- ('surname', 'bishop'),
- ('surname', 'montgomery'),
- ('surname', 'oliver'),
- ('surname', 'jensen'),
- ('surname', 'harvey'),
- ('surname', 'williamson'),
- ('surname', 'gilbert'),
- ('surname', 'dean'),
- ('surname', 'sims'),
- ('surname', 'espinoza'),
- ('surname', 'howell'),
- ('surname', 'li'),
- ('surname', 'wong'),
- ('surname', 'reid'),
- ('surname', 'hanson'),
- ('surname', 'le'),
- ('surname', 'mccoy'),
- ('surname', 'garrett'),
- ('surname', 'burton'),
- ('surname', 'fuller'),
- ('surname', 'wang'),
- ('surname', 'weber'),
- ('surname', 'welch'),
- ('surname', 'rojas'),
- ('surname', 'lucas'),
- ('surname', 'marquez'),
- ('surname', 'fields'),
- ('surname', 'park'),
- ('surname', 'yang'),
- ('surname', 'little'),
- ('surname', 'banks'),
- ('surname', 'padilla'),
- ('surname', 'day'),
- ('surname', 'walsh'),
- ('surname', 'bowman'),
- ('surname', 'schultz'),
- ('surname', 'luna'),
- ('surname', 'fowler'),
- ('surname', 'mejia'),
- ('surname', 'davidson'),
- ('surname', 'acosta'),
- ('surname', 'brewer'),
- ('surname', 'may'),
- ('surname', 'holland'),
- ('surname', 'juarez'),
- ('surname', 'newman'),
- ('surname', 'pearson'),
- ('surname', 'curtis'),
- ('surname', 'cortez'),
- ('surname', 'douglas'),
- ('surname', 'schneider'),
- ('surname', 'joseph'),
- ('surname', 'barrett'),
- ('surname', 'navarro'),
- ('surname', 'figueroa'),
- ('surname', 'keller'),
- ('surname', 'avila'),
- ('surname', 'wade'),
- ('surname', 'molina'),
- ('surname', 'stanley'),
- ('surname', 'hopkins'),
- ('surname', 'campos'),
- ('surname', 'barnett'),
- ('surname', 'bates'),
- ('surname', 'chambers'),
- ('surname', 'caldwell'),
- ('surname', 'beck'),
- ('surname', 'lambert'),
- ('surname', 'miranda'),
- ('surname', 'byrd'),
- ('surname', 'craig'),
- ('surname', 'ayala'),
- ('surname', 'lowe'),
- ('surname', 'frazier'),
- ('surname', 'powers'),
- ('surname', 'neal'),
- ('surname', 'leonard'),
- ('surname', 'gregory'),
- ('surname', 'carrillo'),
- ('surname', 'sutton'),
- ('surname', 'fleming'),
- ('surname', 'rhodes'),
- ('surname', 'shelton'),
- ('surname', 'schwartz'),
- ('surname', 'norris'),
- ('surname', 'jennings'),
- ('surname', 'watts'),
- ('surname', 'duran'),
- ('surname', 'walters'),
- ('surname', 'cohen'),
- ('surname', 'mcdaniel'),
- ('surname', 'moran'),
- ('surname', 'parks'),
- ('surname', 'steele'),
- ('surname', 'vaughn'),
- ('surname', 'becker'),
- ('surname', 'holt'),
- ('surname', 'deleon'),
- ('surname', 'barker'),
- ('surname', 'terry'),
- ('surname', 'hale'),
- ('surname', 'leon'),
- ('surname', 'hail'),
- ('surname', 'benson'),
- ('surname', 'haynes'),
- ('surname', 'horton'),
- ('surname', 'miles'),
- ('surname', 'lyons'),
- ('surname', 'pham'),
- ('surname', 'graves'),
- ('surname', 'bush'),
- ('surname', 'thornton'),
- ('surname', 'wolfe'),
- ('surname', 'warner'),
- ('surname', 'cabrera'),
- ('surname', 'mckinney'),
- ('surname', 'mann'),
- ('surname', 'zimmerman'),
- ('surname', 'dawson'),
- ('surname', 'lara'),
- ('surname', 'fletcher'),
- ('surname', 'page'),
- ('surname', 'mccarthy'),
- ('surname', 'love'),
- ('surname', 'robles'),
- ('surname', 'cervantes'),
- ('surname', 'solis'),
- ('surname', 'erickson'),
- ('surname', 'reeves'),
- ('surname', 'chang'),
- ('surname', 'klein'),
- ('surname', 'salinas'),
- ('surname', 'fuentes'),
- ('surname', 'baldwin'),
- ('surname', 'daniel'),
- ('surname', 'simon'),
- ('surname', 'velasquez'),
- ('surname', 'hardy'),
- ('surname', 'higgins'),
- ('surname', 'aguirre'),
- ('surname', 'lin'),
- ('surname', 'cummings'),
- ('surname', 'chandler'),
- ('surname', 'sharp'),
- ('surname', 'barber'),
- ('surname', 'bowen'),
- ('surname', 'ochoa'),
- ('surname', 'dennis'),
- ('surname', 'robbins'),
- ('surname', 'liu'),
- ('surname', 'ramsey'),
- ('surname', 'francis'),
- ('surname', 'griffith'),
- ('surname', 'paul'),
- ('surname', 'blair'),
- ('surname', 'oconnor'),
- ('surname', 'cardenas'),
- ('surname', 'pacheco'),
- ('surname', 'cross'),
- ('surname', 'calderon'),
- ('surname', 'quinn'),
- ('surname', 'moss'),
- ('surname', 'swanson'),
- ('surname', 'chan'),
- ('surname', 'rivas'),
- ('surname', 'khan'),
- ('surname', 'rodgers'),
- ('surname', 'serrano'),
- ('surname', 'fitzgerald'),
- ('surname', 'rosales'),
- ('surname', 'stevenson'),
- ('surname', 'christensen'),
- ('surname', 'manning'),
- ('surname', 'gill'),
- ('surname', 'curry'),
- ('surname', 'mclaughlin'),
- ('surname', 'harmon'),
- ('surname', 'mcgee'),
- ('surname', 'gross'),
- ('surname', 'doyle'),
- ('surname', 'garner'),
- ('surname', 'newton'),
- ('surname', 'burgess'),
- ('surname', 'reese'),
- ('surname', 'walton'),
- ('surname', 'blake'),
- ('surname', 'trujillo'),
- ('surname', 'adkins'),
- ('surname', 'brady'),
- ('surname', 'goodman'),
- ('surname', 'roman'),
- ('surname', 'webster'),
- ('surname', 'goodwin'),
- ('surname', 'fischer'),
- ('surname', 'huang'),
- ('surname', 'potter'),
- ('surname', 'delacruz'),
- ('surname', 'montoya'),
- ('surname', 'todd'),
- ('surname', 'wu'),
- ('surname', 'hines'),
- ('surname', 'mullins'),
- ('surname', 'castaneda'),
- ('surname', 'malone'),
- ('surname', 'cannon'),
- ('surname', 'tate'),
- ('surname', 'mack'),
- ('surname', 'sherman'),
- ('surname', 'hubbard'),
- ('surname', 'hodges'),
- ('surname', 'zhang'),
- ('surname', 'guerra'),
- ('surname', 'wolf'),
- ('surname', 'valencia'),
- ('surname', 'saunders'),
- ('surname', 'franco'),
- ('surname', 'rowe'),
- ('surname', 'gallagher'),
- ('surname', 'farmer'),
- ('surname', 'hammond'),
- ('surname', 'hampton'),
- ('surname', 'townsend'),
- ('surname', 'ingram'),
- ('surname', 'wise'),
- ('surname', 'gallegos'),
- ('surname', 'clarke'),
- ('surname', 'barton'),
- ('surname', 'schroeder'),
- ('surname', 'maxwell'),
- ('surname', 'waters'),
- ('surname', 'logan'),
- ('surname', 'camacho'),
- ('surname', 'strickland'),
- ('surname', 'norman'),
- ('surname', 'person'),
- ('surname', 'colon'),
- ('surname', 'parsons'),
- ('surname', 'frank'),
- ('surname', 'harrington'),
- ('surname', 'glover'),
- ('surname', 'osborne'),
- ('surname', 'buchanan'),
- ('surname', 'casey'),
- ('surname', 'floyd'),
- ('surname', 'patton'),
- ('surname', 'ibarra'),
- ('surname', 'ball'),
- ('surname', 'tyler'),
- ('surname', 'suarez'),
- ('surname', 'bowers'),
- ('surname', 'orozco'),
- ('surname', 'salas'),
- ('surname', 'cobb'),
- ('surname', 'gibbs'),
- ('surname', 'andrade'),
- ('surname', 'bauer'),
- ('surname', 'conner'),
- ('surname', 'moody'),
- ('surname', 'escobar'),
- ('surname', 'mcguire'),
- ('surname', 'lloyd'),
- ('surname', 'mueller'),
- ('surname', 'hartman'),
- ('surname', 'french'),
- ('surname', 'kramer'),
- ('surname', 'mcbride'),
- ('surname', 'pope'),
- ('surname', 'lindsey'),
- ('surname', 'velazquez'),
- ('surname', 'norton'),
- ('surname', 'mccormick'),
- ('surname', 'sparks'),
- ('surname', 'flynn'),
- ('surname', 'yates'),
- ('surname', 'hogan'),
- ('surname', 'marsh'),
- ('surname', 'macias'),
- ('surname', 'villanueva'),
- ('surname', 'zamora'),
- ('surname', 'pratt'),
- ('surname', 'stokes'),
- ('surname', 'owen'),
- ('surname', 'ballard'),
- ('surname', 'lang'),
- ('surname', 'brock'),
- ('surname', 'villarreal'),
- ('surname', 'charles'),
- ('surname', 'drake'),
- ('surname', 'barrera'),
- ('surname', 'cain'),
- ('surname', 'patrick'),
- ('surname', 'pineda'),
- ('surname', 'burnett'),
- ('surname', 'mercado'),
- ('surname', 'santana'),
- ('surname', 'shepherd'),
- ('surname', 'bautista'),
- ('surname', 'ali'),
- ('surname', 'shaffer'),
- ('surname', 'lamb'),
- ('surname', 'trevino'),
- ('surname', 'mckenzie'),
- ('surname', 'hess'),
- ('surname', 'beil'),
- ('surname', 'olsen'),
- ('surname', 'cochran'),
- ('surname', 'morton'),
- ('surname', 'nash'),
- ('surname', 'wilkins'),
- ('surname', 'petersen'),
- ('surname', 'briggs'),
- ('surname', 'shah'),
- ('surname', 'roth'),
- ('surname', 'nicholson'),
- ('surname', 'holloway'),
- ('surname', 'lozano'),
- ('surname', 'rangel'),
- ('surname', 'flowers'),
- ('surname', 'hoover'),
- ('surname', 'short'),
- ('surname', 'arias'),
- ('surname', 'mora'),
- ('surname', 'valenzuela'),
- ('surname', 'bryan'),
- ('surname', 'meyers'),
- ('surname', 'weiss'),
- ('surname', 'underwood'),
- ('surname', 'bass'),
- ('surname', 'greer'),
- ('surname', 'summers'),
- ('surname', 'houston'),
- ('surname', 'carson'),
- ('surname', 'morrow'),
- ('surname', 'clayton'),
- ('surname', 'whitaker'),
- ('surname', 'decker'),
- ('surname', 'yoder'),
- ('surname', 'collier'),
- ('surname', 'zuniga'),
- ('surname', 'carey'),
- ('surname', 'wilcox'),
- ('surname', 'melendez'),
- ('surname', 'poole'),
- ('surname', 'roberson'),
- ('surname', 'larsen'),
- ('surname', 'conley'),
- ('surname', 'davenport'),
- ('surname', 'copeland'),
- ('surname', 'massey'),
- ('surname', 'lam'),
- ('surname', 'huff'),
- ('surname', 'rocha'),
- ('surname', 'cameron'),
- ('surname', 'jefferson'),
- ('surname', 'hood'),
- ('surname', 'monroe'),
- ('surname', 'anthony'),
- ('surname', 'pittman'),
- ('surname', 'huynh'),
- ('surname', 'randall'),
- ('surname', 'singleton'),
- ('surname', 'kirk'),
- ('surname', 'combs'),
- ('surname', 'mathis'),
- ('surname', 'christian'),
- ('surname', 'skinner'),
- ('surname', 'bradford'),
- ('surname', 'richard'),
- ('surname', 'galvan'),
- ('surname', 'wall'),
- ('surname', 'boone'),
- ('surname', 'kirby'),
- ('surname', 'wilkinson'),
- ('surname', 'bridges'),
- ('surname', 'bruce'),
- ('surname', 'atkinson'),
- ('surname', 'velez'),
- ('surname', 'meza'),
- ('surname', 'roy'),
- ('surname', 'vincent'),
- ('surname', 'york'),
- ('surname', 'hodge'),
- ('surname', 'villa'),
- ('surname', 'abbott'),
- ('surname', 'allison'),
- ('surname', 'tapia'),
- ('surname', 'gates'),
- ('surname', 'chase'),
- ('surname', 'sosa'),
- ('surname', 'sweeney'),
- ('surname', 'farrell'),
- ('surname', 'wyatt'),
- ('surname', 'dalton'),
- ('surname', 'horn'),
- ('surname', 'barron'),
- ('surname', 'phelps'),
- ('surname', 'yu'),
- ('surname', 'dickerson'),
- ('surname', 'heath'),
- ('surname', 'foley'),
- ('surname', 'atkins'),
- ('surname', 'mathews'),
- ('surname', 'bonilla'),
- ('surname', 'acevedo'),
- ('surname', 'benitez'),
- ('surname', 'zavala'),
- ('surname', 'hensley'),
- ('surname', 'glenn'),
- ('surname', 'cisneros'),
- ('surname', 'harrell'),
- ('surname', 'shields'),
- ('surname', 'rubio'),
- ('surname', 'huffman'),
- ('surname', 'choi'),
- ('surname', 'boyer'),
- ('surname', 'garrison'),
- ('surname', 'arroyo'),
- ('surname', 'bond'),
- ('surname', 'kane'),
- ('surname', 'hancock'),
- ('surname', 'callahan'),
- ('surname', 'dillon'),
- ('surname', 'cline'),
- ('surname', 'wiggins'),
- ('surname', 'grimes'),
- ('surname', 'arellano'),
- ('surname', 'melton'),
- ('surname', 'oneill'),
- ('surname', 'savage'),
- ('surname', 'ho'),
- ('surname', 'beltran'),
- ('surname', 'pitts'),
- ('surname', 'parrish'),
- ('surname', 'ponce'),
- ('surname', 'rich'),
- ('surname', 'booth'),
- ('surname', 'koch'),
- ('surname', 'golden'),
- ('surname', 'ware'),
- ('surname', 'brennan'),
- ('surname', 'mcdowell'),
- ('surname', 'marks'),
- ('surname', 'cantu'),
- ('surname', 'humphrey'),
- ('surname', 'baxter'),
- ('surname', 'sawyer'),
- ('surname', 'clay'),
- ('surname', 'tanner'),
- ('surname', 'hutchinson'),
- ('surname', 'kaur'),
- ('surname', 'berg'),
- ('surname', 'wiley'),
- ('surname', 'gilmore'),
- ('surname', 'russo'),
- ('surname', 'villegas'),
- ('surname', 'hobbs'),
- ('surname', 'keith'),
- ('surname', 'wilkerson'),
- ('surname', 'ahmed'),
- ('surname', 'beard'),
- ('surname', 'mcclain'),
- ('surname', 'montes'),
- ('surname', 'mata'),
- ('surname', 'rosario'),
- ('surname', 'vang'),
- ('surname', 'walter'),
- ('surname', 'henson'),
- ('surname', 'oneal'),
- ('surname', 'mosley'),
- ('surname', 'mcclure'),
- ('surname', 'beasley'),
- ('surname', 'stephenson'),
- ('surname', 'snow'),
- ('surname', 'huerta'),
- ('surname', 'preston'),
- ('surname', 'vance'),
- ('surname', 'barry'),
- ('surname', 'johns'),
- ('surname', 'eaton'),
- ('surname', 'blackwell'),
- ('surname', 'dyer'),
- ('surname', 'prince'),
- ('surname', 'macdonald'),
- ('surname', 'solomon'),
- ('surname', 'guevara'),
- ('surname', 'stafford'),
- ('surname', 'english'),
- ('surname', 'hurst'),
- ('surname', 'woodard'),
- ('surname', 'cortes'),
- ('surname', 'shannon'),
- ('surname', 'kemp'),
- ('surname', 'nolan'),
- ('surname', 'mccullough'),
- ('surname', 'merritt'),
- ('surname', 'murillo'),
- ('surname', 'moon'),
- ('surname', 'salgado'),
- ('surname', 'strong'),
- ('surname', 'kline'),
- ('surname', 'cordova'),
- ('surname', 'barajas'),
- ('surname', 'roach'),
- ('surname', 'rosas'),
- ('surname', 'winters'),
- ('surname', 'jacobson'),
- ('surname', 'lester'),
- ('surname', 'knox'),
- ('surname', 'bullock'),
- ('surname', 'kerr'),
- ('surname', 'leach'),
- ('surname', 'meadows'),
- ('surname', 'orr'),
- ('surname', 'davila'),
- ('surname', 'whitehead'),
- ('surname', 'pruitt'),
- ('surname', 'kent'),
- ('surname', 'conway'),
- ('surname', 'mckee'),
- ('surname', 'barr'),
- ('surname', 'david'),
- ('surname', 'dejesus'),
- ('surname', 'marin'),
- ('surname', 'berger'),
- ('surname', 'mcintyre'),
- ('surname', 'blankenship'),
- ('surname', 'gaines'),
- ('surname', 'palacios'),
- ('surname', 'cuevas'),
- ('surname', 'bartlett'),
- ('surname', 'durham'),
- ('surname', 'dorsey'),
- ('surname', 'mccall'),
- ('surname', 'odonnell'),
- ('surname', 'stein'),
- ('surname', 'browning'),
- ('surname', 'stout'),
- ('surname', 'lowery'),
- ('surname', 'sloan'),
- ('surname', 'mclean'),
- ('surname', 'hendricks'),
- ('surname', 'calhoun'),
- ('surname', 'sexton'),
- ('surname', 'chung'),
- ('surname', 'gentry'),
- ('surname', 'hull'),
- ('surname', 'duarte'),
- ('surname', 'ellison'),
- ('surname', 'nielsen'),
- ('surname', 'gillespie'),
- ('surname', 'buck'),
- ('surname', 'middleton'),
- ('surname', 'sellers'),
- ('surname', 'leblanc'),
- ('surname', 'esparza'),
- ('surname', 'hardin'),
- ('surname', 'bradshaw'),
- ('surname', 'mcintosh'),
- ('surname', 'howe'),
- ('surname', 'livingston'),
- ('surname', 'frost'),
- ('surname', 'glass'),
- ('surname', 'morse'),
- ('surname', 'knapp'),
- ('surname', 'herman'),
- ('surname', 'stark'),
- ('surname', 'bravo'),
- ('surname', 'noble'),
- ('surname', 'spears'),
- ('surname', 'weeks'),
- ('surname', 'corona'),
- ('surname', 'frederick'),
- ('surname', 'buckley'),
- ('surname', 'mcfarland'),
- ('surname', 'hebert'),
- ('surname', 'enriquez'),
- ('surname', 'hickman'),
- ('surname', 'quintero'),
- ('surname', 'randolph'),
- ('surname', 'schaefer'),
- ('surname', 'walls'),
- ('surname', 'trejo'),
- ('surname', 'house'),
- ('surname', 'reilly'),
- ('surname', 'pennington'),
- ('surname', 'michael'),
- ('surname', 'conrad'),
- ('surname', 'giles'),
- ('surname', 'benjamin'),
- ('surname', 'crosby'),
- ('surname', 'fitzpatrick'),
- ('surname', 'donovan'),
- ('surname', 'mays'),
- ('surname', 'mahoney'),
- ('surname', 'valentine'),
- ('surname', 'raymond'),
- ('surname', 'medrano'),
- ('surname', 'hahn'),
- ('surname', 'mcmillan'),
- ('surname', 'small'),
- ('surname', 'bentley'),
- ('surname', 'felix'),
- ('surname', 'peck'),
- ('surname', 'lucero'),
- ('surname', 'boyle'),
- ('surname', 'hanna'),
- ('surname', 'pace'),
- ('surname', 'rush'),
- ('surname', 'hurley'),
- ('surname', 'harding'),
- ('surname', 'mcconnell'),
- ('surname', 'bernal'),
- ('surname', 'nava'),
- ('surname', 'ayers'),
- ('surname', 'everett'),
- ('surname', 'ventura'),
- ('surname', 'avery'),
- ('surname', 'pugh'),
- ('surname', 'mayer'),
- ('surname', 'bender'),
- ('surname', 'shepard'),
- ('surname', 'mcmahon'),
- ('surname', 'landry'),
- ('surname', 'case'),
- ('surname', 'sampson'),
- ('surname', 'moses'),
- ('surname', 'magana'),
- ('surname', 'blackburn'),
- ('surname', 'dunlap'),
- ('surname', 'gould'),
- ('surname', 'duffy'),
- ('surname', 'vaughan'),
- ('surname', 'herring'),
- ('surname', 'mckay'),
- ('surname', 'espinosa'),
- ('surname', 'rivers'),
- ('surname', 'farley'),
- ('surname', 'bernard'),
- ('surname', 'ashley'),
- ('surname', 'friedman'),
- ('surname', 'potts'),
- ('surname', 'truong'),
- ('surname', 'costa'),
- ('surname', 'correa'),
- ('surname', 'blevins'),
- ('surname', 'nixon'),
- ('surname', 'clements'),
- ('surname', 'fry'),
- ('surname', 'delarosa'),
- ('surname', 'best'),
- ('surname', 'benton'),
- ('surname', 'lugo'),
- ('surname', 'portillo'),
- ('surname', 'dougherty'),
- ('surname', 'crane'),
- ('surname', 'haley'),
- ('surname', 'phan'),
- ('surname', 'villalobos'),
- ('surname', 'blanchard'),
- ('surname', 'horne'),
- ('surname', 'finley'),
- ('surname', 'quintana'),
- ('surname', 'lynn'),
- ('surname', 'esquivel'),
- ('surname', 'bean'),
- ('surname', 'dodson'),
- ('surname', 'mullen'),
- ('surname', 'xiong'),
- ('surname', 'hayden'),
- ('surname', 'cano'),
- ('surname', 'levy'),
- ('surname', 'huber'),
- ('surname', 'richmond'),
- ('surname', 'moyer'),
- ('surname', 'lim'),
- ('surname', 'frye'),
- ('surname', 'sheppard'),
- ('surname', 'mccarty'),
- ('surname', 'avalos'),
- ('surname', 'booker'),
- ('surname', 'waller'),
- ('surname', 'parra'),
- ('surname', 'woodward'),
- ('surname', 'jaramillo'),
- ('surname', 'krueger'),
- ('surname', 'rasmussen'),
- ('surname', 'brandt'),
- ('surname', 'peralta'),
- ('surname', 'donaldson'),
- ('surname', 'stuart'),
- ('surname', 'faulkner'),
- ('surname', 'maynard'),
- ('surname', 'galindo'),
- ('surname', 'coffey'),
- ('surname', 'estes'),
- ('surname', 'sanford'),
- ('surname', 'burch'),
- ('surname', 'maddox'),
- ('surname', 'vo'),
- ('surname', 'oconnell'),
- ('surname', 'vu'),
- ('surname', 'andersen'),
- ('surname', 'spence'),
- ('surname', 'mcpherson'),
- ('surname', 'church'),
- ('surname', 'schmitt'),
- ('surname', 'stanton'),
- ('surname', 'leal'),
- ('surname', 'cherry'),
- ('surname', 'compton'),
- ('surname', 'dudley'),
- ('surname', 'sierra'),
- ('surname', 'pollard'),
- ('surname', 'alfaro'),
- ('surname', 'hester'),
- ('surname', 'proctor'),
- ('surname', 'lu'),
- ('surname', 'hinton'),
- ('surname', 'novak'),
- ('surname', 'good'),
- ('surname', 'madden'),
- ('surname', 'mccann'),
- ('surname', 'terrell'),
- ('surname', 'jarvis'),
- ('surname', 'dickson'),
- ('surname', 'reyna'),
- ('surname', 'cantrell'),
- ('surname', 'mayo'),
- ('surname', 'branch'),
- ('surname', 'hendrix'),
- ('surname', 'rollins'),
- ('surname', 'rowland'),
- ('surname', 'whitney'),
- ('surname', 'duke'),
- ('surname', 'odom'),
- ('surname', 'daugherty'),
- ('surname', 'travis'),
- ('surname', 'tang'),
- ('boys', 'david'),
- ('boys', 'christopher'),
- ('boys', 'andrew'),
- ('boys', 'john'),
- ('boys', 'james'),
- ('boys', 'craig'),
- ('boys', 'steven'),
- ('boys', 'paul'),
- ('boys', 'michael'),
- ('boys', 'scott'),
- ('boys', 'robert'),
- ('boys', 'mark'),
- ('boys', 'william'),
- ('boys', 'kevin'),
- ('boys', 'stuart'),
- ('boys', 'stephen'),
- ('boys', 'alan'),
- ('boys', 'gary'),
- ('boys', 'ross'),
- ('boys', 'colin'),
- ('boys', 'richard'),
- ('boys', 'martin'),
- ('boys', 'thomas'),
- ('boys', 'neil'),
- ('boys', 'ryan'),
- ('boys', 'graeme'),
- ('boys', 'brian'),
- ('boys', 'peter'),
- ('boys', 'gordon'),
- ('boys', 'darren'),
- ('boys', 'ian'),
- ('boys', 'jamie'),
- ('boys', 'alexander'),
- ('boys', 'iain'),
- ('boys', 'graham'),
- ('boys', 'barry'),
- ('boys', 'allan'),
- ('boys', 'jonathan'),
- ('boys', 'daniel'),
- ('boys', 'gavin'),
- ('boys', 'derek'),
- ('boys', 'kenneth'),
- ('boys', 'sean'),
- ('boys', 'matthew'),
- ('boys', 'lee'),
- ('boys', 'george'),
- ('boys', 'nicholas'),
- ('boys', 'anthony'),
- ('boys', 'stewart'),
- ('boys', 'fraser'),
- ('boys', 'douglas'),
- ('boys', 'keith'),
- ('boys', 'joseph'),
- ('boys', 'grant'),
- ('boys', 'marc'),
- ('boys', 'adam'),
- ('boys', 'simon'),
- ('boys', 'alistair'),
- ('boys', 'garry'),
- ('boys', 'alastair'),
- ('boys', 'bryan'),
- ('boys', 'liam'),
- ('boys', 'jason'),
- ('boys', 'duncan'),
- ('boys', 'euan'),
- ('boys', 'charles'),
- ('boys', 'greg'),
- ('boys', 'edward'),
- ('boys', 'philip'),
- ('boys', 'russell'),
- ('boys', 'shaun'),
- ('boys', 'gareth'),
- ('boys', 'ewan'),
- ('boys', 'calum'),
- ('boys', 'callum'),
- ('boys', 'donald'),
- ('boys', 'cameron'),
- ('boys', 'raymond'),
- ('boys', 'patrick'),
- ('boys', 'alasdair'),
- ('boys', 'dean'),
- ('boys', 'greig'),
- ('boys', 'lewis'),
- ('boys', 'benjamin'),
- ('boys', 'malcolm'),
- ('boys', 'niall'),
- ('boys', 'gerard'),
- ('boys', 'martyn'),
- ('boys', 'jordan'),
- ('boys', 'aaron'),
- ('boys', 'francis'),
- ('boys', 'hugh'),
- ('boys', 'gregor'),
- ('boys', 'mohammed'),
- ('boys', 'robin'),
- ('boys', 'samuel'),
- ('boys', 'angus'),
- ('boys', 'bruce'),
- ('boys', 'kris'),
- ('boys', 'ronald'),
- ('girls', 'laura'),
- ('girls', 'claire'),
- ('girls', 'nicola'),
- ('girls', 'jennifer'),
- ('girls', 'louise'),
- ('girls', 'sarah'),
- ('girls', 'lisa'),
- ('girls', 'michelle'),
- ('girls', 'emma'),
- ('girls', 'fiona'),
- ('girls', 'karen'),
- ('girls', 'gillian'),
- ('girls', 'gemma'),
- ('girls', 'kirsty'),
- ('girls', 'lynsey'),
- ('girls', 'victoria'),
- ('girls', 'donna'),
- ('girls', 'kelly'),
- ('girls', 'susan'),
- ('girls', 'julie'),
- ('girls', 'angela'),
- ('girls', 'pamela'),
- ('girls', 'leanne'),
- ('girls', 'amanda'),
- ('girls', 'joanne'),
- ('girls', 'alison'),
- ('girls', 'caroline'),
- ('girls', 'heather'),
- ('girls', 'jacqueline'),
- ('girls', 'suzanne'),
- ('girls', 'stephanie'),
- ('girls', 'catherine'),
- ('girls', 'elaine'),
- ('girls', 'natalie'),
- ('girls', 'lynne'),
- ('girls', 'stacey'),
- ('girls', 'lindsay'),
- ('girls', 'lauren'),
- ('girls', 'cheryl'),
- ('girls', 'elizabeth'),
- ('girls', 'deborah'),
- ('girls', 'lesley'),
- ('girls', 'kerry'),
- ('girls', 'lorna'),
- ('girls', 'charlene'),
- ('girls', 'sharon'),
- ('girls', 'lorraine'),
- ('girls', 'lynn'),
- ('girls', 'amy'),
- ('girls', 'tracy'),
- ('girls', 'clare'),
- ('girls', 'rebecca'),
- ('girls', 'debbie'),
- ('girls', 'samantha'),
- ('girls', 'kimberley'),
- ('girls', 'rachel'),
- ('girls', 'yvonne'),
- ('girls', 'helen'),
- ('girls', 'margaret'),
- ('girls', 'carol'),
- ('girls', 'christine'),
- ('girls', 'diane'),
- ('girls', 'linda'),
- ('girls', 'ashley'),
- ('girls', 'dawn'),
- ('girls', 'paula'),
- ('girls', 'marie'),
- ('girls', 'pauline'),
- ('girls', 'danielle'),
- ('girls', 'anna'),
- ('girls', 'hazel'),
- ('girls', 'jill'),
- ('girls', 'shona'),
- ('girls', 'catriona'),
- ('girls', 'jane'),
- ('girls', 'kim'),
- ('girls', 'mhairi'),
- ('girls', 'anne'),
- ('girls', 'tracey'),
- ('girls', 'hayley'),
- ('girls', 'lyndsey'),
- ('girls', 'sara'),
- ('girls', 'melissa'),
- ('girls', 'kathryn'),
- ('girls', 'lyndsay'),
- ('girls', 'lucy'),
- ('girls', 'ruth'),
- ('girls', 'mary'),
- ('girls', 'andrea'),
- ('girls', 'lindsey'),
- ('girls', 'denise'),
- ('girls', 'joanna'),
- ('girls', 'alana'),
- ('girls', 'adele'),
- ('girls', 'kathleen'),
- ('girls', 'melanie'),
- ('girls', 'christina'),
- ('girls', 'hannah'),
- ('girls', 'kirsten'),
- ('girls', 'siobhan'),
- ('street', '01ST ST'),
- ('street', '02ND AVE'),
- ('street', '02ND ST'),
- ('street', '03RD AVE'),
- ('street', '03RD ST'),
- ('street', '04TH AVE'),
- ('street', '04TH ST'),
- ('street', '05TH AVE'),
- ('street', '05TH ST'),
- ('street', '06TH AVE'),
- ('street', '06TH ST'),
- ('street', '07TH AVE'),
- ('street', '07TH ST'),
- ('street', '08TH AVE'),
- ('street', '08TH ST'),
- ('street', '09TH AVE'),
- ('street', '09TH ST'),
- ('street', '10TH AVE'),
- ('street', '10TH ST'),
- ('street', '11TH AVE'),
- ('street', '11TH ST'),
- ('street', '12TH AVE'),
- ('street', '12TH ST'),
- ('street', '13TH ST'),
- ('street', '14TH AVE'),
- ('street', '14TH ST'),
- ('street', '15TH AVE'),
- ('street', '15TH ST'),
- ('street', '16TH AVE'),
- ('street', '16TH ST'),
- ('street', '17TH AVE'),
- ('street', '17TH ST'),
- ('street', '18TH AVE'),
- ('street', '18TH ST'),
- ('street', '19TH AVE'),
- ('street', '19TH ST'),
- ('street', '20TH AVE'),
- ('street', '20TH ST'),
- ('street', '21ST AVE'),
- ('street', '21ST ST'),
- ('street', '22ND AVE'),
- ('street', '22ND ST'),
- ('street', '23RD AVE'),
- ('street', '23RD ST'),
- ('street', '24TH AVE'),
- ('street', '24TH ST'),
- ('street', '25TH AVE'),
- ('street', '25TH ST'),
- ('street', '26TH AVE'),
- ('street', '26TH ST'),
- ('street', '27TH AVE'),
- ('street', '27TH ST'),
- ('street', '28TH AVE'),
- ('street', '28TH ST'),
- ('street', '29TH AVE'),
- ('street', '29TH ST'),
- ('street', '30TH AVE'),
- ('street', '30TH ST'),
- ('street', '31ST AVE'),
- ('street', '31ST ST'),
- ('street', '32ND AVE'),
- ('street', '33RD AVE'),
- ('street', '34TH AVE'),
- ('street', '35TH AVE'),
- ('street', '36TH AVE'),
- ('street', '37TH AVE'),
- ('street', '38TH AVE'),
- ('street', '39TH AVE'),
- ('street', '40TH AVE'),
- ('street', '41ST AVE'),
- ('street', '42ND AVE'),
- ('street', '43RD AVE'),
- ('street', '44TH AVE'),
- ('street', '45TH AVE'),
- ('street', '46TH AVE'),
- ('street', '47TH AVE'),
- ('street', '48TH AVE'),
- ('street', 'A ST'),
- ('street', 'ABBEY ST'),
- ('street', 'ACACIA AVE'),
- ('street', 'ACACIA ST'),
- ('street', 'ACADIA ST'),
- ('street', 'ACEVEDO AVE'),
- ('street', 'ACME ALY'),
- ('street', 'ACORN ALY'),
- ('street', 'ACTON ST'),
- ('street', 'ADA CT'),
- ('street', 'ADAIR ST'),
- ('street', 'ADAM ST'),
- ('street', 'ADDISON ST'),
- ('street', 'ADELE CT'),
- ('street', 'ADMIRAL AVE'),
- ('street', 'ADOLPH SUTRO CT'),
- ('street', 'AERIAL WAY'),
- ('street', 'AGNON AVE'),
- ('street', 'AGUA WAY'),
- ('street', 'AHERN WAY'),
- ('street', 'ALABAMA ST'),
- ('street', 'ALADDIN TER'),
- ('street', 'ALAMEDA ST'),
- ('street', 'ALANA WAY'),
- ('street', 'ALBATROSS CT'),
- ('street', 'ALBERTA ST'),
- ('street', 'ALBION ST'),
- ('street', 'ALDER ST'),
- ('street', 'ALEMANY BLVD'),
- ('street', 'ALEMANY BLVD OFF RAMP'),
- ('street', 'ALERT ALY'),
- ('street', 'ALHAMBRA ST'),
- ('street', 'ALICE B TOKLAS PL'),
- ('street', 'ALLEN ST'),
- ('street', 'ALLISON ST'),
- ('street', 'ALLSTON WAY'),
- ('street', 'ALMA ST'),
- ('street', 'ALMADEN CT'),
- ('street', 'ALOHA AVE'),
- ('street', 'ALPHA ST'),
- ('street', 'ALPINE TER'),
- ('street', 'ALTA ST'),
- ('street', 'ALTA MAR WAY'),
- ('street', 'ALTA VISTA TER'),
- ('street', 'ALTON AVE'),
- ('street', 'ALVARADO ST'),
- ('street', 'ALVISO ST'),
- ('street', 'ALVORD ST'),
- ('street', 'AMADOR ST'),
- ('street', 'AMATISTA LN'),
- ('street', 'AMATURY LOOP'),
- ('street', 'AMAZON AVE'),
- ('street', 'AMBER DR'),
- ('street', 'AMBROSE BIERCE ST'),
- ('street', 'AMES ST'),
- ('street', 'AMETHYST WAY'),
- ('street', 'AMHERST ST'),
- ('street', 'AMITY ALY'),
- ('street', 'ANDERSON ST'),
- ('street', 'ANDOVER ST'),
- ('street', 'ANDREW ST'),
- ('street', 'ANGELOS ALY'),
- ('street', 'ANGLO ALY'),
- ('street', 'ANKENY ST'),
- ('street', 'ANNAPOLIS TER'),
- ('street', 'ANNIE ST'),
- ('street', 'ANSON PL'),
- ('street', 'ANTHONY ST'),
- ('street', 'ANTONIO ST'),
- ('street', 'ANZA AVE'),
- ('street', 'ANZA ST'),
- ('street', 'ANZAVISTA AVE'),
- ('street', 'APOLLO ST'),
- ('street', 'APPAREL WAY'),
- ('street', 'APPLETON AVE'),
- ('street', 'APPLETON ST'),
- ('street', 'APTOS AVE'),
- ('street', 'AQUAVISTA WAY'),
- ('street', 'ARAGO ST'),
- ('street', 'ARBALLO DR'),
- ('street', 'ARBOL LN'),
- ('street', 'ARBOR ST'),
- ('street', 'ARCH ST'),
- ('street', 'ARCO WAY'),
- ('street', 'ARDATH CT'),
- ('street', 'ARDENWOOD WAY'),
- ('street', 'ARELIOUS WALKER DR'),
- ('street', 'ARELLANO AVE'),
- ('street', 'ARGENT ALY'),
- ('street', 'ARGONAUT AVE'),
- ('street', 'ARGUELLO BLVD'),
- ('street', 'ARKANSAS ST'),
- ('street', 'ARLETA AVE'),
- ('street', 'ARLINGTON ST'),
- ('street', 'ARMISTEAD RD'),
- ('street', 'ARMORY DR'),
- ('street', 'ARMSTRONG AVE'),
- ('street', 'ARNOLD AVE'),
- ('street', 'ARROYO WAY'),
- ('street', 'ARTHUR AVE'),
- ('street', 'ASH ST'),
- ('street', 'ASHBURTON PL'),
- ('street', 'ASHBURY ST'),
- ('street', 'ASHBURY TER'),
- ('street', 'ASHTON AVE'),
- ('street', 'ASHWOOD LN'),
- ('street', 'ASPEN CT'),
- ('street', 'ATALAYA TER'),
- ('street', 'ATHENS ST'),
- ('street', 'ATOLL CIR'),
- ('street', 'ATTRIDGE ALY'),
- ('street', 'AUBURN ST'),
- ('street', 'AUGUST ALY'),
- ('street', 'AUGUSTA ST'),
- ('street', 'AUSTIN ST'),
- ('street', 'AUTO DR'),
- ('street', 'AUTOMOBILE DR'),
- ('street', 'AVALON AVE'),
- ('street', 'AVENUE B'),
- ('street', 'AVENUE C'),
- ('street', 'AVENUE D'),
- ('street', 'AVENUE E'),
- ('street', 'AVENUE F'),
- ('street', 'AVENUE H'),
- ('street', 'AVENUE I'),
- ('street', 'AVENUE M'),
- ('street', 'AVENUE N'),
- ('street', 'AVENUE OF THE PALMS'),
- ('street', 'AVERY ST'),
- ('street', 'AVILA ST'),
- ('street', 'AVOCA ALY'),
- ('street', 'AVOCET WAY'),
- ('street', 'AVON WAY'),
- ('street', 'AZTEC ST'),
- ('street', 'BACHE ST'),
- ('street', 'BACON ST'),
- ('street', 'BADEN ST'),
- ('street', 'BADGER ST'),
- ('street', 'BAKER CT'),
- ('street', 'BAKER ST'),
- ('street', 'BALANCE ST'),
- ('street', 'BALBOA ST'),
- ('street', 'BALCETA AVE'),
- ('street', 'BALDWIN CT'),
- ('street', 'BALHI CT'),
- ('street', 'BALMY ST'),
- ('street', 'BALTIMORE WAY'),
- ('street', 'BANBURY DR'),
- ('street', 'BANCROFT AVE'),
- ('street', 'BANK ST'),
- ('street', 'BANKS ST'),
- ('street', 'BANNAN PL'),
- ('street', 'BANNEKER WAY'),
- ('street', 'BANNOCK ST'),
- ('street', 'BARCELONA AVE'),
- ('street', 'BARNARD AVE'),
- ('street', 'BARNEVELD AVE'),
- ('street', 'BARRY CT'),
- ('street', 'BARTLETT ST'),
- ('street', 'BARTOL ST'),
- ('street', 'BASS CT'),
- ('street', 'BATTERY ST'),
- ('street', 'BATTERY BLANEY RD'),
- ('street', 'BATTERY CAULFIELD RD'),
- ('street', 'BATTERY CHAMBERLIN RD'),
- ('street', 'BATTERY CRANSTON RD'),
- ('street', 'BATTERY CROSBY RD'),
- ('street', 'BATTERY DYNAMITE RD'),
- ('street', 'BATTERY EAST RD'),
- ('street', 'BATTERY SAFFORD RD'),
- ('street', 'BATTERY WAGNER RD'),
- ('street', 'BAXTER ALY'),
- ('street', 'BAY ST'),
- ('street', 'BAY SHORE BLVD'),
- ('street', 'BAY SHORE BLVD OFF RAMP'),
- ('street', 'BAY SHORE BLVD ON RAMP'),
- ('street', 'BAY VIEW ST'),
- ('street', 'BAYSIDE DR'),
- ('street', 'BAYSIDE VILLAGE PL'),
- ('street', 'BAYVIEW CIR'),
- ('street', 'BAYVIEW PARK RD'),
- ('street', 'BAYWOOD CT'),
- ('street', 'BEACH ST'),
- ('street', 'BEACHMONT DR'),
- ('street', 'BEACON ST'),
- ('street', 'BEALE ST'),
- ('street', 'BEATRICE LN'),
- ('street', 'BEAUMONT AVE'),
- ('street', 'BEAVER ST'),
- ('street', 'BECKETT ST'),
- ('street', 'BEDFORD PL'),
- ('street', 'BEEMAN LN'),
- ('street', 'BEHR AVE'),
- ('street', 'BEIDEMAN ST'),
- ('street', 'BELCHER ST'),
- ('street', 'BELDEN ST'),
- ('street', 'BELGRAVE AVE'),
- ('street', 'BELL CT'),
- ('street', 'BELLA VISTA WAY'),
- ('street', 'BELLAIR PL'),
- ('street', 'BELLE AVE'),
- ('street', 'BELLES ST'),
- ('street', 'BELLEVUE AVE'),
- ('street', 'BELMONT AVE'),
- ('street', 'BELVEDERE ST'),
- ('street', 'BEMIS ST'),
- ('street', 'BENGAL ALY'),
- ('street', 'BENNINGTON ST'),
- ('street', 'BENTON AVE'),
- ('street', 'BEPLER ST'),
- ('street', 'BERCUT ACCESS RD'),
- ('street', 'BERGEN ALY'),
- ('street', 'BERKELEY WAY'),
- ('street', 'BERKSHIRE WAY'),
- ('street', 'BERNAL HEIGHTS BLVD'),
- ('street', 'BERNARD ST'),
- ('street', 'BERNICE ST'),
- ('street', 'BERNICE RODGERS WAY'),
- ('street', 'BERRY ST'),
- ('street', 'BERRY EXTENSION ST'),
- ('street', 'BERTHA LN'),
- ('street', 'BERTIE MINOR LN'),
- ('street', 'BERTITA ST'),
- ('street', 'BERWICK PL'),
- ('street', 'BESSIE ST'),
- ('street', 'BEULAH ST'),
- ('street', 'BEVERLY ST'),
- ('street', 'BIGELOW CT'),
- ('street', 'BIGLER AVE'),
- ('street', 'BIRCH ST'),
- ('street', 'BIRCHWOOD CT'),
- ('street', 'BIRD ST'),
- ('street', 'BIRMINGHAM RD'),
- ('street', 'BISHOP ST'),
- ('street', 'BITTING AVE'),
- ('street', 'BLACK PL'),
- ('street', 'BLACKSTONE CT'),
- ('street', 'BLAIR TER'),
- ('street', 'BLAIRWOOD LN'),
- ('street', 'BLAKE ST'),
- ('street', 'BLANCHE ST'),
- ('street', 'BLANDY ST'),
- ('street', 'BLANKEN AVE'),
- ('street', 'BLATCHFORD LN'),
- ('street', 'BLISS CT'),
- ('street', 'BLISS RD'),
- ('street', 'BLUXOME ST'),
- ('street', 'BLYTHDALE AVE'),
- ('street', 'BOALT ST'),
- ('street', 'BOARDMAN PL'),
- ('street', 'BOB KAUFMAN ALY'),
- ('street', 'BOCANA ST'),
- ('street', 'BONIFACIO ST'),
- ('street', 'BONITA ST'),
- ('street', 'BONNIE BRAE LN'),
- ('street', 'BONVIEW ST'),
- ('street', 'BORICA ST'),
- ('street', 'BOSWORTH ST'),
- ('street', 'BOUTWELL ST'),
- ('street', 'BOWDOIN ST'),
- ('street', 'BOWLEY CT'),
- ('street', 'BOWLEY ST'),
- ('street', 'BOWLING GREEN DR'),
- ('street', 'BOWMAN CT'),
- ('street', 'BOYD ST'),
- ('street', 'BOYLSTON ST'),
- ('street', 'BOYNTON CT'),
- ('street', 'BRADFORD ST'),
- ('street', 'BRADY ST'),
- ('street', 'BRANNAN ST'),
- ('street', 'BRANT ALY'),
- ('street', 'BRAZIL AVE'),
- ('street', 'BREEN PL'),
- ('street', 'BRENTWOOD AVE'),
- ('street', 'BRET HARTE TER'),
- ('street', 'BREWSTER ST'),
- ('street', 'BRICE TER'),
- ('street', 'BRIDGEVIEW DR'),
- ('street', 'BRIDGEVIEW WAY'),
- ('street', 'BRIGHT ST'),
- ('street', 'BRIGHTON AVE'),
- ('street', 'BRITTON ST'),
- ('street', 'BROAD ST'),
- ('street', 'BROADMOOR DR'),
- ('street', 'BROADWAY'),
- ('street', 'BRODERICK ST'),
- ('street', 'BROMLEY PL'),
- ('street', 'BROMPTON AVE'),
- ('street', 'BRONTE ST'),
- ('street', 'BROOK ST'),
- ('street', 'BROOKDALE AVE'),
- ('street', 'BROOKHAVEN LN'),
- ('street', 'BROOKLYN PL'),
- ('street', 'BROOKS ST'),
- ('street', 'BROSNAN ST'),
- ('street', 'BROTHERHOOD WAY'),
- ('street', 'BROWN ST'),
- ('street', 'BRUCE AVE'),
- ('street', 'BRUMISS TER'),
- ('street', 'BRUNSWICK ST'),
- ('street', 'BRUSH LN'),
- ('street', 'BRUSH PL'),
- ('street', 'BRUSSELS ST'),
- ('street', 'BRYANT ST'),
- ('street', 'BUCARELI DR'),
- ('street', 'BUCHANAN ST'),
- ('street', 'BUCKINGHAM WAY'),
- ('street', 'BUENA VISTA TER'),
- ('street', 'BURGOYNE ST'),
- ('street', 'BURKE AVE'),
- ('street', 'BURLWOOD DR'),
- ('street', 'BURNETT AVE'),
- ('street', 'BURNS PL'),
- ('street', 'BURNSIDE AVE'),
- ('street', 'BURR AVE'),
- ('street', 'BURRITT ST'),
- ('street', 'BURROWS DR'),
- ('street', 'BURROWS ST'),
- ('street', 'BUSH ST'),
- ('street', 'BUTTE PL'),
- ('street', 'BYRON CT'),
- ('street', 'BYXBEE ST'),
- ('street', 'C ST'),
- ('street', 'CABRILLO ST'),
- ('street', 'CADELL PL'),
- ('street', 'CAINE AVE'),
- ('street', 'CAIRE TER'),
- ('street', 'CALEDONIA ST'),
- ('street', 'CALGARY ST'),
- ('street', 'CALHOUN TER'),
- ('street', 'CALIFORNIA AVE'),
- ('street', 'CALIFORNIA ST'),
- ('street', 'CALVERT DR'),
- ('street', 'CAMBON DR'),
- ('street', 'CAMBRIDGE ST'),
- ('street', 'CAMELLIA AVE'),
- ('street', 'CAMEO WAY'),
- ('street', 'CAMERON WAY'),
- ('street', 'CAMP ST'),
- ('street', 'CAMPBELL AVE'),
- ('street', 'CAMPTON PL'),
- ('street', 'CAMPUS LN'),
- ('street', 'CAMPUS WAY'),
- ('street', 'CANBY LN'),
- ('street', 'CANBY ST'),
- ('street', 'CANDLESTICK COVE WAY'),
- ('street', 'CANDLESTICK POINT SRA'),
- ('street', 'CANYON DR'),
- ('street', 'CAPISTRANO AVE'),
- ('street', 'CAPITOL AVE'),
- ('street', 'CAPP ST'),
- ('street', 'CAPRA WAY'),
- ('street', 'CARD ALY'),
- ('street', 'CARDENAS AVE'),
- ('street', 'CARGO WAY'),
- ('street', 'CARL ST'),
- ('street', 'CARMEL ST'),
- ('street', 'CARMELITA ST'),
- ('street', 'CARNELIAN WAY'),
- ('street', 'CAROLINA ST'),
- ('street', 'CARPENTER CT'),
- ('street', 'CARR ST'),
- ('street', 'CARRIE ST'),
- ('street', 'CARRIZAL ST'),
- ('street', 'CARROLL AVE'),
- ('street', 'CARSON ST'),
- ('street', 'CARTER ST'),
- ('street', 'CARVER ST'),
- ('street', 'CASA WAY'),
- ('street', 'CASCADE WALK'),
- ('street', 'CASE ST'),
- ('street', 'CASELLI AVE'),
- ('street', 'CASHMERE ST'),
- ('street', 'CASITAS AVE'),
- ('street', 'CASSANDRA CT'),
- ('street', 'CASTELO AVE'),
- ('street', 'CASTENADA AVE'),
- ('street', 'CASTILLO ST'),
- ('street', 'CASTLE ST'),
- ('street', 'CASTLE MANOR AVE'),
- ('street', 'CASTRO ST'),
- ('street', 'CATALINA ST'),
- ('street', 'CATHERINE CT'),
- ('street', 'CAYUGA AVE'),
- ('street', 'CCSF PARKING LOT'),
- ('street', 'CECILIA AVE'),
- ('street', 'CEDAR ST'),
- ('street', 'CEDRO AVE'),
- ('street', 'CENTRAL AVE'),
- ('street', 'CENTRAL MAGAZINE RD'),
- ('street', 'CENTURY PL'),
- ('street', 'CERES ST'),
- ('street', 'CERRITOS AVE'),
- ('street', 'CERVANTES BLVD'),
- ('street', 'CESAR CHAVEZ ST'),
- ('street', 'CESAR CHAVEZ ON RAMP'),
- ('street', 'CHABOT TER'),
- ('street', 'CHAIN OF LAKES DR'),
- ('street', 'CHANCERY LN'),
- ('street', 'CHANNEL'),
- ('street', 'CHANNEL ST'),
- ('street', 'CHAPMAN ST'),
- ('street', 'CHARLES ST'),
- ('street', 'CHARLES J BRENHAM PL'),
- ('street', 'CHARLTON CT'),
- ('street', 'CHARTER OAK AVE'),
- ('street', 'CHASE CT'),
- ('street', 'CHATHAM PL'),
- ('street', 'CHATTANOOGA ST'),
- ('street', 'CHAVES AVE'),
- ('street', 'CHENERY ST'),
- ('street', 'CHERRY ST'),
- ('street', 'CHESLEY ST'),
- ('street', 'CHESTER AVE'),
- ('street', 'CHESTNUT ST'),
- ('street', 'CHICAGO WAY'),
- ('street', 'CHILD ST'),
- ('street', 'CHILTON AVE'),
- ('street', 'CHINA BASIN ST'),
- ('street', 'CHINOOK CT'),
- ('street', 'CHRISTMAS TREE POINT RD'),
- ('street', 'CHRISTOPHER DR'),
- ('street', 'CHULA LN'),
- ('street', 'CHUMASERO DR'),
- ('street', 'CHURCH ST'),
- ('street', 'CHURCH ACCESS RD'),
- ('street', 'CHURCH PARKING LOT'),
- ('street', 'CIELITO DR'),
- ('street', 'CIRCULAR AVE'),
- ('street', 'CITYVIEW WAY'),
- ('street', 'CLAIRVIEW CT'),
- ('street', 'CLARA ST'),
- ('street', 'CLAREMONT BLVD'),
- ('street', 'CLARENCE PL'),
- ('street', 'CLARENDON AVE'),
- ('street', 'CLARION ALY'),
- ('street', 'CLARKE LN'),
- ('street', 'CLARKE ST'),
- ('street', 'CLARKSON ST'),
- ('street', 'CLAUDE LN'),
- ('street', 'CLAY ST'),
- ('street', 'CLAYTON ST'),
- ('street', 'CLEARFIELD DR'),
- ('street', 'CLEARVIEW CT'),
- ('street', 'CLEARY CT'),
- ('street', 'CLEMENT ST'),
- ('street', 'CLEMENTINA ST'),
- ('street', 'CLEO RAND AVE'),
- ('street', 'CLEVELAND ST'),
- ('street', 'CLIFFORD TER'),
- ('street', 'CLINTON PARK'),
- ('street', 'CLIPPER ST'),
- ('street', 'CLIPPER TER'),
- ('street', 'CLIPPER COVE WAY'),
- ('street', 'CLOUD CIR'),
- ('street', 'CLOVER LN'),
- ('street', 'CLOVER ST'),
- ('street', 'CLYDE ST'),
- ('street', 'COCHRANE ST'),
- ('street', 'CODMAN PL'),
- ('street', 'COHEN PL'),
- ('street', 'COLBY ST'),
- ('street', 'COLE ST'),
- ('street', 'COLEMAN ST'),
- ('street', 'COLERIDGE ST'),
- ('street', 'COLIN PL'),
- ('street', 'COLIN P KELLY JR ST'),
- ('street', 'COLLEEN WAY'),
- ('street', 'COLLEGE AVE'),
- ('street', 'COLLEGE TER'),
- ('street', 'COLLINGWOOD ST'),
- ('street', 'COLLINS ST'),
- ('street', 'COLON AVE'),
- ('street', 'COLONIAL WAY'),
- ('street', 'COLTON ST'),
- ('street', 'COLUMBIA SQUARE ST'),
- ('street', 'COLUMBUS AVE'),
- ('street', 'COLUSA PL'),
- ('street', 'COMERFORD ST'),
- ('street', 'COMMER CT'),
- ('street', 'COMMERCIAL ST'),
- ('street', 'COMMONWEALTH AVE'),
- ('street', 'COMPTON RD'),
- ('street', 'CONCORD ST'),
- ('street', 'CONCOURSE DR'),
- ('street', 'CONGDON ST'),
- ('street', 'CONGO ST'),
- ('street', 'CONKLING ST'),
- ('street', 'CONNECTICUT ST'),
- ('street', 'CONRAD ST'),
- ('street', 'CONSERVATORY ACCESS RD'),
- ('street', 'CONSTANSO WAY'),
- ('street', 'CONTINUUM WAY'),
- ('street', 'CONVERSE ST'),
- ('street', 'COOK ST'),
- ('street', 'COOPER ALY'),
- ('street', 'COPPER ALY'),
- ('street', 'CORA ST'),
- ('street', 'CORAL CT'),
- ('street', 'CORAL RD'),
- ('street', 'CORALINO LN'),
- ('street', 'CORBETT AVE'),
- ('street', 'CORBIN PL'),
- ('street', 'CORDELIA ST'),
- ('street', 'CORDOVA ST'),
- ('street', 'CORNWALL ST'),
- ('street', 'CORONA ST'),
- ('street', 'CORONADO ST'),
- ('street', 'CORTES AVE'),
- ('street', 'CORTLAND AVE'),
- ('street', 'CORWIN ST'),
- ('street', 'COSGROVE ST'),
- ('street', 'COSMO PL'),
- ('street', 'COSO AVE'),
- ('street', 'COSTA ST'),
- ('street', 'COTTAGE ROW'),
- ('street', 'COTTER ST'),
- ('street', 'COUNTRY CLUB DR'),
- ('street', 'COVENTRY CT'),
- ('street', 'COVENTRY LN'),
- ('street', 'COWELL PL'),
- ('street', 'COWLES ST'),
- ('street', 'CRAGMONT AVE'),
- ('street', 'CRAGS CT'),
- ('street', 'CRAIG CT'),
- ('street', 'CRANE ST'),
- ('street', 'CRANLEIGH DR'),
- ('street', 'CRAUT ST'),
- ('street', 'CRESCENT AVE'),
- ('street', 'CRESCENT CT'),
- ('street', 'CRESCENT WAY'),
- ('street', 'CRESCIO CT'),
- ('street', 'CRESPI DR'),
- ('street', 'CRESTA VISTA DR'),
- ('street', 'CRESTLAKE DR'),
- ('street', 'CRESTLINE DR'),
- ('street', 'CRESTMONT DR'),
- ('street', 'CRESTWELL WALK'),
- ('street', 'CRISP RD'),
- ('street', 'CRISSY FIELD AVE'),
- ('street', 'CROAKER CT'),
- ('street', 'CROOK ST'),
- ('street', 'CROSS ST'),
- ('street', 'CROSSOVER DR'),
- ('street', 'CROWN CT'),
- ('street', 'CROWN TER'),
- ('street', 'CRYSTAL ST'),
- ('street', 'CUBA ALY'),
- ('street', 'CUESTA CT'),
- ('street', 'CULEBRA TER'),
- ('street', 'CUMBERLAND ST'),
- ('street', 'CUNNINGHAM PL'),
- ('street', 'CURTIS ST'),
- ('street', 'CUSHMAN ST'),
- ('street', 'CUSTER AVE'),
- ('street', 'CUSTOM HOUSE PL'),
- ('street', 'CUTLER AVE'),
- ('street', 'CUVIER ST'),
- ('street', 'CYPRESS ST'),
- ('street', 'CYRIL MAGNIN ST'),
- ('street', 'CYRUS PL'),
- ('street', 'D ST'),
- ('street', 'DAGGETT ST'),
- ('street', 'DAKOTA ST'),
- ('street', 'DALEWOOD WAY'),
- ('street', 'DANIEL BURNHAM CT'),
- ('street', 'DANTON ST'),
- ('street', 'DANVERS ST'),
- ('street', 'DARIEN WAY'),
- ('street', 'DARRELL PL'),
- ('street', 'DARTMOUTH ST'),
- ('street', 'DASHIELL HAMMETT ST'),
- ('street', 'DAVENPORT LN'),
- ('street', 'DAVIDSON AVE'),
- ('street', 'DAVIS CT'),
- ('street', 'DAVIS ST'),
- ('street', 'DAWNVIEW WAY'),
- ('street', 'DAWSON PL'),
- ('street', 'DAY ST'),
- ('street', 'DE BOOM ST'),
- ('street', 'DE FOREST WAY'),
- ('street', 'DE HARO ST'),
- ('street', 'DE LONG ST'),
- ('street', 'DE MONTFORT AVE'),
- ('street', 'DE SOTO ST'),
- ('street', 'DE WOLF ST'),
- ('street', 'DEARBORN ST'),
- ('street', 'DECATUR ST'),
- ('street', 'DECKER ALY'),
- ('street', 'DEDMAN CT'),
- ('street', 'DEEMS RD'),
- ('street', 'DEHON ST'),
- ('street', 'DEL MONTE ST'),
- ('street', 'DEL SUR AVE'),
- ('street', 'DEL VALE AVE'),
- ('street', 'DELANCEY ST'),
- ('street', 'DELANO AVE'),
- ('street', 'DELAWARE ST'),
- ('street', 'DELGADO PL'),
- ('street', 'DELLBROOK AVE'),
- ('street', 'DELMAR ST'),
- ('street', 'DELTA ST'),
- ('street', 'DEMING ST'),
- ('street', 'DENSLOWE DR'),
- ('street', 'DERBY ST'),
- ('street', 'DESMOND ST'),
- ('street', 'DETROIT ST'),
- ('street', 'DEVONSHIRE WAY'),
- ('street', 'DEWEY BLVD'),
- ('street', 'DEWITT RD'),
- ('street', 'DIAMOND ST'),
- ('street', 'DIAMOND COVE TER'),
- ('street', 'DIAMOND HEIGHTS BLVD'),
- ('street', 'DIANA ST'),
- ('street', 'DIAZ AVE'),
- ('street', 'DICHA ALY'),
- ('street', 'DICHIERA CT'),
- ('street', 'DICKINSON ST'),
- ('street', 'DIGBY ST'),
- ('street', 'DIRK DIRKSEN PL'),
- ('street', 'DIVISADERO ST'),
- ('street', 'DIVISION ST'),
- ('street', 'DIXIE ALY'),
- ('street', 'DOCK ST'),
- ('street', 'DODGE ST'),
- ('street', 'DOLORES ST'),
- ('street', 'DOLORES TER'),
- ('street', 'DOLPHIN CT'),
- ('street', 'DON CHEE WAY'),
- ('street', 'DONAHUE ST'),
- ('street', 'DONNER AVE'),
- ('street', 'DORADO TER'),
- ('street', 'DORANTES AVE'),
- ('street', 'DORCAS WAY'),
- ('street', 'DORCHESTER WAY'),
- ('street', 'DORE ST'),
- ('street', 'DORIC ALY'),
- ('street', 'DORLAND ST'),
- ('street', 'DORMAN AVE'),
- ('street', 'DORMITORY RD'),
- ('street', 'DOUBLE ROCK ST'),
- ('street', 'DOUGLASS ST'),
- ('street', 'DOVE LOOP'),
- ('street', 'DOW PL'),
- ('street', 'DOWNEY ST'),
- ('street', 'DR CARLTON B GOODLETT PL'),
- ('street', 'DRAKE ST'),
- ('street', 'DRUMM ST'),
- ('street', 'DRUMMOND ALY'),
- ('street', 'DUBLIN ST'),
- ('street', 'DUBOCE AVE'),
- ('street', 'DUDLEY RD'),
- ('street', 'DUKES CT'),
- ('street', 'DUNCAN ST'),
- ('street', 'DUNCOMBE ALY'),
- ('street', 'DUNNES ALY'),
- ('street', 'DUNSHEE ST'),
- ('street', 'DUNSMUIR ST'),
- ('street', 'DUTCH WINDMILL ACCESS RD'),
- ('street', 'DWIGHT ST'),
- ('street', 'E ST'),
- ('street', 'EAGLE ST'),
- ('street', 'EARL ST'),
- ('street', 'EASEMENT'),
- ('street', 'EAST RD'),
- ('street', 'EAST BEACH RD'),
- ('street', 'EAST CRYSTAL COVE TER'),
- ('street', 'EAST FORT MILEY RD'),
- ('street', 'EASTMAN ST'),
- ('street', 'EASTWOOD DR'),
- ('street', 'EATON PL'),
- ('street', 'ECKER ST'),
- ('street', 'EDDY ST'),
- ('street', 'EDGAR AVE'),
- ('street', 'EDGARDO PL'),
- ('street', 'EDGEHILL WAY'),
- ('street', 'EDGEWOOD AVE'),
- ('street', 'EDIE RD'),
- ('street', 'EDINBURGH ST'),
- ('street', 'EDITH ST'),
- ('street', 'EDNA ST'),
- ('street', 'EDWARD ST'),
- ('street', 'EGBERT AVE'),
- ('street', 'EL CAMINO DEL MAR'),
- ('street', 'EL DORADO ST'),
- ('street', 'EL MIRASOL PL'),
- ('street', 'EL PLAZUELA WAY'),
- ('street', 'EL POLIN LOOP'),
- ('street', 'EL SERENO CT'),
- ('street', 'EL VERANO WAY'),
- ('street', 'ELDRIDGE ST'),
- ('street', 'ELGIN PARK'),
- ('street', 'ELIM ALY'),
- ('street', 'ELIZABETH ST'),
- ('street', 'ELK ST'),
- ('street', 'ELLERT ST'),
- ('street', 'ELLINGTON AVE'),
- ('street', 'ELLIOT ST'),
- ('street', 'ELLIS ST'),
- ('street', 'ELLSWORTH ST'),
- ('street', 'ELM ST'),
- ('street', 'ELMHURST DR'),
- ('street', 'ELMIRA ST'),
- ('street', 'ELMWOOD WAY'),
- ('street', 'ELSIE ST'),
- ('street', 'ELWOOD ST'),
- ('street', 'EMERALD LN'),
- ('street', 'EMERALD COVE WAY'),
- ('street', 'EMERSON ST'),
- ('street', 'EMERY LN'),
- ('street', 'EMIL LN'),
- ('street', 'EMMA ST'),
- ('street', 'EMMETT CT'),
- ('street', 'ENCANTO AVE'),
- ('street', 'ENCINAL WALK'),
- ('street', 'ENCLINE CT'),
- ('street', 'ENGLISH ST'),
- ('street', 'ENTERPRISE ST'),
- ('street', 'ENTRADA CT'),
- ('street', 'ERIE ST'),
- ('street', 'ERKSON CT'),
- ('street', 'ERVINE ST'),
- ('street', 'ESCOLTA WAY'),
- ('street', 'ESCONDIDO AVE'),
- ('street', 'ESMERALDA AVE'),
- ('street', 'ESPANOLA ST'),
- ('street', 'ESQUINA DR'),
- ('street', 'ESSEX ST'),
- ('street', 'ESTERO AVE'),
- ('street', 'EUCALYPTUS DR'),
- ('street', 'EUCLID AVE'),
- ('street', 'EUGENIA AVE'),
- ('street', 'EUREKA ST'),
- ('street', 'EVANS AVE'),
- ('street', 'EVE ST'),
- ('street', 'EVELYN WAY'),
- ('street', 'EVERGLADE DR'),
- ('street', 'EVERSON ST'),
- ('street', 'EWER PL'),
- ('street', 'EWING TER'),
- ('street', 'EXCELSIOR AVE'),
- ('street', 'EXCHANGE PL'),
- ('street', 'EXECUTIVE PARK BLVD'),
- ('street', 'EXETER ST'),
- ('street', 'EXPOSITION DR'),
- ('street', 'FAIR AVE'),
- ('street', 'FAIR OAKS ST'),
- ('street', 'FAIRBANKS ST'),
- ('street', 'FAIRFAX AVE'),
- ('street', 'FAIRFIELD WAY'),
- ('street', 'FAIRMOUNT ST'),
- ('street', 'FAITH ST'),
- ('street', 'FALLON PL'),
- ('street', 'FALMOUTH ST'),
- ('street', 'FANNING WAY'),
- ('street', 'FARALLONES ST'),
- ('street', 'FARGO PL'),
- ('street', 'FARNSWORTH LN'),
- ('street', 'FARNUM ST'),
- ('street', 'FARRAGUT AVE'),
- ('street', 'FARVIEW CT'),
- ('street', 'FAUNTLEROY LN'),
- ('street', 'FAXON AVE'),
- ('street', 'FEDERAL ST'),
- ('street', 'FELIX AVE'),
- ('street', 'FELL ST'),
- ('street', 'FELL ACCESS RD'),
- ('street', 'FELLA PL'),
- ('street', 'FELTON ST'),
- ('street', 'FENTON LN'),
- ('street', 'FERN ST'),
- ('street', 'FERNANDEZ ST'),
- ('street', 'FERNWOOD DR'),
- ('street', 'FIELDING ST'),
- ('street', 'FIFTH ST'),
- ('street', 'FILBERT ST'),
- ('street', 'FILLMORE ST'),
- ('street', 'FINLEY RD'),
- ('street', 'FISHER ALY'),
- ('street', 'FISHER AVE'),
- ('street', 'FISHER LOOP'),
- ('street', 'FITCH ST'),
- ('street', 'FITZGERALD AVE'),
- ('street', 'FLINT ST'),
- ('street', 'FLOOD AVE'),
- ('street', 'FLORA ST'),
- ('street', 'FLORENCE ST'),
- ('street', 'FLORENTINE AVE'),
- ('street', 'FLORIDA ST'),
- ('street', 'FLOUNDER CT'),
- ('street', 'FLOURNOY ST'),
- ('street', 'FLOWER ST'),
- ('street', 'FOERSTER ST'),
- ('street', 'FOLSOM ST'),
- ('street', 'FONT BLVD'),
- ('street', 'FONTINELLA TER'),
- ('street', 'FOOTE AVE'),
- ('street', 'FORD ST'),
- ('street', 'FOREST RD'),
- ('street', 'FOREST HILL PATH'),
- ('street', 'FOREST KNOLLS DR'),
- ('street', 'FOREST SIDE AVE'),
- ('street', 'FOREST VIEW DR'),
- ('street', 'FORSYTH LN'),
- ('street', 'FORT FUNSTON RD'),
- ('street', 'FORTUNA AVE'),
- ('street', 'FOUNTAIN ST'),
- ('street', 'FOWLER AVE'),
- ('street', 'FRANCE AVE'),
- ('street', 'FRANCIS ST'),
- ('street', 'FRANCISCO ST'),
- ('street', 'FRANCONIA ST'),
- ('street', 'FRANK NORRIS ST'),
- ('street', 'FRANKLIN ST'),
- ('street', 'FRATESSA CT'),
- ('street', 'FREDELA LN'),
- ('street', 'FREDERICK ST'),
- ('street', 'FREDSON CT'),
- ('street', 'FREELON ST'),
- ('street', 'FREEMAN CT'),
- ('street', 'FREMONT ST'),
- ('street', 'FRENCH CT'),
- ('street', 'FRESNEL WAY'),
- ('street', 'FRESNO ST'),
- ('street', 'FRIEDELL ST'),
- ('street', 'FRIENDSHIP CT'),
- ('street', 'FRONT ST'),
- ('street', 'FUENTE AVE'),
- ('street', 'FULTON ST'),
- ('street', 'FUNSTON AVE'),
- ('street', 'FUNSTON RD'),
- ('street', 'GABILAN WAY'),
- ('street', 'GAISER CT'),
- ('street', 'GALEWOOD CIR'),
- ('street', 'GALILEE LN'),
- ('street', 'GALINDO AVE'),
- ('street', 'GALLAGHER LN'),
- ('street', 'GALVEZ AVE'),
- ('street', 'GAMBIER ST'),
- ('street', 'GARCES DR'),
- ('street', 'GARCIA AVE'),
- ('street', 'GARDEN ST'),
- ('street', 'GARDEN WAY'),
- ('street', 'GARDENER RD'),
- ('street', 'GARDENSIDE DR'),
- ('street', 'GARFIELD ST'),
- ('street', 'GARLINGTON CT'),
- ('street', 'GARNETT TER'),
- ('street', 'GARRISON AVE'),
- ('street', 'GATES ST'),
- ('street', 'GATEVIEW AVE'),
- ('street', 'GATEVIEW CT'),
- ('street', 'GATUN ALY'),
- ('street', 'GAVEN ST'),
- ('street', 'GAVIOTA WAY'),
- ('street', 'GEARY BLVD'),
- ('street', 'GEARY ST'),
- ('street', 'GELLERT DR'),
- ('street', 'GENE FRIEND WAY'),
- ('street', 'GENEBERN WAY'),
- ('street', 'GENERAL KENNEDY AVE'),
- ('street', 'GENEVA AVE'),
- ('street', 'GENNESSEE ST'),
- ('street', 'GENOA PL'),
- ('street', 'GEORGE CT'),
- ('street', 'GEORGIA ST'),
- ('street', 'GERKE ALY'),
- ('street', 'GERMANIA ST'),
- ('street', 'GETZ ST'),
- ('street', 'GIANTS DR'),
- ('street', 'GIBB ST'),
- ('street', 'GIBBON CT'),
- ('street', 'GIBBON LN'),
- ('street', 'GIBSON RD'),
- ('street', 'GILBERT ST'),
- ('street', 'GILLETTE AVE'),
- ('street', 'GILMAN AVE'),
- ('street', 'GILROY ST'),
- ('street', 'GIRARD RD'),
- ('street', 'GIRARD ST'),
- ('street', 'GLADEVIEW WAY'),
- ('street', 'GLADIOLUS LN'),
- ('street', 'GLADSTONE DR'),
- ('street', 'GLADYS ST'),
- ('street', 'GLEN CT'),
- ('street', 'GLENBROOK AVE'),
- ('street', 'GLENDALE ST'),
- ('street', 'GLENHAVEN LN'),
- ('street', 'GLENVIEW DR'),
- ('street', 'GLOBE ALY'),
- ('street', 'GLORIA CT'),
- ('street', 'GLOVER ST'),
- ('street', 'GODEUS ST'),
- ('street', 'GOETHE ST'),
- ('street', 'GOETTINGEN ST'),
- ('street', 'GOLD ST'),
- ('street', 'GOLD MINE DR'),
- ('street', 'GOLDBERG LN'),
- ('street', 'GOLDEN CT'),
- ('street', 'GOLDEN GATE AVE'),
- ('street', 'GOLDING LN'),
- ('street', 'GOLETA AVE'),
- ('street', 'GOLF COURSE ACCESS RD'),
- ('street', 'GONZALEZ DR'),
- ('street', 'GORDON ST'),
- ('street', 'GORGAS AVE'),
- ('street', 'GORHAM ST'),
- ('street', 'GOUGH ST'),
- ('street', 'GOULD ST'),
- ('street', 'GRACE ST'),
- ('street', 'GRAFTON AVE'),
- ('street', 'GRAHAM ST'),
- ('street', 'GRANADA AVE'),
- ('street', 'GRAND VIEW AVE'),
- ('street', 'GRAND VIEW TER'),
- ('street', 'GRANT AVE'),
- ('street', 'GRANVILLE WAY'),
- ('street', 'GRATTAN ST'),
- ('street', 'GRAYSTONE TER'),
- ('street', 'GREAT HWY'),
- ('street', 'GREELY CT'),
- ('street', 'GREEN ST'),
- ('street', 'GREENOUGH AVE'),
- ('street', 'GREENVIEW CT'),
- ('street', 'GREENWICH CT'),
- ('street', 'GREENWICH ST'),
- ('street', 'GREENWOOD AVE'),
- ('street', 'GRENARD TER'),
- ('street', 'GRIFFITH ST'),
- ('street', 'GRIJALVA DR'),
- ('street', 'GROTE PL'),
- ('street', 'GROVE ST'),
- ('street', 'GUERRERO ST'),
- ('street', 'GUTTENBERG ST'),
- ('street', 'GUY PL'),
- ('street', 'H ST'),
- ('street', 'HABITAT TER'),
- ('street', 'HAGIWARA TEA GARDEN DR'),
- ('street', 'HAHN ST'),
- ('street', 'HAIGHT ST'),
- ('street', 'HALE ST'),
- ('street', 'HALIBUT CT'),
- ('street', 'HALLAM ST'),
- ('street', 'HALLECK ST'),
- ('street', 'HALYBURTON CT'),
- ('street', 'HAMERTON AVE'),
- ('street', 'HAMILTON ST'),
- ('street', 'HAMLIN ST'),
- ('street', 'HAMPSHIRE ST'),
- ('street', 'HANCOCK ST'),
- ('street', 'HANGAH ST'),
- ('street', 'HANOVER ST'),
- ('street', 'HARBOR RD'),
- ('street', 'HARDIE AVE'),
- ('street', 'HARDIE PL'),
- ('street', 'HARDING RD'),
- ('street', 'HARE ST'),
- ('street', 'HARKNESS AVE'),
- ('street', 'HARLAN PL'),
- ('street', 'HARLEM ALY'),
- ('street', 'HARLOW ST'),
- ('street', 'HARNEY WAY'),
- ('street', 'HAROLD AVE'),
- ('street', 'HARPER ST'),
- ('street', 'HARRIET LN'),
- ('street', 'HARRIET ST'),
- ('street', 'HARRINGTON ST'),
- ('street', 'HARRIS PL'),
- ('street', 'HARRISON BLVD'),
- ('street', 'HARRISON ST'),
- ('street', 'HARRY ST'),
- ('street', 'HARTFORD ST'),
- ('street', 'HARVARD ST'),
- ('street', 'HASTINGS TER'),
- ('street', 'HATTIE ST'),
- ('street', 'HAVELOCK ST'),
- ('street', 'HAVENS ST'),
- ('street', 'HAVENSIDE DR'),
- ('street', 'HAWES ST'),
- ('street', 'HAWKINS LN'),
- ('street', 'HAWTHORNE ST'),
- ('street', 'HAYES ST'),
- ('street', 'HAYS ST'),
- ('street', 'HAYWARD ST'),
- ('street', 'HAZELWOOD AVE'),
- ('street', 'HEAD ST'),
- ('street', 'HEALY AVE'),
- ('street', 'HEARST AVE'),
- ('street', 'HEATHER AVE'),
- ('street', 'HELEN ST'),
- ('street', 'HELENA ST'),
- ('street', 'HEMLOCK ST'),
- ('street', 'HEMWAY TER'),
- ('street', 'HENRY ST'),
- ('street', 'HENRY ADAMS ST'),
- ('street', 'HERITAGE LN'),
- ('street', 'HERMANN ST'),
- ('street', 'HERNANDEZ AVE'),
- ('street', 'HERON ST'),
- ('street', 'HESTER AVE'),
- ('street', 'HEYMAN AVE'),
- ('street', 'HICKORY ST'),
- ('street', 'HICKS RD'),
- ('street', 'HIDALGO TER'),
- ('street', 'HIGH ST'),
- ('street', 'HIGHLAND AVE'),
- ('street', 'HIGUERA AVE'),
- ('street', 'HILIRITAS AVE'),
- ('street', 'HILL DR'),
- ('street', 'HILL ST'),
- ('street', 'HILL POINT AVE'),
- ('street', 'HILLCREST CT'),
- ('street', 'HILLCREST RD'),
- ('street', 'HILLSIDE LN'),
- ('street', 'HILLVIEW CT'),
- ('street', 'HILLWAY AVE'),
- ('street', 'HILTON ST'),
- ('street', 'HIMMELMANN PL'),
- ('street', 'HITCHCOCK LN'),
- ('street', 'HITCHCOCK ST'),
- ('street', 'HOBART ALY'),
- ('street', 'HODGES ALY'),
- ('street', 'HOFF ST'),
- ('street', 'HOFFMAN AVE'),
- ('street', 'HOFFMAN ST'),
- ('street', 'HOLLADAY AVE'),
- ('street', 'HOLLAND CT'),
- ('street', 'HOLLIS ST'),
- ('street', 'HOLLISTER AVE'),
- ('street', 'HOLLOWAY AVE'),
- ('street', 'HOLLY PARK CIR'),
- ('street', 'HOLLYWOOD CT'),
- ('street', 'HOLYOKE ST'),
- ('street', 'HOMER ST'),
- ('street', 'HOMESTEAD ST'),
- ('street', 'HOMEWOOD CT'),
- ('street', 'HOOKER ALY'),
- ('street', 'HOOPER ST'),
- ('street', 'HOPKINS AVE'),
- ('street', 'HORACE ST'),
- ('street', 'HORNE AVE'),
- ('street', 'HOTALING PL'),
- ('street', 'HOUSTON ST'),
- ('street', 'HOWARD CT'),
- ('street', 'HOWARD RD'),
- ('street', 'HOWARD ST'),
- ('street', 'HOWTH ST'),
- ('street', 'HUBBELL ST'),
- ('street', 'HUDSON AVE'),
- ('street', 'HUGO ST'),
- ('street', 'HULBERT ALY'),
- ('street', 'HUMBOLDT ST'),
- ('street', 'HUNT ST'),
- ('street', 'HUNTER RD'),
- ('street', 'HUNTER ST'),
- ('street', 'HUNTERS POINT BLVD'),
- ('street', 'HUNTERS POINT EXPY'),
- ('street', 'HUNTINGTON DR'),
- ('street', 'HURON AVE'),
- ('street', 'HUSSEY ST'),
- ('street', 'HUTCHINS CT'),
- ('street', 'ICEHOUSE ALY'),
- ('street', 'IDORA AVE'),
- ('street', 'IGNACIO AVE'),
- ('street', 'ILLINOIS ST'),
- ('street', 'ILS LN'),
- ('street', 'IMPERIAL ALY'),
- ('street', 'INA CT'),
- ('street', 'INCA LN'),
- ('street', 'INCINERATOR RD'),
- ('street', 'INDIA ST'),
- ('street', 'INDIANA ST'),
- ('street', 'INDUSTRIAL ST'),
- ('street', 'INDUSTRIAL ST OFF RAMP'),
- ('street', 'INDUSTRIAL ST ON RAMP'),
- ('street', 'INFANTRY TER'),
- ('street', 'INGALLS ST'),
- ('street', 'INGERSON AVE'),
- ('street', 'INGLESIDE PATH'),
- ('street', 'INNES AVE'),
- ('street', 'INNES CT'),
- ('street', 'INVERNESS DR'),
- ('street', 'IOWA ST'),
- ('street', 'IRIS AVE'),
- ('street', 'IRON ALY'),
- ('street', 'IRONWOOD WAY'),
- ('street', 'IRVING ST'),
- ('street', 'IRWIN ST'),
- ('street', 'ISADORA DUNCAN LN'),
- ('street', 'ISIS ST'),
- ('street', 'ISLAIS ST'),
- ('street', 'ISOLA WAY'),
- ('street', 'ISSLEIB AVE'),
- ('street', 'ITALY AVE'),
- ('street', 'IVY ST'),
- ('street', 'J ST'),
- ('street', 'JACK BALESTRERI WAY'),
- ('street', 'JACK KEROUAC ALY'),
- ('street', 'JACK LONDON ALY'),
- ('street', 'JACK MICHELINE ALY'),
- ('street', 'JACKSON ST'),
- ('street', 'JADE PL'),
- ('street', 'JAKEY CT'),
- ('street', 'JAMES PL'),
- ('street', 'JAMESTOWN AVE'),
- ('street', 'JANSEN ST'),
- ('street', 'JARBOE AVE'),
- ('street', 'JASON CT'),
- ('street', 'JASPER PL'),
- ('street', 'JAUSS ST'),
- ('street', 'JAVA ST'),
- ('street', 'JEAN WAY'),
- ('street', 'JEFFERSON ST'),
- ('street', 'JENNIFER PL'),
- ('street', 'JENNINGS CT'),
- ('street', 'JENNINGS ST'),
- ('street', 'JEROME ALY'),
- ('street', 'JERROLD AVE'),
- ('street', 'JERSEY ST'),
- ('street', 'JESSIE ST'),
- ('street', 'JESSIE EAST ST'),
- ('street', 'JESSIE WEST ST'),
- ('street', 'JEWETT ST'),
- ('street', 'JOHN ST'),
- ('street', 'JOHN F KENNEDY DR'),
- ('street', 'JOHN F SHELLEY DR'),
- ('street', 'JOHN MAHER ST'),
- ('street', 'JOHN MUIR DR'),
- ('street', 'JOHNSTONE DR'),
- ('street', 'JOICE ST'),
- ('street', 'JONES ST'),
- ('street', 'JOOST AVE'),
- ('street', 'JORDAN AVE'),
- ('street', 'JOSE SARRIA CT'),
- ('street', 'JOSEPHA AVE'),
- ('street', 'JOSIAH AVE'),
- ('street', 'JOY ST'),
- ('street', 'JUAN BAUTISTA CIR'),
- ('street', 'JUDAH ST'),
- ('street', 'JUDSON AVE'),
- ('street', 'JULES AVE'),
- ('street', 'JULIA ST'),
- ('street', 'JULIAN AVE'),
- ('street', 'JULIUS ST'),
- ('street', 'JUNIOR TER'),
- ('street', 'JUNIPER ST'),
- ('street', 'JUNIPERO SERRA BLVD'),
- ('street', 'JUNIPERO SERRA BLVD OFF RAMP'),
- ('street', 'JUNIPERO SERRA BLVD ON RAMP'),
- ('street', 'JURI ST'),
- ('street', 'JUSTIN DR'),
- ('street', 'KALMANOVITZ ST'),
- ('street', 'KAMILLE CT'),
- ('street', 'KANSAS ST'),
- ('street', 'KAPLAN LN'),
- ('street', 'KAREN CT'),
- ('street', 'KATE ST'),
- ('street', 'KEARNY LN'),
- ('street', 'KEARNY ST'),
- ('street', 'KEITH ST'),
- ('street', 'KELLOCH AVE'),
- ('street', 'KEMPTON AVE'),
- ('street', 'KENDALL DR'),
- ('street', 'KENNEDY PL'),
- ('street', 'KENNETH REXROTH PL'),
- ('street', 'KENNY ALY'),
- ('street', 'KENSINGTON WAY'),
- ('street', 'KENT ST'),
- ('street', 'KENWOOD WAY'),
- ('street', 'KEPPLER CT'),
- ('street', 'KERN ST'),
- ('street', 'KEY AVE'),
- ('street', 'KEYES ALY'),
- ('street', 'KEYES AVE'),
- ('street', 'KEYSTONE WAY'),
- ('street', 'KEZAR DR'),
- ('street', 'KIMBALL PL'),
- ('street', 'KING ST'),
- ('street', 'KINGSTON ST'),
- ('street', 'KINZEY ST'),
- ('street', 'KIRKHAM ST'),
- ('street', 'KIRKWOOD AVE'),
- ('street', 'KISKA RD'),
- ('street', 'KISSLING ST'),
- ('street', 'KITTREDGE TER'),
- ('street', 'KNOCKASH HL'),
- ('street', 'KNOLLVIEW WAY'),
- ('street', 'KNOTT CT'),
- ('street', 'KOBBE AVE'),
- ('street', 'KOHLER PL'),
- ('street', 'KORET WAY'),
- ('street', 'KRAMER PL'),
- ('street', 'KRAUSGRILL PL'),
- ('street', 'KRONQUIST CT'),
- ('street', 'LA AVANZADA'),
- ('street', 'LA BICA WAY'),
- ('street', 'LA FERRERA TER'),
- ('street', 'LA GRANDE AVE'),
- ('street', 'LA PLAYA'),
- ('street', 'LA SALLE AVE'),
- ('street', 'LAFAYETTE ST'),
- ('street', 'LAGUNA ST'),
- ('street', 'LAGUNA HONDA BLVD'),
- ('street', 'LAGUNITAS DR'),
- ('street', 'LAIDLEY ST'),
- ('street', 'LAKE ST'),
- ('street', 'LAKE FOREST CT'),
- ('street', 'LAKE MERCED BLVD'),
- ('street', 'LAKE MERCED HILL'),
- ('street', 'LAKESHORE DR'),
- ('street', 'LAKESHORE PLZ'),
- ('street', 'LAKEVIEW AVE'),
- ('street', 'LAKEWOOD AVE'),
- ('street', 'LAMARTINE ST'),
- ('street', 'LAMSON LN'),
- ('street', 'LANCASTER LN'),
- ('street', 'LANDERS ST'),
- ('street', 'LANE ST'),
- ('street', 'LANGDON CT'),
- ('street', 'LANGTON ST'),
- ('street', 'LANSDALE AVE'),
- ('street', 'LANSING ST'),
- ('street', 'LAPHAM WAY'),
- ('street', 'LAPIDGE ST'),
- ('street', 'LAPU-LAPU ST'),
- ('street', 'LARCH ST'),
- ('street', 'LARKIN ST'),
- ('street', 'LAS VILLAS CT'),
- ('street', 'LASKIE ST'),
- ('street', 'LASSEN ALY'),
- ('street', 'LATHROP AVE'),
- ('street', 'LATONA ST'),
- ('street', 'LAURA ST'),
- ('street', 'LAUREL ST'),
- ('street', 'LAUREN CT'),
- ('street', 'LAUSSAT ST'),
- ('street', 'LAWRENCE AVE'),
- ('street', 'LAWTON ST'),
- ('street', 'LE CONTE AVE'),
- ('street', 'LE CONTE CIR'),
- ('street', 'LEAVENWORTH ST'),
- ('street', 'LEDYARD ST'),
- ('street', 'LEE AVE'),
- ('street', 'LEESE ST'),
- ('street', 'LEGION CT'),
- ('street', 'LEGION OF HONOR DR'),
- ('street', 'LEIDESDORFF ST'),
- ('street', 'LELAND AVE'),
- ('street', 'LENDRUM CT'),
- ('street', 'LENOX WAY'),
- ('street', 'LEO ST'),
- ('street', 'LEONA TER'),
- ('street', 'LEROY PL'),
- ('street', 'LESSING ST'),
- ('street', 'LESTER CT'),
- ('street', 'LETTERMAN DR'),
- ('street', 'LETTERMAN HOSPITAL ACCESS'),
- ('street', 'LETTUCE LN'),
- ('street', 'LEVANT ST'),
- ('street', 'LEXINGTON ST'),
- ('street', 'LIBERTY ST'),
- ('street', 'LICK PL'),
- ('street', 'LIEBIG ST'),
- ('street', 'LIGGETT AVE'),
- ('street', 'LILAC ST'),
- ('street', 'LILLIAN ST'),
- ('street', 'LILY ST'),
- ('street', 'LINARES AVE'),
- ('street', 'LINCOLN BLVD'),
- ('street', 'LINCOLN CT'),
- ('street', 'LINCOLN WAY'),
- ('street', 'LINDA ST'),
- ('street', 'LINDA VISTA STPS'),
- ('street', 'LINDEN ST'),
- ('street', 'LINDSAY CIR'),
- ('street', 'LIPPARD AVE'),
- ('street', 'LISBON ST'),
- ('street', 'LITTLEFIELD TER'),
- ('street', 'LIVINGSTON ST'),
- ('street', 'LLOYD ST'),
- ('street', 'LOBOS ST'),
- ('street', 'LOCKSLEY AVE'),
- ('street', 'LOCKWOOD ST'),
- ('street', 'LOCUST ST'),
- ('street', 'LOEHR ST'),
- ('street', 'LOIS LN'),
- ('street', 'LOMA VISTA TER'),
- ('street', 'LOMBARD ST'),
- ('street', 'LOMITA AVE'),
- ('street', 'LONDON ST'),
- ('street', 'LONE MOUNTAIN TER'),
- ('street', 'LONG AVE'),
- ('street', 'LONG BRIDGE ST'),
- ('street', 'LONGVIEW CT'),
- ('street', 'LOOMIS ST'),
- ('street', 'LOPEZ AVE'),
- ('street', 'LORAINE CT'),
- ('street', 'LORI LN'),
- ('street', 'LOS PALMOS DR'),
- ('street', 'LOTTIE BENNETT LN'),
- ('street', 'LOUISBURG ST'),
- ('street', 'LOUISIANA ST'),
- ('street', 'LOWELL ST'),
- ('street', 'LOWER TER'),
- ('street', 'LOWER FORT MASON ST'),
- ('street', 'LOYOLA TER'),
- ('street', 'LUCERNE ST'),
- ('street', 'LUCKY ST'),
- ('street', 'LUCY ST'),
- ('street', 'LUDLOW ALY'),
- ('street', 'LULU ALY'),
- ('street', 'LUNADO CT'),
- ('street', 'LUNADO WAY'),
- ('street', 'LUNDEEN ST'),
- ('street', 'LUNDYS LN'),
- ('street', 'LUPINE AVE'),
- ('street', 'LURLINE ST'),
- ('street', 'LURMONT TER'),
- ('street', 'LUSK ST'),
- ('street', 'LYDIA AVE'),
- ('street', 'LYELL ST'),
- ('street', 'LYNCH ST'),
- ('street', 'LYNDHURST DR'),
- ('street', 'LYON ST'),
- ('street', 'LYSETTE ST'),
- ('street', 'MABEL ALY'),
- ('street', 'MABINI ST'),
- ('street', 'MABREY CT'),
- ('street', 'MACALLA CT'),
- ('street', 'MACALLA RD'),
- ('street', 'MACARTHUR AVE'),
- ('street', 'MACEDONIA ST'),
- ('street', 'MACONDRAY LN'),
- ('street', 'MADDUX AVE'),
- ('street', 'MADERA ST'),
- ('street', 'MADISON ST'),
- ('street', 'MADRID ST'),
- ('street', 'MADRONE AVE'),
- ('street', 'MAGELLAN AVE'),
- ('street', 'MAGNOLIA ST'),
- ('street', 'MAHAN ST'),
- ('street', 'MAIDEN LN'),
- ('street', 'MAIN DR'),
- ('street', 'MAIN ST'),
- ('street', 'MAJESTIC AVE'),
- ('street', 'MALDEN ALY'),
- ('street', 'MALLORCA WAY'),
- ('street', 'MALTA DR'),
- ('street', 'MALVINA PL'),
- ('street', 'MANCHESTER ST'),
- ('street', 'MANDALAY LN'),
- ('street', 'MANGELS AVE'),
- ('street', 'MANOR DR'),
- ('street', 'MANSEAU ST'),
- ('street', 'MANSELL ST'),
- ('street', 'MANSFIELD ST'),
- ('street', 'MANZANITA AVE'),
- ('street', 'MAPLE ST'),
- ('street', 'MARCELA AVE'),
- ('street', 'MARCY PL'),
- ('street', 'MARENGO ST'),
- ('street', 'MARGARET AVE'),
- ('street', 'MARGRAVE PL'),
- ('street', 'MARIETTA DR'),
- ('street', 'MARIN ST'),
- ('street', 'MARINA BLVD'),
- ('street', 'MARINA GREEN DR'),
- ('street', 'MARINE DR'),
- ('street', 'MARINER DR'),
- ('street', 'MARION PL'),
- ('street', 'MARIPOSA ST'),
- ('street', 'MARIST CT'),
- ('street', 'MARK LN'),
- ('street', 'MARK TWAIN PL'),
- ('street', 'MARKET ST'),
- ('street', 'MARLIN CT'),
- ('street', 'MARNE AVE'),
- ('street', 'MARS ST'),
- ('street', 'MARSHALL ST'),
- ('street', 'MARSILY ST'),
- ('street', 'MARSTON AVE'),
- ('street', 'MARTHA AVE'),
- ('street', 'MARTIN LUTHER KING JR DR'),
- ('street', 'MARTINEZ ST'),
- ('street', 'MARVEL CT'),
- ('street', 'MARVIEW WAY'),
- ('street', 'MARY ST'),
- ('street', 'MARY TERESA ST'),
- ('street', 'MARYLAND ST'),
- ('street', 'MASON CT'),
- ('street', 'MASON ST'),
- ('street', 'MASONIC AVE'),
- ('street', 'MASSACHUSETTS ST'),
- ('street', 'MASSASOIT ST'),
- ('street', 'MATEO ST'),
- ('street', 'MATTHEW CT'),
- ('street', 'MAULDIN ST'),
- ('street', 'MAXWELL CT'),
- ('street', 'MAYFAIR DR'),
- ('street', 'MAYFLOWER ST'),
- ('street', 'MAYNARD ST'),
- ('street', 'MAYWOOD DR'),
- ('street', 'MCALLISTER ST'),
- ('street', 'MCCANN ST'),
- ('street', 'MCCARTHY AVE'),
- ('street', 'MCCOPPIN ST'),
- ('street', 'MCCORMICK ST'),
- ('street', 'MCDONALD ST'),
- ('street', 'MCDOWELL AVE'),
- ('street', 'MCKINLEY AVE'),
- ('street', 'MCKINNON AVE'),
- ('street', 'MCLAREN AVE'),
- ('street', 'MCLAREN LODGE ACCESS RD'),
- ('street', 'MCLEA CT'),
- ('street', 'MCNAIR CT'),
- ('street', 'MCRAE LN'),
- ('street', 'MCRAE ST'),
- ('street', 'MEACHAM PL'),
- ('street', 'MEADE AVE'),
- ('street', 'MEADOWBROOK DR'),
- ('street', 'MEDA AVE'),
- ('street', 'MEDAU PL'),
- ('street', 'MEDICAL CENTER WAY'),
- ('street', 'MEGAN DR'),
- ('street', 'MELBA AVE'),
- ('street', 'MELRA CT'),
- ('street', 'MELROSE AVE'),
- ('street', 'MENDELL ST'),
- ('street', 'MENDOSA AVE'),
- ('street', 'MENOHER LN'),
- ('street', 'MERCATO CT'),
- ('street', 'MERCED AVE'),
- ('street', 'MERCEDES WAY'),
- ('street', 'MERCHANT RD'),
- ('street', 'MERCHANT ST'),
- ('street', 'MERCURY ST'),
- ('street', 'MERLIN ST'),
- ('street', 'MERRIAM LN'),
- ('street', 'MERRIE WAY'),
- ('street', 'MERRILL ST'),
- ('street', 'MERRIMAC ST'),
- ('street', 'MERRITT ST'),
- ('street', 'MERSEY ST'),
- ('street', 'MESA AVE'),
- ('street', 'MESA ST'),
- ('street', 'METSON RD'),
- ('street', 'MICHIGAN ST'),
- ('street', 'MIDCREST WAY'),
- ('street', 'MIDDLE POINT RD'),
- ('street', 'MIDDLE WEST DR'),
- ('street', 'MIDDLEFIELD DR'),
- ('street', 'MIDWAY ST'),
- ('street', 'MIGUEL ST'),
- ('street', 'MILAN TER'),
- ('street', 'MILES CT'),
- ('street', 'MILES ST'),
- ('street', 'MILEY ST'),
- ('street', 'MILL ST'),
- ('street', 'MILLER PL'),
- ('street', 'MILLER RD'),
- ('street', 'MILLWRIGHT COTTAGE ACCESS RD'),
- ('street', 'MILTON ST'),
- ('street', 'MILTON I ROSS ST'),
- ('street', 'MINERVA ST'),
- ('street', 'MINNA ST'),
- ('street', 'MINNESOTA ST'),
- ('street', 'MINT PLZ'),
- ('street', 'MINT ST'),
- ('street', 'MIRABEL AVE'),
- ('street', 'MIRALOMA DR'),
- ('street', 'MIRAMAR AVE'),
- ('street', 'MIRANDO WAY'),
- ('street', 'MISSION ST'),
- ('street', 'MISSION BAY CIR'),
- ('street', 'MISSION BAY DR'),
- ('street', 'MISSION ROCK ST'),
- ('street', 'MISSISSIPPI ST'),
- ('street', 'MISSOURI ST'),
- ('street', 'MISTRAL ST'),
- ('street', 'MIZPAH ST'),
- ('street', 'MODOC AVE'),
- ('street', 'MOFFITT ST'),
- ('street', 'MOJAVE ST'),
- ('street', 'MOLIMO DR'),
- ('street', 'MONCADA WAY'),
- ('street', 'MONETA CT'),
- ('street', 'MONETA WAY'),
- ('street', 'MONO ST'),
- ('street', 'MONTAGUE PL'),
- ('street', 'MONTALVO AVE'),
- ('street', 'MONTANA ST'),
- ('street', 'MONTCALM ST'),
- ('street', 'PARK ST'),
- ('street', 'MONTCLAIR TER'),
- ('street', 'MONTE VISTA DR'),
- ('street', 'MONTECITO AVE'),
- ('street', 'MONTEREY BLVD'),
- ('street', 'MONTEZUMA ST'),
- ('street', 'MONTGOMERY ST'),
- ('street', 'MONTICELLO ST'),
- ('street', 'MONUMENT WAY'),
- ('street', 'MOORE LN'),
- ('street', 'MOORE PL'),
- ('street', 'MORAGA AVE'),
- ('street', 'MORAGA ST'),
- ('street', 'MORELAND ST'),
- ('street', 'MORGAN ALY'),
- ('street', 'MORNINGSIDE DR'),
- ('street', 'MORRELL PL'),
- ('street', 'MORRELL ST'),
- ('street', 'MORRIS ST'),
- ('street', 'MORSE ST'),
- ('street', 'MORTON ST'),
- ('street', 'MOSCOW ST'),
- ('street', 'MOSS ST'),
- ('street', 'MOULTON ST'),
- ('street', 'MOULTRIE ST'),
- ('street', 'MOUNT LN'),
- ('street', 'MOUNT VERNON AVE'),
- ('street', 'MOUNTAIN SPRING AVE'),
- ('street', 'MOUNTVIEW CT'),
- ('street', 'MUIR CT'),
- ('street', 'MUIR LOOP'),
- ('street', 'MULFORD ALY'),
- ('street', 'MULLEN AVE'),
- ('street', 'MUNICH ST'),
- ('street', 'MURRAY LN'),
- ('street', 'MURRAY ST'),
- ('street', 'MUSEUM WAY'),
- ('street', 'MUSIC CONCOURSE DR'),
- ('street', 'MUSIC CONCOURSE ACCESS RD'),
- ('street', 'MYRA WAY'),
- ('street', 'MYRTLE ST'),
- ('street', 'NADELL CT'),
- ('street', 'NAGLEE AVE'),
- ('street', 'NAHUA AVE'),
- ('street', 'NANCY PELOSI DR'),
- ('street', 'NANTUCKET AVE'),
- ('street', 'NAPIER LN'),
- ('street', 'NAPLES ST'),
- ('street', 'NAPOLEON ST'),
- ('street', 'NATICK ST'),
- ('street', 'NATOMA ST'),
- ('street', 'NAUMAN RD'),
- ('street', 'NAUTILUS DR'),
- ('street', 'NAVAJO AVE'),
- ('street', 'NAVY RD'),
- ('street', 'NAYLOR ST'),
- ('street', 'NEBRASKA ST'),
- ('street', 'NELLIE ST'),
- ('street', 'NELSON AVE'),
- ('street', 'NELSON RISING LN'),
- ('street', 'NEPTUNE ST'),
- ('street', 'NEVADA ST'),
- ('street', 'NEW MONTGOMERY ST'),
- ('street', 'NEWBURG ST'),
- ('street', 'NEWCOMB AVE'),
- ('street', 'NEWELL ST'),
- ('street', 'NEWHALL ST'),
- ('street', 'NEWMAN ST'),
- ('street', 'NEWTON ST'),
- ('street', 'NEY ST'),
- ('street', 'NIAGARA AVE'),
- ('street', 'NIANTIC AVE'),
- ('street', 'NIBBI CT'),
- ('street', 'NICHOLS WAY'),
- ('street', 'NIDO AVE'),
- ('street', 'NIMITZ AVE'),
- ('street', 'NIMITZ DR'),
- ('street', 'NIMITZ LN'),
- ('street', 'NOB HILL PL'),
- ('street', 'NOBLES ALY'),
- ('street', 'NOE ST'),
- ('street', 'NORDHOFF ST'),
- ('street', 'NORFOLK ST'),
- ('street', 'NORIEGA ST'),
- ('street', 'NORMANDIE TER'),
- ('street', 'NORTH DR'),
- ('street', 'NORTH 15TH AVE'),
- ('street', 'NORTH GATE RD'),
- ('street', 'NORTH HUGHES LN'),
- ('street', 'NORTH POINT ST'),
- ('street', 'NORTH VAN HORN LN'),
- ('street', 'NORTH VIEW CT'),
- ('street', 'NORTHGATE DR'),
- ('street', 'NORTHPOINT DR'),
- ('street', 'NORTHRIDGE RD'),
- ('street', 'NORTHWOOD DR'),
- ('street', 'NORTON ST'),
- ('street', 'NORWICH ST'),
- ('street', 'NOTTINGHAM PL'),
- ('street', 'NUEVA AVE'),
- ('street', 'OAK ST'),
- ('street', 'OAK ACCESS RD'),
- ('street', 'OAK GROVE ST'),
- ('street', 'OAK PARK DR'),
- ('street', 'OAKDALE AVE'),
- ('street', 'OAKHURST LN'),
- ('street', 'OAKWOOD ST'),
- ('street', 'OCEAN AVE'),
- ('street', 'OCEANVIEW TER'),
- ('street', 'OCTAVIA ST'),
- ('street', 'OFARRELL ST'),
- ('street', 'OGDEN AVE'),
- ('street', 'OHLONE WAY'),
- ('street', 'OLD CHINATOWN LN'),
- ('street', 'OLD MASON ST'),
- ('street', 'OLIVE ST'),
- ('street', 'OLIVER ST'),
- ('street', 'OLMSTEAD ST'),
- ('street', 'OLNEY AVE'),
- ('street', 'OLORAN AVE'),
- ('street', 'OLYMPIA WAY'),
- ('street', 'OLYMPIC COUNTRY CLUB RD'),
- ('street', 'OMAR WAY'),
- ('street', 'ONEIDA AVE'),
- ('street', 'ONIQUE LN'),
- ('street', 'ONONDAGA AVE'),
- ('street', 'OPAL PL'),
- ('street', 'OPALO LN'),
- ('street', 'OPHIR ALY'),
- ('street', 'ORA WAY'),
- ('street', 'ORANGE ALY'),
- ('street', 'ORBEN PL'),
- ('street', 'ORD CT'),
- ('street', 'ORD ST'),
- ('street', 'ORDWAY ST'),
- ('street', 'OREILLY AVE'),
- ('street', 'ORIOLE WAY'),
- ('street', 'ORIZABA AVE'),
- ('street', 'ORSI CIR'),
- ('street', 'ORTEGA ST'),
- ('street', 'ORTEGA WAY'),
- ('street', 'OSAGE ALY'),
- ('street', 'OSCAR ALY'),
- ('street', 'OSCEOLA LN'),
- ('street', 'OSGOOD PL'),
- ('street', 'OSHAUGHNESSY BLVD'),
- ('street', 'OTEGA AVE'),
- ('street', 'OTIS ST'),
- ('street', 'OTSEGO AVE'),
- ('street', 'OTTAWA AVE'),
- ('street', 'OTTER COVE TER'),
- ('street', 'OVERLOOK DR'),
- ('street', 'OWEN ST'),
- ('street', 'OWENS ST'),
- ('street', 'OXFORD ST'),
- ('street', 'OZBOURN CT'),
- ('street', 'PACHECO ST'),
- ('street', 'PACIFIC AVE'),
- ('street', 'PAGE ST'),
- ('street', 'PAGODA PL'),
- ('street', 'PALM AVE'),
- ('street', 'PALMETTO AVE'),
- ('street', 'PALO ALTO AVE'),
- ('street', 'PALOMA AVE'),
- ('street', 'PALOS PL'),
- ('street', 'PALOU AVE'),
- ('street', 'PANAMA ST'),
- ('street', 'PANORAMA DR'),
- ('street', 'PARADISE AVE'),
- ('street', 'PARAISO PL'),
- ('street', 'PARAMOUNT TER'),
- ('street', 'PARIS ST'),
- ('street', 'PARK BLVD'),
- ('street', 'PARK HILL AVE'),
- ('street', 'PARK PRESIDIO BLVD'),
- ('street', 'PARK PRESIDIO BYPASS DR'),
- ('street', 'PARKER AVE'),
- ('street', 'PARKHURST ALY'),
- ('street', 'PARKRIDGE DR'),
- ('street', 'PARNASSUS AVE'),
- ('street', 'PARQUE DR'),
- ('street', 'PARSONS ST'),
- ('street', 'PASADENA ST'),
- ('street', 'PATTEN RD'),
- ('street', 'PATTERSON ST'),
- ('street', 'PATTON CT'),
- ('street', 'PATTON ST'),
- ('street', 'PAUL AVE'),
- ('street', 'PAULDING ST'),
- ('street', 'PAYSON ST'),
- ('street', 'PEABODY ST'),
- ('street', 'PEARL ST'),
- ('street', 'PEEK LN'),
- ('street', 'PELICAN COVE TER'),
- ('street', 'PELTON PL'),
- ('street', 'PEMBERTON PL'),
- ('street', 'PENA ST'),
- ('street', 'PENINSULA AVE'),
- ('street', 'PENNINGTON ST'),
- ('street', 'PENNSYLVANIA AVE'),
- ('street', 'PENNY LN'),
- ('street', 'PERALTA AVE'),
- ('street', 'PERASTO AVE'),
- ('street', 'PEREGO TER'),
- ('street', 'PERIMETER PATH'),
- ('street', 'PERINE PL'),
- ('street', 'PERRY ST'),
- ('street', 'PERSHING DR'),
- ('street', 'PERSIA AVE'),
- ('street', 'PERU AVE'),
- ('street', 'PETER YORKE WAY'),
- ('street', 'PETERS AVE'),
- ('street', 'PETRARCH PL'),
- ('street', 'PFEIFFER ST'),
- ('street', 'PHELPS ST'),
- ('street', 'PHOENIX TER'),
- ('street', 'PICO AVE'),
- ('street', 'PIEDMONT ST'),
- ('street', 'PIERCE ST'),
- ('street', 'PIERPOINT LN'),
- ('street', 'PILGRIM AVE'),
- ('street', 'PINAR LN'),
- ('street', 'PINE ST'),
- ('street', 'PINEHURST WAY'),
- ('street', 'PINK ALY'),
- ('street', 'PINO ALY'),
- ('street', 'PINTO AVE'),
- ('street', 'PIOCHE ST'),
- ('street', 'PIPER LOOP'),
- ('street', 'PIXLEY ST'),
- ('street', 'PIZARRO WAY'),
- ('street', 'PLAZA ST'),
- ('street', 'PLEASANT ST'),
- ('street', 'PLUM ST'),
- ('street', 'PLYMOUTH AVE'),
- ('street', 'POINT LOBOS AVE'),
- ('street', 'POLARIS WAY'),
- ('street', 'POLK ST'),
- ('street', 'POLLARD PL'),
- ('street', 'POLLOCK ST'),
- ('street', 'POMONA ST'),
- ('street', 'POND ST'),
- ('street', 'PONTIAC ST'),
- ('street', 'POPE CT'),
- ('street', 'POPE RD'),
- ('street', 'POPE ST'),
- ('street', 'POPLAR ST'),
- ('street', 'POPPY LN'),
- ('street', 'PORTAL DR'),
- ('street', 'PORTAL PATH'),
- ('street', 'PORTER ST'),
- ('street', 'PORTOLA DR'),
- ('street', 'PORTOLA ST'),
- ('street', 'POST ST'),
- ('street', 'POTOMAC ST'),
- ('street', 'POTRERO AVE'),
- ('street', 'POWELL ST'),
- ('street', 'POWERS AVE'),
- ('street', 'POWHATTAN AVE'),
- ('street', 'PRADO ST'),
- ('street', 'PRAGUE ST'),
- ('street', 'PRATT PL'),
- ('street', 'PRECITA AVE'),
- ('street', 'PRENTISS ST'),
- ('street', 'PRESCOTT CT'),
- ('street', 'PRESIDIO AVE'),
- ('street', 'PRESIDIO BLVD'),
- ('street', 'PRESIDIO TER'),
- ('street', 'PRETOR WAY'),
- ('street', 'PRIEST ST'),
- ('street', 'PRINCETON ST'),
- ('street', 'PROGRESS ST'),
- ('street', 'PROSPECT AVE'),
- ('street', 'PROSPER ST'),
- ('street', 'PUBLIC PARK'),
- ('street', 'PUEBLO ST'),
- ('street', 'PULASKI AVE'),
- ('street', 'PUTNAM ST'),
- ('street', 'QUANE ST'),
- ('street', 'QUARRY RD'),
- ('street', 'QUARTZ WAY'),
- ('street', 'QUEBEC AVE'),
- ('street', 'QUESADA AVE'),
- ('street', 'QUICKSTEP LN'),
- ('street', 'QUINCY ST'),
- ('street', 'QUINT ST'),
- ('street', 'QUINTARA ST'),
- ('street', 'R ST'),
- ('street', 'RACCOON DR'),
- ('street', 'RACINE LN'),
- ('street', 'RADIO TER'),
- ('street', 'RAE AVE'),
- ('street', 'RALEIGH ST'),
- ('street', 'RALSTON AVE'),
- ('street', 'RALSTON ST'),
- ('street', 'RAMONA AVE'),
- ('street', 'RAMSEL CT'),
- ('street', 'RAMSELL ST'),
- ('street', 'RANDALL ST'),
- ('street', 'RANDOLPH ST'),
- ('street', 'RANKIN ST'),
- ('street', 'RAUSCH ST'),
- ('street', 'RAVENWOOD DR'),
- ('street', 'RAWLES ST'),
- ('street', 'RAYBURN ST'),
- ('street', 'RAYCLIFF TER'),
- ('street', 'RAYMOND AVE'),
- ('street', 'REARDON RD'),
- ('street', 'REBECCA LN'),
- ('street', 'RECYCLE RD'),
- ('street', 'RECYCLING CENTER ACCESS RD'),
- ('street', 'RED LEAF CT'),
- ('street', 'RED ROCK WAY'),
- ('street', 'REDDY ST'),
- ('street', 'REDFIELD ALY'),
- ('street', 'REDONDO ST'),
- ('street', 'REDWOOD ST'),
- ('street', 'REED ST'),
- ('street', 'REEVES CT'),
- ('street', 'REGENT ST'),
- ('street', 'RENO PL'),
- ('street', 'REPOSA WAY'),
- ('street', 'RESERVOIR ST'),
- ('street', 'RESTANI STWY'),
- ('street', 'RESTANI WAY'),
- ('street', 'RETIRO WAY'),
- ('street', 'REUEL CT'),
- ('street', 'REVERE AVE'),
- ('street', 'REX AVE'),
- ('street', 'REY ST'),
- ('street', 'RHINE ST'),
- ('street', 'RHODE ISLAND ST'),
- ('street', 'RICE ST'),
- ('street', 'RICHARD HENRY DANA PL'),
- ('street', 'RICHARDS CIR'),
- ('street', 'RICHARDSON AVE'),
- ('street', 'RICHLAND AVE'),
- ('street', 'RICHTER AVE'),
- ('street', 'RICKARD ST'),
- ('street', 'RICO WAY'),
- ('street', 'RIDGE CT'),
- ('street', 'RIDGE LN'),
- ('street', 'RIDGEWOOD AVE'),
- ('street', 'RILEY AVE'),
- ('street', 'RINCON ST'),
- ('street', 'RINGOLD ST'),
- ('street', 'RIO CT'),
- ('street', 'RIO VERDE ST'),
- ('street', 'RIPLEY ST'),
- ('street', 'RITCH ST'),
- ('street', 'RIVAS AVE'),
- ('street', 'RIVERA ST'),
- ('street', 'RIVERTON DR'),
- ('street', 'RIVOLI ST'),
- ('street', 'RIZAL ST'),
- ('street', 'ROACH ST'),
- ('street', 'ROANOKE ST'),
- ('street', 'ROBBLEE AVE'),
- ('street', 'ROBERT C LEVY TUNL'),
- ('street', 'ROBERT KIRK LN'),
- ('street', 'ROBINHOOD DR'),
- ('street', 'ROBINSON DR'),
- ('street', 'ROBINSON ST'),
- ('street', 'ROCK ALY'),
- ('street', 'ROCKAWAY AVE'),
- ('street', 'ROCKDALE DR'),
- ('street', 'ROCKLAND ST'),
- ('street', 'ROCKRIDGE DR'),
- ('street', 'ROCKWOOD CT'),
- ('street', 'ROD RD'),
- ('street', 'RODGERS ST'),
- ('street', 'RODRIGUEZ ST'),
- ('street', 'ROEMER WAY'),
- ('street', 'ROLPH ST'),
- ('street', 'ROMAIN ST'),
- ('street', 'ROME ST'),
- ('street', 'ROMOLO ST'),
- ('street', 'RONDEL PL'),
- ('street', 'ROOSEVELT WAY'),
- ('street', 'ROSA PARKS LN'),
- ('street', 'ROSCOE ST'),
- ('street', 'ROSE ST'),
- ('street', 'ROSELLA CT'),
- ('street', 'ROSELYN TER'),
- ('street', 'ROSEMARY CT'),
- ('street', 'ROSEMONT PL'),
- ('street', 'ROSENKRANZ ST'),
- ('street', 'ROSEWOOD DR'),
- ('street', 'ROSIE LEE LN'),
- ('street', 'ROSS ALY'),
- ('street', 'ROSSI AVE'),
- ('street', 'ROSSMOOR DR'),
- ('street', 'ROTTECK ST'),
- ('street', 'ROUSSEAU ST'),
- ('street', 'ROYAL LN'),
- ('street', 'RUCKMAN AVE'),
- ('street', 'RUDDEN AVE'),
- ('street', 'RUGER ST'),
- ('street', 'RUSS ST'),
- ('street', 'RUSSELL ST'),
- ('street', 'RUSSIA AVE'),
- ('street', 'RUSSIAN HILL PL'),
- ('street', 'RUTH ST'),
- ('street', 'RUTLAND ST'),
- ('street', 'RUTLEDGE ST'),
- ('street', 'SABIN PL'),
- ('street', 'SACRAMENTO ST'),
- ('street', 'SADDLEBACK DR'),
- ('street', 'SADOWA ST'),
- ('street', 'SAFIRA LN'),
- ('street', 'SAGAMORE ST'),
- ('street', 'SAINT CHARLES AVE'),
- ('street', 'SAINT CROIX DR'),
- ('street', 'SAINT ELMO WAY'),
- ('street', 'SAINT FRANCIS BLVD'),
- ('street', 'SAINT FRANCIS PL'),
- ('street', 'SAINT GEORGE ALY'),
- ('street', 'SAINT GERMAIN AVE'),
- ('street', 'SAINT JOSEPHS AVE'),
- ('street', 'SAINT LOUIS ALY'),
- ('street', 'SAINT MARYS AVE'),
- ('street', 'SAL ST'),
- ('street', 'SALA TER'),
- ('street', 'SALINAS AVE'),
- ('street', 'SALMON ST'),
- ('street', 'SAMOSET ST'),
- ('street', 'SAMPSON AVE'),
- ('street', 'SAN ALESO AVE'),
- ('street', 'SAN ANDREAS WAY'),
- ('street', 'SAN ANSELMO AVE'),
- ('street', 'SAN ANTONIO PL'),
- ('street', 'SAN BENITO WAY'),
- ('street', 'SAN BRUNO AVE'),
- ('street', 'SAN BRUNO AV OFF RAMP'),
- ('street', 'SAN BRUNO AV ON RAMP'),
- ('street', 'SAN BUENAVENTURA WAY'),
- ('street', 'SAN CARLOS ST'),
- ('street', 'SAN DIEGO AVE'),
- ('street', 'SAN FELIPE AVE'),
- ('street', 'SAN FERNANDO WAY'),
- ('street', 'SAN GABRIEL AVE'),
- ('street', 'SAN JACINTO WAY'),
- ('street', 'SAN JOSE AVE'),
- ('street', 'SAN JOSE AV OFF RAMP'),
- ('street', 'SAN JOSE AV ON RAMP'),
- ('street', 'SAN JUAN AVE'),
- ('street', 'SAN LEANDRO WAY'),
- ('street', 'SAN LORENZO WAY'),
- ('street', 'SAN LUIS AVE'),
- ('street', 'SAN MARCOS AVE'),
- ('street', 'SAN MIGUEL ST'),
- ('street', 'SAN PABLO AVE'),
- ('street', 'SAN RAFAEL WAY'),
- ('street', 'SAN RAMON WAY'),
- ('street', 'SANCHES ST'),
- ('street', 'SANCHEZ ST'),
- ('street', 'SANDPIPER COVE WAY'),
- ('street', 'SANSOME ST'),
- ('street', 'SANTA ANA AVE'),
- ('street', 'SANTA BARBARA AVE'),
- ('street', 'SANTA CLARA AVE'),
- ('street', 'SANTA CRUZ AVE'),
- ('street', 'SANTA FE AVE'),
- ('street', 'SANTA MARINA ST'),
- ('street', 'SANTA MONICA WAY'),
- ('street', 'SANTA PAULA AVE'),
- ('street', 'SANTA RITA AVE'),
- ('street', 'SANTA ROSA AVE'),
- ('street', 'SANTA YNEZ AVE'),
- ('street', 'SANTA YSABEL AVE'),
- ('street', 'SANTIAGO ST'),
- ('street', 'SANTOS ST'),
- ('street', 'SARGENT ST'),
- ('street', 'SAROYAN PL'),
- ('street', 'SATURN ST'),
- ('street', 'SAUL ST'),
- ('street', 'SAWYER ST'),
- ('street', 'SCENIC WAY'),
- ('street', 'SCHOFIELD CT'),
- ('street', 'SCHOFIELD RD'),
- ('street', 'SCHOOL ALY'),
- ('street', 'SCHWERIN ST'),
- ('street', 'SCIENCE CIR'),
- ('street', 'SCOTIA AVE'),
- ('street', 'SCOTLAND ST'),
- ('street', 'SCOTT ALY'),
- ('street', 'SCOTT ST'),
- ('street', 'SEA VIEW TER'),
- ('street', 'SEACLIFF AVE'),
- ('street', 'SEAL COVE TER'),
- ('street', 'SEAL ROCK DR'),
- ('street', 'SEARS ST'),
- ('street', 'SEAWELL LN'),
- ('street', 'SECOND DR'),
- ('street', 'SECURITY PACIFIC PL'),
- ('street', 'SELBY ST'),
- ('street', 'SELMA WAY'),
- ('street', 'SEMINOLE AVE'),
- ('street', 'SENECA AVE'),
- ('street', 'SEQUOIA WAY'),
- ('street', 'SERGEANT JOHN V YOUNG ST'),
- ('street', 'SERRANO DR'),
- ('street', 'SERVICE ST'),
- ('street', 'SEVERN ST'),
- ('street', 'SEVILLE ST'),
- ('street', 'SEWARD ST'),
- ('street', 'SEYMOUR ST'),
- ('street', 'SFGH ACCESS'),
- ('street', 'SHAFTER AVE'),
- ('street', 'SHAFTER CT'),
- ('street', 'SHAFTER RD'),
- ('street', 'SHAKESPEARE ST'),
- ('street', 'SHANNON ST'),
- ('street', 'SHARON ST'),
- ('street', 'SHARP PL'),
- ('street', 'SHAW ALY'),
- ('street', 'SHAWNEE AVE'),
- ('street', 'SHELDON TER'),
- ('street', 'SHEPHARD PL'),
- ('street', 'SHERIDAN AVE'),
- ('street', 'SHERIDAN ST'),
- ('street', 'SHERMAN RD'),
- ('street', 'SHERMAN ST'),
- ('street', 'SHERWOOD CT'),
- ('street', 'SHIELDS ST'),
- ('street', 'SHIP ST'),
- ('street', 'SHIPLEY ST'),
- ('street', 'SHORE VIEW AVE'),
- ('street', 'SHORT ST'),
- ('street', 'SHOTWELL ST'),
- ('street', 'SHOUP AVE'),
- ('street', 'SHRADER ST'),
- ('street', 'SIBERT LN'),
- ('street', 'SIBERT LOOP'),
- ('street', 'SIBLEY RD'),
- ('street', 'SICKLES AVE'),
- ('street', 'SIERRA ST'),
- ('street', 'SIGNAL RD'),
- ('street', 'SILLIMAN ST'),
- ('street', 'SILVER AVE'),
- ('street', 'SILVERVIEW DR'),
- ('street', 'SIMONDS LOOP'),
- ('street', 'SIXTH ST'),
- ('street', 'SKYLINE BLVD'),
- ('street', 'SKYVIEW WAY'),
- ('street', 'SLOAN ALY'),
- ('street', 'SLOAT BLVD'),
- ('street', 'SMITH LN'),
- ('street', 'SOLA AVE'),
- ('street', 'SOMERSET ST'),
- ('street', 'SONOMA ST'),
- ('street', 'SONORA LN'),
- ('street', 'SOTELO AVE'),
- ('street', 'SOULE LN'),
- ('street', 'SOUTH DR'),
- ('street', 'SOUTH GATE RD'),
- ('street', 'SOUTH HILL BLVD'),
- ('street', 'SOUTH HUGHES LN'),
- ('street', 'SOUTH PARK'),
- ('street', 'SOUTH VAN HORN LN'),
- ('street', 'SOUTH VAN NESS AVE'),
- ('street', 'SOUTHARD PL'),
- ('street', 'SOUTHERN HEIGHTS AVE'),
- ('street', 'SOUTHWOOD DR'),
- ('street', 'SPARROW ST'),
- ('street', 'SPARTA ST'),
- ('street', 'SPEAR AVE'),
- ('street', 'SPEAR ST'),
- ('street', 'SPENCER ST'),
- ('street', 'SPOFFORD ST'),
- ('street', 'SPRECKELS LAKE DR'),
- ('street', 'SPRING ST'),
- ('street', 'SPRINGFIELD DR'),
- ('street', 'SPROULE LN'),
- ('street', 'SPRUCE ST'),
- ('street', 'STANDISH AVE'),
- ('street', 'STANFORD ST'),
- ('street', 'STANFORD HEIGHTS AVE'),
- ('street', 'STANLEY ST'),
- ('street', 'STANTON ST'),
- ('street', 'STANYAN BLVD'),
- ('street', 'STANYAN ST'),
- ('street', 'STAPLES AVE'),
- ('street', 'STARK ST'),
- ('street', 'STARR KING WAY'),
- ('street', 'STARVIEW WAY'),
- ('street', 'STATE DR'),
- ('street', 'STATES ST'),
- ('street', 'STEINER ST'),
- ('street', 'STERLING ST'),
- ('street', 'STERN GROVE CT'),
- ('street', 'STERNBERG RD'),
- ('street', 'STEUART ST'),
- ('street', 'STEUBEN ST'),
- ('street', 'STEVELOE PL'),
- ('street', 'STEVENSON ST'),
- ('street', 'STILL ST'),
- ('street', 'STILLINGS AVE'),
- ('street', 'STILLMAN ST'),
- ('street', 'STILWELL RD'),
- ('street', 'STOCKTON ST'),
- ('street', 'STOCKTON TUNL'),
- ('street', 'STONE ST'),
- ('street', 'STONECREST DR'),
- ('street', 'STONEMAN ST'),
- ('street', 'STONERIDGE LN'),
- ('street', 'STONEYBROOK AVE'),
- ('street', 'STONEYFORD AVE'),
- ('street', 'STOREY AVE'),
- ('street', 'STORRIE ST'),
- ('street', 'STOW LAKE DR'),
- ('street', 'STRATFORD DR'),
- ('street', 'STRIPED BASS ST'),
- ('street', 'STURGEON ST'),
- ('street', 'SUMMIT ST'),
- ('street', 'SUMMIT WAY'),
- ('street', 'SUMNER AVE'),
- ('street', 'SUMNER ST'),
- ('street', 'SUNBEAM LN'),
- ('street', 'SUNGLOW LN'),
- ('street', 'SUNNYDALE AVE'),
- ('street', 'SUNNYSIDE TER'),
- ('street', 'SUNRISE WAY'),
- ('street', 'SUNSET BLVD'),
- ('street', 'SUNSET BLVD OFF RAMP'),
- ('street', 'SUNSET BLVD ON RAMP'),
- ('street', 'SUNVIEW DR'),
- ('street', 'SURREY ST'),
- ('street', 'SUSSEX ST'),
- ('street', 'SUTRO HEIGHTS AVE'),
- ('street', 'SUTTER ST'),
- ('street', 'SWEENY ST'),
- ('street', 'SWISS AVE'),
- ('street', 'SYCAMORE ST'),
- ('street', 'SYDNEY WAY'),
- ('street', 'SYLVAN DR'),
- ('street', 'TABER PL'),
- ('street', 'TACOMA ST'),
- ('street', 'TALBERT CT'),
- ('street', 'TALBERT ST'),
- ('street', 'TAMALPAIS TER'),
- ('street', 'TAMPA LN'),
- ('street', 'TANDANG SORA'),
- ('street', 'TAPIA DR'),
- ('street', 'TARA ST'),
- ('street', 'TARAVAL ST'),
- ('street', 'TAYLOR RD'),
- ('street', 'TAYLOR ST'),
- ('street', 'TEDDY AVE'),
- ('street', 'TEHAMA ST'),
- ('street', 'TELEGRAPH PL'),
- ('street', 'TELEGRAPH HILL BLVD'),
- ('street', 'TEMESCAL TER'),
- ('street', 'TEMPLE ST'),
- ('street', 'TENNESSEE ST'),
- ('street', 'TENNY PL'),
- ('street', 'TERESITA BLVD'),
- ('street', 'TERRA VISTA AVE'),
- ('street', 'TERRACE DR'),
- ('street', 'TERRACE WALK'),
- ('street', 'TERRY A FRANCOIS BLVD'),
- ('street', 'TEVIS ST'),
- ('street', 'TEXAS ST'),
- ('street', 'THE EMBARCADERO'),
- ('street', 'THERESA ST'),
- ('street', 'THOMAS AVE'),
- ('street', 'THOMAS CT'),
- ('street', 'THOMAS MELLON CIR'),
- ('street', 'THOMAS MELLON DR'),
- ('street', 'THOMAS MORE WAY'),
- ('street', 'THOR AVE'),
- ('street', 'THORNBURG RD'),
- ('street', 'THORNE WAY'),
- ('street', 'THORNTON AVE'),
- ('street', 'THORP LN'),
- ('street', 'THRIFT ST'),
- ('street', 'TIFFANY AVE'),
- ('street', 'TILLMAN PL'),
- ('street', 'TIMOTHY PFLUEGER PL'),
- ('street', 'TINGLEY ST'),
- ('street', 'TIOGA AVE'),
- ('street', 'TOCOLOMA AVE'),
- ('street', 'TODD ST'),
- ('street', 'TOLAND ST'),
- ('street', 'TOLEDO WAY'),
- ('street', 'TOLL PLAZA TUNNEL'),
- ('street', 'TOMASO CT'),
- ('street', 'TOMPKINS AVE'),
- ('street', 'TONQUIN ST'),
- ('street', 'TOPAZ WAY'),
- ('street', 'TOPEKA AVE'),
- ('street', 'TORNEY AVE'),
- ('street', 'TORRENS CT'),
- ('street', 'TOUCHARD ST'),
- ('street', 'TOWERSIDE AVE'),
- ('street', 'TOWNSEND ST'),
- ('street', 'TOYON LN'),
- ('street', 'TRADER VIC ALY'),
- ('street', 'TRAINOR ST'),
- ('street', 'TRANSBAY HUMP'),
- ('street', 'TRANSBAY LOOP'),
- ('street', 'TRANSVERSE DR'),
- ('street', 'TREASURE ISLAND RD'),
- ('street', 'TREASURY PL'),
- ('street', 'TREAT AVE'),
- ('street', 'TREAT LN'),
- ('street', 'TREAT WAY'),
- ('street', 'TRENTON ST'),
- ('street', 'TRINITY ST'),
- ('street', 'TROY ALY'),
- ('street', 'TRUBY ST'),
- ('street', 'TRUETT ST'),
- ('street', 'TRUMBULL ST'),
- ('street', 'TUBBS ST'),
- ('street', 'TUCKER AVE'),
- ('street', 'TULANE ST'),
- ('street', 'TULARE ST'),
- ('street', 'TULIP ALY'),
- ('street', 'TUNNEL AVE'),
- ('street', 'TURK BLVD'),
- ('street', 'TURK ST'),
- ('street', 'TURK MURPHY LN'),
- ('street', 'TURNER TER'),
- ('street', 'TURQUOISE WAY'),
- ('street', 'TUSCANY ALY'),
- ('street', 'TWIN PEAKS BLVD'),
- ('street', 'ULLOA ST'),
- ('street', 'UNDERWOOD AVE'),
- ('street', 'UNION ST'),
- ('street', 'UNITED NATIONS PLZ'),
- ('street', 'UNIVERSITY ST'),
- ('street', 'UPLAND DR'),
- ('street', 'UPPER TER'),
- ('street', 'UPPER SERVICE RD'),
- ('street', 'UPTON AVE'),
- ('street', 'UPTON ST'),
- ('street', 'URANUS TER'),
- ('street', 'URBANO DR'),
- ('street', 'UTAH ST'),
- ('street', 'VALDEZ AVE'),
- ('street', 'VALE AVE'),
- ('street', 'VALENCIA ST'),
- ('street', 'VALERTON CT'),
- ('street', 'VALLEJO ST'),
- ('street', 'VALLETTA CT'),
- ('street', 'VALLEY ST'),
- ('street', 'VALMAR TER'),
- ('street', 'VALPARAISO ST'),
- ('street', 'VAN BUREN ST'),
- ('street', 'VAN DYKE AVE'),
- ('street', 'VAN KEUREN AVE'),
- ('street', 'VAN NESS AVE'),
- ('street', 'VANDEWATER ST'),
- ('street', 'VARA ST'),
- ('street', 'VARELA AVE'),
- ('street', 'VARENNES ST'),
- ('street', 'VARNEY PL'),
- ('street', 'VASQUEZ AVE'),
- ('street', 'VASSAR PL'),
- ('street', 'VEGA ST'),
- ('street', 'VELASCO AVE'),
- ('street', 'VENARD ALY'),
- ('street', 'VENTURA AVE'),
- ('street', 'VENUS ST'),
- ('street', 'VER MEHR PL'),
- ('street', 'VERDI PL'),
- ('street', 'VERDUN WAY'),
- ('street', 'VERMONT ST'),
- ('street', 'VERNA ST'),
- ('street', 'VERNON ST'),
- ('street', 'VESTA ST'),
- ('street', 'VETERANS DR'),
- ('street', 'VIA BUFANO'),
- ('street', 'VIA FERLINGHETTI'),
- ('street', 'VICENTE ST'),
- ('street', 'VICKSBURG ST'),
- ('street', 'VICTORIA ST'),
- ('street', 'VIDAL DR'),
- ('street', 'VIENNA ST'),
- ('street', 'VILLA TER'),
- ('street', 'VINE TER'),
- ('street', 'VINTON CT'),
- ('street', 'VIRGIL ST'),
- ('street', 'VIRGINIA AVE'),
- ('street', 'VISITACION AVE'),
- ('street', 'VISTA CT'),
- ('street', 'VISTA LN'),
- ('street', 'VISTA VERDE CT'),
- ('street', 'VISTA VIEW CT'),
- ('street', 'VON SCHMIDT ST'),
- ('street', 'VULCAN STWY'),
- ('street', 'WABASH TER'),
- ('street', 'WAGNER ALY'),
- ('street', 'WAITHMAN WAY'),
- ('street', 'WALBRIDGE ST'),
- ('street', 'WALDO ALY'),
- ('street', 'WALKER CT'),
- ('street', 'WALKWAY'),
- ('street', 'WALL PL'),
- ('street', 'WALLACE AVE'),
- ('street', 'WALLEN ST'),
- ('street', 'WALLER ST'),
- ('street', 'WALNUT ST'),
- ('street', 'WALTER ST'),
- ('street', 'WALTER U LUM PL'),
- ('street', 'WALTHAM ST'),
- ('street', 'WANDA ST'),
- ('street', 'WARD ST'),
- ('street', 'WARE ST'),
- ('street', 'WARNER PL'),
- ('street', 'WARREN DR'),
- ('street', 'WASHBURN ST'),
- ('street', 'WASHINGTON BLVD'),
- ('street', 'WASHINGTON ST'),
- ('street', 'WATCHMAN WAY'),
- ('street', 'WATER ST'),
- ('street', 'WATERLOO ST'),
- ('street', 'WATERVILLE ST'),
- ('street', 'WATT AVE'),
- ('street', 'WATTSON PL'),
- ('street', 'WAVERLY PL'),
- ('street', 'WAWONA ST'),
- ('street', 'WAYLAND ST'),
- ('street', 'WAYNE PL'),
- ('street', 'WEBB PL'),
- ('street', 'WEBSTER ST'),
- ('street', 'WEDEMEYER ST'),
- ('street', 'WELDON ST'),
- ('street', 'WELSH ST'),
- ('street', 'WENTWORTH PL'),
- ('street', 'WEST RD'),
- ('street', 'WEST BROADWAY'),
- ('street', 'WEST CLAY ST'),
- ('street', 'WEST CRYSTAL COVE TER'),
- ('street', 'WEST HALLECK ST'),
- ('street', 'WEST PACIFIC AVE'),
- ('street', 'WEST POINT RD'),
- ('street', 'WEST PORTAL AVE'),
- ('street', 'WEST VIEW AVE'),
- ('street', 'WESTBROOK CT'),
- ('street', 'WESTERN SHORE LN'),
- ('street', 'WESTGATE DR'),
- ('street', 'WESTMOORLAND DR'),
- ('street', 'WESTON CT'),
- ('street', 'WESTSIDE DR'),
- ('street', 'WESTWOOD DR'),
- ('street', 'WETMORE ST'),
- ('street', 'WHEAT ST'),
- ('street', 'WHEELER AVE'),
- ('street', 'WHIPPLE AVE'),
- ('street', 'WHITE ST'),
- ('street', 'WHITECLIFF WAY'),
- ('street', 'WHITFIELD CT'),
- ('street', 'WHITING ST'),
- ('street', 'WHITING WAY'),
- ('street', 'WHITNEY ST'),
- ('street', 'WHITNEY YOUNG CIR'),
- ('street', 'WHITTIER ST'),
- ('street', 'WIESE ST'),
- ('street', 'WILDE AVE'),
- ('street', 'WILDER ST'),
- ('street', 'WILDWOOD WAY'),
- ('street', 'WILLARD ST'),
- ('street', 'WILLIAMS AVE'),
- ('street', 'WILLIAR AVE'),
- ('street', 'WILLIE B KENNEDY DR'),
- ('street', 'WILLOW ST'),
- ('street', 'WILLS ST'),
- ('street', 'WILMOT ST'),
- ('street', 'WILSON ST'),
- ('street', 'WINDING WAY'),
- ('street', 'WINDSOR PL'),
- ('street', 'WINFIELD ST'),
- ('street', 'WINN WAY'),
- ('street', 'WINSTON DR'),
- ('street', 'WINTER PL'),
- ('street', 'WINTHROP ST'),
- ('street', 'WISCONSIN ST'),
- ('street', 'WISSER CT'),
- ('street', 'WOOD ST'),
- ('street', 'WOODACRE DR'),
- ('street', 'WOODHAVEN CT'),
- ('street', 'WOODLAND AVE'),
- ('street', 'WOODSIDE AVE'),
- ('street', 'WOODWARD ST'),
- ('street', 'WOOL CT'),
- ('street', 'WOOL ST'),
- ('street', 'WOOLSEY ST'),
- ('street', 'WORCESTER AVE'),
- ('street', 'WORDEN ST'),
- ('street', 'WORTH ST'),
- ('street', 'WRIGHT CT'),
- ('street', 'WRIGHT LOOP'),
- ('street', 'WRIGHT ST'),
- ('street', 'WYMAN AVE'),
- ('street', 'WYTON LN'),
- ('street', 'YACHT RD'),
- ('street', 'YALE ST'),
- ('street', 'YELLOW CAB ACCESS ROAD'),
- ('street', 'YERBA BUENA AVE'),
- ('street', 'YERBA BUENA DR'),
- ('street', 'YERBA BUENA LN'),
- ('street', 'YERBA BUENA RD'),
- ('street', 'YORBA ST'),
- ('street', 'YORK ST'),
- ('street', 'YOSEMITE AVE'),
- ('street', 'YOUNG CT'),
- ('street', 'YOUNG ST'),
- ('street', 'YUKON ST'),
- ('street', 'ZAMPA LN'),
- ('street', 'ZANOWITZ AVE'),
- ('street', 'ZENO PL'),
- ('street', 'ZIRCON PL'),
- ('street', 'ZOE ST'),
- ('street', 'ZOO RD'),
- ('street', 'DR TOM WADDELL PL'),
- ('street', 'AL SCOMA WAY'),
- ('street', 'PALACE DR'),
- ('street', 'MARTIN AVE'),
- ('street', 'MISSION BAY BLVD SOUTH'),
- ('street', 'BUENA VISTA AVE EAST'),
- ('street', 'CONSERVATORY DR EAST'),
- ('street', 'BURNETT AVE NORTH'),
- ('street', 'LAKE MERCED HILL ST NORTH'),
- ('street', 'BUENA VISTA AVE WEST'),
- ('street', 'WILLARD ST NORTH'),
- ('street', 'FIRST DR EAST'),
- ('street', 'LAKE MERCED HILL ST SOUTH'),
- ('street', 'MISSION BAY BLVD NORTH'),
- ('street', '25TH AVE NORTH'),
- ('street', 'CONSERVATORY DR WEST'),
- ('street', 'FIRST DR WEST'),
- ('street', 'ZANOWITZ ST'),
- ('street', 'AVENUE G'),
- ('street', 'ODD FELLOWS WAY'),
- ('street', 'EL DORADO ST NORTH'),
- ('street', 'EL DORADO ST SOUTH'),
- ('street', 'FRIDA KAHLO WAY'),
- ('street', 'WARRIORS WAY'),
- ('street', 'WATERFRONT ST'),
- ('street', 'PALM LN'),
- ('street', 'WHIPPLE ST'),
- ('street', 'SAM JORDANS WAY'),
- ('street', 'SAN FRANCISCO GOLF CLUB RD'),
- ('street', 'JEFF ADACHI WAY'),
- ('street', 'LONG BRIDGE VARA'),
- ('street', 'STEUART LN'),
- ('street', 'EARL GAGE JR ST'),
- ('tag', 'Technology'),
- ('tag', 'Nature'),
- ('tag', 'Water'),
- ('tag', 'Programming'),
- ('tag', 'Excercise'),
- ('tag', 'Spritual'),
- ('tag', 'Skateboarding'),
- ('tag', 'Kitesurfing');
-
-INSERT INTO faker.dictionary (
- type,
- word
-) VALUES
- ('cta', 'Start Your Journey'),
- ('cta', 'Reserve your spot now'),
- ('cta', 'Sign up'),
- ('cta', 'Sign up to attend now'),
- ('cta', 'Join Us!'),
- ('cta', 'Let’s Do It!'),
- ('cta', 'Get Started'),
- ('cta', 'Sign up free'),
- ('cta', 'Learn more'),
- ('cta', 'Join now'),
- ('cta', 'Start now'),
- ('cta', 'Get yours now');
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/procedures/utils.sql b/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/procedures/utils.sql
deleted file mode 100644
index c6c3cd2c2..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/procedures/utils.sql
+++ /dev/null
@@ -1,47 +0,0 @@
--- Verify schemas/faker/procedures/utils on pg
-
-BEGIN;
-
-SELECT verify_function ('faker.word_type');
-SELECT verify_function ('faker.word');
-SELECT verify_function ('faker.gender');
-SELECT verify_function ('faker.username');
-SELECT verify_function ('faker.name');
-SELECT verify_function ('faker.surname');
-SELECT verify_function ('faker.fullname');
-SELECT verify_function ('faker.business');
-SELECT verify_function ('faker.city');
-SELECT verify_function ('faker.zip');
-SELECT verify_function ('faker.lnglat');
-SELECT verify_function ('faker.phone');
-SELECT verify_function ('faker.street');
-SELECT verify_function ('faker.state');
-SELECT verify_function ('faker.address');
-SELECT verify_function ('faker.tags');
-SELECT verify_function ('faker.sentence');
-SELECT verify_function ('faker.paragraph');
-SELECT verify_function ('faker.email');
-SELECT verify_function ('faker.uuid');
-SELECT verify_function ('faker.token');
-SELECT verify_function ('faker.password');
-SELECT verify_function ('faker.hostname');
-SELECT verify_function ('faker.time_unit');
-SELECT verify_function ('faker.float');
-SELECT verify_function ('faker.integer');
-SELECT verify_function ('faker.date');
-SELECT verify_function ('faker.birthdate');
-SELECT verify_function ('faker.interval');
-SELECT verify_function ('faker.boolean');
-SELECT verify_function ('faker.timestamptz');
-SELECT verify_function ('faker.mime');
-SELECT verify_function ('faker.ext');
-SELECT verify_function ('faker.image_mime');
-SELECT verify_function ('faker.image');
-SELECT verify_function ('faker.profilepic');
-SELECT verify_function ('faker.file');
-SELECT verify_function ('faker.url');
-SELECT verify_function ('faker.upload');
-SELECT verify_function ('faker.ip');
-SELECT verify_function ('faker.attachment');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/schema.sql b/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/schema.sql
deleted file mode 100644
index 526b3f9cc..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/faker/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('faker');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/tables/cities/fixtures/1602987351008_fixture.sql b/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/tables/cities/fixtures/1602987351008_fixture.sql
deleted file mode 100644
index bb8592edb..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/tables/cities/fixtures/1602987351008_fixture.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Verify schemas/faker/tables/cities/fixtures/1602987351008_fixture on pg
-
-BEGIN;
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/tables/cities/table.sql b/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/tables/cities/table.sql
deleted file mode 100644
index 0e728ed98..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/tables/cities/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/faker/tables/cities/table on pg
-
-BEGIN;
-
-SELECT verify_table ('faker.cities');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/tables/dictionary/fixtures/1602969089665_fixture.sql b/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/tables/dictionary/fixtures/1602969089665_fixture.sql
deleted file mode 100644
index 000bd5f52..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/tables/dictionary/fixtures/1602969089665_fixture.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Verify schemas/faker/tables/dictionary/fixtures/1602969089665_fixture on pg
-
-BEGIN;
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/tables/dictionary/table.sql b/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/tables/dictionary/table.sql
deleted file mode 100644
index 43160acda..000000000
--- a/__fixtures__/stage/extensions/@pgpm/faker/verify/schemas/faker/tables/dictionary/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/faker/tables/dictionary/table on pg
-
-BEGIN;
-
-SELECT verify_table ('faker.dictionary');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/LICENSE b/__fixtures__/stage/extensions/@pgpm/geotypes/LICENSE
deleted file mode 100644
index 7b18c9183..000000000
--- a/__fixtures__/stage/extensions/@pgpm/geotypes/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2025 Dan Lynch
-Copyright (c) 2025 Constructive
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/Makefile b/__fixtures__/stage/extensions/@pgpm/geotypes/Makefile
deleted file mode 100644
index 0e6fa1c4c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/geotypes/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-EXTENSION = pgpm-geo-types
-DATA = sql/pgpm-geo-types--0.14.0.sql
-
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/README.md b/__fixtures__/stage/extensions/@pgpm/geotypes/README.md
deleted file mode 100644
index 63019c1ab..000000000
--- a/__fixtures__/stage/extensions/@pgpm/geotypes/README.md
+++ /dev/null
@@ -1,174 +0,0 @@
-# @pgpm/geotypes
-
-
-
-
-
-
-
-
-
-
-
-
-
-Geographic data types and spatial functions for PostgreSQL.
-
-## Overview
-
-`@pgpm/geotypes` provides PostgreSQL domain types for geographic data, built on top of PostGIS geometry types. This package enables type-safe storage and validation of geographic coordinates and polygons with proper SRID (Spatial Reference System Identifier) enforcement.
-
-## Features
-
-- **geolocation**: A domain type for geographic points (latitude/longitude) using WGS84 (SRID 4326)
-- **geopolygon**: A domain type for geographic polygons using WGS84 (SRID 4326)
-- Automatic SRID validation to ensure coordinate system consistency
-- Integration with PostGIS spatial functions
-
-## Installation
-
-If you have `pgpm` installed:
-
-```bash
-pgpm install @pgpm/geotypes
-pgpm deploy
-```
-
-This is a quick way to get started. The sections below provide more detailed installation options.
-
-### Prerequisites
-
-```bash
-# Install pgpm CLI
-npm install -g pgpm
-
-# Start local Postgres (via Docker) and export env vars
-pgpm docker start
-eval "$(pgpm env)"
-```
-
-> **Tip:** Already running Postgres? Skip the Docker step and just export your `PG*` environment variables.
-
-### **Add to an Existing Package**
-
-```bash
-# 1. Install the package
-pgpm install @pgpm/geotypes
-
-# 2. Deploy locally
-pgpm deploy
-```
-
-### **Add to a New Project**
-
-```bash
-# 1. Create a workspace
-pgpm init workspace
-
-# 2. Create your first module
-cd my-workspace
-pgpm init
-
-# 3. Install a package
-cd packages/my-module
-pgpm install @pgpm/geotypes
-
-# 4. Deploy everything
-pgpm deploy --createdb --database mydb1
-```
-
-## Usage
-
-### Creating Tables with Geographic Types
-
-```sql
-CREATE TABLE places (
- id serial PRIMARY KEY,
- loc geolocation,
- area geopolygon
-);
-```
-
-### Inserting Geographic Data
-
-```sql
--- Insert a point location (San Francisco)
-INSERT INTO places (loc)
-VALUES (
- ST_SetSRID(ST_MakePoint(-122.4194, 37.7749), 4326)
-);
-
--- Insert a polygon area
-INSERT INTO places (area)
-VALUES (
- ST_SetSRID(
- ST_GeomFromText('POLYGON((-122.5 37.7, -122.4 37.7, -122.4 37.8, -122.5 37.8, -122.5 37.7))'),
- 4326
- )
-);
-```
-
-### SRID Validation
-
-The domain types automatically enforce SRID 4326 (WGS84):
-
-```sql
--- This will fail - incorrect SRID
-INSERT INTO places (loc)
-VALUES (
- ST_SetSRID(ST_MakePoint(-122.4194, 37.7749), 3857)
-);
--- ERROR: value for domain geolocation violates check constraint
-```
-
-## Domain Types
-
-### geolocation
-
-A PostgreSQL domain based on `geometry(Point, 4326)` that stores geographic point coordinates.
-
-- **Base Type**: `geometry(Point, 4326)`
-- **Use Case**: Storing latitude/longitude coordinates for locations
-- **SRID**: 4326 (WGS84 - World Geodetic System 1984)
-
-### geopolygon
-
-A PostgreSQL domain based on `geometry(Polygon, 4326)` that stores geographic polygon areas.
-
-- **Base Type**: `geometry(Polygon, 4326)`
-- **Use Case**: Storing geographic boundaries, regions, or areas
-- **SRID**: 4326 (WGS84)
-- **Validation**: Ensures valid polygon geometry (closed rings, proper vertex count)
-
-## Dependencies
-
-- `@pgpm/types`: Core PostgreSQL type definitions
-- `@pgpm/verify`: Verification utilities for database objects
-- PostGIS extension (required for geometry types)
-
-## Testing
-
-```bash
-pnpm test
-```
-
-The test suite validates:
-- Successful insertion of valid points and polygons
-- SRID validation and rejection of incorrect coordinate systems
-- Polygon geometry validation
-
-## Related Tooling
-
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
-* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
-* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
-* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
-
-## Disclaimer
-
-AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED "AS IS", AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND.
-
-No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value.
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/__tests__/geotypes.test.ts b/__fixtures__/stage/extensions/@pgpm/geotypes/__tests__/geotypes.test.ts
deleted file mode 100644
index 8e92d23bb..000000000
--- a/__fixtures__/stage/extensions/@pgpm/geotypes/__tests__/geotypes.test.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import { getConnections, PgTestClient } from 'pgsql-test';
-
-jest.setTimeout(15000);
-
-let pg: PgTestClient;
-let teardown: () => Promise;
-
-beforeAll(async () => {
- ({ pg, teardown } = await getConnections());
-
- await pg.any(`
- CREATE TABLE places (
- id serial PRIMARY KEY,
- loc geolocation,
- area geopolygon
- );
- `);
-});
-
-afterAll(async () => {
- await teardown();
-});
-
-describe('places table (geotypes)', () => {
- it('inserts valid point and polygon', async () => {
- await expect(pg.any(`
- INSERT INTO places (loc, area)
- VALUES (
- ST_SetSRID(ST_MakePoint(-122.4194, 37.7749), 4326),
- ST_SetSRID(
- ST_GeomFromText('POLYGON((-122.5 37.7, -122.4 37.7, -122.4 37.8, -122.5 37.8, -122.5 37.7))'),
- 4326
- )
- );
- `)).resolves.not.toThrow();
- });
-
- it('fails if point SRID is incorrect', async () => {
- await expect(pg.any(`
- INSERT INTO places (loc)
- VALUES (
- ST_SetSRID(ST_MakePoint(-122.4194, 37.7749), 3857)
- );
- `)).rejects.toThrow();
- });
-
- it('fails if polygon is invalid', async () => {
- await expect(pg.any(`
- INSERT INTO places (area)
- VALUES (
- ST_SetSRID(ST_GeomFromText('POLYGON((0 0, 1 1, 2 2))'), 4326)
- );
- `)).rejects.toThrow();
- });
-});
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/deploy/schemas/public/domains/geolocation.sql b/__fixtures__/stage/extensions/@pgpm/geotypes/deploy/schemas/public/domains/geolocation.sql
deleted file mode 100644
index d60ba2241..000000000
--- a/__fixtures__/stage/extensions/@pgpm/geotypes/deploy/schemas/public/domains/geolocation.sql
+++ /dev/null
@@ -1,10 +0,0 @@
--- Deploy schemas/public/domains/geolocation to pg
-
--- requires: schemas/public/schema
-
-BEGIN;
-
-CREATE DOMAIN geolocation AS geometry (Point, 4326);
-COMMENT ON DOMAIN geolocation IS E'@name pgpmInternalTypeGeoLocation';
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/deploy/schemas/public/domains/geopolygon.sql b/__fixtures__/stage/extensions/@pgpm/geotypes/deploy/schemas/public/domains/geopolygon.sql
deleted file mode 100644
index b1011480c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/geotypes/deploy/schemas/public/domains/geopolygon.sql
+++ /dev/null
@@ -1,10 +0,0 @@
--- Deploy schemas/public/domains/geopolygon to pg
-
--- requires: schemas/public/schema
-
-BEGIN;
-
-CREATE DOMAIN geopolygon AS geometry (Polygon, 4326);
-COMMENT ON DOMAIN geopolygon IS E'@name pgpmInternalTypeGeoPolygon';
-
-COMMIT;
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/jest.config.js b/__fixtures__/stage/extensions/@pgpm/geotypes/jest.config.js
deleted file mode 100644
index e20e7efb5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/geotypes/jest.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @type {import('ts-jest').JestConfigWithTsJest} */
-module.exports = {
- preset: 'ts-jest',
- testEnvironment: 'node',
-
- // Match both __tests__ and colocated test files
- testMatch: ['**/?(*.)+(test|spec).{ts,tsx,js,jsx}'],
-
- // Ignore build artifacts and type declarations
- testPathIgnorePatterns: ['/dist/', '\\.d\\.ts$'],
- modulePathIgnorePatterns: ['/dist/'],
- watchPathIgnorePatterns: ['/dist/'],
-
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
-};
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/package.json b/__fixtures__/stage/extensions/@pgpm/geotypes/package.json
deleted file mode 100644
index aa2f79df8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/geotypes/package.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "name": "@pgpm/geotypes",
- "version": "0.15.2",
- "description": "Geographic data types and spatial functions for PostgreSQL",
- "author": "Dan Lynch ",
- "contributors": [
- "Constructive "
- ],
- "keywords": [
- "postgresql",
- "pgpm",
- "geography",
- "spatial"
- ],
- "publishConfig": {
- "access": "public"
- },
- "scripts": {
- "bundle": "pgpm package",
- "test": "jest",
- "test:watch": "jest --watch"
- },
- "dependencies": {
- "@pgpm/types": "0.15.2",
- "@pgpm/verify": "0.15.2"
- },
- "devDependencies": {
- "pgpm": "^1.0.0"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/constructive-io/pgpm-modules"
- },
- "homepage": "https://github.com/constructive-io/pgpm-modules",
- "bugs": {
- "url": "https://github.com/constructive-io/pgpm-modules/issues"
- }
-}
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/pgpm-geo-types.control b/__fixtures__/stage/extensions/@pgpm/geotypes/pgpm-geo-types.control
deleted file mode 100644
index ea55295a2..000000000
--- a/__fixtures__/stage/extensions/@pgpm/geotypes/pgpm-geo-types.control
+++ /dev/null
@@ -1,8 +0,0 @@
-# pgpm-geo-types extension
-comment = 'pgpm-geo-types extension'
-default_version = '0.14.0'
-module_pathname = '$libdir/pgpm-geo-types'
-requires = 'plpgsql,citext,postgis,pgpm-types,pgpm-verify'
-relocatable = false
-superuser = false
-
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/pgpm.plan b/__fixtures__/stage/extensions/@pgpm/geotypes/pgpm.plan
deleted file mode 100644
index e1b666f1c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/geotypes/pgpm.plan
+++ /dev/null
@@ -1,7 +0,0 @@
-%syntax-version=1.0.0
-%project=pgpm-geo-types
-%uri=pgpm-geo-types
-
-schemas/public/schema 2017-08-11T08:11:51Z skitch # add schemas/public/schema
-schemas/public/domains/geolocation [schemas/public/schema] 2017-08-11T08:11:51Z skitch # add schemas/public/domains/geolocation
-schemas/public/domains/geopolygon [schemas/public/schema] 2017-08-11T08:11:51Z skitch # add schemas/public/domains/geopolygon
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/revert/schemas/public/domains/geolocation.sql b/__fixtures__/stage/extensions/@pgpm/geotypes/revert/schemas/public/domains/geolocation.sql
deleted file mode 100644
index 16dcf03ed..000000000
--- a/__fixtures__/stage/extensions/@pgpm/geotypes/revert/schemas/public/domains/geolocation.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/public/domains/geolocation from pg
-
-BEGIN;
-
-DROP TYPE public.geolocation;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/revert/schemas/public/domains/geopolygon.sql b/__fixtures__/stage/extensions/@pgpm/geotypes/revert/schemas/public/domains/geopolygon.sql
deleted file mode 100644
index 2b79a7e85..000000000
--- a/__fixtures__/stage/extensions/@pgpm/geotypes/revert/schemas/public/domains/geopolygon.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/public/domains/geopolygon from pg
-
-BEGIN;
-
-DROP TYPE public.geopolygon;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/sql/pgpm-geo-types--0.14.0.sql b/__fixtures__/stage/extensions/@pgpm/geotypes/sql/pgpm-geo-types--0.14.0.sql
deleted file mode 100644
index a2db98827..000000000
--- a/__fixtures__/stage/extensions/@pgpm/geotypes/sql/pgpm-geo-types--0.14.0.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-\echo Use "CREATE EXTENSION pgpm-geo-types" to load this file. \quit
-CREATE DOMAIN geolocation AS geometry(point, 4326);
-
-COMMENT ON DOMAIN geolocation IS '@name pgpmInternalTypeGeoLocation';
-
-CREATE DOMAIN geopolygon AS geometry(polygon, 4326);
-
-COMMENT ON DOMAIN geopolygon IS '@name pgpmInternalTypeGeoPolygon';
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/verify/schemas/public/domains/geolocation.sql b/__fixtures__/stage/extensions/@pgpm/geotypes/verify/schemas/public/domains/geolocation.sql
deleted file mode 100644
index df4d06c5a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/geotypes/verify/schemas/public/domains/geolocation.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/public/domains/geolocation on pg
-
-BEGIN;
-
-SELECT verify_domain ('public.geolocation');
-
-ROLLBACK;
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/geotypes/verify/schemas/public/domains/geopolygon.sql b/__fixtures__/stage/extensions/@pgpm/geotypes/verify/schemas/public/domains/geopolygon.sql
deleted file mode 100644
index 2b22a7cfb..000000000
--- a/__fixtures__/stage/extensions/@pgpm/geotypes/verify/schemas/public/domains/geopolygon.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/public/domains/geopolygon on pg
-
-BEGIN;
-
-SELECT verify_domain ('public.geopolygon');
-
-ROLLBACK;
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/LICENSE b/__fixtures__/stage/extensions/@pgpm/inflection/LICENSE
deleted file mode 100644
index 7b18c9183..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2025 Dan Lynch
-Copyright (c) 2025 Constructive
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/Makefile b/__fixtures__/stage/extensions/@pgpm/inflection/Makefile
deleted file mode 100644
index 663bdf76c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-EXTENSION = pgpm-inflection
-DATA = sql/pgpm-inflection--0.14.0.sql
-
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/README.md b/__fixtures__/stage/extensions/@pgpm/inflection/README.md
deleted file mode 100644
index 14887a15f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/README.md
+++ /dev/null
@@ -1,409 +0,0 @@
-# @pgpm/inflection
-
-
-
-
-
-
-
-
-
-
-
-
-
-String inflection utilities for PostgreSQL naming conventions
-
-## Overview
-
-`@pgpm/inflection` provides comprehensive string transformation functions for PostgreSQL, enabling seamless conversion between different naming conventions. This package is essential for code generation, schema introspection, and maintaining consistent naming patterns across your database. It includes pluralization, singularization, case conversion, and slugification utilities.
-
-## Features
-
-- **Case Conversion**: Transform between camelCase, PascalCase, snake_case, and kebab-case
-- **Pluralization**: Convert singular words to plural forms with English grammar rules
-- **Singularization**: Convert plural words to singular forms
-- **Slugification**: Create URL-friendly slugs from strings
-- **Rule-Based System**: Extensible inflection rules stored in database table
-- **Uncountable Words**: Handles special cases like "sheep", "fish", "data"
-- **Pure plpgsql**: No external dependencies required
-
-## Installation
-
-If you have `pgpm` installed:
-
-```bash
-pgpm install @pgpm/inflection
-pgpm deploy
-```
-
-This is a quick way to get started. The sections below provide more detailed installation options.
-
-### Prerequisites
-
-```bash
-# Install pgpm CLI
-npm install -g pgpm
-
-# Start local Postgres (via Docker) and export env vars
-pgpm docker start
-eval "$(pgpm env)"
-```
-
-> **Tip:** Already running Postgres? Skip the Docker step and just export your `PG*` environment variables.
-
-### **Add to an Existing Package**
-
-```bash
-# 1. Install the package
-pgpm install @pgpm/inflection
-
-# 2. Deploy locally
-pgpm deploy
-```
-
-### **Add to a New Project**
-
-```bash
-# 1. Create a workspace
-pgpm init workspace
-
-# 2. Create your first module
-cd my-workspace
-pgpm init
-
-# 3. Install a package
-cd packages/my-module
-pgpm install @pgpm/inflection
-
-# 4. Deploy everything
-pgpm deploy --createdb --database mydb1
-```
-
-## Core Functions
-
-### Case Conversion Functions
-
-#### inflection.camel(text)
-
-Convert string to camelCase.
-
-```sql
-SELECT inflection.camel('user_profile_image');
--- userProfileImage
-
-SELECT inflection.camel('UserProfileImage');
--- userProfileImage
-
-SELECT inflection.camel('user-profile-image');
--- userProfileImage
-```
-
-#### inflection.pascal(text)
-
-Convert string to PascalCase.
-
-```sql
-SELECT inflection.pascal('user_profile_image');
--- UserProfileImage
-
-SELECT inflection.pascal('user-profile-image');
--- UserProfileImage
-```
-
-#### inflection.underscore(text)
-
-Convert string to snake_case.
-
-```sql
-SELECT inflection.underscore('UserProfileImage');
--- user_profile_image
-
-SELECT inflection.underscore('userProfileImage');
--- user_profile_image
-
-SELECT inflection.underscore('user-profile-image');
--- user_profile_image
-```
-
-#### inflection.dashed(text)
-
-Convert string to kebab-case.
-
-```sql
-SELECT inflection.dashed('UserProfileImage');
--- user-profile-image
-
-SELECT inflection.dashed('user_profile_image');
--- user-profile-image
-```
-
-### Pluralization Functions
-
-#### inflection.plural(text)
-
-Convert singular word to plural form.
-
-```sql
-SELECT inflection.plural('user');
--- users
-
-SELECT inflection.plural('person');
--- people
-
-SELECT inflection.plural('child');
--- children
-
-SELECT inflection.plural('category');
--- categories
-
-SELECT inflection.plural('status');
--- statuses
-```
-
-#### inflection.singular(text)
-
-Convert plural word to singular form.
-
-```sql
-SELECT inflection.singular('users');
--- user
-
-SELECT inflection.singular('people');
--- person
-
-SELECT inflection.singular('children');
--- child
-
-SELECT inflection.singular('categories');
--- category
-```
-
-### Slugification Functions
-
-#### inflection.slugify(text)
-
-Create URL-friendly slug from string.
-
-```sql
-SELECT inflection.slugify('Hello World!');
--- hello-world
-
-SELECT inflection.slugify('User Profile & Settings');
--- user-profile-settings
-
-SELECT inflection.slugify(' Multiple Spaces ');
--- multiple-spaces
-```
-
-## Usage Examples
-
-### Database Schema Generation
-
-Generate table and column names following conventions:
-
-```sql
--- Convert API field names to database columns
-CREATE TABLE users (
- id uuid PRIMARY KEY,
- user_name text, -- from userName
- email_address text, -- from emailAddress
- created_at timestamptz DEFAULT now()
-);
-
--- Function to convert camelCase to snake_case
-CREATE FUNCTION api_to_db_column(field_name text)
-RETURNS text AS $$
-BEGIN
- RETURN inflection.underscore(field_name);
-END;
-$$ LANGUAGE plpgsql;
-
-SELECT api_to_db_column('firstName'); -- first_name
-SELECT api_to_db_column('emailAddress'); -- email_address
-```
-
-### GraphQL Schema Generation
-
-Generate GraphQL type names from database tables:
-
-```sql
--- Convert table names to GraphQL types
-SELECT inflection.pascal(inflection.singular(table_name)) as graphql_type
-FROM information_schema.tables
-WHERE table_schema = 'public';
-
--- user_profiles → UserProfile
--- blog_posts → BlogPost
--- categories → Category
-```
-
-### REST API Endpoint Generation
-
-Create consistent API endpoints:
-
-```sql
--- Generate REST endpoints from table names
-SELECT
- '/' || inflection.dashed(inflection.plural(table_name)) as endpoint,
- table_name
-FROM information_schema.tables
-WHERE table_schema = 'public';
-
--- users → /users
--- blog_posts → /blog-posts
--- user_profiles → /user-profiles
-```
-
-### Code Generation
-
-Generate TypeScript interfaces from database schema:
-
-```sql
--- Generate TypeScript interface names
-CREATE FUNCTION generate_ts_interface(table_name text)
-RETURNS text AS $$
-BEGIN
- RETURN 'export interface ' ||
- inflection.pascal(inflection.singular(table_name)) ||
- ' {';
-END;
-$$ LANGUAGE plpgsql;
-
-SELECT generate_ts_interface('user_profiles');
--- export interface UserProfile {
-```
-
-### URL Slug Generation
-
-Create SEO-friendly URLs:
-
-```sql
--- Generate slugs for blog posts
-CREATE TABLE blog_posts (
- id serial PRIMARY KEY,
- title text NOT NULL,
- slug text GENERATED ALWAYS AS (inflection.slugify(title)) STORED,
- content text,
- created_at timestamptz DEFAULT now()
-);
-
-INSERT INTO blog_posts (title, content)
-VALUES ('How to Use PostgreSQL', 'Content here...');
-
-SELECT slug FROM blog_posts;
--- how-to-use-postgresql
-```
-
-## Integration Examples
-
-### With @pgpm/metaschema-schema
-
-Use inflection for schema introspection and code generation:
-
-```sql
--- Generate model names from tables
-SELECT
- table_name,
- inflection.pascal(inflection.singular(table_name)) as model_name,
- inflection.camel(inflection.plural(table_name)) as collection_name
-FROM information_schema.tables
-WHERE table_schema = 'public';
-
--- user_profiles → UserProfile (model), userProfiles (collection)
--- blog_posts → BlogPost (model), blogPosts (collection)
-```
-
-### With @pgpm/utils
-
-Combine with other utilities for advanced transformations:
-
-```sql
--- Generate API response field names
-SELECT
- column_name,
- inflection.camel(column_name) as api_field_name
-FROM information_schema.columns
-WHERE table_name = 'users';
-
--- user_name → userName
--- email_address → emailAddress
--- created_at → createdAt
-```
-
-## Inflection Rules
-
-The package uses a rule-based system stored in the `inflection.inflection_rules` table:
-
-```sql
--- View pluralization rules
-SELECT * FROM inflection.inflection_rules WHERE type = 'plural';
-
--- View singularization rules
-SELECT * FROM inflection.inflection_rules WHERE type = 'singular';
-```
-
-### Adding Custom Rules
-
-You can extend the inflection system with custom rules:
-
-```sql
--- Add custom pluralization rule
-INSERT INTO inflection.inflection_rules (type, test, replacement)
-VALUES ('plural', '(ox)$', '\1en');
-
--- Now "ox" → "oxen"
-SELECT inflection.plural('ox');
--- oxen
-```
-
-### Uncountable Words
-
-Some words don't change between singular and plural:
-
-```sql
-SELECT inflection.plural('sheep');
--- sheep
-
-SELECT inflection.plural('fish');
--- fish
-
-SELECT inflection.plural('data');
--- data
-```
-
-## Use Cases
-
-- **ORM Code Generation**: Generate model classes from database tables
-- **API Development**: Convert between database and API naming conventions
-- **GraphQL Schema**: Generate GraphQL types from database schema
-- **Documentation**: Create consistent naming in generated documentation
-- **Migration Scripts**: Transform legacy naming to modern conventions
-- **URL Generation**: Create SEO-friendly slugs for content
-- **Multi-Language Support**: Handle naming conventions across different programming languages
-
-## Testing
-
-```bash
-pnpm test
-```
-
-## Dependencies
-
-- `@pgpm/verify`: Verification utilities
-
-## Related Tooling
-
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
-* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
-* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
-* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
-
-## Disclaimer
-
-AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED "AS IS", AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND.
-
-No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value.
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/__tests__/inflection.test.ts b/__fixtures__/stage/extensions/@pgpm/inflection/__tests__/inflection.test.ts
deleted file mode 100644
index 04efb53e4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/__tests__/inflection.test.ts
+++ /dev/null
@@ -1,181 +0,0 @@
-import cases from 'jest-in-case';
-import { getConnections, PgTestClient } from 'pgsql-test';
-
-let pg: PgTestClient;
-let teardown: () => Promise;
-
-describe('inflection', () => {
- beforeAll(async () => {
- ({ pg, teardown } = await getConnections());
- });
-
- afterAll(async () => {
- await teardown();
- });
-
- cases(
- 'slugify',
- async (opts: { name: string; allowUnicode: boolean; result: string }) => {
- const { pg_slugify } = await pg.one(
- 'SELECT * FROM inflection.pg_slugify($1, $2)',
- [opts.name, opts.allowUnicode]
- );
- expect(pg_slugify).toEqual(opts.result);
- },
- [
- { name: 'Hello, World!', allowUnicode: false, result: 'Hello_World' },
- { name: 'Héllø, Wørld!', allowUnicode: false, result: 'Hello_World' },
- { name: 'spam & eggs', allowUnicode: false, result: 'spam_eggs' },
- { name: 'spam & ıçüş', allowUnicode: true, result: 'spam_ıçüş' },
- { name: 'foo ıç bar', allowUnicode: true, result: 'foo_ıç_bar' },
- { name: ' foo ıç bar', allowUnicode: true, result: 'foo_ıç_bar' },
- { name: '你好', allowUnicode: true, result: '你好' },
- { name: 'message_properties', allowUnicode: false, result: 'message_properties' },
- { name: 'MessageProperties', allowUnicode: false, result: 'MessageProperties' },
- { name: 'WebACL', allowUnicode: false, result: 'WebAcl' }
- ]
- );
-
- cases(
- 'underscore',
- async (opts: { name: string; result: string }) => {
- const { underscore } = await pg.one(
- 'SELECT * FROM inflection.underscore($1)',
- [opts.name]
- );
- expect(underscore).toEqual(opts.result);
- },
- [
- { name: 'MessageProperties', result: 'message_properties' },
- { name: 'messageProperties', result: 'message_properties' },
- { name: 'message_properties', result: 'message_properties' },
- { name: 'User Post', result: 'user_post' },
- { name: 'MP', result: 'mp' },
- { name: 'WebACL', result: 'web_acl' },
- { name: 'wabCdEfgh', result: 'wab_cd_efgh' },
- { name: 'WabCDEfgH', result: 'wab_cd_efgh' }
- ]
- );
-
- cases(
- 'no_single_underscores',
- async (opts: { name: string; result: string }) => {
- const { no_single_underscores } = await pg.one(
- 'SELECT * FROM inflection.no_single_underscores($1)',
- [opts.name]
- );
- expect(no_single_underscores).toEqual(opts.result);
- },
- [
- { name: 'w_a_b_cd_efg_h', result: 'wab_cd_efgh' }
- ]
- );
-
- cases(
- 'pascal',
- async (opts: { name: string; result: string }) => {
- const { pascal } = await pg.one(
- 'SELECT * FROM inflection.pascal($1)',
- [opts.name]
- );
- expect(pascal).toEqual(opts.result);
- },
- [
- { name: 'MessageProperties', result: 'MessageProperties' },
- { name: 'message_properties', result: 'MessageProperties' },
- { name: 'messageProperties', result: 'MessageProperties' },
- { name: 'MP', result: 'Mp' },
- { name: 'WebAcl', result: 'WebAcl' },
- { name: 'WebACL', result: 'WebAcl' },
- { name: 'web_acl', result: 'WebAcl' },
- { name: 'web acl', result: 'WebAcl' },
- { name: 'Web Acl', result: 'WebAcl' },
- { name: 'Web ACL', result: 'WebAcl' },
- { name: 'w_a_b', result: 'Wab' }
- ]
- );
-
- cases(
- 'camel',
- async (opts: { name: string; result: string }) => {
- const { camel } = await pg.one(
- 'SELECT * FROM inflection.camel($1)',
- [opts.name]
- );
- expect(camel).toEqual(opts.result);
- },
- [
- { name: 'MessageProperties', result: 'messageProperties' },
- { name: 'message_properties', result: 'messageProperties' },
- { name: 'messageProperties', result: 'messageProperties' },
- { name: 'MP', result: 'mp' },
- { name: 'webAcl', result: 'webAcl' },
- { name: 'WebACL', result: 'webAcl' },
- { name: 'web_acl', result: 'webAcl' },
- { name: 'web acl', result: 'webAcl' },
- { name: 'Web Acl', result: 'webAcl' },
- { name: 'Web ACL', result: 'webAcl' },
- { name: 'w_a_b', result: 'wab' },
- { name: 'w_a_b_cd_efg_h', result: 'wabCdEfgh' }
- ]
- );
-
- cases(
- 'no_consecutive_caps',
- async (opts: { name: string; result: string }) => {
- const { no_consecutive_caps } = await pg.one(
- 'SELECT * FROM inflection.no_consecutive_caps($1)',
- [opts.name]
- );
- expect(no_consecutive_caps).toEqual(opts.result);
- },
- [
- { name: 'MP', result: 'Mp' },
- { name: 'Web_ACL', result: 'Web_Acl' },
- { name: 'MPComplete', result: 'MpComplete' },
- { name: 'ACLWindow', result: 'AclWindow' }
- ]
- );
-
- cases(
- 'plural',
- async (opts: { name: string; result: string }) => {
- const { plural } = await pg.one(
- 'SELECT * FROM inflection.plural($1)',
- [opts.name]
- );
- expect(plural).toEqual(opts.result);
- },
- [
- { name: 'user_login', result: 'user_logins' },
- { name: 'user Login', result: 'user Logins' },
- { name: 'user_logins', result: 'user_logins' },
- { name: 'user Logins', result: 'user Logins' },
- { name: 'children', result: 'children' },
- { name: 'child', result: 'children' },
- { name: 'man', result: 'men' },
- { name: 'men', result: 'men' }
- ]
- );
-
- cases(
- 'singular',
- async (opts: { name: string; result: string }) => {
- const { singular } = await pg.one(
- 'SELECT * FROM inflection.singular($1)',
- [opts.name]
- );
- expect(singular).toEqual(opts.result);
- },
- [
- { name: 'user_logins', result: 'user_login' },
- { name: 'user Logins', result: 'user Login' },
- { name: 'user_login', result: 'user_login' },
- { name: 'user Login', result: 'user Login' },
- { name: 'children', result: 'child' },
- { name: 'child', result: 'child' },
- { name: 'man', result: 'man' },
- { name: 'men', result: 'man' }
- ]
- );
-});
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/extension/defaults.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/extension/defaults.sql
deleted file mode 100644
index 1d50acc95..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/extension/defaults.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Deploy extension/defaults to pg
-
-BEGIN;
-
--- hstore, unaccent
-GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public to public;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/camel.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/camel.sql
deleted file mode 100644
index 382fc9f92..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/camel.sql
+++ /dev/null
@@ -1,25 +0,0 @@
--- Deploy schemas/inflection/procedures/camel to pg
-
--- requires: schemas/inflection/schema
--- requires: schemas/inflection/procedures/underscore
-
-BEGIN;
-
-CREATE FUNCTION inflection.camel (str text)
- RETURNS text
- AS $$
-DECLARE
- result text[];
-BEGIN
- str = inflection.underscore(str);
- FOR result IN
- SELECT regexp_matches(str, E'(_[a-zA-Z0-9])', 'g')
- LOOP
- str = replace(str, result[1], upper(result[1]));
- END LOOP;
- return regexp_replace(substring(str FROM 1 FOR 1) || substring(str FROM 2 FOR length(str)), E'[_]+', '', 'gi');
-END;
-$$
-LANGUAGE 'plpgsql' STABLE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/dashed.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/dashed.sql
deleted file mode 100644
index 7fc208cc5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/dashed.sql
+++ /dev/null
@@ -1,29 +0,0 @@
--- Deploy schemas/inflection/procedures/dashed to pg
-
--- requires: schemas/inflection/schema
--- requires: schemas/inflection/procedures/underscore
-
-BEGIN;
-
-CREATE FUNCTION inflection.dashed(str text)
- RETURNS text
- AS $$
- WITH underscored AS (
- SELECT
- inflection.underscore(str) AS value
-),
-dashes AS (
- SELECT
- regexp_replace(value, '_', '-', 'gi') AS value
- FROM
- underscored
-)
-SELECT
- value
-FROM
- dashes;
-$$
-LANGUAGE 'sql'
-IMMUTABLE;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/lower.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/lower.sql
deleted file mode 100644
index 31cc8c4da..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/lower.sql
+++ /dev/null
@@ -1,13 +0,0 @@
--- Deploy schemas/inflection/procedures/lower to pg
-
--- requires: schemas/inflection/schema
-
-BEGIN;
-
-CREATE FUNCTION inflection.lower ( str text ) RETURNS text AS $EOFCODE$
-BEGIN
- return lower(str);
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/no_consecutive_caps.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/no_consecutive_caps.sql
deleted file mode 100644
index 736a4c6eb..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/no_consecutive_caps.sql
+++ /dev/null
@@ -1,53 +0,0 @@
--- Deploy schemas/inflection/procedures/no_consecutive_caps to pg
-
--- requires: schemas/inflection/schema
-
-BEGIN;
-
-CREATE FUNCTION inflection.no_consecutive_caps_till_end(
- str text
-) returns text as $$
-DECLARE
- result text[];
- temp text;
-BEGIN
- FOR result IN
- SELECT regexp_matches(str, E'([A-Z])([A-Z]+$)', 'g')
- LOOP
- temp = result[1] || lower(result[2]);
- str = replace(str, result[1] || result[2], temp);
- END LOOP;
- return str;
-END;
-$$
-LANGUAGE 'plpgsql' STABLE;
-
-
-CREATE FUNCTION inflection.no_consecutive_caps_till_lower(
- str text
-) returns text as $$
-DECLARE
- result text[];
- temp text;
-BEGIN
- FOR result IN
- SELECT regexp_matches(str, E'([A-Z])([A-Z]+)[A-Z][a-z]', 'g')
- LOOP
- temp = result[1] || lower(result[2]);
- str = replace(str, result[1] || result[2], temp);
- END LOOP;
-
- return str;
-END;
-$$
-LANGUAGE 'plpgsql' STABLE;
-
-
-CREATE FUNCTION inflection.no_consecutive_caps(
- str text
-) returns text as $$
- select inflection.no_consecutive_caps_till_lower(inflection.no_consecutive_caps_till_end(str));
-$$
-LANGUAGE 'sql' STABLE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/no_single_underscores.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/no_single_underscores.sql
deleted file mode 100644
index b716392ea..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/no_single_underscores.sql
+++ /dev/null
@@ -1,70 +0,0 @@
--- Deploy schemas/inflection/procedures/no_single_underscores to pg
-
--- requires: schemas/inflection/schema
-
-BEGIN;
-
-CREATE FUNCTION inflection.no_single_underscores_in_beginning(
- str text
-) returns text as $$
-DECLARE
- result text[];
- temp text;
-BEGIN
- FOR result IN
- SELECT regexp_matches(str, E'(^[a-z])(_)', 'g')
- LOOP
- str = replace(str, result[1] || result[2], result[1]);
- END LOOP;
- return str;
-END;
-$$
-LANGUAGE 'plpgsql' STABLE;
-
-
-CREATE FUNCTION inflection.no_single_underscores_at_end(
- str text
-) returns text as $$
-DECLARE
- result text[];
- temp text;
-BEGIN
- FOR result IN
- SELECT regexp_matches(str, E'(_)([a-z]$)', 'g')
- LOOP
- str = replace(str, result[1] || result[2], result[2]);
- END LOOP;
-
- return str;
-END;
-$$
-LANGUAGE 'plpgsql' STABLE;
-
-CREATE FUNCTION inflection.no_single_underscores_in_middle(
- str text
-) returns text as $$
-DECLARE
- result text[];
- temp text;
-BEGIN
- FOR result IN
- SELECT regexp_matches(str, E'(_)([a-z]_)', 'g')
- LOOP
- str = replace(str, result[1] || result[2], result[2]);
- END LOOP;
-
- return str;
-END;
-$$
-LANGUAGE 'plpgsql' STABLE;
-
-
-CREATE FUNCTION inflection.no_single_underscores(
- str text
-) returns text as $$
- select
- inflection.no_single_underscores_in_middle(inflection.no_single_underscores_at_end(inflection.no_single_underscores_in_beginning(str)));
-$$
-LANGUAGE 'sql' STABLE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/pascal.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/pascal.sql
deleted file mode 100644
index 7a50cf1bd..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/pascal.sql
+++ /dev/null
@@ -1,20 +0,0 @@
--- Deploy schemas/inflection/procedures/pascal to pg
--- requires: schemas/inflection/schema
--- requires: schemas/inflection/procedures/camel
-
-BEGIN;
-
-CREATE FUNCTION inflection.pascal (str text)
- RETURNS text
- AS $$
-DECLARE
- result text[];
-BEGIN
- str = inflection.camel(str);
- return upper(substring(str FROM 1 FOR 1)) || substring(str FROM 2 FOR length(str));
-END;
-$$
-LANGUAGE 'plpgsql' STABLE;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/pg_slugify.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/pg_slugify.sql
deleted file mode 100644
index a230c734e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/pg_slugify.sql
+++ /dev/null
@@ -1,68 +0,0 @@
--- Deploy schemas/inflection/procedures/pg_slugify to pg
--- requires: schemas/inflection/schema
--- requires: schemas/inflection/procedures/no_consecutive_caps
--- NOTE: this does NOT lowercase, and uses underscores instead of dashes
-
-BEGIN;
-CREATE FUNCTION inflection.pg_slugify (value text, allow_unicode boolean)
- RETURNS text
- AS $$
- WITH normalized AS (
- SELECT
- CASE WHEN allow_unicode THEN
- value
- ELSE
- unaccent (value)
- END AS value
-),
-no_consecutive_caps AS (
- SELECT
- inflection.no_consecutive_caps (value) AS value
-FROM
- normalized
-),
-remove_chars AS (
- SELECT
- regexp_replace(value, E'[^\\w\\s-]', '', 'gi') AS value
-FROM
- no_consecutive_caps
-),
-trimmed AS (
- SELECT
- trim(value) AS value
-FROM
- remove_chars
-),
-hyphenated AS (
- SELECT
- regexp_replace(value, E'[-\\s]+', '-', 'gi') AS value
-FROM
- trimmed
-),
-underscored AS (
- SELECT
- regexp_replace(value, E'[-]+', '_', 'gi') AS value
-FROM
- hyphenated
-),
-removedups AS (
- SELECT
- regexp_replace(value, E'[_]+', '_', 'gi') AS value
-FROM
- underscored
-)
-SELECT
- value
-FROM
- removedups;
-$$
-LANGUAGE SQL
-STRICT IMMUTABLE;
--- default false overload
-CREATE FUNCTION inflection.pg_slugify (text)
- RETURNS text
- AS 'SELECT inflection.pg_slugify($1, false)'
- LANGUAGE SQL
- IMMUTABLE;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/plural.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/plural.sql
deleted file mode 100644
index 582d4bfd6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/plural.sql
+++ /dev/null
@@ -1,31 +0,0 @@
--- Deploy schemas/inflection/procedures/plural to pg
-
--- requires: schemas/inflection/schema
--- requires: schemas/inflection/tables/inflection_rules/table
-
-BEGIN;
-
-CREATE FUNCTION inflection.plural (str text)
- RETURNS text
- AS $$
-DECLARE
- result record;
- matches text[];
-BEGIN
- FOR result IN
- SELECT * FROM inflection.inflection_rules where type='plural'
- LOOP
- matches = regexp_matches(str, result.test, 'gi');
- IF (array_length(matches, 1) > 0) THEN
- IF (result.replacement IS NULL) THEN
- return str;
- END IF;
- str = regexp_replace(str, result.test, result.replacement, 'gi');
- return str;
- END IF;
- END LOOP;
- return str;
-END;
-$$
-LANGUAGE 'plpgsql' IMMUTABLE;
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/should_skip_uncountable.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/should_skip_uncountable.sql
deleted file mode 100644
index 394c948c0..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/should_skip_uncountable.sql
+++ /dev/null
@@ -1,17 +0,0 @@
--- Deploy schemas/inflection/procedures/should_skip_uncountable to pg
--- requires: schemas/inflection/schema
--- requires: schemas/inflection/procedures/uncountable_words
-
-BEGIN;
-
-CREATE FUNCTION inflection.should_skip_uncountable (str text)
- RETURNS boolean
- AS $$
- SELECT
- str = ANY (inflection.uncountable_words ());
-$$
-LANGUAGE 'sql'
-IMMUTABLE;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/singular.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/singular.sql
deleted file mode 100644
index 56c860009..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/singular.sql
+++ /dev/null
@@ -1,31 +0,0 @@
--- Deploy schemas/inflection/procedures/singular to pg
-
--- requires: schemas/inflection/schema
--- requires: schemas/inflection/tables/inflection_rules/table
-
-BEGIN;
-
-CREATE FUNCTION inflection.singular (str text)
- RETURNS text
- AS $$
-DECLARE
- result record;
- matches text[];
-BEGIN
- FOR result IN
- SELECT * FROM inflection.inflection_rules where type='singular'
- LOOP
- matches = regexp_matches(str, result.test, 'gi');
- IF (array_length(matches, 1) > 0) THEN
- IF (result.replacement IS NULL) THEN
- return str;
- END IF;
- str = regexp_replace(str, result.test, result.replacement, 'gi');
- return str;
- END IF;
- END LOOP;
- return str;
-END;
-$$
-LANGUAGE 'plpgsql' IMMUTABLE;
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/slugify.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/slugify.sql
deleted file mode 100644
index e1f9e9432..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/slugify.sql
+++ /dev/null
@@ -1,59 +0,0 @@
--- Deploy schemas/inflection/procedures/slugify to pg
-
--- requires: schemas/inflection/schema
-
--- https://schinckel.net/2015/12/16/slugify()-for-postgres-(almost)/
-
-BEGIN;
-CREATE FUNCTION inflection.slugify (value text, allow_unicode boolean)
- RETURNS text
- AS $$
- WITH normalized AS (
- SELECT
- CASE WHEN allow_unicode THEN
- value
- ELSE
- unaccent (value)
- END AS value
-),
-remove_chars AS (
- SELECT
- regexp_replace(value, E'[^\\w\\s-]', '', 'gi') AS value
-FROM
- normalized
-),
-lowercase AS (
- SELECT
- lower(value) AS value
-FROM
- remove_chars
-),
-trimmed AS (
- SELECT
- trim(value) AS value
-FROM
- lowercase
-),
-hyphenated AS (
- SELECT
- regexp_replace(value, E'[-\\s]+', '-', 'gi') AS value
-FROM
- trimmed
-)
-SELECT
- value
-FROM
- hyphenated;
-$$
-LANGUAGE SQL
-STRICT IMMUTABLE;
-
--- default false overload
-CREATE FUNCTION inflection.slugify (text)
- RETURNS text
- AS 'SELECT inflection.slugify($1, false)'
- LANGUAGE SQL
- IMMUTABLE;
-
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/slugify_trigger.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/slugify_trigger.sql
deleted file mode 100644
index a56241f75..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/slugify_trigger.sql
+++ /dev/null
@@ -1,21 +0,0 @@
--- Deploy schemas/inflection/procedures/slugify_trigger to pg
-
--- requires: schemas/inflection/schema
--- requires: schemas/inflection/procedures/slugify
-
-BEGIN;
-
--- USAGE inflection.slugify_trigger ('field_name')
-
-CREATE FUNCTION inflection.slugify_trigger()
-RETURNS TRIGGER AS $$
-DECLARE
- value text := to_json(NEW) ->> TG_ARGV[0];
-BEGIN
- NEW := NEW #= (TG_ARGV[0] || '=>' || inflection.slugify(value))::hstore;
- RETURN NEW;
-END;
-$$
-LANGUAGE 'plpgsql' VOLATILE;
-
-COMMIT;
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/uncountable_words.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/uncountable_words.sql
deleted file mode 100644
index 5ef70dca6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/uncountable_words.sql
+++ /dev/null
@@ -1,14 +0,0 @@
--- Deploy schemas/inflection/procedures/uncountable_words to pg
-
--- requires: schemas/inflection/schema
-
-BEGIN;
-
-CREATE FUNCTION inflection.uncountable_words ()
- RETURNS text[]
- AS $$
-select ARRAY[ 'accommodation', 'adulthood', 'advertising', 'advice', 'aggression', 'aid', 'air', 'aircraft', 'alcohol', 'anger', 'applause', 'arithmetic', 'assistance', 'athletics', 'bacon', 'baggage', 'beef', 'biology', 'blood', 'botany', 'bread', 'butter', 'carbon', 'cardboard', 'cash', 'chalk', 'chaos', 'chess', 'crossroads', 'countryside', 'dancing', 'deer', 'dignity', 'dirt', 'dust', 'economics', 'education', 'electricity', 'engineering', 'enjoyment', 'envy', 'equipment', 'ethics', 'evidence', 'evolution', 'fame', 'fiction', 'flour', 'flu', 'food', 'fuel', 'fun', 'furniture', 'gallows', 'garbage', 'garlic', 'genetics', 'gold', 'golf', 'gossip', 'grammar', 'gratitude', 'grief', 'guilt', 'gymnastics', 'happiness', 'hardware', 'harm', 'hate', 'hatred', 'health', 'heat', 'help', 'homework', 'honesty', 'honey', 'hospitality', 'housework', 'humour', 'hunger', 'hydrogen', 'ice', 'importance', 'inflation', 'information', 'innocence', 'iron', 'irony', 'jam', 'jewelry', 'judo', 'karate', 'knowledge', 'lack', 'laughter', 'lava', 'leather', 'leisure', 'lightning', 'linguine', 'linguini', 'linguistics', 'literature', 'litter', 'livestock', 'logic', 'loneliness', 'luck', 'luggage', 'macaroni', 'machinery', 'magic', 'management', 'mankind', 'marble', 'mathematics', 'mayonnaise', 'measles', 'methane', 'milk', 'minus', 'money', 'mud', 'music', 'mumps', 'nature', 'news', 'nitrogen', 'nonsense', 'nurture', 'nutrition', 'obedience', 'obesity', 'oxygen', 'pasta', 'patience', 'physics', 'poetry', 'pollution', 'poverty', 'pride', 'psychology', 'publicity', 'punctuation', 'quartz', 'racism', 'relaxation', 'reliability', 'research', 'respect', 'revenge', 'rice', 'rubbish', 'rum', 'safety', 'scenery', 'seafood', 'seaside', 'series', 'shame', 'sheep', 'shopping', 'sleep', 'smoke', 'smoking', 'snow', 'soap', 'software', 'soil', 'spaghetti', 'species', 'steam', 'stuff', 'stupidity', 'sunshine', 'symmetry', 'tennis', 'thirst', 'thunder', 'timber', 'traffic', 'transportation', 'trust', 'underwear', 'unemployment', 'unity', 'validity', 'veal', 'vegetation', 'vegetarianism', 'vengeance', 'violence', 'vitality', 'warmth', 'wealth', 'weather', 'welfare', 'wheat', 'wildlife', 'wisdom', 'yoga', 'zinc', 'zoology' ];
-$$
-LANGUAGE 'sql' IMMUTABLE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/underscore.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/underscore.sql
deleted file mode 100644
index e1a79e5e7..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/underscore.sql
+++ /dev/null
@@ -1,59 +0,0 @@
--- Deploy schemas/inflection/procedures/underscore to pg
--- requires: schemas/inflection/schema
--- requires: schemas/inflection/procedures/pg_slugify
--- requires: schemas/inflection/procedures/no_single_underscores
-
-BEGIN;
-CREATE FUNCTION inflection.underscore (str text)
- RETURNS text
- AS $$
- WITH slugged AS (
- SELECT
- inflection.pg_slugify(str) AS value
-),
-convertedupper AS (
- SELECT
- lower(regexp_replace(value, E'([A-Z])', E'\_\\1', 'g')) AS value
- FROM
- slugged
-),
-noprefix AS (
- SELECT
- regexp_replace(value, E'^_', '', 'g') AS value
- FROM
- convertedupper
-),
-removedups AS (
- SELECT
- regexp_replace(value, E'[_]+', '_', 'gi') AS value
-FROM
- noprefix
-),
-stripedges AS (
- SELECT
- regexp_replace(regexp_replace(value, E'([A-Z])_$', E'\\1', 'gi'), E'^_([A-Z])', E'\\1', 'gi') AS value
-FROM
- removedups
-),
-nosingles AS (
- SELECT
- inflection.no_single_underscores(value) AS value
-FROM
- stripedges
-)
-SELECT
- value
-FROM
- nosingles;
-$$
-LANGUAGE 'sql'
-IMMUTABLE;
-
-CREATE FUNCTION inflection.underscore (parts text[])
- RETURNS text
- AS $$
- SELECT inflection.underscore(array_to_string(parts, '_'));
-$$
-LANGUAGE 'sql'
-IMMUTABLE;
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/upper.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/upper.sql
deleted file mode 100644
index 9d1092cf3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/procedures/upper.sql
+++ /dev/null
@@ -1,13 +0,0 @@
--- Deploy schemas/inflection/procedures/upper to pg
-
--- requires: schemas/inflection/schema
-
-BEGIN;
-
-CREATE FUNCTION inflection.upper ( str text ) RETURNS text AS $EOFCODE$
-BEGIN
- return upper(str);
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/schema.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/schema.sql
deleted file mode 100644
index 74a4ff3e6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/schema.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- Deploy schemas/inflection/schema to pg
-
-
-BEGIN;
-
-CREATE SCHEMA inflection;
-
-GRANT USAGE ON SCHEMA inflection
-TO public;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA inflection
-GRANT EXECUTE ON FUNCTIONS
-TO public;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/tables/inflection_rules/fixtures/1589249334312_fixture.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/tables/inflection_rules/fixtures/1589249334312_fixture.sql
deleted file mode 100644
index f9f54820b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/tables/inflection_rules/fixtures/1589249334312_fixture.sql
+++ /dev/null
@@ -1,129 +0,0 @@
--- Deploy schemas/inflection/tables/inflection_rules/fixtures/1589249334312_fixture to pg
-
--- requires: schemas/inflection/schema
--- requires: schemas/inflection/tables/inflection_rules/table
-
-BEGIN;
-
-INSERT INTO inflection.inflection_rules
- (type, test, replacement) VALUES
- ('plural', '^(m|wom)en$', NULL),
- ('plural', '(pe)ople$', NULL),
- ('plural', '(child)ren$', NULL),
- ('plural', '([ti])a$', NULL),
- ('plural', '((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$', NULL),
- ('plural', '(hi|ti)ves$', NULL),
- ('plural', '(curve)s$', NULL),
- ('plural', '([lr])ves$', NULL),
- ('plural', '([^fo])ves$', NULL),
- ('plural', '([^aeiouy]|qu)ies$', NULL),
- ('plural', '(s)eries$', NULL),
- ('plural', '(m)ovies$', NULL),
- ('plural', '(x|ch|ss|sh)es$', NULL),
- ('plural', '([m|l])ice$', NULL),
- ('plural', '(bus)es$', NULL),
- ('plural', '(o)es$', NULL),
- ('plural', '(shoe)s$', NULL),
- ('plural', '(cris|ax|test)es$', NULL),
- ('plural', '(octop|vir)i$', NULL),
- ('plural', '(alias|canvas|status|campus)es$', NULL),
- ('plural', '^(summons)es$', NULL),
- ('plural', '^(ox)en', NULL),
- ('plural', '(matr)ices$', NULL),
- ('plural', '^feet$', NULL),
- ('plural', '^teeth$', NULL),
- ('plural', '^geese$', NULL),
- ('plural', '(quiz)zes$', NULL),
- ('plural', '^(whereas)es$', NULL),
- ('plural', '^(criteri)a$', NULL),
- ('plural', '^genera$', NULL),
- ('plural', '^(m|wom)an$', E'\\1en'),
- ('plural', '(pe)rson$', E'\\1ople'),
- ('plural', '(child)$', E'\\1ren'),
- ('plural', '^(ox)$', E'\\1en'),
- ('plural', '(ax|test)is$', E'\\1es'),
- ('plural', '(octop|vir)us$', E'\\1i'),
- ('plural', '(alias|status|canvas|campus)$', E'\\1es'),
- ('plural', '^(summons)$', E'\\1es'),
- ('plural', '(bu)s$', E'\\1ses'),
- ('plural', '(buffal|tomat|potat)o$', E'\\1oes'),
- ('plural', '([ti])um$', E'\\1a'),
- ('plural', 'sis$', E'ses'),
- ('plural', '(?:([^f])fe|([lr])f)$', E'\\1\\2ves'),
- ('plural', '(hi|ti)ve$', E'\\1ves'),
- ('plural', '([^aeiouy]|qu)y$', E'\\1ies'),
- ('plural', '(matr)ix$', E'\\1ices'),
- ('plural', '(vert|ind)ex$', E'\\1ices'),
- ('plural', '(x|ch|ss|sh)$', E'\\1es'),
- ('plural', '([m|l])ouse$', E'\\1ice'),
- ('plural', '^foot$', E'feet'),
- ('plural', '^tooth$', E'teeth'),
- ('plural', '^goose$', E'geese'),
- ('plural', '(quiz)$', E'\\1zes'),
- ('plural', '^(whereas)$', E'\\1es'),
- ('plural', '^(criteri)on$', E'\\1a'),
- ('plural', '^genus$', E'genera'),
- ('plural', 's$', E's'),
- ('plural', '$', E's'),
- ('singular', '^(m|wom)an$', NULL),
- ('singular', '(pe)rson$', NULL),
- ('singular', '(child)$', NULL),
- ('singular', '^(ox)$', NULL),
- ('singular', '(ax|test)is$', NULL),
- ('singular', '(octop|vir)us$', NULL),
- ('singular', '(alias|status|canvas|campus)$', NULL),
- ('singular', '^(summons)$', NULL),
- ('singular', '(bu)s$', NULL),
- ('singular', '(buffal|tomat|potat)o$', NULL),
- ('singular', '([ti])um$', NULL),
- ('singular', 'sis$', NULL),
- ('singular', '(?:([^f])fe|([lr])f)$', NULL),
- ('singular', '(hi|ti)ve$', NULL),
- ('singular', '([^aeiouy]|qu)y$', NULL),
- ('singular', '(x|ch|ss|sh)$', NULL),
- ('singular', '(matr)ix$', NULL),
- ('singular', '([m|l])ouse$', NULL),
- ('singular', '^foot$', NULL),
- ('singular', '^tooth$', NULL),
- ('singular', '^goose$', NULL),
- ('singular', '(quiz)$', NULL),
- ('singular', '^(whereas)$', NULL),
- ('singular', '^(criteri)on$', NULL),
- ('singular', '^genus$', NULL),
- ('singular', '^(m|wom)en$', E'\\1an'),
- ('singular', '(pe)ople$', E'\\1rson'),
- ('singular', '(child)ren$', E'\\1'),
- ('singular', '^genera$', E'genus'),
- ('singular', '^(criteri)a$', E'\\1on'),
- ('singular', '([ti])a$', E'\\1um'),
- ('singular', '((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$', E'\\1\\2sis'),
- ('singular', '(hi|ti)ves$', E'\\1ve'),
- ('singular', '(curve)s$', E'\\1'),
- ('singular', '([lr])ves$', E'\\1f'),
- ('singular', '([a])ves$', E'\\1ve'),
- ('singular', '([^fo])ves$', E'\\1fe'),
- ('singular', '(m)ovies$', E'\\1ovie'),
- ('singular', '([^aeiouy]|qu)ies$', E'\\1y'),
- ('singular', '(s)eries$', E'\\1eries'),
- ('singular', '(x|ch|ss|sh)es$', E'\\1'),
- ('singular', '([m|l])ice$', E'\\1ouse'),
- ('singular', '(bus)es$', E'\\1'),
- ('singular', '(o)es$', E'\\1'),
- ('singular', '(shoe)s$', E'\\1'),
- ('singular', '(cris|ax|test)es$', E'\\1is'),
- ('singular', '(octop|vir)i$', E'\\1us'),
- ('singular', '(alias|canvas|status|campus)es$', E'\\1'),
- ('singular', '^(summons)es$', E'\\1'),
- ('singular', '^(ox)en', E'\\1'),
- ('singular', '(matr)ices$', E'\\1ix'),
- ('singular', '(vert|ind)ices$', E'\\1ex'),
- ('singular', '^feet$', E'foot'),
- ('singular', '^teeth$', E'tooth'),
- ('singular', '^geese$', E'goose'),
- ('singular', '(quiz)zes$', E'\\1'),
- ('singular', '^(whereas)es$', E'\\1'),
- ('singular', 'ss$', E'ss'),
- ('singular', 's$', E'')
-;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx.sql
deleted file mode 100644
index 4a43b40ef..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx.sql
+++ /dev/null
@@ -1,12 +0,0 @@
--- Deploy schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx to pg
-
--- requires: schemas/inflection/schema
--- requires: schemas/inflection/tables/inflection_rules/table
-
-BEGIN;
-
-CREATE INDEX inflection_rules_type_idx ON inflection.inflection_rules (
- type
-);
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/tables/inflection_rules/table.sql b/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/tables/inflection_rules/table.sql
deleted file mode 100644
index 7344f159a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/deploy/schemas/inflection/tables/inflection_rules/table.sql
+++ /dev/null
@@ -1,16 +0,0 @@
--- Deploy schemas/inflection/tables/inflection_rules/table to pg
-
--- requires: schemas/inflection/schema
-
-BEGIN;
-
-CREATE TABLE inflection.inflection_rules (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- type text, -- singular, plural
- test text,
- replacement text
-);
-
-GRANT select on inflection.inflection_rules to PUBLIC;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/jest.config.js b/__fixtures__/stage/extensions/@pgpm/inflection/jest.config.js
deleted file mode 100644
index e20e7efb5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/jest.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @type {import('ts-jest').JestConfigWithTsJest} */
-module.exports = {
- preset: 'ts-jest',
- testEnvironment: 'node',
-
- // Match both __tests__ and colocated test files
- testMatch: ['**/?(*.)+(test|spec).{ts,tsx,js,jsx}'],
-
- // Ignore build artifacts and type declarations
- testPathIgnorePatterns: ['/dist/', '\\.d\\.ts$'],
- modulePathIgnorePatterns: ['/dist/'],
- watchPathIgnorePatterns: ['/dist/'],
-
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
-};
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/package.json b/__fixtures__/stage/extensions/@pgpm/inflection/package.json
deleted file mode 100644
index 33c447e9a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/package.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "name": "@pgpm/inflection",
- "version": "0.15.2",
- "description": "String inflection utilities for PostgreSQL naming conventions",
- "author": "Dan Lynch ",
- "contributors": [
- "Constructive "
- ],
- "keywords": [
- "postgresql",
- "pgpm",
- "inflection",
- "strings"
- ],
- "publishConfig": {
- "access": "public"
- },
- "scripts": {
- "bundle": "pgpm package",
- "test": "jest",
- "test:watch": "jest --watch"
- },
- "dependencies": {
- "@pgpm/verify": "0.15.2"
- },
- "devDependencies": {
- "pgpm": "^1.0.0"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/constructive-io/pgpm-modules"
- },
- "homepage": "https://github.com/constructive-io/pgpm-modules",
- "bugs": {
- "url": "https://github.com/constructive-io/pgpm-modules/issues"
- }
-}
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/pgpm-inflection.control b/__fixtures__/stage/extensions/@pgpm/inflection/pgpm-inflection.control
deleted file mode 100644
index 2069e8c8b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/pgpm-inflection.control
+++ /dev/null
@@ -1,8 +0,0 @@
-# pgpm-inflection extension
-comment = 'pgpm-inflection extension'
-default_version = '0.14.0'
-module_pathname = '$libdir/pgpm-inflection'
-requires = 'plpgsql,unaccent,uuid-ossp,pgpm-verify'
-relocatable = false
-superuser = false
-
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/pgpm.plan b/__fixtures__/stage/extensions/@pgpm/inflection/pgpm.plan
deleted file mode 100644
index 46a8404bb..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/pgpm.plan
+++ /dev/null
@@ -1,20 +0,0 @@
-%syntax-version=1.0.0
-%project=pgpm-inflection
-%uri=pgpm-inflection
-
-schemas/inflection/schema 2017-08-11T08:11:51Z skitch # add schemas/inflection/schema
-schemas/inflection/procedures/no_consecutive_caps [schemas/inflection/schema] 2017-08-11T08:11:51Z skitch # add schemas/inflection/procedures/no_consecutive_caps
-schemas/inflection/procedures/pg_slugify [schemas/inflection/schema schemas/inflection/procedures/no_consecutive_caps] 2017-08-11T08:11:51Z skitch # add schemas/inflection/procedures/pg_slugify
-schemas/inflection/procedures/no_single_underscores [schemas/inflection/schema] 2017-08-11T08:11:51Z skitch # add schemas/inflection/procedures/no_single_underscores
-schemas/inflection/procedures/underscore [schemas/inflection/schema schemas/inflection/procedures/pg_slugify schemas/inflection/procedures/no_single_underscores] 2017-08-11T08:11:51Z skitch # add schemas/inflection/procedures/underscore
-schemas/inflection/procedures/camel [schemas/inflection/schema schemas/inflection/procedures/underscore] 2017-08-11T08:11:51Z skitch # add schemas/inflection/procedures/camel
-schemas/inflection/procedures/dashed [schemas/inflection/schema schemas/inflection/procedures/underscore] 2017-08-11T08:11:51Z skitch # add schemas/inflection/procedures/dashed
-schemas/inflection/procedures/pascal [schemas/inflection/schema schemas/inflection/procedures/camel] 2017-08-11T08:11:51Z skitch # add schemas/inflection/procedures/pascal
-schemas/inflection/tables/inflection_rules/table [schemas/inflection/schema] 2017-08-11T08:11:51Z skitch # add schemas/inflection/tables/inflection_rules/table
-schemas/inflection/procedures/plural [schemas/inflection/schema schemas/inflection/tables/inflection_rules/table] 2017-08-11T08:11:51Z skitch # add schemas/inflection/procedures/plural
-schemas/inflection/procedures/uncountable_words [schemas/inflection/schema] 2017-08-11T08:11:51Z skitch # add schemas/inflection/procedures/uncountable_words
-schemas/inflection/procedures/should_skip_uncountable [schemas/inflection/schema schemas/inflection/procedures/uncountable_words] 2017-08-11T08:11:51Z skitch # add schemas/inflection/procedures/should_skip_uncountable
-schemas/inflection/procedures/singular [schemas/inflection/schema schemas/inflection/tables/inflection_rules/table] 2017-08-11T08:11:51Z skitch # add schemas/inflection/procedures/singular
-schemas/inflection/procedures/slugify [schemas/inflection/schema] 2017-08-11T08:11:51Z skitch # add schemas/inflection/procedures/slugify
-schemas/inflection/tables/inflection_rules/fixtures/1589249334312_fixture [schemas/inflection/schema schemas/inflection/tables/inflection_rules/table] 2017-08-11T08:11:51Z skitch # add schemas/inflection/tables/inflection_rules/fixtures/1589249334312_fixture
-schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx [schemas/inflection/schema schemas/inflection/tables/inflection_rules/table] 2017-08-11T08:11:51Z skitch # add schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/camel.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/camel.sql
deleted file mode 100644
index 7356e0f76..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/camel.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/inflection/procedures/camel from pg
-
-BEGIN;
-
-DROP FUNCTION inflection.camel;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/dashed.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/dashed.sql
deleted file mode 100644
index d822eafa0..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/dashed.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/inflection/procedures/dashed from pg
-
-BEGIN;
-
-DROP FUNCTION inflection.dashed;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/lower.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/lower.sql
deleted file mode 100644
index 47c0f9dd3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/lower.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/inflection/procedures/lower from pg
-
-BEGIN;
-
-DROP FUNCTION inflection.lower;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/no_consecutive_caps.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/no_consecutive_caps.sql
deleted file mode 100644
index 4afef6157..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/no_consecutive_caps.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/inflection/procedures/no_consecutive_caps from pg
-
-BEGIN;
-
-DROP FUNCTION inflection.no_consecutive_caps;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/no_single_underscores.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/no_single_underscores.sql
deleted file mode 100644
index 4eaf90b0a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/no_single_underscores.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/inflection/procedures/no_single_underscores from pg
-
-BEGIN;
-
-DROP FUNCTION inflection.no_single_underscores;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/pascal.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/pascal.sql
deleted file mode 100644
index c0d2b843e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/pascal.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/inflection/procedures/pascal from pg
-
-BEGIN;
-
-DROP FUNCTION inflection.pascal;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/pg_slugify.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/pg_slugify.sql
deleted file mode 100644
index 61c77dd42..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/pg_slugify.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Revert schemas/inflection/procedures/pg_slugify from pg
-
-BEGIN;
-
-DROP FUNCTION inflection.pg_slugify(text);
-DROP FUNCTION inflection.pg_slugify(text, boolean);
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/plural.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/plural.sql
deleted file mode 100644
index de84f828b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/plural.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/inflection/procedures/plural from pg
-
-BEGIN;
-
-DROP FUNCTION inflection.plural;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/should_skip_uncountable.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/should_skip_uncountable.sql
deleted file mode 100644
index 62ce338f3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/should_skip_uncountable.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/inflection/procedures/should_skip_uncountable from pg
-
-BEGIN;
-
-DROP FUNCTION inflection.should_skip_uncountable;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/singular.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/singular.sql
deleted file mode 100644
index afa571cec..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/singular.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/inflection/procedures/singular from pg
-
-BEGIN;
-
-DROP FUNCTION inflection.singular;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/slugify.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/slugify.sql
deleted file mode 100644
index d0e695667..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/slugify.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Revert schemas/inflection/procedures/slugify from pg
-
-BEGIN;
-
-DROP FUNCTION inflection.slugify(text);
-DROP FUNCTION inflection.slugify(text, boolean);
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/slugify_trigger.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/slugify_trigger.sql
deleted file mode 100644
index 8257a458e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/slugify_trigger.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/inflection/procedures/slugify_trigger from pg
-
-BEGIN;
-
-DROP FUNCTION inflection.slugify_trigger;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/uncountable_words.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/uncountable_words.sql
deleted file mode 100644
index 52b07ed91..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/uncountable_words.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/inflection/procedures/uncountable_words from pg
-
-BEGIN;
-
-DROP FUNCTION inflection.uncountable_words;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/underscore.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/underscore.sql
deleted file mode 100644
index a8e3167fd..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/underscore.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Revert schemas/inflection/procedures/underscore from pg
-
-BEGIN;
-
-DROP FUNCTION inflection.underscore(text[]);
-DROP FUNCTION inflection.underscore(text);
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/upper.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/upper.sql
deleted file mode 100644
index 2fa310a4a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/procedures/upper.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/inflection/procedures/upper from pg
-
-BEGIN;
-
-DROP FUNCTION inflection.upper;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/schema.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/schema.sql
deleted file mode 100644
index 51f6fa846..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/inflection/schema from pg
-
-BEGIN;
-
-DROP SCHEMA inflection CASCADE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/tables/inflection_rules/fixtures/1589249334312_fixture.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/tables/inflection_rules/fixtures/1589249334312_fixture.sql
deleted file mode 100644
index 00225fdc6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/tables/inflection_rules/fixtures/1589249334312_fixture.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Revert schemas/inflection/tables/inflection_rules/fixtures/1589249334312_fixture from pg
-
-BEGIN;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx.sql
deleted file mode 100644
index 8eb83142c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx from pg
-
-BEGIN;
-
-DROP INDEX inflection.inflection_rules_type_idx;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/tables/inflection_rules/table.sql b/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/tables/inflection_rules/table.sql
deleted file mode 100644
index 7f9101ea4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/revert/schemas/inflection/tables/inflection_rules/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/inflection/tables/inflection_rules/table from pg
-
-BEGIN;
-
-DROP TABLE inflection.inflection_rules;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/sql/pgpm-inflection--0.14.0.sql b/__fixtures__/stage/extensions/@pgpm/inflection/sql/pgpm-inflection--0.14.0.sql
deleted file mode 100644
index 14e7bdb88..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/sql/pgpm-inflection--0.14.0.sql
+++ /dev/null
@@ -1,455 +0,0 @@
-\echo Use "CREATE EXTENSION pgpm-inflection" to load this file. \quit
-CREATE SCHEMA inflection;
-
-GRANT USAGE ON SCHEMA inflection TO PUBLIC;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA inflection
- GRANT EXECUTE ON FUNCTIONS TO PUBLIC;
-
-CREATE FUNCTION inflection.no_consecutive_caps_till_end(str text) RETURNS text AS $EOFCODE$
-DECLARE
- result text[];
- temp text;
-BEGIN
- FOR result IN
- SELECT regexp_matches(str, E'([A-Z])([A-Z]+$)', 'g')
- LOOP
- temp = result[1] || lower(result[2]);
- str = replace(str, result[1] || result[2], temp);
- END LOOP;
- return str;
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-CREATE FUNCTION inflection.no_consecutive_caps_till_lower(str text) RETURNS text AS $EOFCODE$
-DECLARE
- result text[];
- temp text;
-BEGIN
- FOR result IN
- SELECT regexp_matches(str, E'([A-Z])([A-Z]+)[A-Z][a-z]', 'g')
- LOOP
- temp = result[1] || lower(result[2]);
- str = replace(str, result[1] || result[2], temp);
- END LOOP;
-
- return str;
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-CREATE FUNCTION inflection.no_consecutive_caps(str text) RETURNS text AS $EOFCODE$
- select inflection.no_consecutive_caps_till_lower(inflection.no_consecutive_caps_till_end(str));
-$EOFCODE$ LANGUAGE sql STABLE;
-
-CREATE FUNCTION inflection.pg_slugify(value text, allow_unicode boolean) RETURNS text AS $EOFCODE$
- WITH normalized AS (
- SELECT
- CASE WHEN allow_unicode THEN
- value
- ELSE
- unaccent (value)
- END AS value
-),
-no_consecutive_caps AS (
- SELECT
- inflection.no_consecutive_caps (value) AS value
-FROM
- normalized
-),
-remove_chars AS (
- SELECT
- regexp_replace(value, E'[^\\w\\s-]', '', 'gi') AS value
-FROM
- no_consecutive_caps
-),
-trimmed AS (
- SELECT
- trim(value) AS value
-FROM
- remove_chars
-),
-hyphenated AS (
- SELECT
- regexp_replace(value, E'[-\\s]+', '-', 'gi') AS value
-FROM
- trimmed
-),
-underscored AS (
- SELECT
- regexp_replace(value, E'[-]+', '_', 'gi') AS value
-FROM
- hyphenated
-),
-removedups AS (
- SELECT
- regexp_replace(value, E'[_]+', '_', 'gi') AS value
-FROM
- underscored
-)
-SELECT
- value
-FROM
- removedups;
-$EOFCODE$ LANGUAGE sql STRICT IMMUTABLE;
-
-CREATE FUNCTION inflection.pg_slugify(text) RETURNS text AS $EOFCODE$SELECT inflection.pg_slugify($1, false)$EOFCODE$ LANGUAGE sql IMMUTABLE;
-
-CREATE FUNCTION inflection.no_single_underscores_in_beginning(str text) RETURNS text AS $EOFCODE$
-DECLARE
- result text[];
- temp text;
-BEGIN
- FOR result IN
- SELECT regexp_matches(str, E'(^[a-z])(_)', 'g')
- LOOP
- str = replace(str, result[1] || result[2], result[1]);
- END LOOP;
- return str;
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-CREATE FUNCTION inflection.no_single_underscores_at_end(str text) RETURNS text AS $EOFCODE$
-DECLARE
- result text[];
- temp text;
-BEGIN
- FOR result IN
- SELECT regexp_matches(str, E'(_)([a-z]$)', 'g')
- LOOP
- str = replace(str, result[1] || result[2], result[2]);
- END LOOP;
-
- return str;
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-CREATE FUNCTION inflection.no_single_underscores_in_middle(str text) RETURNS text AS $EOFCODE$
-DECLARE
- result text[];
- temp text;
-BEGIN
- FOR result IN
- SELECT regexp_matches(str, E'(_)([a-z]_)', 'g')
- LOOP
- str = replace(str, result[1] || result[2], result[2]);
- END LOOP;
-
- return str;
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-CREATE FUNCTION inflection.no_single_underscores(str text) RETURNS text AS $EOFCODE$
- select
- inflection.no_single_underscores_in_middle(inflection.no_single_underscores_at_end(inflection.no_single_underscores_in_beginning(str)));
-$EOFCODE$ LANGUAGE sql STABLE;
-
-CREATE FUNCTION inflection.underscore(str text) RETURNS text AS $EOFCODE$
- WITH slugged AS (
- SELECT
- inflection.pg_slugify(str) AS value
-),
-convertedupper AS (
- SELECT
- lower(regexp_replace(value, E'([A-Z])', E'\_\\1', 'g')) AS value
- FROM
- slugged
-),
-noprefix AS (
- SELECT
- regexp_replace(value, E'^_', '', 'g') AS value
- FROM
- convertedupper
-),
-removedups AS (
- SELECT
- regexp_replace(value, E'[_]+', '_', 'gi') AS value
-FROM
- noprefix
-),
-stripedges AS (
- SELECT
- regexp_replace(regexp_replace(value, E'([A-Z])_$', E'\\1', 'gi'), E'^_([A-Z])', E'\\1', 'gi') AS value
-FROM
- removedups
-),
-nosingles AS (
- SELECT
- inflection.no_single_underscores(value) AS value
-FROM
- stripedges
-)
-SELECT
- value
-FROM
- nosingles;
-$EOFCODE$ LANGUAGE sql IMMUTABLE;
-
-CREATE FUNCTION inflection.underscore(parts text[]) RETURNS text AS $EOFCODE$
- SELECT inflection.underscore(array_to_string(parts, '_'));
-$EOFCODE$ LANGUAGE sql IMMUTABLE;
-
-CREATE FUNCTION inflection.camel(str text) RETURNS text AS $EOFCODE$
-DECLARE
- result text[];
-BEGIN
- str = inflection.underscore(str);
- FOR result IN
- SELECT regexp_matches(str, E'(_[a-zA-Z0-9])', 'g')
- LOOP
- str = replace(str, result[1], upper(result[1]));
- END LOOP;
- return regexp_replace(substring(str FROM 1 FOR 1) || substring(str FROM 2 FOR length(str)), E'[_]+', '', 'gi');
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-CREATE FUNCTION inflection.dashed(str text) RETURNS text AS $EOFCODE$
- WITH underscored AS (
- SELECT
- inflection.underscore(str) AS value
-),
-dashes AS (
- SELECT
- regexp_replace(value, '_', '-', 'gi') AS value
- FROM
- underscored
-)
-SELECT
- value
-FROM
- dashes;
-$EOFCODE$ LANGUAGE sql IMMUTABLE;
-
-CREATE FUNCTION inflection.pascal(str text) RETURNS text AS $EOFCODE$
-DECLARE
- result text[];
-BEGIN
- str = inflection.camel(str);
- return upper(substring(str FROM 1 FOR 1)) || substring(str FROM 2 FOR length(str));
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-CREATE TABLE inflection.inflection_rules (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
- type text,
- test text,
- replacement text
-);
-
-GRANT SELECT ON inflection.inflection_rules TO PUBLIC;
-
-CREATE FUNCTION inflection.plural(str text) RETURNS text AS $EOFCODE$
-DECLARE
- result record;
- matches text[];
-BEGIN
- FOR result IN
- SELECT * FROM inflection.inflection_rules where type='plural'
- LOOP
- matches = regexp_matches(str, result.test, 'gi');
- IF (array_length(matches, 1) > 0) THEN
- IF (result.replacement IS NULL) THEN
- return str;
- END IF;
- str = regexp_replace(str, result.test, result.replacement, 'gi');
- return str;
- END IF;
- END LOOP;
- return str;
-END;
-$EOFCODE$ LANGUAGE plpgsql IMMUTABLE;
-
-CREATE FUNCTION inflection.uncountable_words() RETURNS text[] AS $EOFCODE$
-select ARRAY[ 'accommodation', 'adulthood', 'advertising', 'advice', 'aggression', 'aid', 'air', 'aircraft', 'alcohol', 'anger', 'applause', 'arithmetic', 'assistance', 'athletics', 'bacon', 'baggage', 'beef', 'biology', 'blood', 'botany', 'bread', 'butter', 'carbon', 'cardboard', 'cash', 'chalk', 'chaos', 'chess', 'crossroads', 'countryside', 'dancing', 'deer', 'dignity', 'dirt', 'dust', 'economics', 'education', 'electricity', 'engineering', 'enjoyment', 'envy', 'equipment', 'ethics', 'evidence', 'evolution', 'fame', 'fiction', 'flour', 'flu', 'food', 'fuel', 'fun', 'furniture', 'gallows', 'garbage', 'garlic', 'genetics', 'gold', 'golf', 'gossip', 'grammar', 'gratitude', 'grief', 'guilt', 'gymnastics', 'happiness', 'hardware', 'harm', 'hate', 'hatred', 'health', 'heat', 'help', 'homework', 'honesty', 'honey', 'hospitality', 'housework', 'humour', 'hunger', 'hydrogen', 'ice', 'importance', 'inflation', 'information', 'innocence', 'iron', 'irony', 'jam', 'jewelry', 'judo', 'karate', 'knowledge', 'lack', 'laughter', 'lava', 'leather', 'leisure', 'lightning', 'linguine', 'linguini', 'linguistics', 'literature', 'litter', 'livestock', 'logic', 'loneliness', 'luck', 'luggage', 'macaroni', 'machinery', 'magic', 'management', 'mankind', 'marble', 'mathematics', 'mayonnaise', 'measles', 'methane', 'milk', 'minus', 'money', 'mud', 'music', 'mumps', 'nature', 'news', 'nitrogen', 'nonsense', 'nurture', 'nutrition', 'obedience', 'obesity', 'oxygen', 'pasta', 'patience', 'physics', 'poetry', 'pollution', 'poverty', 'pride', 'psychology', 'publicity', 'punctuation', 'quartz', 'racism', 'relaxation', 'reliability', 'research', 'respect', 'revenge', 'rice', 'rubbish', 'rum', 'safety', 'scenery', 'seafood', 'seaside', 'series', 'shame', 'sheep', 'shopping', 'sleep', 'smoke', 'smoking', 'snow', 'soap', 'software', 'soil', 'spaghetti', 'species', 'steam', 'stuff', 'stupidity', 'sunshine', 'symmetry', 'tennis', 'thirst', 'thunder', 'timber', 'traffic', 'transportation', 'trust', 'underwear', 'unemployment', 'unity', 'validity', 'veal', 'vegetation', 'vegetarianism', 'vengeance', 'violence', 'vitality', 'warmth', 'wealth', 'weather', 'welfare', 'wheat', 'wildlife', 'wisdom', 'yoga', 'zinc', 'zoology' ];
-$EOFCODE$ LANGUAGE sql IMMUTABLE;
-
-CREATE FUNCTION inflection.should_skip_uncountable(str text) RETURNS boolean AS $EOFCODE$
- SELECT
- str = ANY (inflection.uncountable_words ());
-$EOFCODE$ LANGUAGE sql IMMUTABLE;
-
-CREATE FUNCTION inflection.singular(str text) RETURNS text AS $EOFCODE$
-DECLARE
- result record;
- matches text[];
-BEGIN
- FOR result IN
- SELECT * FROM inflection.inflection_rules where type='singular'
- LOOP
- matches = regexp_matches(str, result.test, 'gi');
- IF (array_length(matches, 1) > 0) THEN
- IF (result.replacement IS NULL) THEN
- return str;
- END IF;
- str = regexp_replace(str, result.test, result.replacement, 'gi');
- return str;
- END IF;
- END LOOP;
- return str;
-END;
-$EOFCODE$ LANGUAGE plpgsql IMMUTABLE;
-
-CREATE FUNCTION inflection.slugify(value text, allow_unicode boolean) RETURNS text AS $EOFCODE$
- WITH normalized AS (
- SELECT
- CASE WHEN allow_unicode THEN
- value
- ELSE
- unaccent (value)
- END AS value
-),
-remove_chars AS (
- SELECT
- regexp_replace(value, E'[^\\w\\s-]', '', 'gi') AS value
-FROM
- normalized
-),
-lowercase AS (
- SELECT
- lower(value) AS value
-FROM
- remove_chars
-),
-trimmed AS (
- SELECT
- trim(value) AS value
-FROM
- lowercase
-),
-hyphenated AS (
- SELECT
- regexp_replace(value, E'[-\\s]+', '-', 'gi') AS value
-FROM
- trimmed
-)
-SELECT
- value
-FROM
- hyphenated;
-$EOFCODE$ LANGUAGE sql STRICT IMMUTABLE;
-
-CREATE FUNCTION inflection.slugify(text) RETURNS text AS $EOFCODE$SELECT inflection.slugify($1, false)$EOFCODE$ LANGUAGE sql IMMUTABLE;
-
-INSERT INTO inflection.inflection_rules (
- type,
- test,
- replacement
-) VALUES
- ('plural', '^(m|wom)en$', NULL),
- ('plural', '(pe)ople$', NULL),
- ('plural', '(child)ren$', NULL),
- ('plural', '([ti])a$', NULL),
- ('plural', '((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$', NULL),
- ('plural', '(hi|ti)ves$', NULL),
- ('plural', '(curve)s$', NULL),
- ('plural', '([lr])ves$', NULL),
- ('plural', '([^fo])ves$', NULL),
- ('plural', '([^aeiouy]|qu)ies$', NULL),
- ('plural', '(s)eries$', NULL),
- ('plural', '(m)ovies$', NULL),
- ('plural', '(x|ch|ss|sh)es$', NULL),
- ('plural', '([m|l])ice$', NULL),
- ('plural', '(bus)es$', NULL),
- ('plural', '(o)es$', NULL),
- ('plural', '(shoe)s$', NULL),
- ('plural', '(cris|ax|test)es$', NULL),
- ('plural', '(octop|vir)i$', NULL),
- ('plural', '(alias|canvas|status|campus)es$', NULL),
- ('plural', '^(summons)es$', NULL),
- ('plural', '^(ox)en', NULL),
- ('plural', '(matr)ices$', NULL),
- ('plural', '^feet$', NULL),
- ('plural', '^teeth$', NULL),
- ('plural', '^geese$', NULL),
- ('plural', '(quiz)zes$', NULL),
- ('plural', '^(whereas)es$', NULL),
- ('plural', '^(criteri)a$', NULL),
- ('plural', '^genera$', NULL),
- ('plural', '^(m|wom)an$', E'\\1en'),
- ('plural', '(pe)rson$', E'\\1ople'),
- ('plural', '(child)$', E'\\1ren'),
- ('plural', '^(ox)$', E'\\1en'),
- ('plural', '(ax|test)is$', E'\\1es'),
- ('plural', '(octop|vir)us$', E'\\1i'),
- ('plural', '(alias|status|canvas|campus)$', E'\\1es'),
- ('plural', '^(summons)$', E'\\1es'),
- ('plural', '(bu)s$', E'\\1ses'),
- ('plural', '(buffal|tomat|potat)o$', E'\\1oes'),
- ('plural', '([ti])um$', E'\\1a'),
- ('plural', 'sis$', 'ses'),
- ('plural', '(?:([^f])fe|([lr])f)$', E'\\1\\2ves'),
- ('plural', '(hi|ti)ve$', E'\\1ves'),
- ('plural', '([^aeiouy]|qu)y$', E'\\1ies'),
- ('plural', '(matr)ix$', E'\\1ices'),
- ('plural', '(vert|ind)ex$', E'\\1ices'),
- ('plural', '(x|ch|ss|sh)$', E'\\1es'),
- ('plural', '([m|l])ouse$', E'\\1ice'),
- ('plural', '^foot$', 'feet'),
- ('plural', '^tooth$', 'teeth'),
- ('plural', '^goose$', 'geese'),
- ('plural', '(quiz)$', E'\\1zes'),
- ('plural', '^(whereas)$', E'\\1es'),
- ('plural', '^(criteri)on$', E'\\1a'),
- ('plural', '^genus$', 'genera'),
- ('plural', 's$', 's'),
- ('plural', '$', 's'),
- ('singular', '^(m|wom)an$', NULL),
- ('singular', '(pe)rson$', NULL),
- ('singular', '(child)$', NULL),
- ('singular', '^(ox)$', NULL),
- ('singular', '(ax|test)is$', NULL),
- ('singular', '(octop|vir)us$', NULL),
- ('singular', '(alias|status|canvas|campus)$', NULL),
- ('singular', '^(summons)$', NULL),
- ('singular', '(bu)s$', NULL),
- ('singular', '(buffal|tomat|potat)o$', NULL),
- ('singular', '([ti])um$', NULL),
- ('singular', 'sis$', NULL),
- ('singular', '(?:([^f])fe|([lr])f)$', NULL),
- ('singular', '(hi|ti)ve$', NULL),
- ('singular', '([^aeiouy]|qu)y$', NULL),
- ('singular', '(x|ch|ss|sh)$', NULL),
- ('singular', '(matr)ix$', NULL),
- ('singular', '([m|l])ouse$', NULL),
- ('singular', '^foot$', NULL),
- ('singular', '^tooth$', NULL),
- ('singular', '^goose$', NULL),
- ('singular', '(quiz)$', NULL),
- ('singular', '^(whereas)$', NULL),
- ('singular', '^(criteri)on$', NULL),
- ('singular', '^genus$', NULL),
- ('singular', '^(m|wom)en$', E'\\1an'),
- ('singular', '(pe)ople$', E'\\1rson'),
- ('singular', '(child)ren$', E'\\1'),
- ('singular', '^genera$', 'genus'),
- ('singular', '^(criteri)a$', E'\\1on'),
- ('singular', '([ti])a$', E'\\1um'),
- ('singular', '((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$', E'\\1\\2sis'),
- ('singular', '(hi|ti)ves$', E'\\1ve'),
- ('singular', '(curve)s$', E'\\1'),
- ('singular', '([lr])ves$', E'\\1f'),
- ('singular', '([a])ves$', E'\\1ve'),
- ('singular', '([^fo])ves$', E'\\1fe'),
- ('singular', '(m)ovies$', E'\\1ovie'),
- ('singular', '([^aeiouy]|qu)ies$', E'\\1y'),
- ('singular', '(s)eries$', E'\\1eries'),
- ('singular', '(x|ch|ss|sh)es$', E'\\1'),
- ('singular', '([m|l])ice$', E'\\1ouse'),
- ('singular', '(bus)es$', E'\\1'),
- ('singular', '(o)es$', E'\\1'),
- ('singular', '(shoe)s$', E'\\1'),
- ('singular', '(cris|ax|test)es$', E'\\1is'),
- ('singular', '(octop|vir)i$', E'\\1us'),
- ('singular', '(alias|canvas|status|campus)es$', E'\\1'),
- ('singular', '^(summons)es$', E'\\1'),
- ('singular', '^(ox)en', E'\\1'),
- ('singular', '(matr)ices$', E'\\1ix'),
- ('singular', '(vert|ind)ices$', E'\\1ex'),
- ('singular', '^feet$', 'foot'),
- ('singular', '^teeth$', 'tooth'),
- ('singular', '^geese$', 'goose'),
- ('singular', '(quiz)zes$', E'\\1'),
- ('singular', '^(whereas)es$', E'\\1'),
- ('singular', 'ss$', 'ss'),
- ('singular', 's$', '');
-
-CREATE INDEX inflection_rules_type_idx ON inflection.inflection_rules (type);
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/camel.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/camel.sql
deleted file mode 100644
index 08b938e72..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/camel.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/inflection/procedures/camel on pg
-
-BEGIN;
-
-SELECT verify_function ('inflection.camel');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/dashed.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/dashed.sql
deleted file mode 100644
index 97ab5b3f3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/dashed.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/inflection/procedures/dashed on pg
-
-BEGIN;
-
-SELECT verify_function ('inflection.dashed');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/lower.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/lower.sql
deleted file mode 100644
index 41e379df2..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/lower.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/inflection/procedures/lower on pg
-
-BEGIN;
-
-SELECT verify_function ('inflection.lower');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/no_consecutive_caps.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/no_consecutive_caps.sql
deleted file mode 100644
index 725e139fe..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/no_consecutive_caps.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/inflection/procedures/no_consecutive_caps on pg
-
-BEGIN;
-
-SELECT verify_function ('inflection.no_consecutive_caps');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/no_single_underscores.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/no_single_underscores.sql
deleted file mode 100644
index e09f21c61..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/no_single_underscores.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/inflection/procedures/no_single_underscores on pg
-
-BEGIN;
-
-SELECT verify_function ('inflection.no_single_underscores');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/pascal.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/pascal.sql
deleted file mode 100644
index 06f693b35..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/pascal.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/inflection/procedures/pascal on pg
-
-BEGIN;
-
-SELECT verify_function ('inflection.pascal');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/pg_slugify.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/pg_slugify.sql
deleted file mode 100644
index 44194412c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/pg_slugify.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/inflection/procedures/pg_slugify on pg
-
-BEGIN;
-
-SELECT verify_function ('inflection.pg_slugify');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/plural.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/plural.sql
deleted file mode 100644
index a0aee55da..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/plural.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/inflection/procedures/plural on pg
-
-BEGIN;
-
-SELECT verify_function ('inflection.plural');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/should_skip_uncountable.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/should_skip_uncountable.sql
deleted file mode 100644
index 4c7d135ec..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/should_skip_uncountable.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/inflection/procedures/should_skip_uncountable on pg
-
-BEGIN;
-
-SELECT verify_function ('inflection.should_skip_uncountable');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/singular.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/singular.sql
deleted file mode 100644
index a39805e31..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/singular.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/inflection/procedures/singular on pg
-
-BEGIN;
-
-SELECT verify_function ('inflection.singular');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/slugify.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/slugify.sql
deleted file mode 100644
index c824b2c4e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/slugify.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/inflection/procedures/slugify on pg
-
-BEGIN;
-
-SELECT verify_function ('inflection.slugify');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/slugify_trigger.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/slugify_trigger.sql
deleted file mode 100644
index bbaba2bb5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/slugify_trigger.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/inflection/procedures/slugify_trigger on pg
-
-BEGIN;
-
-SELECT verify_function ('inflection.slugify_trigger');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/uncountable_words.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/uncountable_words.sql
deleted file mode 100644
index 8cf2e9c2c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/uncountable_words.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/inflection/procedures/uncountable_words on pg
-
-BEGIN;
-
-SELECT verify_function ('inflection.uncountable_words');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/underscore.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/underscore.sql
deleted file mode 100644
index 3b4f95976..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/underscore.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Verify schemas/inflection/procedures/underscore on pg
-
-BEGIN;
-
-SELECT verify_function ('inflection.underscore(text)');
-SELECT verify_function ('inflection.underscore(text[])');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/upper.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/upper.sql
deleted file mode 100644
index 6ea15974a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/procedures/upper.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/inflection/procedures/upper on pg
-
-BEGIN;
-
-SELECT verify_function ('inflection.upper');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/schema.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/schema.sql
deleted file mode 100644
index 45ffe8f59..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/inflection/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('inflection');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/tables/inflection_rules/fixtures/1589249334312_fixture.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/tables/inflection_rules/fixtures/1589249334312_fixture.sql
deleted file mode 100644
index 1f32d95ee..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/tables/inflection_rules/fixtures/1589249334312_fixture.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Verify schemas/inflection/tables/inflection_rules/fixtures/1589249334312_fixture on pg
-
-BEGIN;
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx.sql
deleted file mode 100644
index 16b0a8cf8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx on pg
-
-BEGIN;
-
-SELECT verify_index ('inflection.inflection_rules', 'inflection_rules_type_idx');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/tables/inflection_rules/table.sql b/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/tables/inflection_rules/table.sql
deleted file mode 100644
index 2c45bf6fd..000000000
--- a/__fixtures__/stage/extensions/@pgpm/inflection/verify/schemas/inflection/tables/inflection_rules/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/inflection/tables/inflection_rules/table on pg
-
-BEGIN;
-
-SELECT verify_table ('inflection.inflection_rules');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/LICENSE b/__fixtures__/stage/extensions/@pgpm/jobs/LICENSE
deleted file mode 100644
index 7b18c9183..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2025 Dan Lynch
-Copyright (c) 2025 Constructive
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/Makefile b/__fixtures__/stage/extensions/@pgpm/jobs/Makefile
deleted file mode 100644
index 99051c013..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-EXTENSION = pgpm-jobs
-DATA = sql/pgpm-jobs--0.14.0.sql
-
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/README.md b/__fixtures__/stage/extensions/@pgpm/jobs/README.md
deleted file mode 100644
index cb71b1a98..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/README.md
+++ /dev/null
@@ -1,316 +0,0 @@
-# @pgpm/jobs
-
-
-
-
-
-
-
-
-
-
-
-
-
-Core job system for background task processing in PostgreSQL.
-
-## Overview
-
-`@pgpm/jobs` provides the core abstractions and interfaces for a PostgreSQL-based background job processing system. This package defines the schema, tables, and procedures for job queue management, scheduled jobs, and worker coordination. It serves as the foundation for building reliable background task processing systems entirely within PostgreSQL.
-
-## Features
-
-- **Job Queue Schema**: Core `app_jobs` schema with jobs, scheduled_jobs, and job_queues tables
-- **Job Management Procedures**: Functions for adding, retrieving, completing, and failing jobs
-- **Scheduled Jobs**: Support for cron-style and rule-based job scheduling
-- **Worker Coordination**: Job locking and worker management with expiry
-- **Priority Queue**: Process jobs by priority, run time, and insertion order
-- **Automatic Retries**: Configurable retry attempts with failure tracking
-- **Job Keys**: Upsert semantics for idempotent job creation
-- **Trigger Functions**: Automatic job creation from table changes
-
-## Installation
-
-If you have `pgpm` installed:
-
-```bash
-pgpm install @pgpm/jobs
-pgpm deploy
-```
-
-This is a quick way to get started. The sections below provide more detailed installation options.
-
-### Prerequisites
-
-```bash
-# Install pgpm CLI
-npm install -g pgpm
-
-# Start local Postgres (via Docker) and export env vars
-pgpm docker start
-eval "$(pgpm env)"
-```
-
-> **Tip:** Already running Postgres? Skip the Docker step and just export your `PG*` environment variables.
-
-### **Add to an Existing Package**
-
-```bash
-# 1. Install the package
-pgpm install @pgpm/jobs
-
-# 2. Deploy locally
-pgpm deploy
-```
-
-### **Add to a New Project**
-
-```bash
-# 1. Create a workspace
-pgpm init workspace
-
-# 2. Create your first module
-cd my-workspace
-pgpm init
-
-# 3. Install a package
-cd packages/my-module
-pgpm install @pgpm/jobs
-
-# 4. Deploy everything
-pgpm deploy --createdb --database mydb1
-```
-
-## Core Schema
-
-The `app_jobs` schema provides three main tables:
-
-### jobs Table
-Stores active jobs awaiting processing:
-- `id`: Unique job identifier
-- `database_id`: Database/tenant identifier
-- `task_identifier`: Job type/handler name
-- `payload`: JSON data for the job
-- `priority`: Lower numbers = higher priority
-- `run_at`: Scheduled execution time
-- `attempts`: Current attempt count
-- `max_attempts`: Maximum retry attempts
-- `locked_by`: Worker ID holding the lock
-- `locked_at`: Lock timestamp
-- `key`: Optional unique key for upsert
-
-### scheduled_jobs Table
-Stores recurring job definitions:
-- `id`: Unique identifier
-- `database_id`: Database/tenant identifier
-- `task_identifier`: Job type/handler name
-- `payload`: JSON data template
-- `schedule_info`: Cron or rule-based schedule
-- `priority`: Job priority
-- `max_attempts`: Maximum retries
-
-### job_queues Table
-Tracks queue statistics and locking:
-- `queue_name`: Queue identifier
-- `job_count`: Number of jobs in queue
-- `locked_by`: Worker ID holding queue lock
-- `locked_at`: Lock timestamp
-
-## Usage
-
-### Adding Jobs
-
-```sql
--- Add a simple job
-SELECT app_jobs.add_job(
- db_id := '5b720132-17d5-424d-9bcb-ee7b17c13d43'::uuid,
- identifier := 'send_email',
- payload := '{"to": "user@example.com"}'::json
-);
-
--- Add a delayed job with priority
-SELECT app_jobs.add_job(
- db_id := '5b720132-17d5-424d-9bcb-ee7b17c13d43'::uuid,
- identifier := 'generate_report',
- payload := '{"report_id": 123}'::json,
- run_at := now() + interval '1 hour',
- priority := 10
-);
-```
-
-### Retrieving Jobs
-
-```sql
--- Worker fetches next job
-SELECT * FROM app_jobs.get_job(
- worker_id := 'worker-1',
- task_identifiers := ARRAY['send_email', 'generate_report']
-);
-```
-
-### Completing Jobs
-
-```sql
--- Mark job as successfully completed
-SELECT app_jobs.complete_job(
- worker_id := 'worker-1',
- job_id := 123
-);
-```
-
-### Failing Jobs
-
-```sql
--- Mark job as failed (will retry if attempts remain)
-SELECT app_jobs.fail_job(
- worker_id := 'worker-1',
- job_id := 123,
- error_message := 'Connection timeout'
-);
-```
-
-### Scheduled Jobs
-
-```sql
--- Create a scheduled job
-INSERT INTO app_jobs.scheduled_jobs (
- database_id,
- task_identifier,
- schedule_info
-) VALUES (
- '5b720132-17d5-424d-9bcb-ee7b17c13d43'::uuid,
- 'cleanup_task',
- '{"hour": [2], "minute": [0]}'::json
-);
-
--- Execute a scheduled job
-SELECT * FROM app_jobs.run_scheduled_job(1);
-```
-
-## Trigger Functions
-
-The package includes trigger functions for automatic job creation:
-
-### tg_add_job_with_row_id
-Creates a job when a row is inserted, using the row's ID in the payload.
-
-```sql
-CREATE TRIGGER auto_process
-AFTER INSERT ON my_table
-FOR EACH ROW
-EXECUTE FUNCTION app_jobs.tg_add_job_with_row_id(
- 'database-uuid',
- 'process_record',
- 'id'
-);
-```
-
-### tg_add_job_with_row
-Creates a job with the entire row as JSON payload.
-
-```sql
-CREATE TRIGGER auto_process
-AFTER INSERT ON my_table
-FOR EACH ROW
-EXECUTE FUNCTION app_jobs.tg_add_job_with_row(
- 'database-uuid',
- 'process_record'
-);
-```
-
-### tg_add_job_with_fields
-Creates a job with specific fields from the row.
-
-```sql
-CREATE TRIGGER auto_process
-AFTER INSERT ON my_table
-FOR EACH ROW
-EXECUTE FUNCTION app_jobs.tg_add_job_with_fields(
- 'database-uuid',
- 'process_record',
- 'field1',
- 'field2',
- 'field3'
-);
-```
-
-## Functions Reference
-
-### app_jobs.add_job(...)
-Adds a new job to the queue.
-
-**Parameters:**
-- `db_id` (uuid): Database identifier
-- `identifier` (text): Job type
-- `payload` (json): Job data
-- `job_key` (text): Optional unique key
-- `queue_name` (text): Optional queue name
-- `run_at` (timestamptz): Execution time
-- `max_attempts` (integer): Max retries
-- `priority` (integer): Job priority
-
-### app_jobs.get_job(...)
-Retrieves and locks the next available job.
-
-**Parameters:**
-- `worker_id` (text): Worker identifier
-- `task_identifiers` (text[]): Job types to fetch
-- `job_expiry` (interval): Lock expiry duration
-
-### app_jobs.complete_job(...)
-Marks a job as completed.
-
-**Parameters:**
-- `worker_id` (text): Worker identifier
-- `job_id` (bigint): Job identifier
-
-### app_jobs.fail_job(...)
-Marks a job as failed.
-
-**Parameters:**
-- `worker_id` (text): Worker identifier
-- `job_id` (bigint): Job identifier
-- `error_message` (text): Error description
-
-### app_jobs.add_scheduled_job(...)
-Creates a scheduled job.
-
-**Parameters:**
-- `db_id` (uuid): Database identifier
-- `identifier` (text): Job type
-- `payload` (json): Job data
-- `schedule_info` (json): Schedule configuration
-- Additional optional parameters
-
-### app_jobs.run_scheduled_job(...)
-Executes a scheduled job.
-
-**Parameters:**
-- `scheduled_job_id` (bigint): Scheduled job identifier
-
-## Dependencies
-
-- PGPM roles (anonymous, authenticated, administrator)
-- `@pgpm/verify`: Verification utilities
-
-## Testing
-
-```bash
-pnpm test
-```
-
-## Related Tooling
-
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
-* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
-* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
-* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
-
-## Disclaimer
-
-AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED "AS IS", AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND.
-
-No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value.
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/__tests__/__snapshots__/jobs.test.ts.snap b/__fixtures__/stage/extensions/@pgpm/jobs/__tests__/__snapshots__/jobs.test.ts.snap
deleted file mode 100644
index fa33a7cea..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/__tests__/__snapshots__/jobs.test.ts.snap
+++ /dev/null
@@ -1,16 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`scheduled jobs schedule jobs 1`] = `
-{
- "attempts": null,
- "id": null,
- "key": null,
- "last_error": null,
- "locked_at": null,
- "locked_by": null,
- "max_attempts": null,
- "payload": null,
- "priority": null,
- "task_identifier": null,
-}
-`;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/__tests__/jobs.test.ts b/__fixtures__/stage/extensions/@pgpm/jobs/__tests__/jobs.test.ts
deleted file mode 100644
index 45f08ffb2..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/__tests__/jobs.test.ts
+++ /dev/null
@@ -1,139 +0,0 @@
-import { getConnections, PgTestClient } from 'pgsql-test';
-
-let pg: PgTestClient;
-let teardown: () => Promise;
-
-const objs: Record = {};
-
-describe('scheduled jobs', () => {
- beforeAll(async () => {
- ({ pg, teardown } = await getConnections());
- });
-
- beforeEach(async () => {
- await pg.beforeEach();
- });
-
- afterEach(async () => {
- await pg.afterEach();
- });
-
- afterAll(async () => {
- await teardown();
- });
-
- it('schedule jobs by cron', async () => {
- const result = await pg.one(
- `INSERT INTO app_jobs.scheduled_jobs (task_identifier, schedule_info)
- VALUES ($1, $2)
- RETURNING *`,
- [
- 'my_job',
- {
- hour: Array.from({ length: 23 }, (_: unknown, i: number) => i),
- minute: [0, 15, 30, 45],
- dayOfWeek: Array.from({ length: 6 }, (_: unknown, i: number) => i),
- },
- ]
- );
- objs.scheduled1 = result;
- });
-
- it('schedule jobs by rule', async () => {
- const start = new Date(Date.now() + 10000);
- const end = new Date(start.getTime() + 180000);
-
- const result = await pg.one(
- `INSERT INTO app_jobs.scheduled_jobs (task_identifier, payload, schedule_info)
- VALUES ($1, $2, $3)
- RETURNING *`,
- [
- 'my_job',
- { just: 'run it' },
- { start, end, rule: '*/1 * * * *' }
- ]
- );
- objs.scheduled2 = result;
- });
-
- it('schedule jobs', async () => {
- const [result] = await pg.any(
- `SELECT * FROM app_jobs.run_scheduled_job($1)`,
- [objs.scheduled2.id]
- );
-
- const { queue_name, run_at, created_at, updated_at, ...obj } = result;
- expect(obj).toMatchSnapshot();
- });
-
- it('schedule jobs with keys', async () => {
- const start = new Date(Date.now() + 10000);
- const end = new Date(start.getTime() + 180000);
-
- const [result] = await pg.any(
- `SELECT * FROM app_jobs.add_scheduled_job(
- identifier := $1::text,
- payload := $2::json,
- schedule_info := $3::json,
- job_key := $4::text,
- queue_name := $5::text,
- max_attempts := $6::integer,
- priority := $7::integer
- )`,
- [
- 'my_job',
- { just: 'run it' },
- { start, end, rule: '*/1 * * * *' },
- 'new_key',
- null,
- 25,
- 0
- ]
- );
-
- const {
- queue_name,
- run_at,
- created_at,
- updated_at,
- schedule_info: sch,
- start: s1,
- end: d1,
- ...obj
- } = result;
-
- const [result2] = await pg.any(
- `SELECT * FROM app_jobs.add_scheduled_job(
- identifier := $1,
- payload := $2,
- schedule_info := $3,
- job_key := $4,
- queue_name := $5,
- max_attempts := $6,
- priority := $7
- )`,
- [
- 'my_job',
- { just: 'run it' },
- { start, end, rule: '*/1 * * * *' },
- 'new_key',
- null,
- 25,
- 0
- ]
- );
-
- const {
- queue_name: qn,
- created_at: ca,
- updated_at: ua,
- schedule_info: sch2,
- start: s,
- end: e,
- ...obj2
- } = result2;
-
- console.log('First insert:', obj);
- console.log('Duplicate insert (job_key conflict):', obj2);
- });
-});
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/helpers/json_build_object_apply.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/helpers/json_build_object_apply.sql
deleted file mode 100644
index 2a8352488..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/helpers/json_build_object_apply.sql
+++ /dev/null
@@ -1,28 +0,0 @@
--- Deploy schemas/app_jobs/helpers/json_build_object_apply to pg
--- requires: schemas/app_jobs/schema
-
-BEGIN;
-CREATE FUNCTION app_jobs.json_build_object_apply (arguments text[])
- RETURNS json
- AS $$
-DECLARE
- arg text;
- _sql text;
- _res json;
- args text[];
-BEGIN
- _sql = 'SELECT json_build_object(';
- FOR arg IN
- SELECT
- unnest(arguments)
- LOOP
- args = array_append(args, format('''%s''', arg));
- END LOOP;
- _sql = _sql || format('%s);', array_to_string(args, ','));
- EXECUTE _sql INTO _res;
- RETURN _res;
-END;
-$$
-LANGUAGE 'plpgsql';
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/add_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/add_job.sql
deleted file mode 100644
index 65c78e18b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/add_job.sql
+++ /dev/null
@@ -1,65 +0,0 @@
--- Deploy schemas/app_jobs/procedures/add_job to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
--- requires: schemas/app_jobs/tables/job_queues/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.add_job (
- identifier text,
- payload json DEFAULT '{}' ::json,
- job_key text DEFAULT NULL,
- queue_name text DEFAULT NULL,
- run_at timestamptz DEFAULT now(),
- max_attempts integer DEFAULT 25,
- priority integer DEFAULT 0
-)
- RETURNS app_jobs.jobs
- AS $$
-DECLARE
- v_job app_jobs.jobs;
-BEGIN
- IF job_key IS NOT NULL THEN
- -- Upsert job
- INSERT INTO app_jobs.jobs (task_identifier, payload, queue_name, run_at, max_attempts, KEY, priority)
- VALUES (identifier, coalesce(payload, '{}'::json), queue_name, coalesce(run_at, now()), coalesce(max_attempts, 25), job_key, coalesce(priority, 0))
- ON CONFLICT (KEY)
- DO UPDATE SET
- task_identifier = excluded.task_identifier, payload = excluded.payload, queue_name = excluded.queue_name, max_attempts = excluded.max_attempts, run_at = excluded.run_at, priority = excluded.priority,
- -- always reset error/retry state
- attempts = 0, last_error = NULL
- WHERE
- jobs.locked_at IS NULL
- RETURNING
- * INTO v_job;
-
- -- If upsert succeeded (insert or update), return early
-
- IF NOT (v_job IS NULL) THEN
- RETURN v_job;
- END IF;
-
- -- Upsert failed -> there must be an existing job that is locked. Remove
- -- existing key to allow a new one to be inserted, and prevent any
- -- subsequent retries by bumping attempts to the max allowed.
-
- UPDATE
- app_jobs.jobs
- SET
- KEY = NULL,
- attempts = jobs.max_attempts
- WHERE
- KEY = job_key;
- END IF;
-
- INSERT INTO app_jobs.jobs (task_identifier, payload, queue_name, run_at, max_attempts, priority)
- VALUES (identifier, payload, queue_name, run_at, max_attempts, priority)
- RETURNING
- * INTO v_job;
- RETURN v_job;
-END;
-$$
-LANGUAGE 'plpgsql'
-VOLATILE
-SECURITY DEFINER;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/add_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/add_scheduled_job.sql
deleted file mode 100644
index f2e703117..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/add_scheduled_job.sql
+++ /dev/null
@@ -1,66 +0,0 @@
--- Deploy schemas/app_jobs/procedures/add_scheduled_job to pg
-
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/scheduled_jobs/table
-
-BEGIN;
-
-CREATE FUNCTION app_jobs.add_scheduled_job(
- identifier text,
- payload json DEFAULT '{}'::json,
- schedule_info json DEFAULT '{}'::json,
- job_key text DEFAULT NULL,
- queue_name text DEFAULT NULL,
- max_attempts integer DEFAULT 25,
- priority integer DEFAULT 0
-)
- RETURNS app_jobs.scheduled_jobs
- AS $$
-DECLARE
- v_job app_jobs.scheduled_jobs;
-BEGIN
- IF job_key IS NOT NULL THEN
-
- -- Upsert job
- INSERT INTO app_jobs.scheduled_jobs (task_identifier, payload, queue_name, schedule_info, max_attempts, KEY, priority)
- VALUES (identifier, coalesce(payload, '{}'::json), queue_name, schedule_info, coalesce(max_attempts, 25), job_key, coalesce(priority, 0))
- ON CONFLICT (KEY)
- DO UPDATE SET
- task_identifier = excluded.task_identifier,
- payload = excluded.payload,
- queue_name = excluded.queue_name,
- max_attempts = excluded.max_attempts,
- schedule_info = excluded.schedule_info,
- priority = excluded.priority
- WHERE
- scheduled_jobs.locked_at IS NULL
- RETURNING
- * INTO v_job;
-
- -- If upsert succeeded (insert or update), return early
-
- IF NOT (v_job IS NULL) THEN
- RETURN v_job;
- END IF;
-
- -- Upsert failed -> there must be an existing scheduled job that is locked. Remove
- -- and allow a new one to be inserted
-
- DELETE FROM
- app_jobs.scheduled_jobs
- WHERE
- KEY = job_key;
- END IF;
-
- INSERT INTO app_jobs.scheduled_jobs (task_identifier, payload, queue_name, schedule_info, max_attempts, priority)
- VALUES (identifier, payload, queue_name, schedule_info, max_attempts, priority)
- RETURNING
- * INTO v_job;
- RETURN v_job;
-END;
-$$
-LANGUAGE 'plpgsql'
-VOLATILE
-SECURITY DEFINER;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/complete_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/complete_job.sql
deleted file mode 100644
index afafdbb2b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/complete_job.sql
+++ /dev/null
@@ -1,32 +0,0 @@
--- Deploy schemas/app_jobs/procedures/complete_job to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
--- requires: schemas/app_jobs/tables/job_queues/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.complete_job (worker_id text, job_id bigint)
- RETURNS app_jobs.jobs
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_row app_jobs.jobs;
-BEGIN
- DELETE FROM app_jobs.jobs
- WHERE id = job_id
- RETURNING
- * INTO v_row;
- IF v_row.queue_name IS NOT NULL THEN
- UPDATE
- app_jobs.job_queues
- SET
- locked_by = NULL,
- locked_at = NULL
- WHERE
- queue_name = v_row.queue_name
- AND locked_by = worker_id;
- END IF;
- RETURN v_row;
-END;
-$$;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/complete_jobs.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/complete_jobs.sql
deleted file mode 100644
index 1b14dffc5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/complete_jobs.sql
+++ /dev/null
@@ -1,19 +0,0 @@
--- Deploy schemas/app_jobs/procedures/complete_jobs to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/job_queues/table
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.complete_jobs (job_ids bigint[])
- RETURNS SETOF app_jobs.jobs
- LANGUAGE sql
- AS $$
- DELETE FROM app_jobs.jobs
- WHERE id = ANY (job_ids)
- AND (locked_by IS NULL
- OR locked_at < NOW() - interval '4 hours')
- RETURNING
- *;
-$$;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/do_notify.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/do_notify.sql
deleted file mode 100644
index 82d92525a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/do_notify.sql
+++ /dev/null
@@ -1,16 +0,0 @@
--- Deploy schemas/app_jobs/procedures/do_notify to pg
--- requires: schemas/app_jobs/schema
-
-BEGIN;
-CREATE FUNCTION app_jobs.do_notify ()
- RETURNS TRIGGER
- AS $$
-BEGIN
- PERFORM
- pg_notify(TG_ARGV[0], '');
- RETURN NEW;
-END;
-$$
-LANGUAGE plpgsql;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/fail_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/fail_job.sql
deleted file mode 100644
index a5b38c686..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/fail_job.sql
+++ /dev/null
@@ -1,41 +0,0 @@
--- Deploy schemas/app_jobs/procedures/fail_job to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
--- requires: schemas/app_jobs/tables/job_queues/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.fail_job (worker_id text, job_id bigint, error_message text)
- RETURNS app_jobs.jobs
- LANGUAGE plpgsql
- STRICT
- AS $$
-DECLARE
- v_row app_jobs.jobs;
-BEGIN
- UPDATE
- app_jobs.jobs
- SET
- last_error = error_message,
- run_at = greatest (now(), run_at) + (exp(least (attempts, 10))::text || ' seconds')::interval,
- locked_by = NULL,
- locked_at = NULL
- WHERE
- id = job_id
- AND locked_by = worker_id
- RETURNING
- * INTO v_row;
- IF v_row.queue_name IS NOT NULL THEN
- UPDATE
- app_jobs.job_queues
- SET
- locked_by = NULL,
- locked_at = NULL
- WHERE
- queue_name = v_row.queue_name
- AND locked_by = worker_id;
- END IF;
- RETURN v_row;
-END;
-$$;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/get_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/get_job.sql
deleted file mode 100644
index ec6f64bf7..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/get_job.sql
+++ /dev/null
@@ -1,77 +0,0 @@
--- Deploy schemas/app_jobs/procedures/get_job to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/job_queues/table
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.get_job (worker_id text, task_identifiers text[] DEFAULT NULL, job_expiry interval DEFAULT '4 hours')
- RETURNS app_jobs.jobs
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_job_id bigint;
- v_queue_name text;
- v_row app_jobs.jobs;
- v_now timestamptz = now();
-BEGIN
- IF worker_id IS NULL THEN
- RAISE exception 'INVALID_WORKER_ID';
- END IF;
- SELECT
- jobs.queue_name,
- jobs.id INTO v_queue_name,
- v_job_id
- FROM
- app_jobs.jobs
- WHERE (jobs.locked_at IS NULL
- OR jobs.locked_at < (v_now - job_expiry))
- AND (jobs.queue_name IS NULL
- OR EXISTS (
- SELECT
- 1
- FROM
- app_jobs.job_queues
- WHERE
- job_queues.queue_name = jobs.queue_name
- AND (job_queues.locked_at IS NULL
- OR job_queues.locked_at < (v_now - job_expiry))
- FOR UPDATE
- SKIP LOCKED))
- AND run_at <= v_now
- AND attempts < max_attempts
- AND (task_identifiers IS NULL
- OR task_identifier = ANY (task_identifiers))
- ORDER BY
- priority ASC,
- run_at ASC,
- id ASC
- LIMIT 1
- FOR UPDATE
- SKIP LOCKED;
- IF v_job_id IS NULL THEN
- RETURN NULL;
- END IF;
- IF v_queue_name IS NOT NULL THEN
- UPDATE
- app_jobs.job_queues
- SET
- locked_by = worker_id,
- locked_at = v_now
- WHERE
- job_queues.queue_name = v_queue_name;
- END IF;
- UPDATE
- app_jobs.jobs
- SET
- attempts = attempts + 1,
- locked_by = worker_id,
- locked_at = v_now
- WHERE
- id = v_job_id
- RETURNING
- * INTO v_row;
- RETURN v_row;
-END;
-$$;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/get_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/get_scheduled_job.sql
deleted file mode 100644
index d233023e3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/get_scheduled_job.sql
+++ /dev/null
@@ -1,46 +0,0 @@
--- Deploy schemas/app_jobs/procedures/get_scheduled_job to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/scheduled_jobs/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.get_scheduled_job (worker_id text, task_identifiers text[] DEFAULT NULL)
- RETURNS app_jobs.scheduled_jobs
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_job_id bigint;
- v_row app_jobs.scheduled_jobs;
-BEGIN
- IF worker_id IS NULL THEN
- RAISE exception 'INVALID_WORKER_ID';
- END IF;
- SELECT
- scheduled_jobs.id INTO v_job_id
- FROM
- app_jobs.scheduled_jobs
- WHERE (scheduled_jobs.locked_at IS NULL)
- AND (task_identifiers IS NULL
- OR task_identifier = ANY (task_identifiers))
- ORDER BY
- priority ASC,
- id ASC
- LIMIT 1
- FOR UPDATE
- SKIP LOCKED;
- IF v_job_id IS NULL THEN
- RETURN NULL;
- END IF;
- UPDATE
- app_jobs.scheduled_jobs
- SET
- locked_by = worker_id,
- locked_at = NOW()
- WHERE
- id = v_job_id
- RETURNING
- * INTO v_row;
- RETURN v_row;
-END;
-$$;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/permanently_fail_jobs.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/permanently_fail_jobs.sql
deleted file mode 100644
index 3c7328062..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/permanently_fail_jobs.sql
+++ /dev/null
@@ -1,24 +0,0 @@
--- Deploy schemas/app_jobs/procedures/permanently_fail_jobs to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/job_queues/table
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.permanently_fail_jobs (job_ids bigint[], error_message text DEFAULT NULL)
- RETURNS SETOF app_jobs.jobs
- LANGUAGE sql
- AS $$
- UPDATE
- app_jobs.jobs
- SET
- last_error = coalesce(error_message, 'Manually marked as failed'),
- attempts = max_attempts
- WHERE
- id = ANY (job_ids)
- AND (locked_by IS NULL
- OR locked_at < NOW() - interval '4 hours')
- RETURNING
- *;
-$$;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/release_jobs.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/release_jobs.sql
deleted file mode 100644
index 2fd063367..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/release_jobs.sql
+++ /dev/null
@@ -1,34 +0,0 @@
--- Deploy schemas/app_jobs/procedures/release_jobs to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
--- requires: schemas/app_jobs/tables/job_queues/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.release_jobs (worker_id text)
- RETURNS void
- AS $$
-DECLARE
-BEGIN
- -- clear the job
- UPDATE
- app_jobs.jobs
- SET
- locked_at = NULL,
- locked_by = NULL,
- attempts = GREATEST (attempts - 1, 0)
- WHERE
- locked_by = worker_id;
- -- clear the queue
- UPDATE
- app_jobs.job_queues
- SET
- locked_at = NULL,
- locked_by = NULL
- WHERE
- locked_by = worker_id;
-END;
-$$
-LANGUAGE 'plpgsql'
-VOLATILE;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/release_scheduled_jobs.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/release_scheduled_jobs.sql
deleted file mode 100644
index ec66b60a1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/release_scheduled_jobs.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- Deploy schemas/app_jobs/procedures/release_scheduled_jobs to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/scheduled_jobs/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.release_scheduled_jobs (worker_id text, ids bigint[] DEFAULT NULL)
- RETURNS void
- AS $$
-DECLARE
-BEGIN
- -- clear the scheduled job
- UPDATE
- app_jobs.scheduled_jobs s
- SET
- locked_at = NULL,
- locked_by = NULL
- WHERE
- locked_by = worker_id
- AND (ids IS NULL
- OR s.id = ANY (ids));
-END;
-$$
-LANGUAGE 'plpgsql'
-VOLATILE;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/reschedule_jobs.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/reschedule_jobs.sql
deleted file mode 100644
index b39d884db..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/reschedule_jobs.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- Deploy schemas/app_jobs/procedures/reschedule_jobs to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
--- NOTE this should be renamed to reset_jobs to avoid confusion of scheduled jobs
-CREATE FUNCTION app_jobs.reschedule_jobs (job_ids bigint[], run_at timestamptz DEFAULT NULL, priority integer DEFAULT NULL, attempts integer DEFAULT NULL, max_attempts integer DEFAULT NULL)
- RETURNS SETOF app_jobs.jobs
- LANGUAGE sql
- AS $$
- UPDATE
- app_jobs.jobs
- SET
- run_at = coalesce(reschedule_jobs.run_at, jobs.run_at),
- priority = coalesce(reschedule_jobs.priority, jobs.priority),
- attempts = coalesce(reschedule_jobs.attempts, jobs.attempts),
- max_attempts = coalesce(reschedule_jobs.max_attempts, jobs.max_attempts)
- WHERE
- id = ANY (job_ids)
- AND (locked_by IS NULL
- OR locked_at < NOW() - interval '4 hours')
- RETURNING
- *;
-$$;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/run_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/run_scheduled_job.sql
deleted file mode 100644
index 2f4961d51..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/procedures/run_scheduled_job.sql
+++ /dev/null
@@ -1,67 +0,0 @@
--- Deploy schemas/app_jobs/procedures/run_scheduled_job to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
--- requires: schemas/app_jobs/tables/scheduled_jobs/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.run_scheduled_job (id bigint, job_expiry interval DEFAULT '1 hours')
- RETURNS app_jobs.jobs
- AS $$
-DECLARE
- j app_jobs.jobs;
- last_id bigint;
- lkd_by text;
-BEGIN
- -- check last scheduled
- SELECT
- last_scheduled_id
- FROM
- app_jobs.scheduled_jobs s
- WHERE
- s.id = run_scheduled_job.id INTO last_id;
- -- if it's been scheduled check if it's been run
- IF (last_id IS NOT NULL) THEN
- SELECT
- locked_by
- FROM
- app_jobs.jobs js
- WHERE
- js.id = last_id
- AND (js.locked_at IS NULL -- never been run
- OR js.locked_at >= (NOW() - job_expiry)
- -- still running within a safe interval
-) INTO lkd_by;
- IF (FOUND) THEN
- RAISE EXCEPTION 'ALREADY_SCHEDULED';
- END IF;
- END IF;
- -- insert new job
- INSERT INTO app_jobs.jobs (queue_name, task_identifier, payload, priority, max_attempts, key)
- SELECT
- queue_name,
- task_identifier,
- payload,
- priority,
- max_attempts,
- key
- FROM
- app_jobs.scheduled_jobs s
- WHERE
- s.id = run_scheduled_job.id
- RETURNING
- * INTO j;
- -- update the scheduled job
- UPDATE
- app_jobs.scheduled_jobs s
- SET
- last_scheduled = NOW(),
- last_scheduled_id = j.id
- WHERE
- s.id = run_scheduled_job.id;
- RETURN j;
-END;
-$$
-LANGUAGE 'plpgsql'
-VOLATILE;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/schema.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/schema.sql
deleted file mode 100644
index 86a5b4eeb..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Deploy schemas/app_jobs/schema to pg
-BEGIN;
-CREATE SCHEMA IF NOT EXISTS app_jobs;
-GRANT USAGE ON SCHEMA app_jobs TO administrator;
-ALTER DEFAULT PRIVILEGES IN SCHEMA app_jobs GRANT EXECUTE ON FUNCTIONS TO administrator;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index 6f0fc3be9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,12 +0,0 @@
--- Deploy schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator to pg
-
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/job_queues/table
-
-BEGIN;
-
--- TODO make sure to require any policies on this table!
-
-GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE app_jobs.job_queues TO administrator;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
deleted file mode 100644
index cc78f18a5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Deploy schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/job_queues/table
-
-BEGIN;
-CREATE INDEX job_queues_locked_by_idx ON app_jobs.job_queues (locked_by);
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/job_queues/table.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/job_queues/table.sql
deleted file mode 100644
index 4ad1305c9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/job_queues/table.sql
+++ /dev/null
@@ -1,12 +0,0 @@
--- Deploy schemas/app_jobs/tables/job_queues/table to pg
--- requires: schemas/app_jobs/schema
-
-BEGIN;
-CREATE TABLE app_jobs.job_queues (
- queue_name text NOT NULL PRIMARY KEY,
- job_count int DEFAULT 0 NOT NULL,
- locked_at timestamptz,
- locked_by text
-);
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index 11a3ac344..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,12 +0,0 @@
--- Deploy schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator to pg
-
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
-
--- TODO make sure to require any policies on this table!
-
-GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE app_jobs.jobs TO administrator;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
deleted file mode 100644
index d41680373..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Deploy schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
-CREATE INDEX jobs_locked_by_idx ON app_jobs.jobs (locked_by);
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
deleted file mode 100644
index 78b03ff13..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Deploy schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
-CREATE INDEX priority_run_at_id_idx ON app_jobs.jobs (priority, run_at, id);
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/table.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/table.sql
deleted file mode 100644
index b692c2c57..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/table.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- Deploy schemas/app_jobs/tables/jobs/table to pg
--- requires: schemas/app_jobs/schema
-
-BEGIN;
-CREATE TABLE app_jobs.jobs (
- id bigserial PRIMARY KEY,
- queue_name text DEFAULT (public.gen_random_uuid ()) ::text,
- task_identifier text NOT NULL,
- payload json DEFAULT '{}' ::json NOT NULL,
- priority integer DEFAULT 0 NOT NULL,
- run_at timestamptz DEFAULT now() NOT NULL,
- attempts integer DEFAULT 0 NOT NULL,
- max_attempts integer DEFAULT 25 NOT NULL,
- key text,
- last_error text,
- locked_at timestamptz,
- locked_by text,
- CHECK (length(key) < 513),
- CHECK (length(task_identifier) < 127),
- CHECK (max_attempts > 0),
- CHECK (length(queue_name) < 127),
- CHECK (length(locked_by) > 3),
- UNIQUE (key)
-);
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
deleted file mode 100644
index 09230ed31..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
+++ /dev/null
@@ -1,42 +0,0 @@
--- Deploy schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.tg_decrease_job_queue_count ()
- RETURNS TRIGGER
- AS $$
-DECLARE
- v_new_job_count int;
-BEGIN
- UPDATE
- app_jobs.job_queues
- SET
- job_count = job_queues.job_count - 1
- WHERE
- queue_name = OLD.queue_name
- RETURNING
- job_count INTO v_new_job_count;
- IF v_new_job_count <= 0 THEN
- DELETE FROM app_jobs.job_queues
- WHERE queue_name = OLD.queue_name
- AND job_count <= 0;
- END IF;
- RETURN OLD;
-END;
-$$
-LANGUAGE 'plpgsql'
-VOLATILE;
-CREATE TRIGGER decrease_job_queue_count_on_delete
- AFTER DELETE ON app_jobs.jobs
- FOR EACH ROW
- WHEN ((OLD.queue_name IS NOT NULL))
- EXECUTE PROCEDURE app_jobs.tg_decrease_job_queue_count ();
--- only a person would do this...
-CREATE TRIGGER decrease_job_queue_count_on_update
- AFTER UPDATE OF queue_name ON app_jobs.jobs
- FOR EACH ROW
- WHEN (((NEW.queue_name IS DISTINCT FROM OLD.queue_name) AND (OLD.queue_name IS NOT NULL)))
- EXECUTE PROCEDURE app_jobs.tg_decrease_job_queue_count ();
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
deleted file mode 100644
index b25b3f1a7..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
+++ /dev/null
@@ -1,32 +0,0 @@
--- Deploy schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
-
-BEGIN;
-CREATE FUNCTION app_jobs.tg_increase_job_queue_count ()
- RETURNS TRIGGER
- AS $$
-BEGIN
- INSERT INTO app_jobs.job_queues (queue_name, job_count)
- VALUES (NEW.queue_name, 1)
- ON CONFLICT (queue_name)
- DO UPDATE SET
- job_count = job_queues.job_count + 1;
- RETURN NEW;
-END;
-$$
-LANGUAGE 'plpgsql'
-VOLATILE;
-CREATE TRIGGER _500_increase_job_queue_count_on_insert
- AFTER INSERT ON app_jobs.jobs
- FOR EACH ROW
- WHEN ((NEW.queue_name IS NOT NULL))
- EXECUTE PROCEDURE app_jobs.tg_increase_job_queue_count ();
--- only a person would do this
-CREATE TRIGGER _500_increase_job_queue_count_on_update
- AFTER UPDATE OF queue_name ON app_jobs.jobs
- FOR EACH ROW
- WHEN (((NEW.queue_name IS DISTINCT FROM OLD.queue_name) AND (NEW.queue_name IS NOT NULL)))
- EXECUTE PROCEDURE app_jobs.tg_increase_job_queue_count ();
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
deleted file mode 100644
index 9e6cec54c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
+++ /dev/null
@@ -1,13 +0,0 @@
--- Deploy schemas/app_jobs/tables/jobs/triggers/notify_worker to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
--- requires: schemas/app_jobs/procedures/do_notify
--- requires: schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count
-
-BEGIN;
-CREATE TRIGGER _900_notify_worker
- AFTER INSERT ON app_jobs.jobs
- FOR EACH ROW
- EXECUTE PROCEDURE app_jobs.do_notify ('jobs:insert');
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/triggers/timestamps.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
deleted file mode 100644
index b26296953..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
+++ /dev/null
@@ -1,20 +0,0 @@
--- Deploy schemas/app_jobs/tables/jobs/triggers/timestamps to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/jobs/table
--- requires: schemas/app_jobs/triggers/tg_update_timestamps
-
-BEGIN;
-ALTER TABLE app_jobs.jobs
- ADD COLUMN created_at timestamptz;
-ALTER TABLE app_jobs.jobs
- ALTER COLUMN created_at SET DEFAULT NOW();
-ALTER TABLE app_jobs.jobs
- ADD COLUMN updated_at timestamptz;
-ALTER TABLE app_jobs.jobs
- ALTER COLUMN updated_at SET DEFAULT NOW();
-CREATE TRIGGER _100_update_jobs_modtime_tg
- BEFORE UPDATE OR INSERT ON app_jobs.jobs
- FOR EACH ROW
- EXECUTE PROCEDURE app_jobs.tg_update_timestamps ();
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index 914166bd4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,12 +0,0 @@
--- Deploy schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator to pg
-
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/scheduled_jobs/table
-
-BEGIN;
-
--- TODO make sure to require any policies on this table!
-
-GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE app_jobs.scheduled_jobs TO administrator;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
deleted file mode 100644
index d222737ff..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Deploy schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/scheduled_jobs/table
-
-BEGIN;
-CREATE INDEX scheduled_jobs_locked_by_idx ON app_jobs.scheduled_jobs (locked_by);
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
deleted file mode 100644
index 9bd548796..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Deploy schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/scheduled_jobs/table
-
-BEGIN;
-CREATE INDEX scheduled_jobs_priority_id_idx ON app_jobs.scheduled_jobs (priority, id);
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/table.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/table.sql
deleted file mode 100644
index 58d024189..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/table.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- Deploy schemas/app_jobs/tables/scheduled_jobs/table to pg
--- requires: schemas/app_jobs/schema
-
-BEGIN;
-CREATE TABLE app_jobs.scheduled_jobs (
- id bigserial PRIMARY KEY,
- queue_name text DEFAULT (public.gen_random_uuid ()) ::text,
- task_identifier text NOT NULL,
- payload json DEFAULT '{}' ::json NOT NULL,
- priority integer DEFAULT 0 NOT NULL,
- max_attempts integer DEFAULT 25 NOT NULL,
- key text,
- locked_at timestamptz,
- locked_by text,
- schedule_info json NOT NULL,
- last_scheduled timestamptz,
- last_scheduled_id bigint,
- CHECK (length(key) < 513),
- CHECK (length(task_identifier) < 127),
- CHECK (max_attempts > 0),
- CHECK (length(queue_name) < 127),
- CHECK (length(locked_by) > 3),
- UNIQUE (key)
-);
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
deleted file mode 100644
index 51e17d4c0..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
+++ /dev/null
@@ -1,12 +0,0 @@
--- Deploy schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/tables/scheduled_jobs/table
--- requires: schemas/app_jobs/procedures/do_notify
-
-BEGIN;
-CREATE TRIGGER _900_notify_scheduled_job
- AFTER INSERT ON app_jobs.scheduled_jobs
- FOR EACH ROW
- EXECUTE PROCEDURE app_jobs.do_notify ('scheduled_jobs:insert');
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_fields.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
deleted file mode 100644
index 314ad2ba0..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
+++ /dev/null
@@ -1,50 +0,0 @@
--- Deploy schemas/app_jobs/triggers/tg_add_job_with_fields to pg
--- requires: schemas/app_jobs/schema
--- requires: schemas/app_jobs/helpers/json_build_object_apply
-
-BEGIN;
-CREATE FUNCTION app_jobs.trigger_job_with_fields ()
- RETURNS TRIGGER
- AS $$
-DECLARE
- arg text;
- fn text;
- i int;
- args text[];
-BEGIN
- FOR i IN
- SELECT
- *
- FROM
- generate_series(1, TG_NARGS) g (i)
- LOOP
- IF (i = 1) THEN
- fn = TG_ARGV[i - 1];
- ELSE
- args = array_append(args, TG_ARGV[i - 1]);
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- EXECUTE format('SELECT ($1).%s::text', TG_ARGV[i - 1])
- USING NEW INTO arg;
- END IF;
- IF (TG_OP = 'DELETE') THEN
- EXECUTE format('SELECT ($1).%s::text', TG_ARGV[i - 1])
- USING OLD INTO arg;
- END IF;
- args = array_append(args, arg);
- END IF;
- END LOOP;
- PERFORM
- app_jobs.add_job (fn, app_jobs.json_build_object_apply (args));
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- RETURN NEW;
- END IF;
- IF (TG_OP = 'DELETE') THEN
- RETURN OLD;
- END IF;
-END;
-$$
-LANGUAGE plpgsql
-VOLATILE
-SECURITY DEFINER;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_row.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_row.sql
deleted file mode 100644
index 6dec82ffe..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_row.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- Deploy schemas/app_jobs/triggers/tg_add_job_with_row to pg
--- requires: schemas/app_jobs/schema
-
-BEGIN;
-CREATE FUNCTION app_jobs.tg_add_job_with_row ()
- RETURNS TRIGGER
- AS $$
-BEGIN
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- PERFORM
- app_jobs.add_job (TG_ARGV[0], to_json(NEW));
- RETURN NEW;
- END IF;
- IF (TG_OP = 'DELETE') THEN
- PERFORM
- app_jobs.add_job (TG_ARGV[0], to_json(OLD));
- RETURN OLD;
- END IF;
-END;
-$$
-LANGUAGE plpgsql
-VOLATILE
-SECURITY DEFINER;
-COMMENT ON FUNCTION app_jobs.tg_add_job_with_row IS E'Useful shortcut to create a job on insert or update. Pass the task name as the trigger argument, and the record data will automatically be available on the JSON payload.';
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
deleted file mode 100644
index 7fcb2c500..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- Deploy schemas/app_jobs/triggers/tg_add_job_with_row_id to pg
--- requires: schemas/app_jobs/schema
-
-BEGIN;
-CREATE FUNCTION app_jobs.tg_add_job_with_row_id ()
- RETURNS TRIGGER
- AS $$
-BEGIN
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- PERFORM
- app_jobs.add_job (tg_argv[0], json_build_object('id', NEW.id));
- RETURN NEW;
- END IF;
- IF (TG_OP = 'DELETE') THEN
- PERFORM
- app_jobs.add_job (tg_argv[0], json_build_object('id', OLD.id));
- RETURN OLD;
- END IF;
-END;
-$$
-LANGUAGE plpgsql
-VOLATILE
-SECURITY DEFINER;
-COMMENT ON FUNCTION app_jobs.tg_add_job_with_row_id IS E'Useful shortcut to create a job on insert or update. Pass the task name as the trigger argument, and the record id will automatically be available on the JSON payload.';
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/triggers/tg_update_timestamps.sql b/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/triggers/tg_update_timestamps.sql
deleted file mode 100644
index e74c4abfc..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/deploy/schemas/app_jobs/triggers/tg_update_timestamps.sql
+++ /dev/null
@@ -1,21 +0,0 @@
--- Deploy schemas/app_jobs/triggers/tg_update_timestamps to pg
--- requires: schemas/app_jobs/schema
-
-BEGIN;
-CREATE FUNCTION app_jobs.tg_update_timestamps ()
- RETURNS TRIGGER
- AS $$
-BEGIN
- IF TG_OP = 'INSERT' THEN
- NEW.created_at = NOW();
- NEW.updated_at = NOW();
- ELSIF TG_OP = 'UPDATE' THEN
- NEW.created_at = OLD.created_at;
- NEW.updated_at = greatest (now(), OLD.updated_at + interval '1 millisecond');
- END IF;
- RETURN NEW;
-END;
-$$
-LANGUAGE 'plpgsql';
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/jest.config.js b/__fixtures__/stage/extensions/@pgpm/jobs/jest.config.js
deleted file mode 100644
index e20e7efb5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/jest.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @type {import('ts-jest').JestConfigWithTsJest} */
-module.exports = {
- preset: 'ts-jest',
- testEnvironment: 'node',
-
- // Match both __tests__ and colocated test files
- testMatch: ['**/?(*.)+(test|spec).{ts,tsx,js,jsx}'],
-
- // Ignore build artifacts and type declarations
- testPathIgnorePatterns: ['/dist/', '\\.d\\.ts$'],
- modulePathIgnorePatterns: ['/dist/'],
- watchPathIgnorePatterns: ['/dist/'],
-
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
-};
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/package.json b/__fixtures__/stage/extensions/@pgpm/jobs/package.json
deleted file mode 100644
index 618618561..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/package.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "name": "@pgpm/jobs",
- "version": "0.15.2",
- "description": "Core job system for background task processing in PostgreSQL",
- "author": "Dan Lynch ",
- "contributors": [
- "Constructive "
- ],
- "keywords": [
- "postgresql",
- "pgpm",
- "jobs",
- "background-tasks"
- ],
- "publishConfig": {
- "access": "public"
- },
- "scripts": {
- "bundle": "pgpm package",
- "test": "jest",
- "test:watch": "jest --watch"
- },
- "dependencies": {
- "@pgpm/verify": "0.15.2"
- },
- "devDependencies": {
- "pgpm": "^1.0.0"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/constructive-io/pgpm-modules"
- },
- "homepage": "https://github.com/constructive-io/pgpm-modules",
- "bugs": {
- "url": "https://github.com/constructive-io/pgpm-modules/issues"
- }
-}
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/pgpm-jobs.control b/__fixtures__/stage/extensions/@pgpm/jobs/pgpm-jobs.control
deleted file mode 100644
index 72c840582..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/pgpm-jobs.control
+++ /dev/null
@@ -1,8 +0,0 @@
-# pgpm-jobs extension
-comment = 'pgpm-jobs extension'
-default_version = '0.14.0'
-module_pathname = '$libdir/pgpm-jobs'
-requires = 'plpgsql,uuid-ossp,pgcrypto,pgpm-verify'
-relocatable = false
-superuser = false
-
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/pgpm.plan b/__fixtures__/stage/extensions/@pgpm/jobs/pgpm.plan
deleted file mode 100644
index a727445d7..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/pgpm.plan
+++ /dev/null
@@ -1,38 +0,0 @@
-%syntax-version=1.0.0
-%project=pgpm-jobs
-%uri=pgpm-jobs
-schemas/app_jobs/schema [pgpm-verify:@0.1.0] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/schema
-schemas/app_jobs/triggers/tg_update_timestamps [schemas/app_jobs/schema] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/triggers/tg_update_timestamps
-schemas/app_jobs/triggers/tg_add_job_with_row_id [schemas/app_jobs/schema] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/triggers/tg_add_job_with_row_id
-schemas/app_jobs/triggers/tg_add_job_with_row [schemas/app_jobs/schema] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/triggers/tg_add_job_with_row
-schemas/app_jobs/helpers/json_build_object_apply [schemas/app_jobs/schema] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/helpers/json_build_object_apply
-schemas/app_jobs/triggers/tg_add_job_with_fields [schemas/app_jobs/schema schemas/app_jobs/helpers/json_build_object_apply] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/triggers/tg_add_job_with_fields
-schemas/app_jobs/tables/scheduled_jobs/table [schemas/app_jobs/schema] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/tables/scheduled_jobs/table
-schemas/app_jobs/procedures/do_notify [schemas/app_jobs/schema] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/procedures/do_notify
-schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job [schemas/app_jobs/schema schemas/app_jobs/tables/scheduled_jobs/table schemas/app_jobs/procedures/do_notify] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job
-schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx [schemas/app_jobs/schema schemas/app_jobs/tables/scheduled_jobs/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx
-schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx [schemas/app_jobs/schema schemas/app_jobs/tables/scheduled_jobs/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx
-schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator [schemas/app_jobs/schema schemas/app_jobs/tables/scheduled_jobs/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator
-schemas/app_jobs/tables/jobs/table [schemas/app_jobs/schema] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/tables/jobs/table
-schemas/app_jobs/tables/jobs/triggers/timestamps [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/triggers/tg_update_timestamps] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/tables/jobs/triggers/timestamps
-schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count
-schemas/app_jobs/tables/jobs/triggers/notify_worker [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/procedures/do_notify schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/tables/jobs/triggers/notify_worker
-schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count
-schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx
-schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx
-schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator
-schemas/app_jobs/tables/job_queues/table [schemas/app_jobs/schema] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/tables/job_queues/table
-schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx [schemas/app_jobs/schema schemas/app_jobs/tables/job_queues/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx
-schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator [schemas/app_jobs/schema schemas/app_jobs/tables/job_queues/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator
-schemas/app_jobs/procedures/run_scheduled_job [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/tables/scheduled_jobs/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/procedures/run_scheduled_job
-schemas/app_jobs/procedures/reschedule_jobs [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/procedures/reschedule_jobs
-schemas/app_jobs/procedures/release_scheduled_jobs [schemas/app_jobs/schema schemas/app_jobs/tables/scheduled_jobs/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/procedures/release_scheduled_jobs
-schemas/app_jobs/procedures/release_jobs [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/tables/job_queues/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/procedures/release_jobs
-schemas/app_jobs/procedures/permanently_fail_jobs [schemas/app_jobs/schema schemas/app_jobs/tables/job_queues/table schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/procedures/permanently_fail_jobs
-schemas/app_jobs/procedures/get_scheduled_job [schemas/app_jobs/schema schemas/app_jobs/tables/scheduled_jobs/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/procedures/get_scheduled_job
-schemas/app_jobs/procedures/get_job [schemas/app_jobs/schema schemas/app_jobs/tables/job_queues/table schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/procedures/get_job
-schemas/app_jobs/procedures/fail_job [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/tables/job_queues/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/procedures/fail_job
-schemas/app_jobs/procedures/complete_jobs [schemas/app_jobs/schema schemas/app_jobs/tables/job_queues/table schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/procedures/complete_jobs
-schemas/app_jobs/procedures/complete_job [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/tables/job_queues/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/procedures/complete_job
-schemas/app_jobs/procedures/add_scheduled_job [schemas/app_jobs/schema schemas/app_jobs/tables/scheduled_jobs/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/procedures/add_scheduled_job
-schemas/app_jobs/procedures/add_job [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/tables/job_queues/table] 2025-08-26T23:57:44Z pgpm # add schemas/app_jobs/procedures/add_job
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/helpers/json_build_object_apply.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/helpers/json_build_object_apply.sql
deleted file mode 100644
index b1778898c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/helpers/json_build_object_apply.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/helpers/json_build_object_apply from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.json_build_object_apply;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/add_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/add_job.sql
deleted file mode 100644
index 44a65ae8d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/add_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/add_job from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.add_job;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/add_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/add_scheduled_job.sql
deleted file mode 100644
index 882a98f9d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/add_scheduled_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/add_scheduled_job from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.add_scheduled_job;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/complete_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/complete_job.sql
deleted file mode 100644
index 7c0ea9dfa..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/complete_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/complete_job from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.complete_job;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/complete_jobs.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/complete_jobs.sql
deleted file mode 100644
index 3db9150e3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/complete_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/complete_jobs from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.complete_jobs;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/do_notify.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/do_notify.sql
deleted file mode 100644
index 58a8138a1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/do_notify.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/do_notify from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.do_notify;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/fail_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/fail_job.sql
deleted file mode 100644
index ed96e401e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/fail_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/fail_job from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.fail_job;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/get_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/get_job.sql
deleted file mode 100644
index 469f6b4da..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/get_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/get_job from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.get_job;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/get_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/get_scheduled_job.sql
deleted file mode 100644
index f41f8fdb4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/get_scheduled_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/get_scheduled_job from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.get_scheduled_job;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/permanently_fail_jobs.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/permanently_fail_jobs.sql
deleted file mode 100644
index f0299ea82..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/permanently_fail_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/permanently_fail_jobs from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.permanently_fail_jobs;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/release_jobs.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/release_jobs.sql
deleted file mode 100644
index 8ece69ef1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/release_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/release_jobs from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.release_jobs;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/release_scheduled_jobs.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/release_scheduled_jobs.sql
deleted file mode 100644
index a16e6e9a4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/release_scheduled_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/release_scheduled_jobs from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.release_scheduled_jobs;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/reschedule_jobs.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/reschedule_jobs.sql
deleted file mode 100644
index 34a441716..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/reschedule_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/reschedule_jobs from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.reschedule_jobs;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/run_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/run_scheduled_job.sql
deleted file mode 100644
index 77886fc04..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/procedures/run_scheduled_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/procedures/run_scheduled_job from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.run_scheduled_job;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/schema.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/schema.sql
deleted file mode 100644
index 2b238d0fe..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/schema from pg
-
-BEGIN;
-
-DROP SCHEMA app_jobs;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index 06a833789..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator from pg
-
-BEGIN;
-
-REVOKE SELECT, INSERT, UPDATE, DELETE ON TABLE app_jobs.job_queues FROM administrator;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
deleted file mode 100644
index 20290a2a1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx from pg
-
-BEGIN;
-
-DROP INDEX app_jobs.job_queues_locked_by_idx;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/job_queues/table.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/job_queues/table.sql
deleted file mode 100644
index 79c62cbcc..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/job_queues/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/job_queues/table from pg
-
-BEGIN;
-
-DROP TABLE app_jobs.job_queues;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index c67b07e27..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator from pg
-
-BEGIN;
-
-REVOKE SELECT, INSERT, UPDATE, DELETE ON TABLE app_jobs.jobs FROM administrator;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
deleted file mode 100644
index f26cb13e2..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx from pg
-
-BEGIN;
-
-DROP INDEX app_jobs.jobs_locked_by_idx;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
deleted file mode 100644
index 24fa09ac6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx from pg
-
-BEGIN;
-
-DROP INDEX app_jobs.priority_run_at_id_idx;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/table.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/table.sql
deleted file mode 100644
index b4156ad3e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/jobs/table from pg
-
-BEGIN;
-
-DROP TABLE app_jobs.jobs;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
deleted file mode 100644
index bf4f88c6f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count from pg
-BEGIN;
-DROP TRIGGER decrease_job_queue_count_on_delete ON app_jobs.jobs;
-DROP TRIGGER decrease_job_queue_count_on_update ON app_jobs.jobs;
-DROP FUNCTION app_jobs.tg_decrease_job_queue_count;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
deleted file mode 100644
index 5098a6517..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count from pg
-BEGIN;
-DROP TRIGGER _500_increase_job_queue_count_on_insert ON app_jobs.jobs;
-DROP TRIGGER _500_increase_job_queue_count_on_update ON app_jobs.jobs;
-DROP FUNCTION app_jobs.tg_increase_job_queue_count;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
deleted file mode 100644
index 612a02874..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Revert schemas/app_jobs/tables/jobs/triggers/notify_worker from pg
-BEGIN;
-DROP TRIGGER _900_notify_worker ON app_jobs.jobs;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/triggers/timestamps.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
deleted file mode 100644
index 7dc2f048c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
+++ /dev/null
@@ -1,9 +0,0 @@
--- Revert schemas/app_jobs/tables/jobs/triggers/timestamps from pg
-BEGIN;
-ALTER TABLE app_jobs.jobs
- DROP COLUMN created_at;
-ALTER TABLE app_jobs.jobs
- DROP COLUMN updated_at;
-DROP TRIGGER _100_update_jobs_modtime_tg ON app_jobs.jobs;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index 0990e98d6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator from pg
-
-BEGIN;
-
-REVOKE SELECT, INSERT, UPDATE, DELETE ON TABLE app_jobs.scheduled_jobs FROM administrator;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
deleted file mode 100644
index 5ff1e6d50..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx from pg
-
-BEGIN;
-
-DROP INDEX app_jobs.scheduled_jobs_locked_by_idx;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
deleted file mode 100644
index be4b58783..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx from pg
-
-BEGIN;
-
-DROP INDEX app_jobs.scheduled_jobs_priority_id_idx;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/table.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/table.sql
deleted file mode 100644
index 3a06f0da8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/tables/scheduled_jobs/table from pg
-
-BEGIN;
-
-DROP TABLE app_jobs.scheduled_jobs;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
deleted file mode 100644
index 5c1852c7a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Revert schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job from pg
-
-BEGIN;
-
-DROP TRIGGER _900_notify_scheduled_job ON app_jobs.scheduled_jobs;
-
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_fields.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
deleted file mode 100644
index 5384edfc3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/triggers/tg_add_job_with_fields from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.trigger_job_with_fields;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_row.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_row.sql
deleted file mode 100644
index 9d6b68a2c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_row.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/triggers/tg_add_job_with_row from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.tg_add_job_with_row;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
deleted file mode 100644
index 1f0fb04be..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Revert schemas/app_jobs/triggers/tg_add_job_with_row_id from pg
-BEGIN;
-DROP FUNCTION app_jobs.tg_add_job_with_row_id;
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/triggers/tg_update_timestamps.sql b/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/triggers/tg_update_timestamps.sql
deleted file mode 100644
index 37378b148..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/revert/schemas/app_jobs/triggers/tg_update_timestamps.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/app_jobs/triggers/tg_update_timestamps from pg
-
-BEGIN;
-
-DROP FUNCTION app_jobs.tg_update_timestamps;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/sql/pgpm-jobs--0.14.0.sql b/__fixtures__/stage/extensions/@pgpm/jobs/sql/pgpm-jobs--0.14.0.sql
deleted file mode 100644
index 653cc1178..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/sql/pgpm-jobs--0.14.0.sql
+++ /dev/null
@@ -1,658 +0,0 @@
-\echo Use "CREATE EXTENSION pgpm-jobs" to load this file. \quit
-CREATE SCHEMA IF NOT EXISTS app_jobs;
-
-GRANT USAGE ON SCHEMA app_jobs TO administrator;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA app_jobs
- GRANT EXECUTE ON FUNCTIONS TO administrator;
-
-CREATE FUNCTION app_jobs.tg_update_timestamps() RETURNS trigger AS $EOFCODE$
-BEGIN
- IF TG_OP = 'INSERT' THEN
- NEW.created_at = NOW();
- NEW.updated_at = NOW();
- ELSIF TG_OP = 'UPDATE' THEN
- NEW.created_at = OLD.created_at;
- NEW.updated_at = greatest (now(), OLD.updated_at + interval '1 millisecond');
- END IF;
- RETURN NEW;
-END;
-$EOFCODE$ LANGUAGE plpgsql;
-
-CREATE FUNCTION app_jobs.tg_add_job_with_row_id() RETURNS trigger AS $EOFCODE$
-BEGIN
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- PERFORM
- app_jobs.add_job (tg_argv[0], json_build_object('id', NEW.id));
- RETURN NEW;
- END IF;
- IF (TG_OP = 'DELETE') THEN
- PERFORM
- app_jobs.add_job (tg_argv[0], json_build_object('id', OLD.id));
- RETURN OLD;
- END IF;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
-
-COMMENT ON FUNCTION app_jobs.tg_add_job_with_row_id IS 'Useful shortcut to create a job on insert or update. Pass the task name as the trigger argument, and the record id will automatically be available on the JSON payload.';
-
-CREATE FUNCTION app_jobs.tg_add_job_with_row() RETURNS trigger AS $EOFCODE$
-BEGIN
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- PERFORM
- app_jobs.add_job (TG_ARGV[0], to_json(NEW));
- RETURN NEW;
- END IF;
- IF (TG_OP = 'DELETE') THEN
- PERFORM
- app_jobs.add_job (TG_ARGV[0], to_json(OLD));
- RETURN OLD;
- END IF;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
-
-COMMENT ON FUNCTION app_jobs.tg_add_job_with_row IS 'Useful shortcut to create a job on insert or update. Pass the task name as the trigger argument, and the record data will automatically be available on the JSON payload.';
-
-CREATE FUNCTION app_jobs.json_build_object_apply(arguments text[]) RETURNS pg_catalog.json AS $EOFCODE$
-DECLARE
- arg text;
- _sql text;
- _res json;
- args text[];
-BEGIN
- _sql = 'SELECT json_build_object(';
- FOR arg IN
- SELECT
- unnest(arguments)
- LOOP
- args = array_append(args, format('''%s''', arg));
- END LOOP;
- _sql = _sql || format('%s);', array_to_string(args, ','));
- EXECUTE _sql INTO _res;
- RETURN _res;
-END;
-$EOFCODE$ LANGUAGE plpgsql;
-
-CREATE FUNCTION app_jobs.trigger_job_with_fields() RETURNS trigger AS $EOFCODE$
-DECLARE
- arg text;
- fn text;
- i int;
- args text[];
-BEGIN
- FOR i IN
- SELECT
- *
- FROM
- generate_series(1, TG_NARGS) g (i)
- LOOP
- IF (i = 1) THEN
- fn = TG_ARGV[i - 1];
- ELSE
- args = array_append(args, TG_ARGV[i - 1]);
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- EXECUTE format('SELECT ($1).%s::text', TG_ARGV[i - 1])
- USING NEW INTO arg;
- END IF;
- IF (TG_OP = 'DELETE') THEN
- EXECUTE format('SELECT ($1).%s::text', TG_ARGV[i - 1])
- USING OLD INTO arg;
- END IF;
- args = array_append(args, arg);
- END IF;
- END LOOP;
- PERFORM
- app_jobs.add_job (fn, app_jobs.json_build_object_apply (args));
- IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
- RETURN NEW;
- END IF;
- IF (TG_OP = 'DELETE') THEN
- RETURN OLD;
- END IF;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
-
-CREATE TABLE app_jobs.scheduled_jobs (
- id bigserial PRIMARY KEY,
- queue_name text DEFAULT (public.gen_random_uuid())::text,
- task_identifier text NOT NULL,
- payload pg_catalog.json DEFAULT '{}'::json NOT NULL,
- priority int DEFAULT 0 NOT NULL,
- max_attempts int DEFAULT 25 NOT NULL,
- key text,
- locked_at timestamptz,
- locked_by text,
- schedule_info pg_catalog.json NOT NULL,
- last_scheduled timestamptz,
- last_scheduled_id bigint,
- CHECK (length(key) < 513),
- CHECK (length(task_identifier) < 127),
- CHECK (max_attempts > 0),
- CHECK (length(queue_name) < 127),
- CHECK (length(locked_by) > 3),
- UNIQUE (key)
-);
-
-CREATE FUNCTION app_jobs.do_notify() RETURNS trigger AS $EOFCODE$
-BEGIN
- PERFORM
- pg_notify(TG_ARGV[0], '');
- RETURN NEW;
-END;
-$EOFCODE$ LANGUAGE plpgsql;
-
-CREATE TRIGGER _900_notify_scheduled_job
- AFTER INSERT
- ON app_jobs.scheduled_jobs
- FOR EACH ROW
- EXECUTE PROCEDURE app_jobs.do_notify('scheduled_jobs:insert');
-
-CREATE INDEX scheduled_jobs_priority_id_idx ON app_jobs.scheduled_jobs (priority, id);
-
-CREATE INDEX scheduled_jobs_locked_by_idx ON app_jobs.scheduled_jobs (locked_by);
-
-GRANT SELECT, INSERT, UPDATE, DELETE ON app_jobs.scheduled_jobs TO administrator;
-
-CREATE TABLE app_jobs.jobs (
- id bigserial PRIMARY KEY,
- queue_name text DEFAULT (public.gen_random_uuid())::text,
- task_identifier text NOT NULL,
- payload pg_catalog.json DEFAULT '{}'::json NOT NULL,
- priority int DEFAULT 0 NOT NULL,
- run_at timestamptz DEFAULT now() NOT NULL,
- attempts int DEFAULT 0 NOT NULL,
- max_attempts int DEFAULT 25 NOT NULL,
- key text,
- last_error text,
- locked_at timestamptz,
- locked_by text,
- CHECK (length(key) < 513),
- CHECK (length(task_identifier) < 127),
- CHECK (max_attempts > 0),
- CHECK (length(queue_name) < 127),
- CHECK (length(locked_by) > 3),
- UNIQUE (key)
-);
-
-ALTER TABLE app_jobs.jobs
- ADD COLUMN created_at timestamptz;
-
-ALTER TABLE app_jobs.jobs
- ALTER COLUMN created_at SET DEFAULT now();
-
-ALTER TABLE app_jobs.jobs
- ADD COLUMN updated_at timestamptz;
-
-ALTER TABLE app_jobs.jobs
- ALTER COLUMN updated_at SET DEFAULT now();
-
-CREATE TRIGGER _100_update_jobs_modtime_tg
- BEFORE INSERT OR UPDATE
- ON app_jobs.jobs
- FOR EACH ROW
- EXECUTE PROCEDURE app_jobs.tg_update_timestamps();
-
-CREATE FUNCTION app_jobs.tg_increase_job_queue_count() RETURNS trigger AS $EOFCODE$
-BEGIN
- INSERT INTO app_jobs.job_queues (queue_name, job_count)
- VALUES (NEW.queue_name, 1)
- ON CONFLICT (queue_name)
- DO UPDATE SET
- job_count = job_queues.job_count + 1;
- RETURN NEW;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE TRIGGER _500_increase_job_queue_count_on_insert
- AFTER INSERT
- ON app_jobs.jobs
- FOR EACH ROW
- WHEN (new.queue_name IS NOT NULL)
- EXECUTE PROCEDURE app_jobs.tg_increase_job_queue_count();
-
-CREATE TRIGGER _500_increase_job_queue_count_on_update
- AFTER UPDATE OF queue_name
- ON app_jobs.jobs
- FOR EACH ROW
- WHEN (new.queue_name IS DISTINCT FROM old.queue_name
- AND new.queue_name IS NOT NULL)
- EXECUTE PROCEDURE app_jobs.tg_increase_job_queue_count();
-
-CREATE TRIGGER _900_notify_worker
- AFTER INSERT
- ON app_jobs.jobs
- FOR EACH ROW
- EXECUTE PROCEDURE app_jobs.do_notify('jobs:insert');
-
-CREATE FUNCTION app_jobs.tg_decrease_job_queue_count() RETURNS trigger AS $EOFCODE$
-DECLARE
- v_new_job_count int;
-BEGIN
- UPDATE
- app_jobs.job_queues
- SET
- job_count = job_queues.job_count - 1
- WHERE
- queue_name = OLD.queue_name
- RETURNING
- job_count INTO v_new_job_count;
- IF v_new_job_count <= 0 THEN
- DELETE FROM app_jobs.job_queues
- WHERE queue_name = OLD.queue_name
- AND job_count <= 0;
- END IF;
- RETURN OLD;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE TRIGGER decrease_job_queue_count_on_delete
- AFTER DELETE
- ON app_jobs.jobs
- FOR EACH ROW
- WHEN (old.queue_name IS NOT NULL)
- EXECUTE PROCEDURE app_jobs.tg_decrease_job_queue_count();
-
-CREATE TRIGGER decrease_job_queue_count_on_update
- AFTER UPDATE OF queue_name
- ON app_jobs.jobs
- FOR EACH ROW
- WHEN (new.queue_name IS DISTINCT FROM old.queue_name
- AND old.queue_name IS NOT NULL)
- EXECUTE PROCEDURE app_jobs.tg_decrease_job_queue_count();
-
-CREATE INDEX priority_run_at_id_idx ON app_jobs.jobs (priority, run_at, id);
-
-CREATE INDEX jobs_locked_by_idx ON app_jobs.jobs (locked_by);
-
-GRANT SELECT, INSERT, UPDATE, DELETE ON app_jobs.jobs TO administrator;
-
-CREATE TABLE app_jobs.job_queues (
- queue_name text NOT NULL PRIMARY KEY,
- job_count int DEFAULT 0 NOT NULL,
- locked_at timestamptz,
- locked_by text
-);
-
-CREATE INDEX job_queues_locked_by_idx ON app_jobs.job_queues (locked_by);
-
-GRANT SELECT, INSERT, UPDATE, DELETE ON app_jobs.job_queues TO administrator;
-
-CREATE FUNCTION app_jobs.run_scheduled_job(id bigint, job_expiry interval DEFAULT '1 hours') RETURNS app_jobs.jobs AS $EOFCODE$
-DECLARE
- j app_jobs.jobs;
- last_id bigint;
- lkd_by text;
-BEGIN
- -- check last scheduled
- SELECT
- last_scheduled_id
- FROM
- app_jobs.scheduled_jobs s
- WHERE
- s.id = run_scheduled_job.id INTO last_id;
- -- if it's been scheduled check if it's been run
- IF (last_id IS NOT NULL) THEN
- SELECT
- locked_by
- FROM
- app_jobs.jobs js
- WHERE
- js.id = last_id
- AND (js.locked_at IS NULL -- never been run
- OR js.locked_at >= (NOW() - job_expiry)
- -- still running within a safe interval
-) INTO lkd_by;
- IF (FOUND) THEN
- RAISE EXCEPTION 'ALREADY_SCHEDULED';
- END IF;
- END IF;
- -- insert new job
- INSERT INTO app_jobs.jobs (queue_name, task_identifier, payload, priority, max_attempts, key)
- SELECT
- queue_name,
- task_identifier,
- payload,
- priority,
- max_attempts,
- key
- FROM
- app_jobs.scheduled_jobs s
- WHERE
- s.id = run_scheduled_job.id
- RETURNING
- * INTO j;
- -- update the scheduled job
- UPDATE
- app_jobs.scheduled_jobs s
- SET
- last_scheduled = NOW(),
- last_scheduled_id = j.id
- WHERE
- s.id = run_scheduled_job.id;
- RETURN j;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION app_jobs.reschedule_jobs(job_ids bigint[], run_at timestamptz DEFAULT NULL, priority int DEFAULT NULL, attempts int DEFAULT NULL, max_attempts int DEFAULT NULL) RETURNS SETOF app_jobs.jobs LANGUAGE sql AS $EOFCODE$
- UPDATE
- app_jobs.jobs
- SET
- run_at = coalesce(reschedule_jobs.run_at, jobs.run_at),
- priority = coalesce(reschedule_jobs.priority, jobs.priority),
- attempts = coalesce(reschedule_jobs.attempts, jobs.attempts),
- max_attempts = coalesce(reschedule_jobs.max_attempts, jobs.max_attempts)
- WHERE
- id = ANY (job_ids)
- AND (locked_by IS NULL
- OR locked_at < NOW() - interval '4 hours')
- RETURNING
- *;
-$EOFCODE$;
-
-CREATE FUNCTION app_jobs.release_scheduled_jobs(worker_id text, ids bigint[] DEFAULT NULL) RETURNS void AS $EOFCODE$
-DECLARE
-BEGIN
- -- clear the scheduled job
- UPDATE
- app_jobs.scheduled_jobs s
- SET
- locked_at = NULL,
- locked_by = NULL
- WHERE
- locked_by = worker_id
- AND (ids IS NULL
- OR s.id = ANY (ids));
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION app_jobs.release_jobs(worker_id text) RETURNS void AS $EOFCODE$
-DECLARE
-BEGIN
- -- clear the job
- UPDATE
- app_jobs.jobs
- SET
- locked_at = NULL,
- locked_by = NULL,
- attempts = GREATEST (attempts - 1, 0)
- WHERE
- locked_by = worker_id;
- -- clear the queue
- UPDATE
- app_jobs.job_queues
- SET
- locked_at = NULL,
- locked_by = NULL
- WHERE
- locked_by = worker_id;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
-
-CREATE FUNCTION app_jobs.permanently_fail_jobs(job_ids bigint[], error_message text DEFAULT NULL) RETURNS SETOF app_jobs.jobs LANGUAGE sql AS $EOFCODE$
- UPDATE
- app_jobs.jobs
- SET
- last_error = coalesce(error_message, 'Manually marked as failed'),
- attempts = max_attempts
- WHERE
- id = ANY (job_ids)
- AND (locked_by IS NULL
- OR locked_at < NOW() - interval '4 hours')
- RETURNING
- *;
-$EOFCODE$;
-
-CREATE FUNCTION app_jobs.get_scheduled_job(worker_id text, task_identifiers text[] DEFAULT NULL) RETURNS app_jobs.scheduled_jobs LANGUAGE plpgsql AS $EOFCODE$
-DECLARE
- v_job_id bigint;
- v_row app_jobs.scheduled_jobs;
-BEGIN
- IF worker_id IS NULL THEN
- RAISE exception 'INVALID_WORKER_ID';
- END IF;
- SELECT
- scheduled_jobs.id INTO v_job_id
- FROM
- app_jobs.scheduled_jobs
- WHERE (scheduled_jobs.locked_at IS NULL)
- AND (task_identifiers IS NULL
- OR task_identifier = ANY (task_identifiers))
- ORDER BY
- priority ASC,
- id ASC
- LIMIT 1
- FOR UPDATE
- SKIP LOCKED;
- IF v_job_id IS NULL THEN
- RETURN NULL;
- END IF;
- UPDATE
- app_jobs.scheduled_jobs
- SET
- locked_by = worker_id,
- locked_at = NOW()
- WHERE
- id = v_job_id
- RETURNING
- * INTO v_row;
- RETURN v_row;
-END;
-$EOFCODE$;
-
-CREATE FUNCTION app_jobs.get_job(worker_id text, task_identifiers text[] DEFAULT NULL, job_expiry interval DEFAULT '4 hours') RETURNS app_jobs.jobs LANGUAGE plpgsql AS $EOFCODE$
-DECLARE
- v_job_id bigint;
- v_queue_name text;
- v_row app_jobs.jobs;
- v_now timestamptz = now();
-BEGIN
- IF worker_id IS NULL THEN
- RAISE exception 'INVALID_WORKER_ID';
- END IF;
- SELECT
- jobs.queue_name,
- jobs.id INTO v_queue_name,
- v_job_id
- FROM
- app_jobs.jobs
- WHERE (jobs.locked_at IS NULL
- OR jobs.locked_at < (v_now - job_expiry))
- AND (jobs.queue_name IS NULL
- OR EXISTS (
- SELECT
- 1
- FROM
- app_jobs.job_queues
- WHERE
- job_queues.queue_name = jobs.queue_name
- AND (job_queues.locked_at IS NULL
- OR job_queues.locked_at < (v_now - job_expiry))
- FOR UPDATE
- SKIP LOCKED))
- AND run_at <= v_now
- AND attempts < max_attempts
- AND (task_identifiers IS NULL
- OR task_identifier = ANY (task_identifiers))
- ORDER BY
- priority ASC,
- run_at ASC,
- id ASC
- LIMIT 1
- FOR UPDATE
- SKIP LOCKED;
- IF v_job_id IS NULL THEN
- RETURN NULL;
- END IF;
- IF v_queue_name IS NOT NULL THEN
- UPDATE
- app_jobs.job_queues
- SET
- locked_by = worker_id,
- locked_at = v_now
- WHERE
- job_queues.queue_name = v_queue_name;
- END IF;
- UPDATE
- app_jobs.jobs
- SET
- attempts = attempts + 1,
- locked_by = worker_id,
- locked_at = v_now
- WHERE
- id = v_job_id
- RETURNING
- * INTO v_row;
- RETURN v_row;
-END;
-$EOFCODE$;
-
-CREATE FUNCTION app_jobs.fail_job(worker_id text, job_id bigint, error_message text) RETURNS app_jobs.jobs LANGUAGE plpgsql STRICT AS $EOFCODE$
-DECLARE
- v_row app_jobs.jobs;
-BEGIN
- UPDATE
- app_jobs.jobs
- SET
- last_error = error_message,
- run_at = greatest (now(), run_at) + (exp(least (attempts, 10))::text || ' seconds')::interval,
- locked_by = NULL,
- locked_at = NULL
- WHERE
- id = job_id
- AND locked_by = worker_id
- RETURNING
- * INTO v_row;
- IF v_row.queue_name IS NOT NULL THEN
- UPDATE
- app_jobs.job_queues
- SET
- locked_by = NULL,
- locked_at = NULL
- WHERE
- queue_name = v_row.queue_name
- AND locked_by = worker_id;
- END IF;
- RETURN v_row;
-END;
-$EOFCODE$;
-
-CREATE FUNCTION app_jobs.complete_jobs(job_ids bigint[]) RETURNS SETOF app_jobs.jobs LANGUAGE sql AS $EOFCODE$
- DELETE FROM app_jobs.jobs
- WHERE id = ANY (job_ids)
- AND (locked_by IS NULL
- OR locked_at < NOW() - interval '4 hours')
- RETURNING
- *;
-$EOFCODE$;
-
-CREATE FUNCTION app_jobs.complete_job(worker_id text, job_id bigint) RETURNS app_jobs.jobs LANGUAGE plpgsql AS $EOFCODE$
-DECLARE
- v_row app_jobs.jobs;
-BEGIN
- DELETE FROM app_jobs.jobs
- WHERE id = job_id
- RETURNING
- * INTO v_row;
- IF v_row.queue_name IS NOT NULL THEN
- UPDATE
- app_jobs.job_queues
- SET
- locked_by = NULL,
- locked_at = NULL
- WHERE
- queue_name = v_row.queue_name
- AND locked_by = worker_id;
- END IF;
- RETURN v_row;
-END;
-$EOFCODE$;
-
-CREATE FUNCTION app_jobs.add_scheduled_job(identifier text, payload pg_catalog.json DEFAULT '{}'::json, schedule_info pg_catalog.json DEFAULT '{}'::json, job_key text DEFAULT NULL, queue_name text DEFAULT NULL, max_attempts int DEFAULT 25, priority int DEFAULT 0) RETURNS app_jobs.scheduled_jobs AS $EOFCODE$
-DECLARE
- v_job app_jobs.scheduled_jobs;
-BEGIN
- IF job_key IS NOT NULL THEN
-
- -- Upsert job
- INSERT INTO app_jobs.scheduled_jobs (task_identifier, payload, queue_name, schedule_info, max_attempts, KEY, priority)
- VALUES (identifier, coalesce(payload, '{}'::json), queue_name, schedule_info, coalesce(max_attempts, 25), job_key, coalesce(priority, 0))
- ON CONFLICT (KEY)
- DO UPDATE SET
- task_identifier = excluded.task_identifier,
- payload = excluded.payload,
- queue_name = excluded.queue_name,
- max_attempts = excluded.max_attempts,
- schedule_info = excluded.schedule_info,
- priority = excluded.priority
- WHERE
- scheduled_jobs.locked_at IS NULL
- RETURNING
- * INTO v_job;
-
- -- If upsert succeeded (insert or update), return early
-
- IF NOT (v_job IS NULL) THEN
- RETURN v_job;
- END IF;
-
- -- Upsert failed -> there must be an existing scheduled job that is locked. Remove
- -- and allow a new one to be inserted
-
- DELETE FROM
- app_jobs.scheduled_jobs
- WHERE
- KEY = job_key;
- END IF;
-
- INSERT INTO app_jobs.scheduled_jobs (task_identifier, payload, queue_name, schedule_info, max_attempts, priority)
- VALUES (identifier, payload, queue_name, schedule_info, max_attempts, priority)
- RETURNING
- * INTO v_job;
- RETURN v_job;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
-
-CREATE FUNCTION app_jobs.add_job(identifier text, payload pg_catalog.json DEFAULT '{}'::json, job_key text DEFAULT NULL, queue_name text DEFAULT NULL, run_at timestamptz DEFAULT now(), max_attempts int DEFAULT 25, priority int DEFAULT 0) RETURNS app_jobs.jobs AS $EOFCODE$
-DECLARE
- v_job app_jobs.jobs;
-BEGIN
- IF job_key IS NOT NULL THEN
- -- Upsert job
- INSERT INTO app_jobs.jobs (task_identifier, payload, queue_name, run_at, max_attempts, KEY, priority)
- VALUES (identifier, coalesce(payload, '{}'::json), queue_name, coalesce(run_at, now()), coalesce(max_attempts, 25), job_key, coalesce(priority, 0))
- ON CONFLICT (KEY)
- DO UPDATE SET
- task_identifier = excluded.task_identifier, payload = excluded.payload, queue_name = excluded.queue_name, max_attempts = excluded.max_attempts, run_at = excluded.run_at, priority = excluded.priority,
- -- always reset error/retry state
- attempts = 0, last_error = NULL
- WHERE
- jobs.locked_at IS NULL
- RETURNING
- * INTO v_job;
-
- -- If upsert succeeded (insert or update), return early
-
- IF NOT (v_job IS NULL) THEN
- RETURN v_job;
- END IF;
-
- -- Upsert failed -> there must be an existing job that is locked. Remove
- -- existing key to allow a new one to be inserted, and prevent any
- -- subsequent retries by bumping attempts to the max allowed.
-
- UPDATE
- app_jobs.jobs
- SET
- KEY = NULL,
- attempts = jobs.max_attempts
- WHERE
- KEY = job_key;
- END IF;
-
- INSERT INTO app_jobs.jobs (task_identifier, payload, queue_name, run_at, max_attempts, priority)
- VALUES (identifier, payload, queue_name, run_at, max_attempts, priority)
- RETURNING
- * INTO v_job;
- RETURN v_job;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/helpers/json_build_object_apply.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/helpers/json_build_object_apply.sql
deleted file mode 100644
index e05072cfb..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/helpers/json_build_object_apply.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/helpers/json_build_object_apply on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.json_build_object_apply');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/add_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/add_job.sql
deleted file mode 100644
index c841e7d04..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/add_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/add_job on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.add_job');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/add_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/add_scheduled_job.sql
deleted file mode 100644
index a2f7d4815..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/add_scheduled_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/add_scheduled_job on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.add_scheduled_job');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/complete_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/complete_job.sql
deleted file mode 100644
index 4bd179aee..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/complete_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/complete_job on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.complete_job');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/complete_jobs.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/complete_jobs.sql
deleted file mode 100644
index aa9a5a457..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/complete_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/complete_jobs on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.complete_jobs');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/do_notify.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/do_notify.sql
deleted file mode 100644
index df64a9f48..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/do_notify.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/do_notify on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.do_notify');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/fail_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/fail_job.sql
deleted file mode 100644
index b9c65b489..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/fail_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/fail_job on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.fail_job');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/get_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/get_job.sql
deleted file mode 100644
index 86170be11..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/get_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/get_job on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.get_job');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/get_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/get_scheduled_job.sql
deleted file mode 100644
index bb7e58d7f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/get_scheduled_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/get_scheduled_job on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.get_scheduled_job');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/permanently_fail_jobs.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/permanently_fail_jobs.sql
deleted file mode 100644
index dfd8852f0..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/permanently_fail_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/permanently_fail_jobs on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.permanently_fail_jobs');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/release_jobs.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/release_jobs.sql
deleted file mode 100644
index 70004e7e1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/release_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/release_jobs on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.release_jobs');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/release_scheduled_jobs.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/release_scheduled_jobs.sql
deleted file mode 100644
index 5b9b5929a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/release_scheduled_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/release_scheduled_jobs on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.release_scheduled_jobs');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/reschedule_jobs.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/reschedule_jobs.sql
deleted file mode 100644
index 80ab587b3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/reschedule_jobs.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/reschedule_jobs on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.reschedule_jobs');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/run_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/run_scheduled_job.sql
deleted file mode 100644
index 02257023b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/procedures/run_scheduled_job.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/procedures/run_scheduled_job on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.run_scheduled_job');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/schema.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/schema.sql
deleted file mode 100644
index 5e0b19d49..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('app_jobs');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index d645d8558..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,10 +0,0 @@
--- Verify schemas/app_jobs/tables/job_queues/grants/grant_select_insert_update_delete_to_administrator on pg
-
-BEGIN;
-
- SELECT has_table_privilege('administrator', 'app_jobs.job_queues', 'SELECT');
- SELECT has_table_privilege('administrator', 'app_jobs.job_queues', 'INSERT');
- SELECT has_table_privilege('administrator', 'app_jobs.job_queues', 'UPDATE');
- SELECT has_table_privilege('administrator', 'app_jobs.job_queues', 'DELETE');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
deleted file mode 100644
index bb3786608..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/tables/job_queues/indexes/job_queues_locked_by_idx on pg
-
-BEGIN;
-
-SELECT verify_index ('app_jobs.job_queues', 'job_queues_locked_by_idx');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/job_queues/table.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/job_queues/table.sql
deleted file mode 100644
index 3a5e4b1cd..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/job_queues/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/tables/job_queues/table on pg
-
-BEGIN;
-
-SELECT verify_table ('app_jobs.job_queues');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index 6255d7164..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,10 +0,0 @@
--- Verify schemas/app_jobs/tables/jobs/grants/grant_select_insert_update_delete_to_administrator on pg
-
-BEGIN;
-
- SELECT has_table_privilege('administrator', 'app_jobs.jobs', 'SELECT');
- SELECT has_table_privilege('administrator', 'app_jobs.jobs', 'INSERT');
- SELECT has_table_privilege('administrator', 'app_jobs.jobs', 'UPDATE');
- SELECT has_table_privilege('administrator', 'app_jobs.jobs', 'DELETE');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
deleted file mode 100644
index 3635677ae..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/tables/jobs/indexes/jobs_locked_by_idx on pg
-
-BEGIN;
-
-SELECT verify_index ('app_jobs.jobs', 'jobs_locked_by_idx');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
deleted file mode 100644
index 2fc8b4ccd..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx on pg
-
-BEGIN;
-
-SELECT verify_index ('app_jobs.jobs', 'priority_run_at_id_idx');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/table.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/table.sql
deleted file mode 100644
index aaa0584da..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/tables/jobs/table on pg
-
-BEGIN;
-
-SELECT verify_table ('app_jobs.jobs');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
deleted file mode 100644
index 97b717d08..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count.sql
+++ /dev/null
@@ -1,10 +0,0 @@
--- Verify schemas/app_jobs/tables/jobs/triggers/decrease_job_queue_count on pg
-BEGIN;
-SELECT
- verify_function ('app_jobs.tg_decrease_job_queue_count');
-SELECT
- verify_trigger ('app_jobs.decrease_job_queue_count_on_delete');
-SELECT
- verify_trigger ('app_jobs.decrease_job_queue_count_on_update');
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
deleted file mode 100644
index a6e89dd17..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count.sql
+++ /dev/null
@@ -1,10 +0,0 @@
--- Verify schemas/app_jobs/tables/jobs/triggers/increase_job_queue_count on pg
-BEGIN;
-SELECT
- verify_function ('app_jobs.tg_increase_job_queue_count');
-SELECT
- verify_trigger ('app_jobs._500_increase_job_queue_count_on_insert');
-SELECT
- verify_trigger ('app_jobs._500_increase_job_queue_count_on_update');
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
deleted file mode 100644
index dc0436efa..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql
+++ /dev/null
@@ -1,6 +0,0 @@
--- Verify schemas/app_jobs/tables/jobs/triggers/notify_worker on pg
-BEGIN;
-SELECT
- verify_trigger ('app_jobs._900_notify_worker');
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/triggers/timestamps.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
deleted file mode 100644
index ed9466a37..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/jobs/triggers/timestamps.sql
+++ /dev/null
@@ -1,16 +0,0 @@
--- Verify schemas/app_jobs/tables/jobs/triggers/timestamps on pg
-BEGIN;
-SELECT
- created_at
-FROM
- app_jobs.jobs
-LIMIT 1;
-SELECT
- updated_at
-FROM
- app_jobs.jobs
-LIMIT 1;
-SELECT
- verify_trigger ('app_jobs._100_update_jobs_modtime_tg');
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
deleted file mode 100644
index c4aa4eb6c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator.sql
+++ /dev/null
@@ -1,10 +0,0 @@
--- Verify schemas/app_jobs/tables/scheduled_jobs/grants/grant_select_insert_update_delete_to_administrator on pg
-
-BEGIN;
-
- SELECT has_table_privilege('administrator', 'app_jobs.scheduled_jobs', 'SELECT');
- SELECT has_table_privilege('administrator', 'app_jobs.scheduled_jobs', 'INSERT');
- SELECT has_table_privilege('administrator', 'app_jobs.scheduled_jobs', 'UPDATE');
- SELECT has_table_privilege('administrator', 'app_jobs.scheduled_jobs', 'DELETE');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
deleted file mode 100644
index 34ee9f117..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_locked_by_idx on pg
-
-BEGIN;
-
-SELECT verify_index ('app_jobs.scheduled_jobs', 'scheduled_jobs_locked_by_idx');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
deleted file mode 100644
index d26a68223..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/tables/scheduled_jobs/indexes/scheduled_jobs_priority_id_idx on pg
-
-BEGIN;
-
-SELECT verify_index ('app_jobs.scheduled_jobs', 'scheduled_jobs_priority_id_idx');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/table.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/table.sql
deleted file mode 100644
index 065f427b1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/tables/scheduled_jobs/table on pg
-
-BEGIN;
-
-SELECT verify_table ('app_jobs.scheduled_jobs');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
deleted file mode 100644
index 599c63a3a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Verify schemas/app_jobs/tables/scheduled_jobs/triggers/notify_scheduled_job on pg
-
-BEGIN;
-
-
-SELECT verify_trigger ('app_jobs._900_notify_scheduled_job');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_fields.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
deleted file mode 100644
index 9b36e4f2e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_fields.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/triggers/tg_add_job_with_fields on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.trigger_job_with_fields');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_row.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_row.sql
deleted file mode 100644
index bdf8cc7eb..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_row.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/triggers/tg_add_job_with_row on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.tg_add_job_with_row');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
deleted file mode 100644
index 72b5a7b90..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql
+++ /dev/null
@@ -1,6 +0,0 @@
--- Verify schemas/app_jobs/triggers/tg_add_job_with_row_id on pg
-BEGIN;
-SELECT
- verify_function ('app_jobs.tg_add_job_with_row_id');
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/triggers/tg_update_timestamps.sql b/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/triggers/tg_update_timestamps.sql
deleted file mode 100644
index fd53ed3e9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jobs/verify/schemas/app_jobs/triggers/tg_update_timestamps.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/app_jobs/triggers/tg_update_timestamps on pg
-
-BEGIN;
-
-SELECT verify_function ('app_jobs.tg_update_timestamps');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/LICENSE b/__fixtures__/stage/extensions/@pgpm/jwt-claims/LICENSE
deleted file mode 100644
index 7b18c9183..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2025 Dan Lynch
-Copyright (c) 2025 Constructive
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/Makefile b/__fixtures__/stage/extensions/@pgpm/jwt-claims/Makefile
deleted file mode 100644
index 7e179c061..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-EXTENSION = pgpm-jwt-claims
-DATA = sql/pgpm-jwt-claims--0.14.0.sql
-
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/README.md b/__fixtures__/stage/extensions/@pgpm/jwt-claims/README.md
deleted file mode 100644
index 32934527a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/README.md
+++ /dev/null
@@ -1,353 +0,0 @@
-# @pgpm/jwt-claims
-
-
-
-
-
-
-
-
-
-
-
-
-
-JWT claim handling and validation functions.
-
-## Overview
-
-`@pgpm/jwt-claims` provides PostgreSQL functions for extracting and working with JWT (JSON Web Token) claims stored in PostgreSQL session variables. This package enables seamless integration between JWT-based authentication systems and PostgreSQL, allowing database functions to access user context, group memberships, IP addresses, and other JWT payload data.
-
-## Features
-
-- **User Context Functions**: Extract user ID from JWT claims
-- **Group Membership**: Access user's group IDs
-- **Request Metadata**: Get IP address and user agent from requests
-- **Database Context**: Access database ID from JWT claims
-- **Type-Safe Extraction**: Proper error handling for invalid claim values
-- **Session Variables**: Uses PostgreSQL's `current_setting()` for claim storage
-
-## Installation
-
-If you have `pgpm` installed:
-
-```bash
-pgpm install @pgpm/jwt-claims
-pgpm deploy
-```
-
-This is a quick way to get started. The sections below provide more detailed installation options.
-
-### Prerequisites
-
-```bash
-# Install pgpm CLI
-npm install -g pgpm
-
-# Start local Postgres (via Docker) and export env vars
-pgpm docker start
-eval "$(pgpm env)"
-```
-
-> **Tip:** Already running Postgres? Skip the Docker step and just export your `PG*` environment variables.
-
-### **Add to an Existing Package**
-
-```bash
-# 1. Install the package
-pgpm install @pgpm/jwt-claims
-
-# 2. Deploy locally
-pgpm deploy
-```
-
-### **Add to a New Project**
-
-```bash
-# 1. Create a workspace
-pgpm init workspace
-
-# 2. Create your first module
-cd my-workspace
-pgpm init
-
-# 3. Install a package
-cd packages/my-module
-pgpm install @pgpm/jwt-claims
-
-# 4. Deploy everything
-pgpm deploy --createdb --database mydb1
-```
-
-## Core Functions
-
-### jwt_public.current_user_id()
-Extracts the user ID from JWT claims.
-
-**Returns:** `uuid` - The current user's ID, or NULL if not set
-
-**Usage:**
-```sql
-SELECT jwt_public.current_user_id();
-```
-
-**JWT Claim:** `jwt.claims.user_id`
-
-### jwt_public.current_group_ids()
-Extracts the user's group IDs from JWT claims.
-
-**Returns:** `uuid[]` - Array of group IDs, or empty array if not set
-
-**Usage:**
-```sql
-SELECT jwt_public.current_group_ids();
-```
-
-**JWT Claim:** `jwt.claims.group_ids`
-
-### jwt_public.current_ip_address()
-Extracts the client's IP address from JWT claims.
-
-**Returns:** `text` - The client's IP address, or NULL if not set
-
-**Usage:**
-```sql
-SELECT jwt_public.current_ip_address();
-```
-
-**JWT Claim:** `jwt.claims.ip_address`
-
-### jwt_public.current_user_agent()
-Extracts the client's user agent from JWT claims.
-
-**Returns:** `text` - The client's user agent string, or NULL if not set
-
-**Usage:**
-```sql
-SELECT jwt_public.current_user_agent();
-```
-
-**JWT Claim:** `jwt.claims.user_agent`
-
-### jwt_private.current_database_id()
-Extracts the database ID from JWT claims (private function).
-
-**Returns:** `uuid` - The database ID, or NULL if not set
-
-**Usage:**
-```sql
-SELECT jwt_private.current_database_id();
-```
-
-**JWT Claim:** `jwt.claims.database_id`
-
-## Usage
-
-### Setting JWT Claims
-
-JWT claims are set as PostgreSQL session variables, typically by your authentication middleware:
-
-```sql
--- Set user ID claim
-SELECT set_config('jwt.claims.user_id', 'user-uuid-here', false);
-
--- Set group IDs claim
-SELECT set_config('jwt.claims.group_ids', '{uuid1,uuid2,uuid3}', false);
-
--- Set IP address claim
-SELECT set_config('jwt.claims.ip_address', '192.168.1.1', false);
-
--- Set user agent claim
-SELECT set_config('jwt.claims.user_agent', 'Mozilla/5.0...', false);
-
--- Set database ID claim
-SELECT set_config('jwt.claims.database_id', 'database-uuid-here', false);
-```
-
-### Using Claims in Row-Level Security
-
-```sql
--- Enable RLS on a table
-ALTER TABLE posts ENABLE ROW LEVEL SECURITY;
-
--- Users can only see their own posts
-CREATE POLICY user_posts ON posts
- FOR ALL
- TO authenticated
- USING (user_id = jwt_public.current_user_id());
-
--- Users can see posts from their groups
-CREATE POLICY group_posts ON posts
- FOR SELECT
- TO authenticated
- USING (group_id = ANY(jwt_public.current_group_ids()));
-```
-
-### Using Claims in Functions
-
-```sql
--- Function that uses current user ID
-CREATE FUNCTION create_post(title text, content text)
-RETURNS uuid AS $$
-DECLARE
- new_post_id uuid;
-BEGIN
- INSERT INTO posts (user_id, title, content)
- VALUES (jwt_public.current_user_id(), title, content)
- RETURNING id INTO new_post_id;
-
- RETURN new_post_id;
-END;
-$$ LANGUAGE plpgsql;
-
--- Function that checks group membership
-CREATE FUNCTION user_in_group(group_id uuid)
-RETURNS boolean AS $$
-BEGIN
- RETURN group_id = ANY(jwt_public.current_group_ids());
-END;
-$$ LANGUAGE plpgsql;
-```
-
-### Audit Logging with JWT Claims
-
-```sql
--- Audit log table
-CREATE TABLE audit_log (
- id serial PRIMARY KEY,
- user_id uuid,
- ip_address text,
- user_agent text,
- action text,
- timestamp timestamptz DEFAULT now()
-);
-
--- Trigger function for audit logging
-CREATE FUNCTION log_action()
-RETURNS trigger AS $$
-BEGIN
- INSERT INTO audit_log (user_id, ip_address, user_agent, action)
- VALUES (
- jwt_public.current_user_id(),
- jwt_public.current_ip_address(),
- jwt_public.current_user_agent(),
- TG_OP || ' on ' || TG_TABLE_NAME
- );
- RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
--- Add trigger to table
-CREATE TRIGGER audit_posts
-AFTER INSERT OR UPDATE OR DELETE ON posts
-FOR EACH ROW
-EXECUTE FUNCTION log_action();
-```
-
-### Multi-Tenancy with Database ID
-
-```sql
--- Filter data by database ID
-CREATE FUNCTION get_tenant_data()
-RETURNS SETOF my_table AS $$
-BEGIN
- RETURN QUERY
- SELECT * FROM my_table
- WHERE database_id = jwt_private.current_database_id();
-END;
-$$ LANGUAGE plpgsql;
-```
-
-## Integration with Other Packages
-
-### With @pgpm/stamps
-
-The stamps package uses JWT claims for automatic user tracking:
-
-```sql
--- Stamps automatically uses jwt_public.current_user_id()
--- for created_by and updated_by columns
-```
-
-### With @pgpm/achievements
-
-The achievements package uses JWT claims for user context:
-
-```sql
--- Check current user's achievements
-SELECT * FROM status_public.steps_required('newbie');
--- Uses jwt_public.current_user_id() internally
-```
-
-### With PGPM roles
-
-Ensure the standard roles exist (pgpm admin-users bootstrap), then combine JWT claims with role-based access:
-
-```sql
--- Set role based on JWT claim
-CREATE FUNCTION set_user_role()
-RETURNS void AS $$
-DECLARE
- user_role text;
-BEGIN
- user_role := current_setting('jwt.claims.role', true);
-
- IF user_role = 'admin' THEN
- SET LOCAL ROLE administrator;
- ELSIF user_role = 'user' THEN
- SET LOCAL ROLE authenticated;
- ELSE
- SET LOCAL ROLE anonymous;
- END IF;
-END;
-$$ LANGUAGE plpgsql;
-```
-
-## Error Handling
-
-All functions include error handling for invalid claim values:
-
-```sql
--- If jwt.claims.user_id is not a valid UUID
-SELECT jwt_public.current_user_id();
--- Returns NULL and raises NOTICE: 'Invalid UUID value'
-
--- If jwt.claims.group_ids is not a valid UUID array
-SELECT jwt_public.current_group_ids();
--- Returns empty array [] and raises NOTICE: 'Invalid UUID value'
-```
-
-## Security Considerations
-
-1. **Trust the Source**: Only set JWT claims from trusted authentication middleware
-2. **Validate Claims**: Always validate JWT signatures before setting claims
-3. **Session Scope**: Claims are session-scoped and don't persist across connections
-4. **No Direct Access**: Users cannot directly modify session variables in most configurations
-5. **Use HTTPS**: Always transmit JWTs over HTTPS to prevent interception
-
-## Dependencies
-
-- `@pgpm/types`: Core PostgreSQL types
-- `@pgpm/verify`: Verification utilities
-
-## Testing
-
-```bash
-pnpm test
-```
-
-## Related Tooling
-
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
-* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
-* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
-* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
-
-## Disclaimer
-
-AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED "AS IS", AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND.
-
-No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value.
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/__tests__/__snapshots__/jwt.test.ts.snap b/__fixtures__/stage/extensions/@pgpm/jwt-claims/__tests__/__snapshots__/jwt.test.ts.snap
deleted file mode 100644
index 6b4724ea8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/__tests__/__snapshots__/jwt.test.ts.snap
+++ /dev/null
@@ -1,35 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`get values 1`] = `
-{
- "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
-}
-`;
-
-exports[`get values 2`] = `
-{
- "ip_address": "127.0.0.1",
-}
-`;
-
-exports[`get values 3`] = `
-{
- "database_id": "44744c94-93cf-425a-b524-ce6f1466e327",
-}
-`;
-
-exports[`get values 4`] = `
-{
- "group_ids": [
- "f12c75c2-47d5-43fd-9223-d42d08f51942",
- "d96d32b4-e819-4cb1-8a27-e27e763e0d7f",
- "c8a27b31-1d40-4f40-9cb0-e96a44e68072",
- ],
-}
-`;
-
-exports[`get values 5`] = `
-{
- "user_id": "b9d22af1-62c7-43a5-b8c4-50630bbd4962",
-}
-`;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/__tests__/jwt.test.ts b/__fixtures__/stage/extensions/@pgpm/jwt-claims/__tests__/jwt.test.ts
deleted file mode 100644
index 854464d92..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/__tests__/jwt.test.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import { getConnections, PgTestClient } from 'pgsql-test';
-
-let pg: PgTestClient;
-let teardown: () => Promise;
-
-const jwt = {
- user_id: 'b9d22af1-62c7-43a5-b8c4-50630bbd4962',
- database_id: '44744c94-93cf-425a-b524-ce6f1466e327',
- group_ids: [
- 'f12c75c2-47d5-43fd-9223-d42d08f51942',
- 'd96d32b4-e819-4cb1-8a27-e27e763e0d7f',
- 'c8a27b31-1d40-4f40-9cb0-e96a44e68072'
- ]
-};
-
-beforeAll(async () => {
- ({ pg, teardown } = await getConnections());
-});
-
-afterAll(async () => {
- await teardown?.();
-});
-
-it('get values', async () => {
- await pg.any(`BEGIN`);
- await pg.any(
- `SELECT
- set_config('jwt.claims.user_agent', $1, true),
- set_config('jwt.claims.ip_address', $2, true),
- set_config('jwt.claims.database_id', $3, true),
- set_config('jwt.claims.user_id', $4, true),
- set_config('jwt.claims.group_ids', $5, true)
- `,
- [
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
- '127.0.0.1',
- jwt.database_id,
- jwt.user_id,
- `{${jwt.group_ids.join(',')}}`
- ]
- );
-
- const { user_agent } = await pg.one(
- `select jwt_public.current_user_agent() as user_agent`
- );
- const { ip_address } = await pg.one(
- `select jwt_public.current_ip_address() as ip_address`
- );
- const { database_id } = await pg.one(
- `select jwt_private.current_database_id() as database_id`
- );
- const { group_ids } = await pg.one(
- `select jwt_public.current_group_ids() as group_ids`
- );
- const { user_id } = await pg.one(
- `select jwt_public.current_user_id() as user_id`
- );
- await pg.any(`ROLLBACK`);
-
- expect({ user_agent }).toMatchSnapshot();
- expect({ ip_address }).toMatchSnapshot();
- expect({ database_id }).toMatchSnapshot();
- expect({ group_ids }).toMatchSnapshot();
- expect({ user_id }).toMatchSnapshot();
-});
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/ip_address.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/ip_address.sql
deleted file mode 100644
index 90d60d7a8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/ip_address.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- Deploy schemas/ctx/procedures/ip_address to pg
-
--- requires: schemas/ctx/schema
-
-BEGIN;
-
-CREATE FUNCTION ctx.ip_address()
- RETURNS inet
-AS $$
- SELECT nullif(current_setting('jwt.claims.ip_address', true), '')::inet;
-$$
-LANGUAGE 'sql' STABLE;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/origin.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/origin.sql
deleted file mode 100644
index d3f81aa34..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/origin.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- Deploy schemas/ctx/procedures/origin to pg
-
--- requires: schemas/ctx/schema
-
-BEGIN;
-
-CREATE FUNCTION ctx.origin()
- RETURNS origin
-AS $$
- SELECT nullif(current_setting('jwt.claims.origin', true), '')::origin;
-$$
-LANGUAGE 'sql' STABLE;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/security_definer.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/security_definer.sql
deleted file mode 100644
index 88b679e52..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/security_definer.sql
+++ /dev/null
@@ -1,24 +0,0 @@
--- Deploy schemas/ctx/procedures/security_definer to pg
-
--- requires: schemas/ctx/schema
-
-BEGIN;
-
-DO $LQLMIGRATION$
- DECLARE
- BEGIN
- EXECUTE format('CREATE FUNCTION ctx.security_definer() returns text as $FUNC$
- SELECT ''%s'';
-$FUNC$
-LANGUAGE ''sql'';', current_user);
- EXECUTE format('CREATE FUNCTION ctx.is_security_definer() returns bool as $FUNC$
- SELECT ''%s'' = current_user;
-$FUNC$
-LANGUAGE ''sql'';', current_user);
- END;
-$LQLMIGRATION$;
-GRANT EXECUTE ON FUNCTION ctx.security_definer() TO PUBLIC;
-GRANT EXECUTE ON FUNCTION ctx.is_security_definer() TO PUBLIC;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/user_agent.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/user_agent.sql
deleted file mode 100644
index 023c33644..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/user_agent.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- Deploy schemas/ctx/procedures/user_agent to pg
-
--- requires: schemas/ctx/schema
-
-BEGIN;
-
-CREATE FUNCTION ctx.user_agent()
- RETURNS text
-AS $$
- SELECT nullif(current_setting('jwt.claims.user_agent', true), '');
-$$
-LANGUAGE 'sql' STABLE;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/user_id.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/user_id.sql
deleted file mode 100644
index b2bca9635..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/procedures/user_id.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- Deploy schemas/ctx/procedures/user_id to pg
-
--- requires: schemas/ctx/schema
-
-BEGIN;
-
-CREATE FUNCTION ctx.user_id()
- RETURNS uuid
-AS $$
- SELECT nullif(current_setting('jwt.claims.user_id', true), '')::uuid;
-$$
-LANGUAGE 'sql' STABLE;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/schema.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/schema.sql
deleted file mode 100644
index c2446b831..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/ctx/schema.sql
+++ /dev/null
@@ -1,16 +0,0 @@
--- Deploy schemas/ctx/schema to pg
-
-
-BEGIN;
-
-CREATE SCHEMA ctx;
-
-GRANT USAGE ON SCHEMA ctx
-TO authenticated, anonymous;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA ctx
-GRANT EXECUTE ON FUNCTIONS
-TO authenticated;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_private/procedures/current_database_id.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_private/procedures/current_database_id.sql
deleted file mode 100644
index b8d2914bc..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_private/procedures/current_database_id.sql
+++ /dev/null
@@ -1,30 +0,0 @@
--- Deploy schemas/jwt_private/procedures/current_database_id to pg
-
--- requires: schemas/jwt_private/schema
-
-BEGIN;
-
-CREATE FUNCTION jwt_private.current_database_id()
- RETURNS uuid
-AS $$
-DECLARE
- v_identifier_id uuid;
-BEGIN
- IF current_setting('jwt.claims.database_id', TRUE)
- IS NOT NULL THEN
- BEGIN
- v_identifier_id = current_setting('jwt.claims.database_id', TRUE)::uuid;
- EXCEPTION
- WHEN OTHERS THEN
- RAISE NOTICE 'Invalid UUID value';
- RETURN NULL;
- END;
- RETURN v_identifier_id;
- ELSE
- RETURN NULL;
- END IF;
-END;
-$$
-LANGUAGE 'plpgsql' STABLE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_private/procedures/current_token_id.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_private/procedures/current_token_id.sql
deleted file mode 100644
index ece930b31..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_private/procedures/current_token_id.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- Deploy schemas/jwt_private/procedures/current_token_id to pg
-
--- requires: schemas/jwt_private/schema
-
-BEGIN;
-
-CREATE FUNCTION jwt_private.current_token_id()
- RETURNS uuid
-AS $$
- SELECT nullif(current_setting('jwt.claims.token_id', true), '')::uuid;
-$$
-LANGUAGE 'sql' STABLE;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_private/schema.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_private/schema.sql
deleted file mode 100644
index d5d3c4a1c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_private/schema.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- Deploy schemas/jwt_private/schema to pg
-
-
-BEGIN;
-
-CREATE SCHEMA jwt_private;
-
-GRANT USAGE ON SCHEMA jwt_private
-TO authenticated, anonymous;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA jwt_private
-GRANT EXECUTE ON FUNCTIONS
-TO authenticated;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_group_ids.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_group_ids.sql
deleted file mode 100644
index 2e58944b8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_group_ids.sql
+++ /dev/null
@@ -1,30 +0,0 @@
--- Deploy schemas/jwt_public/procedures/current_group_ids to pg
-
--- requires: schemas/jwt_public/schema
-
-BEGIN;
-
-CREATE FUNCTION jwt_public.current_group_ids()
- RETURNS uuid[]
-AS $$
-DECLARE
- v_identifier_ids uuid[];
-BEGIN
- IF current_setting('jwt.claims.group_ids', TRUE)
- IS NOT NULL THEN
- BEGIN
- v_identifier_ids = current_setting('jwt.claims.group_ids', TRUE)::uuid[];
- EXCEPTION
- WHEN OTHERS THEN
- RAISE NOTICE 'Invalid UUID value';
- RETURN ARRAY[]::uuid[];
- END;
- RETURN v_identifier_ids;
- ELSE
- RETURN ARRAY[]::uuid[];
- END IF;
-END;
-$$
-LANGUAGE 'plpgsql' STABLE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_ip_address.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_ip_address.sql
deleted file mode 100644
index 351ccf29d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_ip_address.sql
+++ /dev/null
@@ -1,30 +0,0 @@
--- Deploy schemas/jwt_public/procedures/current_ip_address to pg
-
--- requires: schemas/jwt_public/schema
-
-BEGIN;
-
-CREATE FUNCTION jwt_public.current_ip_address()
- RETURNS inet
-AS $$
-DECLARE
- v_ip_addr inet;
-BEGIN
- IF current_setting('jwt.claims.ip_address', TRUE)
- IS NOT NULL THEN
- BEGIN
- v_ip_addr = trim(current_setting('jwt.claims.ip_address', TRUE))::inet;
- EXCEPTION
- WHEN OTHERS THEN
- RAISE NOTICE 'Invalid IP';
- RETURN NULL;
- END;
- RETURN v_ip_addr;
- ELSE
- RETURN NULL;
- END IF;
-END;
-$$
-LANGUAGE 'plpgsql' STABLE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_origin.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_origin.sql
deleted file mode 100644
index bbd2ae285..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_origin.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- Deploy schemas/jwt_public/procedures/current_origin to pg
-
--- requires: schemas/jwt_public/schema
-
-BEGIN;
-
-CREATE FUNCTION jwt_public.current_origin()
- RETURNS origin
-AS $$
- SELECT nullif(current_setting('jwt.claims.origin', true), '')::origin;
-$$
-LANGUAGE 'sql' STABLE;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_user_agent.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_user_agent.sql
deleted file mode 100644
index ac7ca382a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_user_agent.sql
+++ /dev/null
@@ -1,30 +0,0 @@
--- Deploy schemas/jwt_public/procedures/current_user_agent to pg
-
--- requires: schemas/jwt_public/schema
-
-BEGIN;
-
-CREATE FUNCTION jwt_public.current_user_agent()
- RETURNS text
-AS $$
-DECLARE
- v_uagent text;
-BEGIN
- IF current_setting('jwt.claims.user_agent', TRUE)
- IS NOT NULL THEN
- BEGIN
- v_uagent = current_setting('jwt.claims.user_agent', TRUE);
- EXCEPTION
- WHEN OTHERS THEN
- RAISE NOTICE 'Invalid UserAgent';
- RETURN NULL;
- END;
- RETURN v_uagent;
- ELSE
- RETURN NULL;
- END IF;
-END;
-$$
-LANGUAGE 'plpgsql' STABLE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_user_id.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_user_id.sql
deleted file mode 100644
index 8efc5915c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/procedures/current_user_id.sql
+++ /dev/null
@@ -1,30 +0,0 @@
--- Deploy schemas/jwt_public/procedures/current_user_id to pg
-
--- requires: schemas/jwt_public/schema
-
-BEGIN;
-
-CREATE FUNCTION jwt_public.current_user_id()
- RETURNS uuid
-AS $$
-DECLARE
- v_identifier_id uuid;
-BEGIN
- IF current_setting('jwt.claims.user_id', TRUE)
- IS NOT NULL THEN
- BEGIN
- v_identifier_id = current_setting('jwt.claims.user_id', TRUE)::uuid;
- EXCEPTION
- WHEN OTHERS THEN
- RAISE NOTICE 'Invalid UUID value';
- RETURN NULL;
- END;
- RETURN v_identifier_id;
- ELSE
- RETURN NULL;
- END IF;
-END;
-$$
-LANGUAGE 'plpgsql' STABLE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/schema.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/schema.sql
deleted file mode 100644
index 84caddc04..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/deploy/schemas/jwt_public/schema.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- Deploy schemas/jwt_public/schema to pg
-
-
-BEGIN;
-
-CREATE SCHEMA jwt_public;
-
-GRANT USAGE ON SCHEMA jwt_public
-TO authenticated, anonymous;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA jwt_public
-GRANT EXECUTE ON FUNCTIONS
-TO authenticated;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/jest.config.js b/__fixtures__/stage/extensions/@pgpm/jwt-claims/jest.config.js
deleted file mode 100644
index e20e7efb5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/jest.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @type {import('ts-jest').JestConfigWithTsJest} */
-module.exports = {
- preset: 'ts-jest',
- testEnvironment: 'node',
-
- // Match both __tests__ and colocated test files
- testMatch: ['**/?(*.)+(test|spec).{ts,tsx,js,jsx}'],
-
- // Ignore build artifacts and type declarations
- testPathIgnorePatterns: ['/dist/', '\\.d\\.ts$'],
- modulePathIgnorePatterns: ['/dist/'],
- watchPathIgnorePatterns: ['/dist/'],
-
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
-};
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/package.json b/__fixtures__/stage/extensions/@pgpm/jwt-claims/package.json
deleted file mode 100644
index 5b7cdb93b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/package.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "name": "@pgpm/jwt-claims",
- "version": "0.15.2",
- "description": "JWT claim handling and validation functions",
- "author": "Dan Lynch ",
- "contributors": [
- "Constructive "
- ],
- "keywords": [
- "postgresql",
- "pgpm",
- "jwt",
- "authentication"
- ],
- "publishConfig": {
- "access": "public"
- },
- "scripts": {
- "bundle": "pgpm package",
- "test": "jest",
- "test:watch": "jest --watch"
- },
- "devDependencies": {
- "pgpm": "^1.0.0"
- },
- "dependencies": {
- "@pgpm/types": "0.15.2",
- "@pgpm/verify": "0.15.2"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/constructive-io/pgpm-modules"
- },
- "homepage": "https://github.com/constructive-io/pgpm-modules",
- "bugs": {
- "url": "https://github.com/constructive-io/pgpm-modules/issues"
- }
-}
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/pgpm-jwt-claims.control b/__fixtures__/stage/extensions/@pgpm/jwt-claims/pgpm-jwt-claims.control
deleted file mode 100644
index 26f8703ea..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/pgpm-jwt-claims.control
+++ /dev/null
@@ -1,8 +0,0 @@
-# pgpm-jwt-claims extension
-comment = 'pgpm-jwt-claims extension'
-default_version = '0.14.0'
-module_pathname = '$libdir/pgpm-jwt-claims'
-requires = 'plpgsql,uuid-ossp,pgpm-types,pgpm-verify'
-relocatable = false
-superuser = false
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/pgpm.plan b/__fixtures__/stage/extensions/@pgpm/jwt-claims/pgpm.plan
deleted file mode 100644
index 675cb374f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/pgpm.plan
+++ /dev/null
@@ -1,19 +0,0 @@
-%syntax-version=1.0.0
-%project=pgpm-jwt-claims
-%uri=pgpm-jwt-claims
-
-schemas/ctx/schema 2017-08-11T08:11:51Z skitch # add schemas/ctx/schema
-schemas/ctx/procedures/ip_address [schemas/ctx/schema] 2017-08-11T08:11:51Z skitch # add schemas/ctx/procedures/ip_address
-schemas/ctx/procedures/origin [schemas/ctx/schema] 2017-08-11T08:11:51Z skitch # add schemas/ctx/procedures/origin
-schemas/ctx/procedures/user_agent [schemas/ctx/schema] 2017-08-11T08:11:51Z skitch # add schemas/ctx/procedures/user_agent
-schemas/ctx/procedures/user_id [schemas/ctx/schema] 2017-08-11T08:11:51Z skitch # add schemas/ctx/procedures/user_id
-schemas/ctx/procedures/security_definer [schemas/ctx/schema] 2021-04-20T04:04:08Z Dan Lynch # add schemas/ctx/procedures/security_definer
-schemas/jwt_public/schema 2020-12-17T06:47:29Z Dan Lynch # add schemas/jwt_public/schema
-schemas/jwt_public/procedures/current_user_id [schemas/jwt_public/schema] 2020-12-17T06:48:56Z Dan Lynch # add schemas/jwt_public/procedures/current_user_id
-schemas/jwt_public/procedures/current_ip_address [schemas/jwt_public/schema] 2020-12-17T23:19:17Z Dan Lynch # add schemas/jwt_public/procedures/current_ip_address
-schemas/jwt_public/procedures/current_user_agent [schemas/jwt_public/schema] 2020-12-17T23:20:04Z Dan Lynch # add schemas/jwt_public/procedures/current_user_agent
-schemas/jwt_public/procedures/current_origin [schemas/jwt_public/schema] 2017-08-11T08:11:51Z skitch # add schemas/jwt_public/procedures/current_origin
-schemas/jwt_public/procedures/current_group_ids [schemas/jwt_public/schema] 2020-12-17T23:30:50Z Dan Lynch # add schemas/jwt_public/procedures/current_group_ids
-schemas/jwt_private/schema 2020-12-17T06:47:34Z Dan Lynch # add schemas/jwt_private/schema
-schemas/jwt_private/procedures/current_database_id [schemas/jwt_private/schema] 2020-12-17T23:22:28Z Dan Lynch # add schemas/jwt_private/procedures/current_database_id
-schemas/jwt_private/procedures/current_token_id [schemas/jwt_private/schema] 2017-08-11T08:11:51Z skitch # add schemas/jwt_private/procedures/current_token_id
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/ip_address.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/ip_address.sql
deleted file mode 100644
index b23230c09..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/ip_address.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Revert schemas/ctx/procedures/ip_address from pg
-
-BEGIN;
-
-DROP FUNCTION ctx.ip_address;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/origin.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/origin.sql
deleted file mode 100644
index e04aae2b5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/origin.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Revert schemas/ctx/procedures/origin from pg
-
-BEGIN;
-
-DROP FUNCTION ctx.origin;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/security_definer.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/security_definer.sql
deleted file mode 100644
index dbf6868db..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/security_definer.sql
+++ /dev/null
@@ -1,9 +0,0 @@
--- Revert schemas/ctx/procedures/security_definer from pg
-
-BEGIN;
-
-DROP FUNCTION ctx.security_definer;
-DROP FUNCTION ctx.is_security_definer;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/user_agent.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/user_agent.sql
deleted file mode 100644
index f16ddc0c6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/user_agent.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Revert schemas/ctx/procedures/user_agent from pg
-
-BEGIN;
-
-DROP FUNCTION ctx.user_agent;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/user_id.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/user_id.sql
deleted file mode 100644
index b53d2c616..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/procedures/user_id.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Revert schemas/ctx/procedures/user_id from pg
-
-BEGIN;
-
-DROP FUNCTION ctx.user_id;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/schema.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/schema.sql
deleted file mode 100644
index 2244b09b7..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/ctx/schema.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Revert schemas/ctx/schema from pg
-
-BEGIN;
-
-DROP SCHEMA ctx;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_private/procedures/current_database_id.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_private/procedures/current_database_id.sql
deleted file mode 100644
index 815e6da1a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_private/procedures/current_database_id.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/jwt_private/procedures/current_database_id from pg
-
-BEGIN;
-
-DROP FUNCTION jwt_private.current_database_id;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_private/procedures/current_token_id.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_private/procedures/current_token_id.sql
deleted file mode 100644
index f2689e67e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_private/procedures/current_token_id.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Revert schemas/jwt_private/procedures/current_token_id from pg
-
-BEGIN;
-
-DROP FUNCTION jwt_private.current_token_id;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_private/schema.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_private/schema.sql
deleted file mode 100644
index 4accd2db1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_private/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/jwt_private/schema from pg
-
-BEGIN;
-
-DROP SCHEMA jwt_private;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_group_ids.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_group_ids.sql
deleted file mode 100644
index e28f58158..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_group_ids.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/jwt_public/procedures/current_group_ids from pg
-
-BEGIN;
-
-DROP FUNCTION jwt_public.current_group_ids;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_ip_address.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_ip_address.sql
deleted file mode 100644
index 297da8dc4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_ip_address.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/jwt_public/procedures/current_ip_address from pg
-
-BEGIN;
-
-DROP FUNCTION jwt_public.current_ip_address;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_origin.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_origin.sql
deleted file mode 100644
index 98f18faa8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_origin.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Revert schemas/jwt_public/procedures/current_origin from pg
-
-BEGIN;
-
-DROP FUNCTION jwt_public.current_origin;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_user_agent.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_user_agent.sql
deleted file mode 100644
index 864e219c3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_user_agent.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/jwt_public/procedures/current_user_agent from pg
-
-BEGIN;
-
-DROP FUNCTION jwt_public.current_user_agent;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_user_id.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_user_id.sql
deleted file mode 100644
index 42b48f9ae..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/procedures/current_user_id.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/jwt_public/procedures/current_user_id from pg
-
-BEGIN;
-
-DROP FUNCTION jwt_public.current_user_id;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/schema.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/schema.sql
deleted file mode 100644
index 5a221559b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/revert/schemas/jwt_public/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/jwt_public/schema from pg
-
-BEGIN;
-
-DROP SCHEMA jwt_public;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/sql/pgpm-jwt-claims--0.14.0.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/sql/pgpm-jwt-claims--0.14.0.sql
deleted file mode 100644
index e58c67354..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/sql/pgpm-jwt-claims--0.14.0.sql
+++ /dev/null
@@ -1,163 +0,0 @@
-\echo Use "CREATE EXTENSION pgpm-jwt-claims" to load this file. \quit
-CREATE SCHEMA ctx;
-
-GRANT USAGE ON SCHEMA ctx TO authenticated, anonymous;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA ctx
- GRANT EXECUTE ON FUNCTIONS TO authenticated;
-
-CREATE FUNCTION ctx.ip_address() RETURNS inet AS $EOFCODE$
- SELECT nullif(current_setting('jwt.claims.ip_address', true), '')::inet;
-$EOFCODE$ LANGUAGE sql STABLE;
-
-CREATE FUNCTION ctx.origin() RETURNS origin AS $EOFCODE$
- SELECT nullif(current_setting('jwt.claims.origin', true), '')::origin;
-$EOFCODE$ LANGUAGE sql STABLE;
-
-CREATE FUNCTION ctx.user_agent() RETURNS text AS $EOFCODE$
- SELECT nullif(current_setting('jwt.claims.user_agent', true), '');
-$EOFCODE$ LANGUAGE sql STABLE;
-
-CREATE FUNCTION ctx.user_id() RETURNS uuid AS $EOFCODE$
- SELECT nullif(current_setting('jwt.claims.user_id', true), '')::uuid;
-$EOFCODE$ LANGUAGE sql STABLE;
-
-DO $EOFCODE$
- DECLARE
- BEGIN
- EXECUTE format('CREATE FUNCTION ctx.security_definer() returns text as $FUNC$
- SELECT ''%s'';
-$FUNC$
-LANGUAGE ''sql'';', current_user);
- EXECUTE format('CREATE FUNCTION ctx.is_security_definer() returns bool as $FUNC$
- SELECT ''%s'' = current_user;
-$FUNC$
-LANGUAGE ''sql'';', current_user);
- END;
-$EOFCODE$;
-
-GRANT EXECUTE ON FUNCTION ctx.security_definer() TO PUBLIC;
-
-GRANT EXECUTE ON FUNCTION ctx.is_security_definer() TO PUBLIC;
-
-CREATE SCHEMA jwt_public;
-
-GRANT USAGE ON SCHEMA jwt_public TO authenticated, anonymous;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA jwt_public
- GRANT EXECUTE ON FUNCTIONS TO authenticated;
-
-CREATE FUNCTION jwt_public.current_user_id() RETURNS uuid AS $EOFCODE$
-DECLARE
- v_identifier_id uuid;
-BEGIN
- IF current_setting('jwt.claims.user_id', TRUE)
- IS NOT NULL THEN
- BEGIN
- v_identifier_id = current_setting('jwt.claims.user_id', TRUE)::uuid;
- EXCEPTION
- WHEN OTHERS THEN
- RAISE NOTICE 'Invalid UUID value';
- RETURN NULL;
- END;
- RETURN v_identifier_id;
- ELSE
- RETURN NULL;
- END IF;
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-CREATE FUNCTION jwt_public.current_ip_address() RETURNS inet AS $EOFCODE$
-DECLARE
- v_ip_addr inet;
-BEGIN
- IF current_setting('jwt.claims.ip_address', TRUE)
- IS NOT NULL THEN
- BEGIN
- v_ip_addr = trim(current_setting('jwt.claims.ip_address', TRUE))::inet;
- EXCEPTION
- WHEN OTHERS THEN
- RAISE NOTICE 'Invalid IP';
- RETURN NULL;
- END;
- RETURN v_ip_addr;
- ELSE
- RETURN NULL;
- END IF;
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-CREATE FUNCTION jwt_public.current_user_agent() RETURNS text AS $EOFCODE$
-DECLARE
- v_uagent text;
-BEGIN
- IF current_setting('jwt.claims.user_agent', TRUE)
- IS NOT NULL THEN
- BEGIN
- v_uagent = current_setting('jwt.claims.user_agent', TRUE);
- EXCEPTION
- WHEN OTHERS THEN
- RAISE NOTICE 'Invalid UserAgent';
- RETURN NULL;
- END;
- RETURN v_uagent;
- ELSE
- RETURN NULL;
- END IF;
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-CREATE FUNCTION jwt_public.current_origin() RETURNS origin AS $EOFCODE$
- SELECT nullif(current_setting('jwt.claims.origin', true), '')::origin;
-$EOFCODE$ LANGUAGE sql STABLE;
-
-CREATE FUNCTION jwt_public.current_group_ids() RETURNS uuid[] AS $EOFCODE$
-DECLARE
- v_identifier_ids uuid[];
-BEGIN
- IF current_setting('jwt.claims.group_ids', TRUE)
- IS NOT NULL THEN
- BEGIN
- v_identifier_ids = current_setting('jwt.claims.group_ids', TRUE)::uuid[];
- EXCEPTION
- WHEN OTHERS THEN
- RAISE NOTICE 'Invalid UUID value';
- RETURN ARRAY[]::uuid[];
- END;
- RETURN v_identifier_ids;
- ELSE
- RETURN ARRAY[]::uuid[];
- END IF;
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-CREATE SCHEMA jwt_private;
-
-GRANT USAGE ON SCHEMA jwt_private TO authenticated, anonymous;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA jwt_private
- GRANT EXECUTE ON FUNCTIONS TO authenticated;
-
-CREATE FUNCTION jwt_private.current_database_id() RETURNS uuid AS $EOFCODE$
-DECLARE
- v_identifier_id uuid;
-BEGIN
- IF current_setting('jwt.claims.database_id', TRUE)
- IS NOT NULL THEN
- BEGIN
- v_identifier_id = current_setting('jwt.claims.database_id', TRUE)::uuid;
- EXCEPTION
- WHEN OTHERS THEN
- RAISE NOTICE 'Invalid UUID value';
- RETURN NULL;
- END;
- RETURN v_identifier_id;
- ELSE
- RETURN NULL;
- END IF;
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-CREATE FUNCTION jwt_private.current_token_id() RETURNS uuid AS $EOFCODE$
- SELECT nullif(current_setting('jwt.claims.token_id', true), '')::uuid;
-$EOFCODE$ LANGUAGE sql STABLE;
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/ip_address.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/ip_address.sql
deleted file mode 100644
index 191af4552..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/ip_address.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Verify schemas/ctx/procedures/ip_address on pg
-
-BEGIN;
-
-SELECT verify_function ('ctx.ip_address');
-
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/origin.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/origin.sql
deleted file mode 100644
index 4fb286ed8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/origin.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Verify schemas/ctx/procedures/origin on pg
-
-BEGIN;
-
-SELECT verify_function ('ctx.origin');
-
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/security_definer.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/security_definer.sql
deleted file mode 100644
index d9aa4078d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/security_definer.sql
+++ /dev/null
@@ -1,9 +0,0 @@
--- Verify schemas/ctx/procedures/security_definer on pg
-
-BEGIN;
-
-SELECT verify_function ('ctx.security_definer');
-SELECT verify_function ('ctx.is_security_definer');
-
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/user_agent.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/user_agent.sql
deleted file mode 100644
index 6b1c1379d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/user_agent.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Verify schemas/ctx/procedures/user_agent on pg
-
-BEGIN;
-
-SELECT verify_function ('ctx.user_agent');
-
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/user_id.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/user_id.sql
deleted file mode 100644
index 52b7dce98..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/procedures/user_id.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Verify schemas/ctx/procedures/user_id on pg
-
-BEGIN;
-
-SELECT verify_function ('ctx.user_id');
-
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/schema.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/schema.sql
deleted file mode 100644
index 297e87c37..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/ctx/schema.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Verify schemas/ctx/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('ctx');
-
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_private/procedures/current_database_id.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_private/procedures/current_database_id.sql
deleted file mode 100644
index 33311a617..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_private/procedures/current_database_id.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/jwt_private/procedures/current_database_id on pg
-
-BEGIN;
-
-SELECT verify_function ('jwt_private.current_database_id');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_private/procedures/current_token_id.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_private/procedures/current_token_id.sql
deleted file mode 100644
index 756b4b54e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_private/procedures/current_token_id.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Verify schemas/jwt_private/procedures/current_token_id on pg
-
-BEGIN;
-
-SELECT verify_function ('jwt_private.current_token_id');
-
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_private/schema.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_private/schema.sql
deleted file mode 100644
index 8dc051d18..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_private/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/jwt_private/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('jwt_private');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_group_ids.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_group_ids.sql
deleted file mode 100644
index 5c24c6e3d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_group_ids.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/jwt_public/procedures/current_group_ids on pg
-
-BEGIN;
-
-SELECT verify_function ('jwt_public.current_group_ids');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_ip_address.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_ip_address.sql
deleted file mode 100644
index bce457e25..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_ip_address.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/jwt_public/procedures/current_ip_address on pg
-
-BEGIN;
-
-SELECT verify_function ('jwt_public.current_ip_address');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_origin.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_origin.sql
deleted file mode 100644
index d1605a9ab..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_origin.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Verify schemas/jwt_public/procedures/current_origin on pg
-
-BEGIN;
-
-SELECT verify_function ('jwt_public.current_origin');
-
-ROLLBACK;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_user_agent.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_user_agent.sql
deleted file mode 100644
index e807ae301..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_user_agent.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/jwt_public/procedures/current_user_agent on pg
-
-BEGIN;
-
-SELECT verify_function ('jwt_public.current_user_agent');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_user_id.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_user_id.sql
deleted file mode 100644
index 82a757bf6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/procedures/current_user_id.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/jwt_public/procedures/current_user_id on pg
-
-BEGIN;
-
-SELECT verify_function ('jwt_public.current_user_id');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/schema.sql b/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/schema.sql
deleted file mode 100644
index 1a9c5105b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/jwt-claims/verify/schemas/jwt_public/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/jwt_public/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('jwt_public');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/LICENSE b/__fixtures__/stage/extensions/@pgpm/measurements/LICENSE
deleted file mode 100644
index 7b18c9183..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2025 Dan Lynch
-Copyright (c) 2025 Constructive
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/Makefile b/__fixtures__/stage/extensions/@pgpm/measurements/Makefile
deleted file mode 100644
index 5d8d87fce..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-EXTENSION = pgpm-measurements
-DATA = sql/pgpm-measurements--0.14.0.sql
-
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/README.md b/__fixtures__/stage/extensions/@pgpm/measurements/README.md
deleted file mode 100644
index c6be44d11..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/README.md
+++ /dev/null
@@ -1,204 +0,0 @@
-# @pgpm/measurements
-
-
-
-
-
-
-
-
-
-
-
-
-
-Measurement utilities for performance tracking and analytics.
-
-## Overview
-
-`@pgpm/measurements` provides a standardized system for tracking measurements and quantities in PostgreSQL applications. This package defines a schema for storing measurement types with their units and descriptions, enabling consistent metric tracking across your application.
-
-## Features
-
-- **Quantity Definitions**: Store measurement types with units and descriptions
-- **Standardized Units**: Define consistent units across your application
-- **Fixture Data**: Pre-populated common measurement types
-- **Extensible Schema**: Easy to add custom measurement types
-
-## Installation
-
-If you have `pgpm` installed:
-
-```bash
-pgpm install @pgpm/measurements
-pgpm deploy
-```
-
-This is a quick way to get started. The sections below provide more detailed installation options.
-
-### Prerequisites
-
-```bash
-# Install pgpm CLI
-npm install -g pgpm
-
-# Start local Postgres (via Docker) and export env vars
-pgpm docker start
-eval "$(pgpm env)"
-```
-
-> **Tip:** Already running Postgres? Skip the Docker step and just export your `PG*` environment variables.
-
-### **Add to an Existing Package**
-
-```bash
-# 1. Install the package
-pgpm install @pgpm/measurements
-
-# 2. Deploy locally
-pgpm deploy
-```
-
-### **Add to a New Project**
-
-```bash
-# 1. Create a workspace
-pgpm init workspace
-
-# 2. Create your first module
-cd my-workspace
-pgpm init
-
-# 3. Install a package
-cd packages/my-module
-pgpm install @pgpm/measurements
-
-# 4. Deploy everything
-pgpm deploy --createdb --database mydb1
-```
-
-## Core Schema
-
-### measurements.quantities Table
-
-Stores measurement type definitions:
-- `id`: Serial primary key
-- `name`: Measurement identifier (e.g., 'distance', 'weight', 'temperature')
-- `label`: Display label
-- `unit`: Unit of measurement (e.g., 'meters', 'kilograms', 'celsius')
-- `unit_desc`: Unit description
-- `description`: Measurement description
-
-## Usage
-
-### Defining Measurement Types
-
-```sql
--- Add custom measurement types
-INSERT INTO measurements.quantities (name, label, unit, unit_desc, description) VALUES
- ('distance', 'Distance', 'm', 'meters', 'Linear distance measurement'),
- ('weight', 'Weight', 'kg', 'kilograms', 'Mass measurement'),
- ('temperature', 'Temperature', '°C', 'celsius', 'Temperature measurement'),
- ('duration', 'Duration', 's', 'seconds', 'Time duration');
-```
-
-### Querying Measurement Types
-
-```sql
--- Get all measurement types
-SELECT * FROM measurements.quantities;
-
--- Find specific measurement
-SELECT * FROM measurements.quantities
-WHERE name = 'distance';
-
--- Get measurements by unit
-SELECT * FROM measurements.quantities
-WHERE unit = 'kg';
-```
-
-### Using Measurements in Application Tables
-
-```sql
--- Create a table that references measurement types
-CREATE TABLE sensor_readings (
- id serial PRIMARY KEY,
- quantity_id integer REFERENCES measurements.quantities(id),
- value numeric NOT NULL,
- recorded_at timestamptz DEFAULT now()
-);
-
--- Record measurements
-INSERT INTO sensor_readings (quantity_id, value)
-SELECT id, 23.5
-FROM measurements.quantities
-WHERE name = 'temperature';
-
--- Query with measurement details
-SELECT
- sr.value,
- q.label,
- q.unit,
- sr.recorded_at
-FROM sensor_readings sr
-JOIN measurements.quantities q ON sr.quantity_id = q.id;
-```
-
-## Use Cases
-
-### Performance Metrics
-
-Track application performance measurements:
-- Response times
-- Query durations
-- Resource usage
-- Throughput rates
-
-### IoT and Sensor Data
-
-Store sensor readings with proper units:
-- Temperature sensors
-- Distance sensors
-- Weight scales
-- Environmental monitors
-
-### Business Metrics
-
-Track business measurements:
-- Sales volumes
-- Revenue amounts
-- User counts
-- Conversion rates
-
-### Scientific Data
-
-Store scientific measurements with proper units:
-- Laboratory measurements
-- Research data
-- Experimental results
-
-## Dependencies
-
-- `@pgpm/verify`: Verification utilities
-
-## Testing
-
-```bash
-pnpm test
-```
-
-## Related Tooling
-
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
-* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
-* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
-* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
-
-## Disclaimer
-
-AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED "AS IS", AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND.
-
-No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value.
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/__tests__/__snapshots__/measurements.test.ts.snap b/__fixtures__/stage/extensions/@pgpm/measurements/__tests__/__snapshots__/measurements.test.ts.snap
deleted file mode 100644
index 15f360fab..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/__tests__/__snapshots__/measurements.test.ts.snap
+++ /dev/null
@@ -1,309 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`measurements schema should find dimensionless quantities 1`] = `
-{
- "dimensionlessQuantities": [
- {
- "description": "a dimensionless quantity",
- "label": "Dimensionless",
- "name": "Dimensionless",
- "unit": null,
- },
- {
- "description": "something generally accepted as a medium of exchange, a measure of value, or a means of payment",
- "label": "Money",
- "name": "Money",
- "unit": null,
- },
- ],
-}
-`;
-
-exports[`measurements schema should find quantities by unit 1`] = `
-{
- "meterQuantities": [
- {
- "label": "Acceleration",
- "name": "Acceleration",
- "unit": "m/s²",
- },
- {
- "label": "Amount Of Substance",
- "name": "AmountOfSubstance",
- "unit": "mol",
- },
- {
- "label": "Area",
- "name": "Area",
- "unit": "m²",
- },
- {
- "label": "Kinematic Viscosity",
- "name": "KinematicViscosity",
- "unit": "m²/s",
- },
- {
- "label": "Length",
- "name": "Length",
- "unit": "m",
- },
- {
- "label": "Luminous Flux",
- "name": "LuminousFlux",
- "unit": "lm",
- },
- {
- "label": "Parts per Million",
- "name": "PartsPerMillion",
- "unit": "ppm",
- },
- {
- "label": "Radiation Dose Effective",
- "name": "RadiationDoseEffective",
- "unit": "equivalent) dose of radiation received by a human or some other living organism. The system unit for this quantity is Sv",
- },
- {
- "label": "Torque",
- "name": "Torque",
- "unit": "N·m",
- },
- {
- "label": "Velocity",
- "name": "Velocity",
- "unit": "m/s",
- },
- {
- "label": "Volume",
- "name": "Volume",
- "unit": "m³",
- },
- {
- "label": "Volumetric Density",
- "name": "VolumetricDensity",
- "unit": "kg/m³",
- },
- {
- "label": "Volumetric Flow Rate",
- "name": "VolumetricFlowRate",
- "unit": "m³/s",
- },
- ],
-}
-`;
-
-exports[`measurements schema should handle percentage and parts-per quantities 1`] = `
-{
- "ratioQuantities": [
- {
- "label": "Parts per Billion",
- "name": "PartsPerBillion",
- "unit": "ppb",
- "unit_desc": "parts per billion",
- },
- {
- "label": "Parts per Million",
- "name": "PartsPerMillion",
- "unit": "ppm",
- "unit_desc": "parts per million",
- },
- {
- "label": "Percent",
- "name": "Percent",
- "unit": "%",
- "unit_desc": "percentage",
- },
- ],
-}
-`;
-
-exports[`measurements schema should have quantities table with correct structure 1`] = `
-{
- "columns": [
- {
- "column_name": "id",
- "data_type": "integer",
- "is_nullable": "NO",
- },
- {
- "column_name": "name",
- "data_type": "text",
- "is_nullable": "YES",
- },
- {
- "column_name": "label",
- "data_type": "text",
- "is_nullable": "YES",
- },
- {
- "column_name": "unit",
- "data_type": "text",
- "is_nullable": "YES",
- },
- {
- "column_name": "unit_desc",
- "data_type": "text",
- "is_nullable": "YES",
- },
- {
- "column_name": "description",
- "data_type": "text",
- "is_nullable": "YES",
- },
- ],
-}
-`;
-
-exports[`measurements schema should retrieve basic physical quantities 1`] = `
-{
- "basicQuantities": [
- {
- "description": "a period of existence or persistence",
- "id": "[ID]",
- "label": "Duration",
- "name": "Duration",
- "unit": "s",
- "unit_desc": "second",
- },
- {
- "description": "the amount of electric charge flowing past a specified circuit point per unit time",
- "id": "[ID]",
- "label": "Electric Current",
- "name": "ElectricCurrent",
- "unit": "A",
- "unit_desc": "Ampere",
- },
- {
- "description": "the extent of something along its greatest dimension or the extent of space between two objects or places",
- "id": "[ID]",
- "label": "Length",
- "name": "Length",
- "unit": "m",
- "unit_desc": "meter",
- },
- {
- "description": "the measure of the quantity of matter that a body or an object contains",
- "id": "[ID]",
- "label": "Mass",
- "name": "Mass",
- "unit": "kg",
- "unit_desc": "kilogram",
- },
- {
- "description": "the degree of hotness or coldness of a body or an environment",
- "id": "[ID]",
- "label": "Temperature",
- "name": "Temperature",
- "unit": "K",
- "unit_desc": "Kelvin",
- },
- ],
-}
-`;
-
-exports[`measurements schema should retrieve derived quantities 1`] = `
-{
- "derivedQuantities": [
- {
- "description": "the rate of change of velocity with respect to time",
- "id": "[ID]",
- "label": "Acceleration",
- "name": "Acceleration",
- "unit": "m/s²",
- "unit_desc": "meter per square second",
- },
- {
- "description": "the capacity of a physical system to do work",
- "id": "[ID]",
- "label": "Energy",
- "name": "Energy",
- "unit": "J",
- "unit_desc": "Joule",
- },
- {
- "description": "a quantity that tends to produce an acceleration of a body in the direction of its application",
- "id": "[ID]",
- "label": "Force",
- "name": "Force",
- "unit": "N",
- "unit_desc": "Newton",
- },
- {
- "description": "the rate at which work is done",
- "id": "[ID]",
- "label": "Power",
- "name": "Power",
- "unit": "W",
- "unit_desc": "Watt",
- },
- {
- "description": "a distance traveled divided by the time of travel",
- "id": "[ID]",
- "label": "Velocity",
- "name": "Velocity",
- "unit": "m/s",
- "unit_desc": "meter per second",
- },
- ],
-}
-`;
-
-exports[`measurements schema should search quantities by description 1`] = `
-{
- "energyRelated": [
- {
- "description": "the amount of energy deposited per unit of mass",
- "label": "Radiation Dose Absorbed",
- "name": "RadiationDoseAbsorbed",
- },
- ],
-}
-`;
-
-exports[`measurements schema should verify SI base units are present 1`] = `
-{
- "siBaseUnits": [
- {
- "label": "Electric Current",
- "name": "ElectricCurrent",
- "unit": "A",
- "unit_desc": "Ampere",
- },
- {
- "label": "Temperature",
- "name": "Temperature",
- "unit": "K",
- "unit_desc": "Kelvin",
- },
- {
- "label": "Luminous Intensity",
- "name": "LuminousIntensity",
- "unit": "cd",
- "unit_desc": "candela",
- },
- {
- "label": "Mass",
- "name": "Mass",
- "unit": "kg",
- "unit_desc": "kilogram",
- },
- {
- "label": "Length",
- "name": "Length",
- "unit": "m",
- "unit_desc": "meter",
- },
- {
- "label": "Amount Of Substance",
- "name": "AmountOfSubstance",
- "unit": "mol",
- "unit_desc": "molecules, for example of a substance. The system unit for this quantity is "mol" mole",
- },
- {
- "label": "Duration",
- "name": "Duration",
- "unit": "s",
- "unit_desc": "second",
- },
- ],
-}
-`;
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/__tests__/measurements.test.ts b/__fixtures__/stage/extensions/@pgpm/measurements/__tests__/measurements.test.ts
deleted file mode 100644
index cdfa4bff9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/__tests__/measurements.test.ts
+++ /dev/null
@@ -1,124 +0,0 @@
-import { getConnections, PgTestClient, snapshot } from 'pgsql-test';
-
-let pg: PgTestClient;
-let teardown: () => Promise;
-
-beforeAll(async () => {
- ({ pg, teardown } = await getConnections());
-});
-
-afterAll(async () => {
- await teardown();
-});
-
-beforeEach(async () => {
- await pg.beforeEach();
-});
-
-afterEach(async () => {
- await pg.afterEach();
-});
-
-describe('measurements schema', () => {
- it('should have measurements schema created', async () => {
- const schemas = await pg.any(
- `SELECT schema_name FROM information_schema.schemata WHERE schema_name = 'measurements'`
- );
- expect(schemas).toHaveLength(1);
- expect(schemas[0].schema_name).toBe('measurements');
- });
-
- it('should have quantities table with correct structure', async () => {
- const columns = await pg.any(
- `SELECT column_name, data_type, is_nullable
- FROM information_schema.columns
- WHERE table_schema = 'measurements' AND table_name = 'quantities'
- ORDER BY ordinal_position`
- );
-
- expect(snapshot({ columns })).toMatchSnapshot();
- });
-
- it('should have all expected quantities inserted', async () => {
- const quantities = await pg.any(
- `SELECT COUNT(*) as total FROM measurements.quantities`
- );
-
- // Based on the SQL file, there should be 44 initial quantities + 3 additional ones (Percent, PartsPerMillion, PartsPerBillion)
- // Note: There's a duplicate ID 45 in the SQL, so actual count might be different
- expect(parseInt(quantities[0].total)).toBeGreaterThan(40);
- });
-
- it('should retrieve basic physical quantities', async () => {
- const basicQuantities = await pg.any(
- `SELECT id, name, label, unit, unit_desc, description
- FROM measurements.quantities
- WHERE name IN ('Length', 'Mass', 'Duration', 'Temperature', 'ElectricCurrent')
- ORDER BY name`
- );
-
- expect(snapshot({ basicQuantities })).toMatchSnapshot();
- });
-
- it('should retrieve derived quantities', async () => {
- const derivedQuantities = await pg.any(
- `SELECT id, name, label, unit, unit_desc, description
- FROM measurements.quantities
- WHERE name IN ('Velocity', 'Acceleration', 'Force', 'Energy', 'Power')
- ORDER BY name`
- );
-
- expect(snapshot({ derivedQuantities })).toMatchSnapshot();
- });
-
- it('should find quantities by unit', async () => {
- const meterQuantities = await pg.any(
- `SELECT name, label, unit FROM measurements.quantities
- WHERE unit LIKE '%m%'
- ORDER BY name`
- );
-
- expect(snapshot({ meterQuantities })).toMatchSnapshot();
- });
-
- it('should find dimensionless quantities', async () => {
- const dimensionlessQuantities = await pg.any(
- `SELECT name, label, unit, description FROM measurements.quantities
- WHERE unit IS NULL OR name = 'Dimensionless'
- ORDER BY name`
- );
-
- expect(snapshot({ dimensionlessQuantities })).toMatchSnapshot();
- });
-
- it('should search quantities by description', async () => {
- const energyRelated = await pg.any(
- `SELECT name, label, description FROM measurements.quantities
- WHERE description ILIKE '%energy%'
- ORDER BY name`
- );
-
- expect(snapshot({ energyRelated })).toMatchSnapshot();
- });
-
- it('should handle percentage and parts-per quantities', async () => {
- const ratioQuantities = await pg.any(
- `SELECT name, label, unit, unit_desc FROM measurements.quantities
- WHERE name IN ('Percent', 'PartsPerMillion', 'PartsPerBillion')
- ORDER BY name`
- );
-
- expect(snapshot({ ratioQuantities })).toMatchSnapshot();
- });
-
- it('should verify SI base units are present', async () => {
- // The seven SI base units
- const siBaseUnits = await pg.any(
- `SELECT name, label, unit, unit_desc FROM measurements.quantities
- WHERE unit IN ('m', 'kg', 's', 'A', 'K', 'mol', 'cd')
- ORDER BY unit`
- );
-
- expect(snapshot({ siBaseUnits })).toMatchSnapshot();
- });
-});
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/deploy/schemas/measurements/schema.sql b/__fixtures__/stage/extensions/@pgpm/measurements/deploy/schemas/measurements/schema.sql
deleted file mode 100644
index 962ae4a91..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/deploy/schemas/measurements/schema.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Deploy schemas/measurements/schema to pg
-
-
-BEGIN;
-
-CREATE SCHEMA measurements;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/deploy/schemas/measurements/tables/quantities/fixtures/1601076414018_fixture.sql b/__fixtures__/stage/extensions/@pgpm/measurements/deploy/schemas/measurements/tables/quantities/fixtures/1601076414018_fixture.sql
deleted file mode 100644
index e81ccd262..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/deploy/schemas/measurements/tables/quantities/fixtures/1601076414018_fixture.sql
+++ /dev/null
@@ -1,57 +0,0 @@
--- Deploy schemas/measurements/tables/quantities/fixtures/1601076414018_fixture to pg
-
--- requires: schemas/measurements/schema
--- requires: schemas/measurements/tables/quantities/table
-
-BEGIN;
-
--- https://en.wikipedia.org/wiki/International_System_of_Units
--- https://en.wikipedia.org/wiki/SI_derived_unit
-
-INSERT INTO measurements.quantities (id, name, label, unit, unit_desc, description) VALUES
- (1, 'Acceleration', 'Acceleration', 'm/s²', 'meter per square second', 'the rate of change of velocity with respect to time'),
- (2, 'AmountOfSubstance', 'Amount Of Substance', 'mol', 'molecules, for example of a substance. The system unit for this quantity is "mol" mole', 'the number of elementary entities (molecules, for example) of a substance'),
- (3, 'Angle', 'Angle', 'rad', 'radian', 'the figure formed by two lines diverging from a common point'),
- (4, 'AngularAcceleration', 'Angular Acceleration', 'rad/s²', 'radian per square second', 'the rate of change of angular velocity with respect to time'),
- (5, 'AngularVelocity', 'Angular Velocity', 'rad/s', 'radian per second', 'the rate of change of angular displacement with respect to time'),
- (6, 'Area', 'Area', 'm²', 'square meter', 'the extent of a planar region or of the surface of a solid measured in square units'),
- (7, 'CatalyticActivity', 'Catalytic Activity', 'kat', 'katal', 'a catalytic activity'),
- (8, 'DataAmount', 'Data Amount', 'bit', NULL, 'a measure of data amount'),
- (9, 'DataRate', 'Data Rate', 'bit/s', 'bit per second', 'the speed of data-transmission'),
- (10, 'Dimensionless', 'Dimensionless', NULL, NULL, 'a dimensionless quantity'),
- (11, 'Duration', 'Duration', 's', 'second', 'a period of existence or persistence'),
- (12, 'DynamicViscosity', 'Dynamic Viscosity', 'Pa·s', 'Pascal-Second', 'the dynamic viscosity'),
- (13, 'ElectricCapacitance', 'Electric Capacitance', 'F', 'Farad', 'an electric capacitance'),
- (14, 'ElectricCharge', 'Electric Charge', 'C', 'Coulomb', 'an electric charge'),
- (15, 'ElectricConductance', 'Electric Conductance', 'S', 'Siemens', 'an electric conductance'),
- (16, 'ElectricCurrent', 'Electric Current', 'A', 'Ampere', 'the amount of electric charge flowing past a specified circuit point per unit time'),
- (17, 'ElectricInductance', 'Electric Inductance', 'H', 'Henry', 'an electric inductance'),
- (18, 'ElectricPotential', 'Electric Potential', 'V', 'Volt', 'an electric potential or electromotive force'),
- (19, 'ElectricResistance', 'Electric Resistance', 'Ω', 'Ohm', 'an electric resistance'),
- (20, 'Energy', 'Energy', 'J', 'Joule', 'the capacity of a physical system to do work'),
- (21, 'Force', 'Force', 'N', 'Newton', 'a quantity that tends to produce an acceleration of a body in the direction of its application'),
- (22, 'Frequency', 'Frequency', 'Hz', 'Hertz', 'the number of times a specified phenomenon occurs within a specified interval'),
- (23, 'Illuminance', 'Illuminance', 'lx', 'lux', 'an illuminance'),
- (24, 'KinematicViscosity', 'Kinematic Viscosity', 'm²/s', NULL, 'the diffusion of momentum'),
- (25, 'Length', 'Length', 'm', 'meter', 'the extent of something along its greatest dimension or the extent of space between two objects or places'),
- (26, 'LuminousFlux', 'Luminous Flux', 'lm', 'lumen', 'a luminous flux'),
- (27, 'LuminousIntensity', 'Luminous Intensity', 'cd', 'candela', 'the luminous flux density per solid angle as measured in a given direction relative to the emitting source'),
- (28, 'MagneticFlux', 'Magnetic Flux', 'Wb', 'Weber', 'a magnetic flux'),
- (29, 'MagneticFluxDensity', 'Magnetic Flux Density', 'T', 'Tesla', 'a magnetic flux density'),
- (30, 'Mass', 'Mass', 'kg', 'kilogram', 'the measure of the quantity of matter that a body or an object contains'),
- (31, 'MassFlowRate', 'Mass Flow Rate', 'kg/s', 'kilogram per second', 'the movement of mass per time'),
- (32, 'Money', 'Money', NULL, NULL, 'something generally accepted as a medium of exchange, a measure of value, or a means of payment'),
- (33, 'Power', 'Power', 'W', 'Watt', 'the rate at which work is done'),
- (34, 'Pressure', 'Pressure', 'Pa', 'Pascal', 'a force applied uniformly over a surface'),
- (35, 'RadiationDoseAbsorbed', 'Radiation Dose Absorbed', 'Gy', 'Gray', 'the amount of energy deposited per unit of mass'),
- (36, 'RadiationDoseEffective', 'Radiation Dose Effective', 'equivalent) dose of radiation received by a human or some other living organism. The system unit for this quantity is Sv', 'or "equivalent" dose of radiation received by a human or some other living organism. The system unit for this quantity is "Sv" Sievert', 'the effective (or "equivalent") dose of radiation received by a human or some other living organism'),
- (37, 'RadioactiveActivity', 'Radioactive Activity', 'Bq', 'Becquerel', 'a radioactive activity'),
- (38, 'SolidAngle', 'Solid Angle', 'sr', 'steradian', 'the angle formed by three or more planes intersecting at a common point'),
- (39, 'Temperature', 'Temperature', 'K', 'Kelvin', 'the degree of hotness or coldness of a body or an environment'),
- (40, 'Torque', 'Torque', 'N·m', 'Newton-Meter', 'the moment of a force'),
- (41, 'Velocity', 'Velocity', 'm/s', 'meter per second', 'a distance traveled divided by the time of travel'),
- (42, 'Volume', 'Volume', 'm³', 'cubic meter', 'the amount of space occupied by a three-dimensional object or region of space, expressed in cubic units'),
- (43, 'VolumetricDensity', 'Volumetric Density', 'kg/m³', 'kilogram per cubic meter', 'a mass per unit volume of a substance under specified conditions of pressure and temperature'),
- (44, 'VolumetricFlowRate', 'Volumetric Flow Rate', 'm³/s', 'cubic meter per second', 'the volume of fluid passing a point in a system per unit of time');
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/deploy/schemas/measurements/tables/quantities/fixtures/1601081365273_fixture.sql b/__fixtures__/stage/extensions/@pgpm/measurements/deploy/schemas/measurements/tables/quantities/fixtures/1601081365273_fixture.sql
deleted file mode 100644
index 1a2171498..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/deploy/schemas/measurements/tables/quantities/fixtures/1601081365273_fixture.sql
+++ /dev/null
@@ -1,21 +0,0 @@
--- Deploy schemas/measurements/tables/quantities/fixtures/1601081365273_fixture to pg
-
--- requires: schemas/measurements/schema
--- requires: schemas/measurements/tables/quantities/table
-
-BEGIN;
-
-
-INSERT INTO measurements.quantities (id, name, label, unit, unit_desc, description) VALUES
--- these are dimensionless https://en.wikipedia.org/wiki/Parts-per_notation
--- parts per 100
-
--- measures of concetration
- (45, 'Percent', 'Percent', '%', 'percentage', 'a number or ratio expressed as a fraction of 100'),
--- parts per 1M
- (46, 'PartsPerMillion', 'Parts per Million', 'ppm', 'parts per million', 'pseudo-units to describe small values of miscellaneous dimensionless quantities that are pure numbers representing a quantity-per-quantity measure in parts per million'),
--- parts per 1B
- (47, 'PartsPerBillion', 'Parts per Billion', 'ppb', 'parts per billion', 'pseudo-units to describe small values of miscellaneous dimensionless quantities that are pure numbers representing a quantity-per-quantity measure in parts per billion')
- ;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/deploy/schemas/measurements/tables/quantities/table.sql b/__fixtures__/stage/extensions/@pgpm/measurements/deploy/schemas/measurements/tables/quantities/table.sql
deleted file mode 100644
index 0a6a65a4e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/deploy/schemas/measurements/tables/quantities/table.sql
+++ /dev/null
@@ -1,16 +0,0 @@
--- Deploy schemas/measurements/tables/quantities/table to pg
-
--- requires: schemas/measurements/schema
-
-BEGIN;
-
-CREATE TABLE measurements.quantities (
- id serial PRIMARY KEY,
- name text,
- label text,
- unit text,
- unit_desc text,
- description text
-);
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/jest.config.js b/__fixtures__/stage/extensions/@pgpm/measurements/jest.config.js
deleted file mode 100644
index e20e7efb5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/jest.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @type {import('ts-jest').JestConfigWithTsJest} */
-module.exports = {
- preset: 'ts-jest',
- testEnvironment: 'node',
-
- // Match both __tests__ and colocated test files
- testMatch: ['**/?(*.)+(test|spec).{ts,tsx,js,jsx}'],
-
- // Ignore build artifacts and type declarations
- testPathIgnorePatterns: ['/dist/', '\\.d\\.ts$'],
- modulePathIgnorePatterns: ['/dist/'],
- watchPathIgnorePatterns: ['/dist/'],
-
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
-};
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/measurements.control b/__fixtures__/stage/extensions/@pgpm/measurements/measurements.control
deleted file mode 100644
index f918719f6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/measurements.control
+++ /dev/null
@@ -1,8 +0,0 @@
-# measurements extension
-comment = 'measurements extension'
-default_version = '0.0.1'
-module_pathname = '$libdir/measurements'
-requires = 'plpgsql,uuid-ossp,pgpm-verify'
-relocatable = false
-superuser = false
-
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/package.json b/__fixtures__/stage/extensions/@pgpm/measurements/package.json
deleted file mode 100644
index 0ad585cd4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/package.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "name": "@pgpm/measurements",
- "version": "0.15.2",
- "description": "Measurement utilities for performance tracking and analytics",
- "author": "Dan Lynch ",
- "contributors": [
- "Constructive "
- ],
- "keywords": [
- "postgresql",
- "pgpm",
- "metrics",
- "analytics"
- ],
- "publishConfig": {
- "access": "public"
- },
- "scripts": {
- "bundle": "pgpm package",
- "test": "jest",
- "test:watch": "jest --watch"
- },
- "dependencies": {
- "@pgpm/verify": "0.15.2"
- },
- "devDependencies": {
- "pgpm": "^1.0.0"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/constructive-io/pgpm-modules"
- },
- "homepage": "https://github.com/constructive-io/pgpm-modules",
- "bugs": {
- "url": "https://github.com/constructive-io/pgpm-modules/issues"
- }
-}
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/pgpm-measurements.control b/__fixtures__/stage/extensions/@pgpm/measurements/pgpm-measurements.control
deleted file mode 100644
index d2a80f682..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/pgpm-measurements.control
+++ /dev/null
@@ -1,8 +0,0 @@
-# pgpm-measurements extension
-comment = 'pgpm-measurements extension'
-default_version = '0.14.0'
-module_pathname = '$libdir/pgpm-measurements'
-requires = 'plpgsql,pgpm-verify'
-relocatable = false
-superuser = false
-
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/pgpm.plan b/__fixtures__/stage/extensions/@pgpm/measurements/pgpm.plan
deleted file mode 100644
index 87c9b9d03..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/pgpm.plan
+++ /dev/null
@@ -1,8 +0,0 @@
-%syntax-version=1.0.0
-%project=pgpm-measurements
-%uri=pgpm-measurements
-
-schemas/measurements/schema 2017-08-11T08:11:51Z skitch # add schemas/measurements/schema
-schemas/measurements/tables/quantities/table [schemas/measurements/schema] 2017-08-11T08:11:51Z skitch # add schemas/measurements/tables/quantities/table
-schemas/measurements/tables/quantities/fixtures/1601076414018_fixture [schemas/measurements/schema schemas/measurements/tables/quantities/table] 2017-08-11T08:11:51Z skitch # add schemas/measurements/tables/quantities/fixtures/1601076414018_fixture
-schemas/measurements/tables/quantities/fixtures/1601081365273_fixture [schemas/measurements/schema schemas/measurements/tables/quantities/table] 2017-08-11T08:11:51Z skitch # add schemas/measurements/tables/quantities/fixtures/1601081365273_fixture
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/revert/schemas/measurements/schema.sql b/__fixtures__/stage/extensions/@pgpm/measurements/revert/schemas/measurements/schema.sql
deleted file mode 100644
index 5aa72380b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/revert/schemas/measurements/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/measurements/schema from pg
-
-BEGIN;
-
-DROP SCHEMA measurements;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/revert/schemas/measurements/tables/quantities/fixtures/1601076414018_fixture.sql b/__fixtures__/stage/extensions/@pgpm/measurements/revert/schemas/measurements/tables/quantities/fixtures/1601076414018_fixture.sql
deleted file mode 100644
index 8d608a053..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/revert/schemas/measurements/tables/quantities/fixtures/1601076414018_fixture.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Revert schemas/measurements/tables/quantities/fixtures/1601076414018_fixture from pg
-
-BEGIN;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/revert/schemas/measurements/tables/quantities/fixtures/1601081365273_fixture.sql b/__fixtures__/stage/extensions/@pgpm/measurements/revert/schemas/measurements/tables/quantities/fixtures/1601081365273_fixture.sql
deleted file mode 100644
index 8dc3622c2..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/revert/schemas/measurements/tables/quantities/fixtures/1601081365273_fixture.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Revert schemas/measurements/tables/quantities/fixtures/1601081365273_fixture from pg
-
-BEGIN;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/revert/schemas/measurements/tables/quantities/table.sql b/__fixtures__/stage/extensions/@pgpm/measurements/revert/schemas/measurements/tables/quantities/table.sql
deleted file mode 100644
index 38d87e4f1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/revert/schemas/measurements/tables/quantities/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/measurements/tables/quantities/table from pg
-
-BEGIN;
-
-DROP TABLE measurements.quantities;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/sql/pgpm-measurements--0.14.0.sql b/__fixtures__/stage/extensions/@pgpm/measurements/sql/pgpm-measurements--0.14.0.sql
deleted file mode 100644
index 0dc786469..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/sql/pgpm-measurements--0.14.0.sql
+++ /dev/null
@@ -1,76 +0,0 @@
-\echo Use "CREATE EXTENSION pgpm-measurements" to load this file. \quit
-CREATE SCHEMA measurements;
-
-CREATE TABLE measurements.quantities (
- id serial PRIMARY KEY,
- name text,
- label text,
- unit text,
- unit_desc text,
- description text
-);
-
-INSERT INTO measurements.quantities (
- id,
- name,
- label,
- unit,
- unit_desc,
- description
-) VALUES
- (1, 'Acceleration', 'Acceleration', 'm/s²', 'meter per square second', 'the rate of change of velocity with respect to time'),
- (2, 'AmountOfSubstance', 'Amount Of Substance', 'mol', 'molecules, for example of a substance. The system unit for this quantity is "mol" mole', 'the number of elementary entities (molecules, for example) of a substance'),
- (3, 'Angle', 'Angle', 'rad', 'radian', 'the figure formed by two lines diverging from a common point'),
- (4, 'AngularAcceleration', 'Angular Acceleration', 'rad/s²', 'radian per square second', 'the rate of change of angular velocity with respect to time'),
- (5, 'AngularVelocity', 'Angular Velocity', 'rad/s', 'radian per second', 'the rate of change of angular displacement with respect to time'),
- (6, 'Area', 'Area', 'm²', 'square meter', 'the extent of a planar region or of the surface of a solid measured in square units'),
- (7, 'CatalyticActivity', 'Catalytic Activity', 'kat', 'katal', 'a catalytic activity'),
- (8, 'DataAmount', 'Data Amount', 'bit', NULL, 'a measure of data amount'),
- (9, 'DataRate', 'Data Rate', 'bit/s', 'bit per second', 'the speed of data-transmission'),
- (10, 'Dimensionless', 'Dimensionless', NULL, NULL, 'a dimensionless quantity'),
- (11, 'Duration', 'Duration', 's', 'second', 'a period of existence or persistence'),
- (12, 'DynamicViscosity', 'Dynamic Viscosity', 'Pa·s', 'Pascal-Second', 'the dynamic viscosity'),
- (13, 'ElectricCapacitance', 'Electric Capacitance', 'F', 'Farad', 'an electric capacitance'),
- (14, 'ElectricCharge', 'Electric Charge', 'C', 'Coulomb', 'an electric charge'),
- (15, 'ElectricConductance', 'Electric Conductance', 'S', 'Siemens', 'an electric conductance'),
- (16, 'ElectricCurrent', 'Electric Current', 'A', 'Ampere', 'the amount of electric charge flowing past a specified circuit point per unit time'),
- (17, 'ElectricInductance', 'Electric Inductance', 'H', 'Henry', 'an electric inductance'),
- (18, 'ElectricPotential', 'Electric Potential', 'V', 'Volt', 'an electric potential or electromotive force'),
- (19, 'ElectricResistance', 'Electric Resistance', 'Ω', 'Ohm', 'an electric resistance'),
- (20, 'Energy', 'Energy', 'J', 'Joule', 'the capacity of a physical system to do work'),
- (21, 'Force', 'Force', 'N', 'Newton', 'a quantity that tends to produce an acceleration of a body in the direction of its application'),
- (22, 'Frequency', 'Frequency', 'Hz', 'Hertz', 'the number of times a specified phenomenon occurs within a specified interval'),
- (23, 'Illuminance', 'Illuminance', 'lx', 'lux', 'an illuminance'),
- (24, 'KinematicViscosity', 'Kinematic Viscosity', 'm²/s', NULL, 'the diffusion of momentum'),
- (25, 'Length', 'Length', 'm', 'meter', 'the extent of something along its greatest dimension or the extent of space between two objects or places'),
- (26, 'LuminousFlux', 'Luminous Flux', 'lm', 'lumen', 'a luminous flux'),
- (27, 'LuminousIntensity', 'Luminous Intensity', 'cd', 'candela', 'the luminous flux density per solid angle as measured in a given direction relative to the emitting source'),
- (28, 'MagneticFlux', 'Magnetic Flux', 'Wb', 'Weber', 'a magnetic flux'),
- (29, 'MagneticFluxDensity', 'Magnetic Flux Density', 'T', 'Tesla', 'a magnetic flux density'),
- (30, 'Mass', 'Mass', 'kg', 'kilogram', 'the measure of the quantity of matter that a body or an object contains'),
- (31, 'MassFlowRate', 'Mass Flow Rate', 'kg/s', 'kilogram per second', 'the movement of mass per time'),
- (32, 'Money', 'Money', NULL, NULL, 'something generally accepted as a medium of exchange, a measure of value, or a means of payment'),
- (33, 'Power', 'Power', 'W', 'Watt', 'the rate at which work is done'),
- (34, 'Pressure', 'Pressure', 'Pa', 'Pascal', 'a force applied uniformly over a surface'),
- (35, 'RadiationDoseAbsorbed', 'Radiation Dose Absorbed', 'Gy', 'Gray', 'the amount of energy deposited per unit of mass'),
- (36, 'RadiationDoseEffective', 'Radiation Dose Effective', 'equivalent) dose of radiation received by a human or some other living organism. The system unit for this quantity is Sv', 'or "equivalent" dose of radiation received by a human or some other living organism. The system unit for this quantity is "Sv" Sievert', 'the effective (or "equivalent") dose of radiation received by a human or some other living organism'),
- (37, 'RadioactiveActivity', 'Radioactive Activity', 'Bq', 'Becquerel', 'a radioactive activity'),
- (38, 'SolidAngle', 'Solid Angle', 'sr', 'steradian', 'the angle formed by three or more planes intersecting at a common point'),
- (39, 'Temperature', 'Temperature', 'K', 'Kelvin', 'the degree of hotness or coldness of a body or an environment'),
- (40, 'Torque', 'Torque', 'N·m', 'Newton-Meter', 'the moment of a force'),
- (41, 'Velocity', 'Velocity', 'm/s', 'meter per second', 'a distance traveled divided by the time of travel'),
- (42, 'Volume', 'Volume', 'm³', 'cubic meter', 'the amount of space occupied by a three-dimensional object or region of space, expressed in cubic units'),
- (43, 'VolumetricDensity', 'Volumetric Density', 'kg/m³', 'kilogram per cubic meter', 'a mass per unit volume of a substance under specified conditions of pressure and temperature'),
- (44, 'VolumetricFlowRate', 'Volumetric Flow Rate', 'm³/s', 'cubic meter per second', 'the volume of fluid passing a point in a system per unit of time');
-
-INSERT INTO measurements.quantities (
- id,
- name,
- label,
- unit,
- unit_desc,
- description
-) VALUES
- (45, 'Percent', 'Percent', '%', 'percentage', 'a number or ratio expressed as a fraction of 100'),
- (46, 'PartsPerMillion', 'Parts per Million', 'ppm', 'parts per million', 'pseudo-units to describe small values of miscellaneous dimensionless quantities that are pure numbers representing a quantity-per-quantity measure in parts per million'),
- (47, 'PartsPerBillion', 'Parts per Billion', 'ppb', 'parts per billion', 'pseudo-units to describe small values of miscellaneous dimensionless quantities that are pure numbers representing a quantity-per-quantity measure in parts per billion');
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/verify/schemas/measurements/schema.sql b/__fixtures__/stage/extensions/@pgpm/measurements/verify/schemas/measurements/schema.sql
deleted file mode 100644
index b53cd7c56..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/verify/schemas/measurements/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/measurements/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('measurements');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/verify/schemas/measurements/tables/quantities/fixtures/1601076414018_fixture.sql b/__fixtures__/stage/extensions/@pgpm/measurements/verify/schemas/measurements/tables/quantities/fixtures/1601076414018_fixture.sql
deleted file mode 100644
index 943ad2351..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/verify/schemas/measurements/tables/quantities/fixtures/1601076414018_fixture.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Verify schemas/measurements/tables/quantities/fixtures/1601076414018_fixture on pg
-
-BEGIN;
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/verify/schemas/measurements/tables/quantities/fixtures/1601081365273_fixture.sql b/__fixtures__/stage/extensions/@pgpm/measurements/verify/schemas/measurements/tables/quantities/fixtures/1601081365273_fixture.sql
deleted file mode 100644
index 537d60baf..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/verify/schemas/measurements/tables/quantities/fixtures/1601081365273_fixture.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Verify schemas/measurements/tables/quantities/fixtures/1601081365273_fixture on pg
-
-BEGIN;
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/measurements/verify/schemas/measurements/tables/quantities/table.sql b/__fixtures__/stage/extensions/@pgpm/measurements/verify/schemas/measurements/tables/quantities/table.sql
deleted file mode 100644
index fd6b10a78..000000000
--- a/__fixtures__/stage/extensions/@pgpm/measurements/verify/schemas/measurements/tables/quantities/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/measurements/tables/quantities/table on pg
-
-BEGIN;
-
-SELECT verify_table ('measurements.quantities');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/LICENSE b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/LICENSE
deleted file mode 100644
index 7b18c9183..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2025 Dan Lynch
-Copyright (c) 2025 Constructive
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/README.md b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/README.md
deleted file mode 100644
index 90dac0ac4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/README.md
+++ /dev/null
@@ -1,239 +0,0 @@
-# @pgpm/metaschema-modules
-
-
-
-
-
-
-
-
-
-
-
-
-
-Module metadata handling and dependency tracking.
-
-## Overview
-
-`@pgpm/metaschema-modules` extends the `@pgpm/metaschema-schema` package with module-specific metadata tables. This package provides tables for tracking various pgpm modules including authentication, permissions, memberships, encrypted secrets, and more. It enables configuration and metadata storage for modular application features.
-
-## Features
-
-- **Module Metadata Tables**: Store configuration for various application modules
-- **Authentication Modules**: Track user authentication, connected accounts, and crypto auth
-- **Permission System**: Store permissions and membership configurations
-- **Security Modules**: Track encrypted secrets and tokens
-- **User Management**: Store user and membership module configurations
-- **Field Modules**: Track custom field configurations
-- **API Configuration**: Store API and RLS module settings
-
-## Installation
-
-If you have `pgpm` installed:
-
-```bash
-pgpm install @pgpm/metaschema-modules
-pgpm deploy
-```
-
-This is a quick way to get started. The sections below provide more detailed installation options.
-
-### Prerequisites
-
-```bash
-# Install pgpm CLI
-npm install -g pgpm
-
-# Start local Postgres (via Docker) and export env vars
-pgpm docker start
-eval "$(pgpm env)"
-```
-
-> **Tip:** Already running Postgres? Skip the Docker step and just export your `PG*` environment variables.
-
-### **Add to an Existing Package**
-
-```bash
-# 1. Install the package
-pgpm install @pgpm/metaschema-modules
-
-# 2. Deploy locally
-pgpm deploy
-```
-
-### **Add to a New Project**
-
-```bash
-# 1. Create a workspace
-pgpm init workspace
-
-# 2. Create your first module
-cd my-workspace
-pgpm init
-
-# 3. Install a package
-cd packages/my-module
-pgpm install @pgpm/metaschema-modules
-
-# 4. Deploy everything
-pgpm deploy --createdb --database mydb1
-```
-
-## Module Tables
-
-The package provides metadata tables for the following modules:
-
-### Authentication & Users
-- **users_module**: User management configuration
-- **user_auth_module**: User authentication settings
-- **connected_accounts_module**: Connected account configurations
-- **crypto_auth_module**: Cryptocurrency authentication settings
-- **crypto_addresses_module**: Crypto address management
-
-### Permissions & Memberships
-- **permissions_module**: Permission system configuration
-- **memberships_module**: Membership management settings
-- **membership_types_module**: Membership type definitions
-- **levels_module**: User level configurations
-
-### Security
-- **encrypted_secrets_module**: Encrypted secrets configuration
-- **secrets_module**: Secret management settings
-- **tokens_module**: Token management configuration
-
-### Communication
-- **emails_module**: Email module configuration
-- **phone_numbers_module**: Phone number management settings
-- **invites_module**: Invitation system configuration
-
-### Other Modules
-- **field_module**: Custom field configurations
-- **default_ids_module**: Default ID generation settings
-- **limits_module**: Rate limiting and quota configurations
-- **rls_module**: Row-level security configurations
-- **denormalized_table_field**: Denormalized field tracking
-
-### Application Structure
-- **apis**: API configurations
-- **sites**: Site definitions
-
-## Usage
-
-### Storing Module Configuration
-
-```sql
--- Configure users module
-INSERT INTO meta_public.users_module (
- database_id,
- api_id,
- enabled,
- settings
-) VALUES (
- 'database-uuid',
- 'api-uuid',
- true,
- '{"require_email_verification": true}'::jsonb
-);
-
--- Configure permissions module
-INSERT INTO meta_public.permissions_module (
- database_id,
- api_id,
- enabled,
- settings
-) VALUES (
- 'database-uuid',
- 'api-uuid',
- true,
- '{"default_role": "user"}'::jsonb
-);
-
--- Configure encrypted secrets module
-INSERT INTO meta_public.encrypted_secrets_module (
- database_id,
- api_id,
- enabled,
- encryption_key_id
-) VALUES (
- 'database-uuid',
- 'api-uuid',
- true,
- 'key-uuid'
-);
-```
-
-### Querying Module Configuration
-
-```sql
--- Get all enabled modules for a database
-SELECT
- 'users' as module_name, enabled
-FROM meta_public.users_module
-WHERE database_id = 'database-uuid'
-UNION ALL
-SELECT
- 'permissions' as module_name, enabled
-FROM meta_public.permissions_module
-WHERE database_id = 'database-uuid'
-UNION ALL
-SELECT
- 'encrypted_secrets' as module_name, enabled
-FROM meta_public.encrypted_secrets_module
-WHERE database_id = 'database-uuid';
-
--- Get RLS module configuration
-SELECT * FROM meta_public.rls_module
-WHERE api_id = 'api-uuid';
-```
-
-## Use Cases
-
-### Modular Application Configuration
-
-Store and manage configuration for optional application features:
-- Enable/disable modules per database or API
-- Store module-specific settings
-- Track module dependencies
-- Configure module behavior
-
-### Multi-Tenant Applications
-
-Manage module configurations per tenant:
-- Different modules enabled per tenant
-- Tenant-specific module settings
-- Isolated module configurations
-
-### Dynamic Feature Flags
-
-Use module tables as feature flags:
-- Enable/disable features at runtime
-- A/B testing configurations
-- Gradual feature rollouts
-
-## Dependencies
-
-- `@pgpm/metaschema-schema`: Core metadata management
-- `@pgpm/verify`: Verification utilities
-
-## Testing
-
-```bash
-pnpm test
-```
-
-## Related Tooling
-
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
-* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
-* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
-* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
-
-## Disclaimer
-
-AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED "AS IS", AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND.
-
-No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value.
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/__tests__/__snapshots__/modules.test.ts.snap b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/__tests__/__snapshots__/modules.test.ts.snap
deleted file mode 100644
index 5d41a6e91..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/__tests__/__snapshots__/modules.test.ts.snap
+++ /dev/null
@@ -1,258 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`db_meta_modules should have all expected module tables 1`] = `
-{
- "moduleNames": [
- "connected_accounts_module",
- "crypto_addresses_module",
- "crypto_auth_module",
- "default_ids_module",
- "emails_module",
- "encrypted_secrets_module",
- "field_module",
- "invites_module",
- "levels_module",
- "limits_module",
- "membership_types_module",
- "memberships_module",
- "permissions_module",
- "phone_numbers_module",
- "rls_module",
- "secrets_module",
- "tokens_module",
- "user_auth_module",
- "users_module",
- "uuid_module",
- ],
-}
-`;
-
-exports[`db_meta_modules should verify all module tables exist in meta_public schema 1`] = `
-{
- "moduleTablesCount": 20,
- "totalTables": 31,
-}
-`;
-
-exports[`db_meta_modules should verify emails_module table structure 1`] = `
-{
- "columns": [
- {
- "column_default": "uuid_generate_v4()",
- "column_name": "id",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": null,
- "column_name": "database_id",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": "uuid_nil()",
- "column_name": "schema_id",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": "uuid_nil()",
- "column_name": "private_schema_id",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": "uuid_nil()",
- "column_name": "table_id",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": "uuid_nil()",
- "column_name": "owner_table_id",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": null,
- "column_name": "table_name",
- "data_type": "text",
- "is_nullable": "NO",
- },
- ],
-}
-`;
-
-exports[`db_meta_modules should verify module table structures have database_id foreign keys 1`] = `
-{
- "constraintCount": 48020,
-}
-`;
-
-exports[`db_meta_modules should verify module tables have proper foreign key relationships 1`] = `
-{
- "constraintCount": 64596,
- "foreignTables": [
- "apis",
- "database",
- "field",
- "schema",
- "table",
- ],
-}
-`;
-
-exports[`db_meta_modules should verify specific module table column defaults 1`] = `
-{
- "tokensDefaults": [
- {
- "column_default": "uuid_generate_v4()",
- "column_name": "id",
- },
- {
- "column_default": "uuid_nil()",
- "column_name": "owned_table_id",
- },
- {
- "column_default": "uuid_nil()",
- "column_name": "schema_id",
- },
- {
- "column_default": "uuid_nil()",
- "column_name": "table_id",
- },
- {
- "column_default": "'3 days'::interval",
- "column_name": "tokens_default_expiration",
- },
- {
- "column_default": "'api_tokens'::text",
- "column_name": "tokens_table",
- },
- ],
- "usersDefaults": [
- {
- "column_default": "uuid_generate_v4()",
- "column_name": "id",
- },
- {
- "column_default": "uuid_nil()",
- "column_name": "schema_id",
- },
- {
- "column_default": "uuid_nil()",
- "column_name": "table_id",
- },
- {
- "column_default": "'users'::text",
- "column_name": "table_name",
- },
- {
- "column_default": "uuid_nil()",
- "column_name": "type_table_id",
- },
- {
- "column_default": "'role_types'::text",
- "column_name": "type_table_name",
- },
- ],
-}
-`;
-
-exports[`db_meta_modules should verify tokens_module table structure 1`] = `
-{
- "columns": [
- {
- "column_default": "uuid_generate_v4()",
- "column_name": "id",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": null,
- "column_name": "database_id",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": "uuid_nil()",
- "column_name": "schema_id",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": "uuid_nil()",
- "column_name": "table_id",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": "uuid_nil()",
- "column_name": "owned_table_id",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": "'3 days'::interval",
- "column_name": "tokens_default_expiration",
- "data_type": "interval",
- "is_nullable": "NO",
- },
- {
- "column_default": "'api_tokens'::text",
- "column_name": "tokens_table",
- "data_type": "text",
- "is_nullable": "NO",
- },
- ],
-}
-`;
-
-exports[`db_meta_modules should verify users_module table structure 1`] = `
-{
- "columns": [
- {
- "column_default": "uuid_generate_v4()",
- "column_name": "id",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": null,
- "column_name": "database_id",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": "uuid_nil()",
- "column_name": "schema_id",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": "uuid_nil()",
- "column_name": "table_id",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": "'users'::text",
- "column_name": "table_name",
- "data_type": "text",
- "is_nullable": "NO",
- },
- {
- "column_default": "uuid_nil()",
- "column_name": "type_table_id",
- "data_type": "uuid",
- "is_nullable": "NO",
- },
- {
- "column_default": "'role_types'::text",
- "column_name": "type_table_name",
- "data_type": "text",
- "is_nullable": "NO",
- },
- ],
-}
-`;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/__tests__/modules.test.ts b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/__tests__/modules.test.ts
deleted file mode 100644
index fc95af6cb..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/__tests__/modules.test.ts
+++ /dev/null
@@ -1,257 +0,0 @@
-import { getConnections, PgTestClient, snapshot } from 'pgsql-test';
-
-let pg: PgTestClient;
-let teardown: () => Promise;
-
-describe('db_meta_modules', () => {
- beforeAll(async () => {
- ({ pg, teardown } = await getConnections());
- });
-
- afterAll(async () => {
- await teardown();
- });
-
- beforeEach(async () => {
- await pg.beforeEach();
- });
-
- afterEach(async () => {
- await pg.afterEach();
- });
-
- it('should have all expected module tables', async () => {
- const expectedModules = [
- 'connected_accounts_module',
- 'crypto_addresses_module',
- 'crypto_auth_module',
- 'default_ids_module',
- 'emails_module',
- 'encrypted_secrets_module',
- 'field_module',
- 'invites_module',
- 'levels_module',
- 'limits_module',
- 'membership_types_module',
- 'memberships_module',
- 'permissions_module',
- 'phone_numbers_module',
- 'rls_module',
- 'secrets_module',
- 'tokens_module',
- 'user_auth_module',
- 'users_module',
- 'uuid_module'
- ];
-
- // Query for all module tables in meta_public schema
- const moduleTables = await pg.any(`
- SELECT table_name
- FROM information_schema.tables
- WHERE table_schema = 'meta_public'
- AND table_name LIKE '%_module'
- ORDER BY table_name
- `);
-
- const actualModuleNames = moduleTables.map(t => t.table_name);
-
- // Check that we have all expected modules
- for (const expectedModule of expectedModules) {
- expect(actualModuleNames).toContain(expectedModule);
- }
-
- expect(snapshot({ moduleNames: actualModuleNames })).toMatchSnapshot();
- });
-
- it('should verify users_module table structure', async () => {
- const columns = await pg.any(`
- SELECT
- column_name,
- data_type,
- is_nullable,
- column_default
- FROM information_schema.columns
- WHERE table_schema = 'meta_public'
- AND table_name = 'users_module'
- ORDER BY ordinal_position
- `);
-
- // Check that key columns exist
- const columnNames = columns.map(c => c.column_name);
- expect(columnNames).toContain('id');
- expect(columnNames).toContain('database_id');
- expect(columnNames).toContain('schema_id');
- expect(columnNames).toContain('table_id');
- expect(columnNames).toContain('table_name');
- expect(columnNames).toContain('type_table_name');
-
- expect(snapshot({ columns })).toMatchSnapshot();
- });
-
- it('should verify tokens_module table structure', async () => {
- const columns = await pg.any(`
- SELECT
- column_name,
- data_type,
- is_nullable,
- column_default
- FROM information_schema.columns
- WHERE table_schema = 'meta_public'
- AND table_name = 'tokens_module'
- ORDER BY ordinal_position
- `);
-
- // Check that key columns exist
- const columnNames = columns.map(c => c.column_name);
- expect(columnNames).toContain('id');
- expect(columnNames).toContain('database_id');
- expect(columnNames).toContain('schema_id');
- expect(columnNames).toContain('table_id');
- expect(columnNames).toContain('tokens_table');
- expect(columnNames).toContain('tokens_default_expiration');
-
- expect(snapshot({ columns })).toMatchSnapshot();
- });
-
- it('should verify emails_module table structure', async () => {
- const columns = await pg.any(`
- SELECT
- column_name,
- data_type,
- is_nullable,
- column_default
- FROM information_schema.columns
- WHERE table_schema = 'meta_public'
- AND table_name = 'emails_module'
- ORDER BY ordinal_position
- `);
-
- // Check that key columns exist
- const columnNames = columns.map(c => c.column_name);
- expect(columnNames).toContain('id');
- expect(columnNames).toContain('database_id');
- expect(columnNames).toContain('schema_id');
- expect(columnNames).toContain('private_schema_id');
- expect(columnNames).toContain('table_id');
- expect(columnNames).toContain('table_name');
-
- expect(snapshot({ columns })).toMatchSnapshot();
- });
-
- it('should verify module table structures have database_id foreign keys', async () => {
- // Check that all module tables have proper foreign key constraints to database
- const constraints = await pg.any(`
- SELECT
- tc.table_name,
- tc.constraint_name,
- tc.constraint_type,
- kcu.column_name,
- ccu.table_name AS foreign_table_name,
- ccu.column_name AS foreign_column_name
- FROM information_schema.table_constraints AS tc
- JOIN information_schema.key_column_usage AS kcu
- ON tc.constraint_name = kcu.constraint_name
- JOIN information_schema.constraint_column_usage AS ccu
- ON ccu.constraint_name = tc.constraint_name
- WHERE tc.table_schema = 'meta_public'
- AND tc.table_name LIKE '%_module'
- AND tc.constraint_type = 'FOREIGN KEY'
- AND kcu.column_name = 'database_id'
- AND ccu.table_name = 'database'
- ORDER BY tc.table_name
- `);
-
- // Should have at least several module tables with database_id foreign keys
- expect(constraints.length).toBeGreaterThan(10);
-
- // All should reference collections_public.database.id
- for (const constraint of constraints) {
- expect(constraint.column_name).toBe('database_id');
- expect(constraint.foreign_table_name).toBe('database');
- expect(constraint.foreign_column_name).toBe('id');
- }
-
- expect(snapshot({ constraintCount: constraints.length })).toMatchSnapshot();
- });
-
- it('should verify all module tables exist in meta_public schema', async () => {
- const tables = await pg.any(`
- SELECT table_name, table_type
- FROM information_schema.tables
- WHERE table_schema = 'meta_public'
- ORDER BY table_name
- `);
-
- const moduleTablesOnly = tables.filter(t => t.table_name.endsWith('_module'));
-
- expect(moduleTablesOnly.length).toBeGreaterThan(15);
- expect(snapshot({
- totalTables: tables.length,
- moduleTablesCount: moduleTablesOnly.length
- })).toMatchSnapshot();
- });
-
- it('should verify module tables have proper foreign key relationships', async () => {
- // Get all foreign key constraints for module tables
- const fkConstraints = await pg.any(`
- SELECT
- tc.table_name,
- kcu.column_name,
- ccu.table_name AS foreign_table_name,
- ccu.column_name AS foreign_column_name
- FROM information_schema.table_constraints AS tc
- JOIN information_schema.key_column_usage AS kcu
- ON tc.constraint_name = kcu.constraint_name
- JOIN information_schema.constraint_column_usage AS ccu
- ON ccu.constraint_name = tc.constraint_name
- WHERE tc.table_schema = 'meta_public'
- AND tc.table_name LIKE '%_module'
- AND tc.constraint_type = 'FOREIGN KEY'
- ORDER BY tc.table_name, kcu.column_name
- `);
-
- // Should have many foreign key relationships
- expect(fkConstraints.length).toBeGreaterThan(20);
-
- // Group by foreign table to see what they reference
- const foreignTables = [...new Set(fkConstraints.map(fk => fk.foreign_table_name))];
- expect(foreignTables).toContain('database');
- expect(foreignTables).toContain('schema');
- expect(foreignTables).toContain('table');
-
- expect(snapshot({
- constraintCount: fkConstraints.length,
- foreignTables: foreignTables.sort()
- })).toMatchSnapshot();
- });
-
- it('should verify specific module table column defaults', async () => {
- // Check that modules have sensible defaults
- const tokensDefaults = await pg.any(`
- SELECT column_name, column_default
- FROM information_schema.columns
- WHERE table_schema = 'meta_public'
- AND table_name = 'tokens_module'
- AND column_default IS NOT NULL
- ORDER BY column_name
- `);
-
- const usersDefaults = await pg.any(`
- SELECT column_name, column_default
- FROM information_schema.columns
- WHERE table_schema = 'meta_public'
- AND table_name = 'users_module'
- AND column_default IS NOT NULL
- ORDER BY column_name
- `);
-
- // Should have some default values set
- expect(tokensDefaults.length).toBeGreaterThan(3);
- expect(usersDefaults.length).toBeGreaterThan(3);
-
- expect(snapshot({
- tokensDefaults,
- usersDefaults
- })).toMatchSnapshot();
- });
-});
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_private/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_private/schema.sql
deleted file mode 100644
index 309e13798..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_private/schema.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- Deploy schemas/meta_private/schema to pg
-
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/schema.sql
deleted file mode 100644
index bee0a8705..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/schema.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- Deploy schemas/meta_public/schema to pg
-
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/apis/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/apis/table.sql
deleted file mode 100644
index 86905ec29..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/apis/table.sql
+++ /dev/null
@@ -1,3 +0,0 @@
--- Deploy schemas/meta_public/tables/apis/table to pg
-
--- requires: schemas/meta_public/schema
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/connected_accounts_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/connected_accounts_module/table.sql
deleted file mode 100644
index f5743fae7..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/connected_accounts_module/table.sql
+++ /dev/null
@@ -1,34 +0,0 @@
--- Deploy schemas/meta_public/tables/connected_accounts_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.connected_accounts_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
-
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
- private_schema_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_id uuid NOT NULL DEFAULT uuid_nil(),
- owner_table_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_name text NOT NULL,
-
- --
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT owner_table_fkey FOREIGN KEY (owner_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT private_schema_fkey FOREIGN KEY (private_schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.connected_accounts_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT private_schema_fkey ON meta_public.connected_accounts_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT table_fkey ON meta_public.connected_accounts_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT owner_table_fkey ON meta_public.connected_accounts_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON meta_public.connected_accounts_module IS E'@omit manyToMany';
-CREATE INDEX connected_accounts_module_database_id_idx ON meta_public.connected_accounts_module ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/crypto_addresses_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/crypto_addresses_module/table.sql
deleted file mode 100644
index 974993938..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/crypto_addresses_module/table.sql
+++ /dev/null
@@ -1,35 +0,0 @@
--- Deploy schemas/meta_public/tables/crypto_addresses_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.crypto_addresses_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
-
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
- private_schema_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_id uuid NOT NULL DEFAULT uuid_nil(),
- owner_table_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_name text NOT NULL,
- crypto_network text NOT NULL DEFAULT 'BTC',
-
- --
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT owner_table_fkey FOREIGN KEY (owner_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT private_schema_fkey FOREIGN KEY (private_schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.crypto_addresses_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT private_schema_fkey ON meta_public.crypto_addresses_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT table_fkey ON meta_public.crypto_addresses_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT owner_table_fkey ON meta_public.crypto_addresses_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON meta_public.crypto_addresses_module IS E'@omit manyToMany';
-CREATE INDEX crypto_addresses_module_database_id_idx ON meta_public.crypto_addresses_module ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/crypto_auth_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/crypto_auth_module/table.sql
deleted file mode 100644
index e299664fc..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/crypto_auth_module/table.sql
+++ /dev/null
@@ -1,41 +0,0 @@
--- Deploy schemas/meta_public/tables/crypto_auth_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.crypto_auth_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
-
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
-
- users_table_id uuid NOT NULL DEFAULT uuid_nil(),
- tokens_table_id uuid NOT NULL DEFAULT uuid_nil(),
- secrets_table_id uuid NOT NULL DEFAULT uuid_nil(),
- addresses_table_id uuid NOT NULL DEFAULT uuid_nil(),
-
- user_field text NOT NULL,
-
- crypto_network text NOT NULL DEFAULT 'BTC',
- sign_in_request_challenge text NOT NULL DEFAULT 'sign_in_request_challenge',
- sign_in_record_failure text NOT NULL DEFAULT 'sign_in_record_failure',
- sign_up_with_key text NOT NULL DEFAULT 'sign_up_with_key',
- sign_in_with_challenge text NOT NULL DEFAULT 'sign_in_with_challenge',
-
- --
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT secrets_table_fkey FOREIGN KEY (secrets_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT users_table_fkey FOREIGN KEY (users_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT tokens_table_fkey FOREIGN KEY (tokens_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT db_fkey ON meta_public.crypto_auth_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT secrets_table_fkey ON meta_public.crypto_auth_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT users_table_fkey ON meta_public.crypto_auth_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT tokens_table_fkey ON meta_public.crypto_auth_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.crypto_auth_module IS E'@omit manyToMany';
-CREATE INDEX crypto_auth_module_database_id_idx ON meta_public.crypto_auth_module ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/default_ids_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/default_ids_module/table.sql
deleted file mode 100644
index 4ce4d7a22..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/default_ids_module/table.sql
+++ /dev/null
@@ -1,19 +0,0 @@
--- Deploy schemas/meta_public/tables/default_ids_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.default_ids_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
-
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT db_fkey ON meta_public.default_ids_module IS E'@omit manyToMany';
-CREATE INDEX default_ids_module_database_id_idx ON meta_public.default_ids_module ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/denormalized_table_field/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/denormalized_table_field/table.sql
deleted file mode 100644
index 394c964da..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/denormalized_table_field/table.sql
+++ /dev/null
@@ -1,41 +0,0 @@
--- Deploy schemas/meta_public/tables/denormalized_table_field/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.denormalized_table_field (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
-
- table_id uuid NOT NULL,
- field_id uuid NOT NULL,
-
- set_ids uuid[],
-
- ref_table_id uuid NOT NULL,
- ref_field_id uuid NOT NULL,
- ref_ids uuid[],
-
- use_updates bool NOT NULL DEFAULT TRUE,
- update_defaults bool NOT NULL DEFAULT TRUE,
-
- func_name text NULL,
- func_order int NOT NULL DEFAULT 0,
-
- --
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT ref_table_fkey FOREIGN KEY (ref_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT field_fkey FOREIGN KEY (field_id) REFERENCES collections_public.field (id) ON DELETE CASCADE,
- CONSTRAINT ref_field_fkey FOREIGN KEY (ref_field_id) REFERENCES collections_public.field (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT db_fkey ON meta_public.denormalized_table_field IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT table_fkey ON meta_public.denormalized_table_field IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT ref_table_fkey ON meta_public.denormalized_table_field IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT field_fkey ON meta_public.denormalized_table_field IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT ref_field_fkey ON meta_public.denormalized_table_field IS E'@omit manyToMany';
-CREATE INDEX denormalized_table_field_database_id_idx ON meta_public.denormalized_table_field ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/emails_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/emails_module/table.sql
deleted file mode 100644
index 74656d7c0..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/emails_module/table.sql
+++ /dev/null
@@ -1,34 +0,0 @@
--- Deploy schemas/meta_public/tables/emails_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.emails_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
-
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
- private_schema_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_id uuid NOT NULL DEFAULT uuid_nil(),
- owner_table_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_name text NOT NULL,
-
- --
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT owner_table_fkey FOREIGN KEY (owner_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT private_schema_fkey FOREIGN KEY (private_schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.emails_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT private_schema_fkey ON meta_public.emails_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT table_fkey ON meta_public.emails_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT owner_table_fkey ON meta_public.emails_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON meta_public.emails_module IS E'@omit manyToMany';
-CREATE INDEX emails_module_database_id_idx ON meta_public.emails_module ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/encrypted_secrets_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/encrypted_secrets_module/table.sql
deleted file mode 100644
index 7754ded8a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/encrypted_secrets_module/table.sql
+++ /dev/null
@@ -1,29 +0,0 @@
--- Deploy schemas/meta_public/tables/encrypted_secrets_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.encrypted_secrets_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
-
- --
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
- table_id uuid NOT NULL DEFAULT uuid_nil(),
- table_name text NOT NULL DEFAULT 'encrypted_secrets',
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.encrypted_secrets_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON meta_public.encrypted_secrets_module IS E'@omit manyToMany';
-CREATE INDEX encrypted_secrets_module_database_id_idx ON meta_public.encrypted_secrets_module ( database_id );
-
-COMMENT ON CONSTRAINT table_fkey
- ON meta_public.encrypted_secrets_module IS E'@omit manyToMany';
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/field_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/field_module/table.sql
deleted file mode 100644
index 968d269e9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/field_module/table.sql
+++ /dev/null
@@ -1,37 +0,0 @@
--- Deploy schemas/meta_public/tables/field_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.field_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
-
- private_schema_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_id uuid NOT NULL DEFAULT uuid_nil(),
- field_id uuid NOT NULL DEFAULT uuid_nil(),
-
- -- data = '{"regexp":"^kjhsdkjhsd$"}'
- -- data = '{"min":10, "max": 20}'
- data jsonb NOT NULL DEFAULT '{}',
-
- triggers text[],
- functions text[],
-
- --
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT field_fkey FOREIGN KEY (field_id) REFERENCES collections_public.field (id) ON DELETE CASCADE,
- CONSTRAINT private_schema_fkey FOREIGN KEY (private_schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT private_schema_fkey ON meta_public.field_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT table_fkey ON meta_public.field_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT field_fkey ON meta_public.field_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON meta_public.field_module IS E'@omit manyToMany';
-CREATE INDEX field_module_database_id_idx ON meta_public.field_module ( database_id );
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/invites_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/invites_module/table.sql
deleted file mode 100644
index 245462ef5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/invites_module/table.sql
+++ /dev/null
@@ -1,51 +0,0 @@
--- Deploy schemas/meta_public/tables/invites_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.invites_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
-
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
- private_schema_id uuid NOT NULL DEFAULT uuid_nil(),
-
- emails_table_id uuid NOT NULL DEFAULT uuid_nil(),
- users_table_id uuid NOT NULL DEFAULT uuid_nil(),
-
- invites_table_id uuid NOT NULL DEFAULT uuid_nil(),
- claimed_invites_table_id uuid NOT NULL DEFAULT uuid_nil(),
-
- invites_table_name text NOT NULL DEFAULT '',
- claimed_invites_table_name text NOT NULL DEFAULT '',
- submit_invite_code_function text NOT NULL DEFAULT '',
-
- prefix text NULL,
-
- membership_type int NOT NULL,
- -- if this is NOT NULL, then we add entity_id
- -- e.g. limits to the app itself are considered global owned by app and no explicit owner
- entity_table_id uuid NULL,
-
- --
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT invites_table_fkey FOREIGN KEY (invites_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT emails_table_fkey FOREIGN KEY (emails_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT users_table_fkey FOREIGN KEY (users_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT claimed_invites_table_fkey FOREIGN KEY (claimed_invites_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT pschema_fkey FOREIGN KEY (private_schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT db_fkey ON meta_public.invites_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT emails_table_fkey ON meta_public.invites_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT users_table_fkey ON meta_public.invites_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT invites_table_fkey ON meta_public.invites_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT claimed_invites_table_fkey ON meta_public.invites_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.invites_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT pschema_fkey ON meta_public.invites_module IS E'@omit manyToMany';
-CREATE INDEX invites_module_database_id_idx ON meta_public.invites_module ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/levels_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/levels_module/table.sql
deleted file mode 100644
index d2abb4e77..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/levels_module/table.sql
+++ /dev/null
@@ -1,71 +0,0 @@
--- Deploy schemas/meta_public/tables/levels_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.levels_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
-
- --
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
- private_schema_id uuid NOT NULL DEFAULT uuid_nil(),
- --
-
- steps_table_id uuid NOT NULL DEFAULT uuid_nil(),
- steps_table_name text NOT NULL DEFAULT '',
-
- achievements_table_id uuid NOT NULL DEFAULT uuid_nil(),
- achievements_table_name text NOT NULL DEFAULT '',
-
- levels_table_id uuid NOT NULL DEFAULT uuid_nil(),
- levels_table_name text NOT NULL DEFAULT '',
-
- level_requirements_table_id uuid NOT NULL DEFAULT uuid_nil(),
- level_requirements_table_name text NOT NULL DEFAULT '',
-
- completed_step text NOT NULL DEFAULT '',
- incompleted_step text NOT NULL DEFAULT '',
- tg_achievement text NOT NULL DEFAULT '',
- tg_achievement_toggle text NOT NULL DEFAULT '',
- tg_achievement_toggle_boolean text NOT NULL DEFAULT '',
- tg_achievement_boolean text NOT NULL DEFAULT '',
- upsert_achievement text NOT NULL DEFAULT '',
- tg_update_achievements text NOT NULL DEFAULT '',
- steps_required text NOT NULL DEFAULT '',
- level_achieved text NOT NULL DEFAULT '',
-
- prefix text NULL,
-
- membership_type int NOT NULL,
- -- if this is NOT NULL, then we add entity_id
- -- e.g. limits to the app itself are considered global owned by app and no explicit owner
- entity_table_id uuid NULL,
-
- -- required tables
- actor_table_id uuid NOT NULL DEFAULT uuid_nil(),
-
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT private_schema_fkey FOREIGN KEY (private_schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
-
- CONSTRAINT steps_table_fkey FOREIGN KEY (steps_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT achievements_table_fkey FOREIGN KEY (achievements_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT levels_table_fkey FOREIGN KEY (levels_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT level_requirements_table_fkey FOREIGN KEY (level_requirements_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT actor_table_fkey FOREIGN KEY (actor_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT db_fkey ON meta_public.levels_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.levels_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT steps_table_fkey ON meta_public.levels_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT achievements_table_fkey ON meta_public.levels_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT levels_table_fkey ON meta_public.levels_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT level_requirements_table_fkey ON meta_public.levels_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT actor_table_fkey ON meta_public.levels_module IS E'@omit manyToMany';
-CREATE INDEX user_status_module_database_id_idx ON meta_public.levels_module ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/limits_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/limits_module/table.sql
deleted file mode 100644
index ea3362f3d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/limits_module/table.sql
+++ /dev/null
@@ -1,63 +0,0 @@
--- Deploy schemas/meta_public/tables/limits_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.limits_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
- --
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
- private_schema_id uuid NOT NULL DEFAULT uuid_nil(),
- ---
- table_id uuid NOT NULL DEFAULT uuid_nil(),
- table_name text NOT NULL DEFAULT '',
-
- default_table_id uuid NOT NULL DEFAULT uuid_nil(),
- default_table_name text NOT NULL DEFAULT '',
- --
-
- limit_increment_function text NOT NULL DEFAULT '',
- limit_decrement_function text NOT NULL DEFAULT '',
- limit_increment_trigger text NOT NULL DEFAULT '',
- limit_decrement_trigger text NOT NULL DEFAULT '',
- limit_update_trigger text NOT NULL DEFAULT '',
- limit_check_function text NOT NULL DEFAULT '',
-
- prefix text NULL,
-
- membership_type int NOT NULL,
- -- if this is NOT NULL, then we add entity_id
- -- e.g. limits to the app itself are considered global owned by app and no explicit owner
- entity_table_id uuid NULL,
-
- -- required tables
- actor_table_id uuid NOT NULL DEFAULT uuid_nil(),
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT private_schema_fkey FOREIGN KEY (private_schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT default_table_fkey FOREIGN KEY (default_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT actor_table_fkey FOREIGN KEY (actor_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE
-
-);
-
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.limits_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT private_schema_fkey ON meta_public.limits_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT db_fkey ON meta_public.limits_module IS E'@omit manyToMany';
-CREATE INDEX limits_module_database_id_idx ON meta_public.limits_module ( database_id );
-
-COMMENT ON CONSTRAINT table_fkey
- ON meta_public.limits_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT default_table_fkey
- ON meta_public.limits_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT actor_table_fkey
- ON meta_public.limits_module IS E'@omit manyToMany';
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/membership_types_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/membership_types_module/table.sql
deleted file mode 100644
index 70fbd5796..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/membership_types_module/table.sql
+++ /dev/null
@@ -1,30 +0,0 @@
--- Deploy schemas/meta_public/tables/membership_types_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.membership_types_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
- --
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_id uuid NOT NULL DEFAULT uuid_nil(),
- table_name text NOT NULL DEFAULT 'membership_types',
-
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.membership_types_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON meta_public.membership_types_module IS E'@omit manyToMany';
-CREATE INDEX membership_types_module_database_id_idx ON meta_public.membership_types_module ( database_id );
-
-COMMENT ON CONSTRAINT table_fkey
- ON meta_public.membership_types_module IS E'@omit manyToMany';
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/memberships_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/memberships_module/table.sql
deleted file mode 100644
index 9f96fd4e7..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/memberships_module/table.sql
+++ /dev/null
@@ -1,120 +0,0 @@
--- Deploy schemas/meta_public/tables/memberships_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.memberships_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
- --
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
- private_schema_id uuid NOT NULL DEFAULT uuid_nil(),
-
- memberships_table_id uuid NOT NULL DEFAULT uuid_nil(),
- memberships_table_name text NOT NULL DEFAULT '',
-
- members_table_id uuid NOT NULL DEFAULT uuid_nil(),
- members_table_name text NOT NULL DEFAULT '',
-
- membership_defaults_table_id uuid NOT NULL DEFAULT uuid_nil(),
- membership_defaults_table_name text NOT NULL DEFAULT '',
-
- grants_table_id uuid NOT NULL DEFAULT uuid_nil(),
- grants_table_name text NOT NULL DEFAULT '',
-
- -- required tables
- actor_table_id uuid NOT NULL DEFAULT uuid_nil(),
- limits_table_id uuid NOT NULL DEFAULT uuid_nil(),
- default_limits_table_id uuid NOT NULL DEFAULT uuid_nil(),
- permissions_table_id uuid NOT NULL DEFAULT uuid_nil(),
- default_permissions_table_id uuid NOT NULL DEFAULT uuid_nil(),
- acl_table_id uuid NOT NULL DEFAULT uuid_nil(),
-
- admin_grants_table_id uuid NOT NULL DEFAULT uuid_nil(),
- admin_grants_table_name text NOT NULL DEFAULT '',
-
- owner_grants_table_id uuid NOT NULL DEFAULT uuid_nil(),
- owner_grants_table_name text NOT NULL DEFAULT '',
-
- membership_type int NOT NULL,
-
- -- if this is NOT NULL, then we add entity_id
- -- e.g. memberships to the app itself are considered global owned by app and no explicit owner
- entity_table_id uuid NULL,
- entity_table_owner_id uuid NULL,
-
- prefix text NULL,
-
- --
-
- actor_mask_check text NOT NULL DEFAULT '',
- actor_perm_check text NOT NULL DEFAULT '',
- entity_ids_by_mask text NULL,
- entity_ids_by_perm text NULL,
- entity_ids_function text NULL,
-
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT private_schema_fkey FOREIGN KEY (private_schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
-
- CONSTRAINT memberships_table_fkey FOREIGN KEY (memberships_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT membership_defaults_table_fkey FOREIGN KEY (membership_defaults_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT members_table_fkey FOREIGN KEY (members_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT grants_table_fkey FOREIGN KEY (grants_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT acl_table_fkey FOREIGN KEY (acl_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
-
- CONSTRAINT entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT entity_table_owner_fkey FOREIGN KEY (entity_table_owner_id) REFERENCES collections_public.field (id) ON DELETE CASCADE,
- CONSTRAINT actor_table_fkey FOREIGN KEY (actor_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT limits_table_fkey FOREIGN KEY (limits_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT default_limits_table_fkey FOREIGN KEY (default_limits_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
-
- CONSTRAINT permissions_table_fkey FOREIGN KEY (permissions_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT default_permissions_table_fkey FOREIGN KEY (default_permissions_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.memberships_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT private_schema_fkey ON meta_public.memberships_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON meta_public.memberships_module IS E'@omit manyToMany';
-CREATE INDEX memberships_module_database_id_idx ON meta_public.memberships_module ( database_id );
-
-COMMENT ON CONSTRAINT entity_table_fkey
- ON meta_public.memberships_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT entity_table_owner_fkey
- ON meta_public.memberships_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT memberships_table_fkey
- ON meta_public.memberships_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT members_table_fkey
- ON meta_public.memberships_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT membership_defaults_table_fkey
- ON meta_public.memberships_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT grants_table_fkey
- ON meta_public.memberships_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT acl_table_fkey
- ON meta_public.memberships_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT actor_table_fkey
- ON meta_public.memberships_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT limits_table_fkey
- ON meta_public.memberships_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT default_limits_table_fkey
- ON meta_public.memberships_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT permissions_table_fkey
- ON meta_public.memberships_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT default_permissions_table_fkey
- ON meta_public.memberships_module IS E'@omit manyToMany';
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/permissions_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/permissions_module/table.sql
deleted file mode 100644
index 40ad07825..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/permissions_module/table.sql
+++ /dev/null
@@ -1,65 +0,0 @@
--- Deploy schemas/meta_public/tables/permissions_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.permissions_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
- --
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
- private_schema_id uuid NOT NULL DEFAULT uuid_nil(),
- table_id uuid NOT NULL DEFAULT uuid_nil(),
- table_name text NOT NULL DEFAULT '',
- --
-
- --
- default_table_id uuid NOT NULL DEFAULT uuid_nil(),
- default_table_name text NOT NULL DEFAULT '',
- --
-
- bitlen int NOT NULL DEFAULT 24,
- membership_type int NOT NULL,
- -- if this is NOT NULL, then we add entity_id
- -- e.g. limits to the app itself are considered global owned by app and no explicit owner
- entity_table_id uuid NULL,
-
- -- required tables
- actor_table_id uuid NOT NULL DEFAULT uuid_nil(),
-
- prefix text NULL,
-
- --
-
- get_padded_mask text NOT NULL DEFAULT '',
- get_mask text NOT NULL DEFAULT '',
- get_by_mask text NOT NULL DEFAULT '',
- get_mask_by_name text NOT NULL DEFAULT '',
-
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT private_schema_fkey FOREIGN KEY (private_schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT default_table_fkey FOREIGN KEY (default_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT actor_table_fkey FOREIGN KEY (actor_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.permissions_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT private_schema_fkey ON meta_public.permissions_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON meta_public.permissions_module IS E'@omit manyToMany';
-CREATE INDEX permissions_module_database_id_idx ON meta_public.permissions_module ( database_id );
-
-COMMENT ON CONSTRAINT table_fkey
- ON meta_public.permissions_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT default_table_fkey
- ON meta_public.permissions_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT actor_table_fkey
- ON meta_public.permissions_module IS E'@omit manyToMany';
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/phone_numbers_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/phone_numbers_module/table.sql
deleted file mode 100644
index b72cd09da..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/phone_numbers_module/table.sql
+++ /dev/null
@@ -1,34 +0,0 @@
--- Deploy schemas/meta_public/tables/phone_numbers_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.phone_numbers_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
-
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
- private_schema_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_id uuid NOT NULL DEFAULT uuid_nil(),
- owner_table_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_name text NOT NULL,
-
- --
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT owner_table_fkey FOREIGN KEY (owner_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT private_schema_fkey FOREIGN KEY (private_schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.phone_numbers_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT private_schema_fkey ON meta_public.phone_numbers_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT table_fkey ON meta_public.phone_numbers_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT owner_table_fkey ON meta_public.phone_numbers_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON meta_public.phone_numbers_module IS E'@omit manyToMany';
-CREATE INDEX phone_numbers_module_database_id_idx ON meta_public.phone_numbers_module ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/rls_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/rls_module/table.sql
deleted file mode 100644
index c585b535b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/rls_module/table.sql
+++ /dev/null
@@ -1,46 +0,0 @@
--- Deploy schemas/meta_public/tables/rls_module/table to pg
-
--- requires: schemas/meta_public/schema
--- requires: schemas/meta_public/tables/apis/table
-
-BEGIN;
-
-CREATE TABLE meta_public.rls_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
-
- api_id uuid NOT NULL DEFAULT uuid_nil(),
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
- private_schema_id uuid NOT NULL DEFAULT uuid_nil(),
- tokens_table_id uuid NOT NULL DEFAULT uuid_nil(),
- users_table_id uuid NOT NULL DEFAULT uuid_nil(),
-
- --
-
- authenticate text NOT NULL DEFAULT 'authenticate',
- authenticate_strict text NOT NULL DEFAULT 'authenticate_strict',
- "current_role" text NOT NULL DEFAULT 'current_user',
- current_role_id text NOT NULL DEFAULT 'current_user_id',
-
- --
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT api_fkey FOREIGN KEY (api_id) REFERENCES meta_public.apis (id) ON DELETE CASCADE,
- CONSTRAINT tokens_table_fkey FOREIGN KEY (tokens_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT users_table_fkey FOREIGN KEY (users_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT pschema_fkey FOREIGN KEY (private_schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
-
- --
- CONSTRAINT api_id_uniq UNIQUE(api_id)
-);
-
-COMMENT ON CONSTRAINT api_fkey ON meta_public.rls_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.rls_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT pschema_fkey ON meta_public.rls_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT db_fkey ON meta_public.rls_module IS E'@omit';
-COMMENT ON CONSTRAINT tokens_table_fkey ON meta_public.rls_module IS E'@omit';
-COMMENT ON CONSTRAINT users_table_fkey ON meta_public.rls_module IS E'@omit';
-CREATE INDEX rls_module_database_id_idx ON meta_public.rls_module ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/secrets_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/secrets_module/table.sql
deleted file mode 100644
index 82bfbf235..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/secrets_module/table.sql
+++ /dev/null
@@ -1,28 +0,0 @@
--- Deploy schemas/meta_public/tables/secrets_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.secrets_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
- --
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
- table_id uuid NOT NULL DEFAULT uuid_nil(),
- table_name text NOT NULL DEFAULT 'secrets',
- --
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE
-
-);
-
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.secrets_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON meta_public.secrets_module IS E'@omit manyToMany';
-CREATE INDEX secrets_module_database_id_idx ON meta_public.secrets_module ( database_id );
-
-COMMENT ON CONSTRAINT table_fkey
- ON meta_public.secrets_module IS E'@omit manyToMany';
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/sites/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/sites/table.sql
deleted file mode 100644
index cd67efa15..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/sites/table.sql
+++ /dev/null
@@ -1,3 +0,0 @@
--- Deploy schemas/meta_public/tables/sites/table to pg
-
--- requires: schemas/meta_public/schema
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/tokens_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/tokens_module/table.sql
deleted file mode 100644
index 487d844ae..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/tokens_module/table.sql
+++ /dev/null
@@ -1,35 +0,0 @@
--- Deploy schemas/meta_public/tables/tokens_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.tokens_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
-
- --
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
- table_id uuid NOT NULL DEFAULT uuid_nil(),
- owned_table_id uuid NOT NULL DEFAULT uuid_nil(),
-
- tokens_default_expiration interval NOT NULL DEFAULT '3 days'::interval,
- tokens_table text NOT NULL DEFAULT 'api_tokens',
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT owned_table_fkey FOREIGN KEY (owned_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.tokens_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON meta_public.tokens_module IS E'@omit manyToMany';
-CREATE INDEX tokens_module_database_id_idx ON meta_public.tokens_module ( database_id );
-
-COMMENT ON CONSTRAINT owned_table_fkey
- ON meta_public.tokens_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT table_fkey
- ON meta_public.tokens_module IS E'@omit manyToMany';
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/user_auth_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/user_auth_module/table.sql
deleted file mode 100644
index f73f318ed..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/user_auth_module/table.sql
+++ /dev/null
@@ -1,68 +0,0 @@
--- Deploy schemas/meta_public/tables/user_auth_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.user_auth_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
-
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
- emails_table_id uuid NOT NULL DEFAULT uuid_nil(),
- users_table_id uuid NOT NULL DEFAULT uuid_nil(),
- secrets_table_id uuid NOT NULL DEFAULT uuid_nil(),
- encrypted_table_id uuid NOT NULL DEFAULT uuid_nil(),
- tokens_table_id uuid NOT NULL DEFAULT uuid_nil(),
-
- audits_table_id uuid NOT NULL DEFAULT uuid_nil(),
- audits_table_name text NOT NULL DEFAULT 'audit_logs',
-
- -- api_id uuid NOT NULL REFERENCES meta_public.apis (id),
-
- sign_in_function text NOT NULL DEFAULT 'login',
- sign_up_function text NOT NULL DEFAULT 'register',
- sign_out_function text NOT NULL DEFAULT 'logout',
- set_password_function text NOT NULL DEFAULT 'set_password',
- reset_password_function text NOT NULL DEFAULT 'reset_password',
- forgot_password_function text NOT NULL DEFAULT 'forgot_password',
- send_verification_email_function text NOT NULL DEFAULT 'send_verification_email',
- verify_email_function text NOT NULL DEFAULT 'verify_email',
-
- verify_password_function text NOT NULL DEFAULT 'verify_password',
- check_password_function text NOT NULL DEFAULT 'check_password',
-
- send_account_deletion_email_function text NOT NULL DEFAULT 'send_account_deletion_email',
- delete_account_function text NOT NULL DEFAULT 'confirm_delete_account',
-
- sign_in_one_time_token_function text NOT NULL DEFAULT 'login_one_time_token',
- one_time_token_function text NOT NULL DEFAULT 'one_time_token',
- extend_token_expires text NOT NULL DEFAULT 'extend_token_expires',
-
- -- UNIQUE(api_id),
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT email_table_fkey FOREIGN KEY (emails_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT users_table_fkey FOREIGN KEY (users_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT secrets_table_fkey FOREIGN KEY (secrets_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT encrypted_table_fkey FOREIGN KEY (encrypted_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT tokens_table_fkey FOREIGN KEY (tokens_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.user_auth_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON meta_public.user_auth_module IS E'@omit manyToMany';
-CREATE INDEX user_auth_module_database_id_idx ON meta_public.user_auth_module ( database_id );
-
-COMMENT ON CONSTRAINT email_table_fkey
- ON meta_public.user_auth_module IS E'@omit';
-COMMENT ON CONSTRAINT users_table_fkey
- ON meta_public.user_auth_module IS E'@omit';
-COMMENT ON CONSTRAINT secrets_table_fkey
- ON meta_public.user_auth_module IS E'@omit';
-COMMENT ON CONSTRAINT encrypted_table_fkey
- ON meta_public.user_auth_module IS E'@omit';
-COMMENT ON CONSTRAINT tokens_table_fkey
- ON meta_public.user_auth_module IS E'@omit';
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/users_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/users_module/table.sql
deleted file mode 100644
index 16bff9569..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/users_module/table.sql
+++ /dev/null
@@ -1,38 +0,0 @@
--- Deploy schemas/meta_public/tables/users_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.users_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
- --
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
- table_id uuid NOT NULL DEFAULT uuid_nil(),
- table_name text NOT NULL DEFAULT 'users',
- --
-
- --
- type_table_id uuid NOT NULL DEFAULT uuid_nil(),
- type_table_name text NOT NULL DEFAULT 'role_types',
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
- CONSTRAINT type_table_fkey FOREIGN KEY (type_table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.users_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON meta_public.users_module IS E'@omit manyToMany';
-CREATE INDEX users_module_database_id_idx ON meta_public.users_module ( database_id );
-
-COMMENT ON CONSTRAINT table_fkey
- ON meta_public.users_module IS E'@omit manyToMany';
-
-COMMENT ON CONSTRAINT type_table_fkey
- ON meta_public.users_module IS E'@omit manyToMany';
-
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/uuid_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/uuid_module/table.sql
deleted file mode 100644
index 0ddb84a83..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/deploy/schemas/meta_public/tables/uuid_module/table.sql
+++ /dev/null
@@ -1,23 +0,0 @@
--- Deploy schemas/meta_public/tables/uuid_module/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.uuid_module (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
- --
- schema_id uuid NOT NULL DEFAULT uuid_nil(),
- uuid_function text NOT NULL DEFAULT 'uuid_generate_v4',
- uuid_seed text NOT NULL,
- --
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT db_fkey ON meta_public.uuid_module IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT schema_fkey ON meta_public.uuid_module IS E'@omit manyToMany';
-CREATE INDEX uuid_module_database_id_idx ON meta_public.uuid_module ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/jest.config.js b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/jest.config.js
deleted file mode 100644
index e20e7efb5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/jest.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @type {import('ts-jest').JestConfigWithTsJest} */
-module.exports = {
- preset: 'ts-jest',
- testEnvironment: 'node',
-
- // Match both __tests__ and colocated test files
- testMatch: ['**/?(*.)+(test|spec).{ts,tsx,js,jsx}'],
-
- // Ignore build artifacts and type declarations
- testPathIgnorePatterns: ['/dist/', '\\.d\\.ts$'],
- modulePathIgnorePatterns: ['/dist/'],
- watchPathIgnorePatterns: ['/dist/'],
-
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
-};
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/package.json b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/package.json
deleted file mode 100644
index 7d5b6dea9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/package.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "name": "@pgpm/metaschema-modules",
- "version": "0.15.2",
- "description": "Module metadata handling and dependency tracking",
- "author": "Dan Lynch ",
- "contributors": [
- "Constructive "
- ],
- "keywords": [
- "postgresql",
- "pgpm",
- "metadata",
- "modules"
- ],
- "publishConfig": {
- "access": "public"
- },
- "scripts": {
- "bundle": "pgpm package",
- "test": "jest",
- "test:watch": "jest --watch"
- },
- "dependencies": {
- "@pgpm/metaschema-schema": "0.15.2",
- "@pgpm/verify": "0.15.2"
- },
- "devDependencies": {
- "pgpm": "^1.0.0"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/constructive-io/pgpm-modules"
- },
- "homepage": "https://github.com/constructive-io/pgpm-modules",
- "bugs": {
- "url": "https://github.com/constructive-io/pgpm-modules/issues"
- }
-}
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_private/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_private/schema.sql
deleted file mode 100644
index 7ee112842..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_private/schema.sql
+++ /dev/null
@@ -1 +0,0 @@
--- Revert schemas/meta_private/schema from pg
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/schema.sql
deleted file mode 100644
index 08a50ccb8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/schema.sql
+++ /dev/null
@@ -1 +0,0 @@
--- Revert schemas/meta_public/schema from pg
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/apis/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/apis/table.sql
deleted file mode 100644
index aeccc4601..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/apis/table.sql
+++ /dev/null
@@ -1 +0,0 @@
--- Revert schemas/meta_public/tables/apis/table from pg
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/connected_accounts_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/connected_accounts_module/table.sql
deleted file mode 100644
index 22168bf09..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/connected_accounts_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/connected_accounts_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.connected_accounts_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/crypto_addresses_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/crypto_addresses_module/table.sql
deleted file mode 100644
index adc87f357..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/crypto_addresses_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/crypto_addresses_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.crypto_addresses_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/crypto_auth_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/crypto_auth_module/table.sql
deleted file mode 100644
index 909cbd44f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/crypto_auth_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/crypto_auth_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.crypto_auth_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/default_ids_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/default_ids_module/table.sql
deleted file mode 100644
index 57b175828..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/default_ids_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/default_ids_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.default_ids_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/denormalized_table_field/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/denormalized_table_field/table.sql
deleted file mode 100644
index 94c3bba28..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/denormalized_table_field/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/denormalized_table_field/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.denormalized_table_field;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/emails_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/emails_module/table.sql
deleted file mode 100644
index fa3534dfb..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/emails_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/emails_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.emails_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/encrypted_secrets_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/encrypted_secrets_module/table.sql
deleted file mode 100644
index aa35bb9c6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/encrypted_secrets_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/encrypted_secrets_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.encrypted_secrets_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/field_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/field_module/table.sql
deleted file mode 100644
index 5fd897f3e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/field_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/field_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.field_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/invites_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/invites_module/table.sql
deleted file mode 100644
index 99f4ad89a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/invites_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/invites_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.invites_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/levels_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/levels_module/table.sql
deleted file mode 100644
index 8ee3f52a2..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/levels_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/levels_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.levels_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/limits_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/limits_module/table.sql
deleted file mode 100644
index 56affe7a5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/limits_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/limits_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.limits_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/membership_types_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/membership_types_module/table.sql
deleted file mode 100644
index 48667e5db..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/membership_types_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/membership_types_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.membership_types_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/memberships_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/memberships_module/table.sql
deleted file mode 100644
index 56324690f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/memberships_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/memberships_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.memberships_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/permissions_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/permissions_module/table.sql
deleted file mode 100644
index 0990d7cce..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/permissions_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/permissions_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.permissions_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/phone_numbers_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/phone_numbers_module/table.sql
deleted file mode 100644
index f43995834..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/phone_numbers_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/phone_numbers_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.phone_numbers_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/rls_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/rls_module/table.sql
deleted file mode 100644
index 55ca997af..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/rls_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/rls_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.rls_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/secrets_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/secrets_module/table.sql
deleted file mode 100644
index 8a230be46..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/secrets_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/secrets_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.secrets_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/sites/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/sites/table.sql
deleted file mode 100644
index e426e598e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/sites/table.sql
+++ /dev/null
@@ -1 +0,0 @@
--- Revert schemas/meta_public/tables/sites/table from pg
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/tokens_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/tokens_module/table.sql
deleted file mode 100644
index f3a2538aa..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/tokens_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/tokens_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.tokens_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/user_auth_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/user_auth_module/table.sql
deleted file mode 100644
index da3b316f9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/user_auth_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/user_auth_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.user_auth_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/users_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/users_module/table.sql
deleted file mode 100644
index 411b1b21f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/users_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/users_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.users_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/uuid_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/uuid_module/table.sql
deleted file mode 100644
index cfd3d6785..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/revert/schemas/meta_public/tables/uuid_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/uuid_module/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.uuid_module;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_private/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_private/schema.sql
deleted file mode 100644
index 80107ac59..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_private/schema.sql
+++ /dev/null
@@ -1 +0,0 @@
--- Verify schemas/meta_private/schema on pg
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/schema.sql
deleted file mode 100644
index 3244fb3ee..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/schema.sql
+++ /dev/null
@@ -1 +0,0 @@
--- Verify schemas/meta_public/schema on pg
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/apis/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/apis/table.sql
deleted file mode 100644
index 45b7180ca..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/apis/table.sql
+++ /dev/null
@@ -1 +0,0 @@
--- Verify schemas/meta_public/tables/apis/table on pg
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/connected_accounts_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/connected_accounts_module/table.sql
deleted file mode 100644
index 5db21b879..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/connected_accounts_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/connected_accounts_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.connected_accounts_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/crypto_addresses_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/crypto_addresses_module/table.sql
deleted file mode 100644
index abc5e735a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/crypto_addresses_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/crypto_addresses_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.crypto_addresses_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/crypto_auth_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/crypto_auth_module/table.sql
deleted file mode 100644
index 1598829ef..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/crypto_auth_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/crypto_auth_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.crypto_auth_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/default_ids_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/default_ids_module/table.sql
deleted file mode 100644
index eec85e2e4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/default_ids_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/default_ids_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.default_ids_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/denormalized_table_field/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/denormalized_table_field/table.sql
deleted file mode 100644
index abbb722ab..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/denormalized_table_field/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/denormalized_table_field/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.denormalized_table_field');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/emails_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/emails_module/table.sql
deleted file mode 100644
index 6e11812c2..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/emails_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/emails_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.emails_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/encrypted_secrets_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/encrypted_secrets_module/table.sql
deleted file mode 100644
index 940f5a807..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/encrypted_secrets_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/encrypted_secrets_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.encrypted_secrets_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/field_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/field_module/table.sql
deleted file mode 100644
index c110ef8cf..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/field_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/field_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.field_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/invites_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/invites_module/table.sql
deleted file mode 100644
index 31e29c27b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/invites_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/invites_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.invites_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/levels_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/levels_module/table.sql
deleted file mode 100644
index 1b4803964..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/levels_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/levels_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.levels_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/limits_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/limits_module/table.sql
deleted file mode 100644
index fedd5b9ad..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/limits_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/limits_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.limits_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/membership_types_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/membership_types_module/table.sql
deleted file mode 100644
index ee5dfe52b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/membership_types_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/membership_types_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.membership_types_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/memberships_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/memberships_module/table.sql
deleted file mode 100644
index 0c449dcea..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/memberships_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/memberships_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.memberships_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/permissions_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/permissions_module/table.sql
deleted file mode 100644
index 826c52ed5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/permissions_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/permissions_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.permissions_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/phone_numbers_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/phone_numbers_module/table.sql
deleted file mode 100644
index c0c9e5b15..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/phone_numbers_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/phone_numbers_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.phone_numbers_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/rls_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/rls_module/table.sql
deleted file mode 100644
index feeec4277..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/rls_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/rls_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.rls_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/secrets_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/secrets_module/table.sql
deleted file mode 100644
index eeb19742c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/secrets_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/secrets_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.secrets_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/sites/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/sites/table.sql
deleted file mode 100644
index 2cf366070..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/sites/table.sql
+++ /dev/null
@@ -1 +0,0 @@
--- Verify schemas/meta_public/tables/sites/table on pg
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/tokens_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/tokens_module/table.sql
deleted file mode 100644
index 104171f42..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/tokens_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/tokens_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.tokens_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/user_auth_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/user_auth_module/table.sql
deleted file mode 100644
index 17c13cc7e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/user_auth_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/user_auth_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.user_auth_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/users_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/users_module/table.sql
deleted file mode 100644
index 3d53e55b9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/users_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/users_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.users_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/uuid_module/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/uuid_module/table.sql
deleted file mode 100644
index 692e98291..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/verify/schemas/meta_public/tables/uuid_module/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/uuid_module/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.uuid_module');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/LICENSE b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/LICENSE
deleted file mode 100644
index 7b18c9183..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2025 Dan Lynch
-Copyright (c) 2025 Constructive
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/README.md b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/README.md
deleted file mode 100644
index ecfff784d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/README.md
+++ /dev/null
@@ -1,324 +0,0 @@
-# @pgpm/metaschema-schema
-
-
-
-
-
-
-
-
-
-
-
-
-
-Database metadata utilities and introspection functions.
-
-## Overview
-
-`@pgpm/metaschema-schema` provides a comprehensive metadata management system for PostgreSQL databases. This package creates tables and schemas for storing and querying database structure information including databases, schemas, tables, fields, constraints, indexes, and more. It enables runtime schema introspection, metadata-driven code generation, and database structure management.
-
-## Features
-
-- **Database Metadata Storage**: Store information about databases, schemas, tables, and fields
-- **Constraint Tracking**: Track primary keys, foreign keys, unique constraints, and check constraints
-- **Index Management**: Store and query index definitions
-- **Trigger and Procedure Metadata**: Track database functions and triggers
-- **RLS and Policy Information**: Store row-level security policies
-- **Extension Tracking**: Manage database extensions and their relationships
-- **API and Site Metadata**: Store API configurations and site information
-- **GraphQL Integration**: Smart tags and annotations for GraphQL schema generation
-
-## Installation
-
-If you have `pgpm` installed:
-
-```bash
-pgpm install @pgpm/metaschema-schema
-pgpm deploy
-```
-
-This is a quick way to get started. The sections below provide more detailed installation options.
-
-### Prerequisites
-
-```bash
-# Install pgpm CLI
-npm install -g pgpm
-
-# Start local Postgres (via Docker) and export env vars
-pgpm docker start
-eval "$(pgpm env)"
-```
-
-> **Tip:** Already running Postgres? Skip the Docker step and just export your `PG*` environment variables.
-
-### **Add to an Existing Package**
-
-```bash
-# 1. Install the package
-pgpm install @pgpm/metaschema-schema
-
-# 2. Deploy locally
-pgpm deploy
-```
-
-### **Add to a New Project**
-
-```bash
-# 1. Create a workspace
-pgpm init workspace
-
-# 2. Create your first module
-cd my-workspace
-pgpm init
-
-# 3. Install a package
-cd packages/my-module
-pgpm install @pgpm/metaschema-schema
-
-# 4. Deploy everything
-pgpm deploy --createdb --database mydb1
-```
-
-## Core Schemas
-
-### collections_public Schema
-
-Stores database structure metadata:
-
-- **database**: Database definitions with schema names and hashes
-- **schema**: Schema definitions within databases
-- **table**: Table definitions with RLS, timestamps, and naming conventions
-- **field**: Column definitions with types, constraints, and validation rules
-- **primary_key_constraint**: Primary key definitions
-- **foreign_key_constraint**: Foreign key relationships
-- **unique_constraint**: Unique constraints
-- **check_constraint**: Check constraint definitions
-- **index**: Index definitions
-- **trigger**: Trigger definitions
-- **procedure**: Stored procedure definitions
-- **policy**: Row-level security policies
-- **extension**: PostgreSQL extensions
-- **database_extension**: Extension installations per database
-
-### collections_private Schema
-
-Private schema for internal metadata operations.
-
-### meta_public Schema
-
-Application-level metadata:
-
-- **apis**: API configurations
-- **api_extensions**: API extension relationships
-- **api_modules**: API module definitions
-- **api_schemata**: API schema configurations
-- **sites**: Site definitions
-- **apps**: Application definitions
-- **domains**: Domain configurations
-- **site_metadata**: Site metadata
-- **site_modules**: Site module configurations
-- **site_themes**: Site theme definitions
-
-## Usage
-
-### Storing Database Metadata
-
-```sql
--- Create a database entry
-INSERT INTO collections_public.database (name, label, schema_name, private_schema_name)
-VALUES ('my_app', 'My Application', 'my_app_public', 'my_app_private')
-RETURNING id;
-
--- Create a schema entry
-INSERT INTO collections_public.schema (database_id, name)
-VALUES ('database-uuid', 'public')
-RETURNING id;
-
--- Create a table entry
-INSERT INTO collections_public.table (
- database_id,
- schema_id,
- name,
- label,
- use_rls,
- timestamps,
- peoplestamps
-) VALUES (
- 'database-uuid',
- 'schema-uuid',
- 'users',
- 'Users',
- true,
- true,
- true
-);
-
--- Create field entries
-INSERT INTO collections_public.field (
- database_id,
- table_id,
- name,
- label,
- type,
- is_required,
- field_order
-) VALUES
- ('database-uuid', 'table-uuid', 'id', 'ID', 'uuid', true, 1),
- ('database-uuid', 'table-uuid', 'email', 'Email', 'email', true, 2),
- ('database-uuid', 'table-uuid', 'name', 'Name', 'text', false, 3);
-```
-
-### Querying Metadata
-
-```sql
--- Get all tables in a database
-SELECT t.name, t.label, s.name as schema_name
-FROM collections_public.table t
-JOIN collections_public.schema s ON t.schema_id = s.id
-WHERE t.database_id = 'database-uuid';
-
--- Get all fields for a table
-SELECT f.name, f.label, f.type, f.is_required, f.default_value
-FROM collections_public.field f
-WHERE f.table_id = 'table-uuid'
-ORDER BY f.field_order;
-
--- Get foreign key relationships
-SELECT
- fk.name as constraint_name,
- t1.name as from_table,
- t2.name as to_table
-FROM collections_public.foreign_key_constraint fk
-JOIN collections_public.table t1 ON fk.table_id = t1.id
-JOIN collections_public.table t2 ON fk.foreign_table_id = t2.id
-WHERE fk.database_id = 'database-uuid';
-```
-
-### Smart Tags for GraphQL
-
-The package supports smart tags for GraphQL schema generation:
-
-```sql
--- Add smart tags to a table
-UPDATE collections_public.table
-SET smart_tags = '{
- "@omit": "create,update,delete",
- "@name": "CustomTableName"
-}'::jsonb
-WHERE id = 'table-uuid';
-
--- Add smart tags to a field
-UPDATE collections_public.field
-SET smart_tags = '{
- "@omit": true,
- "@deprecated": "Use new_field instead"
-}'::jsonb
-WHERE id = 'field-uuid';
-```
-
-## Table Structures
-
-### database Table
-
-Stores database definitions:
-- `id`: UUID primary key
-- `owner_id`: Owner UUID
-- `schema_hash`: Unique schema hash
-- `schema_name`: Public schema name
-- `private_schema_name`: Private schema name
-- `name`: Database name
-- `label`: Display label
-- `hash`: Database hash
-
-### table Table
-
-Stores table definitions:
-- `id`: UUID primary key
-- `database_id`: Foreign key to database
-- `schema_id`: Foreign key to schema
-- `name`: Table name
-- `label`: Display label
-- `description`: Table description
-- `smart_tags`: JSONB smart tags for GraphQL
-- `use_rls`: Enable row-level security
-- `timestamps`: Enable created_at/updated_at
-- `peoplestamps`: Enable created_by/updated_by
-- `plural_name`: Plural form for API
-- `singular_name`: Singular form for API
-- `inherits_id`: Table inheritance
-
-### field Table
-
-Stores column definitions:
-- `id`: UUID primary key
-- `database_id`: Foreign key to database
-- `table_id`: Foreign key to table
-- `name`: Column name
-- `label`: Display label
-- `description`: Column description
-- `smart_tags`: JSONB smart tags
-- `is_required`: NOT NULL constraint
-- `default_value`: Default value
-- `is_hidden`: Hide from API
-- `type`: PostgreSQL type
-- `field_order`: Display order
-- `regexp`: Validation regex
-- `chk`: Check constraint JSON
-- `min`/`max`: Numeric constraints
-
-## Use Cases
-
-### Schema-Driven Code Generation
-
-Use metadata to generate:
-- GraphQL schemas
-- TypeScript types
-- API documentation
-- Database migration scripts
-- Admin interfaces
-
-### Runtime Schema Introspection
-
-Query metadata at runtime to:
-- Build dynamic forms
-- Generate validation rules
-- Create custom queries
-- Implement multi-tenancy
-
-### Database Documentation
-
-Generate documentation from metadata:
-- Entity-relationship diagrams
-- Data dictionaries
-- API specifications
-
-## Dependencies
-
-- `@pgpm/database-jobs`: Background job processing
-- `@pgpm/inflection`: String inflection utilities
-- `@pgpm/types`: Core PostgreSQL types
-- `@pgpm/verify`: Verification utilities
-
-## Testing
-
-```bash
-pnpm test
-```
-
-## Related Tooling
-
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
-* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
-* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
-* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
-
-## Disclaimer
-
-AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED "AS IS", AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND.
-
-No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value.
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/__tests__/__snapshots__/meta.test.ts.snap b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/__tests__/__snapshots__/meta.test.ts.snap
deleted file mode 100644
index 1e5853f4b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/__tests__/__snapshots__/meta.test.ts.snap
+++ /dev/null
@@ -1,147 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`db_meta functionality should handle complete meta workflow 1`] = `
-{
- "hash": null,
- "id": "[ID]",
- "label": null,
- "name": "my-meta-db",
- "owner_id": "[ID]",
- "private_schema_name": null,
- "schema_hash": null,
- "schema_name": null,
-}
-`;
-
-exports[`db_meta functionality should handle complete meta workflow 2`] = `
-{
- "anon_role": "anonymous",
- "database_id": "[ID]",
- "dbname": "test-database",
- "id": "[ID]",
- "is_public": true,
- "name": "public",
- "role_name": "authenticated",
-}
-`;
-
-exports[`db_meta functionality should handle complete meta workflow 3`] = `
-{
- "anon_role": "administrator",
- "database_id": "[ID]",
- "dbname": "test-database",
- "id": "[ID]",
- "is_public": true,
- "name": "admin",
- "role_name": "administrator",
-}
-`;
-
-exports[`db_meta functionality should handle complete meta workflow 4`] = `
-{
- "apple_touch_icon": null,
- "database_id": "[ID]",
- "dbname": "test-database",
- "description": "Website Description",
- "favicon": null,
- "id": "[ID]",
- "logo": null,
- "og_image": null,
- "title": "Website Title",
-}
-`;
-
-exports[`db_meta functionality should handle complete meta workflow 5`] = `
-{
- "api_id": "[ID]",
- "database_id": "[ID]",
- "domain": "pgpm.io",
- "id": "[ID]",
- "site_id": null,
- "subdomain": "api",
-}
-`;
-
-exports[`db_meta functionality should handle complete meta workflow 6`] = `
-{
- "api_id": null,
- "database_id": "[ID]",
- "domain": "pgpm.io",
- "id": "[ID]",
- "site_id": "[ID]",
- "subdomain": "app",
-}
-`;
-
-exports[`db_meta functionality should handle complete meta workflow 7`] = `
-{
- "api_id": "[ID]",
- "database_id": "[ID]",
- "domain": "pgpm.io",
- "id": "[ID]",
- "site_id": null,
- "subdomain": "admin",
-}
-`;
-
-exports[`db_meta functionality should handle complete meta workflow 8`] = `
-{
- "data": {
- "supportEmail": "support@interweb.co",
- },
- "database_id": "[ID]",
- "id": "[ID]",
- "name": "legal-emails",
- "site_id": "[ID]",
-}
-`;
-
-exports[`db_meta functionality should handle complete meta workflow 9`] = `
-{
- "api_id": "[ID]",
- "data": {
- "authenticate": "authenticate",
- "authenticate_schema": "meta_private",
- },
- "database_id": "[ID]",
- "id": "[ID]",
- "name": "rls_module",
-}
-`;
-
-exports[`db_meta functionality should handle complete meta workflow 10`] = `
-{
- "data": {
- "auth_schema": "meta_public",
- "forgot_password": "forgot_password",
- "reset_password": "reset_password",
- "send_verification_email": "send_verification_email",
- "set_password": "set_password",
- "sign_in": "login",
- "sign_up": "register",
- "verify_email": "verify_email",
- },
- "database_id": "[ID]",
- "id": "[ID]",
- "name": "user_auth_module",
- "site_id": "[ID]",
-}
-`;
-
-exports[`db_meta functionality should handle complete meta workflow 11`] = `
-{
- "api_id": "[ID]",
- "database_id": "[ID]",
- "id": "[ID]",
- "schema_id": "[ID]",
-}
-`;
-
-exports[`db_meta functionality should handle complete meta workflow 12`] = `
-{
- "api_id": "[ID]",
- "database_id": "[ID]",
- "id": "[ID]",
- "schema_id": "[ID]",
-}
-`;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/__tests__/meta.test.ts b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/__tests__/meta.test.ts
deleted file mode 100644
index 2ed050a3a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/__tests__/meta.test.ts
+++ /dev/null
@@ -1,229 +0,0 @@
-import { getConnections, PgTestClient, snapshot } from 'pgsql-test';
-
-let pg: PgTestClient;
-let teardown: () => Promise;
-
-describe('db_meta functionality', () => {
- beforeAll(async () => {
- ({ pg, teardown } = await getConnections());
- });
-
- afterAll(async () => {
- await teardown();
- });
-
- beforeEach(async () => {
- await pg.beforeEach();
- // Grant execute permissions for functions
- await pg.any(`GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO public`);
- });
-
- afterEach(async () => {
- await pg.afterEach();
- });
-
- it('should handle complete meta workflow', async () => {
- const objs: Record = {
- tables: {},
- domains: {},
- apis: {},
- sites: {}
- };
-
- const owner_id = '07281002-1699-4762-57e3-ab1b92243120';
-
- // Helper function for snapshots
- const snap = (obj: any) => {
- expect(snapshot(obj)).toMatchSnapshot();
- };
-
- // Helper function for snapshots with dbname normalization
- const snapWithNormalizedDbname = (obj: any) => {
- const normalized = {
- ...obj,
- dbname: 'test-database' // Replace dynamic dbname with static value
- };
- expect(snapshot(normalized)).toMatchSnapshot();
- };
-
- // Step 1: Create database
- const [database] = await pg.any(
- `INSERT INTO collections_public.database (owner_id, name)
- VALUES ($1, $2)
- RETURNING *`,
- [owner_id, 'my-meta-db']
- );
- objs.db = database;
- const database_id = database.id;
- expect(snapshot(database)).toMatchSnapshot();
-
- // Step 2: Create APIs first (since domains reference them)
- const [publicApi] = await pg.any(
- `INSERT INTO meta_public.apis (database_id, name, role_name, anon_role)
- VALUES ($1, $2, $3, $4)
- RETURNING *`,
- [database_id, 'public', 'authenticated', 'anonymous']
- );
- objs.apis.public = publicApi;
- snapWithNormalizedDbname(publicApi);
-
- const [adminApi] = await pg.any(
- `INSERT INTO meta_public.apis (database_id, name, role_name, anon_role)
- VALUES ($1, $2, $3, $4)
- RETURNING *`,
- [database_id, 'admin', 'administrator', 'administrator']
- );
- objs.apis.admin = adminApi;
- snapWithNormalizedDbname(adminApi);
-
- // Step 3: Create sites
- const [appSite] = await pg.any(
- `INSERT INTO meta_public.sites (database_id, title, description)
- VALUES ($1, $2, $3)
- RETURNING *`,
- [database_id, 'Website Title', 'Website Description']
- );
- objs.sites.app = appSite;
- snapWithNormalizedDbname(appSite);
-
- // Step 4: Register domains (linking to APIs and sites)
- const [apiDomain] = await pg.any(
- `INSERT INTO meta_public.domains (database_id, api_id, domain, subdomain)
- VALUES ($1, $2, $3, $4)
- RETURNING *`,
- [database_id, objs.apis.public.id, 'pgpm.io', 'api']
- );
- objs.domains.api = apiDomain;
- expect(snapshot(apiDomain)).toMatchSnapshot();
-
- const [appDomain] = await pg.any(
- `INSERT INTO meta_public.domains (database_id, site_id, domain, subdomain)
- VALUES ($1, $2, $3, $4)
- RETURNING *`,
- [database_id, objs.sites.app.id, 'pgpm.io', 'app']
- );
- objs.domains.app = appDomain;
- expect(snapshot(appDomain)).toMatchSnapshot();
-
- const [adminDomain] = await pg.any(
- `INSERT INTO meta_public.domains (database_id, api_id, domain, subdomain)
- VALUES ($1, $2, $3, $4)
- RETURNING *`,
- [database_id, objs.apis.admin.id, 'pgpm.io', 'admin']
- );
- objs.domains.admin = adminDomain;
- expect(snapshot(adminDomain)).toMatchSnapshot();
-
- const [baseDomain] = await pg.any(
- `INSERT INTO meta_public.domains (database_id, domain)
- VALUES ($1, $2)
- RETURNING *`,
- [database_id, 'pgpm.io']
- );
- objs.domains.base = baseDomain;
-
- // Step 5: Register modules
- const [siteModule1] = await pg.any(
- `INSERT INTO meta_public.site_modules (database_id, site_id, name, data)
- VALUES ($1, $2, $3, $4::jsonb)
- RETURNING *`,
- [database_id, objs.sites.app.id, 'legal-emails', JSON.stringify({
- supportEmail: 'support@interweb.co'
- })]
- );
- expect(snapshot(siteModule1)).toMatchSnapshot();
-
- const [apiModule] = await pg.any(
- `INSERT INTO meta_public.api_modules (database_id, api_id, name, data)
- VALUES ($1, $2, $3, $4::jsonb)
- RETURNING *`,
- [database_id, objs.apis.public.id, 'rls_module', JSON.stringify({
- authenticate_schema: 'meta_private',
- authenticate: 'authenticate'
- })]
- );
- expect(snapshot(apiModule)).toMatchSnapshot();
-
- const [siteModule2] = await pg.any(
- `INSERT INTO meta_public.site_modules (database_id, site_id, name, data)
- VALUES ($1, $2, $3, $4::jsonb)
- RETURNING *`,
- [database_id, objs.sites.app.id, 'user_auth_module', JSON.stringify({
- auth_schema: 'meta_public',
- sign_in: 'login',
- sign_up: 'register',
- set_password: 'set_password',
- reset_password: 'reset_password',
- forgot_password: 'forgot_password',
- send_verification_email: 'send_verification_email',
- verify_email: 'verify_email'
- })]
- );
- expect(snapshot(siteModule2)).toMatchSnapshot();
-
- // Step 6: Schema associations
- const [schema] = await pg.any(
- `INSERT INTO collections_public.schema (database_id, schema_name, name)
- VALUES ($1, $2, $3)
- RETURNING *`,
- [database_id, 'brand-public', 'public']
- );
-
- const [publicAssoc] = await pg.any(
- `INSERT INTO meta_public.api_schemata (database_id, schema_id, api_id)
- VALUES ($1, $2, $3)
- RETURNING *`,
- [database_id, schema.id, objs.apis.public.id]
- );
-
- const [adminAssoc] = await pg.any(
- `INSERT INTO meta_public.api_schemata (database_id, schema_id, api_id)
- VALUES ($1, $2, $3)
- RETURNING *`,
- [database_id, schema.id, objs.apis.admin.id]
- );
-
- snap(publicAssoc);
- snap(adminAssoc);
- });
-
- // Individual component tests
- it('should create database independently', async () => {
- const owner_id = '07281002-1699-4762-57e3-ab1b92243120';
-
- const [database] = await pg.any(
- `INSERT INTO collections_public.database (owner_id, name)
- VALUES ($1, $2)
- RETURNING *`,
- [owner_id, 'test-db']
- );
-
- expect(database.owner_id).toBe(owner_id);
- expect(database.name).toBe('test-db');
- expect(database.id).toBeDefined();
- });
-
- it('should register domain independently', async () => {
- const owner_id = '07281002-1699-4762-57e3-ab1b92243120';
-
- // Create database first
- const [database] = await pg.any(
- `INSERT INTO collections_public.database (owner_id, name)
- VALUES ($1, $2)
- RETURNING *`,
- [owner_id, 'test-db-for-domain']
- );
-
- // Then create domain
- const [domain] = await pg.any(
- `INSERT INTO meta_public.domains (database_id, domain, subdomain)
- VALUES ($1, $2, $3)
- RETURNING *`,
- [database.id, 'example.com', 'api']
- );
-
- expect(domain.database_id).toBe(database.id);
- expect(domain.domain).toBe('example.com');
- expect(domain.subdomain).toBe('api');
- });
-});
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_private/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_private/schema.sql
deleted file mode 100644
index bc8982b47..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_private/schema.sql
+++ /dev/null
@@ -1,12 +0,0 @@
--- Deploy schemas/collections_private/schema to pg
-
-BEGIN;
-
-CREATE SCHEMA collections_private;
-
-GRANT USAGE ON SCHEMA collections_private TO authenticated;
-ALTER DEFAULT PRIVILEGES IN SCHEMA collections_private GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES IN SCHEMA collections_private GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES IN SCHEMA collections_private GRANT ALL ON FUNCTIONS TO authenticated;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/schema.sql
deleted file mode 100644
index 769876574..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/schema.sql
+++ /dev/null
@@ -1,12 +0,0 @@
--- Deploy schemas/collections_public/schema to pg
-
-BEGIN;
-
-CREATE SCHEMA collections_public;
-
-GRANT USAGE ON SCHEMA collections_public TO authenticated;
-ALTER DEFAULT PRIVILEGES IN SCHEMA collections_public GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES IN SCHEMA collections_public GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES IN SCHEMA collections_public GRANT ALL ON FUNCTIONS TO authenticated;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/check_constraint/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/check_constraint/table.sql
deleted file mode 100644
index 5631ed81b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/check_constraint/table.sql
+++ /dev/null
@@ -1,33 +0,0 @@
--- Deploy schemas/collections_public/tables/check_constraint/table to pg
-
--- requires: schemas/collections_public/schema
--- requires: schemas/collections_public/tables/database/table
--- requires: schemas/collections_public/tables/table/table
-
-BEGIN;
-
-CREATE TABLE collections_public.check_constraint (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_id uuid NOT NULL,
- name text,
- type text,
- field_ids uuid[] NOT NULL,
- expr jsonb,
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
-
- UNIQUE (table_id, name),
- CHECK (field_ids <> '{}')
-);
-
-COMMENT ON CONSTRAINT table_fkey ON collections_public.check_constraint IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON collections_public.check_constraint IS E'@omit manyToMany';
-
-CREATE INDEX check_constraint_table_id_idx ON collections_public.check_constraint ( table_id );
-CREATE INDEX check_constraint_database_id_idx ON collections_public.check_constraint ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/database/indexes/databases_database_unique_name_idx.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/database/indexes/databases_database_unique_name_idx.sql
deleted file mode 100644
index 60f4f057c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/database/indexes/databases_database_unique_name_idx.sql
+++ /dev/null
@@ -1,20 +0,0 @@
--- Deploy schemas/collections_public/tables/database/indexes/databases_database_unique_name_idx to pg
--- requires: schemas/collections_private/schema
--- requires: schemas/collections_public/schema
--- requires: schemas/collections_public/tables/database/table
-
-BEGIN;
-
-CREATE FUNCTION collections_private.database_name_hash (name text)
- RETURNS bytea
- AS $BODY$
- SELECT
- DECODE(MD5(LOWER(inflection.plural (name))), 'hex');
-$BODY$
-LANGUAGE sql
-IMMUTABLE;
-
-CREATE UNIQUE INDEX databases_database_unique_name_idx ON collections_public.database (owner_id, collections_private.database_name_hash (name));
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/database/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/database/table.sql
deleted file mode 100644
index 7df465691..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/database/table.sql
+++ /dev/null
@@ -1,30 +0,0 @@
--- Deploy schemas/collections_public/tables/database/table to pg
-
--- requires: schemas/collections_public/schema
-
-BEGIN;
-
-CREATE TABLE collections_public.database (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- owner_id uuid,
- schema_hash text,
- schema_name text,
- private_schema_name text,
-
- name text,
- label text,
-
- hash uuid,
- unique(schema_hash),
- unique(schema_name),
- unique(private_schema_name)
-);
-
-ALTER TABLE collections_public.database
- ADD CONSTRAINT db_namechk CHECK (char_length(name) > 2);
-
-COMMENT ON COLUMN collections_public.database.schema_hash IS '@omit';
--- COMMENT ON COLUMN collections_public.database.schema_name IS '@omit';
--- COMMENT ON COLUMN collections_public.database.private_schema_name IS '@omit';
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/database_extension/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/database_extension/table.sql
deleted file mode 100644
index 319572732..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/database_extension/table.sql
+++ /dev/null
@@ -1,23 +0,0 @@
--- Deploy schemas/collections_public/tables/database_extension/table to pg
-
--- requires: schemas/collections_public/schema
--- requires: schemas/collections_public/tables/extension/table
--- requires: schemas/collections_public/tables/database/table
-
-BEGIN;
-
-CREATE TABLE collections_public.database_extension (
- name text NOT NULL PRIMARY KEY,
- database_id uuid NOT NULL,
-
- --
-
- CONSTRAINT ext_fkey FOREIGN KEY (name) REFERENCES collections_public.extension (name) ON DELETE CASCADE,
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- UNIQUE (database_id, name)
-);
-
-COMMENT ON CONSTRAINT db_fkey ON collections_public.database_extension IS E'@omit manyToMany';
-CREATE INDEX database_extension_database_id_idx ON collections_public.database_extension ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/extension/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/extension/table.sql
deleted file mode 100644
index c35439555..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/extension/table.sql
+++ /dev/null
@@ -1,28 +0,0 @@
--- Deploy schemas/collections_public/tables/extension/table to pg
-
--- requires: schemas/collections_public/schema
-
-BEGIN;
-
--- TODO add package name
-
-CREATE TABLE collections_public.extension (
- name text NOT NULL PRIMARY KEY,
- public_schemas text[],
- private_schemas text[]
-);
-
-INSERT INTO collections_public.extension (name, public_schemas, private_schemas) VALUES
- (
- 'collections',
- ARRAY['collections_public'],
- ARRAY['collections_private']
- ),
- (
- 'meta',
- ARRAY['meta_public'],
- ARRAY['meta_private']
- )
-;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/field/indexes/databases_field_uniq_names_idx.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/field/indexes/databases_field_uniq_names_idx.sql
deleted file mode 100644
index b161a3e98..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/field/indexes/databases_field_uniq_names_idx.sql
+++ /dev/null
@@ -1,13 +0,0 @@
--- Deploy schemas/collections_public/tables/field/indexes/databases_field_uniq_names_idx to pg
-
--- requires: schemas/collections_public/schema
--- requires: schemas/collections_public/tables/field/table
-
-BEGIN;
-
-CREATE UNIQUE INDEX databases_field_uniq_names_idx ON collections_public.field (
- -- strip out any _id, etc., so that if you do create one and make foreign key relation, there is no conflict
- table_id, DECODE(MD5(LOWER(regexp_replace(name, '^(.+?)(_row_id|_id|_uuid|_fk|_pk)$', '\1', 'i'))), 'hex')
-);
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/field/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/field/table.sql
deleted file mode 100644
index b1c973e95..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/field/table.sql
+++ /dev/null
@@ -1,72 +0,0 @@
--- Deploy schemas/collections_public/tables/field/table to pg
-
-
--- requires: schemas/collections_public/schema
--- requires: schemas/collections_public/tables/table/table
-
-BEGIN;
-
--- TODO should we just query this table and make a view?
--- https://www.postgresql.org/docs/9.2/catalog-pg-attribute.html
-
--- IF YOU WANT TO REMOVE THIS TABLE, answer the qustion, how would you add RLS to this:
--- SELECT
--- attrelid::text AS tbl
--- , attname::text AS col
--- , p.attnum::int as id,
--- t.typname as typename
-
--- FROM pg_catalog.pg_attribute p
--- INNER JOIN pg_catalog.pg_type t ON (t.oid = p.atttypid)
--- WHERE attrelid = 'dude_schema.products'::regclass
--- AND p.attnum > 0
--- AND NOT attisdropped;
-
-
-CREATE TABLE collections_public.field (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_id uuid NOT NULL,
-
- name text NOT NULL,
- label text,
-
- description text,
- smart_tags jsonb,
-
- is_required boolean NOT NULL DEFAULT FALSE,
- default_value text NULL DEFAULT NULL,
-
- -- hidden from API using @omit keyword, a Graphile feature ONLY
- is_hidden boolean NOT NULL DEFAULT FALSE,
-
-
- type citext NOT NULL,
-
- -- typmods DO THIS SOON!
-
- field_order int not null default 0,
-
- regexp text default null,
- chk jsonb default null,
- chk_expr jsonb default null,
- min float default null,
- max float default null,
-
- tags citext[] NOT NULL DEFAULT '{}',
-
- --
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
-
- UNIQUE (table_id, name)
-);
-
-COMMENT ON CONSTRAINT table_fkey ON collections_public.field IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON collections_public.field IS E'@omit manyToMany';
-
-CREATE INDEX field_table_id_idx ON collections_public.field ( table_id );
-CREATE INDEX field_database_id_idx ON collections_public.field ( database_id );
-
-COMMIT;
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/foreign_key_constraint/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/foreign_key_constraint/table.sql
deleted file mode 100644
index 136079c0f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/foreign_key_constraint/table.sql
+++ /dev/null
@@ -1,40 +0,0 @@
--- Deploy schemas/collections_public/tables/foreign_key_constraint/table to pg
-
--- requires: schemas/collections_public/tables/field/table
--- requires: schemas/collections_public/tables/table/table
--- requires: schemas/collections_public/schema
-
-BEGIN;
-
-CREATE TABLE collections_public.foreign_key_constraint (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_id uuid NOT NULL,
- name text,
- description text,
- smart_tags jsonb,
- type text,
- field_ids uuid[] NOT NULL,
- ref_table_id uuid NOT NULL REFERENCES collections_public.table (id) ON DELETE CASCADE,
- ref_field_ids uuid[] NOT NULL,
- delete_action char(1) DEFAULT 'c', -- postgres default is 'a'
- update_action char(1) DEFAULT 'a',
-
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
-
- UNIQUE(table_id, name),
- CHECK (field_ids <> '{}'),
- CHECK (ref_field_ids <> '{}')
-);
-
-COMMENT ON CONSTRAINT table_fkey ON collections_public.foreign_key_constraint IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON collections_public.foreign_key_constraint IS E'@omit manyToMany';
-
-CREATE INDEX foreign_key_constraint_table_id_idx ON collections_public.foreign_key_constraint ( table_id );
-CREATE INDEX foreign_key_constraint_database_id_idx ON collections_public.foreign_key_constraint ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/full_text_search/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/full_text_search/table.sql
deleted file mode 100644
index 6e1397dba..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/full_text_search/table.sql
+++ /dev/null
@@ -1,31 +0,0 @@
--- Deploy schemas/collections_public/tables/full_text_search/table to pg
-
--- requires: schemas/collections_public/schema
-
-BEGIN;
-
-CREATE TABLE collections_public.full_text_search (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_id uuid NOT NULL,
- field_id uuid NOT NULL,
- field_ids uuid[] NOT NULL,
- weights text[] NOT NULL,
- langs text[] NOT NULL,
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
-
- CHECK (cardinality(field_ids) = cardinality(weights) AND cardinality(weights) = cardinality(langs))
-);
-
-COMMENT ON CONSTRAINT table_fkey ON collections_public.full_text_search IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON collections_public.full_text_search IS E'@omit manyToMany';
-
-CREATE INDEX full_text_search_table_id_idx ON collections_public.full_text_search ( table_id );
-CREATE INDEX full_text_search_database_id_idx ON collections_public.full_text_search ( database_id );
-
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/index/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/index/table.sql
deleted file mode 100644
index c464b8642..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/index/table.sql
+++ /dev/null
@@ -1,39 +0,0 @@
--- Deploy schemas/collections_public/tables/index/table to pg
-
--- requires: schemas/collections_public/schema
--- requires: schemas/collections_public/tables/table/table
--- requires: schemas/collections_public/tables/database/table
-
-BEGIN;
-
-CREATE TABLE collections_public.index (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
- table_id uuid NOT NULL,
- name text NOT NULL DEFAULT '',
-
- field_ids uuid[],
- include_field_ids uuid[],
-
- access_method text NOT NULL DEFAULT 'BTREE',
-
- index_params jsonb,
- where_clause jsonb,
- is_unique boolean NOT NULL default false,
-
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
-
- -- index names are UNIQUE across schemas, so for portability we will check against database_id
- UNIQUE (database_id, name)
-);
-
-COMMENT ON CONSTRAINT table_fkey ON collections_public.index IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON collections_public.index IS E'@omit manyToMany';
-
-CREATE INDEX index_table_id_idx ON collections_public.index ( table_id );
-CREATE INDEX index_database_id_idx ON collections_public.index ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/limit_function/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/limit_function/table.sql
deleted file mode 100644
index 7f9919c65..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/limit_function/table.sql
+++ /dev/null
@@ -1,34 +0,0 @@
--- Deploy schemas/collections_public/tables/limit_function/table to pg
-
--- requires: schemas/collections_public/schema
-
-BEGIN;
-
-CREATE TABLE collections_public.limit_function (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_id uuid NOT NULL,
-
- name text,
- label text,
- description text,
-
- data jsonb,
-
- security int default 0, -- 0 = invoker, 1 = definer
-
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
-
- UNIQUE (database_id, name)
-);
-
-COMMENT ON CONSTRAINT db_fkey ON collections_public.limit_function IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT table_fkey ON collections_public.limit_function IS E'@omit manyToMany';
-CREATE INDEX limit_function_table_id_idx ON collections_public.limit_function ( table_id );
-CREATE INDEX limit_function_database_id_idx ON collections_public.limit_function ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/policy/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/policy/table.sql
deleted file mode 100644
index 406e358fd..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/policy/table.sql
+++ /dev/null
@@ -1,41 +0,0 @@
--- Deploy schemas/collections_public/tables/policy/table to pg
-
--- requires: schemas/collections_public/schema
--- requires: schemas/collections_public/tables/table/table
-
-BEGIN;
-
-CREATE TABLE collections_public.policy (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_id uuid NOT NULL,
- name text,
- role_name text,
- privilege text,
-
- -- using_expression text,
- -- check_expression text,
- -- policy_text text,
-
- permissive boolean default true,
- disabled boolean default false,
-
- template text,
- data jsonb,
-
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
-
- UNIQUE (table_id, name)
-);
-
-COMMENT ON CONSTRAINT table_fkey ON collections_public.policy IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON collections_public.policy IS E'@omit manyToMany';
-
-CREATE INDEX policy_table_id_idx ON collections_public.policy ( table_id );
-CREATE INDEX policy_database_id_idx ON collections_public.policy ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/primary_key_constraint/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/primary_key_constraint/table.sql
deleted file mode 100644
index d0bd0e306..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/primary_key_constraint/table.sql
+++ /dev/null
@@ -1,30 +0,0 @@
--- Deploy schemas/collections_public/tables/primary_key_constraint/table to pg
-
--- requires: schemas/collections_public/schema
-
-BEGIN;
-
-CREATE TABLE collections_public.primary_key_constraint (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_id uuid NOT NULL,
- name text,
- type text,
- field_ids uuid[] NOT NULL,
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
-
- UNIQUE(table_id, name),
- CHECK (field_ids <> '{}')
-);
-
-COMMENT ON CONSTRAINT table_fkey ON collections_public.primary_key_constraint IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON collections_public.primary_key_constraint IS E'@omit manyToMany';
-
-CREATE INDEX primary_key_constraint_table_id_idx ON collections_public.primary_key_constraint ( table_id );
-CREATE INDEX primary_key_constraint_database_id_idx ON collections_public.primary_key_constraint ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/procedure/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/procedure/table.sql
deleted file mode 100644
index 2d089884d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/procedure/table.sql
+++ /dev/null
@@ -1,32 +0,0 @@
--- Deploy schemas/collections_public/tables/procedure/table to pg
-
--- requires: schemas/collections_public/schema
--- requires: schemas/collections_public/tables/database/table
-
-BEGIN;
-
-CREATE TABLE collections_public.procedure (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL DEFAULT uuid_nil(),
-
- name text NOT NULL,
-
- -- MAYBE MAKE A SPECIAL RLS functions for policy making...
-
- -- can we make this all JSON?
- argnames text[],
- argtypes text[],
- argdefaults text[],
-
- lang_name text,
- definition text,
- --
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
-
- UNIQUE (database_id, name)
-);
-
-COMMENT ON CONSTRAINT db_fkey ON collections_public.procedure IS E'@omit manyToMany';
-CREATE INDEX procedure_database_id_idx ON collections_public.procedure ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/rls_function/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/rls_function/table.sql
deleted file mode 100644
index 697b45a3e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/rls_function/table.sql
+++ /dev/null
@@ -1,36 +0,0 @@
--- Deploy schemas/collections_public/tables/rls_function/table to pg
-
--- requires: schemas/collections_public/schema
--- requires: schemas/collections_public/tables/database/table
-
-BEGIN;
-
-CREATE TABLE collections_public.rls_function (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_id uuid NOT NULL,
-
- name text,
- label text,
- description text,
-
- data jsonb,
-
- inline boolean default false,
- security int default 0, -- 0 = invoker, 1 = definer (only when inline is false can we apply this)
-
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
-
- UNIQUE (database_id, name)
-);
-
-COMMENT ON CONSTRAINT db_fkey ON collections_public.rls_function IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT table_fkey ON collections_public.rls_function IS E'@omit manyToMany';
-CREATE INDEX rls_function_table_id_idx ON collections_public.rls_function ( table_id );
-CREATE INDEX rls_function_database_id_idx ON collections_public.rls_function ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/schema/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/schema/table.sql
deleted file mode 100644
index 94a56d42b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/schema/table.sql
+++ /dev/null
@@ -1,33 +0,0 @@
--- Deploy schemas/collections_public/tables/schema/table to pg
-
--- requires: schemas/collections_public/schema
--- requires: schemas/collections_public/tables/database/table
-
-BEGIN;
-
-CREATE TABLE collections_public.schema (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
-
- database_id uuid NOT NULL,
- name text NOT NULL,
- schema_name text NOT NULL,
- label text,
- description text,
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
-
- UNIQUE (database_id, name),
- UNIQUE (schema_name)
-);
-
--- TODO: build out services
--- COMMENT ON COLUMN collections_public.schema.schema_name IS '@omit';
-
-ALTER TABLE collections_public.schema
- ADD CONSTRAINT schema_namechk CHECK (char_length(name) > 2);
-
-COMMENT ON CONSTRAINT db_fkey ON collections_public.schema IS E'@omit manyToMany';
-CREATE INDEX schema_database_id_idx ON collections_public.schema ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/schema_grant/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/schema_grant/table.sql
deleted file mode 100644
index 2453ab3d3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/schema_grant/table.sql
+++ /dev/null
@@ -1,27 +0,0 @@
--- Deploy schemas/collections_public/tables/schema_grant/table to pg
-
--- requires: schemas/collections_public/schema
--- requires: schemas/collections_public/tables/schema/table
-
-BEGIN;
-
-CREATE TABLE collections_public.schema_grant (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL DEFAULT uuid_nil(),
-
- schema_id uuid NOT NULL,
- grantee_name text NOT NULL,
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE
-
-);
-
-COMMENT ON CONSTRAINT schema_fkey ON collections_public.schema_grant IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON collections_public.schema_grant IS E'@omit manyToMany';
-
-CREATE INDEX schema_grant_schema_id_idx ON collections_public.schema_grant ( schema_id );
-CREATE INDEX schema_grant_database_id_idx ON collections_public.schema_grant ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/table/indexes/databases_table_unique_name_idx.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/table/indexes/databases_table_unique_name_idx.sql
deleted file mode 100644
index 45baa8806..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/table/indexes/databases_table_unique_name_idx.sql
+++ /dev/null
@@ -1,20 +0,0 @@
--- Deploy schemas/collections_public/tables/table/indexes/databases_table_unique_name_idx to pg
--- requires: schemas/collections_public/schema
--- requires: schemas/collections_private/schema
--- requires: schemas/collections_public/tables/table/table
-
-BEGIN;
-
-CREATE FUNCTION collections_private.table_name_hash (name text)
- RETURNS bytea
- AS $BODY$
- SELECT
- DECODE(MD5(LOWER(inflection.plural (name))), 'hex');
-$BODY$
-LANGUAGE sql
-IMMUTABLE;
-
-CREATE UNIQUE INDEX databases_table_unique_name_idx ON collections_public.table (database_id, collections_private.table_name_hash (name));
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/table/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/table/table.sql
deleted file mode 100644
index 6b6e6d629..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/table/table.sql
+++ /dev/null
@@ -1,55 +0,0 @@
--- Deploy schemas/collections_public/tables/table/table to pg
--- requires: schemas/collections_public/schema
--- requires: schemas/collections_public/tables/database/table
--- requires: schemas/collections_public/tables/schema/table
-
-BEGIN;
-
-CREATE TYPE collections_public.table_category AS ENUM ('core', 'module', 'app');
-
-CREATE TABLE collections_public.table (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL DEFAULT uuid_nil(),
-
- schema_id uuid NOT NULL,
-
- name text NOT NULL,
-
- label text,
- description text,
-
- smart_tags jsonb,
-
- category collections_public.table_category NOT NULL DEFAULT 'app',
- module text NULL,
- scope int NULL,
-
- use_rls boolean NOT NULL DEFAULT FALSE,
-
- timestamps boolean NOT NULL DEFAULT FALSE,
- peoplestamps boolean NOT NULL DEFAULT FALSE,
-
- plural_name text,
- singular_name text,
-
- tags citext[] NOT NULL DEFAULT '{}',
-
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
-
- UNIQUE (database_id, name)
-);
-
-ALTER TABLE collections_public.table ADD COLUMN
- inherits_id uuid NULL REFERENCES collections_public.table(id);
-
-COMMENT ON CONSTRAINT schema_fkey ON collections_public.table IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON collections_public.table IS E'@omit manyToMany';
-
-CREATE INDEX table_schema_id_idx ON collections_public.table ( schema_id );
-CREATE INDEX table_database_id_idx ON collections_public.table ( database_id );
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/table_grant/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/table_grant/table.sql
deleted file mode 100644
index 2d44b23a8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/table_grant/table.sql
+++ /dev/null
@@ -1,27 +0,0 @@
--- Deploy schemas/collections_public/tables/table_grant/table to pg
-
--- requires: schemas/collections_public/schema
--- requires: schemas/collections_public/tables/table/table
-
-BEGIN;
-
-CREATE TABLE collections_public.table_grant (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_id uuid NOT NULL,
- privilege text NOT NULL,
- role_name text NOT NULL,
- field_ids uuid[],
- --
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE
-);
-
-COMMENT ON CONSTRAINT table_fkey ON collections_public.table_grant IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON collections_public.table_grant IS E'@omit manyToMany';
-
-CREATE INDEX table_grant_table_id_idx ON collections_public.table_grant ( table_id );
-CREATE INDEX table_grant_database_id_idx ON collections_public.table_grant ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/trigger/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/trigger/table.sql
deleted file mode 100644
index d323b39ee..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/trigger/table.sql
+++ /dev/null
@@ -1,32 +0,0 @@
--- Deploy schemas/collections_public/tables/trigger/table to pg
-
--- requires: schemas/collections_public/schema
--- requires: schemas/collections_public/tables/table/table
-
-BEGIN;
-
--- https://www.postgresql.org/docs/12/sql-createtrigger.html
-
-CREATE TABLE collections_public.trigger (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_id uuid NOT NULL,
- name text NOT NULL,
- event text, -- INSERT, UPDATE, DELETE, or TRUNCATE
- function_name text,
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
-
- UNIQUE(table_id, name)
-);
-
-COMMENT ON CONSTRAINT table_fkey ON collections_public.trigger IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON collections_public.trigger IS E'@omit manyToMany';
-
-CREATE INDEX trigger_table_id_idx ON collections_public.trigger ( table_id );
-CREATE INDEX trigger_database_id_idx ON collections_public.trigger ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/trigger_function/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/trigger_function/table.sql
deleted file mode 100644
index bdd27b7a0..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/trigger_function/table.sql
+++ /dev/null
@@ -1,23 +0,0 @@
--- Deploy schemas/collections_public/tables/trigger_function/table to pg
-
--- requires: schemas/collections_public/schema
--- requires: schemas/collections_public/tables/database/table
-
-BEGIN;
-
-CREATE TABLE collections_public.trigger_function (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
-
- name text NOT NULL,
- code text,
-
- --
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- UNIQUE (database_id, name)
-);
-
-COMMENT ON CONSTRAINT db_fkey ON collections_public.trigger_function IS E'@omit manyToMany';
-CREATE INDEX trigger_function_database_id_idx ON collections_public.trigger_function ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/unique_constraint/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/unique_constraint/table.sql
deleted file mode 100644
index d41e4c2aa..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/collections_public/tables/unique_constraint/table.sql
+++ /dev/null
@@ -1,37 +0,0 @@
--- Deploy schemas/collections_public/tables/unique_constraint/table to pg
-
--- requires: schemas/collections_public/schema
--- requires: schemas/collections_public/tables/database/table
--- requires: schemas/collections_public/tables/table/table
-
-BEGIN;
-
-CREATE TABLE collections_public.unique_constraint (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL DEFAULT uuid_nil(),
-
- table_id uuid NOT NULL,
- name text,
- description text,
- smart_tags jsonb,
- type text,
- field_ids uuid[] NOT NULL,
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES collections_public.table (id) ON DELETE CASCADE,
-
- -- TODO these are unique across schema, NOT table. We'll need to update this to have database_id
- -- for portability
-
- UNIQUE (table_id, name),
- CHECK (field_ids <> '{}')
-);
-
-COMMENT ON CONSTRAINT table_fkey ON collections_public.unique_constraint IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON collections_public.unique_constraint IS E'@omit manyToMany';
-
-CREATE INDEX unique_constraint_table_id_idx ON collections_public.unique_constraint ( table_id );
-CREATE INDEX unique_constraint_database_id_idx ON collections_public.unique_constraint ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_private/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_private/schema.sql
deleted file mode 100644
index 1423d4d9f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_private/schema.sql
+++ /dev/null
@@ -1,14 +0,0 @@
--- Deploy schemas/meta_private/schema to pg
-
-
-BEGIN;
-
-CREATE SCHEMA meta_private;
-
-GRANT USAGE ON SCHEMA meta_private TO authenticated;
-GRANT USAGE ON SCHEMA meta_private TO administrator;
-ALTER DEFAULT PRIVILEGES IN SCHEMA meta_private GRANT ALL ON TABLES TO administrator;
-ALTER DEFAULT PRIVILEGES IN SCHEMA meta_private GRANT ALL ON SEQUENCES TO administrator;
-ALTER DEFAULT PRIVILEGES IN SCHEMA meta_private GRANT ALL ON FUNCTIONS TO administrator;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/schema.sql
deleted file mode 100644
index 8126b28bd..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/schema.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- Deploy schemas/meta_public/schema to pg
-
-
-BEGIN;
-
-CREATE SCHEMA meta_public;
-
-GRANT USAGE ON SCHEMA meta_public TO authenticated;
-GRANT USAGE ON SCHEMA meta_public TO administrator;
-ALTER DEFAULT PRIVILEGES IN SCHEMA meta_public GRANT ALL ON TABLES TO administrator;
-ALTER DEFAULT PRIVILEGES IN SCHEMA meta_public GRANT ALL ON SEQUENCES TO administrator;
-ALTER DEFAULT PRIVILEGES IN SCHEMA meta_public GRANT ALL ON FUNCTIONS TO administrator;
-
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/api_extensions/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/api_extensions/table.sql
deleted file mode 100644
index 79e678f1a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/api_extensions/table.sql
+++ /dev/null
@@ -1,36 +0,0 @@
--- Deploy schemas/meta_public/tables/api_extensions/table to pg
-
--- requires: schemas/meta_public/schema
--- requires: schemas/meta_public/tables/apis/table
-
--- requires: schemas/collections_public/tables/database_extension/table
--- requires: schemas/collections_public/tables/extension/table
--- requires: schemas/collections_public/tables/database/table
-
-
-BEGIN;
-
--- NOTE: not directly mapping to extensions on purpose, to make it simple for api usage
-
-CREATE TABLE meta_public.api_extensions (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- schema_name text,
- database_id uuid NOT NULL,
- api_id uuid NOT NULL,
-
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT api_fkey FOREIGN KEY (api_id) REFERENCES meta_public.apis (id) ON DELETE CASCADE,
-
- UNIQUE (schema_name, api_id)
-);
-
--- WE DO WANT m2m!
--- COMMENT ON CONSTRAINT db_fkey ON meta_public.api_extensions IS E'@omit manyToMany';
--- COMMENT ON CONSTRAINT api_fkey ON meta_public.api_extensions IS E'@omit manyToMany';
-
-CREATE INDEX api_extension_database_id_idx ON meta_public.api_extensions ( database_id );
-CREATE INDEX api_extension_api_id_idx ON meta_public.api_extensions ( api_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/api_modules/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/api_modules/table.sql
deleted file mode 100644
index 9efaae58b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/api_modules/table.sql
+++ /dev/null
@@ -1,30 +0,0 @@
--- Deploy schemas/meta_public/tables/api_modules/table to pg
-
--- requires: schemas/meta_public/schema
--- requires: schemas/meta_public/tables/apis/table
--- requires: schemas/collections_public/tables/database/table
-
-BEGIN;
-
-CREATE TABLE meta_public.api_modules (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
- api_id uuid NOT NULL,
- name text NOT NULL,
- data json NOT NULL,
-
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE
-
-);
-
-ALTER TABLE meta_public.api_modules ADD CONSTRAINT api_modules_api_id_fkey FOREIGN KEY ( api_id ) REFERENCES meta_public.apis ( id );
-COMMENT ON CONSTRAINT api_modules_api_id_fkey ON meta_public.api_modules IS E'@omit manyToMany';
-CREATE INDEX api_modules_api_id_idx ON meta_public.api_modules ( api_id );
-
-COMMENT ON CONSTRAINT db_fkey ON meta_public.api_modules IS E'@omit manyToMany';
-CREATE INDEX api_modules_database_id_idx ON meta_public.api_modules ( database_id );
-
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/api_schemata/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/api_schemata/table.sql
deleted file mode 100644
index 576b84c7b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/api_schemata/table.sql
+++ /dev/null
@@ -1,30 +0,0 @@
--- Deploy schemas/meta_public/tables/api_schemata/table to pg
-
--- requires: schemas/meta_public/schema
-
-BEGIN;
-
-CREATE TABLE meta_public.api_schemata (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
- schema_id uuid NOT NULL,
- api_id uuid NOT NULL,
-
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES collections_public.schema (id) ON DELETE CASCADE,
- CONSTRAINT api_fkey FOREIGN KEY (api_id) REFERENCES meta_public.apis (id) ON DELETE CASCADE,
- unique(api_id, schema_id)
-);
-
--- COMMENT ON CONSTRAINT schema_fkey ON meta_public.api_schemata IS E'@omit manyToMany';
--- COMMENT ON CONSTRAINT api_fkey ON meta_public.api_schemata IS E'@omit manyToMany';
-COMMENT ON CONSTRAINT db_fkey ON meta_public.api_schemata IS E'@omit manyToMany';
-
-
-CREATE INDEX api_schemata_database_id_idx ON meta_public.api_schemata ( database_id );
-CREATE INDEX api_schemata_schema_id_idx ON meta_public.api_schemata ( schema_id );
-CREATE INDEX api_schemata_api_id_idx ON meta_public.api_schemata ( api_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/apis/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/apis/table.sql
deleted file mode 100644
index d5db3fdc1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/apis/table.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- Deploy schemas/meta_public/tables/apis/table to pg
-
--- requires: schemas/meta_public/schema
--- requires: schemas/collections_public/tables/database/table
-
-BEGIN;
-
-CREATE TABLE meta_public.apis (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
- name text NOT NULL,
- dbname text NOT NULL DEFAULT current_database(),
- role_name text NOT NULL DEFAULT 'authenticated',
- anon_role text NOT NULL DEFAULT 'anonymous',
- is_public boolean NOT NULL DEFAULT true,
-
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- UNIQUE(database_id, name)
-);
-
-COMMENT ON CONSTRAINT db_fkey ON meta_public.apis IS E'@omit manyToMany';
-CREATE INDEX apis_database_id_idx ON meta_public.apis ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/apps/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/apps/table.sql
deleted file mode 100644
index 10129aaae..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/apps/table.sql
+++ /dev/null
@@ -1,34 +0,0 @@
--- Deploy schemas/meta_public/tables/apps/table to pg
-
--- requires: schemas/meta_public/schema
--- requires: schemas/meta_public/tables/sites/table
--- requires: schemas/collections_public/tables/database/table
-
-BEGIN;
-
-CREATE TABLE meta_public.apps (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
- site_id uuid NOT NULL,
- name text,
- app_image image,
- app_store_link url,
- app_store_id text,
- app_id_prefix text,
- play_store_link url,
-
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- UNIQUE ( site_id )
-);
-
-ALTER TABLE meta_public.apps ADD CONSTRAINT apps_site_id_fkey FOREIGN KEY ( site_id ) REFERENCES meta_public.sites ( id );
-COMMENT ON CONSTRAINT apps_site_id_fkey ON meta_public.apps IS E'@omit manyToMany';
-CREATE INDEX apps_site_id_idx ON meta_public.apps ( site_id );
-
-COMMENT ON CONSTRAINT db_fkey ON meta_public.apps IS E'@omit manyToMany';
-CREATE INDEX apps_database_id_idx ON meta_public.apps ( database_id );
-
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/domains/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/domains/table.sql
deleted file mode 100644
index 8046d248d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/domains/table.sql
+++ /dev/null
@@ -1,41 +0,0 @@
--- Deploy schemas/meta_public/tables/domains/table to pg
-
--- requires: schemas/meta_public/schema
--- requires: schemas/meta_public/tables/apis/table
--- requires: schemas/meta_public/tables/sites/table
--- requires: schemas/collections_public/tables/database/table
-
-BEGIN;
-
-CREATE TABLE meta_public.domains (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
-
- api_id uuid,
- site_id uuid,
-
- subdomain hostname,
- domain hostname,
-
- --
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT api_fkey FOREIGN KEY (api_id) REFERENCES meta_public.apis (id) ON DELETE CASCADE,
- CONSTRAINT site_fkey FOREIGN KEY (site_id) REFERENCES meta_public.sites (id) ON DELETE CASCADE,
- CONSTRAINT one_route_chk CHECK (
- (api_id IS NULL AND site_id IS NULL) OR
- (api_id IS NULL AND site_id IS NOT NULL) OR
- (api_id IS NOT NULL AND site_id IS NULL)
- ),
- UNIQUE ( subdomain, domain )
-);
-
-COMMENT ON CONSTRAINT db_fkey ON meta_public.domains IS E'@omit manyToMany';
-CREATE INDEX domains_database_id_idx ON meta_public.domains ( database_id );
-
-COMMENT ON CONSTRAINT api_fkey ON meta_public.domains IS E'@omit manyToMany';
-CREATE INDEX domains_api_id_idx ON meta_public.domains ( api_id );
-
-COMMENT ON CONSTRAINT site_fkey ON meta_public.domains IS E'@omit manyToMany';
-CREATE INDEX domains_site_id_idx ON meta_public.domains ( site_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/site_metadata/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/site_metadata/table.sql
deleted file mode 100644
index 31c5bb6c9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/site_metadata/table.sql
+++ /dev/null
@@ -1,33 +0,0 @@
--- Deploy schemas/meta_public/tables/site_metadata/table to pg
-
--- requires: schemas/meta_public/schema
--- requires: schemas/meta_public/tables/sites/table
--- requires: schemas/collections_public/tables/database/table
-
-BEGIN;
-
-CREATE TABLE meta_public.site_metadata (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
- site_id uuid NOT NULL,
- title text,
- description text,
- og_image image,
-
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
-
- CHECK ( character_length(title) <= 120 ),
- CHECK ( character_length(description) <= 120 )
-);
-
-
-ALTER TABLE meta_public.site_metadata ADD CONSTRAINT site_metadata_site_id_fkey FOREIGN KEY ( site_id ) REFERENCES meta_public.sites ( id );
-COMMENT ON CONSTRAINT site_metadata_site_id_fkey ON meta_public.site_metadata IS E'@omit manyToMany';
-CREATE INDEX site_metadata_site_id_idx ON meta_public.site_metadata ( site_id );
-
-COMMENT ON CONSTRAINT db_fkey ON meta_public.site_metadata IS E'@omit manyToMany';
-CREATE INDEX site_metadata_database_id_idx ON meta_public.site_metadata ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/site_modules/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/site_modules/table.sql
deleted file mode 100644
index dbdb6ca18..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/site_modules/table.sql
+++ /dev/null
@@ -1,28 +0,0 @@
--- Deploy schemas/meta_public/tables/site_modules/table to pg
-
--- requires: schemas/meta_public/schema
--- requires: schemas/meta_public/tables/sites/table
--- requires: schemas/collections_public/tables/database/table
-
-BEGIN;
-
-CREATE TABLE meta_public.site_modules (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
- site_id uuid NOT NULL,
- name text NOT NULL,
- data json NOT NULL,
-
- --
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE
-);
-
-ALTER TABLE meta_public.site_modules ADD CONSTRAINT site_modules_site_id_fkey FOREIGN KEY ( site_id ) REFERENCES meta_public.sites ( id );
-COMMENT ON CONSTRAINT site_modules_site_id_fkey ON meta_public.site_modules IS E'@omit manyToMany';
-CREATE INDEX site_modules_site_id_idx ON meta_public.site_modules ( site_id );
-
-COMMENT ON CONSTRAINT db_fkey ON meta_public.site_modules IS E'@omit manyToMany';
-CREATE INDEX site_modules_database_id_idx ON meta_public.site_modules ( database_id );
-
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/site_themes/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/site_themes/table.sql
deleted file mode 100644
index 0fced223c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/site_themes/table.sql
+++ /dev/null
@@ -1,27 +0,0 @@
--- Deploy schemas/meta_public/tables/site_themes/table to pg
-
--- requires: schemas/meta_public/schema
--- requires: schemas/meta_public/tables/sites/table
--- requires: schemas/collections_public/tables/database/table
-
-BEGIN;
-
-CREATE TABLE meta_public.site_themes (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
- site_id uuid NOT NULL,
- theme jsonb NOT NULL,
-
- --
-
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE
-);
-
-ALTER TABLE meta_public.site_themes ADD CONSTRAINT site_themes_site_id_fkey FOREIGN KEY ( site_id ) REFERENCES meta_public.sites ( id );
-COMMENT ON CONSTRAINT site_themes_site_id_fkey ON meta_public.site_themes IS E'@omit manyToMany';
-CREATE INDEX site_themes_site_id_idx ON meta_public.site_themes ( site_id );
-
-COMMENT ON CONSTRAINT db_fkey ON meta_public.site_themes IS E'@omit manyToMany';
-CREATE INDEX site_themes_database_id_idx ON meta_public.site_themes ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/sites/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/sites/table.sql
deleted file mode 100644
index 060419e66..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/deploy/schemas/meta_public/tables/sites/table.sql
+++ /dev/null
@@ -1,30 +0,0 @@
--- Deploy schemas/meta_public/tables/sites/table to pg
-
--- requires: schemas/meta_public/schema
--- requires: schemas/collections_public/tables/database/table
-
-BEGIN;
-
-CREATE TABLE meta_public.sites (
- id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
- database_id uuid NOT NULL,
- title text,
- description text,
- og_image image,
- favicon attachment,
- apple_touch_icon image,
- logo image,
-
- -- do we need this?
- dbname text NOT NULL DEFAULT current_database(),
-
- --
- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES collections_public.database (id) ON DELETE CASCADE,
- CONSTRAINT max_title CHECK ( character_length(title) <= 120 ),
- CONSTRAINT max_descr CHECK ( character_length(description) <= 120 )
-);
-
-COMMENT ON CONSTRAINT db_fkey ON meta_public.sites IS E'@omit manyToMany';
-CREATE INDEX sites_database_id_idx ON meta_public.sites ( database_id );
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/jest.config.js b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/jest.config.js
deleted file mode 100644
index e20e7efb5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/jest.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @type {import('ts-jest').JestConfigWithTsJest} */
-module.exports = {
- preset: 'ts-jest',
- testEnvironment: 'node',
-
- // Match both __tests__ and colocated test files
- testMatch: ['**/?(*.)+(test|spec).{ts,tsx,js,jsx}'],
-
- // Ignore build artifacts and type declarations
- testPathIgnorePatterns: ['/dist/', '\\.d\\.ts$'],
- modulePathIgnorePatterns: ['/dist/'],
- watchPathIgnorePatterns: ['/dist/'],
-
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
-};
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/package.json b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/package.json
deleted file mode 100644
index a61f79f66..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/package.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "name": "@pgpm/metaschema-schema",
- "version": "0.15.2",
- "description": "Database metadata utilities and introspection functions",
- "author": "Dan Lynch ",
- "contributors": [
- "Constructive "
- ],
- "keywords": [
- "postgresql",
- "pgpm",
- "metadata",
- "introspection"
- ],
- "publishConfig": {
- "access": "public"
- },
- "scripts": {
- "bundle": "pgpm package",
- "test": "jest",
- "test:watch": "jest --watch"
- },
- "dependencies": {
- "@pgpm/database-jobs": "0.15.2",
- "@pgpm/inflection": "0.15.2",
- "@pgpm/types": "0.15.2",
- "@pgpm/verify": "0.15.2"
- },
- "devDependencies": {
- "pgpm": "^1.0.0"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/constructive-io/pgpm-modules"
- },
- "homepage": "https://github.com/constructive-io/pgpm-modules",
- "bugs": {
- "url": "https://github.com/constructive-io/pgpm-modules/issues"
- }
-}
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_private/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_private/schema.sql
deleted file mode 100644
index 8fa075167..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_private/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_private/schema from pg
-
-BEGIN;
-
-DROP SCHEMA collections_private CASCADE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/schema.sql
deleted file mode 100644
index ce20108b8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/schema.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-
-BEGIN;
-
-DROP SCHEMA collections_public;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/check_constraint/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/check_constraint/table.sql
deleted file mode 100644
index fdd758baf..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/check_constraint/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/check_constraint/table from pg
-
-BEGIN;
-
-DROP TABLE collections_public.check_constraint;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/database/indexes/databases_database_unique_name_idx.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/database/indexes/databases_database_unique_name_idx.sql
deleted file mode 100644
index ffa9dd02a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/database/indexes/databases_database_unique_name_idx.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-
-BEGIN;
-
-DROP INDEX collections_public.databases_database_unique_name_idx;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/database/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/database/table.sql
deleted file mode 100644
index 89ca9821a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/database/table.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-
-BEGIN;
-
-DROP TABLE collections_public.database;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/database_extension/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/database_extension/table.sql
deleted file mode 100644
index 581ef3d54..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/database_extension/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/database_extension/table from pg
-
-BEGIN;
-
-DROP TABLE collections_public.database_extension;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/extension/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/extension/table.sql
deleted file mode 100644
index 870c191df..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/extension/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/extension/table from pg
-
-BEGIN;
-
-DROP TABLE collections_public.extension;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/field/indexes/databases_field_uniq_names_idx.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/field/indexes/databases_field_uniq_names_idx.sql
deleted file mode 100644
index b6bfd5217..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/field/indexes/databases_field_uniq_names_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/field/indexes/databases_field_uniq_names_idx from pg
-
-BEGIN;
-
-DROP INDEX collections_public.databases_field_uniq_names_idx;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/field/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/field/table.sql
deleted file mode 100644
index 94b26ae62..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/field/table.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-
-BEGIN;
-
-DROP INDEX collections_public.field_database_id_idx;
-DROP INDEX collections_public.field_table_id_idx;
-DROP TABLE collections_public.field;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/foreign_key_constraint/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/foreign_key_constraint/table.sql
deleted file mode 100644
index 26c1adcc4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/foreign_key_constraint/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/foreign_key_constraint/table from pg
-
-BEGIN;
-
-DROP TABLE collections_public.foreign_key_constraint;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/full_text_search/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/full_text_search/table.sql
deleted file mode 100644
index d8168373d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/full_text_search/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/full_text_search/table from pg
-
-BEGIN;
-
-DROP TABLE collections_public.full_text_search;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/index/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/index/table.sql
deleted file mode 100644
index 6d9f64711..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/index/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/index/table from pg
-
-BEGIN;
-
-DROP TABLE collections_public.index;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/limit_function/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/limit_function/table.sql
deleted file mode 100644
index 748ba15cb..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/limit_function/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/limit_function/table from pg
-
-BEGIN;
-
-DROP TABLE collections_public.limit_function;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/policy/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/policy/table.sql
deleted file mode 100644
index b6bed2165..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/policy/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/policy/table from pg
-
-BEGIN;
-
-DROP TABLE collections_public.policy;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/primary_key_constraint/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/primary_key_constraint/table.sql
deleted file mode 100644
index 4a6aec0a8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/primary_key_constraint/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/primary_key_constraint/table from pg
-
-BEGIN;
-
-DROP TABLE collections_public.primary_key_constraint;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/procedure/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/procedure/table.sql
deleted file mode 100644
index e67217b46..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/procedure/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/procedure/table from pg
-
-BEGIN;
-
-DROP TABLE collections_public.procedure;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/rls_function/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/rls_function/table.sql
deleted file mode 100644
index 5abf43570..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/rls_function/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/rls_function/table from pg
-
-BEGIN;
-
-DROP TABLE collections_public.rls_function;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/schema/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/schema/table.sql
deleted file mode 100644
index 3e2c02693..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/schema/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/schema/table from pg
-
-BEGIN;
-
-DROP TABLE collections_public.schema;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/schema_grant/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/schema_grant/table.sql
deleted file mode 100644
index d0999bac1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/schema_grant/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/schema_grant/table from pg
-
-BEGIN;
-
-DROP TABLE collections_public.schema_grant;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/table/indexes/databases_table_unique_name_idx.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/table/indexes/databases_table_unique_name_idx.sql
deleted file mode 100644
index 32f39e28e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/table/indexes/databases_table_unique_name_idx.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-
-BEGIN;
-
-DROP INDEX collections_public.databases_table_unique_name_idx;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/table/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/table/table.sql
deleted file mode 100644
index 02c4f8ca0..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/table/table.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-
-BEGIN;
-
-DROP TABLE collections_public.table;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/table_grant/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/table_grant/table.sql
deleted file mode 100644
index f334b6d4a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/table_grant/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/table_grant/table from pg
-
-BEGIN;
-
-DROP TABLE collections_public.table_grant;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/trigger/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/trigger/table.sql
deleted file mode 100644
index 01033184d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/trigger/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/trigger/table from pg
-
-BEGIN;
-
-DROP TABLE collections_public.trigger;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/trigger_function/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/trigger_function/table.sql
deleted file mode 100644
index 551771756..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/trigger_function/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/trigger_function/table from pg
-
-BEGIN;
-
-DROP TABLE collections_public.trigger_function;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/unique_constraint/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/unique_constraint/table.sql
deleted file mode 100644
index f72f62f2b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/collections_public/tables/unique_constraint/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/collections_public/tables/unique_constraint/table from pg
-
-BEGIN;
-
-DROP TABLE collections_public.unique_constraint;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_private/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_private/schema.sql
deleted file mode 100644
index 731eb6672..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_private/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_private/schema from pg
-
-BEGIN;
-
-DROP SCHEMA meta_private;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/schema.sql
deleted file mode 100644
index 2abf9e0c2..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/schema from pg
-
-BEGIN;
-
-DROP SCHEMA meta_public;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/api_extensions/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/api_extensions/table.sql
deleted file mode 100644
index c22e28cd0..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/api_extensions/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/api_extensions/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.api_extensions;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/api_modules/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/api_modules/table.sql
deleted file mode 100644
index 627f0a9f8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/api_modules/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/api_modules/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.api_modules;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/api_schemata/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/api_schemata/table.sql
deleted file mode 100644
index ce91350a9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/api_schemata/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/api_schemata/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.api_schemata;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/apis/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/apis/table.sql
deleted file mode 100644
index a0b2af1d4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/apis/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/apis/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.apis;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/apps/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/apps/table.sql
deleted file mode 100644
index 6342cb2bd..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/apps/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/apps/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.apps;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/domains/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/domains/table.sql
deleted file mode 100644
index 621c96c6a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/domains/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/domains/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.domains;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/site_metadata/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/site_metadata/table.sql
deleted file mode 100644
index 8a0944767..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/site_metadata/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/site_metadata/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.site_metadata;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/site_modules/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/site_modules/table.sql
deleted file mode 100644
index ce842ec72..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/site_modules/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/site_modules/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.site_modules;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/site_themes/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/site_themes/table.sql
deleted file mode 100644
index e6a7e537c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/site_themes/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/site_themes/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.site_themes;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/sites/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/sites/table.sql
deleted file mode 100644
index 53d954b5d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/revert/schemas/meta_public/tables/sites/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/meta_public/tables/sites/table from pg
-
-BEGIN;
-
-DROP TABLE meta_public.sites;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_private/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_private/schema.sql
deleted file mode 100644
index d51f00c36..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_private/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_private/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('collections_private');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/schema.sql
deleted file mode 100644
index 85e9ccc83..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/schema.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-
-BEGIN;
-
-SELECT verify_schema ('collections_public');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/check_constraint/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/check_constraint/table.sql
deleted file mode 100644
index a31168d89..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/check_constraint/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/check_constraint/table on pg
-
-BEGIN;
-
-SELECT verify_table ('collections_public.check_constraint');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/database/indexes/databases_database_unique_name_idx.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/database/indexes/databases_database_unique_name_idx.sql
deleted file mode 100644
index 1c40e6fef..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/database/indexes/databases_database_unique_name_idx.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-
-BEGIN;
-
-SELECT verify_index ('collections_public.database', 'databases_database_unique_name_idx');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/database/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/database/table.sql
deleted file mode 100644
index 0f7c7c677..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/database/table.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-
-BEGIN;
-
-SELECT verify_table ('collections_public.database');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/database_extension/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/database_extension/table.sql
deleted file mode 100644
index 8365bb7d3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/database_extension/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/database_extension/table on pg
-
-BEGIN;
-
-SELECT verify_table ('collections_public.database_extension');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/extension/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/extension/table.sql
deleted file mode 100644
index 6adb43b47..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/extension/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/extension/table on pg
-
-BEGIN;
-
-SELECT verify_table ('collections_public.extension');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/field/indexes/databases_field_uniq_names_idx.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/field/indexes/databases_field_uniq_names_idx.sql
deleted file mode 100644
index 23b2ee3e1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/field/indexes/databases_field_uniq_names_idx.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/field/indexes/databases_field_uniq_names_idx on pg
-
-BEGIN;
-
-SELECT verify_index ('collections_public.field', 'databases_field_uniq_names_idx');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/field/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/field/table.sql
deleted file mode 100644
index 317201ea0..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/field/table.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-
-BEGIN;
-
-SELECT verify_table ('collections_public.field');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/foreign_key_constraint/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/foreign_key_constraint/table.sql
deleted file mode 100644
index 809379c52..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/foreign_key_constraint/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/foreign_key_constraint/table on pg
-
-BEGIN;
-
-SELECT verify_table ('collections_public.foreign_key_constraint');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/full_text_search/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/full_text_search/table.sql
deleted file mode 100644
index 363db9bbf..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/full_text_search/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/full_text_search/table on pg
-
-BEGIN;
-
-SELECT verify_table ('collections_public.full_text_search');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/index/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/index/table.sql
deleted file mode 100644
index 10cf5d7c7..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/index/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/index/table on pg
-
-BEGIN;
-
-SELECT verify_table ('collections_public.index');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/limit_function/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/limit_function/table.sql
deleted file mode 100644
index 0c601cd32..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/limit_function/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/limit_function/table on pg
-
-BEGIN;
-
-SELECT verify_table ('collections_public.limit_function');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/policy/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/policy/table.sql
deleted file mode 100644
index df1d9b3b2..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/policy/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/policy/table on pg
-
-BEGIN;
-
-SELECT verify_table ('collections_public.policy');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/primary_key_constraint/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/primary_key_constraint/table.sql
deleted file mode 100644
index ff255ff32..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/primary_key_constraint/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/primary_key_constraint/table on pg
-
-BEGIN;
-
-SELECT verify_table ('collections_public.primary_key_constraint');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/procedure/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/procedure/table.sql
deleted file mode 100644
index cd4573351..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/procedure/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/procedure/table on pg
-
-BEGIN;
-
-SELECT verify_table ('collections_public.procedure');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/rls_function/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/rls_function/table.sql
deleted file mode 100644
index 89f4f5092..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/rls_function/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/rls_function/table on pg
-
-BEGIN;
-
-SELECT verify_table ('collections_public.rls_function');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/schema/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/schema/table.sql
deleted file mode 100644
index fc77595b6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/schema/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/schema/table on pg
-
-BEGIN;
-
-SELECT verify_table ('collections_public.schema');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/schema_grant/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/schema_grant/table.sql
deleted file mode 100644
index 1ba56e598..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/schema_grant/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/schema_grant/table on pg
-
-BEGIN;
-
-SELECT verify_table ('collections_public.schema_grant');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/table/indexes/databases_table_unique_name_idx.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/table/indexes/databases_table_unique_name_idx.sql
deleted file mode 100644
index 17948d290..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/table/indexes/databases_table_unique_name_idx.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-
-BEGIN;
-
-SELECT verify_index ('collections_public.table', 'databases_table_unique_name_idx');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/table/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/table/table.sql
deleted file mode 100644
index 3bb1f2308..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/table/table.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-
-BEGIN;
-
-SELECT verify_table ('collections_public.table');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/table_grant/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/table_grant/table.sql
deleted file mode 100644
index d03e9c81e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/table_grant/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/table_grant/table on pg
-
-BEGIN;
-
-SELECT verify_table ('collections_public.table_grant');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/trigger/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/trigger/table.sql
deleted file mode 100644
index 30bf7449d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/trigger/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/trigger/table on pg
-
-BEGIN;
-
-SELECT verify_table ('collections_public.trigger');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/trigger_function/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/trigger_function/table.sql
deleted file mode 100644
index ca1dafd8e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/trigger_function/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/trigger_function/table on pg
-
-BEGIN;
-
-SELECT verify_table ('collections_public.trigger_function');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/unique_constraint/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/unique_constraint/table.sql
deleted file mode 100644
index 0bd56c21d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/collections_public/tables/unique_constraint/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/collections_public/tables/unique_constraint/table on pg
-
-BEGIN;
-
-SELECT verify_table ('collections_public.unique_constraint');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_private/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_private/schema.sql
deleted file mode 100644
index 2937c3557..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_private/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_private/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('meta_private');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/schema.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/schema.sql
deleted file mode 100644
index efcebfddb..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('meta_public');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/api_extensions/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/api_extensions/table.sql
deleted file mode 100644
index f33b8f8d0..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/api_extensions/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/api_extensions/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.api_extensions');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/api_modules/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/api_modules/table.sql
deleted file mode 100644
index 4c72fb3a2..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/api_modules/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/api_modules/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.api_modules');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/api_schemata/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/api_schemata/table.sql
deleted file mode 100644
index c1604ecd4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/api_schemata/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/api_schemata/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.api_schemata');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/apis/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/apis/table.sql
deleted file mode 100644
index 25aaa5e66..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/apis/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/apis/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.apis');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/apps/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/apps/table.sql
deleted file mode 100644
index c01d1aba4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/apps/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/apps/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.apps');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/domains/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/domains/table.sql
deleted file mode 100644
index b8fc17ef1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/domains/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/domains/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.domains');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/site_metadata/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/site_metadata/table.sql
deleted file mode 100644
index 328f8500e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/site_metadata/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/site_metadata/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.site_metadata');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/site_modules/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/site_modules/table.sql
deleted file mode 100644
index 195a12400..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/site_modules/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/site_modules/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.site_modules');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/site_themes/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/site_themes/table.sql
deleted file mode 100644
index 2f0488ce3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/site_themes/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/site_themes/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.site_themes');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/sites/table.sql b/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/sites/table.sql
deleted file mode 100644
index ce3556937..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-schema/verify/schemas/meta_public/tables/sites/table.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/meta_public/tables/sites/table on pg
-
-BEGIN;
-
-SELECT verify_table ('meta_public.sites');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/stamps/LICENSE b/__fixtures__/stage/extensions/@pgpm/stamps/LICENSE
deleted file mode 100644
index 7b18c9183..000000000
--- a/__fixtures__/stage/extensions/@pgpm/stamps/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2025 Dan Lynch
-Copyright (c) 2025 Constructive
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/__fixtures__/stage/extensions/@pgpm/stamps/Makefile b/__fixtures__/stage/extensions/@pgpm/stamps/Makefile
deleted file mode 100644
index e69c58e14..000000000
--- a/__fixtures__/stage/extensions/@pgpm/stamps/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-EXTENSION = pgpm-stamps
-DATA = sql/pgpm-stamps--0.14.0.sql
-
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
diff --git a/__fixtures__/stage/extensions/@pgpm/stamps/README.md b/__fixtures__/stage/extensions/@pgpm/stamps/README.md
deleted file mode 100644
index 93a903592..000000000
--- a/__fixtures__/stage/extensions/@pgpm/stamps/README.md
+++ /dev/null
@@ -1,218 +0,0 @@
-# @pgpm/stamps
-
-
-
-
-
-
-
-
-
-
-
-
-
-Timestamp utilities and audit trail functions for PostgreSQL.
-
-## Overview
-
-`@pgpm/stamps` provides PostgreSQL trigger functions for automatically managing timestamp and user tracking columns in your tables. This package simplifies audit trail implementation by automatically setting `created_at`, `updated_at`, `created_by`, and `updated_by` fields.
-
-## Features
-
-- **timestamps()**: Trigger function that automatically manages `created_at` and `updated_at` columns
-- **peoplestamps()**: Trigger function that automatically manages `created_by` and `updated_by` columns using JWT claims
-- Automatic preservation of creation timestamps and users on updates
-- Integration with `@pgpm/jwt-claims` for user context
-
-## Installation
-
-If you have `pgpm` installed:
-
-```bash
-pgpm install @pgpm/stamps
-pgpm deploy
-```
-
-This is a quick way to get started. The sections below provide more detailed installation options.
-
-### Prerequisites
-
-```bash
-# Install pgpm CLI
-npm install -g pgpm
-
-# Start local Postgres (via Docker) and export env vars
-pgpm docker start
-eval "$(pgpm env)"
-```
-
-> **Tip:** Already running Postgres? Skip the Docker step and just export your `PG*` environment variables.
-
-### **Add to an Existing Package**
-
-```bash
-# 1. Install the package
-pgpm install @pgpm/stamps
-
-# 2. Deploy locally
-pgpm deploy
-```
-
-### **Add to a New Project**
-
-```bash
-# 1. Create a workspace
-pgpm init workspace
-
-# 2. Create your first module
-cd my-workspace
-pgpm init
-
-# 3. Install a package
-cd packages/my-module
-pgpm install @pgpm/stamps
-
-# 4. Deploy everything
-pgpm deploy --createdb --database mydb1
-```
-
-## Usage
-
-### Setting Up Timestamp Tracking
-
-```sql
--- Create a table with timestamp columns
-CREATE TABLE public.posts (
- id serial PRIMARY KEY,
- title text,
- content text,
- created_at timestamptz,
- updated_at timestamptz
-);
-
--- Add trigger to automatically manage timestamps
-CREATE TRIGGER set_timestamps
-BEFORE INSERT OR UPDATE ON public.posts
-FOR EACH ROW
-EXECUTE FUNCTION stamps.timestamps();
-```
-
-### Setting Up User Tracking
-
-```sql
--- Create a table with user tracking columns
-CREATE TABLE public.posts (
- id serial PRIMARY KEY,
- title text,
- content text,
- created_at timestamptz,
- updated_at timestamptz,
- created_by uuid,
- updated_by uuid
-);
-
--- Add triggers for automatic timestamp and user tracking
-CREATE TRIGGER set_timestamps
-BEFORE INSERT OR UPDATE ON public.posts
-FOR EACH ROW
-EXECUTE FUNCTION stamps.timestamps();
-
-CREATE TRIGGER set_peoplestamps
-BEFORE INSERT OR UPDATE ON public.posts
-FOR EACH ROW
-EXECUTE FUNCTION stamps.peoplestamps();
-```
-
-### How It Works
-
-When you insert a new row:
-- `created_at` and `updated_at` are set to the current timestamp
-- `created_by` and `updated_by` are set to the current user ID from JWT claims
-
-When you update an existing row:
-- `created_at` and `created_by` are preserved (set to their original values)
-- `updated_at` is set to the current timestamp
-- `updated_by` is set to the current user ID from JWT claims
-
-### Example Usage
-
-```sql
--- Set the user context (typically done by your application)
-SET jwt.claims.user_id = '00000000-0000-0000-0000-000000000001';
-
--- Insert a new post
-INSERT INTO public.posts (title, content)
-VALUES ('My First Post', 'Hello World!');
--- created_at, updated_at, created_by, and updated_by are automatically set
-
--- Update the post
-UPDATE public.posts
-SET content = 'Updated content'
-WHERE id = 1;
--- updated_at and updated_by are automatically updated
--- created_at and created_by remain unchanged
-```
-
-## Trigger Functions
-
-### stamps.timestamps()
-
-Automatically manages timestamp columns on INSERT and UPDATE operations.
-
-**Behavior:**
-- **INSERT**: Sets both `created_at` and `updated_at` to `NOW()`
-- **UPDATE**: Preserves `created_at`, updates `updated_at` to `NOW()`
-
-**Required Columns:**
-- `created_at timestamptz`
-- `updated_at timestamptz`
-
-### stamps.peoplestamps()
-
-Automatically manages user tracking columns on INSERT and UPDATE operations using JWT claims.
-
-**Behavior:**
-- **INSERT**: Sets both `created_by` and `updated_by` to `jwt_public.current_user_id()`
-- **UPDATE**: Preserves `created_by`, updates `updated_by` to `jwt_public.current_user_id()`
-
-**Required Columns:**
-- `created_by uuid`
-- `updated_by uuid`
-
-**Dependencies:**
-- Requires `@pgpm/jwt-claims` for `jwt_public.current_user_id()` function
-- User context must be set via `jwt.claims.user_id` session variable
-
-## Dependencies
-
-- `@pgpm/jwt-claims`: JWT claim handling for user context
-- `@pgpm/verify`: Verification utilities for database objects
-
-## Testing
-
-```bash
-pnpm test
-```
-
-The test suite validates:
-- Automatic timestamp setting on insert and update
-- Automatic user tracking on insert and update
-- Preservation of creation timestamps and users on updates
-- Integration with JWT claims for user context
-
-## Related Tooling
-
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
-* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
-* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
-* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
-
-## Disclaimer
-
-AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED "AS IS", AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND.
-
-No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value.
diff --git a/__fixtures__/stage/extensions/@pgpm/stamps/__tests__/stamps.test.ts b/__fixtures__/stage/extensions/@pgpm/stamps/__tests__/stamps.test.ts
deleted file mode 100644
index b40faa93b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/stamps/__tests__/stamps.test.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import { getConnections, PgTestClient } from 'pgsql-test';
-
-let pg: PgTestClient;
-let teardown: () => Promise;
-
-beforeAll(async () => {
- ({ pg, teardown } = await getConnections());
-
- await pg.any(`
- CREATE TABLE public.test_stamps (
- id serial PRIMARY KEY,
- name text,
- created_at timestamptz,
- updated_at timestamptz,
- created_by uuid,
- updated_by uuid
- );
-
- CREATE TRIGGER set_stamps
- BEFORE INSERT OR UPDATE ON public.test_stamps
- FOR EACH ROW
- EXECUTE FUNCTION stamps.timestamps();
-
- CREATE TRIGGER set_peoplestamps
- BEFORE INSERT OR UPDATE ON public.test_stamps
- FOR EACH ROW
- EXECUTE FUNCTION stamps.peoplestamps();
- `);
-});
-
-afterAll(async () => {
- try {
- await teardown();
- } catch (e) {
- console.error('Teardown failed:', e);
- }
-});
-
-beforeEach(() => pg.beforeEach());
-afterEach(() => pg.afterEach());
-
-it('applies timestamps and peoplestamps', async () => {
- await pg.setContext({ 'jwt.claims.user_id': '00000000-0000-0000-0000-000000000001' });
-
- const insertRes = await pg.one(
- `INSERT INTO public.test_stamps (name) VALUES ($1) RETURNING *`,
- ['Alice']
- );
-
- expect(insertRes.created_at).toBeTruthy();
- expect(insertRes.updated_at).toBeTruthy();
- expect(insertRes.created_by).toBe('00000000-0000-0000-0000-000000000001');
- expect(insertRes.updated_by).toBe('00000000-0000-0000-0000-000000000001');
-});
diff --git a/__fixtures__/stage/extensions/@pgpm/stamps/deploy/schemas/stamps/procedures/utils.sql b/__fixtures__/stage/extensions/@pgpm/stamps/deploy/schemas/stamps/procedures/utils.sql
deleted file mode 100644
index 141582629..000000000
--- a/__fixtures__/stage/extensions/@pgpm/stamps/deploy/schemas/stamps/procedures/utils.sql
+++ /dev/null
@@ -1,35 +0,0 @@
--- Deploy schemas/stamps/procedures/utils to pg
-
--- requires: schemas/stamps/schema
-
-BEGIN;
-
-CREATE FUNCTION stamps.peoplestamps()
-RETURNS TRIGGER AS $$
-BEGIN
- IF TG_OP = 'INSERT' THEN
- NEW.created_by = jwt_public.current_user_id();
- NEW.updated_by = jwt_public.current_user_id();
- ELSIF TG_OP = 'UPDATE' THEN
- NEW.created_by = OLD.created_by;
- NEW.updated_by = jwt_public.current_user_id();
- END IF;
- RETURN NEW;
-END;
-$$ LANGUAGE 'plpgsql';
-
-CREATE FUNCTION stamps.timestamps()
-RETURNS TRIGGER AS $$
-BEGIN
- IF TG_OP = 'INSERT' THEN
- NEW.created_at = NOW();
- NEW.updated_at = NOW();
- ELSIF TG_OP = 'UPDATE' THEN
- NEW.created_at = OLD.created_at;
- NEW.updated_at = NOW();
- END IF;
- RETURN NEW;
-END;
-$$ LANGUAGE 'plpgsql';
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/stamps/deploy/schemas/stamps/schema.sql b/__fixtures__/stage/extensions/@pgpm/stamps/deploy/schemas/stamps/schema.sql
deleted file mode 100644
index ce403b11e..000000000
--- a/__fixtures__/stage/extensions/@pgpm/stamps/deploy/schemas/stamps/schema.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- Deploy schemas/stamps/schema to pg
-
-
-BEGIN;
-
-CREATE SCHEMA stamps;
-
-GRANT USAGE ON SCHEMA stamps
-TO authenticated, anonymous;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA stamps
-GRANT EXECUTE ON FUNCTIONS
-TO authenticated;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/stamps/jest.config.js b/__fixtures__/stage/extensions/@pgpm/stamps/jest.config.js
deleted file mode 100644
index e20e7efb5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/stamps/jest.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @type {import('ts-jest').JestConfigWithTsJest} */
-module.exports = {
- preset: 'ts-jest',
- testEnvironment: 'node',
-
- // Match both __tests__ and colocated test files
- testMatch: ['**/?(*.)+(test|spec).{ts,tsx,js,jsx}'],
-
- // Ignore build artifacts and type declarations
- testPathIgnorePatterns: ['/dist/', '\\.d\\.ts$'],
- modulePathIgnorePatterns: ['/dist/'],
- watchPathIgnorePatterns: ['/dist/'],
-
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
-};
diff --git a/__fixtures__/stage/extensions/@pgpm/stamps/package.json b/__fixtures__/stage/extensions/@pgpm/stamps/package.json
deleted file mode 100644
index d7b21bb80..000000000
--- a/__fixtures__/stage/extensions/@pgpm/stamps/package.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "name": "@pgpm/stamps",
- "version": "0.15.2",
- "description": "Timestamp utilities and audit trail functions for PostgreSQL",
- "author": "Dan Lynch ",
- "contributors": [
- "Constructive "
- ],
- "keywords": [
- "postgresql",
- "pgpm",
- "timestamp",
- "audit"
- ],
- "publishConfig": {
- "access": "public"
- },
- "scripts": {
- "bundle": "pgpm package",
- "test": "jest",
- "test:watch": "jest --watch"
- },
- "dependencies": {
- "@pgpm/jwt-claims": "0.15.2",
- "@pgpm/verify": "0.15.2"
- },
- "devDependencies": {
- "pgpm": "^1.0.0"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/constructive-io/pgpm-modules"
- },
- "homepage": "https://github.com/constructive-io/pgpm-modules",
- "bugs": {
- "url": "https://github.com/constructive-io/pgpm-modules/issues"
- }
-}
diff --git a/__fixtures__/stage/extensions/@pgpm/stamps/pgpm-stamps.control b/__fixtures__/stage/extensions/@pgpm/stamps/pgpm-stamps.control
deleted file mode 100644
index a907aef5a..000000000
--- a/__fixtures__/stage/extensions/@pgpm/stamps/pgpm-stamps.control
+++ /dev/null
@@ -1,8 +0,0 @@
-# pgpm-stamps extension
-comment = 'pgpm-stamps extension'
-default_version = '0.14.0'
-module_pathname = '$libdir/pgpm-stamps'
-requires = 'plpgsql,pgpm-jwt-claims,pgpm-verify'
-relocatable = false
-superuser = false
-
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/stamps/pgpm.plan b/__fixtures__/stage/extensions/@pgpm/stamps/pgpm.plan
deleted file mode 100644
index 486b32f9c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/stamps/pgpm.plan
+++ /dev/null
@@ -1,6 +0,0 @@
-%syntax-version=1.0.0
-%project=pgpm-stamps
-%uri=pgpm-stamps
-
-schemas/stamps/schema 2020-12-18T04:55:26Z Dan Lynch # add schemas/stamps/schema
-schemas/stamps/procedures/utils [schemas/stamps/schema] 2020-12-18T04:57:09Z Dan Lynch # add schemas/stamps/procedures/utils
diff --git a/__fixtures__/stage/extensions/@pgpm/stamps/revert/schemas/stamps/procedures/utils.sql b/__fixtures__/stage/extensions/@pgpm/stamps/revert/schemas/stamps/procedures/utils.sql
deleted file mode 100644
index ddbf19cf1..000000000
--- a/__fixtures__/stage/extensions/@pgpm/stamps/revert/schemas/stamps/procedures/utils.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Revert schemas/stamps/procedures/utils from pg
-
-BEGIN;
-
-DROP FUNCTION stamps.peoplestamps();
-DROP FUNCTION stamps.timestamps();
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/stamps/revert/schemas/stamps/schema.sql b/__fixtures__/stage/extensions/@pgpm/stamps/revert/schemas/stamps/schema.sql
deleted file mode 100644
index fbcf1f6d2..000000000
--- a/__fixtures__/stage/extensions/@pgpm/stamps/revert/schemas/stamps/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/stamps/schema from pg
-
-BEGIN;
-
-DROP SCHEMA stamps;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/stamps/sql/pgpm-stamps--0.14.0.sql b/__fixtures__/stage/extensions/@pgpm/stamps/sql/pgpm-stamps--0.14.0.sql
deleted file mode 100644
index 49fe22992..000000000
--- a/__fixtures__/stage/extensions/@pgpm/stamps/sql/pgpm-stamps--0.14.0.sql
+++ /dev/null
@@ -1,33 +0,0 @@
-\echo Use "CREATE EXTENSION pgpm-stamps" to load this file. \quit
-CREATE SCHEMA stamps;
-
-GRANT USAGE ON SCHEMA stamps TO authenticated, anonymous;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA stamps
- GRANT EXECUTE ON FUNCTIONS TO authenticated;
-
-CREATE FUNCTION stamps.peoplestamps() RETURNS trigger AS $EOFCODE$
-BEGIN
- IF TG_OP = 'INSERT' THEN
- NEW.created_by = jwt_public.current_user_id();
- NEW.updated_by = jwt_public.current_user_id();
- ELSIF TG_OP = 'UPDATE' THEN
- NEW.created_by = OLD.created_by;
- NEW.updated_by = jwt_public.current_user_id();
- END IF;
- RETURN NEW;
-END;
-$EOFCODE$ LANGUAGE plpgsql;
-
-CREATE FUNCTION stamps.timestamps() RETURNS trigger AS $EOFCODE$
-BEGIN
- IF TG_OP = 'INSERT' THEN
- NEW.created_at = NOW();
- NEW.updated_at = NOW();
- ELSIF TG_OP = 'UPDATE' THEN
- NEW.created_at = OLD.created_at;
- NEW.updated_at = NOW();
- END IF;
- RETURN NEW;
-END;
-$EOFCODE$ LANGUAGE plpgsql;
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/stamps/verify/schemas/stamps/procedures/utils.sql b/__fixtures__/stage/extensions/@pgpm/stamps/verify/schemas/stamps/procedures/utils.sql
deleted file mode 100644
index c418090f8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/stamps/verify/schemas/stamps/procedures/utils.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Verify schemas/stamps/procedures/utils on pg
-
-BEGIN;
-
-SELECT verify_function ('stamps.peoplestamps');
-SELECT verify_function ('stamps.timestamps');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/stamps/verify/schemas/stamps/schema.sql b/__fixtures__/stage/extensions/@pgpm/stamps/verify/schemas/stamps/schema.sql
deleted file mode 100644
index c5e61273b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/stamps/verify/schemas/stamps/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/stamps/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('stamps');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/LICENSE b/__fixtures__/stage/extensions/@pgpm/totp/LICENSE
deleted file mode 100644
index 7b18c9183..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2025 Dan Lynch
-Copyright (c) 2025 Constructive
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/Makefile b/__fixtures__/stage/extensions/@pgpm/totp/Makefile
deleted file mode 100644
index 6dad643f9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-EXTENSION = pgpm-totp
-DATA = sql/pgpm-totp--0.14.0.sql
-
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/README.md b/__fixtures__/stage/extensions/@pgpm/totp/README.md
deleted file mode 100644
index bf9ab19c3..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/README.md
+++ /dev/null
@@ -1,272 +0,0 @@
-# @pgpm/totp
-
-
-
-
-
-
-
-
-
-
-
-
-
-TOTP implementation in pure PostgreSQL plpgsql
-
-This extension provides the HMAC Time-Based One-Time Password Algorithm (TOTP) as specified in RFC 4226 as pure plpgsql functions.
-
-## Overview
-
-`@pgpm/totp` implements Time-based One-Time Password (TOTP) authentication entirely in PostgreSQL using plpgsql. This package enables two-factor authentication (2FA) directly in your database without external dependencies. It supports TOTP code generation, verification, and QR code URL generation for authenticator apps like Google Authenticator, Authy, and 1Password.
-
-## Features
-
-- **Pure plpgsql Implementation**: No external dependencies or libraries required
-- **TOTP Code Generation**: Generate 6-digit time-based codes
-- **Code Verification**: Verify user-provided TOTP codes
-- **QR Code URLs**: Generate otpauth:// URLs for authenticator apps
-- **Configurable Parameters**: Customize interval and code length
-- **RFC 4226 Compliant**: Follows the HOTP standard
-- **Base32 Integration**: Uses `@pgpm/base32` for secret encoding
-
-## Installation
-
-If you have `pgpm` installed:
-
-```bash
-pgpm install @pgpm/totp
-pgpm deploy
-```
-
-This is a quick way to get started. The sections below provide more detailed installation options.
-
-### Prerequisites
-
-```bash
-# Install pgpm CLI
-npm install -g pgpm
-
-# Start local Postgres (via Docker) and export env vars
-pgpm docker start
-eval "$(pgpm env)"
-```
-
-> **Tip:** Already running Postgres? Skip the Docker step and just export your `PG*` environment variables.
-
-### **Add to an Existing Package**
-
-```bash
-# 1. Install the package
-pgpm install @pgpm/totp
-
-# 2. Deploy locally
-pgpm deploy
-```
-
-### **Add to a New Project**
-
-```bash
-# 1. Create a workspace
-pgpm init workspace
-
-# 2. Create your first module
-cd my-workspace
-pgpm init
-
-# 3. Install a package
-cd packages/my-module
-pgpm install @pgpm/totp
-
-# 4. Deploy everything
-pgpm deploy --createdb --database mydb1
-```
-
-## Usage
-
-## totp.generate
-
-```sql
-SELECT totp.generate('mysecret');
-
--- you can also specify totp_interval, and totp_length
-SELECT totp.generate('mysecret', 30, 6);
-```
-
-In this case, produces a TOTP code of length 6
-
-```
-013438
-```
-
-## totp.verify
-
-```sql
-SELECT totp.verify('mysecret', '765430');
-
--- you can also specify totp_interval, and totp_length
-SELECT totp.verify('mysecret', '765430', 30, 6);
-```
-
-Depending on input, returns `TRUE/FALSE`
-
-## totp.url
-
-```sql
--- totp.url ( email text, totp_secret text, totp_interval int, totp_issuer text )
-SELECT totp.url(
- 'customer@email.com',
- 'mysecret',
- 30,
- 'Acme Inc'
-);
-```
-
-Will produce a URL-encoded string
-
-```
-otpauth://totp/customer@email.com?secret=mysecret&period=30&issuer=Acme%20Inc
-```
-
-## Integration Examples
-
-### User Registration with 2FA
-
-```sql
--- Store TOTP secret for user
-CREATE TABLE user_totp (
- user_id uuid PRIMARY KEY,
- totp_secret text NOT NULL,
- enabled boolean DEFAULT false,
- created_at timestamptz DEFAULT now()
-);
-
--- Generate and store secret for new user
-INSERT INTO user_totp (user_id, totp_secret)
-VALUES ('user-uuid', 'mysecret');
-
--- Get QR code URL for user to scan
-SELECT totp.url(
- 'user@example.com',
- totp_secret,
- 30,
- 'My App'
-) FROM user_totp WHERE user_id = 'user-uuid';
-```
-
-### Login Verification
-
-```sql
--- Verify TOTP code during login
-CREATE FUNCTION verify_user_totp(
- p_user_id uuid,
- p_code text
-) RETURNS boolean AS $$
-DECLARE
- v_secret text;
-BEGIN
- SELECT totp_secret INTO v_secret
- FROM user_totp
- WHERE user_id = p_user_id AND enabled = true;
-
- IF v_secret IS NULL THEN
- RETURN false;
- END IF;
-
- RETURN totp.verify(v_secret, p_code, 30, 6);
-END;
-$$ LANGUAGE plpgsql;
-```
-
-### Enable 2FA Flow
-
-```sql
--- 1. Generate secret and QR code URL
-SELECT totp.url('user@example.com', 'newsecret', 30, 'My App');
-
--- 2. User scans QR code with authenticator app
-
--- 3. User provides first code to verify setup
-SELECT totp.verify('newsecret', '123456', 30, 6);
-
--- 4. If verified, enable 2FA
-UPDATE user_totp
-SET enabled = true
-WHERE user_id = 'user-uuid';
-```
-
-## Use Cases
-
-- **Two-Factor Authentication (2FA)**: Add an extra layer of security to user logins
-- **API Access Tokens**: Generate time-based tokens for API authentication
-- **Transaction Verification**: Require TOTP codes for sensitive operations
-- **Admin Access**: Require 2FA for administrative functions
-- **Password Reset**: Use TOTP as part of password reset flow
-
-## Dependencies
-
-- `@pgpm/base32`: Base32 encoding for TOTP secrets
-- `@pgpm/verify`: Verification utilities
-
-## Testing
-
-```bash
-pnpm test
-```
-
-## Caveats
-
-Currently only supports `sha1`, pull requests welcome!
-
-## Debugging
-
-use the verbose option to show keys
-
-```sh
-$ oathtool --totp -v -d 7 -s 10s -b OH3NUPO3WOGOZZQ4
-Hex secret: 71f6da3ddbb38cece61c
-Base32 secret: OH3NUPO3WOGOZZQ4
-Digits: 7
-Window size: 0
-TOTP mode: SHA1
-Step size (seconds): 10
-Start time: 1970-01-01 00:00:00 UTC (0)
-Current time: 2020-11-18 12:35:08 UTC (1605702908)
-Counter: 0x9921BB2 (160570290)
-```
-
-using time for testing
-
-oathtool --totp -v -d 6 -s 30s -b vmlhl2knm27eftq7 --now "2020-02-05 22:11:40 UTC"
-
-## Credits
-
-Thanks to
-
-https://tools.ietf.org/html/rfc6238
-
-https://www.youtube.com/watch?v=VOYxF12K1vE
-
-https://pgxn.org/dist/otp/
-
-And major improvements from
-
-https://gist.github.com/bwbroersma/676d0de32263ed554584ab132434ebd9
-
----
-
-## Related Tooling
-
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
-* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
-* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
-* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
-
-## Disclaimer
-
-AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED "AS IS", AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND.
-
-No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value.
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/__tests__/__snapshots__/algo.test.ts.snap b/__fixtures__/stage/extensions/@pgpm/totp/__tests__/__snapshots__/algo.test.ts.snap
deleted file mode 100644
index 15806d085..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/__tests__/__snapshots__/algo.test.ts.snap
+++ /dev/null
@@ -1,25 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`issue case: 1 1`] = `"476240"`;
-
-exports[`issue case: 2 1`] = `"788648"`;
-
-exports[`issue case: 3 1`] = `"080176"`;
-
-exports[`rfc6238 case: 1 1`] = `"94287082"`;
-
-exports[`rfc6238 case: 2 1`] = `"07081804"`;
-
-exports[`rfc6238 case: 3 1`] = `"14050471"`;
-
-exports[`rfc6238 case: 4 1`] = `"89005924"`;
-
-exports[`rfc6238 case: 5 1`] = `"69279037"`;
-
-exports[`rfc6238 case: 6 1`] = `"65353130"`;
-
-exports[`speakeasy test case: 1 1`] = `"287082"`;
-
-exports[`speakeasy test case: 2 1`] = `"081804"`;
-
-exports[`speakeasy test case: 3 1`] = `"360094"`;
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/__tests__/algo.test.ts b/__fixtures__/stage/extensions/@pgpm/totp/__tests__/algo.test.ts
deleted file mode 100644
index 44e3a97c9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/__tests__/algo.test.ts
+++ /dev/null
@@ -1,142 +0,0 @@
-import { getConnections, PgTestClient } from 'pgsql-test';
-import cases from 'jest-in-case';
-
-let pg: PgTestClient;
-let teardown: () => Promise;
-
-beforeAll(async () => {
- ({ pg, teardown } = await getConnections());
-});
-
-afterAll(async () => {
- await teardown();
-});
-
-
-cases(
- 'rfc6238',
- async (opts: { date: string; len: number; algo: string; result: string }) => {
- const { generate } = await pg.one(
- `SELECT totp.generate(
- secret := $1,
- period := 30,
- digits := $2,
- time_from := $3,
- hash := $4,
- encoding := NULL
- )`,
- ['12345678901234567890', opts.len, opts.date, opts.algo]
- );
- expect(generate).toEqual(opts.result);
- expect(generate).toMatchSnapshot();
- },
- [
- { date: '1970-01-01 00:00:59', len: 8, algo: 'sha1', result: '94287082' },
- { date: '2005-03-18 01:58:29', len: 8, algo: 'sha1', result: '07081804' },
- { date: '2005-03-18 01:58:31', len: 8, algo: 'sha1', result: '14050471' },
- { date: '2009-02-13 23:31:30', len: 8, algo: 'sha1', result: '89005924' },
- { date: '2033-05-18 03:33:20', len: 8, algo: 'sha1', result: '69279037' },
- { date: '2603-10-11 11:33:20', len: 8, algo: 'sha1', result: '65353130' }
- ]
-);
-
-cases(
- 'speakeasy test',
- async (opts: { date: string; len: number; algo: string; step: number; result: string }) => {
- const { generate } = await pg.one(
- `SELECT totp.generate(
- secret := $1,
- period := $5,
- digits := $2,
- time_from := $3,
- hash := $4,
- encoding := NULL
- )`,
- ['12345678901234567890', opts.len, opts.date, opts.algo, opts.step]
- );
- expect(generate).toEqual(opts.result);
- expect(generate).toMatchSnapshot();
- },
- [
- { date: '1970-01-01 00:00:59', len: 6, step: 30, algo: 'sha1', result: '287082' },
- { date: '2005-03-18 01:58:29', len: 6, step: 30, algo: 'sha1', result: '081804' },
- { date: '2005-03-18 01:58:29', len: 6, step: 60, algo: 'sha1', result: '360094' }
- ]
-);
-
-cases(
- 'verify',
- async (opts: { date: string; len: number; algo?: string; step: number; result: string }) => {
- const [{ verified }] = await pg.any(
- `SELECT * FROM totp.verify(
- secret := $1,
- check_totp := $2,
- period := $3,
- digits := $4,
- time_from := $5,
- encoding := NULL
- ) as verified`,
- ['12345678901234567890', opts.result, opts.step, opts.len, opts.date]
- );
- expect(verified).toBe(true);
- },
- [
- { date: '1970-01-01 00:00:59', len: 6, step: 30, algo: 'sha1', result: '287082' },
- { date: '2005-03-18 01:58:29', len: 6, step: 30, algo: 'sha1', result: '081804' },
- { date: '2005-03-18 01:58:29', len: 6, step: 60, algo: 'sha1', result: '360094' },
- { date: '1970-01-01 00:00:59', len: 8, step: 30, algo: 'sha1', result: '94287082' },
- { date: '2005-03-18 01:58:29', len: 8, step: 30, algo: 'sha1', result: '07081804' },
- { date: '2005-03-18 01:58:31', len: 8, step: 30, algo: 'sha1', result: '14050471' },
- { date: '2009-02-13 23:31:30', len: 8, step: 30, algo: 'sha1', result: '89005924' },
- { date: '2033-05-18 03:33:20', len: 8, algo: 'sha1', step: 30, result: '69279037' },
- { date: '2603-10-11 11:33:20', len: 8, algo: 'sha1', step: 30, result: '65353130' }
- ]
-);
-
-cases(
- 'issue',
- async (opts: { encoding: string | null; secret: string; date: string; len: number; step: number; algo: string; result: string }) => {
- const { generate } = await pg.one(
- `SELECT totp.generate(
- secret := $1,
- period := $2,
- digits := $3,
- time_from := $4,
- hash := $5,
- encoding := $6
- )`,
- [opts.secret, opts.step, opts.len, opts.date, opts.algo, opts.encoding]
- );
- expect(generate).toEqual(opts.result);
- expect(generate).toMatchSnapshot();
- },
- [
- {
- encoding: null,
- secret: 'OH3NUPO3WOGOZZQ4',
- date: '2020-11-14 07:46:37.212048+00',
- len: 6,
- step: 30,
- algo: 'sha1',
- result: '476240'
- },
- {
- encoding: 'base32',
- secret: 'OH3NUPO3WOGOZZQ4',
- date: '2020-11-14 07:46:37.212048+00',
- len: 6,
- step: 30,
- algo: 'sha1',
- result: '788648'
- },
- {
- encoding: 'base32',
- secret: 'OH3NUPO',
- date: '2020-11-14 07:46:37.212048+00',
- len: 6,
- step: 30,
- algo: 'sha1',
- result: '080176'
- }
- ]
-);
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/__tests__/totp.test.ts b/__fixtures__/stage/extensions/@pgpm/totp/__tests__/totp.test.ts
deleted file mode 100644
index 460ce211c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/__tests__/totp.test.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { getConnections, PgTestClient } from 'pgsql-test';
-
-let pg: PgTestClient;
-let teardown: () => Promise;
-
-beforeAll(async () => {
- ({ pg, teardown } = await getConnections());
-});
-
-afterAll(async () => {
- await teardown();
-});
-
-
-it('totp.generate + totp.verify basic', async () => {
- const { generate } = await pg.one(
- `SELECT totp.generate($1::text) AS generate`,
- ['secret']
- );
- const { verify } = await pg.one(
- `SELECT totp.verify($1::text, $2::text) AS verify`,
- ['secret', generate]
- );
- expect(typeof generate).toBe('string');
- expect(verify).toBe(true);
-});
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/deploy/schemas/totp/procedures/generate_totp.sql b/__fixtures__/stage/extensions/@pgpm/totp/deploy/schemas/totp/procedures/generate_totp.sql
deleted file mode 100644
index 668f99841..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/deploy/schemas/totp/procedures/generate_totp.sql
+++ /dev/null
@@ -1,168 +0,0 @@
--- Deploy schemas/totp/procedures/generate_totp to pg
--- requires: schemas/totp/schema
--- requires: schemas/totp/procedures/urlencode
-
-BEGIN;
-
--- https://www.youtube.com/watch?v=VOYxF12K1vE
--- https://tools.ietf.org/html/rfc6238
--- http://blog.tinisles.com/2011/10/google-authenticator-one-time-password-algorithm-in-javascript/
--- https://gist.github.com/bwbroersma/676d0de32263ed554584ab132434ebd9
-
-CREATE FUNCTION totp.pad_secret (
- input bytea,
- len int
-) returns bytea as $$
-DECLARE
- output bytea;
- orig_length int = octet_length(input);
-BEGIN
- IF (orig_length = len) THEN
- RETURN input;
- END IF;
-
- -- create blank bytea size of new length
- output = lpad('', len, 'x')::bytea;
-
- FOR i IN 0 .. len-1 LOOP
- output = set_byte(output, i, get_byte(input, i % orig_length));
- END LOOP;
-
- RETURN output;
-END;
-$$
-LANGUAGE 'plpgsql' IMMUTABLE;
-
-CREATE FUNCTION totp.base32_to_hex (
- input text
-) returns text as $$
-DECLARE
- output text[];
- decoded text = base32.decode(input);
- len int = character_length(decoded);
- hx text;
-BEGIN
-
- FOR i IN 1 .. len LOOP
- hx = to_hex(ascii(substring(decoded from i for 1)))::text;
- IF (character_length(hx) = 1) THEN
- -- if it is odd number of digits, pad a 0 so it can later
- hx = '0' || hx;
- END IF;
- output = array_append(output, hx);
- END LOOP;
-
- RETURN array_to_string(output, '');
-END;
-$$
-LANGUAGE 'plpgsql' IMMUTABLE;
-
-CREATE FUNCTION totp.hotp(key BYTEA, c INT, digits INT DEFAULT 6, hash TEXT DEFAULT 'sha1') RETURNS TEXT AS $$
-DECLARE
- c BYTEA := '\x' || LPAD(TO_HEX(c), 16, '0');
- mac BYTEA := HMAC(c, key, hash);
- trunc_offset INT := GET_BYTE(mac, length(mac) - 1) % 16;
- result TEXT := SUBSTRING(SET_BIT(SUBSTRING(mac FROM 1 + trunc_offset FOR 4), 7, 0)::TEXT, 2)::BIT(32)::INT % (10 ^ digits)::INT;
-BEGIN
- RETURN LPAD(result, digits, '0');
-END;
-$$ LANGUAGE plpgsql IMMUTABLE;
-
-CREATE FUNCTION totp.generate(
- secret text,
- period int DEFAULT 30,
- digits int DEFAULT 6,
- time_from timestamptz DEFAULT NOW(),
- hash text DEFAULT 'sha1',
- encoding text DEFAULT 'base32',
- clock_offset int DEFAULT 0
-) RETURNS text AS $$
-DECLARE
- c int := FLOOR(EXTRACT(EPOCH FROM time_from) / period)::int + clock_offset;
- key bytea;
-BEGIN
-
- IF (encoding = 'base32') THEN
- key = ( '\x' || totp.base32_to_hex(secret) )::bytea;
- ELSE
- key = secret::bytea;
- END IF;
-
- RETURN totp.hotp(key, c, digits, hash);
-END;
-$$ LANGUAGE plpgsql STABLE;
-
--- Mitigate timing attacks by using constant-time comparison.
--- Mitigates timing attacks by avoiding early-exit and content-dependent work; compares full byte sequences in a length-oblivious loop.
--- Context: HN discussion on TOTP '=' comparison timing leaks: https://news.ycombinator.com/item?id=26260667
-
--- Context: https://news.ycombinator.com/item?id=26260667
-
-CREATE FUNCTION totp.timing_safe_equals(a bytea, b bytea)
-RETURNS boolean
-AS $$
-DECLARE
- la int := length(a);
- lb int := length(b);
- maxlen int := GREATEST(la, lb);
- i int;
- diff int := la # lb;
- ca int;
- cb int;
-BEGIN
- FOR i IN 0..(maxlen - 1) LOOP
- ca := CASE WHEN i < la THEN get_byte(a, i) ELSE 0 END;
- cb := CASE WHEN i < lb THEN get_byte(b, i) ELSE 0 END;
- diff := diff | (ca # cb);
- END LOOP;
- RETURN diff = 0;
-END;
-$$ LANGUAGE plpgsql IMMUTABLE STRICT;
-
-CREATE FUNCTION totp.timing_safe_equals(a text, b text)
-RETURNS boolean
-AS $$
--- Verify uses timing-safe equality to avoid leaking mismatch position via timing; do not use direct '=' here.
--- See HN discussion for background: https://news.ycombinator.com/item?id=26260667
-
- SELECT totp.timing_safe_equals(convert_to(a, 'UTF8'), convert_to(b, 'UTF8'));
-$$ LANGUAGE sql IMMUTABLE STRICT;
-
-CREATE FUNCTION totp.verify (
- secret text,
- check_totp text,
- period int default 30,
- digits int default 6,
- time_from timestamptz DEFAULT NOW(),
- hash text default 'sha1',
- encoding text DEFAULT 'base32',
- clock_offset int default 0
-)
- RETURNS boolean
- AS $$
- SELECT totp.timing_safe_equals(
- totp.generate(
- secret,
- period,
- digits,
- time_from,
- hash,
- encoding,
- clock_offset
- ),
- check_totp
- );
-$$
-LANGUAGE 'sql';
-
-CREATE FUNCTION totp.url (email text, totp_secret text, totp_interval int, totp_issuer text)
- RETURNS text
- AS $$
- SELECT
- concat('otpauth://totp/', totp.urlencode (email), '?secret=', totp.urlencode (totp_secret), '&period=', totp.urlencode (totp_interval::text), '&issuer=', totp.urlencode (totp_issuer));
-$$
-LANGUAGE 'sql'
-STRICT IMMUTABLE;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/deploy/schemas/totp/procedures/random_base32.sql b/__fixtures__/stage/extensions/@pgpm/totp/deploy/schemas/totp/procedures/random_base32.sql
deleted file mode 100644
index 85106c789..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/deploy/schemas/totp/procedures/random_base32.sql
+++ /dev/null
@@ -1,38 +0,0 @@
--- Uses pgcrypto's gen_random_bytes for cryptographically secure randomness; random() is not suitable for secrets. Preserves RFC 4648 base32 alphabet output.
-
--- Deploy schemas/totp/procedures/random_base32 to pg
--- requires: schemas/totp/schema
-
-BEGIN;
-
-CREATE FUNCTION totp.random_base32 (_length int DEFAULT 20)
- RETURNS text
- LANGUAGE sql
- AS $$
- SELECT
- string_agg(
- ('{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,2,3,4,5,6,7}'::text[])
- [ (get_byte(b, i) % 32) + 1 ],
- ''
- )
- FROM (SELECT gen_random_bytes(_length) AS b) t,
- LATERAL generate_series(0, _length - 1) g(i);
-$$;
-
-CREATE FUNCTION totp.generate_secret(hash TEXT DEFAULT 'sha1') RETURNS BYTEA AS $$
-BEGIN
- -- See https://tools.ietf.org/html/rfc4868#section-2.1.2
- -- The optimal key length for HMAC is the block size of the algorithm
- CASE
- WHEN hash = 'sha1' THEN RETURN totp.random_base32(20); -- = 160 bits
- WHEN hash = 'sha256' THEN RETURN totp.random_base32(32); -- = 256 bits
- WHEN hash = 'sha512' THEN RETURN totp.random_base32(64); -- = 512 bits
- ELSE
- RAISE EXCEPTION 'Unsupported hash algorithm for OTP (see RFC6238/4226).';
- RETURN NULL;
- END CASE;
-END;
-$$ LANGUAGE plpgsql VOLATILE;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/deploy/schemas/totp/procedures/urlencode.sql b/__fixtures__/stage/extensions/@pgpm/totp/deploy/schemas/totp/procedures/urlencode.sql
deleted file mode 100644
index 975f92549..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/deploy/schemas/totp/procedures/urlencode.sql
+++ /dev/null
@@ -1,43 +0,0 @@
--- Deploy schemas/totp/procedures/urlencode to pg
--- requires: schemas/totp/schema
-
--- https://stackoverflow.com/questions/10318014/javascript-encodeuri-like-function-in-postgresql/40762846
-BEGIN;
-CREATE FUNCTION totp.urlencode (in_str text)
- RETURNS text
- AS $$
-DECLARE
- _i int4;
- _temp varchar;
- _ascii int4;
- _result text := '';
-BEGIN
- FOR _i IN 1..length(in_str)
- LOOP
- _temp := substr(in_str, _i, 1);
- IF _temp ~ '[0-9a-zA-Z:/@._?#-]+' THEN
- _result := _result || _temp;
- ELSE
- _ascii := ascii(_temp);
- IF _ascii > x'07ff'::int4 THEN
- RAISE exception 'won''t deal with 3 (or more) byte sequences.';
- END IF;
- IF _ascii <= x'07f'::int4 THEN
- _temp := '%' || to_hex(_ascii);
- ELSE
- _temp := '%' || to_hex((_ascii & x'03f'::int4) + x'80'::int4);
- _ascii := _ascii >> 6;
- _temp := '%' || to_hex((_ascii & x'01f'::int4) + x'c0'::int4) || _temp;
- END IF;
- _result := _result || upper(_temp);
- END IF;
- END LOOP;
- RETURN _result;
-END;
-$$
-LANGUAGE 'plpgsql'
-STRICT IMMUTABLE
-;
-
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/deploy/schemas/totp/schema.sql b/__fixtures__/stage/extensions/@pgpm/totp/deploy/schemas/totp/schema.sql
deleted file mode 100644
index 49da21e51..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/deploy/schemas/totp/schema.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Deploy schemas/totp/schema to pg
-
-
-BEGIN;
-
-CREATE SCHEMA totp;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/jest.config.js b/__fixtures__/stage/extensions/@pgpm/totp/jest.config.js
deleted file mode 100644
index e20e7efb5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/jest.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @type {import('ts-jest').JestConfigWithTsJest} */
-module.exports = {
- preset: 'ts-jest',
- testEnvironment: 'node',
-
- // Match both __tests__ and colocated test files
- testMatch: ['**/?(*.)+(test|spec).{ts,tsx,js,jsx}'],
-
- // Ignore build artifacts and type declarations
- testPathIgnorePatterns: ['/dist/', '\\.d\\.ts$'],
- modulePathIgnorePatterns: ['/dist/'],
- watchPathIgnorePatterns: ['/dist/'],
-
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
-};
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/package.json b/__fixtures__/stage/extensions/@pgpm/totp/package.json
deleted file mode 100644
index f7653e3ad..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/package.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "name": "@pgpm/totp",
- "version": "0.15.2",
- "description": "Time-based One-Time Password (TOTP) authentication",
- "author": "Dan Lynch ",
- "contributors": [
- "Constructive "
- ],
- "keywords": [
- "postgresql",
- "pgpm",
- "totp",
- "2fa"
- ],
- "publishConfig": {
- "access": "public"
- },
- "scripts": {
- "bundle": "pgpm package",
- "test": "jest",
- "test:watch": "jest --watch"
- },
- "dependencies": {
- "@pgpm/base32": "0.15.2",
- "@pgpm/verify": "0.15.2"
- },
- "devDependencies": {
- "pgpm": "^1.0.0"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/constructive-io/pgpm-modules"
- },
- "homepage": "https://github.com/constructive-io/pgpm-modules",
- "bugs": {
- "url": "https://github.com/constructive-io/pgpm-modules/issues"
- }
-}
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/pgpm-totp.control b/__fixtures__/stage/extensions/@pgpm/totp/pgpm-totp.control
deleted file mode 100644
index c1304e0d9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/pgpm-totp.control
+++ /dev/null
@@ -1,8 +0,0 @@
-# pgpm-totp extension
-comment = 'pgpm-totp extension'
-default_version = '0.14.0'
-module_pathname = '$libdir/pgpm-totp'
-requires = 'pgcrypto,plpgsql,pgpm-base32,pgpm-verify'
-relocatable = false
-superuser = false
-
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/pgpm.plan b/__fixtures__/stage/extensions/@pgpm/totp/pgpm.plan
deleted file mode 100644
index 2958b3783..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/pgpm.plan
+++ /dev/null
@@ -1,8 +0,0 @@
-%syntax-version=1.0.0
-%project=pgpm-totp
-%uri=pgpm-totp
-
-schemas/totp/schema 2017-08-11T08:11:51Z skitch # add schemas/totp/schema
-schemas/totp/procedures/urlencode [schemas/totp/schema] 2017-08-11T08:11:51Z skitch # add schemas/totp/procedures/urlencode
-schemas/totp/procedures/generate_totp [schemas/totp/schema schemas/totp/procedures/urlencode] 2017-08-11T08:11:51Z skitch # add schemas/totp/procedures/generate_totp
-schemas/totp/procedures/random_base32 [schemas/totp/schema] 2017-08-11T08:11:51Z skitch # add schemas/totp/procedures/random_base32
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/revert/schemas/totp/procedures/generate_totp.sql b/__fixtures__/stage/extensions/@pgpm/totp/revert/schemas/totp/procedures/generate_totp.sql
deleted file mode 100644
index 10261e5ca..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/revert/schemas/totp/procedures/generate_totp.sql
+++ /dev/null
@@ -1,14 +0,0 @@
--- Revert schemas/totp/procedures/generate_totp from pg
-
-BEGIN;
-
-DROP FUNCTION totp.url;
-DROP FUNCTION totp.verify;
-DROP FUNCTION totp.timing_safe_equals(a text, b text);
-DROP FUNCTION totp.timing_safe_equals(a bytea, b bytea);
-DROP FUNCTION totp.generate;
-DROP FUNCTION totp.hotp;
-DROP FUNCTION totp.base32_to_hex;
-DROP FUNCTION totp.pad_secret;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/revert/schemas/totp/procedures/random_base32.sql b/__fixtures__/stage/extensions/@pgpm/totp/revert/schemas/totp/procedures/random_base32.sql
deleted file mode 100644
index 22fcac9aa..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/revert/schemas/totp/procedures/random_base32.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- Revert schemas/totp/procedures/random_base32 from pg
-
-BEGIN;
-
-DROP FUNCTION totp.generate_secret;
-DROP FUNCTION totp.random_base32;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/revert/schemas/totp/procedures/urlencode.sql b/__fixtures__/stage/extensions/@pgpm/totp/revert/schemas/totp/procedures/urlencode.sql
deleted file mode 100644
index 5fd2c85f2..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/revert/schemas/totp/procedures/urlencode.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/totp/procedures/urlencode from pg
-
-BEGIN;
-
-DROP FUNCTION totp.urlencode;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/revert/schemas/totp/schema.sql b/__fixtures__/stage/extensions/@pgpm/totp/revert/schemas/totp/schema.sql
deleted file mode 100644
index 7a3064017..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/revert/schemas/totp/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/totp/schema from pg
-
-BEGIN;
-
-DROP SCHEMA totp CASCADE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/sql/pgpm-totp--0.14.0.sql b/__fixtures__/stage/extensions/@pgpm/totp/sql/pgpm-totp--0.14.0.sql
deleted file mode 100644
index 3629a8aa7..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/sql/pgpm-totp--0.14.0.sql
+++ /dev/null
@@ -1,173 +0,0 @@
-\echo Use "CREATE EXTENSION pgpm-totp" to load this file. \quit
-CREATE SCHEMA totp;
-
-CREATE FUNCTION totp.urlencode(in_str text) RETURNS text AS $EOFCODE$
-DECLARE
- _i int4;
- _temp varchar;
- _ascii int4;
- _result text := '';
-BEGIN
- FOR _i IN 1..length(in_str)
- LOOP
- _temp := substr(in_str, _i, 1);
- IF _temp ~ '[0-9a-zA-Z:/@._?#-]+' THEN
- _result := _result || _temp;
- ELSE
- _ascii := ascii(_temp);
- IF _ascii > x'07ff'::int4 THEN
- RAISE exception 'won''t deal with 3 (or more) byte sequences.';
- END IF;
- IF _ascii <= x'07f'::int4 THEN
- _temp := '%' || to_hex(_ascii);
- ELSE
- _temp := '%' || to_hex((_ascii & x'03f'::int4) + x'80'::int4);
- _ascii := _ascii >> 6;
- _temp := '%' || to_hex((_ascii & x'01f'::int4) + x'c0'::int4) || _temp;
- END IF;
- _result := _result || upper(_temp);
- END IF;
- END LOOP;
- RETURN _result;
-END;
-$EOFCODE$ LANGUAGE plpgsql STRICT IMMUTABLE;
-
-CREATE FUNCTION totp.pad_secret(input bytea, len int) RETURNS bytea AS $EOFCODE$
-DECLARE
- output bytea;
- orig_length int = octet_length(input);
-BEGIN
- IF (orig_length = len) THEN
- RETURN input;
- END IF;
-
- -- create blank bytea size of new length
- output = lpad('', len, 'x')::bytea;
-
- FOR i IN 0 .. len-1 LOOP
- output = set_byte(output, i, get_byte(input, i % orig_length));
- END LOOP;
-
- RETURN output;
-END;
-$EOFCODE$ LANGUAGE plpgsql IMMUTABLE;
-
-CREATE FUNCTION totp.base32_to_hex(input text) RETURNS text AS $EOFCODE$
-DECLARE
- output text[];
- decoded text = base32.decode(input);
- len int = character_length(decoded);
- hx text;
-BEGIN
-
- FOR i IN 1 .. len LOOP
- hx = to_hex(ascii(substring(decoded from i for 1)))::text;
- IF (character_length(hx) = 1) THEN
- -- if it is odd number of digits, pad a 0 so it can later
- hx = '0' || hx;
- END IF;
- output = array_append(output, hx);
- END LOOP;
-
- RETURN array_to_string(output, '');
-END;
-$EOFCODE$ LANGUAGE plpgsql IMMUTABLE;
-
-CREATE FUNCTION totp.hotp(key bytea, c int, digits int DEFAULT 6, hash text DEFAULT 'sha1') RETURNS text AS $EOFCODE$
-DECLARE
- c BYTEA := '\x' || LPAD(TO_HEX(c), 16, '0');
- mac BYTEA := HMAC(c, key, hash);
- trunc_offset INT := GET_BYTE(mac, length(mac) - 1) % 16;
- result TEXT := SUBSTRING(SET_BIT(SUBSTRING(mac FROM 1 + trunc_offset FOR 4), 7, 0)::TEXT, 2)::BIT(32)::INT % (10 ^ digits)::INT;
-BEGIN
- RETURN LPAD(result, digits, '0');
-END;
-$EOFCODE$ LANGUAGE plpgsql IMMUTABLE;
-
-CREATE FUNCTION totp.generate(secret text, period int DEFAULT 30, digits int DEFAULT 6, time_from timestamptz DEFAULT now(), hash text DEFAULT 'sha1', encoding text DEFAULT 'base32', clock_offset int DEFAULT 0) RETURNS text AS $EOFCODE$
-DECLARE
- c int := FLOOR(EXTRACT(EPOCH FROM time_from) / period)::int + clock_offset;
- key bytea;
-BEGIN
-
- IF (encoding = 'base32') THEN
- key = ( '\x' || totp.base32_to_hex(secret) )::bytea;
- ELSE
- key = secret::bytea;
- END IF;
-
- RETURN totp.hotp(key, c, digits, hash);
-END;
-$EOFCODE$ LANGUAGE plpgsql STABLE;
-
-CREATE FUNCTION totp.timing_safe_equals(a bytea, b bytea) RETURNS boolean AS $EOFCODE$
-DECLARE
- la int := length(a);
- lb int := length(b);
- maxlen int := GREATEST(la, lb);
- i int;
- diff int := la # lb;
- ca int;
- cb int;
-BEGIN
- FOR i IN 0..(maxlen - 1) LOOP
- ca := CASE WHEN i < la THEN get_byte(a, i) ELSE 0 END;
- cb := CASE WHEN i < lb THEN get_byte(b, i) ELSE 0 END;
- diff := diff | (ca # cb);
- END LOOP;
- RETURN diff = 0;
-END;
-$EOFCODE$ LANGUAGE plpgsql IMMUTABLE STRICT;
-
-CREATE FUNCTION totp.timing_safe_equals(a text, b text) RETURNS boolean AS $EOFCODE$
--- Verify uses timing-safe equality to avoid leaking mismatch position via timing; do not use direct '=' here.
--- See HN discussion for background: https://news.ycombinator.com/item?id=26260667
-
- SELECT totp.timing_safe_equals(convert_to(a, 'UTF8'), convert_to(b, 'UTF8'));
-$EOFCODE$ LANGUAGE sql IMMUTABLE STRICT;
-
-CREATE FUNCTION totp.verify(secret text, check_totp text, period int DEFAULT 30, digits int DEFAULT 6, time_from timestamptz DEFAULT now(), hash text DEFAULT 'sha1', encoding text DEFAULT 'base32', clock_offset int DEFAULT 0) RETURNS boolean AS $EOFCODE$
- SELECT totp.timing_safe_equals(
- totp.generate(
- secret,
- period,
- digits,
- time_from,
- hash,
- encoding,
- clock_offset
- ),
- check_totp
- );
-$EOFCODE$ LANGUAGE sql;
-
-CREATE FUNCTION totp.url(email text, totp_secret text, totp_interval int, totp_issuer text) RETURNS text AS $EOFCODE$
- SELECT
- concat('otpauth://totp/', totp.urlencode (email), '?secret=', totp.urlencode (totp_secret), '&period=', totp.urlencode (totp_interval::text), '&issuer=', totp.urlencode (totp_issuer));
-$EOFCODE$ LANGUAGE sql STRICT IMMUTABLE;
-
-CREATE FUNCTION totp.random_base32(_length int DEFAULT 20) RETURNS text LANGUAGE sql AS $EOFCODE$
- SELECT
- string_agg(
- ('{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,2,3,4,5,6,7}'::text[])
- [ (get_byte(b, i) % 32) + 1 ],
- ''
- )
- FROM (SELECT gen_random_bytes(_length) AS b) t,
- LATERAL generate_series(0, _length - 1) g(i);
-$EOFCODE$;
-
-CREATE FUNCTION totp.generate_secret(hash text DEFAULT 'sha1') RETURNS bytea AS $EOFCODE$
-BEGIN
- -- See https://tools.ietf.org/html/rfc4868#section-2.1.2
- -- The optimal key length for HMAC is the block size of the algorithm
- CASE
- WHEN hash = 'sha1' THEN RETURN totp.random_base32(20); -- = 160 bits
- WHEN hash = 'sha256' THEN RETURN totp.random_base32(32); -- = 256 bits
- WHEN hash = 'sha512' THEN RETURN totp.random_base32(64); -- = 512 bits
- ELSE
- RAISE EXCEPTION 'Unsupported hash algorithm for OTP (see RFC6238/4226).';
- RETURN NULL;
- END CASE;
-END;
-$EOFCODE$ LANGUAGE plpgsql VOLATILE;
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/verify/schemas/totp/procedures/generate_totp.sql b/__fixtures__/stage/extensions/@pgpm/totp/verify/schemas/totp/procedures/generate_totp.sql
deleted file mode 100644
index 7038d4f6c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/verify/schemas/totp/procedures/generate_totp.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/totp/procedures/generate_totp on pg
-
-BEGIN;
-
-SELECT verify_function ('totp.generate');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/verify/schemas/totp/procedures/random_base32.sql b/__fixtures__/stage/extensions/@pgpm/totp/verify/schemas/totp/procedures/random_base32.sql
deleted file mode 100644
index e518b9ae8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/verify/schemas/totp/procedures/random_base32.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/totp/procedures/random_base32 on pg
-
-BEGIN;
-
-SELECT verify_function ('totp.random_base32');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/verify/schemas/totp/procedures/urlencode.sql b/__fixtures__/stage/extensions/@pgpm/totp/verify/schemas/totp/procedures/urlencode.sql
deleted file mode 100644
index 78097d071..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/verify/schemas/totp/procedures/urlencode.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/totp/procedures/urlencode on pg
-
-BEGIN;
-
-SELECT verify_function ('totp.urlencode');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/totp/verify/schemas/totp/schema.sql b/__fixtures__/stage/extensions/@pgpm/totp/verify/schemas/totp/schema.sql
deleted file mode 100644
index a26e1990c..000000000
--- a/__fixtures__/stage/extensions/@pgpm/totp/verify/schemas/totp/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/totp/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('totp');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/types/LICENSE b/__fixtures__/stage/extensions/@pgpm/types/LICENSE
deleted file mode 100644
index 7b18c9183..000000000
--- a/__fixtures__/stage/extensions/@pgpm/types/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2025 Dan Lynch
-Copyright (c) 2025 Constructive
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/__fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/schema.sql b/__fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/schema.sql
deleted file mode 100644
index f3de2d36f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/types/deploy/schemas/public/schema.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- Deploy schemas/public/schema to pg
-
diff --git a/__fixtures__/stage/extensions/@pgpm/types/jest.config.js b/__fixtures__/stage/extensions/@pgpm/types/jest.config.js
deleted file mode 100644
index e20e7efb5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/types/jest.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @type {import('ts-jest').JestConfigWithTsJest} */
-module.exports = {
- preset: 'ts-jest',
- testEnvironment: 'node',
-
- // Match both __tests__ and colocated test files
- testMatch: ['**/?(*.)+(test|spec).{ts,tsx,js,jsx}'],
-
- // Ignore build artifacts and type declarations
- testPathIgnorePatterns: ['/dist/', '\\.d\\.ts$'],
- modulePathIgnorePatterns: ['/dist/'],
- watchPathIgnorePatterns: ['/dist/'],
-
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
-};
diff --git a/__fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/schema.sql b/__fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/schema.sql
deleted file mode 100644
index 4225c16a5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/types/revert/schemas/public/schema.sql
+++ /dev/null
@@ -1 +0,0 @@
--- Revert schemas/public/schema from pg
diff --git a/__fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/schema.sql b/__fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/schema.sql
deleted file mode 100644
index 176ef8086..000000000
--- a/__fixtures__/stage/extensions/@pgpm/types/verify/schemas/public/schema.sql
+++ /dev/null
@@ -1 +0,0 @@
--- Verify schemas/public/schema on pg
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/LICENSE b/__fixtures__/stage/extensions/@pgpm/utils/LICENSE
deleted file mode 100644
index 7b18c9183..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2025 Dan Lynch
-Copyright (c) 2025 Constructive
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/Makefile b/__fixtures__/stage/extensions/@pgpm/utils/Makefile
deleted file mode 100644
index 42f611ed2..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-EXTENSION = pgpm-utils
-DATA = sql/pgpm-utils--0.14.0.sql
-
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/README.md b/__fixtures__/stage/extensions/@pgpm/utils/README.md
deleted file mode 100644
index e331c80d9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/README.md
+++ /dev/null
@@ -1,412 +0,0 @@
-# @pgpm/utils
-
-
-
-
-
-
-
-
-
-
-
-
-
-General utility functions for PostgreSQL modules
-
-## Overview
-
-`@pgpm/utils` provides essential utility functions and helper procedures used across pgpm modules. This package includes functions for error handling, data masking, and singleton pattern enforcement. These utilities form the foundation for building robust PostgreSQL modules with consistent error handling and data protection patterns.
-
-## Features
-
-- **Error Handling**: Throw custom exceptions with detailed messages
-- **Data Masking**: Mask sensitive data with padding characters
-- **Singleton Enforcement**: Ensure tables contain exactly one row
-- **Reusable Utilities**: Common functions used across multiple modules
-- **Pure plpgsql**: No external dependencies required
-
-## Installation
-
-If you have `pgpm` installed:
-
-```bash
-pgpm install @pgpm/utils
-pgpm deploy
-```
-
-This is a quick way to get started. The sections below provide more detailed installation options.
-
-### Prerequisites
-
-```bash
-# Install pgpm CLI
-npm install -g pgpm
-
-# Start local Postgres (via Docker) and export env vars
-pgpm docker start
-eval "$(pgpm env)"
-```
-
-> **Tip:** Already running Postgres? Skip the Docker step and just export your `PG*` environment variables.
-
-### **Add to an Existing Package**
-
-```bash
-# 1. Install the package
-pgpm install @pgpm/utils
-
-# 2. Deploy locally
-pgpm deploy
-```
-
-### **Add to a New Project**
-
-```bash
-# 1. Create a workspace
-pgpm init workspace
-
-# 2. Create your first module
-cd my-workspace
-pgpm init
-
-# 3. Install a package
-cd packages/my-module
-pgpm install @pgpm/utils
-
-# 4. Deploy everything
-pgpm deploy --createdb --database mydb1
-```
-
-## Core Functions
-
-### utils.throw(message text)
-
-Throw a custom exception with a specific message.
-
-**Signature:**
-```sql
-utils.throw(message text) RETURNS void
-```
-
-**Usage:**
-```sql
--- Throw an error
-SELECT utils.throw('Invalid user ID provided');
--- ERROR: Invalid user ID provided
-
--- Use in conditional logic
-DO $$
-BEGIN
- IF NOT EXISTS (SELECT 1 FROM users WHERE id = 'some-uuid') THEN
- PERFORM utils.throw('User not found');
- END IF;
-END $$;
-
--- Use in functions
-CREATE FUNCTION validate_email(email text)
-RETURNS boolean AS $$
-BEGIN
- IF email !~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$' THEN
- PERFORM utils.throw('Invalid email format: ' || email);
- END IF;
- RETURN true;
-END;
-$$ LANGUAGE plpgsql;
-```
-
-### utils.mask_pad(value text, visible_chars int, pad_char text)
-
-Mask sensitive data by showing only a specified number of characters and padding the rest.
-
-**Signature:**
-```sql
-utils.mask_pad(
- value text,
- visible_chars int DEFAULT 4,
- pad_char text DEFAULT '*'
-) RETURNS text
-```
-
-**Parameters:**
-- `value`: The text to mask
-- `visible_chars`: Number of characters to show at the end (default: 4)
-- `pad_char`: Character to use for masking (default: '*')
-
-**Usage:**
-```sql
--- Mask credit card number
-SELECT utils.mask_pad('4532123456789012', 4, '*');
--- ************9012
-
--- Mask email
-SELECT utils.mask_pad('user@example.com', 6, 'x');
--- xxxxxxxxple.com
-
--- Mask phone number
-SELECT utils.mask_pad('+1-555-123-4567', 4, '#');
--- ###########4567
-
--- Use in queries
-SELECT
- user_id,
- utils.mask_pad(credit_card, 4, '*') as masked_card,
- utils.mask_pad(ssn, 4, 'X') as masked_ssn
-FROM sensitive_data;
-```
-
-### utils.ensure_singleton()
-
-Trigger function to ensure a table contains exactly one row.
-
-**Signature:**
-```sql
-utils.ensure_singleton() RETURNS trigger
-```
-
-**Usage:**
-```sql
--- Create a settings table that should only have one row
-CREATE TABLE app_settings (
- id int PRIMARY KEY DEFAULT 1,
- app_name text NOT NULL,
- max_users int DEFAULT 100,
- maintenance_mode boolean DEFAULT false,
- updated_at timestamptz DEFAULT now(),
- CONSTRAINT singleton_check CHECK (id = 1)
-);
-
--- Add trigger to enforce singleton pattern
-CREATE TRIGGER ensure_singleton_trigger
- BEFORE INSERT OR UPDATE ON app_settings
- FOR EACH ROW
- EXECUTE FUNCTION utils.ensure_singleton();
-
--- First insert works
-INSERT INTO app_settings (app_name) VALUES ('My App');
-
--- Second insert fails
-INSERT INTO app_settings (app_name) VALUES ('Another App');
--- ERROR: Table app_settings can only contain one row
-
--- Updates work fine
-UPDATE app_settings SET max_users = 200;
-```
-
-## Usage Examples
-
-### Error Handling in Business Logic
-
-Use `utils.throw()` for consistent error handling:
-
-```sql
-CREATE FUNCTION process_payment(
- user_id uuid,
- amount numeric
-) RETURNS void AS $$
-DECLARE
- user_balance numeric;
-BEGIN
- -- Check if user exists
- IF NOT EXISTS (SELECT 1 FROM users WHERE id = user_id) THEN
- PERFORM utils.throw('User not found: ' || user_id);
- END IF;
-
- -- Check balance
- SELECT balance INTO user_balance FROM accounts WHERE user_id = user_id;
-
- IF user_balance IS NULL THEN
- PERFORM utils.throw('Account not found for user: ' || user_id);
- END IF;
-
- IF user_balance < amount THEN
- PERFORM utils.throw('Insufficient funds. Balance: ' || user_balance || ', Required: ' || amount);
- END IF;
-
- -- Process payment
- UPDATE accounts SET balance = balance - amount WHERE user_id = user_id;
-END;
-$$ LANGUAGE plpgsql;
-```
-
-### Data Masking for Privacy
-
-Protect sensitive data in logs and reports:
-
-```sql
--- Create view with masked data for reporting
-CREATE VIEW user_report AS
-SELECT
- id,
- username,
- utils.mask_pad(email, 8, '*') as email,
- utils.mask_pad(phone, 4, 'X') as phone,
- utils.mask_pad(credit_card, 4, '*') as credit_card,
- created_at
-FROM users;
-
--- Audit log with masked sensitive data
-CREATE FUNCTION log_user_access(user_id uuid)
-RETURNS void AS $$
-DECLARE
- user_email text;
-BEGIN
- SELECT email INTO user_email FROM users WHERE id = user_id;
-
- INSERT INTO access_logs (user_id, masked_email, accessed_at)
- VALUES (user_id, utils.mask_pad(user_email, 6, '*'), now());
-END;
-$$ LANGUAGE plpgsql;
-```
-
-### Singleton Configuration Tables
-
-Ensure configuration tables have exactly one row:
-
-```sql
--- System configuration table
-CREATE TABLE system_config (
- id int PRIMARY KEY DEFAULT 1,
- site_name text NOT NULL,
- admin_email text NOT NULL,
- max_upload_size_mb int DEFAULT 10,
- enable_registration boolean DEFAULT true,
- created_at timestamptz DEFAULT now(),
- updated_at timestamptz DEFAULT now(),
- CONSTRAINT singleton_check CHECK (id = 1)
-);
-
-CREATE TRIGGER ensure_singleton_trigger
- BEFORE INSERT OR UPDATE ON system_config
- FOR EACH ROW
- EXECUTE FUNCTION utils.ensure_singleton();
-
--- Initialize with default values
-INSERT INTO system_config (site_name, admin_email)
-VALUES ('My Application', 'admin@example.com');
-
--- Helper function to get config
-CREATE FUNCTION get_config()
-RETURNS system_config AS $$
- SELECT * FROM system_config LIMIT 1;
-$$ LANGUAGE sql STABLE;
-
--- Helper function to update config
-CREATE FUNCTION update_config(
- p_site_name text DEFAULT NULL,
- p_admin_email text DEFAULT NULL,
- p_max_upload_size_mb int DEFAULT NULL
-) RETURNS void AS $$
-BEGIN
- UPDATE system_config SET
- site_name = COALESCE(p_site_name, site_name),
- admin_email = COALESCE(p_admin_email, admin_email),
- max_upload_size_mb = COALESCE(p_max_upload_size_mb, max_upload_size_mb),
- updated_at = now();
-END;
-$$ LANGUAGE plpgsql;
-```
-
-## Integration Examples
-
-### With @pgpm/encrypted-secrets
-
-Combine error handling with secrets management:
-
-```sql
-CREATE FUNCTION get_api_key(service_name text)
-RETURNS text AS $$
-DECLARE
- api_key text;
-BEGIN
- api_key := encrypted_secrets.secrets_getter(
- current_user_id(),
- service_name
- );
-
- IF api_key IS NULL THEN
- PERFORM utils.throw('API key not found for service: ' || service_name);
- END IF;
-
- RETURN api_key;
-END;
-$$ LANGUAGE plpgsql;
-```
-
-### With @pgpm/jobs
-
-Use error handling in job processing:
-
-```sql
-CREATE FUNCTION process_job_with_validation(job_id int)
-RETURNS void AS $$
-DECLARE
- job_data jsonb;
-BEGIN
- SELECT payload INTO job_data FROM app_jobs.jobs WHERE id = job_id;
-
- IF job_data IS NULL THEN
- PERFORM utils.throw('Job not found: ' || job_id);
- END IF;
-
- IF NOT (job_data ? 'email') THEN
- PERFORM utils.throw('Job payload missing required field: email');
- END IF;
-
- -- Process job
- -- ...
-END;
-$$ LANGUAGE plpgsql;
-```
-
-### With @pgpm/achievements
-
-Mask user data in achievement displays:
-
-```sql
-CREATE VIEW public_achievements AS
-SELECT
- utils.mask_pad(u.email, 8, '*') as masked_email,
- a.achievement_name,
- a.count,
- a.achieved_at
-FROM user_achievements a
-JOIN users u ON u.id = a.user_id
-WHERE a.achieved_at IS NOT NULL;
-```
-
-## Use Cases
-
-- **Error Handling**: Consistent exception throwing across extensions
-- **Data Privacy**: Mask sensitive information in logs and reports
-- **Configuration Management**: Singleton tables for application settings
-- **Validation**: Input validation with clear error messages
-- **Audit Logging**: Log events with masked sensitive data
-- **API Responses**: Return masked data to clients
-- **Development**: Shared utilities for extension development
-
-## Testing
-
-```bash
-pnpm test
-```
-
-## Dependencies
-
-- `@pgpm/verify`: Verification utilities
-
-## Related Tooling
-
-* [pgpm](https://github.com/constructive-io/constructive/tree/main/pgpm/pgpm): **🖥️ PostgreSQL Package Manager** for modular Postgres development. Works with database workspaces, scaffolding, migrations, seeding, and installing database packages.
-* [pgsql-test](https://github.com/constructive-io/constructive/tree/main/postgres/pgsql-test): **📊 Isolated testing environments** with per-test transaction rollbacks—ideal for integration tests, complex migrations, and RLS simulation.
-* [supabase-test](https://github.com/constructive-io/constructive/tree/main/postgres/supabase-test): **🧪 Supabase-native test harness** preconfigured for the local Supabase stack—per-test rollbacks, JWT/role context helpers, and CI/GitHub Actions ready.
-* [graphile-test](https://github.com/constructive-io/constructive/tree/main/graphile/graphile-test): **🔐 Authentication mocking** for Graphile-focused test helpers and emulating row-level security contexts.
-* [pgsql-parser](https://github.com/constructive-io/pgsql-parser): **🔄 SQL conversion engine** that interprets and converts PostgreSQL syntax.
-* [libpg-query-node](https://github.com/constructive-io/libpg-query-node): **🌉 Node.js bindings** for `libpg_query`, converting SQL into parse trees.
-* [pg-proto-parser](https://github.com/constructive-io/pg-proto-parser): **📦 Protobuf parser** for parsing PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
-
-## Disclaimer
-
-AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED "AS IS", AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND.
-
-No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value.
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/__tests__/__snapshots__/utils.test.ts.snap b/__fixtures__/stage/extensions/@pgpm/utils/__tests__/__snapshots__/utils.test.ts.snap
deleted file mode 100644
index 417a56df8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/__tests__/__snapshots__/utils.test.ts.snap
+++ /dev/null
@@ -1,9 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`bitmask less 1`] = `"01"`;
-
-exports[`bitmask more 1`] = `"00000000000000000101"`;
-
-exports[`less 1`] = `"01"`;
-
-exports[`more 1`] = `"00000000000000000101"`;
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/__tests__/utils.test.ts b/__fixtures__/stage/extensions/@pgpm/utils/__tests__/utils.test.ts
deleted file mode 100644
index f5c69afb5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/__tests__/utils.test.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-import { getConnections, PgTestClient } from 'pgsql-test';
-
-let pg: PgTestClient;
-let teardown: () => Promise;
-
-beforeAll(async () => {
- ({ pg, teardown } = await getConnections());
-});
-
-afterAll(async () => {
- await teardown();
-});
-
-it('more', async () => {
- const { mask_pad } = await pg.one(
- `SELECT utils.mask_pad($1, $2) AS mask_pad`,
- ['101', 20]
- );
- expect(mask_pad).toMatchSnapshot();
-});
-
-it('less', async () => {
- const { mask_pad } = await pg.one(
- `SELECT utils.mask_pad($1, $2) AS mask_pad`,
- ['101', 2]
- );
- expect(mask_pad).toMatchSnapshot();
-});
-
-describe('bitmask', () => {
- it('more', async () => {
- const { bitmask_pad } = await pg.one(
- `SELECT utils.bitmask_pad($1::varbit, $2) AS bitmask_pad`,
- ['101', 20]
- );
- expect(bitmask_pad).toMatchSnapshot();
- });
-
- it('less', async () => {
- const { bitmask_pad } = await pg.one(
- `SELECT utils.bitmask_pad($1::varbit, $2) AS bitmask_pad`,
- ['101', 2]
- );
- expect(bitmask_pad).toMatchSnapshot();
- });
-});
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/deploy/schemas/utils/procedures/ensure_singleton.sql b/__fixtures__/stage/extensions/@pgpm/utils/deploy/schemas/utils/procedures/ensure_singleton.sql
deleted file mode 100644
index 909dda916..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/deploy/schemas/utils/procedures/ensure_singleton.sql
+++ /dev/null
@@ -1,29 +0,0 @@
--- Deploy schemas/utils/procedures/ensure_singleton to pg
-
--- requires: schemas/utils/schema
-
-BEGIN;
-
-CREATE FUNCTION utils.ensure_singleton()
- RETURNS TRIGGER
-AS $$
-DECLARE
- sql text;
- num int;
-BEGIN
-
- sql = format('SELECT count(1) FROM %1I.%2I;', TG_TABLE_SCHEMA, TG_TABLE_NAME);
-
- EXECUTE sql
- INTO num;
-
- IF (num > 0) THEN
- RAISE EXCEPTION 'SINGLETON_TABLE';
- END IF;
-
- RETURN NEW;
-END;
-$$
-LANGUAGE 'plpgsql';
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/deploy/schemas/utils/procedures/mask_pad.sql b/__fixtures__/stage/extensions/@pgpm/utils/deploy/schemas/utils/procedures/mask_pad.sql
deleted file mode 100644
index c990d57c6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/deploy/schemas/utils/procedures/mask_pad.sql
+++ /dev/null
@@ -1,33 +0,0 @@
--- Deploy schemas/utils/procedures/mask_pad to pg
--- requires: schemas/utils/schema
-BEGIN;
-
-CREATE FUNCTION utils.mask_pad (bitstr text, bitlen int, pad text DEFAULT '0')
- RETURNS text
- AS $$
- SELECT
- (
- CASE WHEN length(bitstr) > bitlen THEN
- substring(bitstr FROM (length(bitstr) - (bitlen - 1))
- FOR bitlen)
- ELSE
- lpad(bitstr, bitlen, pad)
- END)
-$$
-LANGUAGE 'sql';
-
-CREATE FUNCTION utils.bitmask_pad (bitstr bit varying, bitlen int, pad text DEFAULT '0')
- RETURNS bit varying
- AS $$
- SELECT
- (
- CASE WHEN length(bitstr) > bitlen THEN
- substring(bitstr::text FROM (length(bitstr) - (bitlen - 1))
- FOR bitlen)
- ELSE
- lpad(bitstr::text, bitlen, pad)
- END)::varbit;
-$$
-LANGUAGE 'sql';
-COMMIT;
-
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/deploy/schemas/utils/procedures/throw.sql b/__fixtures__/stage/extensions/@pgpm/utils/deploy/schemas/utils/procedures/throw.sql
deleted file mode 100644
index 890241c13..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/deploy/schemas/utils/procedures/throw.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- Deploy schemas/utils/procedures/throw to pg
-
--- requires: schemas/utils/schema
-
-BEGIN;
-
-CREATE FUNCTION utils.throw()
- RETURNS TRIGGER
-AS $$
-BEGIN
-
- IF (TG_NARGS = 1) THEN
- RAISE EXCEPTION '% (%)', TG_ARGV[0], TG_TABLE_NAME;
- END IF;
-
- IF (TG_NARGS > 1) THEN
- RAISE EXCEPTION '% (%, %)', TG_ARGV[0], TG_TABLE_NAME, TG_ARGV[1];
- END IF;
-
- RAISE EXCEPTION 'THROWN_ERROR (%)', TG_TABLE_NAME;
-
-END;
-$$
-LANGUAGE 'plpgsql';
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/deploy/schemas/utils/schema.sql b/__fixtures__/stage/extensions/@pgpm/utils/deploy/schemas/utils/schema.sql
deleted file mode 100644
index a12f6f9c9..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/deploy/schemas/utils/schema.sql
+++ /dev/null
@@ -1,14 +0,0 @@
--- Deploy schemas/utils/schema to pg
-
-
-BEGIN;
-
-CREATE SCHEMA utils;
-
-GRANT USAGE ON SCHEMA utils TO public;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA utils
-GRANT EXECUTE ON FUNCTIONS
-TO public;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/jest.config.js b/__fixtures__/stage/extensions/@pgpm/utils/jest.config.js
deleted file mode 100644
index e20e7efb5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/jest.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @type {import('ts-jest').JestConfigWithTsJest} */
-module.exports = {
- preset: 'ts-jest',
- testEnvironment: 'node',
-
- // Match both __tests__ and colocated test files
- testMatch: ['**/?(*.)+(test|spec).{ts,tsx,js,jsx}'],
-
- // Ignore build artifacts and type declarations
- testPathIgnorePatterns: ['/dist/', '\\.d\\.ts$'],
- modulePathIgnorePatterns: ['/dist/'],
- watchPathIgnorePatterns: ['/dist/'],
-
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
-};
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/package.json b/__fixtures__/stage/extensions/@pgpm/utils/package.json
deleted file mode 100644
index 4cae08a0b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/package.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "name": "@pgpm/utils",
- "version": "0.15.2",
- "description": "General utility functions for PostgreSQL extensions",
- "author": "Dan Lynch ",
- "contributors": [
- "Constructive "
- ],
- "keywords": [
- "postgresql",
- "pgpm",
- "utilities",
- "functions"
- ],
- "publishConfig": {
- "access": "public"
- },
- "scripts": {
- "bundle": "pgpm package",
- "test": "jest",
- "test:watch": "jest --watch"
- },
- "dependencies": {
- "@pgpm/verify": "0.15.2"
- },
- "devDependencies": {
- "pgpm": "^1.0.0"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/constructive-io/pgpm-modules"
- },
- "homepage": "https://github.com/constructive-io/pgpm-modules",
- "bugs": {
- "url": "https://github.com/constructive-io/pgpm-modules/issues"
- }
-}
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/pgpm-utils.control b/__fixtures__/stage/extensions/@pgpm/utils/pgpm-utils.control
deleted file mode 100644
index e2960e4a8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/pgpm-utils.control
+++ /dev/null
@@ -1,8 +0,0 @@
-# pgpm-utils extension
-comment = 'pgpm-utils extension'
-default_version = '0.14.0'
-module_pathname = '$libdir/pgpm-utils'
-requires = 'plpgsql,pgpm-verify'
-relocatable = false
-superuser = false
-
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/pgpm.plan b/__fixtures__/stage/extensions/@pgpm/utils/pgpm.plan
deleted file mode 100644
index e2f68d36b..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/pgpm.plan
+++ /dev/null
@@ -1,8 +0,0 @@
-%syntax-version=1.0.0
-%project=pgpm-utils
-%uri=pgpm-utils
-
-schemas/utils/schema 2017-08-11T08:11:51Z skitch # add schemas/utils/schema
-schemas/utils/procedures/mask_pad [schemas/utils/schema] 2017-08-11T08:11:51Z skitch # add schemas/utils/procedures/mask_pad
-schemas/utils/procedures/throw [schemas/utils/schema] 2017-08-11T08:11:51Z skitch # add schemas/utils/procedures/throw
-schemas/utils/procedures/ensure_singleton [schemas/utils/schema] 2021-04-25T11:50:15Z Dan Lynch # add schemas/utils/procedures/ensure_singleton
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/revert/schemas/utils/procedures/ensure_singleton.sql b/__fixtures__/stage/extensions/@pgpm/utils/revert/schemas/utils/procedures/ensure_singleton.sql
deleted file mode 100644
index a5cf6c490..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/revert/schemas/utils/procedures/ensure_singleton.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/utils/procedures/ensure_singleton from pg
-
-BEGIN;
-
-DROP FUNCTION utils.ensure_singleton;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/revert/schemas/utils/procedures/mask_pad.sql b/__fixtures__/stage/extensions/@pgpm/utils/revert/schemas/utils/procedures/mask_pad.sql
deleted file mode 100644
index cecca273d..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/revert/schemas/utils/procedures/mask_pad.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/utils/procedures/mask_pad from pg
-
-BEGIN;
-
-DROP FUNCTION utils.mask_pad;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/revert/schemas/utils/procedures/throw.sql b/__fixtures__/stage/extensions/@pgpm/utils/revert/schemas/utils/procedures/throw.sql
deleted file mode 100644
index fd7642a52..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/revert/schemas/utils/procedures/throw.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/utils/procedures/throw from pg
-
-BEGIN;
-
-DROP FUNCTION utils.throw;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/revert/schemas/utils/schema.sql b/__fixtures__/stage/extensions/@pgpm/utils/revert/schemas/utils/schema.sql
deleted file mode 100644
index cdef93820..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/revert/schemas/utils/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Revert schemas/utils/schema from pg
-
-BEGIN;
-
-DROP SCHEMA utils CASCADE;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/sql/pgpm-utils--0.14.0.sql b/__fixtures__/stage/extensions/@pgpm/utils/sql/pgpm-utils--0.14.0.sql
deleted file mode 100644
index 6cd70b603..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/sql/pgpm-utils--0.14.0.sql
+++ /dev/null
@@ -1,64 +0,0 @@
-\echo Use "CREATE EXTENSION pgpm-utils" to load this file. \quit
-CREATE SCHEMA utils;
-
-GRANT USAGE ON SCHEMA utils TO PUBLIC;
-
-ALTER DEFAULT PRIVILEGES IN SCHEMA utils
- GRANT EXECUTE ON FUNCTIONS TO PUBLIC;
-
-CREATE FUNCTION utils.mask_pad(bitstr text, bitlen int, pad text DEFAULT '0') RETURNS text AS $EOFCODE$
- SELECT
- (
- CASE WHEN length(bitstr) > bitlen THEN
- substring(bitstr FROM (length(bitstr) - (bitlen - 1))
- FOR bitlen)
- ELSE
- lpad(bitstr, bitlen, pad)
- END)
-$EOFCODE$ LANGUAGE sql;
-
-CREATE FUNCTION utils.bitmask_pad(bitstr pg_catalog.varbit, bitlen int, pad text DEFAULT '0') RETURNS pg_catalog.varbit AS $EOFCODE$
- SELECT
- (
- CASE WHEN length(bitstr) > bitlen THEN
- substring(bitstr::text FROM (length(bitstr) - (bitlen - 1))
- FOR bitlen)
- ELSE
- lpad(bitstr::text, bitlen, pad)
- END)::varbit;
-$EOFCODE$ LANGUAGE sql;
-
-CREATE FUNCTION utils.throw() RETURNS trigger AS $EOFCODE$
-BEGIN
-
- IF (TG_NARGS = 1) THEN
- RAISE EXCEPTION '% (%)', TG_ARGV[0], TG_TABLE_NAME;
- END IF;
-
- IF (TG_NARGS > 1) THEN
- RAISE EXCEPTION '% (%, %)', TG_ARGV[0], TG_TABLE_NAME, TG_ARGV[1];
- END IF;
-
- RAISE EXCEPTION 'THROWN_ERROR (%)', TG_TABLE_NAME;
-
-END;
-$EOFCODE$ LANGUAGE plpgsql;
-
-CREATE FUNCTION utils.ensure_singleton() RETURNS trigger AS $EOFCODE$
-DECLARE
- sql text;
- num int;
-BEGIN
-
- sql = format('SELECT count(1) FROM %1I.%2I;', TG_TABLE_SCHEMA, TG_TABLE_NAME);
-
- EXECUTE sql
- INTO num;
-
- IF (num > 0) THEN
- RAISE EXCEPTION 'SINGLETON_TABLE';
- END IF;
-
- RETURN NEW;
-END;
-$EOFCODE$ LANGUAGE plpgsql;
\ No newline at end of file
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/verify/schemas/utils/procedures/ensure_singleton.sql b/__fixtures__/stage/extensions/@pgpm/utils/verify/schemas/utils/procedures/ensure_singleton.sql
deleted file mode 100644
index d079b5670..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/verify/schemas/utils/procedures/ensure_singleton.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/utils/procedures/ensure_singleton on pg
-
-BEGIN;
-
-SELECT verify_function ('utils.ensure_singleton');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/verify/schemas/utils/procedures/mask_pad.sql b/__fixtures__/stage/extensions/@pgpm/utils/verify/schemas/utils/procedures/mask_pad.sql
deleted file mode 100644
index d77848ee6..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/verify/schemas/utils/procedures/mask_pad.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/utils/procedures/mask_pad on pg
-
-BEGIN;
-
-SELECT verify_function ('utils.mask_pad');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/verify/schemas/utils/procedures/throw.sql b/__fixtures__/stage/extensions/@pgpm/utils/verify/schemas/utils/procedures/throw.sql
deleted file mode 100644
index 2773912af..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/verify/schemas/utils/procedures/throw.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/utils/procedures/throw on pg
-
-BEGIN;
-
-SELECT verify_function ('utils.throw');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/utils/verify/schemas/utils/schema.sql b/__fixtures__/stage/extensions/@pgpm/utils/verify/schemas/utils/schema.sql
deleted file mode 100644
index c475519ce..000000000
--- a/__fixtures__/stage/extensions/@pgpm/utils/verify/schemas/utils/schema.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Verify schemas/utils/schema on pg
-
-BEGIN;
-
-SELECT verify_schema ('utils');
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/LICENSE b/__fixtures__/stage/extensions/@pgpm/uuid/LICENSE
deleted file mode 100644
index 7b18c9183..000000000
--- a/__fixtures__/stage/extensions/@pgpm/uuid/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2025 Dan Lynch
-Copyright (c) 2025 Constructive
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/jest.config.js b/__fixtures__/stage/extensions/@pgpm/uuid/jest.config.js
deleted file mode 100644
index e20e7efb5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/uuid/jest.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @type {import('ts-jest').JestConfigWithTsJest} */
-module.exports = {
- preset: 'ts-jest',
- testEnvironment: 'node',
-
- // Match both __tests__ and colocated test files
- testMatch: ['**/?(*.)+(test|spec).{ts,tsx,js,jsx}'],
-
- // Ignore build artifacts and type declarations
- testPathIgnorePatterns: ['/dist/', '\\.d\\.ts$'],
- modulePathIgnorePatterns: ['/dist/'],
- watchPathIgnorePatterns: ['/dist/'],
-
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
-};
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/revert/extension/defaults.sql b/__fixtures__/stage/extensions/@pgpm/uuid/revert/extension/defaults.sql
deleted file mode 100644
index a5f303fe8..000000000
--- a/__fixtures__/stage/extensions/@pgpm/uuid/revert/extension/defaults.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Revert extension/defaults from pg
-
-BEGIN;
-
-COMMIT;
diff --git a/__fixtures__/stage/extensions/@pgpm/uuid/verify/extension/defaults.sql b/__fixtures__/stage/extensions/@pgpm/uuid/verify/extension/defaults.sql
deleted file mode 100644
index 87245abb4..000000000
--- a/__fixtures__/stage/extensions/@pgpm/uuid/verify/extension/defaults.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Verify extension/defaults on pg
-
-BEGIN;
-
-ROLLBACK;
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/LICENSE b/__fixtures__/stage/extensions/@pgpm/verify/LICENSE
deleted file mode 100644
index 7b18c9183..000000000
--- a/__fixtures__/stage/extensions/@pgpm/verify/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2025 Dan Lynch
-Copyright (c) 2025 Constructive
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/__fixtures__/stage/extensions/@pgpm/verify/jest.config.js b/__fixtures__/stage/extensions/@pgpm/verify/jest.config.js
deleted file mode 100644
index e20e7efb5..000000000
--- a/__fixtures__/stage/extensions/@pgpm/verify/jest.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @type {import('ts-jest').JestConfigWithTsJest} */
-module.exports = {
- preset: 'ts-jest',
- testEnvironment: 'node',
-
- // Match both __tests__ and colocated test files
- testMatch: ['**/?(*.)+(test|spec).{ts,tsx,js,jsx}'],
-
- // Ignore build artifacts and type declarations
- testPathIgnorePatterns: ['/dist/', '\\.d\\.ts$'],
- modulePathIgnorePatterns: ['/dist/'],
- watchPathIgnorePatterns: ['/dist/'],
-
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
-};
diff --git a/pgpm/cli/__tests__/cli-deploy-stage-unique-names.test.ts b/pgpm/cli/__tests__/cli-deploy-stage-unique-names.test.ts
index 312b24ee6..2c5a68a27 100644
--- a/pgpm/cli/__tests__/cli-deploy-stage-unique-names.test.ts
+++ b/pgpm/cli/__tests__/cli-deploy-stage-unique-names.test.ts
@@ -13,7 +13,7 @@ describe('CLIDeployTestFixture Migrate', () => {
let testDb: any;
beforeAll(async () => {
- fixture = new CLIDeployTestFixture('stage');
+ fixture = new CLIDeployTestFixture('sqitch', 'simple-w-exts');
testDb = await fixture.setupTestDatabase();
});
diff --git a/pgpm/core/__tests__/core/stage-unique-names-control.test.ts b/pgpm/core/__tests__/core/stage-unique-names-control.test.ts
index 6633078b2..1e148fa35 100644
--- a/pgpm/core/__tests__/core/stage-unique-names-control.test.ts
+++ b/pgpm/core/__tests__/core/stage-unique-names-control.test.ts
@@ -10,7 +10,7 @@ describe('stage fixture control/metadata generation (unique-names)', () => {
let project: PgpmPackage;
beforeAll(() => {
- fixture = new TestFixture('stage');
+ fixture = new TestFixture('sqitch', 'simple-w-exts');
dst = fixture.tempFixtureDir;
project = new PgpmPackage(dst);
});
diff --git a/pgpm/core/__tests__/files/plan/stage-unique-names-plan.test.ts b/pgpm/core/__tests__/files/plan/stage-unique-names-plan.test.ts
index 77be03763..be42d8a74 100644
--- a/pgpm/core/__tests__/files/plan/stage-unique-names-plan.test.ts
+++ b/pgpm/core/__tests__/files/plan/stage-unique-names-plan.test.ts
@@ -4,7 +4,7 @@ describe('stage fixture plan generation (unique-names)', () => {
let fixture: TestFixture;
beforeAll(() => {
- fixture = new TestFixture('stage');
+ fixture = new TestFixture('sqitch', 'simple-w-exts');
});
afterAll(() => {
diff --git a/pgpm/core/__tests__/migration/stage-deployment-with-plan.test.ts b/pgpm/core/__tests__/migration/stage-deployment-with-plan.test.ts
index 5b2ff7519..4a35042f6 100644
--- a/pgpm/core/__tests__/migration/stage-deployment-with-plan.test.ts
+++ b/pgpm/core/__tests__/migration/stage-deployment-with-plan.test.ts
@@ -6,7 +6,7 @@ describe('Staging Fixture Deployment With Pre-Generated Plan', () => {
let db: TestDatabase;
beforeAll(async () => {
- fixture = new CoreDeployTestFixture('stage');
+ fixture = new CoreDeployTestFixture('sqitch', 'simple-w-exts');
});
afterAll(async () => {
@@ -24,7 +24,7 @@ describe('Staging Fixture Deployment With Pre-Generated Plan', () => {
const mod = fixture.getModuleProject([], 'unique-names');
mod.writeModulePlan({ includePackages: true, includeTags: true });
- await fixture.deployModule('unique-names', db.name, ['stage']);
+ await fixture.deployModule('unique-names', db.name, ['sqitch', 'simple-w-exts']);
expect(await db.exists('schema', 'unique_names')).toBe(true);
expect(await db.exists('table', 'unique_names.words')).toBe(true);
@@ -37,7 +37,7 @@ describe('Staging Fixture Deployment With Pre-Generated Plan', () => {
const mod = fixture.getModuleProject([], 'unique-names');
mod.writeModulePlan({ includePackages: true, includeTags: false });
- await fixture.deployModule('unique-names', db.name, ['stage']);
+ await fixture.deployModule('unique-names', db.name, ['sqitch', 'simple-w-exts']);
expect(await db.exists('schema', 'unique_names')).toBe(true);
expect(await db.exists('table', 'unique_names.words')).toBe(true);
@@ -48,7 +48,7 @@ describe('Staging Fixture Deployment With Pre-Generated Plan', () => {
test('deploys unique-names after generating plan (includePackages=false, includeTags=false)', async () => {
const mod = fixture.getModuleProject([], 'unique-names');
mod.writeModulePlan({ includePackages: false, includeTags: false });
- await fixture.deployModule('unique-names', db.name, ['stage']);
+ await fixture.deployModule('unique-names', db.name, ['sqitch', 'simple-w-exts']);
expect(await db.exists('schema', 'unique_names')).toBe(true);
expect(await db.exists('table', 'unique_names.words')).toBe(true);
const deployedChanges = await db.getDeployedChanges();
diff --git a/pgpm/core/__tests__/migration/stage-deployment.test.ts b/pgpm/core/__tests__/migration/stage-deployment.test.ts
index b746bc710..c4372b032 100644
--- a/pgpm/core/__tests__/migration/stage-deployment.test.ts
+++ b/pgpm/core/__tests__/migration/stage-deployment.test.ts
@@ -6,7 +6,7 @@ describe('Staging Fixture Deployment Tests', () => {
let db: TestDatabase;
beforeAll(async () => {
- fixture = new CoreDeployTestFixture('stage');
+ fixture = new CoreDeployTestFixture('sqitch', 'simple-w-exts');
});
afterAll(async () => {
@@ -21,7 +21,7 @@ describe('Staging Fixture Deployment Tests', () => {
});
test('deploys unique-names package successfully', async () => {
- await fixture.deployModule('unique-names', db.name, ['stage']);
+ await fixture.deployModule('unique-names', db.name, ['sqitch', 'simple-w-exts']);
expect(await db.exists('schema', 'unique_names')).toBe(true);
expect(await db.exists('table', 'unique_names.words')).toBe(true);
diff --git a/pgpm/core/__tests__/projects/stage-workspace.test.ts b/pgpm/core/__tests__/projects/stage-workspace.test.ts
index 3cb970c5d..6a0ea9a4f 100644
--- a/pgpm/core/__tests__/projects/stage-workspace.test.ts
+++ b/pgpm/core/__tests__/projects/stage-workspace.test.ts
@@ -9,7 +9,7 @@ describe('Staging Fixture Tests', () => {
let db: TestDatabase;
beforeAll(() => {
- fixture = new TestFixture('stage');
+ fixture = new TestFixture('sqitch', 'simple-w-exts');
});
afterAll(() => {
@@ -66,7 +66,7 @@ describe('Staging Fixture Tests', () => {
expect(moduleNames.some(name => name.includes('pgpm-uuid'))).toBe(true);
expect(moduleNames.some(name => name.includes('pgpm-base32'))).toBe(true);
- expect(moduleNames.some(name => name.includes('metaschema'))).toBe(true);
+ expect(moduleNames.some(name => name.includes('pgpm-types'))).toBe(true);
modules.forEach(mod => {
expect(mod.isInModule()).toBe(true);
diff --git a/pgpm/core/__tests__/resolution/dependency-resolution-internal-tags.test.ts b/pgpm/core/__tests__/resolution/dependency-resolution-internal-tags.test.ts
index 67b042d05..97f21e9d3 100644
--- a/pgpm/core/__tests__/resolution/dependency-resolution-internal-tags.test.ts
+++ b/pgpm/core/__tests__/resolution/dependency-resolution-internal-tags.test.ts
@@ -42,7 +42,7 @@ describe('stage fixture dependency resolution - internal tags', () => {
let stageFixture: TestFixture;
beforeAll(() => {
- stageFixture = new TestFixture('stage');
+ stageFixture = new TestFixture('sqitch', 'simple-w-exts');
});
afterAll(() => {
diff --git a/pgpm/core/__tests__/resolution/dependency-resolution-resolved-tags.test.ts b/pgpm/core/__tests__/resolution/dependency-resolution-resolved-tags.test.ts
index ae692b66a..c4799ba0a 100644
--- a/pgpm/core/__tests__/resolution/dependency-resolution-resolved-tags.test.ts
+++ b/pgpm/core/__tests__/resolution/dependency-resolution-resolved-tags.test.ts
@@ -42,7 +42,7 @@ describe('stage fixture dependency resolution - resolved tags', () => {
let stageFixture: TestFixture;
beforeAll(() => {
- stageFixture = new TestFixture('stage');
+ stageFixture = new TestFixture('sqitch', 'simple-w-exts');
});
afterAll(() => {
From 48cb597d6e4979c2400bd77e7dd9d66cca9e9b24 Mon Sep 17 00:00:00 2001
From: zetazzz
Date: Mon, 5 Jan 2026 20:01:55 +0700
Subject: [PATCH 2/4] delete stage
---
.../@pgpm/metaschema-modules/Makefile | 6 -
.../metaschema-modules.control | 7 -
.../@pgpm/metaschema-modules/pgpm.plan | 29 -
.../sql/metaschema-modules--0.14.0.sql | 1015 -----------------
.../@pgpm/metaschema-schema/Makefile | 6 -
.../metaschema-schema.control | 7 -
.../@pgpm/metaschema-schema/pgpm.plan | 41 -
.../sql/metaschema-schema--0.14.0.sql | 870 --------------
8 files changed, 1981 deletions(-)
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/Makefile
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/metaschema-modules.control
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/pgpm.plan
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-modules/sql/metaschema-modules--0.14.0.sql
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/Makefile
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/metaschema-schema.control
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/pgpm.plan
delete mode 100644 __fixtures__/stage/extensions/@pgpm/metaschema-schema/sql/metaschema-schema--0.14.0.sql
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/Makefile b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/Makefile
deleted file mode 100644
index 217794a6f..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-EXTENSION = metaschema-modules
-DATA = sql/metaschema-modules--0.14.0.sql
-
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/metaschema-modules.control b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/metaschema-modules.control
deleted file mode 100644
index a2b057b63..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/metaschema-modules.control
+++ /dev/null
@@ -1,7 +0,0 @@
-# metaschema-modules extension
-comment = 'metaschema-modules extension'
-default_version = '0.14.0'
-module_pathname = '$libdir/metaschema-modules'
-requires = 'plpgsql,metaschema-schema,pgpm-verify'
-relocatable = false
-superuser = false
diff --git a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/pgpm.plan b/__fixtures__/stage/extensions/@pgpm/metaschema-modules/pgpm.plan
deleted file mode 100644
index bc046a705..000000000
--- a/__fixtures__/stage/extensions/@pgpm/metaschema-modules/pgpm.plan
+++ /dev/null
@@ -1,29 +0,0 @@
-%syntax-version=1.0.0
-%project=metaschema-modules
-%uri=metaschema-modules
-
-schemas/meta_private/schema [db-meta-schema:schemas/meta_public/tables/site_themes/table] 2017-08-11T08:11:51Z skitch # add schemas/meta_private/schema
-schemas/meta_public/schema 2017-08-11T08:11:51Z skitch # add schemas/meta_public/schema
-schemas/meta_public/tables/apis/table [schemas/meta_public/schema] 2017-08-11T08:11:51Z skitch # add schemas/meta_public/tables/apis/table
-schemas/meta_public/tables/connected_accounts_module/table [schemas/meta_public/schema] 2017-08-11T08:11:51Z skitch # add schemas/meta_public/tables/connected_accounts_module/table
-schemas/meta_public/tables/crypto_addresses_module/table [schemas/meta_public/schema] 2017-08-11T08:11:51Z skitch # add schemas/meta_public/tables/crypto_addresses_module/table
-schemas/meta_public/tables/crypto_auth_module/table [schemas/meta_public/schema] 2017-08-11T08:11:51Z skitch # add schemas/meta_public/tables/crypto_auth_module/table
-schemas/meta_public/tables/default_ids_module/table [schemas/meta_public/schema] 2017-08-11T08:11:51Z skitch