feat: support virtual fields
This commit is contained in:
parent
90943a473c
commit
52b50a2161
@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
## 0.7
|
## 0.7
|
||||||
|
|
||||||
|
### 0.7.2
|
||||||
|
|
||||||
|
- Support virtual fields.
|
||||||
|
|
||||||
### 0.7.1
|
### 0.7.1
|
||||||
|
|
||||||
- Fix syntax error with python3.8.10. (#265)
|
- Fix syntax error with python3.8.10. (#265)
|
||||||
|
@ -281,15 +281,17 @@ class Migrate:
|
|||||||
# remove indexes
|
# remove indexes
|
||||||
for index in old_indexes.difference(new_indexes):
|
for index in old_indexes.difference(new_indexes):
|
||||||
cls._add_operator(cls._drop_index(model, index, False), upgrade, True)
|
cls._add_operator(cls._drop_index(model, index, False), upgrade, True)
|
||||||
old_data_fields = old_model_describe.get("data_fields")
|
old_data_fields = list(filter(lambda x: x.get('db_field_types') is not None,
|
||||||
new_data_fields = new_model_describe.get("data_fields")
|
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))
|
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))
|
new_data_fields_name = list(map(lambda x: x.get("name"), new_data_fields))
|
||||||
|
|
||||||
# add fields or rename fields
|
# add fields or rename fields
|
||||||
for new_data_field_name in set(new_data_fields_name).difference(
|
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(
|
new_data_field = next(
|
||||||
filter(lambda x: x.get("name") == new_data_field_name, new_data_fields)
|
filter(lambda x: x.get("name") == new_data_field_name, new_data_fields)
|
||||||
@ -301,22 +303,22 @@ class Migrate:
|
|||||||
if len(changes) == 2:
|
if len(changes) == 2:
|
||||||
# rename field
|
# rename field
|
||||||
if (
|
if (
|
||||||
changes[0]
|
changes[0]
|
||||||
== (
|
== (
|
||||||
"change",
|
"change",
|
||||||
"name",
|
"name",
|
||||||
(old_data_field_name, new_data_field_name),
|
(old_data_field_name, new_data_field_name),
|
||||||
)
|
)
|
||||||
and changes[1]
|
and changes[1]
|
||||||
== (
|
== (
|
||||||
"change",
|
"change",
|
||||||
"db_column",
|
"db_column",
|
||||||
(
|
(
|
||||||
old_data_field.get("db_column"),
|
old_data_field.get("db_column"),
|
||||||
new_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:
|
if upgrade:
|
||||||
is_rename = click.prompt(
|
is_rename = click.prompt(
|
||||||
@ -332,9 +334,9 @@ class Migrate:
|
|||||||
cls._rename_old.append(old_data_field_name)
|
cls._rename_old.append(old_data_field_name)
|
||||||
# only MySQL8+ has rename syntax
|
# only MySQL8+ has rename syntax
|
||||||
if (
|
if (
|
||||||
cls.dialect == "mysql"
|
cls.dialect == "mysql"
|
||||||
and cls._db_version
|
and cls._db_version
|
||||||
and cls._db_version.startswith("5.")
|
and cls._db_version.startswith("5.")
|
||||||
):
|
):
|
||||||
cls._add_operator(
|
cls._add_operator(
|
||||||
cls._change_field(
|
cls._change_field(
|
||||||
@ -365,11 +367,11 @@ class Migrate:
|
|||||||
)
|
)
|
||||||
# remove fields
|
# remove fields
|
||||||
for old_data_field_name in set(old_data_fields_name).difference(
|
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
|
# don't remove field if is renamed
|
||||||
if (upgrade and old_data_field_name in cls._rename_old) or (
|
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
|
continue
|
||||||
old_data_field = next(
|
old_data_field = next(
|
||||||
@ -401,7 +403,7 @@ class Migrate:
|
|||||||
|
|
||||||
# add fk
|
# add fk
|
||||||
for new_fk_field_name in set(new_fk_fields_name).difference(
|
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(
|
fk_field = next(
|
||||||
filter(lambda x: x.get("name") == new_fk_field_name, new_fk_fields)
|
filter(lambda x: x.get("name") == new_fk_field_name, new_fk_fields)
|
||||||
@ -416,7 +418,7 @@ class Migrate:
|
|||||||
)
|
)
|
||||||
# drop fk
|
# drop fk
|
||||||
for old_fk_field_name in set(old_fk_fields_name).difference(
|
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(
|
old_fk_field = next(
|
||||||
filter(lambda x: x.get("name") == old_fk_field_name, old_fk_fields)
|
filter(lambda x: x.get("name") == old_fk_field_name, old_fk_fields)
|
||||||
@ -462,7 +464,7 @@ class Migrate:
|
|||||||
continue
|
continue
|
||||||
elif option == "default":
|
elif option == "default":
|
||||||
if not (
|
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
|
# change column default
|
||||||
cls._add_operator(
|
cls._add_operator(
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "aerich"
|
name = "aerich"
|
||||||
version = "0.7.1"
|
version = "0.7.2"
|
||||||
description = "A database migrations tool for Tortoise ORM."
|
description = "A database migrations tool for Tortoise ORM."
|
||||||
authors = ["long2ice <long2ice@gmail.com>"]
|
authors = ["long2ice <long2ice@gmail.com>"]
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user