Skip to content

Commit 89a5909

Browse files
committed
feat: field enum
1 parent 4f58eb5 commit 89a5909

File tree

3 files changed

+49
-3
lines changed

3 files changed

+49
-3
lines changed

backend/apps/datasource/api/datasource.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from apps.db.engine import create_table, get_data_engine, insert_data
1010
from common.core.deps import SessionDep, CurrentUser
1111
from ..crud.datasource import get_datasource_list, check_status, create_ds, update_ds, delete_ds, getTables, getFields, \
12-
execSql, update_table_and_fields, getTablesByDs, chooseTables, preview, updateTable, updateField, get_ds
12+
execSql, update_table_and_fields, getTablesByDs, chooseTables, preview, updateTable, updateField, get_ds, fieldEnum
1313
from ..crud.field import get_fields_by_table_id
1414
from ..crud.table import get_tables_by_ds_id
1515
from ..models.datasource import CoreDatasource, CreateDatasource, TableObj, CoreTable, CoreField
@@ -103,6 +103,11 @@ async def edit_local(session: SessionDep, id: int, data: TableObj):
103103
return preview(session, id, data)
104104

105105

106+
@router.post("/fieldEnum/{id}")
107+
async def field_enum(session: SessionDep, id: int):
108+
return fieldEnum(session, id)
109+
110+
106111
@router.post("/uploadExcel")
107112
async def upload_excel(session: SessionDep, file: UploadFile = File(...)):
108113
ALLOWED_EXTENSIONS = {"xlsx", "xls", "csv"}

backend/apps/datasource/crud/datasource.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
from sqlmodel import select
1010

1111
from apps.datasource.utils.utils import aes_decrypt
12+
from apps.db.constant import DB
1213
from apps.db.db import get_engine, get_tables, get_fields, exec_sql
13-
from apps.db.engine import get_engine_config
14-
from apps.db.engine import get_engine_conn
14+
from apps.db.engine import get_engine_config, get_engine_conn
1515
from apps.db.type import db_type_relation
1616
from common.core.deps import SessionDep, CurrentUser
1717
from common.utils.utils import deepcopy_ignore_extra
@@ -245,6 +245,23 @@ def preview(session: SessionDep, id: int, data: TableObj):
245245
return exec_sql(ds, sql)
246246

247247

248+
def fieldEnum(session: SessionDep, id: int):
249+
field = session.query(CoreField).filter(CoreField.id == id).first()
250+
if field is None:
251+
return []
252+
table = session.query(CoreTable).filter(CoreTable.id == field.table_id).first()
253+
if table is None:
254+
return []
255+
ds = session.query(CoreDatasource).filter(CoreDatasource.id == table.ds_id).first()
256+
if ds is None:
257+
return []
258+
259+
db = DB.get_db(ds.type)
260+
sql = f"""SELECT DISTINCT {db.prefix}{field.field_name}{db.suffix} FROM {db.prefix}{table.table_name}{db.suffix}"""
261+
res = exec_sql(ds, sql)
262+
return [item.get(res.get('fields')[0]) for item in res.get('data')]
263+
264+
248265
def updateNum(session: SessionDep, ds: CoreDatasource):
249266
all_tables = get_tables(ds)
250267
selected_tables = get_tables_by_ds_id(session, ds.id)

backend/apps/db/constant.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Author: Junjun
2+
# Date: 2025/7/16
3+
4+
from enum import Enum
5+
6+
7+
class DB(Enum):
8+
mysql = ('mysql', '`', '`')
9+
sqlServer = ('sqlServer', '[', ']')
10+
pg = ('pg', '"', '"')
11+
excel = ('excel', '"', '"')
12+
oracle = ('oracle', '"', '"')
13+
14+
def __init__(self, type, prefix, suffix):
15+
self.type = type
16+
self.prefix = prefix
17+
self.suffix = suffix
18+
19+
@classmethod
20+
def get_db(cls, type):
21+
for db in cls:
22+
if db.type == type:
23+
return db
24+
raise ValueError(f"Invalid db type: {type}")

0 commit comments

Comments
 (0)