From b1b9cc145411924927ec78224dada9ab345f7925 Mon Sep 17 00:00:00 2001 From: KDH Date: Tue, 12 Oct 2021 11:23:09 +0900 Subject: [PATCH 1/8] Fix M2M table template --- aerich/ddl/__init__.py | 7 ++++++- aerich/ddl/mysql/__init__.py | 7 ++++++- tests/test_migrate.py | 4 ++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/aerich/ddl/__init__.py b/aerich/ddl/__init__.py index 2818955..f4686ec 100644 --- a/aerich/ddl/__init__.py +++ b/aerich/ddl/__init__.py @@ -23,7 +23,12 @@ class BaseDDL: _DROP_INDEX_TEMPLATE = 'ALTER TABLE "{table_name}" DROP INDEX "{index_name}"' _ADD_FK_TEMPLATE = 'ALTER TABLE "{table_name}" ADD CONSTRAINT "{fk_name}" FOREIGN KEY ("{db_column}") REFERENCES "{table}" ("{field}") ON DELETE {on_delete}' _DROP_FK_TEMPLATE = 'ALTER TABLE "{table_name}" DROP FOREIGN KEY "{fk_name}"' - _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 {on_delete}){extra}{comment}' + _M2M_TABLE_TEMPLATE = ( + 'CREATE TABLE "{table_name}" (' + ' "{backward_key}" {backward_type} NOT NULL REFERENCES "{backward_table}" ("{backward_field}") ON DELETE CASCADE,\n' + ' "{forward_key}" {forward_type} NOT NULL REFERENCES "{forward_table}" ("{forward_field}") ON DELETE {on_delete}\n' + "){extra}{comment}" + ) _MODIFY_COLUMN_TEMPLATE = 'ALTER TABLE "{table_name}" MODIFY COLUMN {column}' _CHANGE_COLUMN_TEMPLATE = ( 'ALTER TABLE "{table_name}" CHANGE {old_column_name} {new_column_name} {new_column_type}' diff --git a/aerich/ddl/mysql/__init__.py b/aerich/ddl/mysql/__init__.py index 0cce776..0c603ec 100644 --- a/aerich/ddl/mysql/__init__.py +++ b/aerich/ddl/mysql/__init__.py @@ -22,6 +22,11 @@ class MysqlDDL(BaseDDL): _DROP_INDEX_TEMPLATE = "ALTER TABLE `{table_name}` DROP INDEX `{index_name}`" _ADD_FK_TEMPLATE = "ALTER TABLE `{table_name}` ADD CONSTRAINT `{fk_name}` FOREIGN KEY (`{db_column}`) REFERENCES `{table}` (`{field}`) ON DELETE {on_delete}" _DROP_FK_TEMPLATE = "ALTER TABLE `{table_name}` DROP FOREIGN KEY `{fk_name}`" - _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}" + _M2M_TABLE_TEMPLATE = ( + "CREATE TABLE `{table_name}` (\n" + " `{backward_key}` {backward_type} NOT NULL REFERENCES `{backward_table}` (`{backward_field}`) ON DELETE CASCADE,\n" + " `{forward_key}` {forward_type} NOT NULL REFERENCES `{forward_table}` (`{forward_field}`) ON DELETE CASCADE\n" + "){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}`" diff --git a/tests/test_migrate.py b/tests/test_migrate.py index 76b7c3e..c666eae 100644 --- a/tests/test_migrate.py +++ b/tests/test_migrate.py @@ -807,7 +807,7 @@ def test_migrate(mocker: MockerFixture): "ALTER TABLE `user` MODIFY COLUMN `password` VARCHAR(100) NOT NULL", "CREATE TABLE IF NOT EXISTS `newmodel` (\n `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,\n `name` VARCHAR(50) NOT NULL\n) CHARACTER SET utf8mb4;", "ALTER TABLE `user` ADD UNIQUE INDEX `uid_user_usernam_9987ab` (`username`)", - "CREATE TABLE `email_user` (`email_id` INT NOT NULL REFERENCES `email` (`email_id`) ON DELETE CASCADE,`user_id` INT NOT NULL REFERENCES `user` (`id`) ON DELETE CASCADE) CHARACTER SET utf8mb4", + "CREATE TABLE `email_user` (\n `email_id` INT NOT NULL REFERENCES `email` (`email_id`) ON DELETE CASCADE,\n `user_id` INT NOT NULL REFERENCES `user` (`id`) ON DELETE CASCADE\n) CHARACTER SET utf8mb4", ] ) @@ -853,7 +853,7 @@ def test_migrate(mocker: MockerFixture): 'ALTER TABLE "user" DROP COLUMN "avatar"', 'CREATE INDEX "idx_product_name_869427" ON "product" ("name", "type_db_alias")', 'CREATE INDEX "idx_email_email_4a1a33" ON "email" ("email")', - 'CREATE TABLE "email_user" ("email_id" INT NOT NULL REFERENCES "email" ("email_id") ON DELETE CASCADE,"user_id" INT NOT NULL REFERENCES "user" ("id") ON DELETE CASCADE)', + 'CREATE TABLE "email_user" (\n "email_id" INT NOT NULL REFERENCES "email" ("email_id") ON DELETE CASCADE,\n "user_id" INT NOT NULL REFERENCES "user" ("id") ON DELETE CASCADE\n)', 'CREATE TABLE IF NOT EXISTS "newmodel" (\n "id" SERIAL NOT NULL PRIMARY KEY,\n "name" VARCHAR(50) NOT NULL\n);\nCOMMENT ON COLUMN "config"."user_id" IS \'User\';', 'CREATE UNIQUE INDEX "uid_product_name_869427" ON "product" ("name", "type_db_alias")', 'CREATE UNIQUE INDEX "uid_user_usernam_9987ab" ON "user" ("username")', From 7a826df43fa887cdfdbe0092c03da2e1d15220c5 Mon Sep 17 00:00:00 2001 From: KDH Date: Tue, 12 Oct 2021 11:23:53 +0900 Subject: [PATCH 2/8] Fix duplicated semicolon in table creation DDL --- aerich/utils.py | 35 ++++++++++++++++------------------- tests/test_utils.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 19 deletions(-) create mode 100644 tests/test_utils.py diff --git a/aerich/utils.py b/aerich/utils.py index c8bffdc..4e26719 100644 --- a/aerich/utils.py +++ b/aerich/utils.py @@ -110,25 +110,22 @@ def write_version_file(version_file: Path, content: Dict): :param content: :return: """ - with open(version_file, "w", encoding="utf-8") as f: - f.write(_UPGRADE) - upgrade = content.get("upgrade") - if len(upgrade) > 1: - f.write(";\n".join(upgrade)) - if not upgrade[-1].endswith(";"): - f.write(";\n") - else: - f.write(f"{upgrade[0]}") - if not upgrade[0].endswith(";"): - f.write(";") - f.write("\n") - downgrade = content.get("downgrade") - if downgrade: - f.write(_DOWNGRADE) - if len(downgrade) > 1: - f.write(";\n".join(downgrade) + ";\n") - else: - f.write(f"{downgrade[0]};\n") + + def append_ddl(ddl: str): + if not ddl.endswith(";"): + ddl += ";" + ddl += "\n" + data.append(ddl) + + data = [_UPGRADE] + for upgrade_ddl in content.get("upgrade"): + append_ddl(upgrade_ddl) + downgrade = content.get("downgrade") + if downgrade: + data.append(_DOWNGRADE) + for downgrade_ddl in downgrade: + append_ddl(downgrade_ddl) + version_file.write_text("".join(data)) def get_models_describe(app: str) -> Dict: diff --git a/tests/test_utils.py b/tests/test_utils.py new file mode 100644 index 0000000..fa1f02f --- /dev/null +++ b/tests/test_utils.py @@ -0,0 +1,34 @@ +import tempfile +from pathlib import Path + +from aerich.utils import write_version_file + + +def test_write_version_file(): + content = { + "upgrade": [ + "CREATE TABLE IF NOT EXISTS `newmodel` (\n `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,\n `name` VARCHAR(50) NOT NULL\n) CHARACTER SET utf8mb4;", + "CREATE TABLE `email_user` (\n `email_id` INT NOT NULL REFERENCES `email` (`email_id`) ON DELETE CASCADE,\n `user_id` INT NOT NULL REFERENCES `user` (`id`) ON DELETE CASCADE\n) CHARACTER SET utf8mb4", + ], + "downgrade": [ + "DROP TABLE IF EXISTS `email_user`", + "DROP TABLE IF EXISTS `newmodel`", + ], + } + with tempfile.NamedTemporaryFile(mode="r", delete=True) as f: + write_version_file(Path(f.name), content) + result = f.read() + assert result == ( + "-- upgrade --\n" + "CREATE TABLE IF NOT EXISTS `newmodel` (\n" + " `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,\n" + " `name` VARCHAR(50) NOT NULL\n" + ") CHARACTER SET utf8mb4;\n" + "CREATE TABLE `email_user` (\n" + " `email_id` INT NOT NULL REFERENCES `email` (`email_id`) ON DELETE CASCADE,\n" + " `user_id` INT NOT NULL REFERENCES `user` (`id`) ON DELETE CASCADE\n" + ") CHARACTER SET utf8mb4;\n" + "-- downgrade --\n" + "DROP TABLE IF EXISTS `email_user`;\n" + "DROP TABLE IF EXISTS `newmodel`;\n" + ) From 40c7ef7fd604be165b3221102fca6c8b166621d2 Mon Sep 17 00:00:00 2001 From: Yasser Tahiri Date: Thu, 21 Oct 2021 15:43:18 +0100 Subject: [PATCH 3/8] Merge repeated `if` statements into single `if` --- aerich/__init__.py | 5 +---- aerich/ddl/__init__.py | 2 +- aerich/utils.py | 3 +-- tests/test_ddl.py | 10 ++++------ 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/aerich/__init__.py b/aerich/__init__.py index 7641062..f9f4e26 100644 --- a/aerich/__init__.py +++ b/aerich/__init__.py @@ -100,11 +100,8 @@ class Command: return ret async def history(self): - ret = [] versions = Migrate.get_all_version_files() - for version in versions: - ret.append(version) - return ret + return [version for version in versions] async def inspectdb(self, tables: List[str]): connection = get_app_connection(self.tortoise_config, self.app) diff --git a/aerich/ddl/__init__.py b/aerich/ddl/__init__.py index 2818955..ed94ffc 100644 --- a/aerich/ddl/__init__.py +++ b/aerich/ddl/__init__.py @@ -184,7 +184,7 @@ class BaseDDL: "idx" if not unique else "uid", model, field_names ), table_name=model._meta.db_table, - column_names=", ".join([self.schema_generator.quote(f) for f in field_names]), + column_names=", ".join(self.schema_generator.quote(f) for f in field_names), ) def drop_index(self, model: "Type[Model]", field_names: List[str], unique=False): diff --git a/aerich/utils.py b/aerich/utils.py index c8bffdc..7a930dd 100644 --- a/aerich/utils.py +++ b/aerich/utils.py @@ -96,11 +96,10 @@ def get_version_content_from_file(version_file: Union[str, Path]) -> Dict: second = len(content) - 1 upgrade_content = content[first + len(_UPGRADE) : second].strip() # noqa:E203 downgrade_content = content[second + len(_DOWNGRADE) :].strip() # noqa:E203 - ret = { + return { "upgrade": list(filter(lambda x: x or False, upgrade_content.split(";\n"))), "downgrade": list(filter(lambda x: x or False, downgrade_content.split(";\n"))), } - return ret def write_version_file(version_file: Path, content: Dict): diff --git a/tests/test_ddl.py b/tests/test_ddl.py index 9227161..c710b33 100644 --- a/tests/test_ddl.py +++ b/tests/test_ddl.py @@ -72,18 +72,16 @@ def test_modify_column(): ret1 = Migrate.ddl.modify_column(User, User._meta.fields_map.get("is_active").describe(False)) if isinstance(Migrate.ddl, MysqlDDL): assert ret0 == "ALTER TABLE `category` MODIFY COLUMN `name` VARCHAR(200)" + assert ( + ret1 + == "ALTER TABLE `user` MODIFY COLUMN `is_active` BOOL NOT NULL COMMENT 'Is Active' DEFAULT 1" + ) elif isinstance(Migrate.ddl, PostgresDDL): assert ( ret0 == 'ALTER TABLE "category" ALTER COLUMN "name" TYPE VARCHAR(200) USING "name"::VARCHAR(200)' ) - if isinstance(Migrate.ddl, MysqlDDL): - assert ( - ret1 - == "ALTER TABLE `user` MODIFY COLUMN `is_active` BOOL NOT NULL COMMENT 'Is Active' DEFAULT 1" - ) - elif isinstance(Migrate.ddl, PostgresDDL): assert ( ret1 == 'ALTER TABLE "user" ALTER COLUMN "is_active" TYPE BOOL USING "is_active"::BOOL' ) From 7a109f3c79a431adece72170d79e30084045a5e6 Mon Sep 17 00:00:00 2001 From: Waket Zheng Date: Mon, 12 Sep 2022 00:57:46 +0800 Subject: [PATCH 4/8] refactor: use pathlib to read and write text --- aerich/cli.py | 17 +++++++------ aerich/utils.py | 63 ++++++++++++++++++++++++------------------------- 2 files changed, 39 insertions(+), 41 deletions(-) diff --git a/aerich/cli.py b/aerich/cli.py index 41dc65b..564dfca 100644 --- a/aerich/cli.py +++ b/aerich/cli.py @@ -26,7 +26,7 @@ def coro(f): def wrapper(*args, **kwargs): loop = asyncio.get_event_loop() - # Close db connections at the end of all all but the cli group function + # Close db connections at the end of all but the cli group function try: loop.run_until_complete(f(*args, **kwargs)) finally: @@ -54,10 +54,10 @@ async def cli(ctx: Context, config, app): invoked_subcommand = ctx.invoked_subcommand if invoked_subcommand != "init": - if not Path(config).exists(): + config_path = Path(config) + if not config_path.exists(): raise UsageError("You must exec init first", ctx=ctx) - with open(config, "r") as f: - content = f.read() + content = config_path.read_text() doc = tomlkit.parse(content) try: tool = doc["tool"]["aerich"] @@ -192,9 +192,9 @@ async def init(ctx: Context, tortoise_orm, location, src_folder): # check that we can find the configuration, if not we can fail before the config file gets created add_src_path(src_folder) get_tortoise_config(ctx, tortoise_orm) - if Path(config_file).exists(): - with open(config_file, "r") as f: - content = f.read() + config_path = Path(config_file) + if config_path.exists(): + content = config_path.read_text() doc = tomlkit.parse(content) else: doc = tomlkit.parse("[tool.aerich]") @@ -204,8 +204,7 @@ async def init(ctx: Context, tortoise_orm, location, src_folder): table["src_folder"] = src_folder doc["tool"]["aerich"] = table - with open(config_file, "w") as f: - f.write(tomlkit.dumps(doc)) + config_path.write_text(tomlkit.dumps(doc)) Path(location).mkdir(parents=True, exist_ok=True) diff --git a/aerich/utils.py b/aerich/utils.py index c8bffdc..b51264b 100644 --- a/aerich/utils.py +++ b/aerich/utils.py @@ -87,20 +87,19 @@ def get_version_content_from_file(version_file: Union[str, Path]) -> Dict: :param version_file: :return: """ - with open(version_file, "r", encoding="utf-8") as f: - content = f.read() - first = content.index(_UPGRADE) - try: - second = content.index(_DOWNGRADE) - except ValueError: - second = len(content) - 1 - upgrade_content = content[first + len(_UPGRADE) : second].strip() # noqa:E203 - downgrade_content = content[second + len(_DOWNGRADE) :].strip() # noqa:E203 - ret = { - "upgrade": list(filter(lambda x: x or False, upgrade_content.split(";\n"))), - "downgrade": list(filter(lambda x: x or False, downgrade_content.split(";\n"))), - } - return ret + content = Path(version_file).read_text(encoding="utf-8") + first = content.index(_UPGRADE) + try: + second = content.index(_DOWNGRADE) + except ValueError: + second = len(content) - 1 + upgrade_content = content[first + len(_UPGRADE) : second].strip() # noqa:E203 + downgrade_content = content[second + len(_DOWNGRADE) :].strip() # noqa:E203 + ret = { + "upgrade": list(filter(lambda x: x or False, upgrade_content.split(";\n"))), + "downgrade": list(filter(lambda x: x or False, downgrade_content.split(";\n"))), + } + return ret def write_version_file(version_file: Path, content: Dict): @@ -110,25 +109,25 @@ def write_version_file(version_file: Path, content: Dict): :param content: :return: """ - with open(version_file, "w", encoding="utf-8") as f: - f.write(_UPGRADE) - upgrade = content.get("upgrade") - if len(upgrade) > 1: - f.write(";\n".join(upgrade)) - if not upgrade[-1].endswith(";"): - f.write(";\n") + text = _UPGRADE + upgrade = content.get("upgrade") + if len(upgrade) > 1: + text += ";\n".join(upgrade) + if not upgrade[-1].endswith(";"): + text += ";\n" + else: + text += f"{upgrade[0]}" + if not upgrade[0].endswith(";"): + text += ";" + text += "\n" + downgrade = content.get("downgrade") + if downgrade: + text += _DOWNGRADE + if len(downgrade) > 1: + text += ";\n".join(downgrade) + ";\n" else: - f.write(f"{upgrade[0]}") - if not upgrade[0].endswith(";"): - f.write(";") - f.write("\n") - downgrade = content.get("downgrade") - if downgrade: - f.write(_DOWNGRADE) - if len(downgrade) > 1: - f.write(";\n".join(downgrade) + ";\n") - else: - f.write(f"{downgrade[0]};\n") + text += f"{downgrade[0]};\n" + version_file.write_text(text, encoding="utf-8") def get_models_describe(app: str) -> Dict: From 1a0371e9772d30cc272aa4be059362c9f3d3837d Mon Sep 17 00:00:00 2001 From: Yasser Tahiri Date: Thu, 15 Sep 2022 23:19:18 +0100 Subject: [PATCH 5/8] Update aerich/utils.py Co-authored-by: KDH --- aerich/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aerich/utils.py b/aerich/utils.py index 7a930dd..eb86108 100644 --- a/aerich/utils.py +++ b/aerich/utils.py @@ -97,8 +97,8 @@ def get_version_content_from_file(version_file: Union[str, Path]) -> Dict: upgrade_content = content[first + len(_UPGRADE) : second].strip() # noqa:E203 downgrade_content = content[second + len(_DOWNGRADE) :].strip() # noqa:E203 return { - "upgrade": list(filter(lambda x: x or False, upgrade_content.split(";\n"))), - "downgrade": list(filter(lambda x: x or False, downgrade_content.split(";\n"))), + "upgrade": [line for line in upgrade_content.split(";\n") if line], + "downgrade": [line for line in downgrade_content.split(";\n") if line], } From 1f0a6dfb50c92cf1adf9fd73533347dc61396365 Mon Sep 17 00:00:00 2001 From: KDH Date: Fri, 16 Sep 2022 09:58:04 +0900 Subject: [PATCH 6/8] Fix typo --- tests/test_migrate.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/test_migrate.py b/tests/test_migrate.py index 9a92271..a87663c 100644 --- a/tests/test_migrate.py +++ b/tests/test_migrate.py @@ -802,7 +802,7 @@ def test_migrate(mocker: MockerFixture): Migrate.diff_models(models_describe, old_models_describe, False) Migrate._merge_operators() if isinstance(Migrate.ddl, MysqlDDL): - expected_upgrade_operators = set( + expected_upgrade_operators = { "ALTER TABLE `category` MODIFY COLUMN `name` VARCHAR(200)", "ALTER TABLE `category` MODIFY COLUMN `slug` VARCHAR(100) NOT NULL", "ALTER TABLE `config` ADD `user_id` INT NOT NULL COMMENT 'User'", @@ -834,8 +834,8 @@ def test_migrate(mocker: MockerFixture): "ALTER TABLE `category` MODIFY COLUMN `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)", "ALTER TABLE `product` MODIFY COLUMN `body` LONGTEXT NOT NULL", "ALTER TABLE `email` MODIFY COLUMN `is_primary` BOOL NOT NULL DEFAULT 0", - ) - expected_downgrade_operators = set( + } + expected_downgrade_operators = { "ALTER TABLE `category` MODIFY COLUMN `name` VARCHAR(200) NOT NULL", "ALTER TABLE `category` MODIFY COLUMN `slug` VARCHAR(200) NOT NULL", "ALTER TABLE `config` DROP COLUMN `user_id`", @@ -866,7 +866,7 @@ def test_migrate(mocker: MockerFixture): "ALTER TABLE `user` MODIFY COLUMN `longitude` DECIMAL(12,9) NOT NULL", "ALTER TABLE `product` MODIFY COLUMN `body` LONGTEXT NOT NULL", "ALTER TABLE `email` MODIFY COLUMN `is_primary` BOOL NOT NULL DEFAULT 0", - ) + } assert not set(Migrate.upgrade_operators).symmetric_difference(expected_upgrade_operators) assert not set(Migrate.downgrade_operators).symmetric_difference( @@ -874,7 +874,7 @@ def test_migrate(mocker: MockerFixture): ) elif isinstance(Migrate.ddl, PostgresDDL): - expected_upgrade_operators = set( + expected_upgrade_operators = { 'ALTER TABLE "category" ALTER COLUMN "name" DROP NOT NULL', 'ALTER TABLE "category" ALTER COLUMN "slug" TYPE VARCHAR(100) USING "slug"::VARCHAR(100)', 'ALTER TABLE "category" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', @@ -905,8 +905,8 @@ def test_migrate(mocker: MockerFixture): 'CREATE TABLE IF NOT EXISTS "newmodel" (\n "id" SERIAL NOT NULL PRIMARY KEY,\n "name" VARCHAR(50) NOT NULL\n);\nCOMMENT ON COLUMN "config"."user_id" IS \'User\';', 'CREATE UNIQUE INDEX "uid_product_name_869427" ON "product" ("name", "type_db_alias")', 'CREATE UNIQUE INDEX "uid_user_usernam_9987ab" ON "user" ("username")', - ) - expected_downgrade_operators = set( + } + expected_downgrade_operators = { 'ALTER TABLE "category" ALTER COLUMN "name" SET NOT NULL', 'ALTER TABLE "category" ALTER COLUMN "slug" TYPE VARCHAR(200) USING "slug"::VARCHAR(200)', 'ALTER TABLE "category" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', @@ -937,7 +937,7 @@ def test_migrate(mocker: MockerFixture): 'DROP INDEX "uid_product_name_869427"', 'DROP TABLE IF EXISTS "email_user"', 'DROP TABLE IF EXISTS "newmodel"', - ) + } assert not set(Migrate.upgrade_operators).symmetric_difference(expected_upgrade_operators) assert not set(Migrate.downgrade_operators).symmetric_difference( expected_downgrade_operators From 7b472d7a8442dec3fc0e9ed5362baf5d73a11fd1 Mon Sep 17 00:00:00 2001 From: KDH Date: Fri, 16 Sep 2022 10:08:34 +0900 Subject: [PATCH 7/8] Fix testcase --- tests/test_migrate.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_migrate.py b/tests/test_migrate.py index a87663c..a3ccbb8 100644 --- a/tests/test_migrate.py +++ b/tests/test_migrate.py @@ -811,7 +811,6 @@ def test_migrate(mocker: MockerFixture): "ALTER TABLE `config` MODIFY COLUMN `value` JSON NOT NULL", "ALTER TABLE `email` ADD `address` VARCHAR(200) NOT NULL", "ALTER TABLE `email` DROP COLUMN `user_id`", - "CREATE TABLE `email_user` (`email_id` INT NOT NULL REFERENCES `email` (`email_id`) ON DELETE CASCADE,`user_id` INT NOT NULL REFERENCES `user` (`id`) ON DELETE CASCADE) CHARACTER SET utf8mb4", "ALTER TABLE `configs` RENAME TO `config`", "ALTER TABLE `product` RENAME COLUMN `image` TO `pic`", "ALTER TABLE `email` RENAME COLUMN `id` TO `email_id`", From bef45941f2f2a0001c4858633062260e0de6c86d Mon Sep 17 00:00:00 2001 From: KDH Date: Fri, 16 Sep 2022 10:26:21 +0900 Subject: [PATCH 8/8] Fix testcase --- aerich/ddl/__init__.py | 6 +++--- aerich/ddl/mysql/__init__.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/aerich/ddl/__init__.py b/aerich/ddl/__init__.py index 7767c31..d8a1595 100644 --- a/aerich/ddl/__init__.py +++ b/aerich/ddl/__init__.py @@ -24,9 +24,9 @@ class BaseDDL: _ADD_FK_TEMPLATE = 'ALTER TABLE "{table_name}" ADD CONSTRAINT "{fk_name}" FOREIGN KEY ("{db_column}") REFERENCES "{table}" ("{field}") ON DELETE {on_delete}' _DROP_FK_TEMPLATE = 'ALTER TABLE "{table_name}" DROP FOREIGN KEY "{fk_name}"' _M2M_TABLE_TEMPLATE = ( - 'CREATE TABLE "{table_name}" (' - ' "{backward_key}" {backward_type} NOT NULL REFERENCES "{backward_table}" ("{backward_field}") ON DELETE CASCADE,\n' - ' "{forward_key}" {forward_type} NOT NULL REFERENCES "{forward_table}" ("{forward_field}") ON DELETE {on_delete}\n' + 'CREATE TABLE "{table_name}" (\n' + ' "{backward_key}" {backward_type} NOT NULL REFERENCES "{backward_table}" ("{backward_field}") ON DELETE CASCADE,\n' + ' "{forward_key}" {forward_type} NOT NULL REFERENCES "{forward_table}" ("{forward_field}") ON DELETE {on_delete}\n' "){extra}{comment}" ) _MODIFY_COLUMN_TEMPLATE = 'ALTER TABLE "{table_name}" MODIFY COLUMN {column}' diff --git a/aerich/ddl/mysql/__init__.py b/aerich/ddl/mysql/__init__.py index 0c603ec..2eea288 100644 --- a/aerich/ddl/mysql/__init__.py +++ b/aerich/ddl/mysql/__init__.py @@ -24,8 +24,8 @@ class MysqlDDL(BaseDDL): _DROP_FK_TEMPLATE = "ALTER TABLE `{table_name}` DROP FOREIGN KEY `{fk_name}`" _M2M_TABLE_TEMPLATE = ( "CREATE TABLE `{table_name}` (\n" - " `{backward_key}` {backward_type} NOT NULL REFERENCES `{backward_table}` (`{backward_field}`) ON DELETE CASCADE,\n" - " `{forward_key}` {forward_type} NOT NULL REFERENCES `{forward_table}` (`{forward_field}`) ON DELETE CASCADE\n" + " `{backward_key}` {backward_type} NOT NULL REFERENCES `{backward_table}` (`{backward_field}`) ON DELETE CASCADE,\n" + " `{forward_key}` {forward_type} NOT NULL REFERENCES `{forward_table}` (`{forward_field}`) ON DELETE CASCADE\n" "){extra}{comment}" ) _MODIFY_COLUMN_TEMPLATE = "ALTER TABLE `{table_name}` MODIFY COLUMN {column}"