diff --git a/CHANGELOG.md b/CHANGELOG.md index 5939cb0..ef2cef0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## 0.5 +### 0.5.3 + +- Fix postgre alter null. (#142) + ### 0.5.2 - Fix rename field on the field add. (#134) diff --git a/aerich/__init__.py b/aerich/__init__.py index 7225152..43a1e95 100644 --- a/aerich/__init__.py +++ b/aerich/__init__.py @@ -1 +1 @@ -__version__ = "0.5.2" +__version__ = "0.5.3" diff --git a/aerich/ddl/__init__.py b/aerich/ddl/__init__.py index 403bfc2..7e7740c 100644 --- a/aerich/ddl/__init__.py +++ b/aerich/ddl/__init__.py @@ -227,10 +227,10 @@ class BaseDDL: ) def alter_column_null(self, model: "Type[Model]", field_describe: dict): - raise NotImplementedError + return self.modify_column(model, field_describe) def set_comment(self, model: "Type[Model]", field_describe: dict): - raise NotImplementedError + return self.modify_column(model, field_describe) def rename_table(self, model: "Type[Model]", old_table_name: str, new_table_name: str): db_table = model._meta.db_table diff --git a/aerich/ddl/mysql/__init__.py b/aerich/ddl/mysql/__init__.py index 57e607a..0cce776 100644 --- a/aerich/ddl/mysql/__init__.py +++ b/aerich/ddl/mysql/__init__.py @@ -1,10 +1,6 @@ -from typing import Type - -from tortoise import Model from tortoise.backends.mysql.schema_generator import MySQLSchemaGenerator from aerich.ddl import BaseDDL -from aerich.exceptions import NotSupportError class MysqlDDL(BaseDDL): @@ -29,9 +25,3 @@ class MysqlDDL(BaseDDL): _M2M_TABLE_TEMPLATE = "CREATE TABLE `{table_name}` (`{backward_key}` {backward_type} NOT NULL REFERENCES `{backward_table}` (`{backward_field}`) ON DELETE CASCADE,`{forward_key}` {forward_type} NOT NULL REFERENCES `{forward_table}` (`{forward_field}`) ON DELETE CASCADE){extra}{comment}" _MODIFY_COLUMN_TEMPLATE = "ALTER TABLE `{table_name}` MODIFY COLUMN {column}" _RENAME_TABLE_TEMPLATE = "ALTER TABLE `{old_table_name}` RENAME TO `{new_table_name}`" - - def alter_column_null(self, model: "Type[Model]", field_describe: dict): - raise NotSupportError("Alter column null is unsupported in MySQL.") - - def set_comment(self, model: "Type[Model]", field_describe: dict): - raise NotSupportError("Alter column comment is unsupported in MySQL.") diff --git a/aerich/migrate.py b/aerich/migrate.py index eb06b5e..e8ec20d 100644 --- a/aerich/migrate.py +++ b/aerich/migrate.py @@ -399,6 +399,9 @@ class Migrate: elif option == "unique": # because indexed include it pass + elif option == "nullable": + # change nullable + cls._add_operator(cls._alter_null(model, new_data_field), upgrade) else: # modify column cls._add_operator( diff --git a/pyproject.toml b/pyproject.toml index 4916628..523c12d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "aerich" -version = "0.5.2" +version = "0.5.3" description = "A database migrations tool for Tortoise ORM." authors = ["long2ice "] license = "Apache-2.0" diff --git a/tests/test_migrate.py b/tests/test_migrate.py index 20ac113..71ac5bc 100644 --- a/tests/test_migrate.py +++ b/tests/test_migrate.py @@ -832,7 +832,7 @@ def test_migrate(mocker: MockerFixture): elif isinstance(Migrate.ddl, PostgresDDL): assert sorted(Migrate.upgrade_operators) == sorted( [ - 'ALTER TABLE "category" ALTER COLUMN "name" TYPE VARCHAR(200) USING "name"::VARCHAR(200)', + 'ALTER TABLE "category" ALTER COLUMN "name" DROP NOT NULL', 'ALTER TABLE "category" ALTER COLUMN "slug" TYPE VARCHAR(100) USING "slug"::VARCHAR(100)', 'ALTER TABLE "config" ADD "user_id" INT NOT NULL', 'ALTER TABLE "config" ADD CONSTRAINT "fk_config_user_17daa970" FOREIGN KEY ("user_id") REFERENCES "user" ("id") ON DELETE CASCADE', @@ -855,7 +855,7 @@ def test_migrate(mocker: MockerFixture): ) assert sorted(Migrate.downgrade_operators) == sorted( [ - 'ALTER TABLE "category" ALTER COLUMN "name" TYPE VARCHAR(200) USING "name"::VARCHAR(200)', + 'ALTER TABLE "category" ALTER COLUMN "name" SET NOT NULL', 'ALTER TABLE "category" ALTER COLUMN "slug" TYPE VARCHAR(200) USING "slug"::VARCHAR(200)', 'ALTER TABLE "user" ALTER COLUMN "password" TYPE VARCHAR(200) USING "password"::VARCHAR(200)', 'ALTER TABLE "config" DROP COLUMN "user_id"',