[REF-2658] Alembic should use batch mode for autogenerate (#3223)
This commit is contained in:
parent
b3c06bd139
commit
83371d51d3
@ -310,6 +310,7 @@ class Model(Base, sqlmodel.SQLModel):
|
|||||||
render_item=cls._alembic_render_item,
|
render_item=cls._alembic_render_item,
|
||||||
process_revision_directives=writer, # type: ignore
|
process_revision_directives=writer, # type: ignore
|
||||||
compare_type=False,
|
compare_type=False,
|
||||||
|
render_as_batch=True, # for sqlite compatibility
|
||||||
)
|
)
|
||||||
env.run_migrations()
|
env.run_migrations()
|
||||||
changes_detected = False
|
changes_detected = False
|
||||||
|
@ -96,18 +96,23 @@ def test_automigration(tmp_working_dir, monkeypatch):
|
|||||||
|
|
||||||
sqlmodel.SQLModel.metadata.clear()
|
sqlmodel.SQLModel.metadata.clear()
|
||||||
|
|
||||||
# Create column t2
|
# Create column t2, mark t1 as optional with default
|
||||||
class AlembicThing(Model, table=True): # type: ignore
|
class AlembicThing(Model, table=True): # type: ignore
|
||||||
t1: str
|
t1: Optional[str] = "default"
|
||||||
t2: str = "bar"
|
t2: str = "bar"
|
||||||
|
|
||||||
Model.migrate(autogenerate=True)
|
Model.migrate(autogenerate=True)
|
||||||
assert len(list(versions.glob("*.py"))) == 2
|
assert len(list(versions.glob("*.py"))) == 2
|
||||||
|
|
||||||
with reflex.model.session() as session:
|
with reflex.model.session() as session:
|
||||||
|
session.add(AlembicThing(t2="baz"))
|
||||||
|
session.commit()
|
||||||
result = session.exec(sqlmodel.select(AlembicThing)).all()
|
result = session.exec(sqlmodel.select(AlembicThing)).all()
|
||||||
assert len(result) == 1
|
assert len(result) == 2
|
||||||
|
assert result[0].t1 == "foo"
|
||||||
assert result[0].t2 == "bar"
|
assert result[0].t2 == "bar"
|
||||||
|
assert result[1].t1 == "default"
|
||||||
|
assert result[1].t2 == "baz"
|
||||||
|
|
||||||
sqlmodel.SQLModel.metadata.clear()
|
sqlmodel.SQLModel.metadata.clear()
|
||||||
|
|
||||||
@ -120,8 +125,9 @@ def test_automigration(tmp_working_dir, monkeypatch):
|
|||||||
|
|
||||||
with reflex.model.session() as session:
|
with reflex.model.session() as session:
|
||||||
result = session.exec(sqlmodel.select(AlembicThing)).all()
|
result = session.exec(sqlmodel.select(AlembicThing)).all()
|
||||||
assert len(result) == 1
|
assert len(result) == 2
|
||||||
assert result[0].t2 == "bar"
|
assert result[0].t2 == "bar"
|
||||||
|
assert result[1].t2 == "baz"
|
||||||
|
|
||||||
# Add table
|
# Add table
|
||||||
class AlembicSecond(Model, table=True): # type: ignore
|
class AlembicSecond(Model, table=True): # type: ignore
|
||||||
@ -158,8 +164,9 @@ def test_automigration(tmp_working_dir, monkeypatch):
|
|||||||
assert errctx.match(r"no such table: alembicsecond")
|
assert errctx.match(r"no such table: alembicsecond")
|
||||||
# first table should still exist
|
# first table should still exist
|
||||||
result = session.exec(sqlmodel.select(AlembicThing)).all()
|
result = session.exec(sqlmodel.select(AlembicThing)).all()
|
||||||
assert len(result) == 1
|
assert len(result) == 2
|
||||||
assert result[0].t2 == "bar"
|
assert result[0].t2 == "bar"
|
||||||
|
assert result[1].t2 == "baz"
|
||||||
|
|
||||||
sqlmodel.SQLModel.metadata.clear()
|
sqlmodel.SQLModel.metadata.clear()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user