diff --git a/mayfly_go_web/src/views/ops/db/SqlExec.vue b/mayfly_go_web/src/views/ops/db/SqlExec.vue index f6522990..8636e445 100644 --- a/mayfly_go_web/src/views/ops/db/SqlExec.vue +++ b/mayfly_go_web/src/views/ops/db/SqlExec.vue @@ -55,7 +55,7 @@ :disabled="!state.db || !nowDbInst.id" type="primary" 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" >新建查询 { const params = nodeData.params; if (params.db) { - changeDb( - { id: params.id, host: `${params.host}`, name: params.name, type: params.type, tagPath: params.tagPath, databases: params.database }, - params.db - ); + changeDb({ id: params.id, host: `${params.host}`, name: params.name, type: params.type, tagPath: params.tagPath, databases: params.dbs }, params.db); } }; @@ -276,6 +273,7 @@ const NodeTypePostgresScheamMenu = new NodeType(SqlExecNodeType.PgSchemaMenu) const nParams = { ...params }; nParams.schema = sn; nParams.db = nParams.db + '/' + sn; + nParams.dbs = schemaNames; 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) => { state.nowDbInst = DbInst.getOrNewInst(db); + state.nowDbInst.databases = db.databases; state.db = dbName; }; @@ -480,7 +479,6 @@ const addQueryTab = async (db: any, dbName: string, sqlName: string = '') => { dbs: db.dbs, }; state.tabs.set(key, tab); - // 注册当前sql编辑框提示词 registerDbCompletionItemProvider(tab.dbId, tab.db, tab.params.dbs, nowDbInst.value.type); }; diff --git a/mayfly_go_web/src/views/ops/db/db.ts b/mayfly_go_web/src/views/ops/db/db.ts index 493bf9fc..5e7aa285 100644 --- a/mayfly_go_web/src/views/ops/db/db.ts +++ b/mayfly_go_web/src/views/ops/db/db.ts @@ -42,7 +42,7 @@ export class DbInst { dbs: Map = new Map(); /** 数据库,多个用空格隔开 */ - databases: string; + databases: string[]; /** * 默认查询分页数量 @@ -532,7 +532,6 @@ function registerCompletions( export function registerDbCompletionItemProvider(dbId: number, db: string, dbs: any[] = [], dbType: string) { let dbDialect = getDbDialect(dbType); let dbDialectInfo = dbDialect.getInfo(); - let { keywords, operators, functions, variables } = dbDialectInfo.editorCompletions; registerCompletionItemProvider('sql', { triggerCharacters: ['.', ' '], @@ -631,6 +630,9 @@ export function registerDbCompletionItemProvider(dbId: number, db: string, dbs: if (lastToken.trim().startsWith('.')) { alias = secondToken; } + if (!alias && secondToken.indexOf('.') > -1) { + alias = secondToken.substring(secondToken.indexOf('.') + 1); + } // 如果字符串粘连起了如:'a.creator,a.',需要重新取出别名 let aliasArr = lastToken.split(','); @@ -643,8 +645,12 @@ export function registerDbCompletionItemProvider(dbId: number, db: string, dbs: } // 如果是【库.表名联想】.前的字符串是库名 - if (dbs.indexOf(alias) >= 0) { - return await dbInst.loadTableSuggestions(alias, range); + if (dbs?.filter((a) => alias === a?.toLowerCase()).length > 0) { + 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); @@ -707,6 +713,9 @@ function getTableName4SqlCtx(sql: string, alias: string = '', defaultDb: string) if (tableName.indexOf('.') >= 0) { let info = tableName.split('.'); db = info[0]; + if (defaultDb.indexOf('/') > 0) { + db = defaultDb.substring(0, defaultDb.indexOf('/') + 1) + db; + } tableName = info[1]; } const tableAlias = matches[2] ? matches[2].replace(/[`"]/g, '') : tableName;