Support non-valid->validate constraint creation

This commit is contained in:
Robert Lechte 2022-07-24 19:49:16 +10:00
parent f95f98a905
commit 2e6ed06b2d
6 changed files with 56 additions and 24 deletions

View File

@ -122,7 +122,10 @@ def statements_from_differences(
for k, v in added.items():
if not has_uncreated_dependencies(v, pending_creations):
if k in pending_creations:
statements.append(v.create_statement)
if hasattr(v, 'safer_create_statements'):
statements += v.safer_create_statements
else:
statements.append(v.create_statement)
pending_creations.remove(k)
if modifications:
for k, v in modified.items():
@ -134,7 +137,10 @@ def statements_from_differences(
if creations:
if not has_uncreated_dependencies(v, pending_creations):
if k in pending_creations:
statements.append(v.create_statement)
if hasattr(v, 'safer_create_statements'):
statements += v.safer_create_statements
else:
statements.append(v.create_statement)
pending_creations.remove(k)
after = pending_drops | pending_creations
if not after:

18
poetry.lock generated
View File

@ -15,9 +15,9 @@ optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope-interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope-interface", "sphinx-notfound-page"]
tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope-interface", "cloudpickle"]
tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
@ -127,7 +127,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl-flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
name = "iniconfig"
@ -340,7 +340,7 @@ jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"]
[[package]]
name = "schemainspect"
version = "3.1.1652015119"
version = "3.1.1658648837"
description = "Schema inspection for PostgreSQL (and possibly others)"
category = "main"
optional = false
@ -450,7 +450,7 @@ python-versions = ">=3.7"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"]
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco-itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[extras]
pg = ["psycopg2-binary"]
@ -458,7 +458,7 @@ pg = ["psycopg2-binary"]
[metadata]
lock-version = "1.1"
python-versions = ">=3.7,<4"
content-hash = "34e57ac69769d227248e4f881d1842dc9e78e41ca22af0574ce062ed8f8f2f86"
content-hash = "21ffd0af5c9902c2d943b8bf9414108c42f6a45a807f8130a4105fa341d86a85"
[metadata.files]
atomicwrites = [
@ -648,8 +648,8 @@ rich = [
{file = "rich-12.5.1.tar.gz", hash = "sha256:63a5c5ce3673d3d5fbbf23cd87e11ab84b6b451436f1b7f19ec54b6bc36ed7ca"},
]
schemainspect = [
{file = "schemainspect-3.1.1652015119-py3-none-any.whl", hash = "sha256:b98cf19f76a8e5110c2a81f74bf72e7ae52697895f5910f40c0cd1d64cb7c445"},
{file = "schemainspect-3.1.1652015119.tar.gz", hash = "sha256:7eb05190b52e1520c1ea573abc39eac47752b647708b6d7dfc350345737e44a1"},
{file = "schemainspect-3.1.1658648837-py3-none-any.whl", hash = "sha256:db34c334a4af0fa4710d3e1cd075efb17f3b4760ff0e9bb779bbb4a78ad13f81"},
{file = "schemainspect-3.1.1658648837.tar.gz", hash = "sha256:601e9fa5fc243cb645201ea0064d2f2993023ee7c97fa08d9d2fd36dc806ddfc"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},

View File

@ -41,6 +41,10 @@ alter table "public"."t1" add constraint "t1_pkey" PRIMARY KEY using index "t1_p
alter table "public"."circles" add constraint "circles_c_excl" EXCLUDE USING gist (c WITH &&);
alter table "public"."t1" add constraint "x" CHECK ((price > (0)::numeric));
alter table "public"."t1" add constraint "x" CHECK ((price > (0)::numeric)) not valid;
alter table "public"."t2" add constraint "t2_bb_fkey" FOREIGN KEY (bb) REFERENCES b(bb) DEFERRABLE INITIALLY DEFERRED;
alter table "public"."t1" validate constraint "x";
alter table "public"."t2" add constraint "t2_bb_fkey" FOREIGN KEY (bb) REFERENCES b(bb) DEFERRABLE INITIALLY DEFERRED not valid;
alter table "public"."t2" validate constraint "t2_bb_fkey";

View File

@ -134,13 +134,21 @@ alter table "public"."order_items" add constraint "order_items_pkey" PRIMARY KEY
alter table "public"."products" add constraint "products_pkey" PRIMARY KEY using index "products_pkey";
alter table "public"."order_items" add constraint "order_items_order_id_fkey" FOREIGN KEY (order_id) REFERENCES orders(order_id) ON DELETE CASCADE;
alter table "public"."order_items" add constraint "order_items_order_id_fkey" FOREIGN KEY (order_id) REFERENCES orders(order_id) ON DELETE CASCADE not valid;
alter table "public"."order_items" add constraint "order_items_product_no_fkey" FOREIGN KEY (product_no) REFERENCES products(product_no) ON DELETE RESTRICT;
alter table "public"."order_items" validate constraint "order_items_order_id_fkey";
alter table "public"."products" add constraint "y" CHECK ((price > (0)::numeric));
alter table "public"."order_items" add constraint "order_items_product_no_fkey" FOREIGN KEY (product_no) REFERENCES products(product_no) ON DELETE RESTRICT not valid;
alter table "public"."products" add constraint "x" CHECK ((price > (10)::numeric));
alter table "public"."order_items" validate constraint "order_items_product_no_fkey";
alter table "public"."products" add constraint "y" CHECK ((price > (0)::numeric)) not valid;
alter table "public"."products" validate constraint "y";
alter table "public"."products" add constraint "x" CHECK ((price > (10)::numeric)) not valid;
alter table "public"."products" validate constraint "x";
set check_function_bodies = off;

View File

@ -130,13 +130,21 @@ alter table "public"."order_items" add constraint "order_items_pkey" PRIMARY KEY
alter table "public"."products" add constraint "products_pkey" PRIMARY KEY using index "products_pkey";
alter table "public"."order_items" add constraint "order_items_order_id_fkey" FOREIGN KEY (order_id) REFERENCES orders(order_id) ON DELETE CASCADE;
alter table "public"."order_items" add constraint "order_items_order_id_fkey" FOREIGN KEY (order_id) REFERENCES orders(order_id) ON DELETE CASCADE not valid;
alter table "public"."order_items" add constraint "order_items_product_no_fkey" FOREIGN KEY (product_no) REFERENCES products(product_no) ON DELETE RESTRICT;
alter table "public"."order_items" validate constraint "order_items_order_id_fkey";
alter table "public"."products" add constraint "y" CHECK ((price > (0)::numeric));
alter table "public"."order_items" add constraint "order_items_product_no_fkey" FOREIGN KEY (product_no) REFERENCES products(product_no) ON DELETE RESTRICT not valid;
alter table "public"."products" add constraint "x" CHECK ((price > (10)::numeric));
alter table "public"."order_items" validate constraint "order_items_product_no_fkey";
alter table "public"."products" add constraint "y" CHECK ((price > (0)::numeric)) not valid;
alter table "public"."products" validate constraint "y";
alter table "public"."products" add constraint "x" CHECK ((price > (10)::numeric)) not valid;
alter table "public"."products" validate constraint "x";
set check_function_bodies = off;

View File

@ -40,12 +40,18 @@ CREATE UNIQUE INDEX entity_bindings_c_entity_id_entity_type_key ON public.entity
alter table "public"."entity_bindings_a" add constraint "entity_bindings_a_entity_id_entity_type_key" UNIQUE using index "entity_bindings_a_entity_id_entity_type_key";
alter table "public"."entity_bindings_a" add constraint "entity_type must be A" CHECK ((entity_type = 'A'::text));
alter table "public"."entity_bindings_a" add constraint "entity_type must be A" CHECK ((entity_type = 'A'::text)) not valid;
alter table "public"."entity_bindings_a" validate constraint "entity_type must be A";
alter table "public"."entity_bindings_b" add constraint "entity_bindings_b_entity_id_entity_type_key" UNIQUE using index "entity_bindings_b_entity_id_entity_type_key";
alter table "public"."entity_bindings_b" add constraint "entity_type must be B" CHECK ((entity_type = 'B'::text));
alter table "public"."entity_bindings_b" add constraint "entity_type must be B" CHECK ((entity_type = 'B'::text)) not valid;
alter table "public"."entity_bindings_b" validate constraint "entity_type must be B";
alter table "public"."entity_bindings_c" add constraint "entity_bindings_c_entity_id_entity_type_key" UNIQUE using index "entity_bindings_c_entity_id_entity_type_key";
alter table "public"."entity_bindings_c" add constraint "entity_type must be C" CHECK ((entity_type = 'C'::text));
alter table "public"."entity_bindings_c" add constraint "entity_type must be C" CHECK ((entity_type = 'C'::text)) not valid;
alter table "public"."entity_bindings_c" validate constraint "entity_type must be C";