[REF-2658] Alembic should use batch mode for autogenerate ()

This commit is contained in:
Masen Furer 2024-05-06 18:34:55 -07:00 committed by GitHub
parent b3c06bd139
commit 83371d51d3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 5 deletions

View File

@ -310,6 +310,7 @@ class Model(Base, sqlmodel.SQLModel):
render_item=cls._alembic_render_item,
process_revision_directives=writer, # type: ignore
compare_type=False,
render_as_batch=True, # for sqlite compatibility
)
env.run_migrations()
changes_detected = False

View File

@ -96,18 +96,23 @@ def test_automigration(tmp_working_dir, monkeypatch):
sqlmodel.SQLModel.metadata.clear()
# Create column t2
# Create column t2, mark t1 as optional with default
class AlembicThing(Model, table=True): # type: ignore
t1: str
t1: Optional[str] = "default"
t2: str = "bar"
Model.migrate(autogenerate=True)
assert len(list(versions.glob("*.py"))) == 2
with reflex.model.session() as session:
session.add(AlembicThing(t2="baz"))
session.commit()
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[1].t1 == "default"
assert result[1].t2 == "baz"
sqlmodel.SQLModel.metadata.clear()
@ -120,8 +125,9 @@ def test_automigration(tmp_working_dir, monkeypatch):
with reflex.model.session() as session:
result = session.exec(sqlmodel.select(AlembicThing)).all()
assert len(result) == 1
assert len(result) == 2
assert result[0].t2 == "bar"
assert result[1].t2 == "baz"
# Add table
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")
# first table should still exist
result = session.exec(sqlmodel.select(AlembicThing)).all()
assert len(result) == 1
assert len(result) == 2
assert result[0].t2 == "bar"
assert result[1].t2 == "baz"
sqlmodel.SQLModel.metadata.clear()