Skip to content

Commit dead2f1

Browse files
committed
feat: Maintain the order of table fields
1 parent 3f0c463 commit dead2f1

File tree

4 files changed

+34
-3
lines changed

4 files changed

+34
-3
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
"""034_field_sort
2+
3+
Revision ID: e8b470d2b150
4+
Revises: 3cb5d6a54f2e
5+
Create Date: 2025-08-08 11:33:33.227564
6+
7+
"""
8+
from alembic import op
9+
import sqlalchemy as sa
10+
import sqlmodel.sql.sqltypes
11+
from sqlalchemy.dialects import postgresql
12+
13+
# revision identifiers, used by Alembic.
14+
revision = 'e8b470d2b150'
15+
down_revision = '3cb5d6a54f2e'
16+
branch_labels = None
17+
depends_on = None
18+
19+
20+
def upgrade():
21+
# ### commands auto generated by Alembic - please adjust! ###
22+
op.add_column('core_field', sa.Column('field_index', sa.BigInteger(), nullable=True))
23+
# ### end Alembic commands ###
24+
25+
26+
def downgrade():
27+
# ### commands auto generated by Alembic - please adjust! ###
28+
op.drop_column('core_field', 'field_index')
29+
# ### end Alembic commands ###

backend/apps/datasource/crud/datasource.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ def sync_table(session: SessionDep, ds: CoreDatasource, tables: List[CoreTable])
204204

205205
def sync_fields(session: SessionDep, ds: CoreDatasource, table: CoreTable, fields: List[ColumnSchema]):
206206
id_list = []
207-
for item in fields:
207+
for index, item in enumerate(fields):
208208
statement = select(CoreField).where(
209209
and_(CoreField.table_id == table.id, CoreField.field_name == item.fieldName))
210210
record = session.exec(statement).first()
@@ -213,12 +213,13 @@ def sync_fields(session: SessionDep, ds: CoreDatasource, table: CoreTable, field
213213
id_list.append(record.id)
214214

215215
record.field_comment = item.fieldComment
216+
record.field_index = index
216217
session.add(record)
217218
session.commit()
218219
else:
219220
field = CoreField(ds_id=ds.id, table_id=table.id, checked=True, field_name=item.fieldName,
220221
field_type=item.fieldType, field_comment=item.fieldComment,
221-
custom_comment=item.fieldComment)
222+
custom_comment=item.fieldComment, field_index=index)
222223
session.add(field)
223224
session.flush()
224225
session.refresh(field)

backend/apps/datasource/crud/field.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ def delete_field_by_ds_id(session: SessionDep, id: int):
88

99

1010
def get_fields_by_table_id(session: SessionDep, id: int):
11-
return session.query(CoreField).filter(CoreField.table_id == id).all()
11+
return session.query(CoreField).filter(CoreField.table_id == id).order_by(CoreField.field_index.asc()).all()
1212

1313

1414
def update_field(session: SessionDep, item: CoreField):

backend/apps/datasource/models/datasource.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class CoreField(SQLModel, table=True):
4141
field_type: str = Field(max_length=128, nullable=True)
4242
field_comment: str = Field(sa_column=Column(Text))
4343
custom_comment: str = Field(sa_column=Column(Text))
44+
field_index: int = Field(sa_column=Column(BigInteger()))
4445

4546

4647
# datasource create obj

0 commit comments

Comments
 (0)