diff --git a/README.md b/README.md index 08a623c1..15523b33 100644 --- a/README.md +++ b/README.md @@ -137,6 +137,7 @@ Each module includes its own README with detailed documentation. See individual - [`@pgpm/encrypted-secrets-table`](https://www.npmjs.com/package/@pgpm/encrypted-secrets-table) - Table-based encrypted secrets ### Utilities +- [`@pgpm/errors`](https://www.npmjs.com/package/@pgpm/errors) - Canonical structured error raising (`errors.raise_error`) - [`@pgpm/utils`](https://www.npmjs.com/package/@pgpm/utils) - General utility functions - [`@pgpm/verify`](https://www.npmjs.com/package/@pgpm/verify) - Verification utilities (used by other modules) - [`@pgpm/inflection`](https://www.npmjs.com/package/@pgpm/inflection) - String inflection utilities diff --git a/packages/achievements/__tests__/achievements.test.ts b/packages/achievements/__tests__/achievements.test.ts index 6bc1b904..73cefefb 100644 --- a/packages/achievements/__tests__/achievements.test.ts +++ b/packages/achievements/__tests__/achievements.test.ts @@ -59,7 +59,7 @@ afterEach(async () => { }); it('newbie', async () => { - const steps = [ + const steps = [ 'agree_to_terms', 'accept_cookies', 'accept_privacy', @@ -98,7 +98,7 @@ it('newbie', async () => { }); it('advanced', async () => { - const steps = [ + const steps = [ 'agree_to_terms', 'accept_cookies', 'accept_privacy', @@ -139,7 +139,7 @@ it('advanced', async () => { }); it('advanced part II', async () => { - const partII = [['apply_for_verifier'], ['create_action', 2]]; + const partII = [['apply_for_verifier'], ['create_action', 2]]; for (const [name, required_count = 1] of partII) { await pg.any( @@ -190,7 +190,7 @@ it('advanced part II', async () => { }); it('advanced part III', async () => { - const partIII = [ + const partIII = [ ['apply_for_verifier'], ['approved_for_verifier'], ['create_action', 2] diff --git a/packages/app-scope/deploy/schemas/app_scope/procedures/routing_tables.sql b/packages/app-scope/deploy/schemas/app_scope/procedures/routing_tables.sql index ec21e870..70cfb452 100644 --- a/packages/app-scope/deploy/schemas/app_scope/procedures/routing_tables.sql +++ b/packages/app-scope/deploy/schemas/app_scope/procedures/routing_tables.sql @@ -40,8 +40,6 @@ CREATE FUNCTION app_scope.routing_tables( apis_table text, api_schemas_schema text, api_schemas_table text, - api_modules_schema text, - api_modules_table text, api_settings_schema text, api_settings_table text, cors_settings_schema text, @@ -77,7 +75,7 @@ BEGIN RAISE EXCEPTION 'ROUTING_TABLES_SCOPE_REQUIRED: scope is required (no default scope)'; END IF; - SELECT am.apis_table_id, am.api_schemas_table_id, am.api_modules_table_id, + SELECT am.apis_table_id, am.api_schemas_table_id, am.api_settings_table_id, am.cors_settings_table_id INTO api_surface FROM app_scope.frames( @@ -93,20 +91,16 @@ BEGIN IF FOUND AND api_surface.apis_table_id IS NOT NULL AND api_surface.apis_table_id <> uuid_nil() THEN SELECT apis_s.schema_name, apis_t.name, api_schemas_s.schema_name, api_schemas_t.name, - api_modules_s.schema_name, api_modules_t.name, api_settings_s.schema_name, api_settings_t.name, cors_settings_s.schema_name, cors_settings_t.name INTO apis_schema, apis_table, api_schemas_schema, api_schemas_table, - api_modules_schema, api_modules_table, api_settings_schema, api_settings_table, cors_settings_schema, cors_settings_table FROM metaschema_public.table apis_t JOIN metaschema_public.schema apis_s ON apis_s.id = apis_t.schema_id JOIN metaschema_public.table api_schemas_t ON api_schemas_t.id = api_surface.api_schemas_table_id JOIN metaschema_public.schema api_schemas_s ON api_schemas_s.id = api_schemas_t.schema_id - JOIN metaschema_public.table api_modules_t ON api_modules_t.id = api_surface.api_modules_table_id - JOIN metaschema_public.schema api_modules_s ON api_modules_s.id = api_modules_t.schema_id JOIN metaschema_public.table api_settings_t ON api_settings_t.id = api_surface.api_settings_table_id JOIN metaschema_public.schema api_settings_s ON api_settings_s.id = api_settings_t.schema_id JOIN metaschema_public.table cors_settings_t ON cors_settings_t.id = api_surface.cors_settings_table_id diff --git a/packages/app-scope/sql/pgpm-app-scope--0.34.0.bundle.tar.gz b/packages/app-scope/sql/pgpm-app-scope--0.34.0.bundle.tar.gz index 555d2285..3e61140f 100644 Binary files a/packages/app-scope/sql/pgpm-app-scope--0.34.0.bundle.tar.gz and b/packages/app-scope/sql/pgpm-app-scope--0.34.0.bundle.tar.gz differ diff --git a/packages/app-scope/sql/pgpm-app-scope--0.34.0.sql b/packages/app-scope/sql/pgpm-app-scope--0.34.0.sql index b7f3d12d..af455a3a 100644 --- a/packages/app-scope/sql/pgpm-app-scope--0.34.0.sql +++ b/packages/app-scope/sql/pgpm-app-scope--0.34.0.sql @@ -357,8 +357,6 @@ CREATE FUNCTION app_scope.routing_tables( apis_table text, api_schemas_schema text, api_schemas_table text, - api_modules_schema text, - api_modules_table text, api_settings_schema text, api_settings_table text, cors_settings_schema text, @@ -394,7 +392,7 @@ BEGIN RAISE EXCEPTION 'ROUTING_TABLES_SCOPE_REQUIRED: scope is required (no default scope)'; END IF; - SELECT am.apis_table_id, am.api_schemas_table_id, am.api_modules_table_id, + SELECT am.apis_table_id, am.api_schemas_table_id, am.api_settings_table_id, am.cors_settings_table_id INTO api_surface FROM app_scope.frames( @@ -410,20 +408,16 @@ BEGIN IF FOUND AND api_surface.apis_table_id IS NOT NULL AND api_surface.apis_table_id <> uuid_nil() THEN SELECT apis_s.schema_name, apis_t.name, api_schemas_s.schema_name, api_schemas_t.name, - api_modules_s.schema_name, api_modules_t.name, api_settings_s.schema_name, api_settings_t.name, cors_settings_s.schema_name, cors_settings_t.name INTO apis_schema, apis_table, api_schemas_schema, api_schemas_table, - api_modules_schema, api_modules_table, api_settings_schema, api_settings_table, cors_settings_schema, cors_settings_table FROM metaschema_public.table apis_t JOIN metaschema_public.schema apis_s ON apis_s.id = apis_t.schema_id JOIN metaschema_public.table api_schemas_t ON api_schemas_t.id = api_surface.api_schemas_table_id JOIN metaschema_public.schema api_schemas_s ON api_schemas_s.id = api_schemas_t.schema_id - JOIN metaschema_public.table api_modules_t ON api_modules_t.id = api_surface.api_modules_table_id - JOIN metaschema_public.schema api_modules_s ON api_modules_s.id = api_modules_t.schema_id JOIN metaschema_public.table api_settings_t ON api_settings_t.id = api_surface.api_settings_table_id JOIN metaschema_public.schema api_settings_s ON api_settings_s.id = api_settings_t.schema_id JOIN metaschema_public.table cors_settings_t ON cors_settings_t.id = api_surface.cors_settings_table_id diff --git a/packages/base32/__tests__/base32.decode.test.ts b/packages/base32/__tests__/base32.decode.test.ts index 13d30b24..879b6c0f 100644 --- a/packages/base32/__tests__/base32.decode.test.ts +++ b/packages/base32/__tests__/base32.decode.test.ts @@ -14,7 +14,7 @@ afterAll(async () => { it('base32_to_decimal', async () => { - const { base32_to_decimal } = await pg.one( + const { base32_to_decimal } = await pg.one( `SELECT base32.base32_to_decimal($1::text) AS base32_to_decimal`, ['INQXI==='] ); @@ -22,7 +22,7 @@ it('base32_to_decimal', async () => { }); it('decimal_to_chunks', async () => { - const { decimal_to_chunks } = await pg.one( + const { decimal_to_chunks } = await pg.one( `SELECT base32.decimal_to_chunks($1::text[]) AS decimal_to_chunks`, [['8', '13', '16', '23', '8', '=', '=', '=']] ); @@ -39,7 +39,7 @@ it('decimal_to_chunks', async () => { }); it('decode', async () => { - const { decode } = await pg.one( + const { decode } = await pg.one( `SELECT base32.decode($1::text) AS decode`, ['INQXI'] ); @@ -47,7 +47,7 @@ it('decode', async () => { }); it('zero_fill', async () => { - const { zero_fill } = await pg.one( + const { zero_fill } = await pg.one( `SELECT base32.zero_fill($1::int, $2::int) AS zero_fill`, [300, 2] ); @@ -55,7 +55,7 @@ it('zero_fill', async () => { }); it('zero_fill (-)', async () => { - const { zero_fill } = await pg.one( + const { zero_fill } = await pg.one( `SELECT base32.zero_fill($1::int, $2::int) AS zero_fill`, [-300, 2] ); @@ -63,7 +63,7 @@ it('zero_fill (-)', async () => { }); it('zero_fill (0)', async () => { - const { zero_fill } = await pg.one( + const { zero_fill } = await pg.one( `SELECT base32.zero_fill($1::int, $2::int) AS zero_fill`, [-300, 0] ); @@ -73,7 +73,7 @@ it('zero_fill (0)', async () => { cases( 'base32.decode cases', async (opts: { name: string; result: string }) => { - const { decode } = await pg.one( + const { decode } = await pg.one( `SELECT base32.decode($1::text) AS decode`, [opts.name] ); diff --git a/packages/base32/__tests__/base32.encode.test.ts b/packages/base32/__tests__/base32.encode.test.ts index c807f535..25a928b5 100644 --- a/packages/base32/__tests__/base32.encode.test.ts +++ b/packages/base32/__tests__/base32.encode.test.ts @@ -118,7 +118,7 @@ it('to_base32', async () => { cases( 'base32.encode', async (opts: { name: string; result: string }) => { - const { encode } = await pg.one( + const { encode } = await pg.one( `SELECT base32.encode($1::text) AS encode`, [opts.name] ); diff --git a/packages/database-jobs/deploy/schemas/app_jobs/procedures/add_job.sql b/packages/database-jobs/deploy/schemas/app_jobs/procedures/add_job.sql index 31f21741..dbcc6a87 100644 --- a/packages/database-jobs/deploy/schemas/app_jobs/procedures/add_job.sql +++ b/packages/database-jobs/deploy/schemas/app_jobs/procedures/add_job.sql @@ -32,9 +32,9 @@ DECLARE BEGIN -- db_id defaults to the session's database claim; only callers that act on -- behalf of a different database (e.g. platform-owned births) pass it - -- explicitly. Every job is owned by exactly one database — a claim-less - -- session with no explicit db_id fails the jobs.database_id NOT NULL - -- constraint rather than producing an unattributable job. + -- explicitly. Every job is owned by exactly one database, so a claim-less + -- session with no explicit db_id is rejected by the default expression rather + -- than producing an unattributable job. v_database_id := db_id; v_actor_id := jwt_public.current_user_id(); diff --git a/packages/database-jobs/sql/pgpm-database-jobs--0.34.0.bundle.tar.gz b/packages/database-jobs/sql/pgpm-database-jobs--0.34.0.bundle.tar.gz index 8c1758ef..64020075 100644 Binary files a/packages/database-jobs/sql/pgpm-database-jobs--0.34.0.bundle.tar.gz and b/packages/database-jobs/sql/pgpm-database-jobs--0.34.0.bundle.tar.gz differ diff --git a/packages/database-jobs/sql/pgpm-database-jobs--0.34.0.sql b/packages/database-jobs/sql/pgpm-database-jobs--0.34.0.sql index 446cb498..05d2fae4 100644 --- a/packages/database-jobs/sql/pgpm-database-jobs--0.34.0.sql +++ b/packages/database-jobs/sql/pgpm-database-jobs--0.34.0.sql @@ -939,9 +939,9 @@ DECLARE BEGIN -- db_id defaults to the session's database claim; only callers that act on -- behalf of a different database (e.g. platform-owned births) pass it - -- explicitly. Every job is owned by exactly one database — a claim-less - -- session with no explicit db_id fails the jobs.database_id NOT NULL - -- constraint rather than producing an unattributable job. + -- explicitly. Every job is owned by exactly one database, so a claim-less + -- session with no explicit db_id is rejected by the default expression rather + -- than producing an unattributable job. v_database_id := db_id; v_actor_id := jwt_public.current_user_id(); diff --git a/packages/errors/Makefile b/packages/errors/Makefile new file mode 100644 index 00000000..d8a5215f --- /dev/null +++ b/packages/errors/Makefile @@ -0,0 +1,6 @@ +EXTENSION = errors +DATA = sql/errors--0.34.0.sql + +PG_CONFIG = pg_config +PGXS := $(shell $(PG_CONFIG) --pgxs) +include $(PGXS) diff --git a/packages/errors/README.md b/packages/errors/README.md new file mode 100644 index 00000000..26df3f2e --- /dev/null +++ b/packages/errors/README.md @@ -0,0 +1,29 @@ +# @pgpm/errors + +Canonical structured error raising for constructive-db. + +Exposes a single hard-coded runtime helper, `errors.raise_error`, so every +application error is thrown in one consistent, machine-readable shape instead of +bare `RAISE EXCEPTION` strings. + +```sql +PERFORM errors.raise_error( + 'ACCOUNT_EXISTS', + jsonb_build_object('email', v_email), + 'public' +); +``` + +This raises an exception whose: + +- **MESSAGE** is the bare code (`ACCOUNT_EXISTS`) — message-scanning clients keep working; +- **DETAIL** is a JSON payload `{ "code", "context", "class" }` — the machine-readable + contract consumed by `@constructive-io/errors` on the server/client. Raw `context` + values survive to the client untouched (no server-side English interpolation), which + is what enables i18n on dynamic errors; +- **ERRCODE** is `P0001` (the semantic code rides in `DETAIL`, not SQLSTATE). + +`class` is `'public'` (safe to show end users) or `'internal'` (developer/invariant +error, masked in production). + +No dynamic SQL: this is a plain static function, not a generated one. diff --git a/packages/errors/deploy/schemas/errors/procedures/raise_error.sql b/packages/errors/deploy/schemas/errors/procedures/raise_error.sql new file mode 100644 index 00000000..85926759 --- /dev/null +++ b/packages/errors/deploy/schemas/errors/procedures/raise_error.sql @@ -0,0 +1,31 @@ +-- Deploy schemas/errors/procedures/raise_error to pg + +-- requires: schemas/errors/schema + +BEGIN; + +-- Canonical error raiser. Every application error should funnel through this so +-- clients receive one consistent, machine-readable shape: +-- MESSAGE = code (bare code; message-scanning clients keep working) +-- DETAIL = { code, context, class } (the machine-readable contract) +-- ERRCODE = P0001 (semantic code rides in DETAIL, not SQLSTATE) +-- Raw context values travel untouched (no server-side interpolation), enabling +-- i18n on dynamic errors. class is 'public' (user-facing) or 'internal' (masked). +CREATE FUNCTION errors.raise_error( + code text, + context jsonb DEFAULT '{}'::jsonb, + error_class text DEFAULT 'internal' +) RETURNS void AS $$ +BEGIN + RAISE EXCEPTION USING + ERRCODE = 'P0001', + MESSAGE = code, + DETAIL = jsonb_build_object( + 'code', code, + 'context', COALESCE(context, '{}'::jsonb), + 'class', error_class + )::text; +END; +$$ LANGUAGE plpgsql; + +COMMIT; diff --git a/packages/errors/deploy/schemas/errors/schema.sql b/packages/errors/deploy/schemas/errors/schema.sql new file mode 100644 index 00000000..e10a6aeb --- /dev/null +++ b/packages/errors/deploy/schemas/errors/schema.sql @@ -0,0 +1,14 @@ +-- Deploy schemas/errors/schema to pg + +BEGIN; + +CREATE SCHEMA errors; + +GRANT USAGE ON SCHEMA errors +TO public; + +ALTER DEFAULT PRIVILEGES IN SCHEMA errors +GRANT EXECUTE ON FUNCTIONS +TO public; + +COMMIT; diff --git a/packages/errors/errors.control b/packages/errors/errors.control new file mode 100644 index 00000000..75bffbc4 --- /dev/null +++ b/packages/errors/errors.control @@ -0,0 +1,7 @@ +# errors extension +comment = 'Canonical structured error raising for constructive-db' +default_version = '0.34.0' +module_pathname = '$libdir/errors' +requires = 'plpgsql' +relocatable = false +superuser = false diff --git a/packages/errors/package.json b/packages/errors/package.json new file mode 100644 index 00000000..6bede696 --- /dev/null +++ b/packages/errors/package.json @@ -0,0 +1,33 @@ +{ + "name": "@pgpm/errors", + "version": "0.34.0", + "description": "Canonical structured error raising for PostgreSQL (errors.raise_error)", + "author": "Dan Lynch ", + "contributors": [ + "Constructive " + ], + "keywords": [ + "postgresql", + "pgpm", + "errors" + ], + "publishConfig": { + "access": "public" + }, + "scripts": { + "bundle": "pgpm package", + "test": "jest", + "test:watch": "jest --watch" + }, + "devDependencies": { + "pgpm": "^5" + }, + "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/packages/errors/pgpm.plan b/packages/errors/pgpm.plan new file mode 100644 index 00000000..ef46c15f --- /dev/null +++ b/packages/errors/pgpm.plan @@ -0,0 +1,6 @@ +%syntax-version=1.0.0 +%project=errors +%uri=errors + +schemas/errors/schema 2026-07-22T00:00:00Z devin # add schemas/errors/schema +schemas/errors/procedures/raise_error [schemas/errors/schema] 2026-07-22T00:00:00Z devin # add schemas/errors/procedures/raise_error diff --git a/packages/errors/revert/schemas/errors/procedures/raise_error.sql b/packages/errors/revert/schemas/errors/procedures/raise_error.sql new file mode 100644 index 00000000..8c16ff41 --- /dev/null +++ b/packages/errors/revert/schemas/errors/procedures/raise_error.sql @@ -0,0 +1,7 @@ +-- Revert schemas/errors/procedures/raise_error from pg + +BEGIN; + +DROP FUNCTION errors.raise_error(text, jsonb, text); + +COMMIT; diff --git a/packages/errors/revert/schemas/errors/schema.sql b/packages/errors/revert/schemas/errors/schema.sql new file mode 100644 index 00000000..bf5cf1eb --- /dev/null +++ b/packages/errors/revert/schemas/errors/schema.sql @@ -0,0 +1,7 @@ +-- Revert schemas/errors/schema from pg + +BEGIN; + +DROP SCHEMA errors; + +COMMIT; diff --git a/packages/errors/sql/errors--0.34.0.bundle.tar.gz b/packages/errors/sql/errors--0.34.0.bundle.tar.gz new file mode 100644 index 00000000..094f7c16 Binary files /dev/null and b/packages/errors/sql/errors--0.34.0.bundle.tar.gz differ diff --git a/packages/errors/sql/errors--0.34.0.sql b/packages/errors/sql/errors--0.34.0.sql new file mode 100644 index 00000000..a6b37a47 --- /dev/null +++ b/packages/errors/sql/errors--0.34.0.sql @@ -0,0 +1,24 @@ +\echo Use "CREATE EXTENSION errors" to load this file. \quit +CREATE SCHEMA errors; + +GRANT USAGE ON SCHEMA errors TO PUBLIC; + +ALTER DEFAULT PRIVILEGES IN SCHEMA errors + GRANT EXECUTE ON FUNCTIONS TO PUBLIC; + +CREATE FUNCTION errors.raise_error( + code text, + context jsonb DEFAULT '{}'::jsonb, + error_class text DEFAULT 'internal' +) RETURNS void AS $EOFCODE$ +BEGIN + RAISE EXCEPTION USING + ERRCODE = 'P0001', + MESSAGE = code, + DETAIL = jsonb_build_object( + 'code', code, + 'context', COALESCE(context, '{}'::jsonb), + 'class', error_class + )::text; +END; +$EOFCODE$ LANGUAGE plpgsql; \ No newline at end of file diff --git a/packages/errors/verify/schemas/errors/procedures/raise_error.sql b/packages/errors/verify/schemas/errors/procedures/raise_error.sql new file mode 100644 index 00000000..e010b8f5 --- /dev/null +++ b/packages/errors/verify/schemas/errors/procedures/raise_error.sql @@ -0,0 +1,18 @@ +-- Verify schemas/errors/procedures/raise_error on pg + +BEGIN; + +DO $$ +BEGIN + ASSERT ( + SELECT EXISTS ( + SELECT 1 + FROM pg_proc p + JOIN pg_namespace n ON n.oid = p.pronamespace + WHERE n.nspname = 'errors' + AND p.proname = 'raise_error' + ) + ), 'function errors.raise_error does not exist'; +END $$; + +ROLLBACK; diff --git a/packages/errors/verify/schemas/errors/schema.sql b/packages/errors/verify/schemas/errors/schema.sql new file mode 100644 index 00000000..4812da85 --- /dev/null +++ b/packages/errors/verify/schemas/errors/schema.sql @@ -0,0 +1,14 @@ +-- Verify schemas/errors/schema on pg + +BEGIN; + +DO $$ +BEGIN + ASSERT ( + SELECT EXISTS ( + SELECT 1 FROM pg_namespace WHERE nspname = 'errors' + ) + ), 'schema errors does not exist'; +END $$; + +ROLLBACK; diff --git a/packages/function-resolution/__tests__/catalog-fastpath.test.ts b/packages/function-resolution/__tests__/catalog-fastpath.test.ts index 4f299f34..d321bb1c 100644 --- a/packages/function-resolution/__tests__/catalog-fastpath.test.ts +++ b/packages/function-resolution/__tests__/catalog-fastpath.test.ts @@ -195,8 +195,10 @@ describe('function-resolution catalog fast-path', () => { (database_id, schema_id, functions_table_id, domains_table_id, apis_table_id, sites_table_id, namespaces_table_id, resources_table_id, resource_definitions_table_id, - resource_installations_table_id, apps_table_id, buckets_table_id, scope) - VALUES ($1, $2, $3, $3, $3, $3, $3, $3, $3, $3, $3, $3, 'app')`, + resource_installations_table_id, apps_table_id, buckets_table_id, + sites_web_config_table_id, sites_error_pages_table_id, + sites_app_links_table_id, sites_deep_links_table_id, scope) + VALUES ($1, $2, $3, $3, $3, $3, $3, $3, $3, $3, $3, $3, $3, $3, $3, $3, 'app')`, [TENANT_DB, catSchema.id, catTable.id] ); diff --git a/packages/function-resolution/__tests__/resolution.test.ts b/packages/function-resolution/__tests__/resolution.test.ts index 499e6ebf..ca2beb3e 100644 --- a/packages/function-resolution/__tests__/resolution.test.ts +++ b/packages/function-resolution/__tests__/resolution.test.ts @@ -152,8 +152,10 @@ describe('function-resolution end-to-end (format-based, no AST)', () => { (database_id, schema_id, functions_table_id, domains_table_id, apis_table_id, sites_table_id, namespaces_table_id, resources_table_id, resource_definitions_table_id, - resource_installations_table_id, apps_table_id, buckets_table_id, scope) - VALUES ($1, $2, $3, $3, $3, $3, $3, $3, $3, $3, $3, $3, 'app')`, + resource_installations_table_id, apps_table_id, buckets_table_id, + sites_web_config_table_id, sites_error_pages_table_id, + sites_app_links_table_id, sites_deep_links_table_id, scope) + VALUES ($1, $2, $3, $3, $3, $3, $3, $3, $3, $3, $3, $3, $3, $3, $3, $3, 'app')`, [TENANT_DB, catSchema.id, catTable.id] ); }); diff --git a/packages/function-resolution/jest.config.js b/packages/function-resolution/jest.config.js index 4108cf46..98f3a0e7 100644 --- a/packages/function-resolution/jest.config.js +++ b/packages/function-resolution/jest.config.js @@ -3,6 +3,7 @@ module.exports = { forceExit: true, preset: 'ts-jest', testEnvironment: 'node', + testTimeout: 60000, // Match both __tests__ and colocated test files testMatch: ['**/?(*.)+(test|spec).{ts,tsx,js,jsx}'], diff --git a/packages/inflection/__tests__/inflection.test.ts b/packages/inflection/__tests__/inflection.test.ts index 88a88df3..5ca1ac25 100644 --- a/packages/inflection/__tests__/inflection.test.ts +++ b/packages/inflection/__tests__/inflection.test.ts @@ -1,5 +1,5 @@ -import cases from 'jest-in-case'; import { getConnections, PgTestClient } from 'pgsql-test'; +import cases from 'jest-in-case'; let pg: PgTestClient; let teardown: () => Promise; diff --git a/packages/jwt-claims/__tests__/jwt.test.ts b/packages/jwt-claims/__tests__/jwt.test.ts index 6e3ed656..ee5da714 100644 --- a/packages/jwt-claims/__tests__/jwt.test.ts +++ b/packages/jwt-claims/__tests__/jwt.test.ts @@ -52,3 +52,24 @@ it('get values', async () => { expect({ database_id }).toMatchSnapshot(); expect({ user_id }).toMatchSnapshot(); }); + +it('current_database_id returns the claim when it is set', async () => { + await pg.any(`BEGIN`); + await pg.any(`SELECT set_config('jwt.claims.database_id', $1, true)`, [ + jwt.database_id + ]); + const { database_id } = await pg.one( + `select jwt_private.current_database_id() as database_id` + ); + await pg.any(`ROLLBACK`); + + expect(database_id).toEqual(jwt.database_id); +}); + +it('current_database_id raises DATABASE_CLAIM_REQUIRED when the claim is absent', async () => { + await pg.any(`BEGIN`); + await expect( + pg.one(`select jwt_private.current_database_id()`) + ).rejects.toThrow('DATABASE_CLAIM_REQUIRED'); + await pg.any(`ROLLBACK`); +}); diff --git a/packages/jwt-claims/deploy/schemas/jwt_private/procedures/current_api_id.sql b/packages/jwt-claims/deploy/schemas/jwt_private/procedures/current_api_id.sql index a60f9412..5f426bd7 100644 --- a/packages/jwt-claims/deploy/schemas/jwt_private/procedures/current_api_id.sql +++ b/packages/jwt-claims/deploy/schemas/jwt_private/procedures/current_api_id.sql @@ -5,30 +5,17 @@ BEGIN; --- Returns the current API UUID from the JWT claims --- Used for API invocation provenance checks in RLS policies --- Returns NULL if the claim is not set or invalid +-- Returns NULL if the claim is not set, empty, or not a valid UUID +-- pg_input_is_valid() validates without raising, so no EXCEPTION block is +-- needed: an exception handler would open a subtransaction on every call CREATE FUNCTION jwt_private.current_api_id() RETURNS uuid AS $$ -DECLARE - v_identifier_id uuid; -BEGIN - IF current_setting('jwt.claims.api_id', TRUE) - IS NOT NULL THEN - BEGIN - v_identifier_id = current_setting('jwt.claims.api_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; + SELECT CASE + WHEN pg_input_is_valid(current_setting('jwt.claims.api_id', TRUE), 'uuid') + THEN current_setting('jwt.claims.api_id', TRUE)::uuid + END; $$ -LANGUAGE 'plpgsql' STABLE; +LANGUAGE 'sql' STABLE LEAKPROOF; COMMIT; diff --git a/packages/jwt-claims/deploy/schemas/jwt_private/procedures/current_database_id.sql b/packages/jwt-claims/deploy/schemas/jwt_private/procedures/current_database_id.sql index 3bd2dad9..1c6e22d9 100644 --- a/packages/jwt-claims/deploy/schemas/jwt_private/procedures/current_database_id.sql +++ b/packages/jwt-claims/deploy/schemas/jwt_private/procedures/current_database_id.sql @@ -7,26 +7,32 @@ BEGIN; -- Returns the current database UUID from the JWT claims -- Used for multi-tenant database isolation --- Returns NULL if the claim is not set or invalid +-- +-- The claim is set at every session boundary (API, worker, provisioning, +-- platform deploy/seed), so a missing or malformed claim is never a +-- legitimate state: it means a scoped write is about to run unattributed. +-- Fails loudly instead of returning NULL, so the omission surfaces at the +-- statement that needed the identity rather than as a NULL that travels. +-- +-- pg_input_is_valid() validates without raising, so no EXCEPTION block is +-- needed: an exception handler would open a subtransaction on every call CREATE FUNCTION jwt_private.current_database_id() RETURNS uuid AS $$ DECLARE - v_identifier_id uuid; + database_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; + IF pg_input_is_valid(current_setting('jwt.claims.database_id', TRUE), 'uuid') THEN + database_id = current_setting('jwt.claims.database_id', TRUE)::uuid; END IF; + IF database_id IS NULL THEN + PERFORM errors.raise_error( + 'DATABASE_CLAIM_REQUIRED', + jsonb_build_object('claim', 'jwt.claims.database_id'), + 'internal' + ); + END IF; + RETURN database_id; END; $$ LANGUAGE 'plpgsql' STABLE; diff --git a/packages/jwt-claims/deploy/schemas/jwt_private/procedures/current_graph_execution_id.sql b/packages/jwt-claims/deploy/schemas/jwt_private/procedures/current_graph_execution_id.sql index e88c4ce7..87f2c59d 100644 --- a/packages/jwt-claims/deploy/schemas/jwt_private/procedures/current_graph_execution_id.sql +++ b/packages/jwt-claims/deploy/schemas/jwt_private/procedures/current_graph_execution_id.sql @@ -5,30 +5,17 @@ BEGIN; --- Returns the current graph execution UUID from the JWT claims --- Used for graph invocation provenance checks in RLS policies --- Returns NULL if the claim is not set or invalid +-- Returns NULL if the claim is not set, empty, or not a valid UUID +-- pg_input_is_valid() validates without raising, so no EXCEPTION block is +-- needed: an exception handler would open a subtransaction on every call CREATE FUNCTION jwt_private.current_graph_execution_id() RETURNS uuid AS $$ -DECLARE - v_identifier_id uuid; -BEGIN - IF current_setting('jwt.claims.graph_execution_id', TRUE) - IS NOT NULL THEN - BEGIN - v_identifier_id = current_setting('jwt.claims.graph_execution_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; + SELECT CASE + WHEN pg_input_is_valid(current_setting('jwt.claims.graph_execution_id', TRUE), 'uuid') + THEN current_setting('jwt.claims.graph_execution_id', TRUE)::uuid + END; $$ -LANGUAGE 'plpgsql' STABLE; +LANGUAGE 'sql' STABLE LEAKPROOF; COMMIT; diff --git a/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_ip_address.sql b/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_ip_address.sql index 1c2b9d24..b5f93f10 100644 --- a/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_ip_address.sql +++ b/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_ip_address.sql @@ -6,29 +6,17 @@ BEGIN; -- Returns the client's IP address from the JWT claims --- Includes error handling for invalid IP address values --- Returns NULL if the claim is not set or invalid +-- Returns NULL if the claim is not set, empty, or not a valid inet value +-- pg_input_is_valid() validates without raising, so no EXCEPTION block is +-- needed: an exception handler would open a subtransaction on every call 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; + SELECT CASE + WHEN pg_input_is_valid(trim(current_setting('jwt.claims.ip_address', TRUE)), 'inet') + THEN trim(current_setting('jwt.claims.ip_address', TRUE))::inet + END; $$ -LANGUAGE 'plpgsql' STABLE; +LANGUAGE 'sql' STABLE; COMMIT; diff --git a/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_principal_id.sql b/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_principal_id.sql index b13095cc..ffac5662 100644 --- a/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_principal_id.sql +++ b/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_principal_id.sql @@ -6,29 +6,17 @@ BEGIN; -- Returns the current principal's UUID from the JWT claims --- Includes error handling for invalid UUID values --- Returns NULL if the claim is not set or invalid +-- Returns NULL if the claim is not set, empty, or not a valid UUID +-- pg_input_is_valid() validates without raising, so no EXCEPTION block is +-- needed: an exception handler would open a subtransaction on every call CREATE FUNCTION jwt_public.current_principal_id() RETURNS uuid AS $$ -DECLARE - v_identifier_id uuid; -BEGIN - IF current_setting('jwt.claims.principal_id', TRUE) - IS NOT NULL THEN - BEGIN - v_identifier_id = current_setting('jwt.claims.principal_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; + SELECT CASE + WHEN pg_input_is_valid(current_setting('jwt.claims.principal_id', TRUE), 'uuid') + THEN current_setting('jwt.claims.principal_id', TRUE)::uuid + END; $$ -LANGUAGE 'plpgsql' STABLE; +LANGUAGE 'sql' STABLE LEAKPROOF; COMMIT; diff --git a/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_role_type.sql b/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_role_type.sql index b009bb63..e846ec60 100644 --- a/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_role_type.sql +++ b/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_role_type.sql @@ -11,17 +11,8 @@ BEGIN; CREATE FUNCTION jwt_public.current_role_type() RETURNS text AS $$ -DECLARE - v_role_type text; -BEGIN - v_role_type := current_setting('jwt.claims.role_type', TRUE); - IF v_role_type IS NOT NULL AND v_role_type <> '' THEN - RETURN v_role_type; - ELSE - RETURN 'user'; - END IF; -END; + SELECT coalesce(nullif(current_setting('jwt.claims.role_type', TRUE), ''), 'user'); $$ -LANGUAGE 'plpgsql' STABLE; +LANGUAGE 'sql' STABLE LEAKPROOF; COMMIT; diff --git a/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_user_agent.sql b/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_user_agent.sql index 85919c3d..51490362 100644 --- a/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_user_agent.sql +++ b/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_user_agent.sql @@ -1,34 +1,18 @@ -- Deploy schemas/jwt_public/procedures/current_user_agent to pg --- Retrieves the client's user agent string from JWT claims with validation +-- Retrieves the client's user agent string from JWT claims -- requires: schemas/jwt_public/schema BEGIN; -- Returns the client's user agent string from the JWT claims --- Includes error handling for invalid values --- Returns NULL if the claim is not set or invalid +-- Returns NULL if the claim is not set; the value needs no cast, so it can +-- never raise and needs no EXCEPTION block (which would open a subtransaction) 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; + SELECT current_setting('jwt.claims.user_agent', TRUE); $$ -LANGUAGE 'plpgsql' STABLE; +LANGUAGE 'sql' STABLE; COMMIT; diff --git a/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_user_id.sql b/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_user_id.sql index 3754c455..56d16691 100644 --- a/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_user_id.sql +++ b/packages/jwt-claims/deploy/schemas/jwt_public/procedures/current_user_id.sql @@ -5,30 +5,17 @@ BEGIN; --- Returns the current user's UUID from the JWT claims --- Includes error handling for invalid UUID values --- Returns NULL if the claim is not set or invalid +-- Returns NULL if the claim is not set, empty, or not a valid UUID +-- pg_input_is_valid() validates without raising, so no EXCEPTION block is +-- needed: an exception handler would open a subtransaction on every call 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; + SELECT CASE + WHEN pg_input_is_valid(current_setting('jwt.claims.user_id', TRUE), 'uuid') + THEN current_setting('jwt.claims.user_id', TRUE)::uuid + END; $$ -LANGUAGE 'plpgsql' STABLE; +LANGUAGE 'sql' STABLE LEAKPROOF; COMMIT; diff --git a/packages/jwt-claims/package.json b/packages/jwt-claims/package.json index 299dbb00..228c6faf 100644 --- a/packages/jwt-claims/package.json +++ b/packages/jwt-claims/package.json @@ -24,6 +24,7 @@ "pgpm": "^5" }, "dependencies": { + "@pgpm/errors": "workspace:*", "@pgpm/types": "workspace:*", "@pgpm/verify": "workspace:*" }, diff --git a/packages/jwt-claims/pgpm-jwt-claims.control b/packages/jwt-claims/pgpm-jwt-claims.control index 8a4b111f..43943a16 100644 --- a/packages/jwt-claims/pgpm-jwt-claims.control +++ b/packages/jwt-claims/pgpm-jwt-claims.control @@ -2,7 +2,7 @@ comment = 'pgpm-jwt-claims extension' default_version = '0.34.0' module_pathname = '$libdir/pgpm-jwt-claims' -requires = 'plpgsql,pgpm-types,pgpm-verify' +requires = 'plpgsql,errors,pgpm-types,pgpm-verify' relocatable = false superuser = false diff --git a/packages/jwt-claims/sql/pgpm-jwt-claims--0.34.0.bundle.tar.gz b/packages/jwt-claims/sql/pgpm-jwt-claims--0.34.0.bundle.tar.gz index 0ea073e9..ca216742 100644 Binary files a/packages/jwt-claims/sql/pgpm-jwt-claims--0.34.0.bundle.tar.gz and b/packages/jwt-claims/sql/pgpm-jwt-claims--0.34.0.bundle.tar.gz differ diff --git a/packages/jwt-claims/sql/pgpm-jwt-claims--0.34.0.sql b/packages/jwt-claims/sql/pgpm-jwt-claims--0.34.0.sql index 10caa817..27e11590 100644 --- a/packages/jwt-claims/sql/pgpm-jwt-claims--0.34.0.sql +++ b/packages/jwt-claims/sql/pgpm-jwt-claims--0.34.0.sql @@ -48,101 +48,37 @@ 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; + SELECT CASE + WHEN pg_input_is_valid(current_setting('jwt.claims.user_id', TRUE), 'uuid') + THEN current_setting('jwt.claims.user_id', TRUE)::uuid + END; +$EOFCODE$ LANGUAGE sql STABLE LEAKPROOF; 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; + SELECT CASE + WHEN pg_input_is_valid(trim(current_setting('jwt.claims.ip_address', TRUE)), 'inet') + THEN trim(current_setting('jwt.claims.ip_address', TRUE))::inet + END; +$EOFCODE$ LANGUAGE sql 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; + SELECT current_setting('jwt.claims.user_agent', TRUE); +$EOFCODE$ LANGUAGE sql 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_principal_id() RETURNS uuid AS $EOFCODE$ -DECLARE - v_identifier_id uuid; -BEGIN - IF current_setting('jwt.claims.principal_id', TRUE) - IS NOT NULL THEN - BEGIN - v_identifier_id = current_setting('jwt.claims.principal_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; + SELECT CASE + WHEN pg_input_is_valid(current_setting('jwt.claims.principal_id', TRUE), 'uuid') + THEN current_setting('jwt.claims.principal_id', TRUE)::uuid + END; +$EOFCODE$ LANGUAGE sql STABLE LEAKPROOF; CREATE FUNCTION jwt_public.current_role_type() RETURNS text AS $EOFCODE$ -DECLARE - v_role_type text; -BEGIN - v_role_type := current_setting('jwt.claims.role_type', TRUE); - IF v_role_type IS NOT NULL AND v_role_type <> '' THEN - RETURN v_role_type; - ELSE - RETURN 'user'; - END IF; -END; -$EOFCODE$ LANGUAGE plpgsql STABLE; + SELECT coalesce(nullif(current_setting('jwt.claims.role_type', TRUE), ''), 'user'); +$EOFCODE$ LANGUAGE sql STABLE LEAKPROOF; CREATE SCHEMA jwt_private; @@ -153,21 +89,19 @@ ALTER DEFAULT PRIVILEGES IN SCHEMA jwt_private CREATE FUNCTION jwt_private.current_database_id() RETURNS uuid AS $EOFCODE$ DECLARE - v_identifier_id uuid; + database_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; + IF pg_input_is_valid(current_setting('jwt.claims.database_id', TRUE), 'uuid') THEN + database_id = current_setting('jwt.claims.database_id', TRUE)::uuid; END IF; + IF database_id IS NULL THEN + PERFORM errors.raise_error( + 'DATABASE_CLAIM_REQUIRED', + jsonb_build_object('claim', 'jwt.claims.database_id'), + 'internal' + ); + END IF; + RETURN database_id; END; $EOFCODE$ LANGUAGE plpgsql STABLE; @@ -180,41 +114,15 @@ CREATE FUNCTION jwt_private.current_session_id() RETURNS uuid AS $EOFCODE$ $EOFCODE$ LANGUAGE sql STABLE; CREATE FUNCTION jwt_private.current_api_id() RETURNS uuid AS $EOFCODE$ -DECLARE - v_identifier_id uuid; -BEGIN - IF current_setting('jwt.claims.api_id', TRUE) - IS NOT NULL THEN - BEGIN - v_identifier_id = current_setting('jwt.claims.api_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; + SELECT CASE + WHEN pg_input_is_valid(current_setting('jwt.claims.api_id', TRUE), 'uuid') + THEN current_setting('jwt.claims.api_id', TRUE)::uuid + END; +$EOFCODE$ LANGUAGE sql STABLE LEAKPROOF; CREATE FUNCTION jwt_private.current_graph_execution_id() RETURNS uuid AS $EOFCODE$ -DECLARE - v_identifier_id uuid; -BEGIN - IF current_setting('jwt.claims.graph_execution_id', TRUE) - IS NOT NULL THEN - BEGIN - v_identifier_id = current_setting('jwt.claims.graph_execution_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; \ No newline at end of file + SELECT CASE + WHEN pg_input_is_valid(current_setting('jwt.claims.graph_execution_id', TRUE), 'uuid') + THEN current_setting('jwt.claims.graph_execution_id', TRUE)::uuid + END; +$EOFCODE$ LANGUAGE sql STABLE LEAKPROOF; \ No newline at end of file diff --git a/packages/metaschema-modules/__tests__/__snapshots__/modules.test.ts.snap b/packages/metaschema-modules/__tests__/__snapshots__/modules.test.ts.snap index f9dd9182..5dd7b91d 100644 --- a/packages/metaschema-modules/__tests__/__snapshots__/modules.test.ts.snap +++ b/packages/metaschema-modules/__tests__/__snapshots__/modules.test.ts.snap @@ -43,6 +43,7 @@ exports[`db_meta_modules should have all expected module tables 1`] = ` "merkle_store_module", "namespace_module", "notifications_module", + "pages_module", "permissions_module", "phone_numbers_module", "plans_module", @@ -74,8 +75,8 @@ exports[`db_meta_modules should have all expected module tables 1`] = ` exports[`db_meta_modules should verify all module tables exist in metaschema_modules_public schema 1`] = ` { - "moduleTablesCount": 65, - "totalTables": 72, + "moduleTablesCount": 66, + "totalTables": 73, } `; @@ -142,13 +143,13 @@ exports[`db_meta_modules should verify emails_module table structure 1`] = ` exports[`db_meta_modules should verify module table structures have database_id foreign keys 1`] = ` { - "constraintCount": 65, + "constraintCount": 66, } `; exports[`db_meta_modules should verify module tables have proper foreign key relationships 1`] = ` { - "constraintCount": 459, + "constraintCount": 476, "foreignTables": [ "catalog_module", "database", @@ -162,6 +163,7 @@ exports[`db_meta_modules should verify module tables have proper foreign key rel "namespace_module", "resource_module", "schema", + "site_surface_module", "storage_module", "table", ], diff --git a/packages/metaschema-modules/__tests__/modules.test.ts b/packages/metaschema-modules/__tests__/modules.test.ts index 096284c3..115cc19a 100644 --- a/packages/metaschema-modules/__tests__/modules.test.ts +++ b/packages/metaschema-modules/__tests__/modules.test.ts @@ -21,30 +21,30 @@ describe('db_meta_modules', () => { }); it('should have all expected module tables', async () => { - const expectedModules = [ - 'connected_accounts_module', - 'crypto_addresses_module', - 'crypto_auth_module', - 'default_ids_module', - 'emails_module', - 'infra_secrets_module', - 'infra_config_module', - 'internal_secrets_module', - 'config_secrets_user_module', - 'invites_module', - 'events_module', - 'limits_module', - 'membership_types_module', - 'memberships_module', - 'permissions_module', - 'phone_numbers_module', - 'rls_module', - 'user_state_module', - 'sessions_module', - 'user_auth_module', - 'user_credentials_module', - 'users_module' - ]; + const expectedModules = [ + 'connected_accounts_module', + 'crypto_addresses_module', + 'crypto_auth_module', + 'default_ids_module', + 'emails_module', + 'infra_secrets_module', + 'infra_config_module', + 'internal_secrets_module', + 'config_secrets_user_module', + 'invites_module', + 'events_module', + 'limits_module', + 'membership_types_module', + 'memberships_module', + 'permissions_module', + 'phone_numbers_module', + 'rls_module', + 'user_state_module', + 'sessions_module', + 'user_auth_module', + 'user_credentials_module', + 'users_module' + ]; // Query for all module tables in metaschema_modules_public schema const moduleTables = await pg.any(` diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/agent_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/agent_module/table.sql index e053fb6c..10cd8713 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/agent_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/agent_module/table.sql @@ -95,9 +95,18 @@ CREATE TABLE metaschema_modules_public.agent_module ( CONSTRAINT agent_module_entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX agent_module_database_id_idx ON metaschema_modules_public.agent_module ( database_id ); - -- Unique constraint: one agent module per database per scope per prefix. CREATE UNIQUE INDEX agent_module_unique_scope ON metaschema_modules_public.agent_module ( database_id, scope, prefix ); +CREATE INDEX agent_module_agent_table_id_idx ON metaschema_modules_public.agent_module ( agent_table_id ); +CREATE INDEX agent_module_entity_table_id_idx ON metaschema_modules_public.agent_module ( entity_table_id ); +CREATE INDEX agent_module_message_table_id_idx ON metaschema_modules_public.agent_module ( message_table_id ); +CREATE INDEX agent_module_persona_table_id_idx ON metaschema_modules_public.agent_module ( persona_table_id ); +CREATE INDEX agent_module_plan_table_id_idx ON metaschema_modules_public.agent_module ( plan_table_id ); +CREATE INDEX agent_module_prompts_table_id_idx ON metaschema_modules_public.agent_module ( prompts_table_id ); +CREATE INDEX agent_module_resource_table_id_idx ON metaschema_modules_public.agent_module ( resource_table_id ); +CREATE INDEX agent_module_task_table_id_idx ON metaschema_modules_public.agent_module ( task_table_id ); +CREATE INDEX agent_module_thread_table_id_idx ON metaschema_modules_public.agent_module ( thread_table_id ); +CREATE INDEX agent_module_private_schema_id_idx ON metaschema_modules_public.agent_module ( private_schema_id ); +CREATE INDEX agent_module_schema_id_idx ON metaschema_modules_public.agent_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/api_surface_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/api_surface_module/table.sql index 5b8a25b9..021ed405 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/api_surface_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/api_surface_module/table.sql @@ -27,14 +27,12 @@ CREATE TABLE metaschema_modules_public.api_surface_module ( -- Generated table IDs (populated by the generator) apis_table_id uuid NOT NULL DEFAULT uuid_nil(), api_schemas_table_id uuid NOT NULL DEFAULT uuid_nil(), - api_modules_table_id uuid NOT NULL DEFAULT uuid_nil(), api_settings_table_id uuid NOT NULL DEFAULT uuid_nil(), cors_settings_table_id uuid NOT NULL DEFAULT uuid_nil(), -- Table names (input to the generator) apis_table_name text NOT NULL DEFAULT 'apis', api_schemas_table_name text NOT NULL DEFAULT 'api_schemas', - api_modules_table_name text NOT NULL DEFAULT 'api_modules', api_settings_table_name text NOT NULL DEFAULT 'api_settings', cors_settings_table_name text NOT NULL DEFAULT 'cors_settings', @@ -80,10 +78,6 @@ CREATE TABLE metaschema_modules_public.api_surface_module ( FOREIGN KEY (api_schemas_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, - CONSTRAINT api_module_api_modules_table_fkey - FOREIGN KEY (api_modules_table_id) - REFERENCES metaschema_public.table (id) - ON DELETE CASCADE, CONSTRAINT api_module_api_settings_table_fkey FOREIGN KEY (api_settings_table_id) REFERENCES metaschema_public.table (id) @@ -98,10 +92,14 @@ CREATE TABLE metaschema_modules_public.api_surface_module ( ON DELETE CASCADE ); -CREATE INDEX api_module_database_id_idx - ON metaschema_modules_public.api_surface_module (database_id); - CREATE UNIQUE INDEX api_module_unique_scope ON metaschema_modules_public.api_surface_module (database_id, scope); +CREATE INDEX api_surface_module_api_schemas_table_id_idx ON metaschema_modules_public.api_surface_module ( api_schemas_table_id ); +CREATE INDEX api_surface_module_api_settings_table_id_idx ON metaschema_modules_public.api_surface_module ( api_settings_table_id ); +CREATE INDEX api_surface_module_apis_table_id_idx ON metaschema_modules_public.api_surface_module ( apis_table_id ); +CREATE INDEX api_surface_module_cors_settings_table_id_idx ON metaschema_modules_public.api_surface_module ( cors_settings_table_id ); +CREATE INDEX api_surface_module_entity_table_id_idx ON metaschema_modules_public.api_surface_module ( entity_table_id ); +CREATE INDEX api_surface_module_schema_id_idx ON metaschema_modules_public.api_surface_module ( schema_id ); +CREATE INDEX api_surface_module_catalog_module_id_idx ON metaschema_modules_public.api_surface_module ( catalog_module_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/app_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/app_module/table.sql index 8b3f58c8..664f4b0f 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/app_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/app_module/table.sql @@ -86,10 +86,13 @@ CREATE TABLE metaschema_modules_public.app_module ( ON DELETE CASCADE ); -CREATE INDEX app_module_database_id_idx - ON metaschema_modules_public.app_module (database_id); - CREATE UNIQUE INDEX app_module_unique_scope ON metaschema_modules_public.app_module (database_id, scope); +CREATE INDEX app_module_app_components_table_id_idx ON metaschema_modules_public.app_module ( app_components_table_id ); +CREATE INDEX app_module_apps_table_id_idx ON metaschema_modules_public.app_module ( apps_table_id ); +CREATE INDEX app_module_entity_table_id_idx ON metaschema_modules_public.app_module ( entity_table_id ); +CREATE INDEX app_module_private_schema_id_idx ON metaschema_modules_public.app_module ( private_schema_id ); +CREATE INDEX app_module_schema_id_idx ON metaschema_modules_public.app_module ( schema_id ); +CREATE INDEX app_module_catalog_module_id_idx ON metaschema_modules_public.app_module ( catalog_module_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/billing_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/billing_module/table.sql index ea9cd664..fc62424a 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/billing_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/billing_module/table.sql @@ -77,6 +77,14 @@ CREATE TABLE metaschema_modules_public.billing_module ( CONSTRAINT billing_module_database_id_unique UNIQUE (database_id) ); -CREATE INDEX billing_module_database_id_idx ON metaschema_modules_public.billing_module ( database_id ); +CREATE INDEX billing_module_balances_table_id_idx ON metaschema_modules_public.billing_module ( balances_table_id ); +CREATE INDEX billing_module_ledger_table_id_idx ON metaschema_modules_public.billing_module ( ledger_table_id ); +CREATE INDEX billing_module_meter_credits_table_id_idx ON metaschema_modules_public.billing_module ( meter_credits_table_id ); +CREATE INDEX billing_module_meter_defaults_table_id_idx ON metaschema_modules_public.billing_module ( meter_defaults_table_id ); +CREATE INDEX billing_module_meter_sources_table_id_idx ON metaschema_modules_public.billing_module ( meter_sources_table_id ); +CREATE INDEX billing_module_meters_table_id_idx ON metaschema_modules_public.billing_module ( meters_table_id ); +CREATE INDEX billing_module_plan_subscriptions_table_id_idx ON metaschema_modules_public.billing_module ( plan_subscriptions_table_id ); +CREATE INDEX billing_module_private_schema_id_idx ON metaschema_modules_public.billing_module ( private_schema_id ); +CREATE INDEX billing_module_schema_id_idx ON metaschema_modules_public.billing_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/billing_provider_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/billing_provider_module/table.sql index 22adc393..4f18e53f 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/billing_provider_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/billing_provider_module/table.sql @@ -60,6 +60,15 @@ CREATE TABLE metaschema_modules_public.billing_provider_module ( CONSTRAINT billing_provider_module_database_id_unique UNIQUE (database_id) ); -CREATE INDEX billing_provider_module_database_id_idx ON metaschema_modules_public.billing_provider_module ( database_id ); +CREATE INDEX billing_provider_module_billing_customers_table_id_idx ON metaschema_modules_public.billing_provider_module ( billing_customers_table_id ); +CREATE INDEX billing_provider_module_billing_prices_table_id_idx ON metaschema_modules_public.billing_provider_module ( billing_prices_table_id ); +CREATE INDEX billing_provider_module_billing_products_table_id_idx ON metaschema_modules_public.billing_provider_module ( billing_products_table_id ); +CREATE INDEX billing_provider_module_billing_subscriptions_table_id_idx ON metaschema_modules_public.billing_provider_module ( billing_subscriptions_table_id ); +CREATE INDEX billing_provider_module_billing_webhook_events_table_id_idx ON metaschema_modules_public.billing_provider_module ( billing_webhook_events_table_id ); +CREATE INDEX billing_provider_module_prices_table_id_idx ON metaschema_modules_public.billing_provider_module ( prices_table_id ); +CREATE INDEX billing_provider_module_products_table_id_idx ON metaschema_modules_public.billing_provider_module ( products_table_id ); +CREATE INDEX billing_provider_module_subscriptions_table_id_idx ON metaschema_modules_public.billing_provider_module ( subscriptions_table_id ); +CREATE INDEX billing_provider_module_private_schema_id_idx ON metaschema_modules_public.billing_provider_module ( private_schema_id ); +CREATE INDEX billing_provider_module_schema_id_idx ON metaschema_modules_public.billing_provider_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/blueprint/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/blueprint/table.sql index 7dc5a609..0661813b 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/blueprint/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/blueprint/table.sql @@ -82,7 +82,6 @@ COMMENT ON COLUMN metaschema_modules_public.blueprint.updated_at IS CREATE INDEX blueprint_owner_id_idx ON metaschema_modules_public.blueprint (owner_id); -CREATE INDEX blueprint_database_id_idx ON metaschema_modules_public.blueprint (database_id); CREATE INDEX blueprint_template_id_idx ON metaschema_modules_public.blueprint (template_id); CREATE INDEX blueprint_definition_hash_idx ON metaschema_modules_public.blueprint (definition_hash); diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/blueprint_template/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/blueprint_template/table.sql index d634212e..91e6ff34 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/blueprint_template/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/blueprint_template/table.sql @@ -127,7 +127,6 @@ COMMENT ON COLUMN metaschema_modules_public.blueprint_template.updated_at IS 'Timestamp when this template was last modified.'; -CREATE INDEX blueprint_template_owner_id_idx ON metaschema_modules_public.blueprint_template (owner_id); CREATE INDEX blueprint_template_visibility_idx ON metaschema_modules_public.blueprint_template (visibility); CREATE INDEX blueprint_template_forked_from_id_idx ON metaschema_modules_public.blueprint_template (forked_from_id); CREATE INDEX blueprint_template_categories_idx ON metaschema_modules_public.blueprint_template USING gin (categories); diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/catalog_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/catalog_module/table.sql index f89ed27d..d0f0bacf 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/catalog_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/catalog_module/table.sql @@ -32,6 +32,10 @@ CREATE TABLE metaschema_modules_public.catalog_module ( resource_installations_table_id uuid NOT NULL DEFAULT uuid_nil(), apps_table_id uuid NOT NULL DEFAULT uuid_nil(), buckets_table_id uuid NOT NULL DEFAULT uuid_nil(), + sites_web_config_table_id uuid NOT NULL DEFAULT uuid_nil(), + sites_error_pages_table_id uuid NOT NULL DEFAULT uuid_nil(), + sites_app_links_table_id uuid NOT NULL DEFAULT uuid_nil(), + sites_deep_links_table_id uuid NOT NULL DEFAULT uuid_nil(), -- Table names (inputs to the generator; stable load-bearing contracts) domains_table_name text NOT NULL DEFAULT 'domains', @@ -44,6 +48,10 @@ CREATE TABLE metaschema_modules_public.catalog_module ( resource_installations_table_name text NOT NULL DEFAULT 'resource_installations', apps_table_name text NOT NULL DEFAULT 'apps', buckets_table_name text NOT NULL DEFAULT 'buckets', + sites_web_config_table_name text NOT NULL DEFAULT 'sites_web_config', + sites_error_pages_table_name text NOT NULL DEFAULT 'sites_error_pages', + sites_app_links_table_name text NOT NULL DEFAULT 'sites_app_links', + sites_deep_links_table_name text NOT NULL DEFAULT 'sites_deep_links', -- API routing (get-or-create: if set, schema is added to this API) api_name text, @@ -113,6 +121,22 @@ CREATE TABLE metaschema_modules_public.catalog_module ( FOREIGN KEY (buckets_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, + CONSTRAINT catalog_module_sites_web_config_table_fkey + FOREIGN KEY (sites_web_config_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, + CONSTRAINT catalog_module_sites_error_pages_table_fkey + FOREIGN KEY (sites_error_pages_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, + CONSTRAINT catalog_module_sites_app_links_table_fkey + FOREIGN KEY (sites_app_links_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, + CONSTRAINT catalog_module_sites_deep_links_table_fkey + FOREIGN KEY (sites_deep_links_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, CONSTRAINT catalog_module_entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES metaschema_public.table (id) @@ -123,5 +147,21 @@ CREATE TABLE metaschema_modules_public.catalog_module ( -- never multiply per scope or per module. CREATE UNIQUE INDEX catalog_module_unique_database ON metaschema_modules_public.catalog_module (database_id); +CREATE INDEX catalog_module_apis_table_id_idx ON metaschema_modules_public.catalog_module ( apis_table_id ); +CREATE INDEX catalog_module_apps_table_id_idx ON metaschema_modules_public.catalog_module ( apps_table_id ); +CREATE INDEX catalog_module_buckets_table_id_idx ON metaschema_modules_public.catalog_module ( buckets_table_id ); +CREATE INDEX catalog_module_sites_web_config_table_id_idx ON metaschema_modules_public.catalog_module ( sites_web_config_table_id ); +CREATE INDEX catalog_module_sites_error_pages_table_id_idx ON metaschema_modules_public.catalog_module ( sites_error_pages_table_id ); +CREATE INDEX catalog_module_sites_app_links_table_id_idx ON metaschema_modules_public.catalog_module ( sites_app_links_table_id ); +CREATE INDEX catalog_module_sites_deep_links_table_id_idx ON metaschema_modules_public.catalog_module ( sites_deep_links_table_id ); +CREATE INDEX catalog_module_domains_table_id_idx ON metaschema_modules_public.catalog_module ( domains_table_id ); +CREATE INDEX catalog_module_entity_table_id_idx ON metaschema_modules_public.catalog_module ( entity_table_id ); +CREATE INDEX catalog_module_functions_table_id_idx ON metaschema_modules_public.catalog_module ( functions_table_id ); +CREATE INDEX catalog_module_namespaces_table_id_idx ON metaschema_modules_public.catalog_module ( namespaces_table_id ); +CREATE INDEX catalog_module_resource_definitions_table_id_idx ON metaschema_modules_public.catalog_module ( resource_definitions_table_id ); +CREATE INDEX catalog_module_resource_installations_table_id_idx ON metaschema_modules_public.catalog_module ( resource_installations_table_id ); +CREATE INDEX catalog_module_resources_table_id_idx ON metaschema_modules_public.catalog_module ( resources_table_id ); +CREATE INDEX catalog_module_sites_table_id_idx ON metaschema_modules_public.catalog_module ( sites_table_id ); +CREATE INDEX catalog_module_schema_id_idx ON metaschema_modules_public.catalog_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/compute_log_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/compute_log_module/table.sql index f4225266..7b6d3d5b 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/compute_log_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/compute_log_module/table.sql @@ -53,6 +53,9 @@ CREATE TABLE metaschema_modules_public.compute_log_module ( CONSTRAINT compute_log_module_database_id_scope_unique UNIQUE (database_id, scope) ); -CREATE INDEX compute_log_module_database_id_idx ON metaschema_modules_public.compute_log_module ( database_id ); +CREATE INDEX compute_log_module_compute_log_table_id_idx ON metaschema_modules_public.compute_log_module ( compute_log_table_id ); +CREATE INDEX compute_log_module_usage_summary_table_id_idx ON metaschema_modules_public.compute_log_module ( usage_summary_table_id ); +CREATE INDEX compute_log_module_private_schema_id_idx ON metaschema_modules_public.compute_log_module ( private_schema_id ); +CREATE INDEX compute_log_module_schema_id_idx ON metaschema_modules_public.compute_log_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/config_secrets_user_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/config_secrets_user_module/table.sql index 9dfe1f38..4fe6f583 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/config_secrets_user_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/config_secrets_user_module/table.sql @@ -27,5 +27,7 @@ CREATE TABLE metaschema_modules_public.config_secrets_user_module ( ); CREATE UNIQUE INDEX config_secrets_user_module_database_id_idx ON metaschema_modules_public.config_secrets_user_module ( database_id ); +CREATE INDEX config_secrets_user_module_table_id_idx ON metaschema_modules_public.config_secrets_user_module ( table_id ); +CREATE INDEX config_secrets_user_module_schema_id_idx ON metaschema_modules_public.config_secrets_user_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/connected_accounts_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/connected_accounts_module/table.sql index 6f831d86..69b7f653 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/connected_accounts_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/connected_accounts_module/table.sql @@ -29,5 +29,9 @@ CREATE TABLE metaschema_modules_public.connected_accounts_module ( ); CREATE INDEX connected_accounts_module_database_id_idx ON metaschema_modules_public.connected_accounts_module ( database_id ); +CREATE INDEX connected_accounts_module_owner_table_id_idx ON metaschema_modules_public.connected_accounts_module ( owner_table_id ); +CREATE INDEX connected_accounts_module_table_id_idx ON metaschema_modules_public.connected_accounts_module ( table_id ); +CREATE INDEX connected_accounts_module_private_schema_id_idx ON metaschema_modules_public.connected_accounts_module ( private_schema_id ); +CREATE INDEX connected_accounts_module_schema_id_idx ON metaschema_modules_public.connected_accounts_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/crypto_addresses_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/crypto_addresses_module/table.sql index 7e3747fd..e6a7bc5c 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/crypto_addresses_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/crypto_addresses_module/table.sql @@ -30,5 +30,9 @@ CREATE TABLE metaschema_modules_public.crypto_addresses_module ( ); CREATE INDEX crypto_addresses_module_database_id_idx ON metaschema_modules_public.crypto_addresses_module ( database_id ); +CREATE INDEX crypto_addresses_module_owner_table_id_idx ON metaschema_modules_public.crypto_addresses_module ( owner_table_id ); +CREATE INDEX crypto_addresses_module_table_id_idx ON metaschema_modules_public.crypto_addresses_module ( table_id ); +CREATE INDEX crypto_addresses_module_private_schema_id_idx ON metaschema_modules_public.crypto_addresses_module ( private_schema_id ); +CREATE INDEX crypto_addresses_module_schema_id_idx ON metaschema_modules_public.crypto_addresses_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/crypto_auth_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/crypto_auth_module/table.sql index 639475bd..aa9e756b 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/crypto_auth_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/crypto_auth_module/table.sql @@ -37,5 +37,10 @@ CREATE TABLE metaschema_modules_public.crypto_auth_module ( -- TOKENS_REMOVAL: tokens_table_fkey comment removed CREATE INDEX crypto_auth_module_database_id_idx ON metaschema_modules_public.crypto_auth_module ( database_id ); +CREATE INDEX crypto_auth_module_secrets_table_id_idx ON metaschema_modules_public.crypto_auth_module ( secrets_table_id ); +CREATE INDEX crypto_auth_module_session_credentials_table_id_idx ON metaschema_modules_public.crypto_auth_module ( session_credentials_table_id ); +CREATE INDEX crypto_auth_module_sessions_table_id_idx ON metaschema_modules_public.crypto_auth_module ( sessions_table_id ); +CREATE INDEX crypto_auth_module_users_table_id_idx ON metaschema_modules_public.crypto_auth_module ( users_table_id ); +CREATE INDEX crypto_auth_module_schema_id_idx ON metaschema_modules_public.crypto_auth_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/database_settings_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/database_settings_module/table.sql index a37b6a46..ef16a177 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/database_settings_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/database_settings_module/table.sql @@ -82,10 +82,13 @@ CREATE TABLE metaschema_modules_public.database_settings_module ( ON DELETE CASCADE ); -CREATE INDEX database_settings_module_database_id_idx - ON metaschema_modules_public.database_settings_module (database_id); - CREATE UNIQUE INDEX database_settings_module_unique_scope ON metaschema_modules_public.database_settings_module (database_id, scope); +CREATE INDEX database_settings_module_entity_table_id_idx ON metaschema_modules_public.database_settings_module ( entity_table_id ); +CREATE INDEX database_settings_module_pubkey_settings_table_id_idx ON metaschema_modules_public.database_settings_module ( pubkey_settings_table_id ); +CREATE INDEX database_settings_module_rls_settings_table_id_idx ON metaschema_modules_public.database_settings_module ( rls_settings_table_id ); +CREATE INDEX database_settings_module_database_settings_table_id_idx ON metaschema_modules_public.database_settings_module ( database_settings_table_id ); +CREATE INDEX database_settings_module_webauthn_settings_table_id_idx ON metaschema_modules_public.database_settings_module ( webauthn_settings_table_id ); +CREATE INDEX database_settings_module_schema_id_idx ON metaschema_modules_public.database_settings_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/db_preset_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/db_preset_module/table.sql index 36e8cb52..4c5190f0 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/db_preset_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/db_preset_module/table.sql @@ -35,6 +35,10 @@ CREATE TABLE metaschema_modules_public.db_preset_module ( CONSTRAINT db_preset_module_database_merkle_unique UNIQUE (database_id, merkle_store_module_id) ); -CREATE INDEX db_preset_module_database_id_idx ON metaschema_modules_public.db_preset_module ( database_id ); +CREATE INDEX db_preset_module_entity_table_id_idx ON metaschema_modules_public.db_preset_module ( entity_table_id ); +CREATE INDEX db_preset_module_db_presets_table_id_idx ON metaschema_modules_public.db_preset_module ( db_presets_table_id ); +CREATE INDEX db_preset_module_private_schema_id_idx ON metaschema_modules_public.db_preset_module ( private_schema_id ); +CREATE INDEX db_preset_module_public_schema_id_idx ON metaschema_modules_public.db_preset_module ( public_schema_id ); +CREATE INDEX db_preset_module_merkle_store_module_id_idx ON metaschema_modules_public.db_preset_module ( merkle_store_module_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/db_usage_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/db_usage_module/table.sql index b2d2d54d..ebb2f173 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/db_usage_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/db_usage_module/table.sql @@ -71,6 +71,11 @@ CREATE TABLE metaschema_modules_public.db_usage_module ( CONSTRAINT db_usage_module_database_id_scope_unique UNIQUE (database_id, scope) ); -CREATE INDEX db_usage_module_database_id_idx ON metaschema_modules_public.db_usage_module ( database_id ); +CREATE INDEX db_usage_module_query_stats_log_table_id_idx ON metaschema_modules_public.db_usage_module ( query_stats_log_table_id ); +CREATE INDEX db_usage_module_query_stats_summary_table_id_idx ON metaschema_modules_public.db_usage_module ( query_stats_summary_table_id ); +CREATE INDEX db_usage_module_table_stats_log_table_id_idx ON metaschema_modules_public.db_usage_module ( table_stats_log_table_id ); +CREATE INDEX db_usage_module_table_stats_summary_table_id_idx ON metaschema_modules_public.db_usage_module ( table_stats_summary_table_id ); +CREATE INDEX db_usage_module_private_schema_id_idx ON metaschema_modules_public.db_usage_module ( private_schema_id ); +CREATE INDEX db_usage_module_schema_id_idx ON metaschema_modules_public.db_usage_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/denormalized_table_field/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/denormalized_table_field/table.sql index e6ea588a..0226d11e 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/denormalized_table_field/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/denormalized_table_field/table.sql @@ -32,5 +32,9 @@ CREATE TABLE metaschema_modules_public.denormalized_table_field ( ); CREATE INDEX denormalized_table_field_database_id_idx ON metaschema_modules_public.denormalized_table_field ( database_id ); +CREATE INDEX denormalized_table_field_ref_table_id_idx ON metaschema_modules_public.denormalized_table_field ( ref_table_id ); +CREATE INDEX denormalized_table_field_table_id_idx ON metaschema_modules_public.denormalized_table_field ( table_id ); +CREATE INDEX denormalized_table_field_field_id_idx ON metaschema_modules_public.denormalized_table_field ( field_id ); +CREATE INDEX denormalized_table_field_ref_field_id_idx ON metaschema_modules_public.denormalized_table_field ( ref_field_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/devices_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/devices_module/table.sql index 159c4a37..99cdfd64 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/devices_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/devices_module/table.sql @@ -26,11 +26,13 @@ CREATE TABLE metaschema_modules_public.devices_module ( CONSTRAINT devices_module_database_id_uniq UNIQUE(database_id) ); -CREATE INDEX devices_module_database_id_idx ON metaschema_modules_public.devices_module ( database_id ); - COMMENT ON CONSTRAINT user_devices_table_fkey ON metaschema_modules_public.devices_module IS E'@fieldName userDevicesTableByUserDevicesTableId'; COMMENT ON CONSTRAINT device_settings_table_fkey ON metaschema_modules_public.devices_module IS E'@fieldName deviceSettingsTableByDeviceSettingsTableId'; +CREATE INDEX devices_module_device_settings_table_id_idx ON metaschema_modules_public.devices_module ( device_settings_table_id ); +CREATE INDEX devices_module_user_devices_table_id_idx ON metaschema_modules_public.devices_module ( user_devices_table_id ); +CREATE INDEX devices_module_schema_id_idx ON metaschema_modules_public.devices_module ( schema_id ); + COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/domain_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/domain_module/table.sql index db0f3976..aa394198 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/domain_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/domain_module/table.sql @@ -103,10 +103,15 @@ CREATE TABLE metaschema_modules_public.domain_module ( ON DELETE CASCADE ); -CREATE INDEX domain_module_database_id_idx - ON metaschema_modules_public.domain_module (database_id); - CREATE UNIQUE INDEX domain_module_unique_scope ON metaschema_modules_public.domain_module (database_id, scope); +CREATE INDEX domain_module_domains_table_id_idx ON metaschema_modules_public.domain_module ( domains_table_id ); +CREATE INDEX domain_module_entity_table_id_idx ON metaschema_modules_public.domain_module ( entity_table_id ); +CREATE INDEX domain_module_domain_events_table_id_idx ON metaschema_modules_public.domain_module ( domain_events_table_id ); +CREATE INDEX domain_module_managed_domains_table_id_idx ON metaschema_modules_public.domain_module ( managed_domains_table_id ); +CREATE INDEX domain_module_domain_verifications_table_id_idx ON metaschema_modules_public.domain_module ( domain_verifications_table_id ); +CREATE INDEX domain_module_private_schema_id_idx ON metaschema_modules_public.domain_module ( private_schema_id ); +CREATE INDEX domain_module_schema_id_idx ON metaschema_modules_public.domain_module ( schema_id ); +CREATE INDEX domain_module_catalog_module_id_idx ON metaschema_modules_public.domain_module ( catalog_module_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/emails_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/emails_module/table.sql index ee831229..2bd3e6c8 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/emails_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/emails_module/table.sql @@ -29,5 +29,9 @@ CREATE TABLE metaschema_modules_public.emails_module ( ); CREATE INDEX emails_module_database_id_idx ON metaschema_modules_public.emails_module ( database_id ); +CREATE INDEX emails_module_owner_table_id_idx ON metaschema_modules_public.emails_module ( owner_table_id ); +CREATE INDEX emails_module_table_id_idx ON metaschema_modules_public.emails_module ( table_id ); +CREATE INDEX emails_module_private_schema_id_idx ON metaschema_modules_public.emails_module ( private_schema_id ); +CREATE INDEX emails_module_schema_id_idx ON metaschema_modules_public.emails_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/events_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/events_module/table.sql index 8c4111ad..dabe75a0 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/events_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/events_module/table.sql @@ -99,5 +99,16 @@ CREATE TABLE metaschema_modules_public.events_module ( ); CREATE INDEX events_module_database_id_idx ON metaschema_modules_public.events_module ( database_id ); +CREATE INDEX events_module_achievement_rewards_table_id_idx ON metaschema_modules_public.events_module ( achievement_rewards_table_id ); +CREATE INDEX events_module_actor_table_id_idx ON metaschema_modules_public.events_module ( actor_table_id ); +CREATE INDEX events_module_entity_table_id_idx ON metaschema_modules_public.events_module ( entity_table_id ); +CREATE INDEX events_module_event_aggregates_table_id_idx ON metaschema_modules_public.events_module ( event_aggregates_table_id ); +CREATE INDEX events_module_event_types_table_id_idx ON metaschema_modules_public.events_module ( event_types_table_id ); +CREATE INDEX events_module_events_table_id_idx ON metaschema_modules_public.events_module ( events_table_id ); +CREATE INDEX events_module_level_grants_table_id_idx ON metaschema_modules_public.events_module ( level_grants_table_id ); +CREATE INDEX events_module_level_requirements_table_id_idx ON metaschema_modules_public.events_module ( level_requirements_table_id ); +CREATE INDEX events_module_levels_table_id_idx ON metaschema_modules_public.events_module ( levels_table_id ); +CREATE INDEX events_module_private_schema_id_idx ON metaschema_modules_public.events_module ( private_schema_id ); +CREATE INDEX events_module_schema_id_idx ON metaschema_modules_public.events_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/function_deployment_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/function_deployment_module/table.sql index 5514f4b9..108507a7 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/function_deployment_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/function_deployment_module/table.sql @@ -78,9 +78,14 @@ CREATE TABLE metaschema_modules_public.function_deployment_module ( CONSTRAINT function_deployment_module_namespace_module_fkey FOREIGN KEY (namespace_module_id) REFERENCES metaschema_modules_public.namespace_module (id) ON DELETE SET NULL ); -CREATE INDEX function_deployment_module_database_id_idx ON metaschema_modules_public.function_deployment_module ( database_id ); - -- Unique constraint: one function deployment module per database per scope (K8s infra: scopes never share). CREATE UNIQUE INDEX function_deployment_module_unique_scope ON metaschema_modules_public.function_deployment_module ( database_id, scope ); +CREATE INDEX function_deployment_module_deployments_table_id_idx ON metaschema_modules_public.function_deployment_module ( deployments_table_id ); +CREATE INDEX function_deployment_module_entity_table_id_idx ON metaschema_modules_public.function_deployment_module ( entity_table_id ); +CREATE INDEX function_deployment_module_deployment_events_table_id_idx ON metaschema_modules_public.function_deployment_module ( deployment_events_table_id ); +CREATE INDEX function_deployment_module_private_schema_id_idx ON metaschema_modules_public.function_deployment_module ( private_schema_id ); +CREATE INDEX function_deployment_module_schema_id_idx ON metaschema_modules_public.function_deployment_module ( schema_id ); +CREATE INDEX function_deployment_module_function_module_id_idx ON metaschema_modules_public.function_deployment_module ( function_module_id ); +CREATE INDEX function_deployment_module_namespace_module_id_idx ON metaschema_modules_public.function_deployment_module ( namespace_module_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/function_invocation_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/function_invocation_module/table.sql index 7aeda770..f2cb10df 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/function_invocation_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/function_invocation_module/table.sql @@ -67,9 +67,13 @@ CREATE TABLE metaschema_modules_public.function_invocation_module ( CONSTRAINT function_invocation_module_entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX function_invocation_module_database_id_idx ON metaschema_modules_public.function_invocation_module ( database_id ); - -- Unique constraint: one function invocation module per database per scope (K8s infra: scopes never share). CREATE UNIQUE INDEX function_invocation_module_unique_scope ON metaschema_modules_public.function_invocation_module ( database_id, scope ); +CREATE INDEX function_invocation_module_attempts_table_id_idx ON metaschema_modules_public.function_invocation_module ( attempts_table_id ); +CREATE INDEX function_invocation_module_entity_table_id_idx ON metaschema_modules_public.function_invocation_module ( entity_table_id ); +CREATE INDEX function_invocation_module_invocations_table_id_idx ON metaschema_modules_public.function_invocation_module ( invocations_table_id ); +CREATE INDEX function_invocation_module_execution_logs_table_id_idx ON metaschema_modules_public.function_invocation_module ( execution_logs_table_id ); +CREATE INDEX function_invocation_module_private_schema_id_idx ON metaschema_modules_public.function_invocation_module ( private_schema_id ); +CREATE INDEX function_invocation_module_schema_id_idx ON metaschema_modules_public.function_invocation_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/function_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/function_module/table.sql index a37d5006..e68d45ff 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/function_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/function_module/table.sql @@ -26,6 +26,10 @@ CREATE TABLE metaschema_modules_public.function_module ( bindings_table_id uuid NOT NULL DEFAULT uuid_nil(), schedules_table_id uuid, + -- Capability bindings table: declarative grants of typed resource + -- capabilities (buckets today) to function/graph holders per lifecycle. + capability_bindings_table_id uuid NULL, + -- Optional cron scheduling support. has_cron boolean NOT NULL DEFAULT false, @@ -74,12 +78,18 @@ CREATE TABLE metaschema_modules_public.function_module ( CONSTRAINT function_module_definitions_table_fkey FOREIGN KEY (definitions_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, CONSTRAINT function_module_bindings_table_fkey FOREIGN KEY (bindings_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, CONSTRAINT function_module_schedules_table_fkey FOREIGN KEY (schedules_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, - CONSTRAINT function_module_entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE + CONSTRAINT function_module_entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, + CONSTRAINT function_module_capability_bindings_table_fkey FOREIGN KEY (capability_bindings_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX function_module_database_id_idx ON metaschema_modules_public.function_module ( database_id ); - -- Unique constraint: one function module per database per scope (K8s infra: scopes never share). CREATE UNIQUE INDEX function_module_unique_scope ON metaschema_modules_public.function_module ( database_id, scope ); +CREATE INDEX function_module_bindings_table_id_idx ON metaschema_modules_public.function_module ( bindings_table_id ); +CREATE INDEX function_module_definitions_table_id_idx ON metaschema_modules_public.function_module ( definitions_table_id ); +CREATE INDEX function_module_entity_table_id_idx ON metaschema_modules_public.function_module ( entity_table_id ); +CREATE INDEX function_module_schedules_table_id_idx ON metaschema_modules_public.function_module ( schedules_table_id ); +CREATE INDEX function_module_capability_bindings_table_id_idx ON metaschema_modules_public.function_module ( capability_bindings_table_id ); +CREATE INDEX function_module_private_schema_id_idx ON metaschema_modules_public.function_module ( private_schema_id ); +CREATE INDEX function_module_schema_id_idx ON metaschema_modules_public.function_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/graph_execution_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/graph_execution_module/table.sql index 3c9027bb..66677cb9 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/graph_execution_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/graph_execution_module/table.sql @@ -80,9 +80,14 @@ CREATE TABLE metaschema_modules_public.graph_execution_module ( CONSTRAINT graph_execution_module_entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX graph_execution_module_database_id_idx ON metaschema_modules_public.graph_execution_module ( database_id ); - -- One execution module per (database, scope) (K8s infra: scopes never share). CREATE UNIQUE INDEX graph_execution_module_unique_scope ON metaschema_modules_public.graph_execution_module ( database_id, scope ); +CREATE INDEX graph_execution_module_entity_table_id_idx ON metaschema_modules_public.graph_execution_module ( entity_table_id ); +CREATE INDEX graph_execution_module_executions_table_id_idx ON metaschema_modules_public.graph_execution_module ( executions_table_id ); +CREATE INDEX graph_execution_module_node_states_table_id_idx ON metaschema_modules_public.graph_execution_module ( node_states_table_id ); +CREATE INDEX graph_execution_module_outputs_table_id_idx ON metaschema_modules_public.graph_execution_module ( outputs_table_id ); +CREATE INDEX graph_execution_module_private_schema_id_idx ON metaschema_modules_public.graph_execution_module ( private_schema_id ); +CREATE INDEX graph_execution_module_schema_id_idx ON metaschema_modules_public.graph_execution_module ( schema_id ); +CREATE INDEX graph_execution_module_graph_module_id_idx ON metaschema_modules_public.graph_execution_module ( graph_module_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/graph_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/graph_module/table.sql index b85902fa..85f0feef 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/graph_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/graph_module/table.sql @@ -72,6 +72,10 @@ CREATE TABLE metaschema_modules_public.graph_module ( CONSTRAINT graph_module_database_merkle_unique UNIQUE (database_id, merkle_store_module_id) ); -CREATE INDEX graph_module_database_id_idx ON metaschema_modules_public.graph_module ( database_id ); +CREATE INDEX graph_module_entity_table_id_idx ON metaschema_modules_public.graph_module ( entity_table_id ); +CREATE INDEX graph_module_graphs_table_id_idx ON metaschema_modules_public.graph_module ( graphs_table_id ); +CREATE INDEX graph_module_private_schema_id_idx ON metaschema_modules_public.graph_module ( private_schema_id ); +CREATE INDEX graph_module_public_schema_id_idx ON metaschema_modules_public.graph_module ( public_schema_id ); +CREATE INDEX graph_module_merkle_store_module_id_idx ON metaschema_modules_public.graph_module ( merkle_store_module_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/hierarchy_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/hierarchy_module/table.sql index 0934f757..0717be66 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/hierarchy_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/hierarchy_module/table.sql @@ -68,6 +68,12 @@ CREATE TABLE metaschema_modules_public.hierarchy_module ( CONSTRAINT hierarchy_module_database_unique UNIQUE (database_id) ); -CREATE INDEX hierarchy_module_database_id_idx ON metaschema_modules_public.hierarchy_module ( database_id ); +CREATE INDEX hierarchy_module_chart_edge_grants_table_id_idx ON metaschema_modules_public.hierarchy_module ( chart_edge_grants_table_id ); +CREATE INDEX hierarchy_module_chart_edges_table_id_idx ON metaschema_modules_public.hierarchy_module ( chart_edges_table_id ); +CREATE INDEX hierarchy_module_entity_table_id_idx ON metaschema_modules_public.hierarchy_module ( entity_table_id ); +CREATE INDEX hierarchy_module_hierarchy_sprt_table_id_idx ON metaschema_modules_public.hierarchy_module ( hierarchy_sprt_table_id ); +CREATE INDEX hierarchy_module_users_table_id_idx ON metaschema_modules_public.hierarchy_module ( users_table_id ); +CREATE INDEX hierarchy_module_private_schema_id_idx ON metaschema_modules_public.hierarchy_module ( private_schema_id ); +CREATE INDEX hierarchy_module_schema_id_idx ON metaschema_modules_public.hierarchy_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/http_route_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/http_route_module/table.sql index 84921d76..d51abb19 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/http_route_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/http_route_module/table.sql @@ -70,10 +70,14 @@ CREATE TABLE metaschema_modules_public.http_route_module ( ON DELETE CASCADE ); -CREATE INDEX http_route_module_database_id_idx - ON metaschema_modules_public.http_route_module (database_id); - CREATE UNIQUE INDEX http_route_module_unique_scope ON metaschema_modules_public.http_route_module (database_id, scope); +CREATE INDEX http_route_module_entity_table_id_idx ON metaschema_modules_public.http_route_module ( entity_table_id ); +CREATE INDEX http_route_module_http_routes_table_id_idx ON metaschema_modules_public.http_route_module ( http_routes_table_id ); +CREATE INDEX http_route_module_private_schema_id_idx ON metaschema_modules_public.http_route_module ( private_schema_id ); +CREATE INDEX http_route_module_schema_id_idx ON metaschema_modules_public.http_route_module ( schema_id ); +CREATE INDEX http_route_module_function_module_id_idx ON metaschema_modules_public.http_route_module ( function_module_id ); +CREATE INDEX http_route_module_resource_module_id_idx ON metaschema_modules_public.http_route_module ( resource_module_id ); +CREATE INDEX http_route_module_storage_module_id_idx ON metaschema_modules_public.http_route_module ( storage_module_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/i18n_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/i18n_module/table.sql index df567812..bf5458c4 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/i18n_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/i18n_module/table.sql @@ -25,7 +25,9 @@ CREATE TABLE metaschema_modules_public.i18n_module ( CONSTRAINT settings_table_fkey FOREIGN KEY (settings_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX i18n_module_database_id_idx ON metaschema_modules_public.i18n_module ( database_id ); CREATE UNIQUE INDEX i18n_module_unique_per_db ON metaschema_modules_public.i18n_module ( database_id ); +CREATE INDEX i18n_module_settings_table_id_idx ON metaschema_modules_public.i18n_module ( settings_table_id ); +CREATE INDEX i18n_module_private_schema_id_idx ON metaschema_modules_public.i18n_module ( private_schema_id ); +CREATE INDEX i18n_module_schema_id_idx ON metaschema_modules_public.i18n_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/identity_providers_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/identity_providers_module/table.sql index 890c6bc1..03ae8850 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/identity_providers_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/identity_providers_module/table.sql @@ -51,13 +51,13 @@ CREATE TABLE metaschema_modules_public.identity_providers_module ( CONSTRAINT entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX identity_providers_module_database_id_idx ON metaschema_modules_public.identity_providers_module ( database_id ); CREATE INDEX identity_providers_module_schema_id_idx ON metaschema_modules_public.identity_providers_module ( schema_id ); CREATE INDEX identity_providers_module_private_schema_id_idx ON metaschema_modules_public.identity_providers_module ( private_schema_id ); CREATE INDEX identity_providers_module_table_id_idx ON metaschema_modules_public.identity_providers_module ( table_id ); -- One install per database per scope CREATE UNIQUE INDEX identity_providers_module_unique_scope ON metaschema_modules_public.identity_providers_module ( database_id, scope ); +CREATE INDEX identity_providers_module_entity_table_id_idx ON metaschema_modules_public.identity_providers_module ( entity_table_id ); COMMENT ON TABLE metaschema_modules_public.identity_providers_module IS 'Entity-aware config row for the identity_providers_module, which provisions a per-database diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/inference_log_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/inference_log_module/table.sql index 1c2cdc16..669da779 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/inference_log_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/inference_log_module/table.sql @@ -53,6 +53,9 @@ CREATE TABLE metaschema_modules_public.inference_log_module ( CONSTRAINT inference_log_module_database_id_prefix_unique UNIQUE NULLS NOT DISTINCT (database_id, prefix) ); -CREATE INDEX inference_log_module_database_id_idx ON metaschema_modules_public.inference_log_module ( database_id ); +CREATE INDEX inference_log_module_inference_log_table_id_idx ON metaschema_modules_public.inference_log_module ( inference_log_table_id ); +CREATE INDEX inference_log_module_usage_summary_table_id_idx ON metaschema_modules_public.inference_log_module ( usage_summary_table_id ); +CREATE INDEX inference_log_module_private_schema_id_idx ON metaschema_modules_public.inference_log_module ( private_schema_id ); +CREATE INDEX inference_log_module_schema_id_idx ON metaschema_modules_public.inference_log_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/infra_config_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/infra_config_module/table.sql index 007ada81..162925c5 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/infra_config_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/infra_config_module/table.sql @@ -55,11 +55,12 @@ CREATE TABLE metaschema_modules_public.infra_config_module ( CONSTRAINT infra_config_module_entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX infra_config_module_database_id_idx ON metaschema_modules_public.infra_config_module ( database_id ); CREATE INDEX infra_config_module_schema_id_idx ON metaschema_modules_public.infra_config_module ( schema_id ); CREATE INDEX infra_config_module_config_table_id_idx ON metaschema_modules_public.infra_config_module ( config_table_id ); CREATE UNIQUE INDEX infra_config_module_unique_scope ON metaschema_modules_public.infra_config_module ( database_id, scope ); +CREATE INDEX infra_config_module_entity_table_id_idx ON metaschema_modules_public.infra_config_module ( entity_table_id ); +CREATE INDEX infra_config_module_private_schema_id_idx ON metaschema_modules_public.infra_config_module ( private_schema_id ); COMMENT ON TABLE metaschema_modules_public.infra_config_module IS 'Namespace-backed plaintext key-value config module. Requires namespace_module and emits namespace:sync_config job triggers for K8s ConfigMap synchronization.'; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/infra_secrets_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/infra_secrets_module/table.sql index f222a2fe..0b375dd1 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/infra_secrets_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/infra_secrets_module/table.sql @@ -56,11 +56,12 @@ CREATE TABLE metaschema_modules_public.infra_secrets_module ( CONSTRAINT infra_secrets_module_entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX infra_secrets_module_database_id_idx ON metaschema_modules_public.infra_secrets_module ( database_id ); CREATE INDEX infra_secrets_module_schema_id_idx ON metaschema_modules_public.infra_secrets_module ( schema_id ); CREATE INDEX infra_secrets_module_secrets_table_id_idx ON metaschema_modules_public.infra_secrets_module ( secrets_table_id ); CREATE UNIQUE INDEX infra_secrets_module_unique_scope ON metaschema_modules_public.infra_secrets_module ( database_id, scope ); +CREATE INDEX infra_secrets_module_entity_table_id_idx ON metaschema_modules_public.infra_secrets_module ( entity_table_id ); +CREATE INDEX infra_secrets_module_private_schema_id_idx ON metaschema_modules_public.infra_secrets_module ( private_schema_id ); COMMENT ON TABLE metaschema_modules_public.infra_secrets_module IS 'Namespace-backed PGP-encrypted key-value secrets module. Requires namespace_module and emits namespace:sync_secrets job triggers for K8s Secret synchronization.'; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/integration_providers_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/integration_providers_module/table.sql index 83d1a992..5dce11e7 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/integration_providers_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/integration_providers_module/table.sql @@ -45,13 +45,13 @@ CREATE TABLE metaschema_modules_public.integration_providers_module ( CONSTRAINT integration_providers_module_entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX integration_providers_module_database_id_idx ON metaschema_modules_public.integration_providers_module ( database_id ); CREATE INDEX integration_providers_module_schema_id_idx ON metaschema_modules_public.integration_providers_module ( schema_id ); CREATE INDEX integration_providers_module_private_schema_id_idx ON metaschema_modules_public.integration_providers_module ( private_schema_id ); CREATE INDEX integration_providers_module_table_id_idx ON metaschema_modules_public.integration_providers_module ( table_id ); -- One install per database per scope (prefix distinguishes multiple instances) CREATE UNIQUE INDEX integration_providers_module_unique_scope ON metaschema_modules_public.integration_providers_module ( database_id, scope, prefix ); +CREATE INDEX integration_providers_module_entity_table_id_idx ON metaschema_modules_public.integration_providers_module ( entity_table_id ); COMMENT ON TABLE metaschema_modules_public.integration_providers_module IS 'Config row for the integration_providers_module, which provisions a per-database diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/internal_secrets_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/internal_secrets_module/table.sql index 01b6cd48..f26c6fc7 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/internal_secrets_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/internal_secrets_module/table.sql @@ -56,11 +56,12 @@ CREATE TABLE metaschema_modules_public.internal_secrets_module ( CONSTRAINT internal_secrets_module_entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX internal_secrets_module_database_id_idx ON metaschema_modules_public.internal_secrets_module ( database_id ); CREATE INDEX internal_secrets_module_schema_id_idx ON metaschema_modules_public.internal_secrets_module ( schema_id ); CREATE INDEX internal_secrets_module_internal_secrets_table_id_idx ON metaschema_modules_public.internal_secrets_module ( internal_secrets_table_id ); CREATE UNIQUE INDEX internal_secrets_module_unique_scope ON metaschema_modules_public.internal_secrets_module ( database_id, scope ); +CREATE INDEX internal_secrets_module_entity_table_id_idx ON metaschema_modules_public.internal_secrets_module ( entity_table_id ); +CREATE INDEX internal_secrets_module_private_schema_id_idx ON metaschema_modules_public.internal_secrets_module ( private_schema_id ); COMMENT ON TABLE metaschema_modules_public.internal_secrets_module IS 'App-scoped PGP-encrypted internal secrets store. No namespace_module dependency and no K8s synchronization. Used by identity_providers_module for OAuth2 client_secret storage.'; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/invites_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/invites_module/table.sql index 49e31842..e6334bbc 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/invites_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/invites_module/table.sql @@ -54,10 +54,15 @@ CREATE TABLE metaschema_modules_public.invites_module ( CONSTRAINT pschema_fkey FOREIGN KEY (private_schema_id) REFERENCES metaschema_public.schema (id) ON DELETE CASCADE ); -CREATE INDEX invites_module_database_id_idx ON metaschema_modules_public.invites_module ( database_id ); - -- Unique constraint: one invites module per database per scope per prefix. CREATE UNIQUE INDEX invites_module_unique_scope ON metaschema_modules_public.invites_module (database_id, scope, prefix); +CREATE INDEX invites_module_claimed_invites_table_id_idx ON metaschema_modules_public.invites_module ( claimed_invites_table_id ); +CREATE INDEX invites_module_emails_table_id_idx ON metaschema_modules_public.invites_module ( emails_table_id ); +CREATE INDEX invites_module_entity_table_id_idx ON metaschema_modules_public.invites_module ( entity_table_id ); +CREATE INDEX invites_module_invites_table_id_idx ON metaschema_modules_public.invites_module ( invites_table_id ); +CREATE INDEX invites_module_users_table_id_idx ON metaschema_modules_public.invites_module ( users_table_id ); +CREATE INDEX invites_module_private_schema_id_idx ON metaschema_modules_public.invites_module ( private_schema_id ); +CREATE INDEX invites_module_schema_id_idx ON metaschema_modules_public.invites_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/limits_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/limits_module/table.sql index 8a7150cf..c8dd2326 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/limits_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/limits_module/table.sql @@ -107,5 +107,21 @@ CREATE TABLE metaschema_modules_public.limits_module ( ); CREATE INDEX limits_module_database_id_idx ON metaschema_modules_public.limits_module ( database_id ); +CREATE INDEX limits_module_actor_table_id_idx ON metaschema_modules_public.limits_module ( actor_table_id ); +CREATE INDEX limits_module_aggregate_table_id_idx ON metaschema_modules_public.limits_module ( aggregate_table_id ); +CREATE INDEX limits_module_credit_code_items_table_id_idx ON metaschema_modules_public.limits_module ( credit_code_items_table_id ); +CREATE INDEX limits_module_credit_codes_table_id_idx ON metaschema_modules_public.limits_module ( credit_codes_table_id ); +CREATE INDEX limits_module_credit_redemptions_table_id_idx ON metaschema_modules_public.limits_module ( credit_redemptions_table_id ); +CREATE INDEX limits_module_default_table_id_idx ON metaschema_modules_public.limits_module ( default_table_id ); +CREATE INDEX limits_module_entity_table_id_idx ON metaschema_modules_public.limits_module ( entity_table_id ); +CREATE INDEX limits_module_events_table_id_idx ON metaschema_modules_public.limits_module ( events_table_id ); +CREATE INDEX limits_module_limit_caps_defaults_table_id_idx ON metaschema_modules_public.limits_module ( limit_caps_defaults_table_id ); +CREATE INDEX limits_module_limit_caps_table_id_idx ON metaschema_modules_public.limits_module ( limit_caps_table_id ); +CREATE INDEX limits_module_limit_credits_table_id_idx ON metaschema_modules_public.limits_module ( limit_credits_table_id ); +CREATE INDEX limits_module_limit_warning_state_table_id_idx ON metaschema_modules_public.limits_module ( limit_warning_state_table_id ); +CREATE INDEX limits_module_limit_warnings_table_id_idx ON metaschema_modules_public.limits_module ( limit_warnings_table_id ); +CREATE INDEX limits_module_table_id_idx ON metaschema_modules_public.limits_module ( table_id ); +CREATE INDEX limits_module_private_schema_id_idx ON metaschema_modules_public.limits_module ( private_schema_id ); +CREATE INDEX limits_module_schema_id_idx ON metaschema_modules_public.limits_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/membership_types_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/membership_types_module/table.sql index dc5c8a6f..efc1dd76 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/membership_types_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/membership_types_module/table.sql @@ -21,5 +21,7 @@ CREATE TABLE metaschema_modules_public.membership_types_module ( ); CREATE INDEX membership_types_module_database_id_idx ON metaschema_modules_public.membership_types_module ( database_id ); +CREATE INDEX membership_types_module_table_id_idx ON metaschema_modules_public.membership_types_module ( table_id ); +CREATE INDEX membership_types_module_schema_id_idx ON metaschema_modules_public.membership_types_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/memberships_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/memberships_module/table.sql index 33d2b1f7..edccf1ba 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/memberships_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/memberships_module/table.sql @@ -104,6 +104,20 @@ CREATE TABLE metaschema_modules_public.memberships_module ( CONSTRAINT memberships_module_unique UNIQUE (database_id, scope, prefix) ); -CREATE INDEX memberships_module_database_id_idx ON metaschema_modules_public.memberships_module ( database_id ); +CREATE INDEX memberships_module_actor_table_id_idx ON metaschema_modules_public.memberships_module ( actor_table_id ); +CREATE INDEX memberships_module_default_limits_table_id_idx ON metaschema_modules_public.memberships_module ( default_limits_table_id ); +CREATE INDEX memberships_module_default_permissions_table_id_idx ON metaschema_modules_public.memberships_module ( default_permissions_table_id ); +CREATE INDEX memberships_module_entity_table_id_idx ON metaschema_modules_public.memberships_module ( entity_table_id ); +CREATE INDEX memberships_module_grants_table_id_idx ON metaschema_modules_public.memberships_module ( grants_table_id ); +CREATE INDEX memberships_module_limits_table_id_idx ON metaschema_modules_public.memberships_module ( limits_table_id ); +CREATE INDEX memberships_module_members_table_id_idx ON metaschema_modules_public.memberships_module ( members_table_id ); +CREATE INDEX memberships_module_membership_defaults_table_id_idx ON metaschema_modules_public.memberships_module ( membership_defaults_table_id ); +CREATE INDEX memberships_module_membership_settings_table_id_idx ON metaschema_modules_public.memberships_module ( membership_settings_table_id ); +CREATE INDEX memberships_module_memberships_table_id_idx ON metaschema_modules_public.memberships_module ( memberships_table_id ); +CREATE INDEX memberships_module_permissions_table_id_idx ON metaschema_modules_public.memberships_module ( permissions_table_id ); +CREATE INDEX memberships_module_sprt_table_id_idx ON metaschema_modules_public.memberships_module ( sprt_table_id ); +CREATE INDEX memberships_module_private_schema_id_idx ON metaschema_modules_public.memberships_module ( private_schema_id ); +CREATE INDEX memberships_module_schema_id_idx ON metaschema_modules_public.memberships_module ( schema_id ); +CREATE INDEX memberships_module_entity_table_owner_id_idx ON metaschema_modules_public.memberships_module ( entity_table_owner_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/merkle_store_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/merkle_store_module/table.sql index 57b9e32b..d8b1ba43 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/merkle_store_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/merkle_store_module/table.sql @@ -65,7 +65,11 @@ CREATE TABLE metaschema_modules_public.merkle_store_module ( CONSTRAINT merkle_store_module_database_prefix_unique UNIQUE (database_id, prefix) ); -CREATE INDEX merkle_store_module_database_id_idx ON metaschema_modules_public.merkle_store_module ( database_id ); CREATE INDEX merkle_store_module_private_schema_id_idx ON metaschema_modules_public.merkle_store_module ( private_schema_id ); +CREATE INDEX merkle_store_module_commit_table_id_idx ON metaschema_modules_public.merkle_store_module ( commit_table_id ); +CREATE INDEX merkle_store_module_object_table_id_idx ON metaschema_modules_public.merkle_store_module ( object_table_id ); +CREATE INDEX merkle_store_module_ref_table_id_idx ON metaschema_modules_public.merkle_store_module ( ref_table_id ); +CREATE INDEX merkle_store_module_store_table_id_idx ON metaschema_modules_public.merkle_store_module ( store_table_id ); +CREATE INDEX merkle_store_module_schema_id_idx ON metaschema_modules_public.merkle_store_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/namespace_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/namespace_module/table.sql index 71b70908..43ca357b 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/namespace_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/namespace_module/table.sql @@ -69,9 +69,12 @@ CREATE TABLE metaschema_modules_public.namespace_module ( CONSTRAINT namespace_module_entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX namespace_module_database_id_idx ON metaschema_modules_public.namespace_module ( database_id ); - -- Unique constraint: one namespace module per database per scope (K8s infra: scopes never share). CREATE UNIQUE INDEX namespace_module_unique_scope ON metaschema_modules_public.namespace_module ( database_id, scope ); +CREATE INDEX namespace_module_entity_table_id_idx ON metaschema_modules_public.namespace_module ( entity_table_id ); +CREATE INDEX namespace_module_namespace_events_table_id_idx ON metaschema_modules_public.namespace_module ( namespace_events_table_id ); +CREATE INDEX namespace_module_namespaces_table_id_idx ON metaschema_modules_public.namespace_module ( namespaces_table_id ); +CREATE INDEX namespace_module_private_schema_id_idx ON metaschema_modules_public.namespace_module ( private_schema_id ); +CREATE INDEX namespace_module_schema_id_idx ON metaschema_modules_public.namespace_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/notifications_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/notifications_module/table.sql index 29a0f3c0..ed893a39 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/notifications_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/notifications_module/table.sql @@ -68,18 +68,29 @@ CREATE TABLE metaschema_modules_public.notifications_module ( CONSTRAINT private_schema_fkey FOREIGN KEY (private_schema_id) REFERENCES metaschema_public.schema (id) ON DELETE CASCADE ); -COMMENT ON CONSTRAINT schema_fkey ON metaschema_modules_public.notifications_module IS E'@omit manyToMany'; -COMMENT ON CONSTRAINT private_schema_fkey ON metaschema_modules_public.notifications_module IS E'@omit manyToMany'; -COMMENT ON CONSTRAINT notifications_table_fkey ON metaschema_modules_public.notifications_module IS E'@fieldName notificationsTableByNotificationsTableId\n@omit manyToMany'; -COMMENT ON CONSTRAINT read_state_table_fkey ON metaschema_modules_public.notifications_module IS E'@fieldName readStateTableByReadStateTableId\n@omit manyToMany'; -COMMENT ON CONSTRAINT preferences_table_fkey ON metaschema_modules_public.notifications_module IS E'@fieldName preferencesTableByPreferencesTableId\n@omit manyToMany'; -COMMENT ON CONSTRAINT channels_table_fkey ON metaschema_modules_public.notifications_module IS E'@fieldName channelsTableByChannelsTableId\n@omit manyToMany'; -COMMENT ON CONSTRAINT delivery_log_table_fkey ON metaschema_modules_public.notifications_module IS E'@fieldName deliveryLogTableByDeliveryLogTableId\n@omit manyToMany'; +COMMENT ON CONSTRAINT schema_fkey ON metaschema_modules_public.notifications_module IS E'@behavior -manyToMany'; +COMMENT ON CONSTRAINT private_schema_fkey ON metaschema_modules_public.notifications_module IS E'@behavior -manyToMany'; +COMMENT ON CONSTRAINT notifications_table_fkey ON metaschema_modules_public.notifications_module IS E'@fieldName notificationsTableByNotificationsTableId\n@behavior -manyToMany'; +COMMENT ON CONSTRAINT read_state_table_fkey ON metaschema_modules_public.notifications_module IS E'@fieldName readStateTableByReadStateTableId\n@behavior -manyToMany'; +COMMENT ON CONSTRAINT preferences_table_fkey ON metaschema_modules_public.notifications_module IS E'@fieldName preferencesTableByPreferencesTableId\n@behavior -manyToMany'; +COMMENT ON CONSTRAINT channels_table_fkey ON metaschema_modules_public.notifications_module IS E'@fieldName channelsTableByChannelsTableId\n@behavior -manyToMany'; +COMMENT ON CONSTRAINT delivery_log_table_fkey ON metaschema_modules_public.notifications_module IS E'@fieldName deliveryLogTableByDeliveryLogTableId\n@behavior -manyToMany'; COMMENT ON CONSTRAINT suppressions_table_fkey ON metaschema_modules_public.notifications_module IS E'@fieldName suppressionsTableBySuppressionsTableId'; -COMMENT ON CONSTRAINT owner_table_fkey ON metaschema_modules_public.notifications_module IS E'@omit manyToMany'; -COMMENT ON CONSTRAINT user_settings_table_fkey ON metaschema_modules_public.notifications_module IS E'@fieldName userSettingsTableByUserSettingsTableId\n@omit manyToMany'; -COMMENT ON CONSTRAINT organization_settings_table_fkey ON metaschema_modules_public.notifications_module IS E'@fieldName organizationSettingsTableByOrganizationSettingsTableId\n@omit manyToMany'; -COMMENT ON CONSTRAINT db_fkey ON metaschema_modules_public.notifications_module IS E'@omit manyToMany'; +COMMENT ON CONSTRAINT owner_table_fkey ON metaschema_modules_public.notifications_module IS E'@behavior -manyToMany'; +COMMENT ON CONSTRAINT user_settings_table_fkey ON metaschema_modules_public.notifications_module IS E'@fieldName userSettingsTableByUserSettingsTableId\n@behavior -manyToMany'; +COMMENT ON CONSTRAINT organization_settings_table_fkey ON metaschema_modules_public.notifications_module IS E'@fieldName organizationSettingsTableByOrganizationSettingsTableId\n@behavior -manyToMany'; +COMMENT ON CONSTRAINT db_fkey ON metaschema_modules_public.notifications_module IS E'@behavior -manyToMany'; CREATE INDEX notifications_module_database_id_idx ON metaschema_modules_public.notifications_module ( database_id ); +CREATE INDEX notifications_module_channels_table_id_idx ON metaschema_modules_public.notifications_module ( channels_table_id ); +CREATE INDEX notifications_module_delivery_log_table_id_idx ON metaschema_modules_public.notifications_module ( delivery_log_table_id ); +CREATE INDEX notifications_module_notifications_table_id_idx ON metaschema_modules_public.notifications_module ( notifications_table_id ); +CREATE INDEX notifications_module_organization_settings_table_id_idx ON metaschema_modules_public.notifications_module ( organization_settings_table_id ); +CREATE INDEX notifications_module_owner_table_id_idx ON metaschema_modules_public.notifications_module ( owner_table_id ); +CREATE INDEX notifications_module_preferences_table_id_idx ON metaschema_modules_public.notifications_module ( preferences_table_id ); +CREATE INDEX notifications_module_read_state_table_id_idx ON metaschema_modules_public.notifications_module ( read_state_table_id ); +CREATE INDEX notifications_module_suppressions_table_id_idx ON metaschema_modules_public.notifications_module ( suppressions_table_id ); +CREATE INDEX notifications_module_user_settings_table_id_idx ON metaschema_modules_public.notifications_module ( user_settings_table_id ); +CREATE INDEX notifications_module_private_schema_id_idx ON metaschema_modules_public.notifications_module ( private_schema_id ); +CREATE INDEX notifications_module_schema_id_idx ON metaschema_modules_public.notifications_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/pages_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/pages_module/table.sql new file mode 100644 index 00000000..6eba4c31 --- /dev/null +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/pages_module/table.sql @@ -0,0 +1,62 @@ +-- Deploy schemas/metaschema_modules_public/tables/pages_module/table to pg + +-- requires: schemas/metaschema_modules_public/schema +-- requires: schemas/metaschema_modules_public/tables/merkle_store_module/table +-- requires: schemas/metaschema_modules_public/tables/site_surface_module/table + +BEGIN; + +CREATE TABLE metaschema_modules_public.pages_module ( + id uuid PRIMARY KEY DEFAULT uuidv7(), + database_id uuid NOT NULL, + public_schema_id uuid NOT NULL DEFAULT uuid_nil(), + private_schema_id uuid NOT NULL DEFAULT uuid_nil(), + public_schema_name text, + private_schema_name text, + scope text NOT NULL, + prefix text NOT NULL, + + -- Backing merkle store (reused, never a new store per the pages spec) + merkle_store_module_id uuid NOT NULL, + + -- Site surface whose sites table the pages head FKs into (resolved from the + -- same-database/scope site_surface_module by the insert trigger when NULL). + site_surface_module_id uuid, + -- Resolved sites table id (site_id FK target), populated by the trigger. + sites_table_id uuid NOT NULL DEFAULT uuid_nil(), + + -- Generated head table id (populated by the generator) + pages_table_id uuid NOT NULL DEFAULT uuid_nil(), + + -- Per-site store-row name prefix inside the reused Merkle store tables: + -- the actual store name is || site_id (one store per + -- site). The store holds ALL of the site's versioned content — pages, + -- metadata, themes — so it is named for the site, not for pages. + store_name_prefix text NOT NULL DEFAULT 'site:', + + api_name text, + private_api_name text, + entity_table_id uuid NULL, + policies jsonb NULL, + provisions jsonb NULL, + created_at timestamptz NOT NULL DEFAULT now(), + CONSTRAINT pages_module_db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE, + CONSTRAINT pages_module_public_schema_fkey FOREIGN KEY (public_schema_id) REFERENCES metaschema_public.schema (id) ON DELETE CASCADE, + CONSTRAINT pages_module_private_schema_fkey FOREIGN KEY (private_schema_id) REFERENCES metaschema_public.schema (id) ON DELETE CASCADE, + CONSTRAINT pages_module_merkle_store_fkey FOREIGN KEY (merkle_store_module_id) REFERENCES metaschema_modules_public.merkle_store_module (id) ON DELETE CASCADE, + CONSTRAINT pages_module_site_surface_fkey FOREIGN KEY (site_surface_module_id) REFERENCES metaschema_modules_public.site_surface_module (id) ON DELETE CASCADE, + CONSTRAINT pages_module_sites_table_fkey FOREIGN KEY (sites_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, + CONSTRAINT pages_module_pages_table_fkey FOREIGN KEY (pages_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, + CONSTRAINT pages_module_entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, + CONSTRAINT pages_module_database_scope_unique UNIQUE (database_id, scope) +); + +CREATE INDEX pages_module_entity_table_id_idx ON metaschema_modules_public.pages_module ( entity_table_id ); +CREATE INDEX pages_module_pages_table_id_idx ON metaschema_modules_public.pages_module ( pages_table_id ); +CREATE INDEX pages_module_sites_table_id_idx ON metaschema_modules_public.pages_module ( sites_table_id ); +CREATE INDEX pages_module_site_surface_module_id_idx ON metaschema_modules_public.pages_module ( site_surface_module_id ); +CREATE INDEX pages_module_private_schema_id_idx ON metaschema_modules_public.pages_module ( private_schema_id ); +CREATE INDEX pages_module_public_schema_id_idx ON metaschema_modules_public.pages_module ( public_schema_id ); +CREATE INDEX pages_module_merkle_store_module_id_idx ON metaschema_modules_public.pages_module ( merkle_store_module_id ); + +COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/permissions_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/permissions_module/table.sql index 185a5686..ab71cf2d 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/permissions_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/permissions_module/table.sql @@ -87,5 +87,11 @@ CREATE TABLE metaschema_modules_public.permissions_module ( ); CREATE INDEX permissions_module_database_id_idx ON metaschema_modules_public.permissions_module ( database_id ); +CREATE INDEX permissions_module_actor_table_id_idx ON metaschema_modules_public.permissions_module ( actor_table_id ); +CREATE INDEX permissions_module_default_table_id_idx ON metaschema_modules_public.permissions_module ( default_table_id ); +CREATE INDEX permissions_module_entity_table_id_idx ON metaschema_modules_public.permissions_module ( entity_table_id ); +CREATE INDEX permissions_module_table_id_idx ON metaschema_modules_public.permissions_module ( table_id ); +CREATE INDEX permissions_module_private_schema_id_idx ON metaschema_modules_public.permissions_module ( private_schema_id ); +CREATE INDEX permissions_module_schema_id_idx ON metaschema_modules_public.permissions_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/phone_numbers_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/phone_numbers_module/table.sql index 35db3eb8..6b73cc13 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/phone_numbers_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/phone_numbers_module/table.sql @@ -29,5 +29,9 @@ CREATE TABLE metaschema_modules_public.phone_numbers_module ( ); CREATE INDEX phone_numbers_module_database_id_idx ON metaschema_modules_public.phone_numbers_module ( database_id ); +CREATE INDEX phone_numbers_module_owner_table_id_idx ON metaschema_modules_public.phone_numbers_module ( owner_table_id ); +CREATE INDEX phone_numbers_module_table_id_idx ON metaschema_modules_public.phone_numbers_module ( table_id ); +CREATE INDEX phone_numbers_module_private_schema_id_idx ON metaschema_modules_public.phone_numbers_module ( private_schema_id ); +CREATE INDEX phone_numbers_module_schema_id_idx ON metaschema_modules_public.phone_numbers_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/plans_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/plans_module/table.sql index 80b9e921..d3466116 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/plans_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/plans_module/table.sql @@ -61,6 +61,13 @@ CREATE TABLE metaschema_modules_public.plans_module ( CONSTRAINT plans_module_database_id_unique UNIQUE (database_id) ); -CREATE INDEX plans_module_database_id_idx ON metaschema_modules_public.plans_module ( database_id ); +CREATE INDEX plans_module_plan_caps_table_id_idx ON metaschema_modules_public.plans_module ( plan_caps_table_id ); +CREATE INDEX plans_module_plan_limits_table_id_idx ON metaschema_modules_public.plans_module ( plan_limits_table_id ); +CREATE INDEX plans_module_plan_meter_limits_table_id_idx ON metaschema_modules_public.plans_module ( plan_meter_limits_table_id ); +CREATE INDEX plans_module_plan_overrides_table_id_idx ON metaschema_modules_public.plans_module ( plan_overrides_table_id ); +CREATE INDEX plans_module_plan_pricing_table_id_idx ON metaschema_modules_public.plans_module ( plan_pricing_table_id ); +CREATE INDEX plans_module_plans_table_id_idx ON metaschema_modules_public.plans_module ( plans_table_id ); +CREATE INDEX plans_module_private_schema_id_idx ON metaschema_modules_public.plans_module ( private_schema_id ); +CREATE INDEX plans_module_schema_id_idx ON metaschema_modules_public.plans_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/principal_auth_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/principal_auth_module/table.sql index 904d54cd..0a4474bd 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/principal_auth_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/principal_auth_module/table.sql @@ -41,17 +41,23 @@ CREATE TABLE metaschema_modules_public.principal_auth_module ( ); CREATE INDEX principal_auth_module_database_id_idx ON metaschema_modules_public.principal_auth_module ( database_id ); +CREATE INDEX principal_auth_module_principal_entities_table_id_idx ON metaschema_modules_public.principal_auth_module ( principal_entities_table_id ); +CREATE INDEX principal_auth_module_principals_table_id_idx ON metaschema_modules_public.principal_auth_module ( principals_table_id ); +CREATE INDEX principal_auth_module_session_credentials_table_id_idx ON metaschema_modules_public.principal_auth_module ( session_credentials_table_id ); +CREATE INDEX principal_auth_module_sessions_table_id_idx ON metaschema_modules_public.principal_auth_module ( sessions_table_id ); +CREATE INDEX principal_auth_module_users_table_id_idx ON metaschema_modules_public.principal_auth_module ( users_table_id ); +CREATE INDEX principal_auth_module_schema_id_idx ON metaschema_modules_public.principal_auth_module ( schema_id ); COMMENT ON CONSTRAINT principals_table_fkey - ON metaschema_modules_public.principal_auth_module IS E'@omit'; + ON metaschema_modules_public.principal_auth_module IS E'@behavior -*'; COMMENT ON CONSTRAINT users_table_fkey - ON metaschema_modules_public.principal_auth_module IS E'@omit'; + ON metaschema_modules_public.principal_auth_module IS E'@behavior -*'; COMMENT ON CONSTRAINT sessions_table_fkey - ON metaschema_modules_public.principal_auth_module IS E'@omit'; + ON metaschema_modules_public.principal_auth_module IS E'@behavior -*'; COMMENT ON CONSTRAINT session_credentials_table_fkey - ON metaschema_modules_public.principal_auth_module IS E'@omit'; + ON metaschema_modules_public.principal_auth_module IS E'@behavior -*'; COMMENT ON CONSTRAINT principal_entities_table_fkey - ON metaschema_modules_public.principal_auth_module IS E'@omit'; + ON metaschema_modules_public.principal_auth_module IS E'@behavior -*'; COMMENT ON TABLE metaschema_modules_public.principal_auth_module IS 'Provisions the principals subsystem: a principals table, a principal_entities junction table, create/delete mutations, and org API key management. Supports both human-owned principals (AuthzDirectOwner, AuthzHumanOnly) and org-owned principals (AuthzEntityMembership with is_admin). Org principal and org API key functions are only generated when an org-scoped memberships_module exists for the database.'; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/profiles_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/profiles_module/table.sql index e155fd89..4226861c 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/profiles_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/profiles_module/table.sql @@ -75,6 +75,16 @@ CREATE TABLE metaschema_modules_public.profiles_module ( CONSTRAINT profiles_module_unique UNIQUE (database_id, scope, prefix) ); -CREATE INDEX profiles_module_database_id_idx ON metaschema_modules_public.profiles_module ( database_id ); +CREATE INDEX profiles_module_actor_table_id_idx ON metaschema_modules_public.profiles_module ( actor_table_id ); +CREATE INDEX profiles_module_entity_table_id_idx ON metaschema_modules_public.profiles_module ( entity_table_id ); +CREATE INDEX profiles_module_memberships_table_id_idx ON metaschema_modules_public.profiles_module ( memberships_table_id ); +CREATE INDEX profiles_module_permissions_table_id_idx ON metaschema_modules_public.profiles_module ( permissions_table_id ); +CREATE INDEX profiles_module_profile_definition_grants_table_id_idx ON metaschema_modules_public.profiles_module ( profile_definition_grants_table_id ); +CREATE INDEX profiles_module_profile_grants_table_id_idx ON metaschema_modules_public.profiles_module ( profile_grants_table_id ); +CREATE INDEX profiles_module_profile_permissions_table_id_idx ON metaschema_modules_public.profiles_module ( profile_permissions_table_id ); +CREATE INDEX profiles_module_profile_templates_table_id_idx ON metaschema_modules_public.profiles_module ( profile_templates_table_id ); +CREATE INDEX profiles_module_table_id_idx ON metaschema_modules_public.profiles_module ( table_id ); +CREATE INDEX profiles_module_private_schema_id_idx ON metaschema_modules_public.profiles_module ( private_schema_id ); +CREATE INDEX profiles_module_schema_id_idx ON metaschema_modules_public.profiles_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/rate_limit_meters_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/rate_limit_meters_module/table.sql index b9a9ec46..36fe9fcf 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/rate_limit_meters_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/rate_limit_meters_module/table.sql @@ -51,8 +51,6 @@ CREATE TABLE metaschema_modules_public.rate_limit_meters_module ( CONSTRAINT rate_limit_meters_module_database_id_unique UNIQUE (database_id) ); -CREATE INDEX rate_limit_meters_module_database_id_idx ON metaschema_modules_public.rate_limit_meters_module ( database_id ); - COMMENT ON CONSTRAINT rate_limit_state_table_fkey ON metaschema_modules_public.rate_limit_meters_module IS E'@fieldName rateLimitStateTableByRateLimitStateTableId'; COMMENT ON CONSTRAINT rate_limit_overrides_table_fkey @@ -60,4 +58,10 @@ COMMENT ON CONSTRAINT rate_limit_overrides_table_fkey COMMENT ON CONSTRAINT rate_window_limits_table_fkey ON metaschema_modules_public.rate_limit_meters_module IS E'@fieldName rateWindowLimitsTableByRateWindowLimitsTableId'; +CREATE INDEX rate_limit_meters_module_rate_limit_overrides_table_id_idx ON metaschema_modules_public.rate_limit_meters_module ( rate_limit_overrides_table_id ); +CREATE INDEX rate_limit_meters_module_rate_limit_state_table_id_idx ON metaschema_modules_public.rate_limit_meters_module ( rate_limit_state_table_id ); +CREATE INDEX rate_limit_meters_module_rate_window_limits_table_id_idx ON metaschema_modules_public.rate_limit_meters_module ( rate_window_limits_table_id ); +CREATE INDEX rate_limit_meters_module_private_schema_id_idx ON metaschema_modules_public.rate_limit_meters_module ( private_schema_id ); +CREATE INDEX rate_limit_meters_module_schema_id_idx ON metaschema_modules_public.rate_limit_meters_module ( schema_id ); + COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/rate_limits_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/rate_limits_module/table.sql index e99b0fe8..72a0cd20 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/rate_limits_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/rate_limits_module/table.sql @@ -29,8 +29,6 @@ CREATE TABLE metaschema_modules_public.rate_limits_module ( CONSTRAINT rate_limits_module_database_id_uniq UNIQUE(database_id) ); -CREATE INDEX rate_limits_module_database_id_idx ON metaschema_modules_public.rate_limits_module ( database_id ); - COMMENT ON CONSTRAINT rate_limit_settings_table_fkey ON metaschema_modules_public.rate_limits_module IS E'@fieldName rateLimitSettingsTableByRateLimitSettingsTableId'; COMMENT ON CONSTRAINT ip_rate_limits_table_fkey @@ -38,4 +36,9 @@ COMMENT ON CONSTRAINT ip_rate_limits_table_fkey COMMENT ON CONSTRAINT rate_limits_table_fkey ON metaschema_modules_public.rate_limits_module IS E'@fieldName rateLimitsTableByRateLimitsTableId'; +CREATE INDEX rate_limits_module_ip_rate_limits_table_id_idx ON metaschema_modules_public.rate_limits_module ( ip_rate_limits_table_id ); +CREATE INDEX rate_limits_module_rate_limit_settings_table_id_idx ON metaschema_modules_public.rate_limits_module ( rate_limit_settings_table_id ); +CREATE INDEX rate_limits_module_rate_limits_table_id_idx ON metaschema_modules_public.rate_limits_module ( rate_limits_table_id ); +CREATE INDEX rate_limits_module_schema_id_idx ON metaschema_modules_public.rate_limits_module ( schema_id ); + COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/realtime_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/realtime_module/table.sql index 41973324..3a56ae48 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/realtime_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/realtime_module/table.sql @@ -40,7 +40,6 @@ CREATE TABLE metaschema_modules_public.realtime_module ( CONSTRAINT source_registry_table_fkey FOREIGN KEY (source_registry_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX realtime_module_database_id_idx ON metaschema_modules_public.realtime_module ( database_id ); CREATE UNIQUE INDEX realtime_module_unique_per_db ON metaschema_modules_public.realtime_module ( database_id ); CREATE INDEX realtime_module_schema_id_idx ON metaschema_modules_public.realtime_module ( schema_id ); CREATE INDEX realtime_module_private_schema_id_idx ON metaschema_modules_public.realtime_module ( private_schema_id ); diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/resource_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/resource_module/table.sql index 4168e825..888f1666 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/resource_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/resource_module/table.sql @@ -104,9 +104,19 @@ CREATE TABLE metaschema_modules_public.resource_module ( CONSTRAINT resource_module_namespace_module_fkey FOREIGN KEY (namespace_module_id) REFERENCES metaschema_modules_public.namespace_module (id) ON DELETE SET NULL ); -CREATE INDEX resource_module_database_id_idx ON metaschema_modules_public.resource_module ( database_id ); - -- Unique constraint: one resource module per database per scope (K8s infra: scopes never share). CREATE UNIQUE INDEX resource_module_unique_scope ON metaschema_modules_public.resource_module ( database_id, scope ); +CREATE INDEX resource_module_resource_definitions_table_id_idx ON metaschema_modules_public.resource_module ( resource_definitions_table_id ); +CREATE INDEX resource_module_entity_table_id_idx ON metaschema_modules_public.resource_module ( entity_table_id ); +CREATE INDEX resource_module_resource_events_table_id_idx ON metaschema_modules_public.resource_module ( resource_events_table_id ); +CREATE INDEX resource_module_resource_installations_table_id_idx ON metaschema_modules_public.resource_module ( resource_installations_table_id ); +CREATE INDEX resource_module_resources_table_id_idx ON metaschema_modules_public.resource_module ( resources_table_id ); +CREATE INDEX resource_module_resource_status_checks_table_id_idx ON metaschema_modules_public.resource_module ( resource_status_checks_table_id ); +CREATE INDEX resource_module_resource_usage_log_table_id_idx ON metaschema_modules_public.resource_module ( resource_usage_log_table_id ); +CREATE INDEX resource_module_resource_usage_summary_table_id_idx ON metaschema_modules_public.resource_module ( resource_usage_summary_table_id ); +CREATE INDEX resource_module_private_schema_id_idx ON metaschema_modules_public.resource_module ( private_schema_id ); +CREATE INDEX resource_module_schema_id_idx ON metaschema_modules_public.resource_module ( schema_id ); +CREATE INDEX resource_module_merkle_store_module_id_idx ON metaschema_modules_public.resource_module ( merkle_store_module_id ); +CREATE INDEX resource_module_namespace_module_id_idx ON metaschema_modules_public.resource_module ( namespace_module_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/rls_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/rls_module/table.sql index d518bf3f..ea942ef5 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/rls_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/rls_module/table.sql @@ -38,10 +38,15 @@ CREATE TABLE metaschema_modules_public.rls_module ( ); -COMMENT ON CONSTRAINT db_fkey ON metaschema_modules_public.rls_module IS E'@omit'; -COMMENT ON CONSTRAINT session_credentials_table_fkey ON metaschema_modules_public.rls_module IS E'@omit'; -COMMENT ON CONSTRAINT sessions_table_fkey ON metaschema_modules_public.rls_module IS E'@omit'; -COMMENT ON CONSTRAINT users_table_fkey ON metaschema_modules_public.rls_module IS E'@omit'; -CREATE INDEX rls_module_database_id_idx ON metaschema_modules_public.rls_module ( database_id ); +COMMENT ON CONSTRAINT db_fkey ON metaschema_modules_public.rls_module IS E'@behavior -*'; +COMMENT ON CONSTRAINT session_credentials_table_fkey ON metaschema_modules_public.rls_module IS E'@behavior -*'; +COMMENT ON CONSTRAINT sessions_table_fkey ON metaschema_modules_public.rls_module IS E'@behavior -*'; +COMMENT ON CONSTRAINT users_table_fkey ON metaschema_modules_public.rls_module IS E'@behavior -*'; + +CREATE INDEX rls_module_session_credentials_table_id_idx ON metaschema_modules_public.rls_module ( session_credentials_table_id ); +CREATE INDEX rls_module_sessions_table_id_idx ON metaschema_modules_public.rls_module ( sessions_table_id ); +CREATE INDEX rls_module_users_table_id_idx ON metaschema_modules_public.rls_module ( users_table_id ); +CREATE INDEX rls_module_private_schema_id_idx ON metaschema_modules_public.rls_module ( private_schema_id ); +CREATE INDEX rls_module_schema_id_idx ON metaschema_modules_public.rls_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/route_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/route_module/table.sql index c1952739..da0c1ca0 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/route_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/route_module/table.sql @@ -45,6 +45,13 @@ CREATE TABLE metaschema_modules_public.route_module ( -- Generated resolver name (populated by the generator) resolver_function_name text, + -- Generated site app-link / deep-link read-path function names (populated by + -- the generator). NULL when the routing plane's catalog carries no app-links + -- / deep-links mirror, so the serving edge fails loud rather than calling a + -- function that was never generated. + app_links_function_name text, + deep_link_function_name text, + -- API routing (get-or-create: if set, schema is added to this API) api_name text, private_api_name text, @@ -105,10 +112,15 @@ CREATE TABLE metaschema_modules_public.route_module ( ON DELETE CASCADE ); -CREATE INDEX route_module_database_id_idx - ON metaschema_modules_public.route_module (database_id); - CREATE UNIQUE INDEX route_module_unique_scope ON metaschema_modules_public.route_module (database_id, scope); +CREATE INDEX route_module_entity_table_id_idx ON metaschema_modules_public.route_module ( entity_table_id ); +CREATE INDEX route_module_hostname_bindings_table_id_idx ON metaschema_modules_public.route_module ( hostname_bindings_table_id ); +CREATE INDEX route_module_route_bindings_table_id_idx ON metaschema_modules_public.route_module ( route_bindings_table_id ); +CREATE INDEX route_module_routes_table_id_idx ON metaschema_modules_public.route_module ( routes_table_id ); +CREATE INDEX route_module_private_schema_id_idx ON metaschema_modules_public.route_module ( private_schema_id ); +CREATE INDEX route_module_schema_id_idx ON metaschema_modules_public.route_module ( schema_id ); +CREATE INDEX route_module_catalog_module_id_idx ON metaschema_modules_public.route_module ( catalog_module_id ); +CREATE INDEX route_module_domain_module_id_idx ON metaschema_modules_public.route_module ( domain_module_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/secure_table_provision/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/secure_table_provision/table.sql index 3737c975..ca5b36e8 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/secure_table_provision/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/secure_table_provision/table.sql @@ -71,5 +71,6 @@ COMMENT ON COLUMN metaschema_modules_public.secure_table_provision.out_fields IS CREATE INDEX secure_table_provision_database_id_idx ON metaschema_modules_public.secure_table_provision ( database_id ); CREATE INDEX secure_table_provision_table_id_idx ON metaschema_modules_public.secure_table_provision ( table_id ); +CREATE INDEX secure_table_provision_schema_id_idx ON metaschema_modules_public.secure_table_provision ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/sessions_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/sessions_module/table.sql index 8007fda1..54ec2df7 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/sessions_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/sessions_module/table.sql @@ -30,6 +30,11 @@ CREATE TABLE metaschema_modules_public.sessions_module ( ); CREATE INDEX sessions_module_database_id_idx ON metaschema_modules_public.sessions_module ( database_id ); +CREATE INDEX sessions_module_auth_settings_table_id_idx ON metaschema_modules_public.sessions_module ( auth_settings_table_id ); +CREATE INDEX sessions_module_session_credentials_table_id_idx ON metaschema_modules_public.sessions_module ( session_credentials_table_id ); +CREATE INDEX sessions_module_sessions_table_id_idx ON metaschema_modules_public.sessions_module ( sessions_table_id ); +CREATE INDEX sessions_module_users_table_id_idx ON metaschema_modules_public.sessions_module ( users_table_id ); +CREATE INDEX sessions_module_schema_id_idx ON metaschema_modules_public.sessions_module ( schema_id ); COMMENT ON CONSTRAINT sessions_table_fkey ON metaschema_modules_public.sessions_module IS E'@fieldName sessionsTableBySessionsTableId'; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/site_surface_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/site_surface_module/table.sql index 2d978f9e..c602a6b0 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/site_surface_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/site_surface_module/table.sql @@ -15,9 +15,12 @@ CREATE TABLE metaschema_modules_public.site_surface_module ( -- Schema reference (if uuid_nil, resolved from schema name or default) schema_id uuid NOT NULL DEFAULT uuid_nil(), + -- Private schema hosting the backing seam-guard trigger function. + private_schema_id uuid NOT NULL DEFAULT uuid_nil(), - -- Optional schema name override (used when schema_id is not provided) + -- Optional schema name overrides (used when the ids are not provided) public_schema_name text, + private_schema_name text, -- Catalog the sites register their owner-qualified identity into. -- Resolved by the insert trigger from the same-database catalog_module @@ -29,12 +32,23 @@ CREATE TABLE metaschema_modules_public.site_surface_module ( site_metadata_table_id uuid NOT NULL DEFAULT uuid_nil(), site_modules_table_id uuid NOT NULL DEFAULT uuid_nil(), site_themes_table_id uuid NOT NULL DEFAULT uuid_nil(), + site_app_links_table_id uuid NOT NULL DEFAULT uuid_nil(), + site_deep_links_table_id uuid NOT NULL DEFAULT uuid_nil(), + -- Serving-config companions (the distribution tier's typed behavior): + -- site_web_config (1:1) + site_error_pages (1:N). Always generated — a + -- site IS the distribution, so it always owns its serving configuration. + site_web_config_table_id uuid NOT NULL DEFAULT uuid_nil(), + site_error_pages_table_id uuid NOT NULL DEFAULT uuid_nil(), -- Table names (input to the generator) sites_table_name text NOT NULL DEFAULT 'sites', site_metadata_table_name text NOT NULL DEFAULT 'site_metadata', site_modules_table_name text NOT NULL DEFAULT 'site_modules', site_themes_table_name text NOT NULL DEFAULT 'site_themes', + site_app_links_table_name text NOT NULL DEFAULT 'site_app_links', + site_deep_links_table_name text NOT NULL DEFAULT 'site_deep_links', + site_web_config_table_name text NOT NULL DEFAULT 'site_web_config', + site_error_pages_table_name text NOT NULL DEFAULT 'site_error_pages', -- API routing (get-or-create: if set, schema is added to this API) api_name text, @@ -66,6 +80,10 @@ CREATE TABLE metaschema_modules_public.site_surface_module ( FOREIGN KEY (schema_id) REFERENCES metaschema_public.schema (id) ON DELETE CASCADE, + CONSTRAINT site_module_private_schema_fkey + FOREIGN KEY (private_schema_id) + REFERENCES metaschema_public.schema (id) + ON DELETE CASCADE, CONSTRAINT site_module_catalog_fkey FOREIGN KEY (catalog_module_id) REFERENCES metaschema_modules_public.catalog_module (id) @@ -86,16 +104,40 @@ CREATE TABLE metaschema_modules_public.site_surface_module ( FOREIGN KEY (site_themes_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, + CONSTRAINT site_module_site_app_links_table_fkey + FOREIGN KEY (site_app_links_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, + CONSTRAINT site_module_site_deep_links_table_fkey + FOREIGN KEY (site_deep_links_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, + CONSTRAINT site_module_site_web_config_table_fkey + FOREIGN KEY (site_web_config_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, + CONSTRAINT site_module_site_error_pages_table_fkey + FOREIGN KEY (site_error_pages_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, CONSTRAINT site_module_entity_table_fkey FOREIGN KEY (entity_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX site_module_database_id_idx - ON metaschema_modules_public.site_surface_module (database_id); - CREATE UNIQUE INDEX site_module_unique_scope ON metaschema_modules_public.site_surface_module (database_id, scope); +CREATE INDEX site_surface_module_entity_table_id_idx ON metaschema_modules_public.site_surface_module ( entity_table_id ); +CREATE INDEX site_surface_module_site_metadata_table_id_idx ON metaschema_modules_public.site_surface_module ( site_metadata_table_id ); +CREATE INDEX site_surface_module_site_modules_table_id_idx ON metaschema_modules_public.site_surface_module ( site_modules_table_id ); +CREATE INDEX site_surface_module_site_themes_table_id_idx ON metaschema_modules_public.site_surface_module ( site_themes_table_id ); +CREATE INDEX site_surface_module_site_app_links_table_id_idx ON metaschema_modules_public.site_surface_module ( site_app_links_table_id ); +CREATE INDEX site_surface_module_site_deep_links_table_id_idx ON metaschema_modules_public.site_surface_module ( site_deep_links_table_id ); +CREATE INDEX site_surface_module_site_web_config_table_id_idx ON metaschema_modules_public.site_surface_module ( site_web_config_table_id ); +CREATE INDEX site_surface_module_site_error_pages_table_id_idx ON metaschema_modules_public.site_surface_module ( site_error_pages_table_id ); +CREATE INDEX site_surface_module_sites_table_id_idx ON metaschema_modules_public.site_surface_module ( sites_table_id ); +CREATE INDEX site_surface_module_schema_id_idx ON metaschema_modules_public.site_surface_module ( schema_id ); +CREATE INDEX site_surface_module_catalog_module_id_idx ON metaschema_modules_public.site_surface_module ( catalog_module_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/storage_log_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/storage_log_module/table.sql index 4ab062ad..bcb69b0d 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/storage_log_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/storage_log_module/table.sql @@ -53,6 +53,9 @@ CREATE TABLE metaschema_modules_public.storage_log_module ( CONSTRAINT storage_log_module_database_id_scope_unique UNIQUE (database_id, scope) ); -CREATE INDEX storage_log_module_database_id_idx ON metaschema_modules_public.storage_log_module ( database_id ); +CREATE INDEX storage_log_module_storage_log_table_id_idx ON metaschema_modules_public.storage_log_module ( storage_log_table_id ); +CREATE INDEX storage_log_module_usage_summary_table_id_idx ON metaschema_modules_public.storage_log_module ( usage_summary_table_id ); +CREATE INDEX storage_log_module_private_schema_id_idx ON metaschema_modules_public.storage_log_module ( private_schema_id ); +CREATE INDEX storage_log_module_schema_id_idx ON metaschema_modules_public.storage_log_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/storage_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/storage_module/table.sql index d1d4dd16..e629667d 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/storage_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/storage_module/table.sql @@ -122,9 +122,14 @@ CREATE TABLE metaschema_modules_public.storage_module ( CONSTRAINT file_events_table_fkey FOREIGN KEY (file_events_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX storage_module_database_id_idx ON metaschema_modules_public.storage_module ( database_id ); - -- Unique constraint: one storage module per database per scope per prefix. CREATE UNIQUE INDEX storage_module_unique_scope ON metaschema_modules_public.storage_module ( database_id, scope, prefix ); +CREATE INDEX storage_module_buckets_table_id_idx ON metaschema_modules_public.storage_module ( buckets_table_id ); +CREATE INDEX storage_module_entity_table_id_idx ON metaschema_modules_public.storage_module ( entity_table_id ); +CREATE INDEX storage_module_file_events_table_id_idx ON metaschema_modules_public.storage_module ( file_events_table_id ); +CREATE INDEX storage_module_files_table_id_idx ON metaschema_modules_public.storage_module ( files_table_id ); +CREATE INDEX storage_module_path_shares_table_id_idx ON metaschema_modules_public.storage_module ( path_shares_table_id ); +CREATE INDEX storage_module_private_schema_id_idx ON metaschema_modules_public.storage_module ( private_schema_id ); +CREATE INDEX storage_module_schema_id_idx ON metaschema_modules_public.storage_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/transfer_log_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/transfer_log_module/table.sql index fa9a94e9..c312b31f 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/transfer_log_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/transfer_log_module/table.sql @@ -53,6 +53,9 @@ CREATE TABLE metaschema_modules_public.transfer_log_module ( CONSTRAINT transfer_log_module_database_id_prefix_unique UNIQUE NULLS NOT DISTINCT (database_id, prefix) ); -CREATE INDEX transfer_log_module_database_id_idx ON metaschema_modules_public.transfer_log_module ( database_id ); +CREATE INDEX transfer_log_module_transfer_log_table_id_idx ON metaschema_modules_public.transfer_log_module ( transfer_log_table_id ); +CREATE INDEX transfer_log_module_usage_summary_table_id_idx ON metaschema_modules_public.transfer_log_module ( usage_summary_table_id ); +CREATE INDEX transfer_log_module_private_schema_id_idx ON metaschema_modules_public.transfer_log_module ( private_schema_id ); +CREATE INDEX transfer_log_module_schema_id_idx ON metaschema_modules_public.transfer_log_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/user_auth_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/user_auth_module/table.sql index 2e8d0bc6..c5639288 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/user_auth_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/user_auth_module/table.sql @@ -60,20 +60,27 @@ CREATE TABLE metaschema_modules_public.user_auth_module ( ); CREATE INDEX user_auth_module_database_id_idx ON metaschema_modules_public.user_auth_module ( database_id ); +CREATE INDEX user_auth_module_emails_table_id_idx ON metaschema_modules_public.user_auth_module ( emails_table_id ); +CREATE INDEX user_auth_module_encrypted_table_id_idx ON metaschema_modules_public.user_auth_module ( encrypted_table_id ); +CREATE INDEX user_auth_module_secrets_table_id_idx ON metaschema_modules_public.user_auth_module ( secrets_table_id ); +CREATE INDEX user_auth_module_session_credentials_table_id_idx ON metaschema_modules_public.user_auth_module ( session_credentials_table_id ); +CREATE INDEX user_auth_module_sessions_table_id_idx ON metaschema_modules_public.user_auth_module ( sessions_table_id ); +CREATE INDEX user_auth_module_users_table_id_idx ON metaschema_modules_public.user_auth_module ( users_table_id ); +CREATE INDEX user_auth_module_schema_id_idx ON metaschema_modules_public.user_auth_module ( schema_id ); COMMENT ON CONSTRAINT email_table_fkey - ON metaschema_modules_public.user_auth_module IS E'@omit'; + ON metaschema_modules_public.user_auth_module IS E'@behavior -*'; COMMENT ON CONSTRAINT users_table_fkey - ON metaschema_modules_public.user_auth_module IS E'@omit'; + ON metaschema_modules_public.user_auth_module IS E'@behavior -*'; COMMENT ON CONSTRAINT secrets_table_fkey - ON metaschema_modules_public.user_auth_module IS E'@omit'; + ON metaschema_modules_public.user_auth_module IS E'@behavior -*'; COMMENT ON CONSTRAINT encrypted_table_fkey - ON metaschema_modules_public.user_auth_module IS E'@omit'; + ON metaschema_modules_public.user_auth_module IS E'@behavior -*'; -- TOKENS_REMOVAL: tokens_table_fkey comment removed -- SESSION_MIGRATION: omit comments for sessions and session_credentials foreign keys COMMENT ON CONSTRAINT sessions_table_fkey - ON metaschema_modules_public.user_auth_module IS E'@omit'; + ON metaschema_modules_public.user_auth_module IS E'@behavior -*'; COMMENT ON CONSTRAINT session_credentials_table_fkey - ON metaschema_modules_public.user_auth_module IS E'@omit'; + ON metaschema_modules_public.user_auth_module IS E'@behavior -*'; COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/user_credentials_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/user_credentials_module/table.sql index 2194f5f9..1aa8b24a 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/user_credentials_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/user_credentials_module/table.sql @@ -30,7 +30,6 @@ CREATE TABLE metaschema_modules_public.user_credentials_module ( CONSTRAINT user_credentials_module_table_fkey FOREIGN KEY (table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX user_credentials_module_database_id_idx ON metaschema_modules_public.user_credentials_module ( database_id ); CREATE INDEX user_credentials_module_schema_id_idx ON metaschema_modules_public.user_credentials_module ( schema_id ); CREATE INDEX user_credentials_module_table_id_idx ON metaschema_modules_public.user_credentials_module ( table_id ); diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/user_settings_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/user_settings_module/table.sql index 5a50044b..51be32d6 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/user_settings_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/user_settings_module/table.sql @@ -28,7 +28,9 @@ CREATE TABLE metaschema_modules_public.user_settings_module ( CONSTRAINT owner_table_fkey FOREIGN KEY (owner_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX user_settings_module_database_id_idx ON metaschema_modules_public.user_settings_module ( database_id ); CREATE UNIQUE INDEX user_settings_module_unique_per_db ON metaschema_modules_public.user_settings_module ( database_id ); +CREATE INDEX user_settings_module_owner_table_id_idx ON metaschema_modules_public.user_settings_module ( owner_table_id ); +CREATE INDEX user_settings_module_table_id_idx ON metaschema_modules_public.user_settings_module ( table_id ); +CREATE INDEX user_settings_module_schema_id_idx ON metaschema_modules_public.user_settings_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/user_state_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/user_state_module/table.sql index 569a9a7f..f6d8546d 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/user_state_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/user_state_module/table.sql @@ -23,5 +23,7 @@ CREATE TABLE metaschema_modules_public.user_state_module ( ); CREATE INDEX user_state_module_database_id_idx ON metaschema_modules_public.user_state_module ( database_id ); +CREATE INDEX user_state_module_table_id_idx ON metaschema_modules_public.user_state_module ( table_id ); +CREATE INDEX user_state_module_schema_id_idx ON metaschema_modules_public.user_state_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/users_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/users_module/table.sql index 8a9a727b..21313e2a 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/users_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/users_module/table.sql @@ -29,5 +29,8 @@ CREATE TABLE metaschema_modules_public.users_module ( ); CREATE INDEX users_module_database_id_idx ON metaschema_modules_public.users_module ( database_id ); +CREATE INDEX users_module_table_id_idx ON metaschema_modules_public.users_module ( table_id ); +CREATE INDEX users_module_type_table_id_idx ON metaschema_modules_public.users_module ( type_table_id ); +CREATE INDEX users_module_schema_id_idx ON metaschema_modules_public.users_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/webauthn_auth_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/webauthn_auth_module/table.sql index d21c3b49..9c61a911 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/webauthn_auth_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/webauthn_auth_module/table.sql @@ -58,5 +58,12 @@ CREATE TABLE metaschema_modules_public.webauthn_auth_module ( ); CREATE INDEX webauthn_auth_module_database_id_idx ON metaschema_modules_public.webauthn_auth_module ( database_id ); +CREATE INDEX webauthn_auth_module_auth_settings_table_id_idx ON metaschema_modules_public.webauthn_auth_module ( auth_settings_table_id ); +CREATE INDEX webauthn_auth_module_credentials_table_id_idx ON metaschema_modules_public.webauthn_auth_module ( credentials_table_id ); +CREATE INDEX webauthn_auth_module_session_credentials_table_id_idx ON metaschema_modules_public.webauthn_auth_module ( session_credentials_table_id ); +CREATE INDEX webauthn_auth_module_session_secrets_table_id_idx ON metaschema_modules_public.webauthn_auth_module ( session_secrets_table_id ); +CREATE INDEX webauthn_auth_module_sessions_table_id_idx ON metaschema_modules_public.webauthn_auth_module ( sessions_table_id ); +CREATE INDEX webauthn_auth_module_users_table_id_idx ON metaschema_modules_public.webauthn_auth_module ( users_table_id ); +CREATE INDEX webauthn_auth_module_schema_id_idx ON metaschema_modules_public.webauthn_auth_module ( schema_id ); COMMIT; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/webauthn_credentials_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/webauthn_credentials_module/table.sql index f540f4b4..94c224cf 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/webauthn_credentials_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/webauthn_credentials_module/table.sql @@ -29,6 +29,10 @@ CREATE TABLE metaschema_modules_public.webauthn_credentials_module ( ); CREATE INDEX webauthn_credentials_module_database_id_idx ON metaschema_modules_public.webauthn_credentials_module ( database_id ); +CREATE INDEX webauthn_credentials_module_owner_table_id_idx ON metaschema_modules_public.webauthn_credentials_module ( owner_table_id ); +CREATE INDEX webauthn_credentials_module_table_id_idx ON metaschema_modules_public.webauthn_credentials_module ( table_id ); +CREATE INDEX webauthn_credentials_module_private_schema_id_idx ON metaschema_modules_public.webauthn_credentials_module ( private_schema_id ); +CREATE INDEX webauthn_credentials_module_schema_id_idx ON metaschema_modules_public.webauthn_credentials_module ( schema_id ); COMMENT ON TABLE metaschema_modules_public.webauthn_credentials_module IS 'Config row for the webauthn_credentials_module, which provisions the per-user WebAuthn/passkey credentials table (public key, counter, transports, device type, backup state) mirroring crypto_addresses_module. The sibling webauthn_auth_module holds RP config and the registration/sign-in challenge state.'; COMMENT ON COLUMN metaschema_modules_public.webauthn_credentials_module.private_schema_id IS 'Private schema that hosts SECURITY DEFINER helpers which write to webauthn_credentials (registration / counter-bump / delete).'; diff --git a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/webhook_module/table.sql b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/webhook_module/table.sql index 66daea7e..f2abd2fd 100644 --- a/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/webhook_module/table.sql +++ b/packages/metaschema-modules/deploy/schemas/metaschema_modules_public/tables/webhook_module/table.sql @@ -91,10 +91,16 @@ CREATE TABLE metaschema_modules_public.webhook_module ( ON DELETE CASCADE ); -CREATE INDEX webhook_module_database_id_idx - ON metaschema_modules_public.webhook_module (database_id); - CREATE UNIQUE INDEX webhook_module_unique_scope ON metaschema_modules_public.webhook_module (database_id, scope); +CREATE INDEX webhook_module_webhook_endpoints_table_id_idx ON metaschema_modules_public.webhook_module ( webhook_endpoints_table_id ); +CREATE INDEX webhook_module_entity_table_id_idx ON metaschema_modules_public.webhook_module ( entity_table_id ); +CREATE INDEX webhook_module_webhook_events_table_id_idx ON metaschema_modules_public.webhook_module ( webhook_events_table_id ); +CREATE INDEX webhook_module_private_schema_id_idx ON metaschema_modules_public.webhook_module ( private_schema_id ); +CREATE INDEX webhook_module_schema_id_idx ON metaschema_modules_public.webhook_module ( schema_id ); +CREATE INDEX webhook_module_function_module_id_idx ON metaschema_modules_public.webhook_module ( function_module_id ); +CREATE INDEX webhook_module_function_invocation_module_id_idx ON metaschema_modules_public.webhook_module ( function_invocation_module_id ); +CREATE INDEX webhook_module_namespace_module_id_idx ON metaschema_modules_public.webhook_module ( namespace_module_id ); +CREATE INDEX webhook_module_infra_secrets_module_id_idx ON metaschema_modules_public.webhook_module ( infra_secrets_module_id ); COMMIT; diff --git a/packages/metaschema-modules/pgpm.plan b/packages/metaschema-modules/pgpm.plan index d1aa1b27..1d46d979 100644 --- a/packages/metaschema-modules/pgpm.plan +++ b/packages/metaschema-modules/pgpm.plan @@ -86,3 +86,4 @@ schemas/metaschema_modules_public/tables/site_surface_module/table [schemas/meta schemas/metaschema_modules_public/tables/route_module/table [schemas/metaschema_modules_public/schema schemas/metaschema_modules_public/tables/catalog_module/table schemas/metaschema_modules_public/tables/domain_module/table] 2026-07-19T12:00:04Z devin # add scoped route module config (compiled routing plane) schemas/metaschema_modules_public/tables/app_module/table [schemas/metaschema_modules_public/schema schemas/metaschema_modules_public/tables/catalog_module/table] 2026-07-19T14:00:00Z devin # add app aggregate module config schemas/metaschema_modules_public/tables/database_settings_module/table [schemas/metaschema_modules_public/schema] 2026-07-20T21:00:00Z devin # add scoped database settings module config (database/rls/pubkey/webauthn settings) +schemas/metaschema_modules_public/tables/pages_module/table [schemas/metaschema_modules_public/schema schemas/metaschema_modules_public/tables/merkle_store_module/table schemas/metaschema_modules_public/tables/site_surface_module/table] 2026-07-31T19:00:00Z devin # add pages_module config table for site-owned merkle-versioned page content diff --git a/packages/metaschema-modules/revert/schemas/metaschema_modules_public/tables/pages_module/table.sql b/packages/metaschema-modules/revert/schemas/metaschema_modules_public/tables/pages_module/table.sql new file mode 100644 index 00000000..66bf58c5 --- /dev/null +++ b/packages/metaschema-modules/revert/schemas/metaschema_modules_public/tables/pages_module/table.sql @@ -0,0 +1,7 @@ +-- Revert schemas/metaschema_modules_public/tables/pages_module/table from pg + +BEGIN; + +DROP TABLE IF EXISTS metaschema_modules_public.pages_module CASCADE; + +COMMIT; diff --git a/packages/metaschema-modules/sql/metaschema-modules--0.34.0.bundle.tar.gz b/packages/metaschema-modules/sql/metaschema-modules--0.34.0.bundle.tar.gz index 37172a37..07b3cd59 100644 Binary files a/packages/metaschema-modules/sql/metaschema-modules--0.34.0.bundle.tar.gz and b/packages/metaschema-modules/sql/metaschema-modules--0.34.0.bundle.tar.gz differ diff --git a/packages/metaschema-modules/sql/metaschema-modules--0.34.0.sql b/packages/metaschema-modules/sql/metaschema-modules--0.34.0.sql index 3d5b3143..2a46f502 100644 --- a/packages/metaschema-modules/sql/metaschema-modules--0.34.0.sql +++ b/packages/metaschema-modules/sql/metaschema-modules--0.34.0.sql @@ -57,6 +57,14 @@ CREATE TABLE metaschema_modules_public.connected_accounts_module ( CREATE INDEX connected_accounts_module_database_id_idx ON metaschema_modules_public.connected_accounts_module (database_id); +CREATE INDEX connected_accounts_module_owner_table_id_idx ON metaschema_modules_public.connected_accounts_module (owner_table_id); + +CREATE INDEX connected_accounts_module_table_id_idx ON metaschema_modules_public.connected_accounts_module (table_id); + +CREATE INDEX connected_accounts_module_private_schema_id_idx ON metaschema_modules_public.connected_accounts_module (private_schema_id); + +CREATE INDEX connected_accounts_module_schema_id_idx ON metaschema_modules_public.connected_accounts_module (schema_id); + CREATE TABLE metaschema_modules_public.crypto_addresses_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -92,6 +100,14 @@ CREATE TABLE metaschema_modules_public.crypto_addresses_module ( CREATE INDEX crypto_addresses_module_database_id_idx ON metaschema_modules_public.crypto_addresses_module (database_id); +CREATE INDEX crypto_addresses_module_owner_table_id_idx ON metaschema_modules_public.crypto_addresses_module (owner_table_id); + +CREATE INDEX crypto_addresses_module_table_id_idx ON metaschema_modules_public.crypto_addresses_module (table_id); + +CREATE INDEX crypto_addresses_module_private_schema_id_idx ON metaschema_modules_public.crypto_addresses_module (private_schema_id); + +CREATE INDEX crypto_addresses_module_schema_id_idx ON metaschema_modules_public.crypto_addresses_module (schema_id); + CREATE TABLE metaschema_modules_public.crypto_auth_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -135,6 +151,16 @@ CREATE TABLE metaschema_modules_public.crypto_auth_module ( CREATE INDEX crypto_auth_module_database_id_idx ON metaschema_modules_public.crypto_auth_module (database_id); +CREATE INDEX crypto_auth_module_secrets_table_id_idx ON metaschema_modules_public.crypto_auth_module (secrets_table_id); + +CREATE INDEX crypto_auth_module_session_credentials_table_id_idx ON metaschema_modules_public.crypto_auth_module (session_credentials_table_id); + +CREATE INDEX crypto_auth_module_sessions_table_id_idx ON metaschema_modules_public.crypto_auth_module (sessions_table_id); + +CREATE INDEX crypto_auth_module_users_table_id_idx ON metaschema_modules_public.crypto_auth_module (users_table_id); + +CREATE INDEX crypto_auth_module_schema_id_idx ON metaschema_modules_public.crypto_auth_module (schema_id); + CREATE TABLE metaschema_modules_public.default_ids_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -183,6 +209,14 @@ CREATE TABLE metaschema_modules_public.denormalized_table_field ( CREATE INDEX denormalized_table_field_database_id_idx ON metaschema_modules_public.denormalized_table_field (database_id); +CREATE INDEX denormalized_table_field_ref_table_id_idx ON metaschema_modules_public.denormalized_table_field (ref_table_id); + +CREATE INDEX denormalized_table_field_table_id_idx ON metaschema_modules_public.denormalized_table_field (table_id); + +CREATE INDEX denormalized_table_field_field_id_idx ON metaschema_modules_public.denormalized_table_field (field_id); + +CREATE INDEX denormalized_table_field_ref_field_id_idx ON metaschema_modules_public.denormalized_table_field (ref_field_id); + CREATE TABLE metaschema_modules_public.emails_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -217,6 +251,14 @@ CREATE TABLE metaschema_modules_public.emails_module ( CREATE INDEX emails_module_database_id_idx ON metaschema_modules_public.emails_module (database_id); +CREATE INDEX emails_module_owner_table_id_idx ON metaschema_modules_public.emails_module (owner_table_id); + +CREATE INDEX emails_module_table_id_idx ON metaschema_modules_public.emails_module (table_id); + +CREATE INDEX emails_module_private_schema_id_idx ON metaschema_modules_public.emails_module (private_schema_id); + +CREATE INDEX emails_module_schema_id_idx ON metaschema_modules_public.emails_module (schema_id); + CREATE TABLE metaschema_modules_public.config_secrets_user_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -242,6 +284,10 @@ CREATE TABLE metaschema_modules_public.config_secrets_user_module ( CREATE UNIQUE INDEX config_secrets_user_module_database_id_idx ON metaschema_modules_public.config_secrets_user_module (database_id); +CREATE INDEX config_secrets_user_module_table_id_idx ON metaschema_modules_public.config_secrets_user_module (table_id); + +CREATE INDEX config_secrets_user_module_schema_id_idx ON metaschema_modules_public.config_secrets_user_module (schema_id); + CREATE TABLE metaschema_modules_public.invites_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -296,10 +342,22 @@ CREATE TABLE metaschema_modules_public.invites_module ( ON DELETE CASCADE ); -CREATE INDEX invites_module_database_id_idx ON metaschema_modules_public.invites_module (database_id); - CREATE UNIQUE INDEX invites_module_unique_scope ON metaschema_modules_public.invites_module (database_id, scope, prefix); +CREATE INDEX invites_module_claimed_invites_table_id_idx ON metaschema_modules_public.invites_module (claimed_invites_table_id); + +CREATE INDEX invites_module_emails_table_id_idx ON metaschema_modules_public.invites_module (emails_table_id); + +CREATE INDEX invites_module_entity_table_id_idx ON metaschema_modules_public.invites_module (entity_table_id); + +CREATE INDEX invites_module_invites_table_id_idx ON metaschema_modules_public.invites_module (invites_table_id); + +CREATE INDEX invites_module_users_table_id_idx ON metaschema_modules_public.invites_module (users_table_id); + +CREATE INDEX invites_module_private_schema_id_idx ON metaschema_modules_public.invites_module (private_schema_id); + +CREATE INDEX invites_module_schema_id_idx ON metaschema_modules_public.invites_module (schema_id); + CREATE TABLE metaschema_modules_public.events_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -397,6 +455,28 @@ CREATE TABLE metaschema_modules_public.events_module ( CREATE INDEX events_module_database_id_idx ON metaschema_modules_public.events_module (database_id); +CREATE INDEX events_module_achievement_rewards_table_id_idx ON metaschema_modules_public.events_module (achievement_rewards_table_id); + +CREATE INDEX events_module_actor_table_id_idx ON metaschema_modules_public.events_module (actor_table_id); + +CREATE INDEX events_module_entity_table_id_idx ON metaschema_modules_public.events_module (entity_table_id); + +CREATE INDEX events_module_event_aggregates_table_id_idx ON metaschema_modules_public.events_module (event_aggregates_table_id); + +CREATE INDEX events_module_event_types_table_id_idx ON metaschema_modules_public.events_module (event_types_table_id); + +CREATE INDEX events_module_events_table_id_idx ON metaschema_modules_public.events_module (events_table_id); + +CREATE INDEX events_module_level_grants_table_id_idx ON metaschema_modules_public.events_module (level_grants_table_id); + +CREATE INDEX events_module_level_requirements_table_id_idx ON metaschema_modules_public.events_module (level_requirements_table_id); + +CREATE INDEX events_module_levels_table_id_idx ON metaschema_modules_public.events_module (levels_table_id); + +CREATE INDEX events_module_private_schema_id_idx ON metaschema_modules_public.events_module (private_schema_id); + +CREATE INDEX events_module_schema_id_idx ON metaschema_modules_public.events_module (schema_id); + CREATE TABLE metaschema_modules_public.limits_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -507,6 +587,38 @@ CREATE TABLE metaschema_modules_public.limits_module ( CREATE INDEX limits_module_database_id_idx ON metaschema_modules_public.limits_module (database_id); +CREATE INDEX limits_module_actor_table_id_idx ON metaschema_modules_public.limits_module (actor_table_id); + +CREATE INDEX limits_module_aggregate_table_id_idx ON metaschema_modules_public.limits_module (aggregate_table_id); + +CREATE INDEX limits_module_credit_code_items_table_id_idx ON metaschema_modules_public.limits_module (credit_code_items_table_id); + +CREATE INDEX limits_module_credit_codes_table_id_idx ON metaschema_modules_public.limits_module (credit_codes_table_id); + +CREATE INDEX limits_module_credit_redemptions_table_id_idx ON metaschema_modules_public.limits_module (credit_redemptions_table_id); + +CREATE INDEX limits_module_default_table_id_idx ON metaschema_modules_public.limits_module (default_table_id); + +CREATE INDEX limits_module_entity_table_id_idx ON metaschema_modules_public.limits_module (entity_table_id); + +CREATE INDEX limits_module_events_table_id_idx ON metaschema_modules_public.limits_module (events_table_id); + +CREATE INDEX limits_module_limit_caps_defaults_table_id_idx ON metaschema_modules_public.limits_module (limit_caps_defaults_table_id); + +CREATE INDEX limits_module_limit_caps_table_id_idx ON metaschema_modules_public.limits_module (limit_caps_table_id); + +CREATE INDEX limits_module_limit_credits_table_id_idx ON metaschema_modules_public.limits_module (limit_credits_table_id); + +CREATE INDEX limits_module_limit_warning_state_table_id_idx ON metaschema_modules_public.limits_module (limit_warning_state_table_id); + +CREATE INDEX limits_module_limit_warnings_table_id_idx ON metaschema_modules_public.limits_module (limit_warnings_table_id); + +CREATE INDEX limits_module_table_id_idx ON metaschema_modules_public.limits_module (table_id); + +CREATE INDEX limits_module_private_schema_id_idx ON metaschema_modules_public.limits_module (private_schema_id); + +CREATE INDEX limits_module_schema_id_idx ON metaschema_modules_public.limits_module (schema_id); + CREATE TABLE metaschema_modules_public.membership_types_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -529,6 +641,10 @@ CREATE TABLE metaschema_modules_public.membership_types_module ( CREATE INDEX membership_types_module_database_id_idx ON metaschema_modules_public.membership_types_module (database_id); +CREATE INDEX membership_types_module_table_id_idx ON metaschema_modules_public.membership_types_module (table_id); + +CREATE INDEX membership_types_module_schema_id_idx ON metaschema_modules_public.membership_types_module (schema_id); + CREATE TABLE metaschema_modules_public.memberships_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -640,7 +756,35 @@ CREATE TABLE metaschema_modules_public.memberships_module ( UNIQUE (database_id, scope, prefix) ); -CREATE INDEX memberships_module_database_id_idx ON metaschema_modules_public.memberships_module (database_id); +CREATE INDEX memberships_module_actor_table_id_idx ON metaschema_modules_public.memberships_module (actor_table_id); + +CREATE INDEX memberships_module_default_limits_table_id_idx ON metaschema_modules_public.memberships_module (default_limits_table_id); + +CREATE INDEX memberships_module_default_permissions_table_id_idx ON metaschema_modules_public.memberships_module (default_permissions_table_id); + +CREATE INDEX memberships_module_entity_table_id_idx ON metaschema_modules_public.memberships_module (entity_table_id); + +CREATE INDEX memberships_module_grants_table_id_idx ON metaschema_modules_public.memberships_module (grants_table_id); + +CREATE INDEX memberships_module_limits_table_id_idx ON metaschema_modules_public.memberships_module (limits_table_id); + +CREATE INDEX memberships_module_members_table_id_idx ON metaschema_modules_public.memberships_module (members_table_id); + +CREATE INDEX memberships_module_membership_defaults_table_id_idx ON metaschema_modules_public.memberships_module (membership_defaults_table_id); + +CREATE INDEX memberships_module_membership_settings_table_id_idx ON metaschema_modules_public.memberships_module (membership_settings_table_id); + +CREATE INDEX memberships_module_memberships_table_id_idx ON metaschema_modules_public.memberships_module (memberships_table_id); + +CREATE INDEX memberships_module_permissions_table_id_idx ON metaschema_modules_public.memberships_module (permissions_table_id); + +CREATE INDEX memberships_module_sprt_table_id_idx ON metaschema_modules_public.memberships_module (sprt_table_id); + +CREATE INDEX memberships_module_private_schema_id_idx ON metaschema_modules_public.memberships_module (private_schema_id); + +CREATE INDEX memberships_module_schema_id_idx ON metaschema_modules_public.memberships_module (schema_id); + +CREATE INDEX memberships_module_entity_table_owner_id_idx ON metaschema_modules_public.memberships_module (entity_table_owner_id); CREATE TABLE metaschema_modules_public.permissions_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), @@ -697,6 +841,18 @@ CREATE TABLE metaschema_modules_public.permissions_module ( CREATE INDEX permissions_module_database_id_idx ON metaschema_modules_public.permissions_module (database_id); +CREATE INDEX permissions_module_actor_table_id_idx ON metaschema_modules_public.permissions_module (actor_table_id); + +CREATE INDEX permissions_module_default_table_id_idx ON metaschema_modules_public.permissions_module (default_table_id); + +CREATE INDEX permissions_module_entity_table_id_idx ON metaschema_modules_public.permissions_module (entity_table_id); + +CREATE INDEX permissions_module_table_id_idx ON metaschema_modules_public.permissions_module (table_id); + +CREATE INDEX permissions_module_private_schema_id_idx ON metaschema_modules_public.permissions_module (private_schema_id); + +CREATE INDEX permissions_module_schema_id_idx ON metaschema_modules_public.permissions_module (schema_id); + CREATE TABLE metaschema_modules_public.phone_numbers_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -731,6 +887,14 @@ CREATE TABLE metaschema_modules_public.phone_numbers_module ( CREATE INDEX phone_numbers_module_database_id_idx ON metaschema_modules_public.phone_numbers_module (database_id); +CREATE INDEX phone_numbers_module_owner_table_id_idx ON metaschema_modules_public.phone_numbers_module (owner_table_id); + +CREATE INDEX phone_numbers_module_table_id_idx ON metaschema_modules_public.phone_numbers_module (table_id); + +CREATE INDEX phone_numbers_module_private_schema_id_idx ON metaschema_modules_public.phone_numbers_module (private_schema_id); + +CREATE INDEX phone_numbers_module_schema_id_idx ON metaschema_modules_public.phone_numbers_module (schema_id); + CREATE TABLE metaschema_modules_public.profiles_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -809,7 +973,27 @@ CREATE TABLE metaschema_modules_public.profiles_module ( UNIQUE (database_id, scope, prefix) ); -CREATE INDEX profiles_module_database_id_idx ON metaschema_modules_public.profiles_module (database_id); +CREATE INDEX profiles_module_actor_table_id_idx ON metaschema_modules_public.profiles_module (actor_table_id); + +CREATE INDEX profiles_module_entity_table_id_idx ON metaschema_modules_public.profiles_module (entity_table_id); + +CREATE INDEX profiles_module_memberships_table_id_idx ON metaschema_modules_public.profiles_module (memberships_table_id); + +CREATE INDEX profiles_module_permissions_table_id_idx ON metaschema_modules_public.profiles_module (permissions_table_id); + +CREATE INDEX profiles_module_profile_definition_grants_table_id_idx ON metaschema_modules_public.profiles_module (profile_definition_grants_table_id); + +CREATE INDEX profiles_module_profile_grants_table_id_idx ON metaschema_modules_public.profiles_module (profile_grants_table_id); + +CREATE INDEX profiles_module_profile_permissions_table_id_idx ON metaschema_modules_public.profiles_module (profile_permissions_table_id); + +CREATE INDEX profiles_module_profile_templates_table_id_idx ON metaschema_modules_public.profiles_module (profile_templates_table_id); + +CREATE INDEX profiles_module_table_id_idx ON metaschema_modules_public.profiles_module (table_id); + +CREATE INDEX profiles_module_private_schema_id_idx ON metaschema_modules_public.profiles_module (private_schema_id); + +CREATE INDEX profiles_module_schema_id_idx ON metaschema_modules_public.profiles_module (schema_id); CREATE TABLE metaschema_modules_public.rls_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), @@ -853,15 +1037,23 @@ CREATE TABLE metaschema_modules_public.rls_module ( UNIQUE (database_id) ); -COMMENT ON CONSTRAINT db_fkey ON metaschema_modules_public.rls_module IS '@omit'; +COMMENT ON CONSTRAINT db_fkey ON metaschema_modules_public.rls_module IS '@behavior -*'; + +COMMENT ON CONSTRAINT session_credentials_table_fkey ON metaschema_modules_public.rls_module IS '@behavior -*'; + +COMMENT ON CONSTRAINT sessions_table_fkey ON metaschema_modules_public.rls_module IS '@behavior -*'; + +COMMENT ON CONSTRAINT users_table_fkey ON metaschema_modules_public.rls_module IS '@behavior -*'; -COMMENT ON CONSTRAINT session_credentials_table_fkey ON metaschema_modules_public.rls_module IS '@omit'; +CREATE INDEX rls_module_session_credentials_table_id_idx ON metaschema_modules_public.rls_module (session_credentials_table_id); -COMMENT ON CONSTRAINT sessions_table_fkey ON metaschema_modules_public.rls_module IS '@omit'; +CREATE INDEX rls_module_sessions_table_id_idx ON metaschema_modules_public.rls_module (sessions_table_id); -COMMENT ON CONSTRAINT users_table_fkey ON metaschema_modules_public.rls_module IS '@omit'; +CREATE INDEX rls_module_users_table_id_idx ON metaschema_modules_public.rls_module (users_table_id); -CREATE INDEX rls_module_database_id_idx ON metaschema_modules_public.rls_module (database_id); +CREATE INDEX rls_module_private_schema_id_idx ON metaschema_modules_public.rls_module (private_schema_id); + +CREATE INDEX rls_module_schema_id_idx ON metaschema_modules_public.rls_module (schema_id); CREATE TABLE metaschema_modules_public.user_state_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), @@ -886,6 +1078,10 @@ CREATE TABLE metaschema_modules_public.user_state_module ( CREATE INDEX user_state_module_database_id_idx ON metaschema_modules_public.user_state_module (database_id); +CREATE INDEX user_state_module_table_id_idx ON metaschema_modules_public.user_state_module (table_id); + +CREATE INDEX user_state_module_schema_id_idx ON metaschema_modules_public.user_state_module (schema_id); + CREATE TABLE metaschema_modules_public.sessions_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -926,6 +1122,16 @@ CREATE TABLE metaschema_modules_public.sessions_module ( CREATE INDEX sessions_module_database_id_idx ON metaschema_modules_public.sessions_module (database_id); +CREATE INDEX sessions_module_auth_settings_table_id_idx ON metaschema_modules_public.sessions_module (auth_settings_table_id); + +CREATE INDEX sessions_module_session_credentials_table_id_idx ON metaschema_modules_public.sessions_module (session_credentials_table_id); + +CREATE INDEX sessions_module_sessions_table_id_idx ON metaschema_modules_public.sessions_module (sessions_table_id); + +CREATE INDEX sessions_module_users_table_id_idx ON metaschema_modules_public.sessions_module (users_table_id); + +CREATE INDEX sessions_module_schema_id_idx ON metaschema_modules_public.sessions_module (schema_id); + COMMENT ON CONSTRAINT sessions_table_fkey ON metaschema_modules_public.sessions_module IS '@fieldName sessionsTableBySessionsTableId'; COMMENT ON CONSTRAINT session_credentials_table_fkey ON metaschema_modules_public.sessions_module IS '@fieldName sessionCredentialsTableBySessionCredentialsTableId'; @@ -997,17 +1203,31 @@ CREATE TABLE metaschema_modules_public.user_auth_module ( CREATE INDEX user_auth_module_database_id_idx ON metaschema_modules_public.user_auth_module (database_id); -COMMENT ON CONSTRAINT email_table_fkey ON metaschema_modules_public.user_auth_module IS '@omit'; +CREATE INDEX user_auth_module_emails_table_id_idx ON metaschema_modules_public.user_auth_module (emails_table_id); + +CREATE INDEX user_auth_module_encrypted_table_id_idx ON metaschema_modules_public.user_auth_module (encrypted_table_id); + +CREATE INDEX user_auth_module_secrets_table_id_idx ON metaschema_modules_public.user_auth_module (secrets_table_id); + +CREATE INDEX user_auth_module_session_credentials_table_id_idx ON metaschema_modules_public.user_auth_module (session_credentials_table_id); + +CREATE INDEX user_auth_module_sessions_table_id_idx ON metaschema_modules_public.user_auth_module (sessions_table_id); + +CREATE INDEX user_auth_module_users_table_id_idx ON metaschema_modules_public.user_auth_module (users_table_id); + +CREATE INDEX user_auth_module_schema_id_idx ON metaschema_modules_public.user_auth_module (schema_id); -COMMENT ON CONSTRAINT users_table_fkey ON metaschema_modules_public.user_auth_module IS '@omit'; +COMMENT ON CONSTRAINT email_table_fkey ON metaschema_modules_public.user_auth_module IS '@behavior -*'; -COMMENT ON CONSTRAINT secrets_table_fkey ON metaschema_modules_public.user_auth_module IS '@omit'; +COMMENT ON CONSTRAINT users_table_fkey ON metaschema_modules_public.user_auth_module IS '@behavior -*'; -COMMENT ON CONSTRAINT encrypted_table_fkey ON metaschema_modules_public.user_auth_module IS '@omit'; +COMMENT ON CONSTRAINT secrets_table_fkey ON metaschema_modules_public.user_auth_module IS '@behavior -*'; -COMMENT ON CONSTRAINT sessions_table_fkey ON metaschema_modules_public.user_auth_module IS '@omit'; +COMMENT ON CONSTRAINT encrypted_table_fkey ON metaschema_modules_public.user_auth_module IS '@behavior -*'; -COMMENT ON CONSTRAINT session_credentials_table_fkey ON metaschema_modules_public.user_auth_module IS '@omit'; +COMMENT ON CONSTRAINT sessions_table_fkey ON metaschema_modules_public.user_auth_module IS '@behavior -*'; + +COMMENT ON CONSTRAINT session_credentials_table_fkey ON metaschema_modules_public.user_auth_module IS '@behavior -*'; CREATE TABLE metaschema_modules_public.users_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), @@ -1039,6 +1259,12 @@ CREATE TABLE metaschema_modules_public.users_module ( CREATE INDEX users_module_database_id_idx ON metaschema_modules_public.users_module (database_id); +CREATE INDEX users_module_table_id_idx ON metaschema_modules_public.users_module (table_id); + +CREATE INDEX users_module_type_table_id_idx ON metaschema_modules_public.users_module (type_table_id); + +CREATE INDEX users_module_schema_id_idx ON metaschema_modules_public.users_module (schema_id); + CREATE TABLE metaschema_modules_public.hierarchy_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -1099,7 +1325,19 @@ CREATE TABLE metaschema_modules_public.hierarchy_module ( UNIQUE (database_id) ); -CREATE INDEX hierarchy_module_database_id_idx ON metaschema_modules_public.hierarchy_module (database_id); +CREATE INDEX hierarchy_module_chart_edge_grants_table_id_idx ON metaschema_modules_public.hierarchy_module (chart_edge_grants_table_id); + +CREATE INDEX hierarchy_module_chart_edges_table_id_idx ON metaschema_modules_public.hierarchy_module (chart_edges_table_id); + +CREATE INDEX hierarchy_module_entity_table_id_idx ON metaschema_modules_public.hierarchy_module (entity_table_id); + +CREATE INDEX hierarchy_module_hierarchy_sprt_table_id_idx ON metaschema_modules_public.hierarchy_module (hierarchy_sprt_table_id); + +CREATE INDEX hierarchy_module_users_table_id_idx ON metaschema_modules_public.hierarchy_module (users_table_id); + +CREATE INDEX hierarchy_module_private_schema_id_idx ON metaschema_modules_public.hierarchy_module (private_schema_id); + +CREATE INDEX hierarchy_module_schema_id_idx ON metaschema_modules_public.hierarchy_module (schema_id); CREATE TABLE metaschema_modules_public.secure_table_provision ( id uuid PRIMARY KEY DEFAULT uuidv7(), @@ -1155,6 +1393,8 @@ CREATE INDEX secure_table_provision_database_id_idx ON metaschema_modules_public CREATE INDEX secure_table_provision_table_id_idx ON metaschema_modules_public.secure_table_provision (table_id); +CREATE INDEX secure_table_provision_schema_id_idx ON metaschema_modules_public.secure_table_provision (schema_id); + CREATE TABLE metaschema_modules_public.relation_provision ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -1381,8 +1621,6 @@ COMMENT ON COLUMN metaschema_modules_public.blueprint_template.table_hashes IS ' COMMENT ON COLUMN metaschema_modules_public.blueprint_template.updated_at IS 'Timestamp when this template was last modified.'; -CREATE INDEX blueprint_template_owner_id_idx ON metaschema_modules_public.blueprint_template (owner_id); - CREATE INDEX blueprint_template_visibility_idx ON metaschema_modules_public.blueprint_template (visibility); CREATE INDEX blueprint_template_forked_from_id_idx ON metaschema_modules_public.blueprint_template (forked_from_id); @@ -1445,8 +1683,6 @@ COMMENT ON COLUMN metaschema_modules_public.blueprint.updated_at IS 'Timestamp w CREATE INDEX blueprint_owner_id_idx ON metaschema_modules_public.blueprint (owner_id); -CREATE INDEX blueprint_database_id_idx ON metaschema_modules_public.blueprint (database_id); - CREATE INDEX blueprint_template_id_idx ON metaschema_modules_public.blueprint (template_id); CREATE INDEX blueprint_definition_hash_idx ON metaschema_modules_public.blueprint (definition_hash); @@ -1579,10 +1815,22 @@ CREATE TABLE metaschema_modules_public.storage_module ( ON DELETE CASCADE ); -CREATE INDEX storage_module_database_id_idx ON metaschema_modules_public.storage_module (database_id); - CREATE UNIQUE INDEX storage_module_unique_scope ON metaschema_modules_public.storage_module (database_id, scope, prefix); +CREATE INDEX storage_module_buckets_table_id_idx ON metaschema_modules_public.storage_module (buckets_table_id); + +CREATE INDEX storage_module_entity_table_id_idx ON metaschema_modules_public.storage_module (entity_table_id); + +CREATE INDEX storage_module_file_events_table_id_idx ON metaschema_modules_public.storage_module (file_events_table_id); + +CREATE INDEX storage_module_files_table_id_idx ON metaschema_modules_public.storage_module (files_table_id); + +CREATE INDEX storage_module_path_shares_table_id_idx ON metaschema_modules_public.storage_module (path_shares_table_id); + +CREATE INDEX storage_module_private_schema_id_idx ON metaschema_modules_public.storage_module (private_schema_id); + +CREATE INDEX storage_module_schema_id_idx ON metaschema_modules_public.storage_module (schema_id); + CREATE TABLE metaschema_modules_public.entity_type_provision ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -1868,14 +2116,20 @@ CREATE TABLE metaschema_modules_public.rate_limits_module ( UNIQUE (database_id) ); -CREATE INDEX rate_limits_module_database_id_idx ON metaschema_modules_public.rate_limits_module (database_id); - COMMENT ON CONSTRAINT rate_limit_settings_table_fkey ON metaschema_modules_public.rate_limits_module IS '@fieldName rateLimitSettingsTableByRateLimitSettingsTableId'; COMMENT ON CONSTRAINT ip_rate_limits_table_fkey ON metaschema_modules_public.rate_limits_module IS '@fieldName ipRateLimitsTableByIpRateLimitsTableId'; COMMENT ON CONSTRAINT rate_limits_table_fkey ON metaschema_modules_public.rate_limits_module IS '@fieldName rateLimitsTableByRateLimitsTableId'; +CREATE INDEX rate_limits_module_ip_rate_limits_table_id_idx ON metaschema_modules_public.rate_limits_module (ip_rate_limits_table_id); + +CREATE INDEX rate_limits_module_rate_limit_settings_table_id_idx ON metaschema_modules_public.rate_limits_module (rate_limit_settings_table_id); + +CREATE INDEX rate_limits_module_rate_limits_table_id_idx ON metaschema_modules_public.rate_limits_module (rate_limits_table_id); + +CREATE INDEX rate_limits_module_schema_id_idx ON metaschema_modules_public.rate_limits_module (schema_id); + CREATE TABLE metaschema_modules_public.devices_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -1904,12 +2158,16 @@ CREATE TABLE metaschema_modules_public.devices_module ( UNIQUE (database_id) ); -CREATE INDEX devices_module_database_id_idx ON metaschema_modules_public.devices_module (database_id); - COMMENT ON CONSTRAINT user_devices_table_fkey ON metaschema_modules_public.devices_module IS '@fieldName userDevicesTableByUserDevicesTableId'; COMMENT ON CONSTRAINT device_settings_table_fkey ON metaschema_modules_public.devices_module IS '@fieldName deviceSettingsTableByDeviceSettingsTableId'; +CREATE INDEX devices_module_device_settings_table_id_idx ON metaschema_modules_public.devices_module (device_settings_table_id); + +CREATE INDEX devices_module_user_devices_table_id_idx ON metaschema_modules_public.devices_module (user_devices_table_id); + +CREATE INDEX devices_module_schema_id_idx ON metaschema_modules_public.devices_module (schema_id); + CREATE TABLE metaschema_modules_public.session_secrets_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -1981,6 +2239,14 @@ CREATE TABLE metaschema_modules_public.webauthn_credentials_module ( CREATE INDEX webauthn_credentials_module_database_id_idx ON metaschema_modules_public.webauthn_credentials_module (database_id); +CREATE INDEX webauthn_credentials_module_owner_table_id_idx ON metaschema_modules_public.webauthn_credentials_module (owner_table_id); + +CREATE INDEX webauthn_credentials_module_table_id_idx ON metaschema_modules_public.webauthn_credentials_module (table_id); + +CREATE INDEX webauthn_credentials_module_private_schema_id_idx ON metaschema_modules_public.webauthn_credentials_module (private_schema_id); + +CREATE INDEX webauthn_credentials_module_schema_id_idx ON metaschema_modules_public.webauthn_credentials_module (schema_id); + COMMENT ON TABLE metaschema_modules_public.webauthn_credentials_module IS 'Config row for the webauthn_credentials_module, which provisions the per-user WebAuthn/passkey credentials table (public key, counter, transports, device type, backup state) mirroring crypto_addresses_module. The sibling webauthn_auth_module holds RP config and the registration/sign-in challenge state.'; COMMENT ON COLUMN metaschema_modules_public.webauthn_credentials_module.private_schema_id IS 'Private schema that hosts SECURITY DEFINER helpers which write to webauthn_credentials (registration / counter-bump / delete).'; @@ -2038,6 +2304,20 @@ CREATE TABLE metaschema_modules_public.webauthn_auth_module ( CREATE INDEX webauthn_auth_module_database_id_idx ON metaschema_modules_public.webauthn_auth_module (database_id); +CREATE INDEX webauthn_auth_module_auth_settings_table_id_idx ON metaschema_modules_public.webauthn_auth_module (auth_settings_table_id); + +CREATE INDEX webauthn_auth_module_credentials_table_id_idx ON metaschema_modules_public.webauthn_auth_module (credentials_table_id); + +CREATE INDEX webauthn_auth_module_session_credentials_table_id_idx ON metaschema_modules_public.webauthn_auth_module (session_credentials_table_id); + +CREATE INDEX webauthn_auth_module_session_secrets_table_id_idx ON metaschema_modules_public.webauthn_auth_module (session_secrets_table_id); + +CREATE INDEX webauthn_auth_module_sessions_table_id_idx ON metaschema_modules_public.webauthn_auth_module (sessions_table_id); + +CREATE INDEX webauthn_auth_module_users_table_id_idx ON metaschema_modules_public.webauthn_auth_module (users_table_id); + +CREATE INDEX webauthn_auth_module_schema_id_idx ON metaschema_modules_public.webauthn_auth_module (schema_id); + CREATE TABLE metaschema_modules_public.identity_providers_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -2075,8 +2355,6 @@ CREATE TABLE metaschema_modules_public.identity_providers_module ( ON DELETE CASCADE ); -CREATE INDEX identity_providers_module_database_id_idx ON metaschema_modules_public.identity_providers_module (database_id); - CREATE INDEX identity_providers_module_schema_id_idx ON metaschema_modules_public.identity_providers_module (schema_id); CREATE INDEX identity_providers_module_private_schema_id_idx ON metaschema_modules_public.identity_providers_module (private_schema_id); @@ -2085,6 +2363,8 @@ CREATE INDEX identity_providers_module_table_id_idx ON metaschema_modules_public CREATE UNIQUE INDEX identity_providers_module_unique_scope ON metaschema_modules_public.identity_providers_module (database_id, scope); +CREATE INDEX identity_providers_module_entity_table_id_idx ON metaschema_modules_public.identity_providers_module (entity_table_id); + COMMENT ON TABLE metaschema_modules_public.identity_providers_module IS 'Entity-aware config row for the identity_providers_module, which provisions a per-database identity_providers table holding OAuth2 / OIDC (and future SAML) provider definitions. The scope column determines which internal_secrets_module table the rotate proc targets @@ -2172,39 +2452,61 @@ CREATE TABLE metaschema_modules_public.notifications_module ( ON DELETE CASCADE ); -COMMENT ON CONSTRAINT schema_fkey ON metaschema_modules_public.notifications_module IS '@omit manyToMany'; +COMMENT ON CONSTRAINT schema_fkey ON metaschema_modules_public.notifications_module IS '@behavior -manyToMany'; -COMMENT ON CONSTRAINT private_schema_fkey ON metaschema_modules_public.notifications_module IS '@omit manyToMany'; +COMMENT ON CONSTRAINT private_schema_fkey ON metaschema_modules_public.notifications_module IS '@behavior -manyToMany'; COMMENT ON CONSTRAINT notifications_table_fkey ON metaschema_modules_public.notifications_module IS '@fieldName notificationsTableByNotificationsTableId -@omit manyToMany'; +@behavior -manyToMany'; COMMENT ON CONSTRAINT read_state_table_fkey ON metaschema_modules_public.notifications_module IS '@fieldName readStateTableByReadStateTableId -@omit manyToMany'; +@behavior -manyToMany'; COMMENT ON CONSTRAINT preferences_table_fkey ON metaschema_modules_public.notifications_module IS '@fieldName preferencesTableByPreferencesTableId -@omit manyToMany'; +@behavior -manyToMany'; COMMENT ON CONSTRAINT channels_table_fkey ON metaschema_modules_public.notifications_module IS '@fieldName channelsTableByChannelsTableId -@omit manyToMany'; +@behavior -manyToMany'; COMMENT ON CONSTRAINT delivery_log_table_fkey ON metaschema_modules_public.notifications_module IS '@fieldName deliveryLogTableByDeliveryLogTableId -@omit manyToMany'; +@behavior -manyToMany'; COMMENT ON CONSTRAINT suppressions_table_fkey ON metaschema_modules_public.notifications_module IS '@fieldName suppressionsTableBySuppressionsTableId'; -COMMENT ON CONSTRAINT owner_table_fkey ON metaschema_modules_public.notifications_module IS '@omit manyToMany'; +COMMENT ON CONSTRAINT owner_table_fkey ON metaschema_modules_public.notifications_module IS '@behavior -manyToMany'; COMMENT ON CONSTRAINT user_settings_table_fkey ON metaschema_modules_public.notifications_module IS '@fieldName userSettingsTableByUserSettingsTableId -@omit manyToMany'; +@behavior -manyToMany'; COMMENT ON CONSTRAINT organization_settings_table_fkey ON metaschema_modules_public.notifications_module IS '@fieldName organizationSettingsTableByOrganizationSettingsTableId -@omit manyToMany'; +@behavior -manyToMany'; -COMMENT ON CONSTRAINT db_fkey ON metaschema_modules_public.notifications_module IS '@omit manyToMany'; +COMMENT ON CONSTRAINT db_fkey ON metaschema_modules_public.notifications_module IS '@behavior -manyToMany'; CREATE INDEX notifications_module_database_id_idx ON metaschema_modules_public.notifications_module (database_id); +CREATE INDEX notifications_module_channels_table_id_idx ON metaschema_modules_public.notifications_module (channels_table_id); + +CREATE INDEX notifications_module_delivery_log_table_id_idx ON metaschema_modules_public.notifications_module (delivery_log_table_id); + +CREATE INDEX notifications_module_notifications_table_id_idx ON metaschema_modules_public.notifications_module (notifications_table_id); + +CREATE INDEX notifications_module_organization_settings_table_id_idx ON metaschema_modules_public.notifications_module (organization_settings_table_id); + +CREATE INDEX notifications_module_owner_table_id_idx ON metaschema_modules_public.notifications_module (owner_table_id); + +CREATE INDEX notifications_module_preferences_table_id_idx ON metaschema_modules_public.notifications_module (preferences_table_id); + +CREATE INDEX notifications_module_read_state_table_id_idx ON metaschema_modules_public.notifications_module (read_state_table_id); + +CREATE INDEX notifications_module_suppressions_table_id_idx ON metaschema_modules_public.notifications_module (suppressions_table_id); + +CREATE INDEX notifications_module_user_settings_table_id_idx ON metaschema_modules_public.notifications_module (user_settings_table_id); + +CREATE INDEX notifications_module_private_schema_id_idx ON metaschema_modules_public.notifications_module (private_schema_id); + +CREATE INDEX notifications_module_schema_id_idx ON metaschema_modules_public.notifications_module (schema_id); + CREATE TABLE metaschema_modules_public.plans_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -2267,7 +2569,21 @@ CREATE TABLE metaschema_modules_public.plans_module ( UNIQUE (database_id) ); -CREATE INDEX plans_module_database_id_idx ON metaschema_modules_public.plans_module (database_id); +CREATE INDEX plans_module_plan_caps_table_id_idx ON metaschema_modules_public.plans_module (plan_caps_table_id); + +CREATE INDEX plans_module_plan_limits_table_id_idx ON metaschema_modules_public.plans_module (plan_limits_table_id); + +CREATE INDEX plans_module_plan_meter_limits_table_id_idx ON metaschema_modules_public.plans_module (plan_meter_limits_table_id); + +CREATE INDEX plans_module_plan_overrides_table_id_idx ON metaschema_modules_public.plans_module (plan_overrides_table_id); + +CREATE INDEX plans_module_plan_pricing_table_id_idx ON metaschema_modules_public.plans_module (plan_pricing_table_id); + +CREATE INDEX plans_module_plans_table_id_idx ON metaschema_modules_public.plans_module (plans_table_id); + +CREATE INDEX plans_module_private_schema_id_idx ON metaschema_modules_public.plans_module (private_schema_id); + +CREATE INDEX plans_module_schema_id_idx ON metaschema_modules_public.plans_module (schema_id); CREATE TABLE metaschema_modules_public.billing_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), @@ -2342,7 +2658,23 @@ CREATE TABLE metaschema_modules_public.billing_module ( UNIQUE (database_id) ); -CREATE INDEX billing_module_database_id_idx ON metaschema_modules_public.billing_module (database_id); +CREATE INDEX billing_module_balances_table_id_idx ON metaschema_modules_public.billing_module (balances_table_id); + +CREATE INDEX billing_module_ledger_table_id_idx ON metaschema_modules_public.billing_module (ledger_table_id); + +CREATE INDEX billing_module_meter_credits_table_id_idx ON metaschema_modules_public.billing_module (meter_credits_table_id); + +CREATE INDEX billing_module_meter_defaults_table_id_idx ON metaschema_modules_public.billing_module (meter_defaults_table_id); + +CREATE INDEX billing_module_meter_sources_table_id_idx ON metaschema_modules_public.billing_module (meter_sources_table_id); + +CREATE INDEX billing_module_meters_table_id_idx ON metaschema_modules_public.billing_module (meters_table_id); + +CREATE INDEX billing_module_plan_subscriptions_table_id_idx ON metaschema_modules_public.billing_module (plan_subscriptions_table_id); + +CREATE INDEX billing_module_private_schema_id_idx ON metaschema_modules_public.billing_module (private_schema_id); + +CREATE INDEX billing_module_schema_id_idx ON metaschema_modules_public.billing_module (schema_id); CREATE TABLE metaschema_modules_public.billing_provider_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), @@ -2415,7 +2747,25 @@ CREATE TABLE metaschema_modules_public.billing_provider_module ( UNIQUE (database_id) ); -CREATE INDEX billing_provider_module_database_id_idx ON metaschema_modules_public.billing_provider_module (database_id); +CREATE INDEX billing_provider_module_billing_customers_table_id_idx ON metaschema_modules_public.billing_provider_module (billing_customers_table_id); + +CREATE INDEX billing_provider_module_billing_prices_table_id_idx ON metaschema_modules_public.billing_provider_module (billing_prices_table_id); + +CREATE INDEX billing_provider_module_billing_products_table_id_idx ON metaschema_modules_public.billing_provider_module (billing_products_table_id); + +CREATE INDEX billing_provider_module_billing_subscriptions_table_id_idx ON metaschema_modules_public.billing_provider_module (billing_subscriptions_table_id); + +CREATE INDEX billing_provider_module_billing_webhook_events_table_id_idx ON metaschema_modules_public.billing_provider_module (billing_webhook_events_table_id); + +CREATE INDEX billing_provider_module_prices_table_id_idx ON metaschema_modules_public.billing_provider_module (prices_table_id); + +CREATE INDEX billing_provider_module_products_table_id_idx ON metaschema_modules_public.billing_provider_module (products_table_id); + +CREATE INDEX billing_provider_module_subscriptions_table_id_idx ON metaschema_modules_public.billing_provider_module (subscriptions_table_id); + +CREATE INDEX billing_provider_module_private_schema_id_idx ON metaschema_modules_public.billing_provider_module (private_schema_id); + +CREATE INDEX billing_provider_module_schema_id_idx ON metaschema_modules_public.billing_provider_module (schema_id); CREATE TABLE metaschema_modules_public.realtime_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), @@ -2462,8 +2812,6 @@ CREATE TABLE metaschema_modules_public.realtime_module ( ON DELETE CASCADE ); -CREATE INDEX realtime_module_database_id_idx ON metaschema_modules_public.realtime_module (database_id); - CREATE UNIQUE INDEX realtime_module_unique_per_db ON metaschema_modules_public.realtime_module (database_id); CREATE INDEX realtime_module_schema_id_idx ON metaschema_modules_public.realtime_module (schema_id); @@ -2524,14 +2872,22 @@ CREATE TABLE metaschema_modules_public.rate_limit_meters_module ( UNIQUE (database_id) ); -CREATE INDEX rate_limit_meters_module_database_id_idx ON metaschema_modules_public.rate_limit_meters_module (database_id); - COMMENT ON CONSTRAINT rate_limit_state_table_fkey ON metaschema_modules_public.rate_limit_meters_module IS '@fieldName rateLimitStateTableByRateLimitStateTableId'; COMMENT ON CONSTRAINT rate_limit_overrides_table_fkey ON metaschema_modules_public.rate_limit_meters_module IS '@fieldName rateLimitOverridesTableByRateLimitOverridesTableId'; COMMENT ON CONSTRAINT rate_window_limits_table_fkey ON metaschema_modules_public.rate_limit_meters_module IS '@fieldName rateWindowLimitsTableByRateWindowLimitsTableId'; +CREATE INDEX rate_limit_meters_module_rate_limit_overrides_table_id_idx ON metaschema_modules_public.rate_limit_meters_module (rate_limit_overrides_table_id); + +CREATE INDEX rate_limit_meters_module_rate_limit_state_table_id_idx ON metaschema_modules_public.rate_limit_meters_module (rate_limit_state_table_id); + +CREATE INDEX rate_limit_meters_module_rate_window_limits_table_id_idx ON metaschema_modules_public.rate_limit_meters_module (rate_window_limits_table_id); + +CREATE INDEX rate_limit_meters_module_private_schema_id_idx ON metaschema_modules_public.rate_limit_meters_module (private_schema_id); + +CREATE INDEX rate_limit_meters_module_schema_id_idx ON metaschema_modules_public.rate_limit_meters_module (schema_id); + CREATE TABLE metaschema_modules_public.inference_log_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -2577,7 +2933,13 @@ CREATE TABLE metaschema_modules_public.inference_log_module ( UNIQUE NULLS NOT DISTINCT (database_id, prefix) ); -CREATE INDEX inference_log_module_database_id_idx ON metaschema_modules_public.inference_log_module (database_id); +CREATE INDEX inference_log_module_inference_log_table_id_idx ON metaschema_modules_public.inference_log_module (inference_log_table_id); + +CREATE INDEX inference_log_module_usage_summary_table_id_idx ON metaschema_modules_public.inference_log_module (usage_summary_table_id); + +CREATE INDEX inference_log_module_private_schema_id_idx ON metaschema_modules_public.inference_log_module (private_schema_id); + +CREATE INDEX inference_log_module_schema_id_idx ON metaschema_modules_public.inference_log_module (schema_id); CREATE TABLE metaschema_modules_public.compute_log_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), @@ -2624,7 +2986,13 @@ CREATE TABLE metaschema_modules_public.compute_log_module ( UNIQUE (database_id, scope) ); -CREATE INDEX compute_log_module_database_id_idx ON metaschema_modules_public.compute_log_module (database_id); +CREATE INDEX compute_log_module_compute_log_table_id_idx ON metaschema_modules_public.compute_log_module (compute_log_table_id); + +CREATE INDEX compute_log_module_usage_summary_table_id_idx ON metaschema_modules_public.compute_log_module (usage_summary_table_id); + +CREATE INDEX compute_log_module_private_schema_id_idx ON metaschema_modules_public.compute_log_module (private_schema_id); + +CREATE INDEX compute_log_module_schema_id_idx ON metaschema_modules_public.compute_log_module (schema_id); CREATE TABLE metaschema_modules_public.transfer_log_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), @@ -2671,7 +3039,13 @@ CREATE TABLE metaschema_modules_public.transfer_log_module ( UNIQUE NULLS NOT DISTINCT (database_id, prefix) ); -CREATE INDEX transfer_log_module_database_id_idx ON metaschema_modules_public.transfer_log_module (database_id); +CREATE INDEX transfer_log_module_transfer_log_table_id_idx ON metaschema_modules_public.transfer_log_module (transfer_log_table_id); + +CREATE INDEX transfer_log_module_usage_summary_table_id_idx ON metaschema_modules_public.transfer_log_module (usage_summary_table_id); + +CREATE INDEX transfer_log_module_private_schema_id_idx ON metaschema_modules_public.transfer_log_module (private_schema_id); + +CREATE INDEX transfer_log_module_schema_id_idx ON metaschema_modules_public.transfer_log_module (schema_id); CREATE TABLE metaschema_modules_public.storage_log_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), @@ -2718,7 +3092,13 @@ CREATE TABLE metaschema_modules_public.storage_log_module ( UNIQUE (database_id, scope) ); -CREATE INDEX storage_log_module_database_id_idx ON metaschema_modules_public.storage_log_module (database_id); +CREATE INDEX storage_log_module_storage_log_table_id_idx ON metaschema_modules_public.storage_log_module (storage_log_table_id); + +CREATE INDEX storage_log_module_usage_summary_table_id_idx ON metaschema_modules_public.storage_log_module (usage_summary_table_id); + +CREATE INDEX storage_log_module_private_schema_id_idx ON metaschema_modules_public.storage_log_module (private_schema_id); + +CREATE INDEX storage_log_module_schema_id_idx ON metaschema_modules_public.storage_log_module (schema_id); CREATE TABLE metaschema_modules_public.db_usage_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), @@ -2780,7 +3160,17 @@ CREATE TABLE metaschema_modules_public.db_usage_module ( UNIQUE (database_id, scope) ); -CREATE INDEX db_usage_module_database_id_idx ON metaschema_modules_public.db_usage_module (database_id); +CREATE INDEX db_usage_module_query_stats_log_table_id_idx ON metaschema_modules_public.db_usage_module (query_stats_log_table_id); + +CREATE INDEX db_usage_module_query_stats_summary_table_id_idx ON metaschema_modules_public.db_usage_module (query_stats_summary_table_id); + +CREATE INDEX db_usage_module_table_stats_log_table_id_idx ON metaschema_modules_public.db_usage_module (table_stats_log_table_id); + +CREATE INDEX db_usage_module_table_stats_summary_table_id_idx ON metaschema_modules_public.db_usage_module (table_stats_summary_table_id); + +CREATE INDEX db_usage_module_private_schema_id_idx ON metaschema_modules_public.db_usage_module (private_schema_id); + +CREATE INDEX db_usage_module_schema_id_idx ON metaschema_modules_public.db_usage_module (schema_id); CREATE TABLE metaschema_modules_public.agent_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), @@ -2869,10 +3259,30 @@ CREATE TABLE metaschema_modules_public.agent_module ( ON DELETE CASCADE ); -CREATE INDEX agent_module_database_id_idx ON metaschema_modules_public.agent_module (database_id); - CREATE UNIQUE INDEX agent_module_unique_scope ON metaschema_modules_public.agent_module (database_id, scope, prefix); +CREATE INDEX agent_module_agent_table_id_idx ON metaschema_modules_public.agent_module (agent_table_id); + +CREATE INDEX agent_module_entity_table_id_idx ON metaschema_modules_public.agent_module (entity_table_id); + +CREATE INDEX agent_module_message_table_id_idx ON metaschema_modules_public.agent_module (message_table_id); + +CREATE INDEX agent_module_persona_table_id_idx ON metaschema_modules_public.agent_module (persona_table_id); + +CREATE INDEX agent_module_plan_table_id_idx ON metaschema_modules_public.agent_module (plan_table_id); + +CREATE INDEX agent_module_prompts_table_id_idx ON metaschema_modules_public.agent_module (prompts_table_id); + +CREATE INDEX agent_module_resource_table_id_idx ON metaschema_modules_public.agent_module (resource_table_id); + +CREATE INDEX agent_module_task_table_id_idx ON metaschema_modules_public.agent_module (task_table_id); + +CREATE INDEX agent_module_thread_table_id_idx ON metaschema_modules_public.agent_module (thread_table_id); + +CREATE INDEX agent_module_private_schema_id_idx ON metaschema_modules_public.agent_module (private_schema_id); + +CREATE INDEX agent_module_schema_id_idx ON metaschema_modules_public.agent_module (schema_id); + CREATE TABLE metaschema_modules_public.merkle_store_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -2924,10 +3334,18 @@ CREATE TABLE metaschema_modules_public.merkle_store_module ( UNIQUE (database_id, prefix) ); -CREATE INDEX merkle_store_module_database_id_idx ON metaschema_modules_public.merkle_store_module (database_id); - CREATE INDEX merkle_store_module_private_schema_id_idx ON metaschema_modules_public.merkle_store_module (private_schema_id); +CREATE INDEX merkle_store_module_commit_table_id_idx ON metaschema_modules_public.merkle_store_module (commit_table_id); + +CREATE INDEX merkle_store_module_object_table_id_idx ON metaschema_modules_public.merkle_store_module (object_table_id); + +CREATE INDEX merkle_store_module_ref_table_id_idx ON metaschema_modules_public.merkle_store_module (ref_table_id); + +CREATE INDEX merkle_store_module_store_table_id_idx ON metaschema_modules_public.merkle_store_module (store_table_id); + +CREATE INDEX merkle_store_module_schema_id_idx ON metaschema_modules_public.merkle_store_module (schema_id); + CREATE TABLE metaschema_modules_public.graph_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -2975,7 +3393,15 @@ CREATE TABLE metaschema_modules_public.graph_module ( UNIQUE (database_id, merkle_store_module_id) ); -CREATE INDEX graph_module_database_id_idx ON metaschema_modules_public.graph_module (database_id); +CREATE INDEX graph_module_entity_table_id_idx ON metaschema_modules_public.graph_module (entity_table_id); + +CREATE INDEX graph_module_graphs_table_id_idx ON metaschema_modules_public.graph_module (graphs_table_id); + +CREATE INDEX graph_module_private_schema_id_idx ON metaschema_modules_public.graph_module (private_schema_id); + +CREATE INDEX graph_module_public_schema_id_idx ON metaschema_modules_public.graph_module (public_schema_id); + +CREATE INDEX graph_module_merkle_store_module_id_idx ON metaschema_modules_public.graph_module (merkle_store_module_id); CREATE TABLE metaschema_modules_public.graph_execution_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), @@ -3035,10 +3461,22 @@ CREATE TABLE metaschema_modules_public.graph_execution_module ( ON DELETE CASCADE ); -CREATE INDEX graph_execution_module_database_id_idx ON metaschema_modules_public.graph_execution_module (database_id); - CREATE UNIQUE INDEX graph_execution_module_unique_scope ON metaschema_modules_public.graph_execution_module (database_id, scope); +CREATE INDEX graph_execution_module_entity_table_id_idx ON metaschema_modules_public.graph_execution_module (entity_table_id); + +CREATE INDEX graph_execution_module_executions_table_id_idx ON metaschema_modules_public.graph_execution_module (executions_table_id); + +CREATE INDEX graph_execution_module_node_states_table_id_idx ON metaschema_modules_public.graph_execution_module (node_states_table_id); + +CREATE INDEX graph_execution_module_outputs_table_id_idx ON metaschema_modules_public.graph_execution_module (outputs_table_id); + +CREATE INDEX graph_execution_module_private_schema_id_idx ON metaschema_modules_public.graph_execution_module (private_schema_id); + +CREATE INDEX graph_execution_module_schema_id_idx ON metaschema_modules_public.graph_execution_module (schema_id); + +CREATE INDEX graph_execution_module_graph_module_id_idx ON metaschema_modules_public.graph_execution_module (graph_module_id); + CREATE TABLE metaschema_modules_public.db_preset_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -3085,7 +3523,15 @@ CREATE TABLE metaschema_modules_public.db_preset_module ( UNIQUE (database_id, merkle_store_module_id) ); -CREATE INDEX db_preset_module_database_id_idx ON metaschema_modules_public.db_preset_module (database_id); +CREATE INDEX db_preset_module_entity_table_id_idx ON metaschema_modules_public.db_preset_module (entity_table_id); + +CREATE INDEX db_preset_module_db_presets_table_id_idx ON metaschema_modules_public.db_preset_module (db_presets_table_id); + +CREATE INDEX db_preset_module_private_schema_id_idx ON metaschema_modules_public.db_preset_module (private_schema_id); + +CREATE INDEX db_preset_module_public_schema_id_idx ON metaschema_modules_public.db_preset_module (public_schema_id); + +CREATE INDEX db_preset_module_merkle_store_module_id_idx ON metaschema_modules_public.db_preset_module (merkle_store_module_id); CREATE TABLE metaschema_modules_public.namespace_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), @@ -3133,10 +3579,18 @@ CREATE TABLE metaschema_modules_public.namespace_module ( ON DELETE CASCADE ); -CREATE INDEX namespace_module_database_id_idx ON metaschema_modules_public.namespace_module (database_id); - CREATE UNIQUE INDEX namespace_module_unique_scope ON metaschema_modules_public.namespace_module (database_id, scope); +CREATE INDEX namespace_module_entity_table_id_idx ON metaschema_modules_public.namespace_module (entity_table_id); + +CREATE INDEX namespace_module_namespace_events_table_id_idx ON metaschema_modules_public.namespace_module (namespace_events_table_id); + +CREATE INDEX namespace_module_namespaces_table_id_idx ON metaschema_modules_public.namespace_module (namespaces_table_id); + +CREATE INDEX namespace_module_private_schema_id_idx ON metaschema_modules_public.namespace_module (private_schema_id); + +CREATE INDEX namespace_module_schema_id_idx ON metaschema_modules_public.namespace_module (schema_id); + CREATE TABLE metaschema_modules_public.function_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -3148,6 +3602,7 @@ CREATE TABLE metaschema_modules_public.function_module ( definitions_table_id uuid NOT NULL DEFAULT uuid_nil(), bindings_table_id uuid NOT NULL DEFAULT uuid_nil(), schedules_table_id uuid, + capability_bindings_table_id uuid NULL, has_cron boolean NOT NULL DEFAULT false, definitions_table_name text NOT NULL DEFAULT 'function_definitions', bindings_table_name text, @@ -3186,13 +3641,29 @@ CREATE TABLE metaschema_modules_public.function_module ( CONSTRAINT function_module_entity_table_fkey FOREIGN KEY(entity_table_id) REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, + CONSTRAINT function_module_capability_bindings_table_fkey + FOREIGN KEY(capability_bindings_table_id) + REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX function_module_database_id_idx ON metaschema_modules_public.function_module (database_id); - CREATE UNIQUE INDEX function_module_unique_scope ON metaschema_modules_public.function_module (database_id, scope); +CREATE INDEX function_module_bindings_table_id_idx ON metaschema_modules_public.function_module (bindings_table_id); + +CREATE INDEX function_module_definitions_table_id_idx ON metaschema_modules_public.function_module (definitions_table_id); + +CREATE INDEX function_module_entity_table_id_idx ON metaschema_modules_public.function_module (entity_table_id); + +CREATE INDEX function_module_schedules_table_id_idx ON metaschema_modules_public.function_module (schedules_table_id); + +CREATE INDEX function_module_capability_bindings_table_id_idx ON metaschema_modules_public.function_module (capability_bindings_table_id); + +CREATE INDEX function_module_private_schema_id_idx ON metaschema_modules_public.function_module (private_schema_id); + +CREATE INDEX function_module_schema_id_idx ON metaschema_modules_public.function_module (schema_id); + CREATE TABLE metaschema_modules_public.function_invocation_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -3245,10 +3716,20 @@ CREATE TABLE metaschema_modules_public.function_invocation_module ( ON DELETE CASCADE ); -CREATE INDEX function_invocation_module_database_id_idx ON metaschema_modules_public.function_invocation_module (database_id); - CREATE UNIQUE INDEX function_invocation_module_unique_scope ON metaschema_modules_public.function_invocation_module (database_id, scope); +CREATE INDEX function_invocation_module_attempts_table_id_idx ON metaschema_modules_public.function_invocation_module (attempts_table_id); + +CREATE INDEX function_invocation_module_entity_table_id_idx ON metaschema_modules_public.function_invocation_module (entity_table_id); + +CREATE INDEX function_invocation_module_invocations_table_id_idx ON metaschema_modules_public.function_invocation_module (invocations_table_id); + +CREATE INDEX function_invocation_module_execution_logs_table_id_idx ON metaschema_modules_public.function_invocation_module (execution_logs_table_id); + +CREATE INDEX function_invocation_module_private_schema_id_idx ON metaschema_modules_public.function_invocation_module (private_schema_id); + +CREATE INDEX function_invocation_module_schema_id_idx ON metaschema_modules_public.function_invocation_module (schema_id); + CREATE TABLE metaschema_modules_public.infra_secrets_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -3288,14 +3769,16 @@ CREATE TABLE metaschema_modules_public.infra_secrets_module ( ON DELETE CASCADE ); -CREATE INDEX infra_secrets_module_database_id_idx ON metaschema_modules_public.infra_secrets_module (database_id); - CREATE INDEX infra_secrets_module_schema_id_idx ON metaschema_modules_public.infra_secrets_module (schema_id); CREATE INDEX infra_secrets_module_secrets_table_id_idx ON metaschema_modules_public.infra_secrets_module (secrets_table_id); CREATE UNIQUE INDEX infra_secrets_module_unique_scope ON metaschema_modules_public.infra_secrets_module (database_id, scope); +CREATE INDEX infra_secrets_module_entity_table_id_idx ON metaschema_modules_public.infra_secrets_module (entity_table_id); + +CREATE INDEX infra_secrets_module_private_schema_id_idx ON metaschema_modules_public.infra_secrets_module (private_schema_id); + COMMENT ON TABLE metaschema_modules_public.infra_secrets_module IS 'Namespace-backed PGP-encrypted key-value secrets module. Requires namespace_module and emits namespace:sync_secrets job triggers for K8s Secret synchronization.'; CREATE TABLE metaschema_modules_public.infra_config_module ( @@ -3337,14 +3820,16 @@ CREATE TABLE metaschema_modules_public.infra_config_module ( ON DELETE CASCADE ); -CREATE INDEX infra_config_module_database_id_idx ON metaschema_modules_public.infra_config_module (database_id); - CREATE INDEX infra_config_module_schema_id_idx ON metaschema_modules_public.infra_config_module (schema_id); CREATE INDEX infra_config_module_config_table_id_idx ON metaschema_modules_public.infra_config_module (config_table_id); CREATE UNIQUE INDEX infra_config_module_unique_scope ON metaschema_modules_public.infra_config_module (database_id, scope); +CREATE INDEX infra_config_module_entity_table_id_idx ON metaschema_modules_public.infra_config_module (entity_table_id); + +CREATE INDEX infra_config_module_private_schema_id_idx ON metaschema_modules_public.infra_config_module (private_schema_id); + COMMENT ON TABLE metaschema_modules_public.infra_config_module IS 'Namespace-backed plaintext key-value config module. Requires namespace_module and emits namespace:sync_config job triggers for K8s ConfigMap synchronization.'; CREATE TABLE metaschema_modules_public.internal_secrets_module ( @@ -3386,14 +3871,16 @@ CREATE TABLE metaschema_modules_public.internal_secrets_module ( ON DELETE CASCADE ); -CREATE INDEX internal_secrets_module_database_id_idx ON metaschema_modules_public.internal_secrets_module (database_id); - CREATE INDEX internal_secrets_module_schema_id_idx ON metaschema_modules_public.internal_secrets_module (schema_id); CREATE INDEX internal_secrets_module_internal_secrets_table_id_idx ON metaschema_modules_public.internal_secrets_module (internal_secrets_table_id); CREATE UNIQUE INDEX internal_secrets_module_unique_scope ON metaschema_modules_public.internal_secrets_module (database_id, scope); +CREATE INDEX internal_secrets_module_entity_table_id_idx ON metaschema_modules_public.internal_secrets_module (entity_table_id); + +CREATE INDEX internal_secrets_module_private_schema_id_idx ON metaschema_modules_public.internal_secrets_module (private_schema_id); + COMMENT ON TABLE metaschema_modules_public.internal_secrets_module IS 'App-scoped PGP-encrypted internal secrets store. No namespace_module dependency and no K8s synchronization. Used by identity_providers_module for OAuth2 client_secret storage.'; CREATE TABLE metaschema_modules_public.user_credentials_module ( @@ -3418,8 +3905,6 @@ CREATE TABLE metaschema_modules_public.user_credentials_module ( ON DELETE CASCADE ); -CREATE INDEX user_credentials_module_database_id_idx ON metaschema_modules_public.user_credentials_module (database_id); - CREATE INDEX user_credentials_module_schema_id_idx ON metaschema_modules_public.user_credentials_module (schema_id); CREATE INDEX user_credentials_module_table_id_idx ON metaschema_modules_public.user_credentials_module (table_id); @@ -3456,10 +3941,14 @@ CREATE TABLE metaschema_modules_public.user_settings_module ( ON DELETE CASCADE ); -CREATE INDEX user_settings_module_database_id_idx ON metaschema_modules_public.user_settings_module (database_id); - CREATE UNIQUE INDEX user_settings_module_unique_per_db ON metaschema_modules_public.user_settings_module (database_id); +CREATE INDEX user_settings_module_owner_table_id_idx ON metaschema_modules_public.user_settings_module (owner_table_id); + +CREATE INDEX user_settings_module_table_id_idx ON metaschema_modules_public.user_settings_module (table_id); + +CREATE INDEX user_settings_module_schema_id_idx ON metaschema_modules_public.user_settings_module (schema_id); + CREATE TABLE metaschema_modules_public.i18n_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -3486,10 +3975,14 @@ CREATE TABLE metaschema_modules_public.i18n_module ( ON DELETE CASCADE ); -CREATE INDEX i18n_module_database_id_idx ON metaschema_modules_public.i18n_module (database_id); - CREATE UNIQUE INDEX i18n_module_unique_per_db ON metaschema_modules_public.i18n_module (database_id); +CREATE INDEX i18n_module_settings_table_id_idx ON metaschema_modules_public.i18n_module (settings_table_id); + +CREATE INDEX i18n_module_private_schema_id_idx ON metaschema_modules_public.i18n_module (private_schema_id); + +CREATE INDEX i18n_module_schema_id_idx ON metaschema_modules_public.i18n_module (schema_id); + CREATE TABLE metaschema_modules_public.function_deployment_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -3546,10 +4039,22 @@ CREATE TABLE metaschema_modules_public.function_deployment_module ( ON DELETE SET NULL ); -CREATE INDEX function_deployment_module_database_id_idx ON metaschema_modules_public.function_deployment_module (database_id); - CREATE UNIQUE INDEX function_deployment_module_unique_scope ON metaschema_modules_public.function_deployment_module (database_id, scope); +CREATE INDEX function_deployment_module_deployments_table_id_idx ON metaschema_modules_public.function_deployment_module (deployments_table_id); + +CREATE INDEX function_deployment_module_entity_table_id_idx ON metaschema_modules_public.function_deployment_module (entity_table_id); + +CREATE INDEX function_deployment_module_deployment_events_table_id_idx ON metaschema_modules_public.function_deployment_module (deployment_events_table_id); + +CREATE INDEX function_deployment_module_private_schema_id_idx ON metaschema_modules_public.function_deployment_module (private_schema_id); + +CREATE INDEX function_deployment_module_schema_id_idx ON metaschema_modules_public.function_deployment_module (schema_id); + +CREATE INDEX function_deployment_module_function_module_id_idx ON metaschema_modules_public.function_deployment_module (function_module_id); + +CREATE INDEX function_deployment_module_namespace_module_id_idx ON metaschema_modules_public.function_deployment_module (namespace_module_id); + CREATE TABLE metaschema_modules_public.principal_auth_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -3601,15 +4106,27 @@ CREATE TABLE metaschema_modules_public.principal_auth_module ( CREATE INDEX principal_auth_module_database_id_idx ON metaschema_modules_public.principal_auth_module (database_id); -COMMENT ON CONSTRAINT principals_table_fkey ON metaschema_modules_public.principal_auth_module IS '@omit'; +CREATE INDEX principal_auth_module_principal_entities_table_id_idx ON metaschema_modules_public.principal_auth_module (principal_entities_table_id); + +CREATE INDEX principal_auth_module_principals_table_id_idx ON metaschema_modules_public.principal_auth_module (principals_table_id); + +CREATE INDEX principal_auth_module_session_credentials_table_id_idx ON metaschema_modules_public.principal_auth_module (session_credentials_table_id); + +CREATE INDEX principal_auth_module_sessions_table_id_idx ON metaschema_modules_public.principal_auth_module (sessions_table_id); -COMMENT ON CONSTRAINT users_table_fkey ON metaschema_modules_public.principal_auth_module IS '@omit'; +CREATE INDEX principal_auth_module_users_table_id_idx ON metaschema_modules_public.principal_auth_module (users_table_id); -COMMENT ON CONSTRAINT sessions_table_fkey ON metaschema_modules_public.principal_auth_module IS '@omit'; +CREATE INDEX principal_auth_module_schema_id_idx ON metaschema_modules_public.principal_auth_module (schema_id); -COMMENT ON CONSTRAINT session_credentials_table_fkey ON metaschema_modules_public.principal_auth_module IS '@omit'; +COMMENT ON CONSTRAINT principals_table_fkey ON metaschema_modules_public.principal_auth_module IS '@behavior -*'; -COMMENT ON CONSTRAINT principal_entities_table_fkey ON metaschema_modules_public.principal_auth_module IS '@omit'; +COMMENT ON CONSTRAINT users_table_fkey ON metaschema_modules_public.principal_auth_module IS '@behavior -*'; + +COMMENT ON CONSTRAINT sessions_table_fkey ON metaschema_modules_public.principal_auth_module IS '@behavior -*'; + +COMMENT ON CONSTRAINT session_credentials_table_fkey ON metaschema_modules_public.principal_auth_module IS '@behavior -*'; + +COMMENT ON CONSTRAINT principal_entities_table_fkey ON metaschema_modules_public.principal_auth_module IS '@behavior -*'; COMMENT ON TABLE metaschema_modules_public.principal_auth_module IS 'Provisions the principals subsystem: a principals table, a principal_entities junction table, create/delete mutations, and org API key management. Supports both human-owned principals (AuthzDirectOwner, AuthzHumanOnly) and org-owned principals (AuthzEntityMembership with is_admin). Org principal and org API key functions are only generated when an org-scoped memberships_module exists for the database.'; @@ -3704,10 +4221,32 @@ CREATE TABLE metaschema_modules_public.resource_module ( ON DELETE SET NULL ); -CREATE INDEX resource_module_database_id_idx ON metaschema_modules_public.resource_module (database_id); - CREATE UNIQUE INDEX resource_module_unique_scope ON metaschema_modules_public.resource_module (database_id, scope); +CREATE INDEX resource_module_resource_definitions_table_id_idx ON metaschema_modules_public.resource_module (resource_definitions_table_id); + +CREATE INDEX resource_module_entity_table_id_idx ON metaschema_modules_public.resource_module (entity_table_id); + +CREATE INDEX resource_module_resource_events_table_id_idx ON metaschema_modules_public.resource_module (resource_events_table_id); + +CREATE INDEX resource_module_resource_installations_table_id_idx ON metaschema_modules_public.resource_module (resource_installations_table_id); + +CREATE INDEX resource_module_resources_table_id_idx ON metaschema_modules_public.resource_module (resources_table_id); + +CREATE INDEX resource_module_resource_status_checks_table_id_idx ON metaschema_modules_public.resource_module (resource_status_checks_table_id); + +CREATE INDEX resource_module_resource_usage_log_table_id_idx ON metaschema_modules_public.resource_module (resource_usage_log_table_id); + +CREATE INDEX resource_module_resource_usage_summary_table_id_idx ON metaschema_modules_public.resource_module (resource_usage_summary_table_id); + +CREATE INDEX resource_module_private_schema_id_idx ON metaschema_modules_public.resource_module (private_schema_id); + +CREATE INDEX resource_module_schema_id_idx ON metaschema_modules_public.resource_module (schema_id); + +CREATE INDEX resource_module_merkle_store_module_id_idx ON metaschema_modules_public.resource_module (merkle_store_module_id); + +CREATE INDEX resource_module_namespace_module_id_idx ON metaschema_modules_public.resource_module (namespace_module_id); + CREATE TABLE metaschema_modules_public.integration_providers_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -3745,8 +4284,6 @@ CREATE TABLE metaschema_modules_public.integration_providers_module ( ON DELETE CASCADE ); -CREATE INDEX integration_providers_module_database_id_idx ON metaschema_modules_public.integration_providers_module (database_id); - CREATE INDEX integration_providers_module_schema_id_idx ON metaschema_modules_public.integration_providers_module (schema_id); CREATE INDEX integration_providers_module_private_schema_id_idx ON metaschema_modules_public.integration_providers_module (private_schema_id); @@ -3755,6 +4292,8 @@ CREATE INDEX integration_providers_module_table_id_idx ON metaschema_modules_pub CREATE UNIQUE INDEX integration_providers_module_unique_scope ON metaschema_modules_public.integration_providers_module (database_id, scope, prefix); +CREATE INDEX integration_providers_module_entity_table_id_idx ON metaschema_modules_public.integration_providers_module (entity_table_id); + COMMENT ON TABLE metaschema_modules_public.integration_providers_module IS 'Config row for the integration_providers_module, which provisions a per-database integration_providers table holding branded, reusable service definitions. Integration providers act as a catalog of external services (e.g. Mailgun, Postgres) @@ -3841,10 +4380,26 @@ CREATE TABLE metaschema_modules_public.webhook_module ( ON DELETE CASCADE ); -CREATE INDEX webhook_module_database_id_idx ON metaschema_modules_public.webhook_module (database_id); - CREATE UNIQUE INDEX webhook_module_unique_scope ON metaschema_modules_public.webhook_module (database_id, scope); +CREATE INDEX webhook_module_webhook_endpoints_table_id_idx ON metaschema_modules_public.webhook_module (webhook_endpoints_table_id); + +CREATE INDEX webhook_module_entity_table_id_idx ON metaschema_modules_public.webhook_module (entity_table_id); + +CREATE INDEX webhook_module_webhook_events_table_id_idx ON metaschema_modules_public.webhook_module (webhook_events_table_id); + +CREATE INDEX webhook_module_private_schema_id_idx ON metaschema_modules_public.webhook_module (private_schema_id); + +CREATE INDEX webhook_module_schema_id_idx ON metaschema_modules_public.webhook_module (schema_id); + +CREATE INDEX webhook_module_function_module_id_idx ON metaschema_modules_public.webhook_module (function_module_id); + +CREATE INDEX webhook_module_function_invocation_module_id_idx ON metaschema_modules_public.webhook_module (function_invocation_module_id); + +CREATE INDEX webhook_module_namespace_module_id_idx ON metaschema_modules_public.webhook_module (namespace_module_id); + +CREATE INDEX webhook_module_infra_secrets_module_id_idx ON metaschema_modules_public.webhook_module (infra_secrets_module_id); + CREATE TABLE metaschema_modules_public.http_route_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -3901,10 +4456,22 @@ CREATE TABLE metaschema_modules_public.http_route_module ( ON DELETE CASCADE ); -CREATE INDEX http_route_module_database_id_idx ON metaschema_modules_public.http_route_module (database_id); - CREATE UNIQUE INDEX http_route_module_unique_scope ON metaschema_modules_public.http_route_module (database_id, scope); +CREATE INDEX http_route_module_entity_table_id_idx ON metaschema_modules_public.http_route_module (entity_table_id); + +CREATE INDEX http_route_module_http_routes_table_id_idx ON metaschema_modules_public.http_route_module (http_routes_table_id); + +CREATE INDEX http_route_module_private_schema_id_idx ON metaschema_modules_public.http_route_module (private_schema_id); + +CREATE INDEX http_route_module_schema_id_idx ON metaschema_modules_public.http_route_module (schema_id); + +CREATE INDEX http_route_module_function_module_id_idx ON metaschema_modules_public.http_route_module (function_module_id); + +CREATE INDEX http_route_module_resource_module_id_idx ON metaschema_modules_public.http_route_module (resource_module_id); + +CREATE INDEX http_route_module_storage_module_id_idx ON metaschema_modules_public.http_route_module (storage_module_id); + CREATE TABLE metaschema_modules_public.catalog_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -3920,6 +4487,10 @@ CREATE TABLE metaschema_modules_public.catalog_module ( resource_installations_table_id uuid NOT NULL DEFAULT uuid_nil(), apps_table_id uuid NOT NULL DEFAULT uuid_nil(), buckets_table_id uuid NOT NULL DEFAULT uuid_nil(), + sites_web_config_table_id uuid NOT NULL DEFAULT uuid_nil(), + sites_error_pages_table_id uuid NOT NULL DEFAULT uuid_nil(), + sites_app_links_table_id uuid NOT NULL DEFAULT uuid_nil(), + sites_deep_links_table_id uuid NOT NULL DEFAULT uuid_nil(), domains_table_name text NOT NULL DEFAULT 'domains', apis_table_name text NOT NULL DEFAULT 'apis', sites_table_name text NOT NULL DEFAULT 'sites', @@ -3930,6 +4501,10 @@ CREATE TABLE metaschema_modules_public.catalog_module ( resource_installations_table_name text NOT NULL DEFAULT 'resource_installations', apps_table_name text NOT NULL DEFAULT 'apps', buckets_table_name text NOT NULL DEFAULT 'buckets', + sites_web_config_table_name text NOT NULL DEFAULT 'sites_web_config', + sites_error_pages_table_name text NOT NULL DEFAULT 'sites_error_pages', + sites_app_links_table_name text NOT NULL DEFAULT 'sites_app_links', + sites_deep_links_table_name text NOT NULL DEFAULT 'sites_deep_links', api_name text, private_api_name text, scope text NOT NULL, @@ -3985,6 +4560,22 @@ CREATE TABLE metaschema_modules_public.catalog_module ( FOREIGN KEY(buckets_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, + CONSTRAINT catalog_module_sites_web_config_table_fkey + FOREIGN KEY(sites_web_config_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, + CONSTRAINT catalog_module_sites_error_pages_table_fkey + FOREIGN KEY(sites_error_pages_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, + CONSTRAINT catalog_module_sites_app_links_table_fkey + FOREIGN KEY(sites_app_links_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, + CONSTRAINT catalog_module_sites_deep_links_table_fkey + FOREIGN KEY(sites_deep_links_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, CONSTRAINT catalog_module_entity_table_fkey FOREIGN KEY(entity_table_id) REFERENCES metaschema_public.table (id) @@ -3993,6 +4584,38 @@ CREATE TABLE metaschema_modules_public.catalog_module ( CREATE UNIQUE INDEX catalog_module_unique_database ON metaschema_modules_public.catalog_module (database_id); +CREATE INDEX catalog_module_apis_table_id_idx ON metaschema_modules_public.catalog_module (apis_table_id); + +CREATE INDEX catalog_module_apps_table_id_idx ON metaschema_modules_public.catalog_module (apps_table_id); + +CREATE INDEX catalog_module_buckets_table_id_idx ON metaschema_modules_public.catalog_module (buckets_table_id); + +CREATE INDEX catalog_module_sites_web_config_table_id_idx ON metaschema_modules_public.catalog_module (sites_web_config_table_id); + +CREATE INDEX catalog_module_sites_error_pages_table_id_idx ON metaschema_modules_public.catalog_module (sites_error_pages_table_id); + +CREATE INDEX catalog_module_sites_app_links_table_id_idx ON metaschema_modules_public.catalog_module (sites_app_links_table_id); + +CREATE INDEX catalog_module_sites_deep_links_table_id_idx ON metaschema_modules_public.catalog_module (sites_deep_links_table_id); + +CREATE INDEX catalog_module_domains_table_id_idx ON metaschema_modules_public.catalog_module (domains_table_id); + +CREATE INDEX catalog_module_entity_table_id_idx ON metaschema_modules_public.catalog_module (entity_table_id); + +CREATE INDEX catalog_module_functions_table_id_idx ON metaschema_modules_public.catalog_module (functions_table_id); + +CREATE INDEX catalog_module_namespaces_table_id_idx ON metaschema_modules_public.catalog_module (namespaces_table_id); + +CREATE INDEX catalog_module_resource_definitions_table_id_idx ON metaschema_modules_public.catalog_module (resource_definitions_table_id); + +CREATE INDEX catalog_module_resource_installations_table_id_idx ON metaschema_modules_public.catalog_module (resource_installations_table_id); + +CREATE INDEX catalog_module_resources_table_id_idx ON metaschema_modules_public.catalog_module (resources_table_id); + +CREATE INDEX catalog_module_sites_table_id_idx ON metaschema_modules_public.catalog_module (sites_table_id); + +CREATE INDEX catalog_module_schema_id_idx ON metaschema_modules_public.catalog_module (schema_id); + CREATE TABLE metaschema_modules_public.domain_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -4056,10 +4679,24 @@ CREATE TABLE metaschema_modules_public.domain_module ( ON DELETE CASCADE ); -CREATE INDEX domain_module_database_id_idx ON metaschema_modules_public.domain_module (database_id); - CREATE UNIQUE INDEX domain_module_unique_scope ON metaschema_modules_public.domain_module (database_id, scope); +CREATE INDEX domain_module_domains_table_id_idx ON metaschema_modules_public.domain_module (domains_table_id); + +CREATE INDEX domain_module_entity_table_id_idx ON metaschema_modules_public.domain_module (entity_table_id); + +CREATE INDEX domain_module_domain_events_table_id_idx ON metaschema_modules_public.domain_module (domain_events_table_id); + +CREATE INDEX domain_module_managed_domains_table_id_idx ON metaschema_modules_public.domain_module (managed_domains_table_id); + +CREATE INDEX domain_module_domain_verifications_table_id_idx ON metaschema_modules_public.domain_module (domain_verifications_table_id); + +CREATE INDEX domain_module_private_schema_id_idx ON metaschema_modules_public.domain_module (private_schema_id); + +CREATE INDEX domain_module_schema_id_idx ON metaschema_modules_public.domain_module (schema_id); + +CREATE INDEX domain_module_catalog_module_id_idx ON metaschema_modules_public.domain_module (catalog_module_id); + CREATE TABLE metaschema_modules_public.api_surface_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -4069,12 +4706,10 @@ CREATE TABLE metaschema_modules_public.api_surface_module ( catalog_module_id uuid, apis_table_id uuid NOT NULL DEFAULT uuid_nil(), api_schemas_table_id uuid NOT NULL DEFAULT uuid_nil(), - api_modules_table_id uuid NOT NULL DEFAULT uuid_nil(), api_settings_table_id uuid NOT NULL DEFAULT uuid_nil(), cors_settings_table_id uuid NOT NULL DEFAULT uuid_nil(), apis_table_name text NOT NULL DEFAULT 'apis', api_schemas_table_name text NOT NULL DEFAULT 'api_schemas', - api_modules_table_name text NOT NULL DEFAULT 'api_modules', api_settings_table_name text NOT NULL DEFAULT 'api_settings', cors_settings_table_name text NOT NULL DEFAULT 'cors_settings', api_name text, @@ -4105,10 +4740,6 @@ CREATE TABLE metaschema_modules_public.api_surface_module ( FOREIGN KEY(api_schemas_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, - CONSTRAINT api_module_api_modules_table_fkey - FOREIGN KEY(api_modules_table_id) - REFERENCES metaschema_public.table (id) - ON DELETE CASCADE, CONSTRAINT api_module_api_settings_table_fkey FOREIGN KEY(api_settings_table_id) REFERENCES metaschema_public.table (id) @@ -4123,25 +4754,47 @@ CREATE TABLE metaschema_modules_public.api_surface_module ( ON DELETE CASCADE ); -CREATE INDEX api_module_database_id_idx ON metaschema_modules_public.api_surface_module (database_id); - CREATE UNIQUE INDEX api_module_unique_scope ON metaschema_modules_public.api_surface_module (database_id, scope); +CREATE INDEX api_surface_module_api_schemas_table_id_idx ON metaschema_modules_public.api_surface_module (api_schemas_table_id); + +CREATE INDEX api_surface_module_api_settings_table_id_idx ON metaschema_modules_public.api_surface_module (api_settings_table_id); + +CREATE INDEX api_surface_module_apis_table_id_idx ON metaschema_modules_public.api_surface_module (apis_table_id); + +CREATE INDEX api_surface_module_cors_settings_table_id_idx ON metaschema_modules_public.api_surface_module (cors_settings_table_id); + +CREATE INDEX api_surface_module_entity_table_id_idx ON metaschema_modules_public.api_surface_module (entity_table_id); + +CREATE INDEX api_surface_module_schema_id_idx ON metaschema_modules_public.api_surface_module (schema_id); + +CREATE INDEX api_surface_module_catalog_module_id_idx ON metaschema_modules_public.api_surface_module (catalog_module_id); + CREATE TABLE metaschema_modules_public.site_surface_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, entity_field text, schema_id uuid NOT NULL DEFAULT uuid_nil(), + private_schema_id uuid NOT NULL DEFAULT uuid_nil(), public_schema_name text, + private_schema_name text, catalog_module_id uuid, sites_table_id uuid NOT NULL DEFAULT uuid_nil(), site_metadata_table_id uuid NOT NULL DEFAULT uuid_nil(), site_modules_table_id uuid NOT NULL DEFAULT uuid_nil(), site_themes_table_id uuid NOT NULL DEFAULT uuid_nil(), + site_app_links_table_id uuid NOT NULL DEFAULT uuid_nil(), + site_deep_links_table_id uuid NOT NULL DEFAULT uuid_nil(), + site_web_config_table_id uuid NOT NULL DEFAULT uuid_nil(), + site_error_pages_table_id uuid NOT NULL DEFAULT uuid_nil(), sites_table_name text NOT NULL DEFAULT 'sites', site_metadata_table_name text NOT NULL DEFAULT 'site_metadata', site_modules_table_name text NOT NULL DEFAULT 'site_modules', site_themes_table_name text NOT NULL DEFAULT 'site_themes', + site_app_links_table_name text NOT NULL DEFAULT 'site_app_links', + site_deep_links_table_name text NOT NULL DEFAULT 'site_deep_links', + site_web_config_table_name text NOT NULL DEFAULT 'site_web_config', + site_error_pages_table_name text NOT NULL DEFAULT 'site_error_pages', api_name text, private_api_name text, scope text NOT NULL, @@ -4158,6 +4811,10 @@ CREATE TABLE metaschema_modules_public.site_surface_module ( FOREIGN KEY(schema_id) REFERENCES metaschema_public.schema (id) ON DELETE CASCADE, + CONSTRAINT site_module_private_schema_fkey + FOREIGN KEY(private_schema_id) + REFERENCES metaschema_public.schema (id) + ON DELETE CASCADE, CONSTRAINT site_module_catalog_fkey FOREIGN KEY(catalog_module_id) REFERENCES metaschema_modules_public.catalog_module (id) @@ -4178,16 +4835,52 @@ CREATE TABLE metaschema_modules_public.site_surface_module ( FOREIGN KEY(site_themes_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, + CONSTRAINT site_module_site_app_links_table_fkey + FOREIGN KEY(site_app_links_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, + CONSTRAINT site_module_site_deep_links_table_fkey + FOREIGN KEY(site_deep_links_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, + CONSTRAINT site_module_site_web_config_table_fkey + FOREIGN KEY(site_web_config_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, + CONSTRAINT site_module_site_error_pages_table_fkey + FOREIGN KEY(site_error_pages_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, CONSTRAINT site_module_entity_table_fkey FOREIGN KEY(entity_table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE ); -CREATE INDEX site_module_database_id_idx ON metaschema_modules_public.site_surface_module (database_id); - CREATE UNIQUE INDEX site_module_unique_scope ON metaschema_modules_public.site_surface_module (database_id, scope); +CREATE INDEX site_surface_module_entity_table_id_idx ON metaschema_modules_public.site_surface_module (entity_table_id); + +CREATE INDEX site_surface_module_site_metadata_table_id_idx ON metaschema_modules_public.site_surface_module (site_metadata_table_id); + +CREATE INDEX site_surface_module_site_modules_table_id_idx ON metaschema_modules_public.site_surface_module (site_modules_table_id); + +CREATE INDEX site_surface_module_site_themes_table_id_idx ON metaschema_modules_public.site_surface_module (site_themes_table_id); + +CREATE INDEX site_surface_module_site_app_links_table_id_idx ON metaschema_modules_public.site_surface_module (site_app_links_table_id); + +CREATE INDEX site_surface_module_site_deep_links_table_id_idx ON metaschema_modules_public.site_surface_module (site_deep_links_table_id); + +CREATE INDEX site_surface_module_site_web_config_table_id_idx ON metaschema_modules_public.site_surface_module (site_web_config_table_id); + +CREATE INDEX site_surface_module_site_error_pages_table_id_idx ON metaschema_modules_public.site_surface_module (site_error_pages_table_id); + +CREATE INDEX site_surface_module_sites_table_id_idx ON metaschema_modules_public.site_surface_module (sites_table_id); + +CREATE INDEX site_surface_module_schema_id_idx ON metaschema_modules_public.site_surface_module (schema_id); + +CREATE INDEX site_surface_module_catalog_module_id_idx ON metaschema_modules_public.site_surface_module (catalog_module_id); + CREATE TABLE metaschema_modules_public.route_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -4205,6 +4898,8 @@ CREATE TABLE metaschema_modules_public.route_module ( hostname_bindings_table_name text NOT NULL DEFAULT 'hostname_bindings', route_bindings_table_name text NOT NULL DEFAULT 'route_bindings', resolver_function_name text, + app_links_function_name text, + deep_link_function_name text, api_name text, private_api_name text, scope text NOT NULL, @@ -4251,10 +4946,24 @@ CREATE TABLE metaschema_modules_public.route_module ( ON DELETE CASCADE ); -CREATE INDEX route_module_database_id_idx ON metaschema_modules_public.route_module (database_id); - CREATE UNIQUE INDEX route_module_unique_scope ON metaschema_modules_public.route_module (database_id, scope); +CREATE INDEX route_module_entity_table_id_idx ON metaschema_modules_public.route_module (entity_table_id); + +CREATE INDEX route_module_hostname_bindings_table_id_idx ON metaschema_modules_public.route_module (hostname_bindings_table_id); + +CREATE INDEX route_module_route_bindings_table_id_idx ON metaschema_modules_public.route_module (route_bindings_table_id); + +CREATE INDEX route_module_routes_table_id_idx ON metaschema_modules_public.route_module (routes_table_id); + +CREATE INDEX route_module_private_schema_id_idx ON metaschema_modules_public.route_module (private_schema_id); + +CREATE INDEX route_module_schema_id_idx ON metaschema_modules_public.route_module (schema_id); + +CREATE INDEX route_module_catalog_module_id_idx ON metaschema_modules_public.route_module (catalog_module_id); + +CREATE INDEX route_module_domain_module_id_idx ON metaschema_modules_public.route_module (domain_module_id); + CREATE TABLE metaschema_modules_public.app_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -4306,10 +5015,20 @@ CREATE TABLE metaschema_modules_public.app_module ( ON DELETE CASCADE ); -CREATE INDEX app_module_database_id_idx ON metaschema_modules_public.app_module (database_id); - CREATE UNIQUE INDEX app_module_unique_scope ON metaschema_modules_public.app_module (database_id, scope); +CREATE INDEX app_module_app_components_table_id_idx ON metaschema_modules_public.app_module (app_components_table_id); + +CREATE INDEX app_module_apps_table_id_idx ON metaschema_modules_public.app_module (apps_table_id); + +CREATE INDEX app_module_entity_table_id_idx ON metaschema_modules_public.app_module (entity_table_id); + +CREATE INDEX app_module_private_schema_id_idx ON metaschema_modules_public.app_module (private_schema_id); + +CREATE INDEX app_module_schema_id_idx ON metaschema_modules_public.app_module (schema_id); + +CREATE INDEX app_module_catalog_module_id_idx ON metaschema_modules_public.app_module (catalog_module_id); + CREATE TABLE metaschema_modules_public.database_settings_module ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -4362,6 +5081,86 @@ CREATE TABLE metaschema_modules_public.database_settings_module ( ON DELETE CASCADE ); -CREATE INDEX database_settings_module_database_id_idx ON metaschema_modules_public.database_settings_module (database_id); +CREATE UNIQUE INDEX database_settings_module_unique_scope ON metaschema_modules_public.database_settings_module (database_id, scope); + +CREATE INDEX database_settings_module_entity_table_id_idx ON metaschema_modules_public.database_settings_module (entity_table_id); + +CREATE INDEX database_settings_module_pubkey_settings_table_id_idx ON metaschema_modules_public.database_settings_module (pubkey_settings_table_id); + +CREATE INDEX database_settings_module_rls_settings_table_id_idx ON metaschema_modules_public.database_settings_module (rls_settings_table_id); + +CREATE INDEX database_settings_module_database_settings_table_id_idx ON metaschema_modules_public.database_settings_module (database_settings_table_id); + +CREATE INDEX database_settings_module_webauthn_settings_table_id_idx ON metaschema_modules_public.database_settings_module (webauthn_settings_table_id); + +CREATE INDEX database_settings_module_schema_id_idx ON metaschema_modules_public.database_settings_module (schema_id); + +CREATE TABLE metaschema_modules_public.pages_module ( + id uuid PRIMARY KEY DEFAULT uuidv7(), + database_id uuid NOT NULL, + public_schema_id uuid NOT NULL DEFAULT uuid_nil(), + private_schema_id uuid NOT NULL DEFAULT uuid_nil(), + public_schema_name text, + private_schema_name text, + scope text NOT NULL, + prefix text NOT NULL, + merkle_store_module_id uuid NOT NULL, + site_surface_module_id uuid, + sites_table_id uuid NOT NULL DEFAULT uuid_nil(), + pages_table_id uuid NOT NULL DEFAULT uuid_nil(), + store_name_prefix text NOT NULL DEFAULT 'site:', + api_name text, + private_api_name text, + entity_table_id uuid NULL, + policies jsonb NULL, + provisions jsonb NULL, + created_at timestamptz NOT NULL DEFAULT now(), + CONSTRAINT pages_module_db_fkey + FOREIGN KEY(database_id) + REFERENCES metaschema_public.database (id) + ON DELETE CASCADE, + CONSTRAINT pages_module_public_schema_fkey + FOREIGN KEY(public_schema_id) + REFERENCES metaschema_public.schema (id) + ON DELETE CASCADE, + CONSTRAINT pages_module_private_schema_fkey + FOREIGN KEY(private_schema_id) + REFERENCES metaschema_public.schema (id) + ON DELETE CASCADE, + CONSTRAINT pages_module_merkle_store_fkey + FOREIGN KEY(merkle_store_module_id) + REFERENCES metaschema_modules_public.merkle_store_module (id) + ON DELETE CASCADE, + CONSTRAINT pages_module_site_surface_fkey + FOREIGN KEY(site_surface_module_id) + REFERENCES metaschema_modules_public.site_surface_module (id) + ON DELETE CASCADE, + CONSTRAINT pages_module_sites_table_fkey + FOREIGN KEY(sites_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, + CONSTRAINT pages_module_pages_table_fkey + FOREIGN KEY(pages_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, + CONSTRAINT pages_module_entity_table_fkey + FOREIGN KEY(entity_table_id) + REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, + CONSTRAINT pages_module_database_scope_unique + UNIQUE (database_id, scope) +); + +CREATE INDEX pages_module_entity_table_id_idx ON metaschema_modules_public.pages_module (entity_table_id); + +CREATE INDEX pages_module_pages_table_id_idx ON metaschema_modules_public.pages_module (pages_table_id); + +CREATE INDEX pages_module_sites_table_id_idx ON metaschema_modules_public.pages_module (sites_table_id); + +CREATE INDEX pages_module_site_surface_module_id_idx ON metaschema_modules_public.pages_module (site_surface_module_id); + +CREATE INDEX pages_module_private_schema_id_idx ON metaschema_modules_public.pages_module (private_schema_id); + +CREATE INDEX pages_module_public_schema_id_idx ON metaschema_modules_public.pages_module (public_schema_id); -CREATE UNIQUE INDEX database_settings_module_unique_scope ON metaschema_modules_public.database_settings_module (database_id, scope); \ No newline at end of file +CREATE INDEX pages_module_merkle_store_module_id_idx ON metaschema_modules_public.pages_module (merkle_store_module_id); \ No newline at end of file diff --git a/packages/metaschema-modules/verify/schemas/metaschema_modules_public/tables/pages_module/table.sql b/packages/metaschema-modules/verify/schemas/metaschema_modules_public/tables/pages_module/table.sql new file mode 100644 index 00000000..f7a7568f --- /dev/null +++ b/packages/metaschema-modules/verify/schemas/metaschema_modules_public/tables/pages_module/table.sql @@ -0,0 +1,10 @@ +-- Verify schemas/metaschema_modules_public/tables/pages_module/table on pg + +BEGIN; + +SELECT id, database_id, public_schema_id, private_schema_id, merkle_store_module_id, + site_surface_module_id, sites_table_id, pages_table_id, store_name_prefix, scope, prefix + FROM metaschema_modules_public.pages_module + WHERE FALSE; + +ROLLBACK; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/check_constraint/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/check_constraint/table.sql index a5326b31..74cc77e7 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/check_constraint/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/check_constraint/table.sql @@ -38,7 +38,6 @@ CREATE TABLE metaschema_public.check_constraint ( ); -CREATE INDEX check_constraint_table_id_idx ON metaschema_public.check_constraint ( table_id ); CREATE INDEX check_constraint_database_id_idx ON metaschema_public.check_constraint ( database_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/composite_type/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/composite_type/table.sql index eea0ffc3..3e5a3f56 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/composite_type/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/composite_type/table.sql @@ -30,7 +30,6 @@ CREATE TABLE metaschema_public.composite_type ( UNIQUE (schema_id, name) ); -CREATE INDEX composite_type_schema_id_idx ON metaschema_public.composite_type ( schema_id ); CREATE INDEX composite_type_database_id_idx ON metaschema_public.composite_type ( database_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/database/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/database/table.sql index 624a811d..0d7f1b82 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/database/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/database/table.sql @@ -30,7 +30,8 @@ ALTER TABLE metaschema_public.database CREATE UNIQUE INDEX databases_database_platform_singleton_idx ON metaschema_public.database (platform) WHERE platform; +CREATE INDEX database_owner_id_idx ON metaschema_public.database ( owner_id ); -COMMENT ON COLUMN metaschema_public.database.schema_hash IS '@omit'; +COMMENT ON COLUMN metaschema_public.database.schema_hash IS '@behavior -*'; COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/default_privilege/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/default_privilege/table.sql index c6f94f1b..9a70e24a 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/default_privilege/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/default_privilege/table.sql @@ -31,7 +31,6 @@ CREATE TABLE metaschema_public.default_privilege ( ); -CREATE INDEX default_privilege_schema_id_idx ON metaschema_public.default_privilege ( schema_id ); CREATE INDEX default_privilege_database_id_idx ON metaschema_public.default_privilege ( database_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/derives/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/derives/table.sql index 6fc61e4a..04faa777 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/derives/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/derives/table.sql @@ -40,7 +40,6 @@ CREATE TABLE metaschema_public.derives ( CONSTRAINT derives_table_source_uniq UNIQUE (table_id, source_table_id) ); -CREATE INDEX derives_table_id_idx ON metaschema_public.derives ( table_id ); CREATE INDEX derives_source_table_id_idx ON metaschema_public.derives ( source_table_id ); CREATE INDEX derives_database_id_idx ON metaschema_public.derives ( database_id ); diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/domain_type/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/domain_type/table.sql index 0dccb666..50faa22e 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/domain_type/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/domain_type/table.sql @@ -40,7 +40,6 @@ CREATE TABLE metaschema_public.domain_type ( ); -CREATE INDEX domain_type_schema_id_idx ON metaschema_public.domain_type ( schema_id ); CREATE INDEX domain_type_database_id_idx ON metaschema_public.domain_type ( database_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/embedding_chunks/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/embedding_chunks/table.sql index 0d9ba3fb..26882fb5 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/embedding_chunks/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/embedding_chunks/table.sql @@ -66,5 +66,7 @@ CREATE TABLE metaschema_public.embedding_chunks ( CREATE INDEX embedding_chunks_table_id_idx ON metaschema_public.embedding_chunks ( table_id ); CREATE INDEX embedding_chunks_database_id_idx ON metaschema_public.embedding_chunks ( database_id ); CREATE INDEX embedding_chunks_chunks_table_id_idx ON metaschema_public.embedding_chunks ( chunks_table_id ); +CREATE INDEX embedding_chunks_embedding_field_id_idx ON metaschema_public.embedding_chunks ( embedding_field_id ); +CREATE INDEX embedding_chunks_parent_fk_field_id_idx ON metaschema_public.embedding_chunks ( parent_fk_field_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/enum/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/enum/table.sql index 4cb6fd79..ca320acd 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/enum/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/enum/table.sql @@ -31,7 +31,6 @@ CREATE TABLE metaschema_public.enum ( ); -CREATE INDEX enum_schema_id_idx ON metaschema_public.enum ( schema_id ); CREATE INDEX enum_database_id_idx ON metaschema_public.enum ( database_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/exclusion_constraint/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/exclusion_constraint/table.sql index 82af1e9c..c5db5e1e 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/exclusion_constraint/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/exclusion_constraint/table.sql @@ -39,7 +39,6 @@ CREATE TABLE metaschema_public.exclusion_constraint ( ); -CREATE INDEX exclusion_constraint_table_id_idx ON metaschema_public.exclusion_constraint ( table_id ); CREATE INDEX exclusion_constraint_database_id_idx ON metaschema_public.exclusion_constraint ( database_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/field/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/field/table.sql index 5925c926..25a09358 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/field/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/field/table.sql @@ -70,7 +70,6 @@ CREATE TABLE metaschema_public.field ( ); -CREATE INDEX field_table_id_idx ON metaschema_public.field ( table_id ); CREATE INDEX field_database_id_idx ON metaschema_public.field ( database_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/field_behavior/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/field_behavior/table.sql new file mode 100644 index 00000000..da5b01d1 --- /dev/null +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/field_behavior/table.sql @@ -0,0 +1,52 @@ +-- Deploy schemas/metaschema_public/tables/field_behavior/table to pg + +-- requires: schemas/metaschema_public/schema +-- requires: schemas/metaschema_public/tables/database/table +-- requires: schemas/metaschema_public/tables/field/table + +BEGIN; + +-- One row per PostGraphile v5 behavior fragment attached to a field. An +-- entity's fragments are emitted, ordered by sort_order, as a single +-- '@behavior ' smart tag on the corresponding database object: +-- +-- ('-', 'insert') + ('-', 'update') -> @behavior -insert -update +-- +-- `scope` is the fragment's natural key, so an entity carries at most one +-- fragment per scope: writers upsert on (field_id, scope) rather than appending a +-- second fragment that would silently shadow the first. +CREATE TABLE metaschema_public.field_behavior ( + id uuid PRIMARY KEY DEFAULT uuidv7(), + database_id uuid NOT NULL DEFAULT uuid_nil(), + + field_id uuid NOT NULL REFERENCES metaschema_public.field (id) ON DELETE CASCADE, + + -- '+' (grant) or '-' (revoke). PostGraphile infers '+' when the modifier is + -- omitted; we always store it explicitly so fragments round-trip. + modifier char(1) NOT NULL DEFAULT '+', + + -- One or more camelCase words (or '*') joined by ':', e.g. 'insert', + -- 'resource:connection:filter', 'query:*:filter'. + scope text NOT NULL, + + -- Emission order within the entity. Later fragments win in PostGraphile, so + -- sort_order is meaningful when scopes overlap (e.g. '*' before 'insert'). + sort_order int NOT NULL DEFAULT 0, + + created_at timestamptz DEFAULT now(), + updated_at timestamptz DEFAULT now(), + + CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE, + + CONSTRAINT field_behavior_modifier_check CHECK (modifier IN ('+', '-')), + + CONSTRAINT field_behavior_scope_check CHECK ( + scope ~ '^([a-zA-Z][a-zA-Z0-9]*|\*)(:([a-zA-Z][a-zA-Z0-9]*|\*))*$' + ), + + CONSTRAINT field_behavior_scope_key UNIQUE (field_id, scope) +); + +CREATE INDEX field_behavior_database_id_idx ON metaschema_public.field_behavior ( database_id ); + +COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/foreign_key_constraint/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/foreign_key_constraint/table.sql index 05099b14..a08fa848 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/foreign_key_constraint/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/foreign_key_constraint/table.sql @@ -51,7 +51,7 @@ CREATE TABLE metaschema_public.foreign_key_constraint ( ); -CREATE INDEX foreign_key_constraint_table_id_idx ON metaschema_public.foreign_key_constraint ( table_id ); CREATE INDEX foreign_key_constraint_database_id_idx ON metaschema_public.foreign_key_constraint ( database_id ); +CREATE INDEX foreign_key_constraint_ref_table_id_idx ON metaschema_public.foreign_key_constraint ( ref_table_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/foreign_key_constraint_behavior/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/foreign_key_constraint_behavior/table.sql new file mode 100644 index 00000000..1c4de030 --- /dev/null +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/foreign_key_constraint_behavior/table.sql @@ -0,0 +1,52 @@ +-- Deploy schemas/metaschema_public/tables/foreign_key_constraint_behavior/table to pg + +-- requires: schemas/metaschema_public/schema +-- requires: schemas/metaschema_public/tables/database/table +-- requires: schemas/metaschema_public/tables/foreign_key_constraint/table + +BEGIN; + +-- One row per PostGraphile v5 behavior fragment attached to a foreign key constraint. An +-- entity's fragments are emitted, ordered by sort_order, as a single +-- '@behavior ' smart tag on the corresponding database object: +-- +-- ('-', 'insert') + ('-', 'update') -> @behavior -insert -update +-- +-- `scope` is the fragment's natural key, so an entity carries at most one +-- fragment per scope: writers upsert on (foreign_key_constraint_id, scope) rather than appending a +-- second fragment that would silently shadow the first. +CREATE TABLE metaschema_public.foreign_key_constraint_behavior ( + id uuid PRIMARY KEY DEFAULT uuidv7(), + database_id uuid NOT NULL DEFAULT uuid_nil(), + + foreign_key_constraint_id uuid NOT NULL REFERENCES metaschema_public.foreign_key_constraint (id) ON DELETE CASCADE, + + -- '+' (grant) or '-' (revoke). PostGraphile infers '+' when the modifier is + -- omitted; we always store it explicitly so fragments round-trip. + modifier char(1) NOT NULL DEFAULT '+', + + -- One or more camelCase words (or '*') joined by ':', e.g. 'insert', + -- 'resource:connection:filter', 'query:*:filter'. + scope text NOT NULL, + + -- Emission order within the entity. Later fragments win in PostGraphile, so + -- sort_order is meaningful when scopes overlap (e.g. '*' before 'insert'). + sort_order int NOT NULL DEFAULT 0, + + created_at timestamptz DEFAULT now(), + updated_at timestamptz DEFAULT now(), + + CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE, + + CONSTRAINT foreign_key_constraint_behavior_modifier_check CHECK (modifier IN ('+', '-')), + + CONSTRAINT foreign_key_constraint_behavior_scope_check CHECK ( + scope ~ '^([a-zA-Z][a-zA-Z0-9]*|\*)(:([a-zA-Z][a-zA-Z0-9]*|\*))*$' + ), + + CONSTRAINT foreign_key_constraint_behavior_scope_key UNIQUE (foreign_key_constraint_id, scope) +); + +CREATE INDEX foreign_key_constraint_behavior_database_id_idx ON metaschema_public.foreign_key_constraint_behavior ( database_id ); + +COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/function/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/function/table.sql index 0f0b33e3..8f5980c1 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/function/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/function/table.sql @@ -21,6 +21,5 @@ CREATE TABLE metaschema_public.function ( ); CREATE INDEX function_database_id_idx ON metaschema_public.function ( database_id ); -CREATE INDEX function_schema_id_idx ON metaschema_public.function ( schema_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/index/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/index/table.sql index a2295c7b..671bf956 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/index/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/index/table.sql @@ -43,6 +43,5 @@ CREATE TABLE metaschema_public.index ( CREATE INDEX index_table_id_idx ON metaschema_public.index ( table_id ); -CREATE INDEX index_database_id_idx ON metaschema_public.index ( database_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/partition/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/partition/table.sql index 6385452e..91d44661 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/partition/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/partition/table.sql @@ -43,5 +43,6 @@ CREATE TABLE metaschema_public.partition ( CREATE INDEX partition_database_id_idx ON metaschema_public.partition (database_id); +CREATE INDEX partition_partition_key_id_idx ON metaschema_public.partition ( partition_key_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/policy/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/policy/table.sql index c387a7a5..49c1f3ca 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/policy/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/policy/table.sql @@ -66,7 +66,6 @@ COMMENT ON COLUMN metaschema_public.policy.with_check IS 'Optional WITH CHECK override node {"$type": "Authz...", "data": {...}}. Only valid for UPDATE policies; NULL inherits the USING expression.'; -CREATE INDEX policy_table_id_idx ON metaschema_public.policy ( table_id ); CREATE INDEX policy_database_id_idx ON metaschema_public.policy ( database_id ); CREATE INDEX policy_derived_from_table_id_idx ON metaschema_public.policy ( derived_from_table_id ) WHERE derived_from_table_id IS NOT NULL; CREATE INDEX policy_derived_from_policy_id_idx ON metaschema_public.policy ( derived_from_policy_id ) WHERE derived_from_policy_id IS NOT NULL; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/primary_key_constraint/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/primary_key_constraint/table.sql index 4136eb0e..94bcc9d4 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/primary_key_constraint/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/primary_key_constraint/table.sql @@ -39,7 +39,6 @@ CREATE TABLE metaschema_public.primary_key_constraint ( ); -CREATE INDEX primary_key_constraint_table_id_idx ON metaschema_public.primary_key_constraint ( table_id ); CREATE INDEX primary_key_constraint_database_id_idx ON metaschema_public.primary_key_constraint ( database_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/schema/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/schema/table.sql index 44a9be58..708c2d7e 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/schema/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/schema/table.sql @@ -36,11 +36,9 @@ CREATE TABLE metaschema_public.schema ( ); -- TODO: build out services --- COMMENT ON COLUMN metaschema_public.schema.schema_name IS '@omit'; +-- COMMENT ON COLUMN metaschema_public.schema.schema_name IS '@behavior -*'; ALTER TABLE metaschema_public.schema ADD CONSTRAINT schema_namechk CHECK (char_length(name) > 2); -CREATE INDEX schema_database_id_idx ON metaschema_public.schema ( database_id ); - COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/spatial_relation/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/spatial_relation/table.sql index 8a47c4d6..1c3d883b 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/spatial_relation/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/spatial_relation/table.sql @@ -57,7 +57,6 @@ CREATE TABLE metaschema_public.spatial_relation ( ) ); -CREATE INDEX spatial_relation_table_id_idx ON metaschema_public.spatial_relation ( table_id ); CREATE INDEX spatial_relation_field_id_idx ON metaschema_public.spatial_relation ( field_id ); CREATE INDEX spatial_relation_database_id_idx ON metaschema_public.spatial_relation ( database_id ); CREATE INDEX spatial_relation_ref_table_id_idx ON metaschema_public.spatial_relation ( ref_table_id ); diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/table/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/table/table.sql index 7322b1a1..614782ef 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/table/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/table/table.sql @@ -61,7 +61,7 @@ ALTER TABLE metaschema_public.table ADD COLUMN CREATE INDEX table_schema_id_idx ON metaschema_public.table ( schema_id ); -CREATE INDEX table_database_id_idx ON metaschema_public.table ( database_id ); +CREATE INDEX table_inherits_id_idx ON metaschema_public.table ( inherits_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/table_behavior/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/table_behavior/table.sql new file mode 100644 index 00000000..cdea49e7 --- /dev/null +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/table_behavior/table.sql @@ -0,0 +1,52 @@ +-- Deploy schemas/metaschema_public/tables/table_behavior/table to pg + +-- requires: schemas/metaschema_public/schema +-- requires: schemas/metaschema_public/tables/database/table +-- requires: schemas/metaschema_public/tables/table/table + +BEGIN; + +-- One row per PostGraphile v5 behavior fragment attached to a table. An +-- entity's fragments are emitted, ordered by sort_order, as a single +-- '@behavior ' smart tag on the corresponding database object: +-- +-- ('-', 'insert') + ('-', 'update') -> @behavior -insert -update +-- +-- `scope` is the fragment's natural key, so an entity carries at most one +-- fragment per scope: writers upsert on (table_id, scope) rather than appending a +-- second fragment that would silently shadow the first. +CREATE TABLE metaschema_public.table_behavior ( + id uuid PRIMARY KEY DEFAULT uuidv7(), + database_id uuid NOT NULL DEFAULT uuid_nil(), + + table_id uuid NOT NULL REFERENCES metaschema_public.table (id) ON DELETE CASCADE, + + -- '+' (grant) or '-' (revoke). PostGraphile infers '+' when the modifier is + -- omitted; we always store it explicitly so fragments round-trip. + modifier char(1) NOT NULL DEFAULT '+', + + -- One or more camelCase words (or '*') joined by ':', e.g. 'insert', + -- 'resource:connection:filter', 'query:*:filter'. + scope text NOT NULL, + + -- Emission order within the entity. Later fragments win in PostGraphile, so + -- sort_order is meaningful when scopes overlap (e.g. '*' before 'insert'). + sort_order int NOT NULL DEFAULT 0, + + created_at timestamptz DEFAULT now(), + updated_at timestamptz DEFAULT now(), + + CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE, + + CONSTRAINT table_behavior_modifier_check CHECK (modifier IN ('+', '-')), + + CONSTRAINT table_behavior_scope_check CHECK ( + scope ~ '^([a-zA-Z][a-zA-Z0-9]*|\*)(:([a-zA-Z][a-zA-Z0-9]*|\*))*$' + ), + + CONSTRAINT table_behavior_scope_key UNIQUE (table_id, scope) +); + +CREATE INDEX table_behavior_database_id_idx ON metaschema_public.table_behavior ( database_id ); + +COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/trigger/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/trigger/table.sql index 710b003c..7cd4f7ab 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/trigger/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/trigger/table.sql @@ -33,7 +33,6 @@ CREATE TABLE metaschema_public.trigger ( ); -CREATE INDEX trigger_table_id_idx ON metaschema_public.trigger ( table_id ); CREATE INDEX trigger_database_id_idx ON metaschema_public.trigger ( database_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/trigger_function/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/trigger_function/table.sql index 161e09fd..63260be7 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/trigger_function/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/trigger_function/table.sql @@ -20,6 +20,4 @@ CREATE TABLE metaschema_public.trigger_function ( UNIQUE (database_id, name) ); -CREATE INDEX trigger_function_database_id_idx ON metaschema_public.trigger_function ( database_id ); - COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/unique_constraint/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/unique_constraint/table.sql index 7043e8c7..156a3751 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/unique_constraint/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/unique_constraint/table.sql @@ -44,7 +44,6 @@ CREATE TABLE metaschema_public.unique_constraint ( ); -CREATE INDEX unique_constraint_table_id_idx ON metaschema_public.unique_constraint ( table_id ); CREATE INDEX unique_constraint_database_id_idx ON metaschema_public.unique_constraint ( database_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/unique_constraint_behavior/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/unique_constraint_behavior/table.sql new file mode 100644 index 00000000..48ad6eac --- /dev/null +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/unique_constraint_behavior/table.sql @@ -0,0 +1,52 @@ +-- Deploy schemas/metaschema_public/tables/unique_constraint_behavior/table to pg + +-- requires: schemas/metaschema_public/schema +-- requires: schemas/metaschema_public/tables/database/table +-- requires: schemas/metaschema_public/tables/unique_constraint/table + +BEGIN; + +-- One row per PostGraphile v5 behavior fragment attached to a unique constraint. An +-- entity's fragments are emitted, ordered by sort_order, as a single +-- '@behavior ' smart tag on the corresponding database object: +-- +-- ('-', 'insert') + ('-', 'update') -> @behavior -insert -update +-- +-- `scope` is the fragment's natural key, so an entity carries at most one +-- fragment per scope: writers upsert on (unique_constraint_id, scope) rather than appending a +-- second fragment that would silently shadow the first. +CREATE TABLE metaschema_public.unique_constraint_behavior ( + id uuid PRIMARY KEY DEFAULT uuidv7(), + database_id uuid NOT NULL DEFAULT uuid_nil(), + + unique_constraint_id uuid NOT NULL REFERENCES metaschema_public.unique_constraint (id) ON DELETE CASCADE, + + -- '+' (grant) or '-' (revoke). PostGraphile infers '+' when the modifier is + -- omitted; we always store it explicitly so fragments round-trip. + modifier char(1) NOT NULL DEFAULT '+', + + -- One or more camelCase words (or '*') joined by ':', e.g. 'insert', + -- 'resource:connection:filter', 'query:*:filter'. + scope text NOT NULL, + + -- Emission order within the entity. Later fragments win in PostGraphile, so + -- sort_order is meaningful when scopes overlap (e.g. '*' before 'insert'). + sort_order int NOT NULL DEFAULT 0, + + created_at timestamptz DEFAULT now(), + updated_at timestamptz DEFAULT now(), + + CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE, + + CONSTRAINT unique_constraint_behavior_modifier_check CHECK (modifier IN ('+', '-')), + + CONSTRAINT unique_constraint_behavior_scope_check CHECK ( + scope ~ '^([a-zA-Z][a-zA-Z0-9]*|\*)(:([a-zA-Z][a-zA-Z0-9]*|\*))*$' + ), + + CONSTRAINT unique_constraint_behavior_scope_key UNIQUE (unique_constraint_id, scope) +); + +CREATE INDEX unique_constraint_behavior_database_id_idx ON metaschema_public.unique_constraint_behavior ( database_id ); + +COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view/table.sql index 7091c776..d82ea5a3 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view/table.sql @@ -52,7 +52,6 @@ CREATE TABLE metaschema_public.view ( ); -CREATE INDEX view_schema_id_idx ON metaschema_public.view ( schema_id ); CREATE INDEX view_database_id_idx ON metaschema_public.view ( database_id ); CREATE INDEX view_table_id_idx ON metaschema_public.view ( table_id ); diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view_behavior/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view_behavior/table.sql new file mode 100644 index 00000000..902b5433 --- /dev/null +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view_behavior/table.sql @@ -0,0 +1,52 @@ +-- Deploy schemas/metaschema_public/tables/view_behavior/table to pg + +-- requires: schemas/metaschema_public/schema +-- requires: schemas/metaschema_public/tables/database/table +-- requires: schemas/metaschema_public/tables/view/table + +BEGIN; + +-- One row per PostGraphile v5 behavior fragment attached to a view. An +-- entity's fragments are emitted, ordered by sort_order, as a single +-- '@behavior ' smart tag on the corresponding database object: +-- +-- ('-', 'insert') + ('-', 'update') -> @behavior -insert -update +-- +-- `scope` is the fragment's natural key, so an entity carries at most one +-- fragment per scope: writers upsert on (view_id, scope) rather than appending a +-- second fragment that would silently shadow the first. +CREATE TABLE metaschema_public.view_behavior ( + id uuid PRIMARY KEY DEFAULT uuidv7(), + database_id uuid NOT NULL DEFAULT uuid_nil(), + + view_id uuid NOT NULL REFERENCES metaschema_public.view (id) ON DELETE CASCADE, + + -- '+' (grant) or '-' (revoke). PostGraphile infers '+' when the modifier is + -- omitted; we always store it explicitly so fragments round-trip. + modifier char(1) NOT NULL DEFAULT '+', + + -- One or more camelCase words (or '*') joined by ':', e.g. 'insert', + -- 'resource:connection:filter', 'query:*:filter'. + scope text NOT NULL, + + -- Emission order within the entity. Later fragments win in PostGraphile, so + -- sort_order is meaningful when scopes overlap (e.g. '*' before 'insert'). + sort_order int NOT NULL DEFAULT 0, + + created_at timestamptz DEFAULT now(), + updated_at timestamptz DEFAULT now(), + + CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE, + + CONSTRAINT view_behavior_modifier_check CHECK (modifier IN ('+', '-')), + + CONSTRAINT view_behavior_scope_check CHECK ( + scope ~ '^([a-zA-Z][a-zA-Z0-9]*|\*)(:([a-zA-Z][a-zA-Z0-9]*|\*))*$' + ), + + CONSTRAINT view_behavior_scope_key UNIQUE (view_id, scope) +); + +CREATE INDEX view_behavior_database_id_idx ON metaschema_public.view_behavior ( database_id ); + +COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view_grant/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view_grant/table.sql index a87f7e25..d6306164 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view_grant/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view_grant/table.sql @@ -26,7 +26,6 @@ CREATE TABLE metaschema_public.view_grant ( ); -CREATE INDEX view_grant_view_id_idx ON metaschema_public.view_grant ( view_id ); CREATE INDEX view_grant_database_id_idx ON metaschema_public.view_grant ( database_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view_rule/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view_rule/table.sql index 116203ea..d7f999a2 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view_rule/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view_rule/table.sql @@ -26,7 +26,6 @@ COMMENT ON COLUMN metaschema_public.view_rule.event IS 'INSERT, UPDATE, or DELET COMMENT ON COLUMN metaschema_public.view_rule.action IS 'NOTHING (for read-only) or custom action'; -CREATE INDEX view_rule_view_id_idx ON metaschema_public.view_rule ( view_id ); CREATE INDEX view_rule_database_id_idx ON metaschema_public.view_rule ( database_id ); COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view_table/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view_table/table.sql index 2e065e53..2a60ed9f 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view_table/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/view_table/table.sql @@ -29,7 +29,6 @@ CREATE TABLE metaschema_public.view_table ( COMMENT ON TABLE metaschema_public.view_table IS 'Junction table linking views to their joined tables for referential integrity'; CREATE INDEX view_table_database_id_idx ON metaschema_public.view_table ( database_id ); -CREATE INDEX view_table_view_id_idx ON metaschema_public.view_table ( view_id ); CREATE INDEX view_table_table_id_idx ON metaschema_public.view_table ( table_id ); COMMIT; diff --git a/packages/metaschema-schema/pgpm.plan b/packages/metaschema-schema/pgpm.plan index 77681ca8..cf67a338 100644 --- a/packages/metaschema-schema/pgpm.plan +++ b/packages/metaschema-schema/pgpm.plan @@ -41,3 +41,8 @@ schemas/metaschema_public/tables/domain_type/table [schemas/metaschema_public/sc schemas/metaschema_public/tables/schema/triggers/enforce_api_exposure_ratchet [schemas/metaschema_public/tables/schema/table] 2026-06-18T00:00:03Z devin # enforce one-way ratchet on api_exposure (never_expose is permanent) schemas/metaschema_public/tables/exclusion_constraint/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table schemas/metaschema_public/tables/table/table schemas/metaschema_public/types/object_category] 2026-07-22T00:00:00Z devin # add metaschema_public.exclusion_constraint table for EXCLUDE constraints schemas/metaschema_public/tables/derives/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table schemas/metaschema_public/tables/table/table] 2026-07-30T00:00:00Z devin # add metaschema_public.derives: derived companion table provenance (history/i18n) +schemas/metaschema_public/tables/table_behavior/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table schemas/metaschema_public/tables/table/table] 2026-08-01T00:00:00Z devin # add metaschema_public.table_behavior: one row per PostGraphile v5 behavior fragment +schemas/metaschema_public/tables/field_behavior/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table schemas/metaschema_public/tables/field/table] 2026-08-01T00:00:00Z devin # add metaschema_public.field_behavior: one row per PostGraphile v5 behavior fragment +schemas/metaschema_public/tables/view_behavior/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table schemas/metaschema_public/tables/view/table] 2026-08-01T00:00:00Z devin # add metaschema_public.view_behavior: one row per PostGraphile v5 behavior fragment +schemas/metaschema_public/tables/foreign_key_constraint_behavior/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table schemas/metaschema_public/tables/foreign_key_constraint/table] 2026-08-01T00:00:00Z devin # add metaschema_public.foreign_key_constraint_behavior: one row per PostGraphile v5 behavior fragment +schemas/metaschema_public/tables/unique_constraint_behavior/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table schemas/metaschema_public/tables/unique_constraint/table] 2026-08-01T00:00:00Z devin # add metaschema_public.unique_constraint_behavior: one row per PostGraphile v5 behavior fragment diff --git a/packages/metaschema-schema/revert/schemas/metaschema_public/tables/field/table.sql b/packages/metaschema-schema/revert/schemas/metaschema_public/tables/field/table.sql index ee7d49d0..eaf7fae3 100644 --- a/packages/metaschema-schema/revert/schemas/metaschema_public/tables/field/table.sql +++ b/packages/metaschema-schema/revert/schemas/metaschema_public/tables/field/table.sql @@ -2,7 +2,6 @@ BEGIN; DROP INDEX metaschema_public.field_database_id_idx; -DROP INDEX metaschema_public.field_table_id_idx; DROP TABLE metaschema_public.field; COMMIT; diff --git a/packages/metaschema-schema/revert/schemas/metaschema_public/tables/field_behavior/table.sql b/packages/metaschema-schema/revert/schemas/metaschema_public/tables/field_behavior/table.sql new file mode 100644 index 00000000..1f8e292f --- /dev/null +++ b/packages/metaschema-schema/revert/schemas/metaschema_public/tables/field_behavior/table.sql @@ -0,0 +1,7 @@ +-- Revert schemas/metaschema_public/tables/field_behavior/table from pg + +BEGIN; + +DROP TABLE metaschema_public.field_behavior; + +COMMIT; diff --git a/packages/metaschema-schema/revert/schemas/metaschema_public/tables/foreign_key_constraint_behavior/table.sql b/packages/metaschema-schema/revert/schemas/metaschema_public/tables/foreign_key_constraint_behavior/table.sql new file mode 100644 index 00000000..f8afdee5 --- /dev/null +++ b/packages/metaschema-schema/revert/schemas/metaschema_public/tables/foreign_key_constraint_behavior/table.sql @@ -0,0 +1,7 @@ +-- Revert schemas/metaschema_public/tables/foreign_key_constraint_behavior/table from pg + +BEGIN; + +DROP TABLE metaschema_public.foreign_key_constraint_behavior; + +COMMIT; diff --git a/packages/metaschema-schema/revert/schemas/metaschema_public/tables/table_behavior/table.sql b/packages/metaschema-schema/revert/schemas/metaschema_public/tables/table_behavior/table.sql new file mode 100644 index 00000000..f892305e --- /dev/null +++ b/packages/metaschema-schema/revert/schemas/metaschema_public/tables/table_behavior/table.sql @@ -0,0 +1,7 @@ +-- Revert schemas/metaschema_public/tables/table_behavior/table from pg + +BEGIN; + +DROP TABLE metaschema_public.table_behavior; + +COMMIT; diff --git a/packages/metaschema-schema/revert/schemas/metaschema_public/tables/unique_constraint_behavior/table.sql b/packages/metaschema-schema/revert/schemas/metaschema_public/tables/unique_constraint_behavior/table.sql new file mode 100644 index 00000000..4c7b80ab --- /dev/null +++ b/packages/metaschema-schema/revert/schemas/metaschema_public/tables/unique_constraint_behavior/table.sql @@ -0,0 +1,7 @@ +-- Revert schemas/metaschema_public/tables/unique_constraint_behavior/table from pg + +BEGIN; + +DROP TABLE metaschema_public.unique_constraint_behavior; + +COMMIT; diff --git a/packages/metaschema-schema/revert/schemas/metaschema_public/tables/view_behavior/table.sql b/packages/metaschema-schema/revert/schemas/metaschema_public/tables/view_behavior/table.sql new file mode 100644 index 00000000..0dafd0c4 --- /dev/null +++ b/packages/metaschema-schema/revert/schemas/metaschema_public/tables/view_behavior/table.sql @@ -0,0 +1,7 @@ +-- Revert schemas/metaschema_public/tables/view_behavior/table from pg + +BEGIN; + +DROP TABLE metaschema_public.view_behavior; + +COMMIT; diff --git a/packages/metaschema-schema/sql/metaschema-schema--0.34.0.bundle.tar.gz b/packages/metaschema-schema/sql/metaschema-schema--0.34.0.bundle.tar.gz index c08deba0..72107662 100644 Binary files a/packages/metaschema-schema/sql/metaschema-schema--0.34.0.bundle.tar.gz and b/packages/metaschema-schema/sql/metaschema-schema--0.34.0.bundle.tar.gz differ diff --git a/packages/metaschema-schema/sql/metaschema-schema--0.34.0.sql b/packages/metaschema-schema/sql/metaschema-schema--0.34.0.sql index 904715a2..b087a14a 100644 --- a/packages/metaschema-schema/sql/metaschema-schema--0.34.0.sql +++ b/packages/metaschema-schema/sql/metaschema-schema--0.34.0.sql @@ -300,7 +300,9 @@ ALTER TABLE metaschema_public.database CREATE UNIQUE INDEX databases_database_platform_singleton_idx ON metaschema_public.database (platform) WHERE platform; -COMMENT ON COLUMN metaschema_public.database.schema_hash IS '@omit'; +CREATE INDEX database_owner_id_idx ON metaschema_public.database (owner_id); + +COMMENT ON COLUMN metaschema_public.database.schema_hash IS '@behavior -*'; CREATE TABLE metaschema_public.schema ( id uuid PRIMARY KEY DEFAULT uuidv7(), @@ -328,8 +330,6 @@ ALTER TABLE metaschema_public.schema ADD CONSTRAINT schema_namechk CHECK (char_length(name) > 2); -CREATE INDEX schema_database_id_idx ON metaschema_public.schema (database_id); - CREATE TABLE metaschema_public.table ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL DEFAULT uuid_nil(), @@ -378,7 +378,7 @@ ALTER TABLE metaschema_public.table CREATE INDEX table_schema_id_idx ON metaschema_public.table (schema_id); -CREATE INDEX table_database_id_idx ON metaschema_public.table (database_id); +CREATE INDEX table_inherits_id_idx ON metaschema_public.table (inherits_id); CREATE TABLE metaschema_public.check_constraint ( id uuid PRIMARY KEY DEFAULT uuidv7(), @@ -407,8 +407,6 @@ CREATE TABLE metaschema_public.check_constraint ( CHECK (field_ids <> '{}') ); -CREATE INDEX check_constraint_table_id_idx ON metaschema_public.check_constraint (table_id); - CREATE INDEX check_constraint_database_id_idx ON metaschema_public.check_constraint (database_id); CREATE FUNCTION metaschema_private.database_name_hash( @@ -457,8 +455,6 @@ CREATE TABLE metaschema_public.field ( UNIQUE (table_id, name) ); -CREATE INDEX field_table_id_idx ON metaschema_public.field (table_id); - CREATE INDEX field_database_id_idx ON metaschema_public.field (database_id); CREATE UNIQUE INDEX databases_field_uniq_names_idx ON metaschema_public.field (table_id, (decode(md5(lower(CASE @@ -508,10 +504,10 @@ CREATE TABLE metaschema_public.foreign_key_constraint ( CHECK (ref_field_ids <> '{}') ); -CREATE INDEX foreign_key_constraint_table_id_idx ON metaschema_public.foreign_key_constraint (table_id); - CREATE INDEX foreign_key_constraint_database_id_idx ON metaschema_public.foreign_key_constraint (database_id); +CREATE INDEX foreign_key_constraint_ref_table_id_idx ON metaschema_public.foreign_key_constraint (ref_table_id); + CREATE TABLE metaschema_public.full_text_search ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL DEFAULT uuid_nil(), @@ -572,8 +568,6 @@ CREATE TABLE metaschema_public.index ( CREATE INDEX index_table_id_idx ON metaschema_public.index (table_id); -CREATE INDEX index_database_id_idx ON metaschema_public.index (database_id); - CREATE TABLE metaschema_public.policy ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL DEFAULT uuid_nil(), @@ -623,8 +617,6 @@ CREATE TABLE metaschema_public.policy ( COMMENT ON COLUMN metaschema_public.policy.with_check IS 'Optional WITH CHECK override node {"$type": "Authz...", "data": {...}}. Only valid for UPDATE policies; NULL inherits the USING expression.'; -CREATE INDEX policy_table_id_idx ON metaschema_public.policy (table_id); - CREATE INDEX policy_database_id_idx ON metaschema_public.policy (database_id); CREATE INDEX policy_derived_from_table_id_idx ON metaschema_public.policy (derived_from_table_id) WHERE derived_from_table_id IS NOT NULL; @@ -658,8 +650,6 @@ CREATE TABLE metaschema_public.primary_key_constraint ( CHECK (field_ids <> '{}') ); -CREATE INDEX primary_key_constraint_table_id_idx ON metaschema_public.primary_key_constraint (table_id); - CREATE INDEX primary_key_constraint_database_id_idx ON metaschema_public.primary_key_constraint (database_id); CREATE TABLE metaschema_public.schema_grant ( @@ -732,8 +722,6 @@ CREATE TABLE metaschema_public.trigger_function ( UNIQUE (database_id, name) ); -CREATE INDEX trigger_function_database_id_idx ON metaschema_public.trigger_function (database_id); - CREATE TABLE metaschema_public.trigger ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL DEFAULT uuid_nil(), @@ -757,8 +745,6 @@ CREATE TABLE metaschema_public.trigger ( UNIQUE (table_id, name) ); -CREATE INDEX trigger_table_id_idx ON metaschema_public.trigger (table_id); - CREATE INDEX trigger_database_id_idx ON metaschema_public.trigger (database_id); CREATE TABLE metaschema_public.unique_constraint ( @@ -789,8 +775,6 @@ CREATE TABLE metaschema_public.unique_constraint ( CHECK (field_ids <> '{}') ); -CREATE INDEX unique_constraint_table_id_idx ON metaschema_public.unique_constraint (table_id); - CREATE INDEX unique_constraint_database_id_idx ON metaschema_public.unique_constraint (database_id); CREATE TABLE metaschema_public.view ( @@ -830,8 +814,6 @@ CREATE TABLE metaschema_public.view ( UNIQUE (schema_id, name) ); -CREATE INDEX view_schema_id_idx ON metaschema_public.view (schema_id); - CREATE INDEX view_database_id_idx ON metaschema_public.view (database_id); CREATE INDEX view_table_id_idx ON metaschema_public.view (table_id); @@ -861,8 +843,6 @@ COMMENT ON TABLE metaschema_public.view_table IS 'Junction table linking views t CREATE INDEX view_table_database_id_idx ON metaschema_public.view_table (database_id); -CREATE INDEX view_table_view_id_idx ON metaschema_public.view_table (view_id); - CREATE INDEX view_table_table_id_idx ON metaschema_public.view_table (table_id); CREATE TABLE metaschema_public.view_grant ( @@ -884,8 +864,6 @@ CREATE TABLE metaschema_public.view_grant ( UNIQUE (view_id, grantee_name, privilege, is_grant) ); -CREATE INDEX view_grant_view_id_idx ON metaschema_public.view_grant (view_id); - CREATE INDEX view_grant_database_id_idx ON metaschema_public.view_grant (database_id); CREATE TABLE metaschema_public.view_rule ( @@ -912,8 +890,6 @@ COMMENT ON COLUMN metaschema_public.view_rule.event IS 'INSERT, UPDATE, or DELET COMMENT ON COLUMN metaschema_public.view_rule.action IS 'NOTHING (for read-only) or custom action'; -CREATE INDEX view_rule_view_id_idx ON metaschema_public.view_rule (view_id); - CREATE INDEX view_rule_database_id_idx ON metaschema_public.view_rule (database_id); CREATE TABLE metaschema_public.default_privilege ( @@ -935,8 +911,6 @@ CREATE TABLE metaschema_public.default_privilege ( UNIQUE (schema_id, object_type, privilege, grantee_name, is_grant) ); -CREATE INDEX default_privilege_schema_id_idx ON metaschema_public.default_privilege (schema_id); - CREATE INDEX default_privilege_database_id_idx ON metaschema_public.default_privilege (database_id); CREATE TABLE metaschema_public.enum ( @@ -961,8 +935,6 @@ CREATE TABLE metaschema_public.enum ( UNIQUE (schema_id, name) ); -CREATE INDEX enum_schema_id_idx ON metaschema_public.enum (schema_id); - CREATE INDEX enum_database_id_idx ON metaschema_public.enum (database_id); CREATE TABLE metaschema_public.embedding_chunks ( @@ -1028,6 +1000,10 @@ CREATE INDEX embedding_chunks_database_id_idx ON metaschema_public.embedding_chu CREATE INDEX embedding_chunks_chunks_table_id_idx ON metaschema_public.embedding_chunks (chunks_table_id); +CREATE INDEX embedding_chunks_embedding_field_id_idx ON metaschema_public.embedding_chunks (embedding_field_id); + +CREATE INDEX embedding_chunks_parent_fk_field_id_idx ON metaschema_public.embedding_chunks (parent_fk_field_id); + CREATE TABLE metaschema_public.spatial_relation ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL DEFAULT uuid_nil(), @@ -1072,8 +1048,6 @@ CREATE TABLE metaschema_public.spatial_relation ( ) ); -CREATE INDEX spatial_relation_table_id_idx ON metaschema_public.spatial_relation (table_id); - CREATE INDEX spatial_relation_field_id_idx ON metaschema_public.spatial_relation (field_id); CREATE INDEX spatial_relation_database_id_idx ON metaschema_public.spatial_relation (database_id); @@ -1112,8 +1086,6 @@ CREATE TABLE metaschema_public.function ( CREATE INDEX function_database_id_idx ON metaschema_public.function (database_id); -CREATE INDEX function_schema_id_idx ON metaschema_public.function (schema_id); - CREATE TABLE metaschema_public.partition ( id uuid PRIMARY KEY DEFAULT uuid_generate_v4(), database_id uuid NOT NULL, @@ -1145,6 +1117,8 @@ CREATE TABLE metaschema_public.partition ( CREATE INDEX partition_database_id_idx ON metaschema_public.partition (database_id); +CREATE INDEX partition_partition_key_id_idx ON metaschema_public.partition (partition_key_id); + CREATE TABLE metaschema_public.composite_type ( id uuid PRIMARY KEY DEFAULT uuidv7(), database_id uuid NOT NULL, @@ -1167,8 +1141,6 @@ CREATE TABLE metaschema_public.composite_type ( UNIQUE (schema_id, name) ); -CREATE INDEX composite_type_schema_id_idx ON metaschema_public.composite_type (schema_id); - CREATE INDEX composite_type_database_id_idx ON metaschema_public.composite_type (database_id); CREATE TABLE metaschema_public.domain_type ( @@ -1196,8 +1168,6 @@ CREATE TABLE metaschema_public.domain_type ( UNIQUE (schema_id, name) ); -CREATE INDEX domain_type_schema_id_idx ON metaschema_public.domain_type (schema_id); - CREATE INDEX domain_type_database_id_idx ON metaschema_public.domain_type (database_id); CREATE FUNCTION metaschema_public.tg_enforce_api_exposure_ratchet() RETURNS trigger AS $EOFCODE$ @@ -1246,8 +1216,6 @@ CREATE TABLE metaschema_public.exclusion_constraint ( UNIQUE (table_id, name) ); -CREATE INDEX exclusion_constraint_table_id_idx ON metaschema_public.exclusion_constraint (table_id); - CREATE INDEX exclusion_constraint_database_id_idx ON metaschema_public.exclusion_constraint (database_id); CREATE TABLE metaschema_public.derives ( @@ -1280,8 +1248,126 @@ CREATE TABLE metaschema_public.derives ( UNIQUE (table_id, source_table_id) ); -CREATE INDEX derives_table_id_idx ON metaschema_public.derives (table_id); - CREATE INDEX derives_source_table_id_idx ON metaschema_public.derives (source_table_id); -CREATE INDEX derives_database_id_idx ON metaschema_public.derives (database_id); \ No newline at end of file +CREATE INDEX derives_database_id_idx ON metaschema_public.derives (database_id); + +CREATE TABLE metaschema_public.table_behavior ( + id uuid PRIMARY KEY DEFAULT uuidv7(), + database_id uuid NOT NULL DEFAULT uuid_nil(), + table_id uuid NOT NULL REFERENCES metaschema_public.table (id) + ON DELETE CASCADE, + modifier char(1) NOT NULL DEFAULT '+', + scope text NOT NULL, + sort_order int NOT NULL DEFAULT 0, + created_at timestamptz DEFAULT now(), + updated_at timestamptz DEFAULT now(), + CONSTRAINT db_fkey + FOREIGN KEY(database_id) + REFERENCES metaschema_public.database (id) + ON DELETE CASCADE, + CONSTRAINT table_behavior_modifier_check + CHECK (modifier IN ('+', '-')), + CONSTRAINT table_behavior_scope_check + CHECK (scope ~ E'^([a-zA-Z][a-zA-Z0-9]*|\\*)(:([a-zA-Z][a-zA-Z0-9]*|\\*))*$'), + CONSTRAINT table_behavior_scope_key + UNIQUE (table_id, scope) +); + +CREATE INDEX table_behavior_database_id_idx ON metaschema_public.table_behavior (database_id); + +CREATE TABLE metaschema_public.field_behavior ( + id uuid PRIMARY KEY DEFAULT uuidv7(), + database_id uuid NOT NULL DEFAULT uuid_nil(), + field_id uuid NOT NULL REFERENCES metaschema_public.field (id) + ON DELETE CASCADE, + modifier char(1) NOT NULL DEFAULT '+', + scope text NOT NULL, + sort_order int NOT NULL DEFAULT 0, + created_at timestamptz DEFAULT now(), + updated_at timestamptz DEFAULT now(), + CONSTRAINT db_fkey + FOREIGN KEY(database_id) + REFERENCES metaschema_public.database (id) + ON DELETE CASCADE, + CONSTRAINT field_behavior_modifier_check + CHECK (modifier IN ('+', '-')), + CONSTRAINT field_behavior_scope_check + CHECK (scope ~ E'^([a-zA-Z][a-zA-Z0-9]*|\\*)(:([a-zA-Z][a-zA-Z0-9]*|\\*))*$'), + CONSTRAINT field_behavior_scope_key + UNIQUE (field_id, scope) +); + +CREATE INDEX field_behavior_database_id_idx ON metaschema_public.field_behavior (database_id); + +CREATE TABLE metaschema_public.view_behavior ( + id uuid PRIMARY KEY DEFAULT uuidv7(), + database_id uuid NOT NULL DEFAULT uuid_nil(), + view_id uuid NOT NULL REFERENCES metaschema_public.view (id) + ON DELETE CASCADE, + modifier char(1) NOT NULL DEFAULT '+', + scope text NOT NULL, + sort_order int NOT NULL DEFAULT 0, + created_at timestamptz DEFAULT now(), + updated_at timestamptz DEFAULT now(), + CONSTRAINT db_fkey + FOREIGN KEY(database_id) + REFERENCES metaschema_public.database (id) + ON DELETE CASCADE, + CONSTRAINT view_behavior_modifier_check + CHECK (modifier IN ('+', '-')), + CONSTRAINT view_behavior_scope_check + CHECK (scope ~ E'^([a-zA-Z][a-zA-Z0-9]*|\\*)(:([a-zA-Z][a-zA-Z0-9]*|\\*))*$'), + CONSTRAINT view_behavior_scope_key + UNIQUE (view_id, scope) +); + +CREATE INDEX view_behavior_database_id_idx ON metaschema_public.view_behavior (database_id); + +CREATE TABLE metaschema_public.foreign_key_constraint_behavior ( + id uuid PRIMARY KEY DEFAULT uuidv7(), + database_id uuid NOT NULL DEFAULT uuid_nil(), + foreign_key_constraint_id uuid NOT NULL REFERENCES metaschema_public.foreign_key_constraint (id) + ON DELETE CASCADE, + modifier char(1) NOT NULL DEFAULT '+', + scope text NOT NULL, + sort_order int NOT NULL DEFAULT 0, + created_at timestamptz DEFAULT now(), + updated_at timestamptz DEFAULT now(), + CONSTRAINT db_fkey + FOREIGN KEY(database_id) + REFERENCES metaschema_public.database (id) + ON DELETE CASCADE, + CONSTRAINT foreign_key_constraint_behavior_modifier_check + CHECK (modifier IN ('+', '-')), + CONSTRAINT foreign_key_constraint_behavior_scope_check + CHECK (scope ~ E'^([a-zA-Z][a-zA-Z0-9]*|\\*)(:([a-zA-Z][a-zA-Z0-9]*|\\*))*$'), + CONSTRAINT foreign_key_constraint_behavior_scope_key + UNIQUE (foreign_key_constraint_id, scope) +); + +CREATE INDEX foreign_key_constraint_behavior_database_id_idx ON metaschema_public.foreign_key_constraint_behavior (database_id); + +CREATE TABLE metaschema_public.unique_constraint_behavior ( + id uuid PRIMARY KEY DEFAULT uuidv7(), + database_id uuid NOT NULL DEFAULT uuid_nil(), + unique_constraint_id uuid NOT NULL REFERENCES metaschema_public.unique_constraint (id) + ON DELETE CASCADE, + modifier char(1) NOT NULL DEFAULT '+', + scope text NOT NULL, + sort_order int NOT NULL DEFAULT 0, + created_at timestamptz DEFAULT now(), + updated_at timestamptz DEFAULT now(), + CONSTRAINT db_fkey + FOREIGN KEY(database_id) + REFERENCES metaschema_public.database (id) + ON DELETE CASCADE, + CONSTRAINT unique_constraint_behavior_modifier_check + CHECK (modifier IN ('+', '-')), + CONSTRAINT unique_constraint_behavior_scope_check + CHECK (scope ~ E'^([a-zA-Z][a-zA-Z0-9]*|\\*)(:([a-zA-Z][a-zA-Z0-9]*|\\*))*$'), + CONSTRAINT unique_constraint_behavior_scope_key + UNIQUE (unique_constraint_id, scope) +); + +CREATE INDEX unique_constraint_behavior_database_id_idx ON metaschema_public.unique_constraint_behavior (database_id); \ No newline at end of file diff --git a/packages/metaschema-schema/verify/schemas/metaschema_public/tables/field_behavior/table.sql b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/field_behavior/table.sql new file mode 100644 index 00000000..acb37065 --- /dev/null +++ b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/field_behavior/table.sql @@ -0,0 +1,15 @@ +-- Verify schemas/metaschema_public/tables/field_behavior/table on pg + +BEGIN; + +SELECT + id, + database_id, + field_id, + modifier, + scope, + sort_order +FROM metaschema_public.field_behavior +WHERE FALSE; + +ROLLBACK; diff --git a/packages/metaschema-schema/verify/schemas/metaschema_public/tables/foreign_key_constraint_behavior/table.sql b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/foreign_key_constraint_behavior/table.sql new file mode 100644 index 00000000..e424e8cd --- /dev/null +++ b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/foreign_key_constraint_behavior/table.sql @@ -0,0 +1,15 @@ +-- Verify schemas/metaschema_public/tables/foreign_key_constraint_behavior/table on pg + +BEGIN; + +SELECT + id, + database_id, + foreign_key_constraint_id, + modifier, + scope, + sort_order +FROM metaschema_public.foreign_key_constraint_behavior +WHERE FALSE; + +ROLLBACK; diff --git a/packages/metaschema-schema/verify/schemas/metaschema_public/tables/table_behavior/table.sql b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/table_behavior/table.sql new file mode 100644 index 00000000..51590f80 --- /dev/null +++ b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/table_behavior/table.sql @@ -0,0 +1,15 @@ +-- Verify schemas/metaschema_public/tables/table_behavior/table on pg + +BEGIN; + +SELECT + id, + database_id, + table_id, + modifier, + scope, + sort_order +FROM metaschema_public.table_behavior +WHERE FALSE; + +ROLLBACK; diff --git a/packages/metaschema-schema/verify/schemas/metaschema_public/tables/unique_constraint_behavior/table.sql b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/unique_constraint_behavior/table.sql new file mode 100644 index 00000000..4ff72123 --- /dev/null +++ b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/unique_constraint_behavior/table.sql @@ -0,0 +1,15 @@ +-- Verify schemas/metaschema_public/tables/unique_constraint_behavior/table on pg + +BEGIN; + +SELECT + id, + database_id, + unique_constraint_id, + modifier, + scope, + sort_order +FROM metaschema_public.unique_constraint_behavior +WHERE FALSE; + +ROLLBACK; diff --git a/packages/metaschema-schema/verify/schemas/metaschema_public/tables/view_behavior/table.sql b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/view_behavior/table.sql new file mode 100644 index 00000000..3b9ce688 --- /dev/null +++ b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/view_behavior/table.sql @@ -0,0 +1,15 @@ +-- Verify schemas/metaschema_public/tables/view_behavior/table on pg + +BEGIN; + +SELECT + id, + database_id, + view_id, + modifier, + scope, + sort_order +FROM metaschema_public.view_behavior +WHERE FALSE; + +ROLLBACK; diff --git a/packages/object-tree/__tests__/objects/flow-graph.test.ts b/packages/object-tree/__tests__/objects/flow-graph.test.ts index 51bf4005..72800953 100644 --- a/packages/object-tree/__tests__/objects/flow-graph.test.ts +++ b/packages/object-tree/__tests__/objects/flow-graph.test.ts @@ -1,7 +1,8 @@ jest.setTimeout(30000); import { getConnections, PgTestClient } from 'pgsql-test'; -import { FlowGraphHelper, createFlowGraphHelper, VDOMNode } from '../../test-utils'; + +import { createFlowGraphHelper, FlowGraphHelper, VDOMNode } from '../../test-utils'; /** * Transform VDOM tree (storage format) into RuntimeGraph (renderer format) diff --git a/packages/object-tree/__tests__/objects/tailwind-vdom.test.ts b/packages/object-tree/__tests__/objects/tailwind-vdom.test.ts index 4e546bb7..134619eb 100644 --- a/packages/object-tree/__tests__/objects/tailwind-vdom.test.ts +++ b/packages/object-tree/__tests__/objects/tailwind-vdom.test.ts @@ -1,7 +1,8 @@ jest.setTimeout(30000); import { getConnections, PgTestClient } from 'pgsql-test'; -import { ObjectTreeHelper, createObjectTreeHelper, VDOMNode } from '../../test-utils'; + +import { createObjectTreeHelper, ObjectTreeHelper, VDOMNode } from '../../test-utils'; /** * Format VDOM with type first, then key, props, children diff --git a/packages/object-tree/__tests__/objects/time-travel.test.ts b/packages/object-tree/__tests__/objects/time-travel.test.ts index 0565f907..e0753f7d 100644 --- a/packages/object-tree/__tests__/objects/time-travel.test.ts +++ b/packages/object-tree/__tests__/objects/time-travel.test.ts @@ -1,7 +1,8 @@ jest.setTimeout(30000); import { getConnections, PgTestClient } from 'pgsql-test'; -import { ObjectTreeHelper, createObjectTreeHelper, VDOMNode, CommitInfo } from '../../test-utils'; + +import { CommitInfo,createObjectTreeHelper, ObjectTreeHelper, VDOMNode } from '../../test-utils'; const scope_id = 'd0f7ab73-356f-4aac-b9cb-d1a4274906d6'; const store_id = 'c3d4e5f6-a7b8-9012-cdef-123456789012'; diff --git a/packages/verify/__tests__/ext-verify.test.ts b/packages/verify/__tests__/ext-verify.test.ts index eca3756d..a0718747 100644 --- a/packages/verify/__tests__/ext-verify.test.ts +++ b/packages/verify/__tests__/ext-verify.test.ts @@ -1,4 +1,4 @@ -import { getConnections, PgTestClient, snapshot } from 'pgsql-test'; +import { getConnections, PgTestClient } from 'pgsql-test'; let pg: PgTestClient; let teardown: () => Promise; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 428cf6a6..b977866e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -147,6 +147,12 @@ importers: specifier: ^5 version: 5.8.0(@dataplan/json@1.0.0(grafast@1.0.2(graphql@16.13.0)))(@dataplan/pg@1.0.3(@dataplan/json@1.0.0(grafast@1.0.2(graphql@16.13.0)))(grafast@1.0.2(graphql@16.13.0))(graphile-config@1.0.1)(graphql@16.13.0)(pg-sql2@5.0.1)(pg@8.22.0))(@types/node@22.19.17)(grafserv@1.0.0(@types/node@22.19.17)(grafast@1.0.2(graphql@16.13.0))(graphile-config@1.0.1)(graphql@16.13.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(use-sync-external-store@1.6.0(react@19.2.5))(ws@8.20.0))(graphile-build@5.0.2(grafast@1.0.2(graphql@16.13.0))(graphile-config@1.0.1)(graphql@16.13.0))(pg-sql2@5.0.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tamedevil@0.1.1)(use-sync-external-store@1.6.0(react@19.2.5))(ws@8.20.0) + packages/errors: + devDependencies: + pgpm: + specifier: ^5 + version: 5.8.0(@dataplan/json@1.0.0(grafast@1.0.2(graphql@16.13.0)))(@dataplan/pg@1.0.3(@dataplan/json@1.0.0(grafast@1.0.2(graphql@16.13.0)))(grafast@1.0.2(graphql@16.13.0))(graphile-config@1.0.1)(graphql@16.13.0)(pg-sql2@5.0.1)(pg@8.22.0))(@types/node@22.19.17)(grafserv@1.0.0(@types/node@22.19.17)(grafast@1.0.2(graphql@16.13.0))(graphile-config@1.0.1)(graphql@16.13.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(use-sync-external-store@1.6.0(react@19.2.5))(ws@8.20.0))(graphile-build@5.0.2(grafast@1.0.2(graphql@16.13.0))(graphile-config@1.0.1)(graphql@16.13.0))(pg-sql2@5.0.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tamedevil@0.1.1)(use-sync-external-store@1.6.0(react@19.2.5))(ws@8.20.0) + packages/faker: dependencies: "@pgpm/types": @@ -233,6 +239,9 @@ importers: packages/jwt-claims: dependencies: + "@pgpm/errors": + specifier: workspace:* + version: link:../errors "@pgpm/types": specifier: workspace:* version: link:../types