mirror of
https://github.com/djrobstep/migra.git
synced 2024-10-26 07:00:54 +03:00
drop-and-recreate defaults on enum modification (#125)
This commit is contained in:
parent
26dbccaa06
commit
64ef4a4463
@ -130,18 +130,29 @@ def get_enum_modifications(tables_from, tables_target, enums_from, enums_target)
|
||||
recreate = Statements()
|
||||
post = Statements()
|
||||
enums_to_change = e_modified
|
||||
|
||||
for t, v in t_modified.items():
|
||||
t_before = tables_from[t]
|
||||
_, _, c_modified, _ = differences(t_before.columns, v.columns)
|
||||
for k, c in c_modified.items():
|
||||
before = t_before.columns[k]
|
||||
|
||||
if (
|
||||
c.is_enum == before.is_enum
|
||||
and c.dbtypestr == before.dbtypestr
|
||||
and c.enum != before.enum
|
||||
):
|
||||
has_default = c.default and not c.is_generated
|
||||
|
||||
if has_default:
|
||||
pre.append(before.drop_default_statement(t))
|
||||
|
||||
pre.append(before.change_enum_to_string_statement(t))
|
||||
post.append(before.change_string_to_enum_statement(t))
|
||||
|
||||
if has_default:
|
||||
post.append(before.add_default_statement(t))
|
||||
|
||||
for e in enums_to_change.values():
|
||||
recreate.append(e.drop_statement)
|
||||
recreate.append(e.create_statement)
|
||||
|
@ -14,7 +14,7 @@ python = "*"
|
||||
sqlbag = "*"
|
||||
six = "*"
|
||||
# schemainspect = {path="../schemainspect"}
|
||||
schemainspect = ">=0.1.1585871494"
|
||||
schemainspect = ">=0.1.1586428725"
|
||||
psycopg2-binary = { version="*", optional = true }
|
||||
|
||||
[tool.poetry.dev-dependencies]
|
||||
|
6
tests/FIXTURES/enumdefaults/a.sql
Normal file
6
tests/FIXTURES/enumdefaults/a.sql
Normal file
@ -0,0 +1,6 @@
|
||||
create type order_status as enum('pending', 'processing', 'complete');
|
||||
|
||||
create table orders(
|
||||
id serial primary key,
|
||||
status order_status default 'pending'::order_status
|
||||
);
|
0
tests/FIXTURES/enumdefaults/additions.sql
Normal file
0
tests/FIXTURES/enumdefaults/additions.sql
Normal file
6
tests/FIXTURES/enumdefaults/b.sql
Normal file
6
tests/FIXTURES/enumdefaults/b.sql
Normal file
@ -0,0 +1,6 @@
|
||||
create type order_status as enum('pending', 'processing', 'complete', 'rejected');
|
||||
|
||||
create table orders(
|
||||
id serial primary key,
|
||||
status order_status default 'pending'::order_status
|
||||
)
|
11
tests/FIXTURES/enumdefaults/expected.sql
Normal file
11
tests/FIXTURES/enumdefaults/expected.sql
Normal file
@ -0,0 +1,11 @@
|
||||
alter table "public"."orders" alter column "status" drop default;
|
||||
|
||||
alter table "public"."orders" alter column "status" set data type varchar using "status"::varchar;
|
||||
|
||||
drop type "public"."order_status";
|
||||
|
||||
create type "public"."order_status" as enum ('pending', 'processing', 'complete', 'rejected');
|
||||
|
||||
alter table "public"."orders" alter column "status" set data type order_status using "status"::order_status;
|
||||
|
||||
alter table "public"."orders" alter column "status" set default 'pending'::order_status;
|
0
tests/FIXTURES/enumdefaults/expected2.sql
Normal file
0
tests/FIXTURES/enumdefaults/expected2.sql
Normal file
@ -84,6 +84,11 @@ def test_privs():
|
||||
do_fixture_test(FIXTURE_NAME, with_privileges=True)
|
||||
|
||||
|
||||
def test_enumdefaults():
|
||||
for FIXTURE_NAME in ["enumdefaults"]:
|
||||
do_fixture_test(FIXTURE_NAME, with_privileges=True)
|
||||
|
||||
|
||||
schemainspect_test_role = "schemainspect_test_role"
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user