feat:Support kyuubi presto trino (#2109)

This commit is contained in:
zyclove
2025-02-26 17:33:14 +08:00
committed by GitHub
parent 11ff99cdbe
commit 5e3bafb953
31 changed files with 501 additions and 101 deletions

View File

@@ -24,6 +24,7 @@ const ModelBasicForm: React.FC<Props> = ({
mode = 'normal',
}) => {
const [currentDbLinkConfigId, setCurrentDbLinkConfigId] = useState<number>();
const [currentCatalog, setCurrentCatalog] = useState<string>("");
const [catalogList, setCatalogList] = useState<string[]>([]);
const [dbNameList, setDbNameList] = useState<string[]>([]);
const [tableNameList, setTableNameList] = useState<any[]>([]);
@@ -55,8 +56,8 @@ const ModelBasicForm: React.FC<Props> = ({
const onDatabaseSelect = (databaseId: number, type: string) => {
setLoading(true);
if (type === 'STARROCKS') {
queryCatalogList(databaseId)
if (type === 'STARROCKS' || type === 'KYUUBI' || type === 'PRESTO' || type === 'TRINO') {
queryCatalogList(databaseId);
setCatalogSelectOpen(true);
setDbNameList([]);
} else {
@@ -88,9 +89,11 @@ const ModelBasicForm: React.FC<Props> = ({
queryDbNameList(currentDbLinkConfigId, catalog);
}
form.setFieldsValue({
catalog: catalog,
dbName: undefined,
tableName: undefined,
})
setCurrentCatalog(catalog);
}
const queryDbNameList = async (databaseId: number, catalog: string) => {
@@ -110,7 +113,7 @@ const ModelBasicForm: React.FC<Props> = ({
return;
}
setLoading(true);
const { code, data, msg } = await getTables(currentDbLinkConfigId, databaseName);
const { code, data, msg } = await getTables(currentDbLinkConfigId, currentCatalog, databaseName);
setLoading(false);
if (code === 200) {
const list = data || [];
@@ -136,6 +139,7 @@ const ModelBasicForm: React.FC<Props> = ({
onSelect={(dbLinkConfigId: number, option) => {
onDatabaseSelect(dbLinkConfigId, option.type);
setCurrentDbLinkConfigId(dbLinkConfigId);
setCurrentCatalog("");
}}
>
{databaseConfigList.map((item) => (

View File

@@ -351,12 +351,24 @@ const ModelCreateForm: React.FC<CreateFormProps> = ({
let columns = fieldColumns || [];
if (queryType === 'table_query') {
const tableQueryString = tableQuery || '';
const [dbName, tableName] = tableQueryString.split('.');
columns = await queryTableColumnList(modelItem.databaseId, dbName, tableName);
tableQueryInitValue = {
dbName,
tableName,
};
if (tableQueryString.split('.').length === 3) {
const [catalog, dbName, tableName] = tableQueryString.split('.');
columns = await queryTableColumnList(modelItem.databaseId, catalog, dbName, tableName);
tableQueryInitValue = {
catalog,
dbName,
tableName,
};
}
if (tableQueryString.split('.').length === 2) {
const [dbName, tableName] = tableQueryString.split('.');
columns = await queryTableColumnList(modelItem.databaseId, '', dbName, tableName);
tableQueryInitValue = {
catalog: '',
dbName,
tableName,
};
}
}
formatterInitData(columns, tableQueryInitValue);
};
@@ -426,8 +438,8 @@ const ModelCreateForm: React.FC<CreateFormProps> = ({
setFields(result);
};
const queryTableColumnList = async (databaseId: number, dbName: string, tableName: string) => {
const { code, data, msg } = await getColumns(databaseId, dbName, tableName);
const queryTableColumnList = async (databaseId: number, catalog: string, dbName: string, tableName: string) => {
const { code, data, msg } = await getColumns(databaseId, catalog, dbName, tableName);
if (code === 200) {
const list = data || [];
const columns = list.map((item: any, index: number) => {
@@ -563,10 +575,10 @@ const ModelCreateForm: React.FC<CreateFormProps> = ({
}}
onValuesChange={(value, values) => {
const { tableName } = value;
const { dbName, databaseId } = values;
const { catalog, dbName, databaseId } = values;
setFormDatabaseId(databaseId);
if (tableName) {
queryTableColumnList(databaseId, dbName, tableName);
queryTableColumnList(databaseId, catalog, dbName, tableName);
}
}}
className={styles.form}

View File

@@ -398,21 +398,23 @@ export function getDbNames(dbId: number, catalog: string): Promise<any> {
});
}
export function getTables(databaseId: number, dbName: string): Promise<any> {
export function getTables(databaseId: number, catalog: string, dbName: string): Promise<any> {
return request(`${process.env.API_BASE_URL}database/getTables`, {
method: 'GET',
params: {
databaseId,
catalog: catalog,
db: dbName,
},
});
}
export function getColumns(databaseId: number, dbName: string, tableName: string): Promise<any> {
export function getColumns(databaseId: number, catalog: string, dbName: string, tableName: string): Promise<any> {
return request(`${process.env.API_BASE_URL}database/getColumnsByName`, {
method: 'GET',
params: {
databaseId,
catalog: catalog,
db: dbName,
table: tableName,
},