mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 00:10: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