feat: support virtual fields

This commit is contained in:
long2ice 2022-11-18 23:23:04 +08:00
parent 90943a473c
commit 52b50a2161
3 changed files with 27 additions and 21 deletions

View File

@ -2,6 +2,10 @@
## 0.7
### 0.7.2
- Support virtual fields.
### 0.7.1
- Fix syntax error with python3.8.10. (#265)

View File

@ -281,15 +281,17 @@ class Migrate:
# remove indexes
for index in old_indexes.difference(new_indexes):
cls._add_operator(cls._drop_index(model, index, False), upgrade, True)
old_data_fields = old_model_describe.get("data_fields")
new_data_fields = new_model_describe.get("data_fields")
old_data_fields = list(filter(lambda x: x.get('db_field_types') is not None,
old_model_describe.get("data_fields")))
new_data_fields = list(filter(lambda x: x.get('db_field_types') is not None,
new_model_describe.get("data_fields")))
old_data_fields_name = list(map(lambda x: x.get("name"), old_data_fields))
new_data_fields_name = list(map(lambda x: x.get("name"), new_data_fields))
# add fields or rename fields
for new_data_field_name in set(new_data_fields_name).difference(
set(old_data_fields_name)
set(old_data_fields_name)
):
new_data_field = next(
filter(lambda x: x.get("name") == new_data_field_name, new_data_fields)
@ -301,22 +303,22 @@ class Migrate:
if len(changes) == 2:
# rename field
if (
changes[0]
== (
changes[0]
== (
"change",
"name",
(old_data_field_name, new_data_field_name),
)
and changes[1]
== (
)
and changes[1]
== (
"change",
"db_column",
(
old_data_field.get("db_column"),
new_data_field.get("db_column"),
old_data_field.get("db_column"),
new_data_field.get("db_column"),
),
)
and old_data_field_name not in new_data_fields_name
)
and old_data_field_name not in new_data_fields_name
):
if upgrade:
is_rename = click.prompt(
@ -332,9 +334,9 @@ class Migrate:
cls._rename_old.append(old_data_field_name)
# only MySQL8+ has rename syntax
if (
cls.dialect == "mysql"
and cls._db_version
and cls._db_version.startswith("5.")
cls.dialect == "mysql"
and cls._db_version
and cls._db_version.startswith("5.")
):
cls._add_operator(
cls._change_field(
@ -365,11 +367,11 @@ class Migrate:
)
# remove fields
for old_data_field_name in set(old_data_fields_name).difference(
set(new_data_fields_name)
set(new_data_fields_name)
):
# don't remove field if is renamed
if (upgrade and old_data_field_name in cls._rename_old) or (
not upgrade and old_data_field_name in cls._rename_new
not upgrade and old_data_field_name in cls._rename_new
):
continue
old_data_field = next(
@ -401,7 +403,7 @@ class Migrate:
# add fk
for new_fk_field_name in set(new_fk_fields_name).difference(
set(old_fk_fields_name)
set(old_fk_fields_name)
):
fk_field = next(
filter(lambda x: x.get("name") == new_fk_field_name, new_fk_fields)
@ -416,7 +418,7 @@ class Migrate:
)
# drop fk
for old_fk_field_name in set(old_fk_fields_name).difference(
set(new_fk_fields_name)
set(new_fk_fields_name)
):
old_fk_field = next(
filter(lambda x: x.get("name") == old_fk_field_name, old_fk_fields)
@ -462,7 +464,7 @@ class Migrate:
continue
elif option == "default":
if not (
is_default_function(old_new[0]) or is_default_function(old_new[1])
is_default_function(old_new[0]) or is_default_function(old_new[1])
):
# change column default
cls._add_operator(

View File

@ -1,6 +1,6 @@
[tool.poetry]
name = "aerich"
version = "0.7.1"
version = "0.7.2"
description = "A database migrations tool for Tortoise ORM."
authors = ["long2ice <long2ice@gmail.com>"]
license = "Apache-2.0"