feat: Maintain the order of table fields

This commit is contained in:
junjun
2025-08-08 11:38:28 +08:00
parent 3f0c463274
commit dead2f1a85
4 changed files with 34 additions and 3 deletions
@@ -0,0 +1,29 @@
"""034_field_sort
Revision ID: e8b470d2b150
Revises: 3cb5d6a54f2e
Create Date: 2025-08-08 11:33:33.227564
"""
from alembic import op
import sqlalchemy as sa
import sqlmodel.sql.sqltypes
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision = 'e8b470d2b150'
down_revision = '3cb5d6a54f2e'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('core_field', sa.Column('field_index', sa.BigInteger(), nullable=True))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('core_field', 'field_index')
# ### end Alembic commands ###
+3 -2
View File
@@ -204,7 +204,7 @@ def sync_table(session: SessionDep, ds: CoreDatasource, tables: List[CoreTable])
def sync_fields(session: SessionDep, ds: CoreDatasource, table: CoreTable, fields: List[ColumnSchema]):
id_list = []
for item in fields:
for index, item in enumerate(fields):
statement = select(CoreField).where(
and_(CoreField.table_id == table.id, CoreField.field_name == item.fieldName))
record = session.exec(statement).first()
@@ -213,12 +213,13 @@ def sync_fields(session: SessionDep, ds: CoreDatasource, table: CoreTable, field
id_list.append(record.id)
record.field_comment = item.fieldComment
record.field_index = index
session.add(record)
session.commit()
else:
field = CoreField(ds_id=ds.id, table_id=table.id, checked=True, field_name=item.fieldName,
field_type=item.fieldType, field_comment=item.fieldComment,
custom_comment=item.fieldComment)
custom_comment=item.fieldComment, field_index=index)
session.add(field)
session.flush()
session.refresh(field)
+1 -1
View File
@@ -8,7 +8,7 @@ def delete_field_by_ds_id(session: SessionDep, id: int):
def get_fields_by_table_id(session: SessionDep, id: int):
return session.query(CoreField).filter(CoreField.table_id == id).all()
return session.query(CoreField).filter(CoreField.table_id == id).order_by(CoreField.field_index.asc()).all()
def update_field(session: SessionDep, item: CoreField):
@@ -41,6 +41,7 @@ class CoreField(SQLModel, table=True):
field_type: str = Field(max_length=128, nullable=True)
field_comment: str = Field(sa_column=Column(Text))
custom_comment: str = Field(sa_column=Column(Text))
field_index: int = Field(sa_column=Column(BigInteger()))
# datasource create obj