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

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, 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

View File

@ -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()