mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-03 07:50:25 +08:00
fix: 库名提示,兼容mysql\pgsql\dm
This commit is contained in:
@@ -55,7 +55,7 @@
|
|||||||
:disabled="!state.db || !nowDbInst.id"
|
:disabled="!state.db || !nowDbInst.id"
|
||||||
type="primary"
|
type="primary"
|
||||||
icon="Search"
|
icon="Search"
|
||||||
@click="addQueryTab({ id: nowDbInst.id, dbs: nowDbInst.databases?.split(' ') }, state.db)"
|
@click="addQueryTab({ id: nowDbInst.id, dbs: nowDbInst.databases }, state.db)"
|
||||||
size="small"
|
size="small"
|
||||||
>新建查询</el-button
|
>新建查询</el-button
|
||||||
></el-descriptions-item
|
></el-descriptions-item
|
||||||
@@ -208,10 +208,7 @@ const SqlIcon = {
|
|||||||
const nodeClickChangeDb = (nodeData: TagTreeNode) => {
|
const nodeClickChangeDb = (nodeData: TagTreeNode) => {
|
||||||
const params = nodeData.params;
|
const params = nodeData.params;
|
||||||
if (params.db) {
|
if (params.db) {
|
||||||
changeDb(
|
changeDb({ id: params.id, host: `${params.host}`, name: params.name, type: params.type, tagPath: params.tagPath, databases: params.dbs }, params.db);
|
||||||
{ id: params.id, host: `${params.host}`, name: params.name, type: params.type, tagPath: params.tagPath, databases: params.database },
|
|
||||||
params.db
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -276,6 +273,7 @@ const NodeTypePostgresScheamMenu = new NodeType(SqlExecNodeType.PgSchemaMenu)
|
|||||||
const nParams = { ...params };
|
const nParams = { ...params };
|
||||||
nParams.schema = sn;
|
nParams.schema = sn;
|
||||||
nParams.db = nParams.db + '/' + sn;
|
nParams.db = nParams.db + '/' + sn;
|
||||||
|
nParams.dbs = schemaNames;
|
||||||
return new TagTreeNode(`${params.id}.${params.db}.schema.${sn}`, sn, NodeTypePostgresScheam).withParams(nParams).withIcon(SchemaIcon);
|
return new TagTreeNode(`${params.id}.${params.db}.schema.${sn}`, sn, NodeTypePostgresScheam).withParams(nParams).withIcon(SchemaIcon);
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
@@ -406,6 +404,7 @@ const setHeight = () => {
|
|||||||
// 选择数据库,改变当前正在操作的数据库信息
|
// 选择数据库,改变当前正在操作的数据库信息
|
||||||
const changeDb = (db: any, dbName: string) => {
|
const changeDb = (db: any, dbName: string) => {
|
||||||
state.nowDbInst = DbInst.getOrNewInst(db);
|
state.nowDbInst = DbInst.getOrNewInst(db);
|
||||||
|
state.nowDbInst.databases = db.databases;
|
||||||
state.db = dbName;
|
state.db = dbName;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -480,7 +479,6 @@ const addQueryTab = async (db: any, dbName: string, sqlName: string = '') => {
|
|||||||
dbs: db.dbs,
|
dbs: db.dbs,
|
||||||
};
|
};
|
||||||
state.tabs.set(key, tab);
|
state.tabs.set(key, tab);
|
||||||
|
|
||||||
// 注册当前sql编辑框提示词
|
// 注册当前sql编辑框提示词
|
||||||
registerDbCompletionItemProvider(tab.dbId, tab.db, tab.params.dbs, nowDbInst.value.type);
|
registerDbCompletionItemProvider(tab.dbId, tab.db, tab.params.dbs, nowDbInst.value.type);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ export class DbInst {
|
|||||||
dbs: Map<string, Db> = new Map();
|
dbs: Map<string, Db> = new Map();
|
||||||
|
|
||||||
/** 数据库,多个用空格隔开 */
|
/** 数据库,多个用空格隔开 */
|
||||||
databases: string;
|
databases: string[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 默认查询分页数量
|
* 默认查询分页数量
|
||||||
@@ -532,7 +532,6 @@ function registerCompletions(
|
|||||||
export function registerDbCompletionItemProvider(dbId: number, db: string, dbs: any[] = [], dbType: string) {
|
export function registerDbCompletionItemProvider(dbId: number, db: string, dbs: any[] = [], dbType: string) {
|
||||||
let dbDialect = getDbDialect(dbType);
|
let dbDialect = getDbDialect(dbType);
|
||||||
let dbDialectInfo = dbDialect.getInfo();
|
let dbDialectInfo = dbDialect.getInfo();
|
||||||
|
|
||||||
let { keywords, operators, functions, variables } = dbDialectInfo.editorCompletions;
|
let { keywords, operators, functions, variables } = dbDialectInfo.editorCompletions;
|
||||||
registerCompletionItemProvider('sql', {
|
registerCompletionItemProvider('sql', {
|
||||||
triggerCharacters: ['.', ' '],
|
triggerCharacters: ['.', ' '],
|
||||||
@@ -631,6 +630,9 @@ export function registerDbCompletionItemProvider(dbId: number, db: string, dbs:
|
|||||||
if (lastToken.trim().startsWith('.')) {
|
if (lastToken.trim().startsWith('.')) {
|
||||||
alias = secondToken;
|
alias = secondToken;
|
||||||
}
|
}
|
||||||
|
if (!alias && secondToken.indexOf('.') > -1) {
|
||||||
|
alias = secondToken.substring(secondToken.indexOf('.') + 1);
|
||||||
|
}
|
||||||
|
|
||||||
// 如果字符串粘连起了如:'a.creator,a.',需要重新取出别名
|
// 如果字符串粘连起了如:'a.creator,a.',需要重新取出别名
|
||||||
let aliasArr = lastToken.split(',');
|
let aliasArr = lastToken.split(',');
|
||||||
@@ -643,8 +645,12 @@ export function registerDbCompletionItemProvider(dbId: number, db: string, dbs:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 如果是【库.表名联想】.前的字符串是库名
|
// 如果是【库.表名联想】.前的字符串是库名
|
||||||
if (dbs.indexOf(alias) >= 0) {
|
if (dbs?.filter((a) => alias === a?.toLowerCase()).length > 0) {
|
||||||
return await dbInst.loadTableSuggestions(alias, range);
|
let dbName = alias;
|
||||||
|
if (db.indexOf('/') > 0) {
|
||||||
|
dbName = db.substring(0, db.indexOf('/') + 1) + alias;
|
||||||
|
}
|
||||||
|
return await dbInst.loadTableSuggestions(dbName, range);
|
||||||
}
|
}
|
||||||
// 表下列名联想 .前的字符串是表名或表别名
|
// 表下列名联想 .前的字符串是表名或表别名
|
||||||
const sqlInfo = getTableName4SqlCtx(sqlStatement, alias, db);
|
const sqlInfo = getTableName4SqlCtx(sqlStatement, alias, db);
|
||||||
@@ -707,6 +713,9 @@ function getTableName4SqlCtx(sql: string, alias: string = '', defaultDb: string)
|
|||||||
if (tableName.indexOf('.') >= 0) {
|
if (tableName.indexOf('.') >= 0) {
|
||||||
let info = tableName.split('.');
|
let info = tableName.split('.');
|
||||||
db = info[0];
|
db = info[0];
|
||||||
|
if (defaultDb.indexOf('/') > 0) {
|
||||||
|
db = defaultDb.substring(0, defaultDb.indexOf('/') + 1) + db;
|
||||||
|
}
|
||||||
tableName = info[1];
|
tableName = info[1];
|
||||||
}
|
}
|
||||||
const tableAlias = matches[2] ? matches[2].replace(/[`"]/g, '') : tableName;
|
const tableAlias = matches[2] ? matches[2].replace(/[`"]/g, '') : tableName;
|
||||||
|
|||||||
Reference in New Issue
Block a user