From ea88acbbf1a1f642d5a5e9425e0ebf3be5a71dec Mon Sep 17 00:00:00 2001 From: Dan Lynch Date: Sun, 1 Mar 2026 00:18:39 +0000 Subject: [PATCH 1/2] chore: sync metaschema-schema from constructive-db Syncs all changes from constructive-db/pgpm-modules/metaschema-schema: - Add default_privilege table (new) - Add is_grant to table_grant and view_grant - Rename role_name to grantee_name across grant/policy tables - Remove dead procedure, limit_function, and rls_function tables - Update combined SQL and pgpm.plan - Various field/table updates (smart_tags, module, scope columns) --- .../tables/database/table.sql | 8 +- .../tables/default_privilege/table.sql | 39 +++++ .../metaschema_public/tables/field/table.sql | 22 ++- .../tables/foreign_key_constraint/table.sql | 2 +- .../metaschema_public/tables/index/table.sql | 1 + .../tables/limit_function/table.sql | 34 ---- .../metaschema_public/tables/policy/table.sql | 6 +- .../tables/procedure/table.sql | 38 ----- .../tables/rls_function/table.sql | 36 ----- .../metaschema_public/tables/schema/table.sql | 3 + .../databases_table_unique_name_idx.sql | 2 +- .../metaschema_public/tables/table/table.sql | 4 +- .../tables/table_grant/table.sql | 6 +- .../tables/trigger/table.sql | 4 +- .../tables/unique_constraint/table.sql | 3 + .../tables/view_grant/table.sql | 7 +- .../types/object_category.sql | 4 + packages/metaschema-schema/pgpm.plan | 22 ++- .../tables/default_privilege/table.sql | 7 + .../tables/limit_function/table.sql | 7 - .../tables/procedure/table.sql | 7 - .../tables/rls_function/table.sql | 7 - .../types/object_category.sql | 2 +- .../sql/metaschema-schema--0.15.5.sql | 148 +++++++----------- .../tables/default_privilege/table.sql | 9 ++ .../tables/limit_function/table.sql | 7 - .../tables/procedure/table.sql | 7 - .../tables/rls_function/table.sql | 7 - .../tables/view_grant/table.sql | 2 +- .../types/object_category.sql | 2 + 30 files changed, 176 insertions(+), 277 deletions(-) create mode 100644 packages/metaschema-schema/deploy/schemas/metaschema_public/tables/default_privilege/table.sql delete mode 100644 packages/metaschema-schema/deploy/schemas/metaschema_public/tables/limit_function/table.sql delete mode 100644 packages/metaschema-schema/deploy/schemas/metaschema_public/tables/procedure/table.sql delete mode 100644 packages/metaschema-schema/deploy/schemas/metaschema_public/tables/rls_function/table.sql create mode 100644 packages/metaschema-schema/revert/schemas/metaschema_public/tables/default_privilege/table.sql delete mode 100644 packages/metaschema-schema/revert/schemas/metaschema_public/tables/limit_function/table.sql delete mode 100644 packages/metaschema-schema/revert/schemas/metaschema_public/tables/procedure/table.sql delete mode 100644 packages/metaschema-schema/revert/schemas/metaschema_public/tables/rls_function/table.sql create mode 100644 packages/metaschema-schema/verify/schemas/metaschema_public/tables/default_privilege/table.sql delete mode 100644 packages/metaschema-schema/verify/schemas/metaschema_public/tables/limit_function/table.sql delete mode 100644 packages/metaschema-schema/verify/schemas/metaschema_public/tables/procedure/table.sql delete mode 100644 packages/metaschema-schema/verify/schemas/metaschema_public/tables/rls_function/table.sql 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 fca5045a..c9299c37 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 @@ -8,23 +8,17 @@ CREATE TABLE metaschema_public.database ( id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (), owner_id uuid, schema_hash text, - schema_name text, - private_schema_name text, name text, label text, hash uuid, - unique(schema_hash), - unique(schema_name), - unique(private_schema_name) + unique(schema_hash) ); ALTER TABLE metaschema_public.database ADD CONSTRAINT db_namechk CHECK (char_length(name) > 2); COMMENT ON COLUMN metaschema_public.database.schema_hash IS '@omit'; --- COMMENT ON COLUMN metaschema_public.database.schema_name IS '@omit'; --- COMMENT ON COLUMN metaschema_public.database.private_schema_name IS '@omit'; 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 new file mode 100644 index 00000000..08b1f3f6 --- /dev/null +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/default_privilege/table.sql @@ -0,0 +1,39 @@ +-- Deploy schemas/metaschema_public/tables/default_privilege/table to pg + +-- requires: schemas/metaschema_public/schema +-- requires: schemas/metaschema_public/tables/schema/table +-- requires: schemas/metaschema_public/tables/database/table + +BEGIN; + +CREATE TABLE metaschema_public.default_privilege ( + id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (), + database_id uuid NOT NULL DEFAULT uuid_nil(), + + schema_id uuid NOT NULL, + + -- 'tables', 'functions', 'sequences' + object_type text NOT NULL, + + -- 'ALL', 'SELECT', 'INSERT', 'UPDATE', 'DELETE', 'USAGE', 'EXECUTE', etc. + privilege text NOT NULL, + + -- role receiving the privilege (e.g. 'authenticated', 'administrator', 'anonymous') + grantee_name text NOT NULL, + + -- true = GRANT, false = REVOKE + is_grant boolean NOT NULL DEFAULT true, + + CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE, + CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES metaschema_public.schema (id) ON DELETE CASCADE, + + UNIQUE (schema_id, object_type, privilege, grantee_name, is_grant) +); + +COMMENT ON CONSTRAINT schema_fkey ON metaschema_public.default_privilege IS E'@omit manyToMany'; +COMMENT ON CONSTRAINT db_fkey ON metaschema_public.default_privilege IS E'@omit manyToMany'; + +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/field/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/field/table.sql index e1851a39..a2e08484 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 @@ -3,10 +3,25 @@ -- requires: schemas/metaschema_public/schema -- requires: schemas/metaschema_public/tables/table/table --- requires: schemas/metaschema_public/types/object_category BEGIN; +-- TODO should we just query this table and make a view? +-- https://www.postgresql.org/docs/9.2/catalog-pg-attribute.html + +-- IF YOU WANT TO REMOVE THIS TABLE, answer the qustion, how would you add RLS to this: +-- SELECT +-- attrelid::text AS tbl +-- , attname::text AS col +-- , p.attnum::int as id, +-- t.typname as typename + +-- FROM pg_catalog.pg_attribute p +-- INNER JOIN pg_catalog.pg_type t ON (t.oid = p.atttypid) +-- WHERE attrelid = 'dude_schema.products'::regclass +-- AND p.attnum > 0 +-- AND NOT attisdropped; + CREATE TABLE metaschema_public.field ( id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (), database_id uuid NOT NULL DEFAULT uuid_nil(), @@ -41,11 +56,14 @@ CREATE TABLE metaschema_public.field ( tags citext[] NOT NULL DEFAULT '{}', + -- Field categorization for system/module/app fields (mirrors table categorization) + -- category: 'core' for system fields (id, entity_id, actor_id), 'module' for module-generated fields, 'app' for user-defined fields + -- module: the module name that created this field (e.g., 'users', 'permissions', 'memberships') + -- scope: membership_type int (1=app, 2=org, 3=group, NULL=not scoped) category metaschema_public.object_category NOT NULL DEFAULT 'app', module text NULL, scope int NULL, - -- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE, CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, 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 f6b0bc8e..14d5a1e4 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 @@ -19,7 +19,7 @@ CREATE TABLE metaschema_public.foreign_key_constraint ( field_ids uuid[] NOT NULL, ref_table_id uuid NOT NULL REFERENCES metaschema_public.table (id) ON DELETE CASCADE, ref_field_ids uuid[] NOT NULL, - delete_action char(1) DEFAULT 'c', + delete_action char(1) DEFAULT 'c', -- postgres default is 'a' update_action char(1) DEFAULT 'a', category metaschema_public.object_category NOT NULL DEFAULT 'app', 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 f575950c..320d44b1 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 @@ -33,6 +33,7 @@ CREATE TABLE metaschema_public.index ( CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE, CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, + -- index names are UNIQUE across schemas, so for portability we will check against database_id UNIQUE (database_id, name) ); diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/limit_function/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/limit_function/table.sql deleted file mode 100644 index 3a6c2574..00000000 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/limit_function/table.sql +++ /dev/null @@ -1,34 +0,0 @@ --- Deploy schemas/metaschema_public/tables/limit_function/table to pg - --- requires: schemas/metaschema_public/schema - -BEGIN; - -CREATE TABLE metaschema_public.limit_function ( - id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (), - database_id uuid NOT NULL DEFAULT uuid_nil(), - - table_id uuid NOT NULL, - - name text, - label text, - description text, - - data jsonb, - - security int default 0, -- 0 = invoker, 1 = definer - - -- - - CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE, - CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, - - UNIQUE (database_id, name) -); - -COMMENT ON CONSTRAINT db_fkey ON metaschema_public.limit_function IS E'@omit manyToMany'; -COMMENT ON CONSTRAINT table_fkey ON metaschema_public.limit_function IS E'@omit manyToMany'; -CREATE INDEX limit_function_table_id_idx ON metaschema_public.limit_function ( table_id ); -CREATE INDEX limit_function_database_id_idx ON metaschema_public.limit_function ( database_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 e3ea79fc..f8429b84 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 @@ -12,9 +12,13 @@ CREATE TABLE metaschema_public.policy ( table_id uuid NOT NULL, name text, - role_name text, + grantee_name text, privilege text, + -- using_expression text, + -- check_expression text, + -- policy_text text, + permissive boolean default true, disabled boolean default false, diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/procedure/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/procedure/table.sql deleted file mode 100644 index 701ff7b2..00000000 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/procedure/table.sql +++ /dev/null @@ -1,38 +0,0 @@ --- Deploy schemas/metaschema_public/tables/procedure/table to pg - --- requires: schemas/metaschema_public/schema --- requires: schemas/metaschema_public/tables/database/table --- requires: schemas/metaschema_public/types/object_category - -BEGIN; - -CREATE TABLE metaschema_public.procedure ( - id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (), - database_id uuid NOT NULL DEFAULT uuid_nil(), - - name text NOT NULL, - - argnames text[], - argtypes text[], - argdefaults text[], - - lang_name text, - definition text, - - smart_tags jsonb, - - category metaschema_public.object_category NOT NULL DEFAULT 'app', - module text NULL, - scope int NULL, - - tags citext[] NOT NULL DEFAULT '{}', - - CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE, - - UNIQUE (database_id, name) -); - -COMMENT ON CONSTRAINT db_fkey ON metaschema_public.procedure IS E'@omit manyToMany'; -CREATE INDEX procedure_database_id_idx ON metaschema_public.procedure ( database_id ); - -COMMIT; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/rls_function/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/rls_function/table.sql deleted file mode 100644 index 742a72c0..00000000 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/rls_function/table.sql +++ /dev/null @@ -1,36 +0,0 @@ --- Deploy schemas/metaschema_public/tables/rls_function/table to pg - --- requires: schemas/metaschema_public/schema --- requires: schemas/metaschema_public/tables/database/table - -BEGIN; - -CREATE TABLE metaschema_public.rls_function ( - id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (), - database_id uuid NOT NULL DEFAULT uuid_nil(), - - table_id uuid NOT NULL, - - name text, - label text, - description text, - - data jsonb, - - inline boolean default false, - security int default 0, -- 0 = invoker, 1 = definer (only when inline is false can we apply this) - - -- - - CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE, - CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, - - UNIQUE (database_id, name) -); - -COMMENT ON CONSTRAINT db_fkey ON metaschema_public.rls_function IS E'@omit manyToMany'; -COMMENT ON CONSTRAINT table_fkey ON metaschema_public.rls_function IS E'@omit manyToMany'; -CREATE INDEX rls_function_table_id_idx ON metaschema_public.rls_function ( table_id ); -CREATE INDEX rls_function_database_id_idx ON metaschema_public.rls_function ( 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 cccf5d5e..f22c7f0c 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 @@ -31,6 +31,9 @@ CREATE TABLE metaschema_public.schema ( UNIQUE (schema_name) ); +-- TODO: build out services +-- COMMENT ON COLUMN metaschema_public.schema.schema_name IS '@omit'; + ALTER TABLE metaschema_public.schema ADD CONSTRAINT schema_namechk CHECK (char_length(name) > 2); diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/table/indexes/databases_table_unique_name_idx.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/table/indexes/databases_table_unique_name_idx.sql index 7e1463d5..c981dec4 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/table/indexes/databases_table_unique_name_idx.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/table/indexes/databases_table_unique_name_idx.sql @@ -14,7 +14,7 @@ $BODY$ LANGUAGE sql IMMUTABLE; -CREATE UNIQUE INDEX databases_table_unique_name_idx ON metaschema_public.table (database_id, metaschema_private.table_name_hash (name)); +CREATE UNIQUE INDEX databases_table_unique_name_idx ON metaschema_public.table (database_id, schema_id, metaschema_private.table_name_hash (name)); COMMIT; 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 e5d8bfdf..d76eb1cc 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 @@ -33,12 +33,10 @@ CREATE TABLE metaschema_public.table ( tags citext[] NOT NULL DEFAULT '{}', - -- - CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE, CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES metaschema_public.schema (id) ON DELETE CASCADE, - UNIQUE (database_id, name) + UNIQUE (database_id, schema_id, name) ); ALTER TABLE metaschema_public.table ADD COLUMN diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/table_grant/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/table_grant/table.sql index fad7d9c6..d11af29f 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/table_grant/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/table_grant/table.sql @@ -11,8 +11,12 @@ CREATE TABLE metaschema_public.table_grant ( table_id uuid NOT NULL, privilege text NOT NULL, - role_name text NOT NULL, + grantee_name text NOT NULL, field_ids uuid[], + + -- true = GRANT, false = REVOKE + is_grant boolean NOT NULL DEFAULT true, + -- CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE, CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE 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 0258142a..c38e79c0 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 @@ -6,13 +6,15 @@ BEGIN; +-- https://www.postgresql.org/docs/12/sql-createtrigger.html + CREATE TABLE metaschema_public.trigger ( id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (), database_id uuid NOT NULL DEFAULT uuid_nil(), table_id uuid NOT NULL, name text NOT NULL, - event text, + event text, -- INSERT, UPDATE, DELETE, or TRUNCATE function_name text, smart_tags jsonb, 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 6497989b..ff46166a 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 @@ -27,6 +27,9 @@ CREATE TABLE metaschema_public.unique_constraint ( CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE, CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE, + -- TODO these are unique across schema, NOT table. We'll need to update this to have database_id + -- for portability + UNIQUE (table_id, name), CHECK (field_ids <> '{}') ); 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 32f29b3a..9e5dd2ed 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 @@ -11,15 +11,18 @@ CREATE TABLE metaschema_public.view_grant ( database_id uuid NOT NULL DEFAULT uuid_nil(), view_id uuid NOT NULL, - role_name text NOT NULL, + grantee_name text NOT NULL, privilege text NOT NULL, with_grant_option boolean DEFAULT false, + -- true = GRANT, false = REVOKE + is_grant boolean NOT NULL DEFAULT true, + CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE, CONSTRAINT view_fkey FOREIGN KEY (view_id) REFERENCES metaschema_public.view (id) ON DELETE CASCADE, - UNIQUE (view_id, role_name, privilege) + UNIQUE (view_id, grantee_name, privilege, is_grant) ); COMMENT ON CONSTRAINT view_fkey ON metaschema_public.view_grant IS E'@omit manyToMany'; diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/types/object_category.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/types/object_category.sql index ea77e21e..9480d9f5 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/types/object_category.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/types/object_category.sql @@ -4,6 +4,10 @@ BEGIN; +-- Unified category type for all metaschema objects (tables, fields, procedures, triggers, indexes, policies, constraints, etc.) +-- 'core' - system-level objects (id fields, entity_id, actor_id, etc.) +-- 'module' - objects created by modules (users, permissions, memberships, etc.) +-- 'app' - user-defined application objects CREATE TYPE metaschema_public.object_category AS ENUM ('core', 'module', 'app'); COMMIT; diff --git a/packages/metaschema-schema/pgpm.plan b/packages/metaschema-schema/pgpm.plan index 41952e02..0cbce0c7 100644 --- a/packages/metaschema-schema/pgpm.plan +++ b/packages/metaschema-schema/pgpm.plan @@ -4,29 +4,27 @@ schemas/metaschema_private/schema [pgpm-inflection:schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx pgpm-database-jobs:schemas/app_jobs/triggers/tg_add_job_with_row pgpm-types:schemas/public/domains/url] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_private/schema schemas/metaschema_public/schema 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/schema -schemas/metaschema_public/types/object_category [schemas/metaschema_public/schema] 2026-01-14T00:00:00Z devin # add schemas/metaschema_public/types/object_category +schemas/metaschema_public/types/object_category [schemas/metaschema_public/schema] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/types/object_category schemas/metaschema_public/tables/database/table [schemas/metaschema_public/schema] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/database/table schemas/metaschema_public/tables/schema/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table schemas/metaschema_public/types/object_category] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/schema/table schemas/metaschema_public/tables/table/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table schemas/metaschema_public/tables/schema/table schemas/metaschema_public/types/object_category] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/table/table -schemas/metaschema_public/tables/check_constraint/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table schemas/metaschema_public/tables/table/table schemas/metaschema_public/types/object_category] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/check_constraint/table +schemas/metaschema_public/tables/check_constraint/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table schemas/metaschema_public/tables/table/table] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/check_constraint/table schemas/metaschema_public/tables/database/indexes/databases_database_unique_name_idx [schemas/metaschema_private/schema schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/database/indexes/databases_database_unique_name_idx -schemas/metaschema_public/tables/field/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/table/table schemas/metaschema_public/types/object_category] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/field/table +schemas/metaschema_public/tables/field/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/table/table] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/field/table schemas/metaschema_public/tables/field/indexes/databases_field_uniq_names_idx [schemas/metaschema_public/schema schemas/metaschema_public/tables/field/table] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/field/indexes/databases_field_uniq_names_idx -schemas/metaschema_public/tables/foreign_key_constraint/table [schemas/metaschema_public/tables/field/table schemas/metaschema_public/tables/table/table schemas/metaschema_public/schema schemas/metaschema_public/types/object_category] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/foreign_key_constraint/table +schemas/metaschema_public/tables/foreign_key_constraint/table [schemas/metaschema_public/tables/field/table schemas/metaschema_public/tables/table/table schemas/metaschema_public/schema] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/foreign_key_constraint/table schemas/metaschema_public/tables/full_text_search/table [schemas/metaschema_public/schema] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/full_text_search/table -schemas/metaschema_public/tables/index/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/table/table schemas/metaschema_public/tables/database/table schemas/metaschema_public/types/object_category] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/index/table -schemas/metaschema_public/tables/limit_function/table [schemas/metaschema_public/schema] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/limit_function/table -schemas/metaschema_public/tables/policy/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/table/table schemas/metaschema_public/types/object_category] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/policy/table -schemas/metaschema_public/tables/primary_key_constraint/table [schemas/metaschema_public/schema schemas/metaschema_public/types/object_category] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/primary_key_constraint/table -schemas/metaschema_public/tables/procedure/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table schemas/metaschema_public/types/object_category] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/procedure/table -schemas/metaschema_public/tables/rls_function/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/rls_function/table +schemas/metaschema_public/tables/index/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/table/table schemas/metaschema_public/tables/database/table] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/index/table +schemas/metaschema_public/tables/policy/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/table/table] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/policy/table +schemas/metaschema_public/tables/primary_key_constraint/table [schemas/metaschema_public/schema] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/primary_key_constraint/table schemas/metaschema_public/tables/schema_grant/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/schema/table] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/schema_grant/table schemas/metaschema_public/tables/table_grant/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/table/table] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/table_grant/table schemas/metaschema_public/tables/table/indexes/databases_table_unique_name_idx [schemas/metaschema_public/schema schemas/metaschema_private/schema schemas/metaschema_public/tables/table/table] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/table/indexes/databases_table_unique_name_idx schemas/metaschema_public/tables/trigger_function/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/trigger_function/table -schemas/metaschema_public/tables/trigger/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/table/table schemas/metaschema_public/types/object_category] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/trigger/table -schemas/metaschema_public/tables/unique_constraint/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table schemas/metaschema_public/tables/table/table schemas/metaschema_public/types/object_category] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/unique_constraint/table +schemas/metaschema_public/tables/trigger/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/table/table] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/trigger/table +schemas/metaschema_public/tables/unique_constraint/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table schemas/metaschema_public/tables/table/table] 2017-08-11T08:11:51Z skitch # add schemas/metaschema_public/tables/unique_constraint/table schemas/metaschema_public/tables/view/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/schema/table schemas/metaschema_public/tables/table/table schemas/metaschema_public/tables/database/table schemas/metaschema_public/types/object_category] 2026-01-23T00:00:00Z devin # add schemas/metaschema_public/tables/view/table schemas/metaschema_public/tables/view_table/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/view/table schemas/metaschema_public/tables/table/table] 2026-01-23T00:00:00Z devin # add schemas/metaschema_public/tables/view_table/table schemas/metaschema_public/tables/view_grant/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/view/table schemas/metaschema_public/tables/database/table] 2026-01-23T00:00:00Z devin # add schemas/metaschema_public/tables/view_grant/table schemas/metaschema_public/tables/view_rule/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/view/table schemas/metaschema_public/tables/database/table] 2026-01-23T00:00:00Z devin # add schemas/metaschema_public/tables/view_rule/table +schemas/metaschema_public/tables/default_privilege/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/schema/table schemas/metaschema_public/tables/database/table] 2026-02-27T00:00:00Z Constructive # add schemas/metaschema_public/tables/default_privilege/table diff --git a/packages/metaschema-schema/revert/schemas/metaschema_public/tables/default_privilege/table.sql b/packages/metaschema-schema/revert/schemas/metaschema_public/tables/default_privilege/table.sql new file mode 100644 index 00000000..186ea256 --- /dev/null +++ b/packages/metaschema-schema/revert/schemas/metaschema_public/tables/default_privilege/table.sql @@ -0,0 +1,7 @@ +-- Revert schemas/metaschema_public/tables/default_privilege/table from pg + +BEGIN; + +DROP TABLE IF EXISTS metaschema_public.default_privilege; + +COMMIT; diff --git a/packages/metaschema-schema/revert/schemas/metaschema_public/tables/limit_function/table.sql b/packages/metaschema-schema/revert/schemas/metaschema_public/tables/limit_function/table.sql deleted file mode 100644 index 2d8c1432..00000000 --- a/packages/metaschema-schema/revert/schemas/metaschema_public/tables/limit_function/table.sql +++ /dev/null @@ -1,7 +0,0 @@ --- Revert schemas/metaschema_public/tables/limit_function/table from pg - -BEGIN; - -DROP TABLE metaschema_public.limit_function; - -COMMIT; diff --git a/packages/metaschema-schema/revert/schemas/metaschema_public/tables/procedure/table.sql b/packages/metaschema-schema/revert/schemas/metaschema_public/tables/procedure/table.sql deleted file mode 100644 index 3d1f26b4..00000000 --- a/packages/metaschema-schema/revert/schemas/metaschema_public/tables/procedure/table.sql +++ /dev/null @@ -1,7 +0,0 @@ --- Revert schemas/metaschema_public/tables/procedure/table from pg - -BEGIN; - -DROP TABLE metaschema_public.procedure; - -COMMIT; diff --git a/packages/metaschema-schema/revert/schemas/metaschema_public/tables/rls_function/table.sql b/packages/metaschema-schema/revert/schemas/metaschema_public/tables/rls_function/table.sql deleted file mode 100644 index c9b4addf..00000000 --- a/packages/metaschema-schema/revert/schemas/metaschema_public/tables/rls_function/table.sql +++ /dev/null @@ -1,7 +0,0 @@ --- Revert schemas/metaschema_public/tables/rls_function/table from pg - -BEGIN; - -DROP TABLE metaschema_public.rls_function; - -COMMIT; diff --git a/packages/metaschema-schema/revert/schemas/metaschema_public/types/object_category.sql b/packages/metaschema-schema/revert/schemas/metaschema_public/types/object_category.sql index 84ba74ed..68174dd4 100644 --- a/packages/metaschema-schema/revert/schemas/metaschema_public/types/object_category.sql +++ b/packages/metaschema-schema/revert/schemas/metaschema_public/types/object_category.sql @@ -2,6 +2,6 @@ BEGIN; -DROP TYPE IF EXISTS metaschema_public.object_category; +DROP TYPE metaschema_public.object_category; COMMIT; diff --git a/packages/metaschema-schema/sql/metaschema-schema--0.15.5.sql b/packages/metaschema-schema/sql/metaschema-schema--0.15.5.sql index ee976673..60c96490 100644 --- a/packages/metaschema-schema/sql/metaschema-schema--0.15.5.sql +++ b/packages/metaschema-schema/sql/metaschema-schema--0.15.5.sql @@ -25,18 +25,16 @@ ALTER DEFAULT PRIVILEGES IN SCHEMA metaschema_public ALTER DEFAULT PRIVILEGES IN SCHEMA metaschema_public GRANT ALL ON FUNCTIONS TO authenticated; +CREATE TYPE metaschema_public.object_category AS ENUM ('core', 'module', 'app'); + CREATE TABLE metaschema_public.database ( id uuid PRIMARY KEY DEFAULT uuid_generate_v4(), owner_id uuid, schema_hash text, - schema_name text, - private_schema_name text, name text, label text, hash uuid, - UNIQUE (schema_hash), - UNIQUE (schema_name), - UNIQUE (private_schema_name) + UNIQUE (schema_hash) ); ALTER TABLE metaschema_public.database @@ -52,6 +50,12 @@ CREATE TABLE metaschema_public.schema ( schema_name text NOT NULL, label text, description text, + smart_tags jsonb, + category metaschema_public.object_category NOT NULL DEFAULT 'app', + module text NULL, + scope int NULL, + tags citext[] NOT NULL DEFAULT '{}', + is_public boolean NOT NULL DEFAULT true, CONSTRAINT db_fkey FOREIGN KEY(database_id) REFERENCES metaschema_public.database (id) @@ -68,8 +72,6 @@ COMMENT ON CONSTRAINT db_fkey ON metaschema_public.schema IS '@omit manyToMany'; CREATE INDEX schema_database_id_idx ON metaschema_public.schema (database_id); -CREATE TYPE metaschema_public.table_category AS ENUM ('core', 'module', 'app'); - CREATE TABLE metaschema_public."table" ( id uuid PRIMARY KEY DEFAULT uuid_generate_v4(), database_id uuid NOT NULL DEFAULT uuid_nil(), @@ -78,7 +80,7 @@ CREATE TABLE metaschema_public."table" ( label text, description text, smart_tags jsonb, - category metaschema_public.table_category NOT NULL DEFAULT 'app', + category metaschema_public.object_category NOT NULL DEFAULT 'app', module text NULL, scope int NULL, use_rls boolean NOT NULL DEFAULT false, @@ -95,7 +97,7 @@ CREATE TABLE metaschema_public."table" ( FOREIGN KEY(schema_id) REFERENCES metaschema_public.schema (id) ON DELETE CASCADE, - UNIQUE (database_id, name) + UNIQUE (database_id, schema_id, name) ); ALTER TABLE metaschema_public."table" @@ -119,6 +121,11 @@ CREATE TABLE metaschema_public.check_constraint ( type text, field_ids uuid[] NOT NULL, expr jsonb, + smart_tags jsonb, + category metaschema_public.object_category NOT NULL DEFAULT 'app', + module text NULL, + scope int NULL, + tags citext[] NOT NULL DEFAULT '{}', CONSTRAINT db_fkey FOREIGN KEY(database_id) REFERENCES metaschema_public.database (id) @@ -146,8 +153,6 @@ $EOFCODE$ LANGUAGE sql IMMUTABLE; CREATE UNIQUE INDEX databases_database_unique_name_idx ON metaschema_public.database (owner_id, (metaschema_private.database_name_hash(name))); -CREATE TYPE metaschema_public.field_category AS ENUM ('core', 'module', 'app'); - CREATE TABLE metaschema_public.field ( id uuid PRIMARY KEY DEFAULT uuid_generate_v4(), database_id uuid NOT NULL DEFAULT uuid_nil(), @@ -168,7 +173,7 @@ CREATE TABLE metaschema_public.field ( min double precision DEFAULT NULL, max double precision DEFAULT NULL, tags citext[] NOT NULL DEFAULT '{}', - category metaschema_public.field_category NOT NULL DEFAULT 'app', + category metaschema_public.object_category NOT NULL DEFAULT 'app', module text NULL, scope int NULL, CONSTRAINT db_fkey @@ -192,7 +197,10 @@ CREATE INDEX field_database_id_idx ON metaschema_public.field (database_id); COMMENT ON COLUMN metaschema_public.field.default_value IS '@sqlExpression'; -CREATE UNIQUE INDEX databases_field_uniq_names_idx ON metaschema_public.field (table_id, (decode(md5(lower(CASE WHEN type = 'uuid' THEN regexp_replace(name, '^(.+?)(_row_id|_id|_uuid|_fk|_pk)$', E'\\1', 'i') ELSE name END)), 'hex'))); +CREATE UNIQUE INDEX databases_field_uniq_names_idx ON metaschema_public.field (table_id, (decode(md5(lower(CASE + WHEN type = 'uuid' THEN regexp_replace(name, '^(.+?)(_row_id|_id|_uuid|_fk|_pk)$', E'\\1', 'i') + ELSE name +END)), 'hex'))); CREATE TABLE metaschema_public.foreign_key_constraint ( id uuid PRIMARY KEY DEFAULT uuid_generate_v4(), @@ -208,6 +216,10 @@ CREATE TABLE metaschema_public.foreign_key_constraint ( ref_field_ids uuid[] NOT NULL, delete_action char(1) DEFAULT 'c', update_action char(1) DEFAULT 'a', + category metaschema_public.object_category NOT NULL DEFAULT 'app', + module text NULL, + scope int NULL, + tags citext[] NOT NULL DEFAULT '{}', CONSTRAINT db_fkey FOREIGN KEY(database_id) REFERENCES metaschema_public.database (id) @@ -270,6 +282,11 @@ CREATE TABLE metaschema_public.index ( index_params jsonb, where_clause jsonb, is_unique boolean NOT NULL DEFAULT false, + smart_tags jsonb, + category metaschema_public.object_category NOT NULL DEFAULT 'app', + module text NULL, + scope int NULL, + tags citext[] NOT NULL DEFAULT '{}', CONSTRAINT db_fkey FOREIGN KEY(database_id) REFERENCES metaschema_public.database (id) @@ -289,45 +306,22 @@ 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.limit_function ( - id uuid PRIMARY KEY DEFAULT uuid_generate_v4(), - database_id uuid NOT NULL DEFAULT uuid_nil(), - table_id uuid NOT NULL, - name text, - label text, - description text, - data jsonb, - security int DEFAULT 0, - CONSTRAINT db_fkey - FOREIGN KEY(database_id) - REFERENCES metaschema_public.database (id) - ON DELETE CASCADE, - CONSTRAINT table_fkey - FOREIGN KEY(table_id) - REFERENCES metaschema_public."table" (id) - ON DELETE CASCADE, - UNIQUE (database_id, name) -); - -COMMENT ON CONSTRAINT db_fkey ON metaschema_public.limit_function IS '@omit manyToMany'; - -COMMENT ON CONSTRAINT table_fkey ON metaschema_public.limit_function IS '@omit manyToMany'; - -CREATE INDEX limit_function_table_id_idx ON metaschema_public.limit_function (table_id); - -CREATE INDEX limit_function_database_id_idx ON metaschema_public.limit_function (database_id); - CREATE TABLE metaschema_public.policy ( id uuid PRIMARY KEY DEFAULT uuid_generate_v4(), database_id uuid NOT NULL DEFAULT uuid_nil(), table_id uuid NOT NULL, name text, - role_name text, + grantee_name text, privilege text, permissive boolean DEFAULT true, disabled boolean DEFAULT false, - template text, + policy_type text, data jsonb, + smart_tags jsonb, + category metaschema_public.object_category NOT NULL DEFAULT 'app', + module text NULL, + scope int NULL, + tags citext[] NOT NULL DEFAULT '{}', CONSTRAINT db_fkey FOREIGN KEY(database_id) REFERENCES metaschema_public.database (id) @@ -354,6 +348,11 @@ CREATE TABLE metaschema_public.primary_key_constraint ( name text, type text, field_ids uuid[] NOT NULL, + smart_tags jsonb, + category metaschema_public.object_category NOT NULL DEFAULT 'app', + module text NULL, + scope int NULL, + tags citext[] NOT NULL DEFAULT '{}', CONSTRAINT db_fkey FOREIGN KEY(database_id) REFERENCES metaschema_public.database (id) @@ -374,55 +373,6 @@ CREATE INDEX primary_key_constraint_table_id_idx ON metaschema_public.primary_ke CREATE INDEX primary_key_constraint_database_id_idx ON metaschema_public.primary_key_constraint (database_id); -CREATE TABLE metaschema_public.procedure ( - id uuid PRIMARY KEY DEFAULT uuid_generate_v4(), - database_id uuid NOT NULL DEFAULT uuid_nil(), - name text NOT NULL, - argnames text[], - argtypes text[], - argdefaults text[], - lang_name text, - definition text, - CONSTRAINT db_fkey - FOREIGN KEY(database_id) - REFERENCES metaschema_public.database (id) - ON DELETE CASCADE, - UNIQUE (database_id, name) -); - -COMMENT ON CONSTRAINT db_fkey ON metaschema_public.procedure IS '@omit manyToMany'; - -CREATE INDEX procedure_database_id_idx ON metaschema_public.procedure (database_id); - -CREATE TABLE metaschema_public.rls_function ( - id uuid PRIMARY KEY DEFAULT uuid_generate_v4(), - database_id uuid NOT NULL DEFAULT uuid_nil(), - table_id uuid NOT NULL, - name text, - label text, - description text, - data jsonb, - inline boolean DEFAULT false, - security int DEFAULT 0, - CONSTRAINT db_fkey - FOREIGN KEY(database_id) - REFERENCES metaschema_public.database (id) - ON DELETE CASCADE, - CONSTRAINT table_fkey - FOREIGN KEY(table_id) - REFERENCES metaschema_public."table" (id) - ON DELETE CASCADE, - UNIQUE (database_id, name) -); - -COMMENT ON CONSTRAINT db_fkey ON metaschema_public.rls_function IS '@omit manyToMany'; - -COMMENT ON CONSTRAINT table_fkey ON metaschema_public.rls_function IS '@omit manyToMany'; - -CREATE INDEX rls_function_table_id_idx ON metaschema_public.rls_function (table_id); - -CREATE INDEX rls_function_database_id_idx ON metaschema_public.rls_function (database_id); - CREATE TABLE metaschema_public.schema_grant ( id uuid PRIMARY KEY DEFAULT uuid_generate_v4(), database_id uuid NOT NULL DEFAULT uuid_nil(), @@ -451,8 +401,9 @@ CREATE TABLE metaschema_public.table_grant ( database_id uuid NOT NULL DEFAULT uuid_nil(), table_id uuid NOT NULL, privilege text NOT NULL, - role_name text NOT NULL, + grantee_name text NOT NULL, field_ids uuid[], + is_grant boolean NOT NULL DEFAULT true, CONSTRAINT db_fkey FOREIGN KEY(database_id) REFERENCES metaschema_public.database (id) @@ -476,7 +427,7 @@ CREATE FUNCTION metaschema_private.table_name_hash(name text) RETURNS bytea AS $ DECODE(MD5(LOWER(inflection.plural (name))), 'hex'); $EOFCODE$ LANGUAGE sql IMMUTABLE; -CREATE UNIQUE INDEX databases_table_unique_name_idx ON metaschema_public."table" (database_id, (metaschema_private.table_name_hash(name))); +CREATE UNIQUE INDEX databases_table_unique_name_idx ON metaschema_public."table" (database_id, schema_id, (metaschema_private.table_name_hash(name))); CREATE TABLE metaschema_public.trigger_function ( id uuid PRIMARY KEY DEFAULT uuid_generate_v4(), @@ -501,6 +452,11 @@ CREATE TABLE metaschema_public.trigger ( name text NOT NULL, event text, function_name text, + smart_tags jsonb, + category metaschema_public.object_category NOT NULL DEFAULT 'app', + module text NULL, + scope int NULL, + tags citext[] NOT NULL DEFAULT '{}', CONSTRAINT db_fkey FOREIGN KEY(database_id) REFERENCES metaschema_public.database (id) @@ -529,6 +485,10 @@ CREATE TABLE metaschema_public.unique_constraint ( smart_tags jsonb, type text, field_ids uuid[] NOT NULL, + category metaschema_public.object_category NOT NULL DEFAULT 'app', + module text NULL, + scope int NULL, + tags citext[] NOT NULL DEFAULT '{}', CONSTRAINT db_fkey FOREIGN KEY(database_id) REFERENCES metaschema_public.database (id) diff --git a/packages/metaschema-schema/verify/schemas/metaschema_public/tables/default_privilege/table.sql b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/default_privilege/table.sql new file mode 100644 index 00000000..ffc657a3 --- /dev/null +++ b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/default_privilege/table.sql @@ -0,0 +1,9 @@ +-- Verify schemas/metaschema_public/tables/default_privilege/table on pg + +BEGIN; + +SELECT id, database_id, schema_id, object_type, privilege, grantee_name, is_grant +FROM metaschema_public.default_privilege +WHERE FALSE; + +ROLLBACK; diff --git a/packages/metaschema-schema/verify/schemas/metaschema_public/tables/limit_function/table.sql b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/limit_function/table.sql deleted file mode 100644 index aa71c5b3..00000000 --- a/packages/metaschema-schema/verify/schemas/metaschema_public/tables/limit_function/table.sql +++ /dev/null @@ -1,7 +0,0 @@ --- Verify schemas/metaschema_public/tables/limit_function/table on pg - -BEGIN; - -SELECT verify_table ('metaschema_public.limit_function'); - -ROLLBACK; diff --git a/packages/metaschema-schema/verify/schemas/metaschema_public/tables/procedure/table.sql b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/procedure/table.sql deleted file mode 100644 index 0adf1398..00000000 --- a/packages/metaschema-schema/verify/schemas/metaschema_public/tables/procedure/table.sql +++ /dev/null @@ -1,7 +0,0 @@ --- Verify schemas/metaschema_public/tables/procedure/table on pg - -BEGIN; - -SELECT verify_table ('metaschema_public.procedure'); - -ROLLBACK; diff --git a/packages/metaschema-schema/verify/schemas/metaschema_public/tables/rls_function/table.sql b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/rls_function/table.sql deleted file mode 100644 index dd8746d3..00000000 --- a/packages/metaschema-schema/verify/schemas/metaschema_public/tables/rls_function/table.sql +++ /dev/null @@ -1,7 +0,0 @@ --- Verify schemas/metaschema_public/tables/rls_function/table on pg - -BEGIN; - -SELECT verify_table ('metaschema_public.rls_function'); - -ROLLBACK; diff --git a/packages/metaschema-schema/verify/schemas/metaschema_public/tables/view_grant/table.sql b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/view_grant/table.sql index d3084fc2..169863fa 100644 --- a/packages/metaschema-schema/verify/schemas/metaschema_public/tables/view_grant/table.sql +++ b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/view_grant/table.sql @@ -2,7 +2,7 @@ BEGIN; -SELECT id, database_id, view_id, role_name, privilege, with_grant_option +SELECT id, database_id, view_id, grantee_name, privilege, with_grant_option FROM metaschema_public.view_grant WHERE FALSE; diff --git a/packages/metaschema-schema/verify/schemas/metaschema_public/types/object_category.sql b/packages/metaschema-schema/verify/schemas/metaschema_public/types/object_category.sql index 9d5c82f5..cb6b1b13 100644 --- a/packages/metaschema-schema/verify/schemas/metaschema_public/types/object_category.sql +++ b/packages/metaschema-schema/verify/schemas/metaschema_public/types/object_category.sql @@ -3,5 +3,7 @@ BEGIN; SELECT 'core'::metaschema_public.object_category; +SELECT 'module'::metaschema_public.object_category; +SELECT 'app'::metaschema_public.object_category; ROLLBACK; From 7a396094e267de5fc8e46a2615cd7cf6175a2574 Mon Sep 17 00:00:00 2001 From: Dan Lynch Date: Sun, 1 Mar 2026 01:08:24 +0000 Subject: [PATCH 2/2] fix: update snapshots for metaschema-modules and services after schema sync --- .../__snapshots__/modules.test.ts.snap | 150 +++++++++--------- .../__snapshots__/services.test.ts.snap | 2 - 2 files changed, 75 insertions(+), 77 deletions(-) diff --git a/packages/metaschema-modules/__tests__/__snapshots__/modules.test.ts.snap b/packages/metaschema-modules/__tests__/__snapshots__/modules.test.ts.snap index 459a5bc6..b78cef07 100644 --- a/packages/metaschema-modules/__tests__/__snapshots__/modules.test.ts.snap +++ b/packages/metaschema-modules/__tests__/__snapshots__/modules.test.ts.snap @@ -150,13 +150,13 @@ exports[`db_meta_modules should verify field_module table structure 1`] = ` exports[`db_meta_modules should verify module table structures have database_id foreign keys 1`] = ` { - "constraintCount": 72600, + "constraintCount": 67416, } `; exports[`db_meta_modules should verify module tables have proper foreign key relationships 1`] = ` { - "constraintCount": 102535, + "constraintCount": 96840, "foreignTables": [ "apis", "database", @@ -167,6 +167,79 @@ exports[`db_meta_modules should verify module tables have proper foreign key rel } `; +exports[`db_meta_modules should verify sessions_module table structure 1`] = ` +{ + "columns": [ + { + "column_default": "uuid_generate_v4()", + "column_name": "id", + "data_type": "uuid", + "is_nullable": "NO", + }, + { + "column_default": null, + "column_name": "database_id", + "data_type": "uuid", + "is_nullable": "NO", + }, + { + "column_default": "uuid_nil()", + "column_name": "schema_id", + "data_type": "uuid", + "is_nullable": "NO", + }, + { + "column_default": "uuid_nil()", + "column_name": "sessions_table_id", + "data_type": "uuid", + "is_nullable": "NO", + }, + { + "column_default": "uuid_nil()", + "column_name": "session_credentials_table_id", + "data_type": "uuid", + "is_nullable": "NO", + }, + { + "column_default": "uuid_nil()", + "column_name": "auth_settings_table_id", + "data_type": "uuid", + "is_nullable": "NO", + }, + { + "column_default": "uuid_nil()", + "column_name": "users_table_id", + "data_type": "uuid", + "is_nullable": "NO", + }, + { + "column_default": "'30 days'::interval", + "column_name": "sessions_default_expiration", + "data_type": "interval", + "is_nullable": "NO", + }, + { + "column_default": "'sessions'::text", + "column_name": "sessions_table", + "data_type": "text", + "is_nullable": "NO", + }, + { + "column_default": "'session_credentials'::text", + "column_name": "session_credentials_table", + "data_type": "text", + "is_nullable": "NO", + }, + { + "column_default": "'app_auth_settings'::text", + "column_name": "auth_settings_table", + "data_type": "text", + "is_nullable": "NO", + }, + ], +} +`; + exports[`db_meta_modules should verify specific module table column defaults 1`] = ` { "sessionsDefaults": [ @@ -350,79 +423,6 @@ exports[`db_meta_modules should verify table_template_module table structure 1`] } `; -exports[`db_meta_modules should verify sessions_module table structure 1`] = ` -{ - "columns": [ - { - "column_default": "uuid_generate_v4()", - "column_name": "id", - "data_type": "uuid", - "is_nullable": "NO", - }, - { - "column_default": null, - "column_name": "database_id", - "data_type": "uuid", - "is_nullable": "NO", - }, - { - "column_default": "uuid_nil()", - "column_name": "schema_id", - "data_type": "uuid", - "is_nullable": "NO", - }, - { - "column_default": "uuid_nil()", - "column_name": "sessions_table_id", - "data_type": "uuid", - "is_nullable": "NO", - }, - { - "column_default": "uuid_nil()", - "column_name": "session_credentials_table_id", - "data_type": "uuid", - "is_nullable": "NO", - }, - { - "column_default": "uuid_nil()", - "column_name": "auth_settings_table_id", - "data_type": "uuid", - "is_nullable": "NO", - }, - { - "column_default": "uuid_nil()", - "column_name": "users_table_id", - "data_type": "uuid", - "is_nullable": "NO", - }, - { - "column_default": "'30 days'::interval", - "column_name": "sessions_default_expiration", - "data_type": "interval", - "is_nullable": "NO", - }, - { - "column_default": "'sessions'::text", - "column_name": "sessions_table", - "data_type": "text", - "is_nullable": "NO", - }, - { - "column_default": "'session_credentials'::text", - "column_name": "session_credentials_table", - "data_type": "text", - "is_nullable": "NO", - }, - { - "column_default": "'app_auth_settings'::text", - "column_name": "auth_settings_table", - "data_type": "text", - "is_nullable": "NO", - }, - ], -} -`; - exports[`db_meta_modules should verify users_module table structure 1`] = ` { "columns": [ diff --git a/packages/services/__tests__/__snapshots__/services.test.ts.snap b/packages/services/__tests__/__snapshots__/services.test.ts.snap index cf59d927..07e23d67 100644 --- a/packages/services/__tests__/__snapshots__/services.test.ts.snap +++ b/packages/services/__tests__/__snapshots__/services.test.ts.snap @@ -7,9 +7,7 @@ exports[`services functionality should handle complete meta workflow with servic "label": null, "name": "my-meta-db", "owner_id": "[ID]", - "private_schema_name": null, "schema_hash": null, - "schema_name": null, } `;