diff --git a/backend/alembic/versions/034_field_sort.py b/backend/alembic/versions/034_field_sort.py new file mode 100644 index 00000000..de98161e --- /dev/null +++ b/backend/alembic/versions/034_field_sort.py @@ -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 ### diff --git a/backend/apps/datasource/crud/datasource.py b/backend/apps/datasource/crud/datasource.py index 3d6dc735..6293bca3 100644 --- a/backend/apps/datasource/crud/datasource.py +++ b/backend/apps/datasource/crud/datasource.py @@ -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) diff --git a/backend/apps/datasource/crud/field.py b/backend/apps/datasource/crud/field.py index 2b478ff5..d7a2de7c 100644 --- a/backend/apps/datasource/crud/field.py +++ b/backend/apps/datasource/crud/field.py @@ -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): diff --git a/backend/apps/datasource/models/datasource.py b/backend/apps/datasource/models/datasource.py index 1f810e9e..6496a857 100644 --- a/backend/apps/datasource/models/datasource.py +++ b/backend/apps/datasource/models/datasource.py @@ -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