Skip to content

Commit 00ab616

Browse files
committed
feat: Datasource table structure supports field retrieval #447
1 parent 2b19f0b commit 00ab616

File tree

4 files changed

+28
-8
lines changed

4 files changed

+28
-8
lines changed

backend/apps/datasource/api/datasource.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
check_status_by_id
2121
from ..crud.field import get_fields_by_table_id
2222
from ..crud.table import get_tables_by_ds_id
23-
from ..models.datasource import CoreDatasource, CreateDatasource, TableObj, CoreTable, CoreField
23+
from ..models.datasource import CoreDatasource, CreateDatasource, TableObj, CoreTable, CoreField, FieldObj
2424

2525
router = APIRouter(tags=["datasource"], prefix="/datasource")
2626
path = settings.EXCEL_PATH
@@ -164,8 +164,8 @@ async def table_list(session: SessionDep, id: int):
164164

165165

166166
@router.post("/fieldList/{id}")
167-
async def field_list(session: SessionDep, id: int):
168-
return get_fields_by_table_id(session, id)
167+
async def field_list(session: SessionDep, id: int, field: FieldObj):
168+
return get_fields_by_table_id(session, id, field)
169169

170170

171171
@router.post("/editLocalComment")

backend/apps/datasource/crud/datasource.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,11 +269,17 @@ def preview(session: SessionDep, current_user: CurrentUser, id: int, data: Table
269269
ds = session.query(CoreDatasource).filter(CoreDatasource.id == id).first()
270270
# check_status(session, ds, True)
271271

272-
if data.fields is None or len(data.fields) == 0:
272+
# ignore data's fields param, query fields from database
273+
if not data.table.id:
274+
return {"fields": [], "data": [], "sql": ''}
275+
276+
fields = session.query(CoreField).filter(CoreField.table_id == data.table.id).all()
277+
278+
if fields is None or len(fields) == 0:
273279
return {"fields": [], "data": [], "sql": ''}
274280

275281
where = ''
276-
f_list = [f for f in data.fields if f.checked]
282+
f_list = [f for f in fields if f.checked]
277283
if is_normal_user(current_user):
278284
# column is checked, and, column permission for data.fields
279285
contain_rules = session.query(DsRules).all()

backend/apps/datasource/crud/field.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
11
from common.core.deps import SessionDep
2-
from ..models.datasource import CoreField
2+
from ..models.datasource import CoreField, FieldObj
3+
from sqlalchemy import or_, and_
34

45

56
def delete_field_by_ds_id(session: SessionDep, id: int):
67
session.query(CoreField).filter(CoreField.ds_id == id).delete(synchronize_session=False)
78
session.commit()
89

910

10-
def get_fields_by_table_id(session: SessionDep, id: int):
11-
return session.query(CoreField).filter(CoreField.table_id == id).order_by(CoreField.field_index.asc()).all()
11+
def get_fields_by_table_id(session: SessionDep, id: int, field: FieldObj):
12+
if field and field.fieldName:
13+
return session.query(CoreField).filter(
14+
and_(CoreField.table_id == id, or_(CoreField.field_name.like(f'%{field.fieldName}%'),
15+
CoreField.field_name.like(f'%{field.fieldName.lower()}%'),
16+
CoreField.field_name.like(f'%{field.fieldName.upper()}%')))).order_by(
17+
CoreField.field_index.asc()).all()
18+
else:
19+
return session.query(CoreField).filter(CoreField.table_id == id).order_by(CoreField.field_index.asc()).all()
1220

1321

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

backend/apps/datasource/models/datasource.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class CoreTable(SQLModel, table=True):
3535
custom_comment: str = Field(sa_column=Column(Text))
3636
embedding: str = Field(sa_column=Column(Text, nullable=True))
3737

38+
3839
class DsRecommendedProblem(SQLModel, table=True):
3940
__tablename__ = "ds_recommended_problem"
4041
id: int = Field(sa_column=Column(BigInteger, Identity(always=True), nullable=False, primary_key=True))
@@ -84,6 +85,7 @@ def __init__(self, datasource_id,recommended_config,questions):
8485
questions: str = None
8586

8687

88+
8789
class RecommendedProblemBase(BaseModel):
8890
datasource_id: int = None
8991
recommended_config: int = None
@@ -164,3 +166,7 @@ def __init__(self, schema, table, fields):
164166
schema: str
165167
table: CoreTable
166168
fields: List[CoreField]
169+
170+
171+
class FieldObj(BaseModel):
172+
fieldName: str | None

0 commit comments

Comments
 (0)