diff --git a/src/renderer/components/QueryEditor.vue b/src/renderer/components/QueryEditor.vue index ac84f9fc..9f931653 100644 --- a/src/renderer/components/QueryEditor.vue +++ b/src/renderer/components/QueryEditor.vue @@ -47,13 +47,40 @@ export default { }, []).map(table => { return { name: table.name, - comment: table.comment, type: table.type, fields: [] }; }) : []; }, + triggers () { + return this.workspace + ? this.workspace.structure.filter(schema => schema.name === this.schema) + .reduce((acc, curr) => { + acc.push(...curr.triggers); + return acc; + }, []).map(trigger => { + return { + name: trigger.name, + type: 'trigger' + }; + }) + : []; + }, + procedures () { + return this.workspace + ? this.workspace.structure.filter(schema => schema.name === this.schema) + .reduce((acc, curr) => { + acc.push(...curr.procedures); + return acc; + }, []).map(procedure => { + return { + name: `${procedure.name}()`, + type: 'routine' + }; + }) + : []; + }, mode () { switch (this.workspace.client) { case 'mysql': @@ -130,11 +157,14 @@ export default { this.editor.completers.push({ getCompletions: (editor, session, pos, prefix, callback) => { const completions = []; - this.tables.forEach(table => { + [ + ...this.tables, + ...this.triggers, + ...this.procedures + ].forEach(el => { completions.push({ - value: table.name, - meta: table.type, - caption: table.comment + value: el.name, + meta: el.type }); }); callback(null, completions); diff --git a/src/renderer/libs/ext-language_tools.js b/src/renderer/libs/ext-language_tools.js index 00178031..1035abb4 100644 --- a/src/renderer/libs/ext-language_tools.js +++ b/src/renderer/libs/ext-language_tools.js @@ -1239,6 +1239,12 @@ ace.define('ace/autocomplete/popup', ['require', 'exports', 'module', 'ace/virtu case 'view': iconClass = 'mdi-table-eye'; break; + case 'trigger': + iconClass = 'mdi-table-cog'; + break; + case 'routine': + iconClass = 'mdi-sync-circle'; + break; case 'keyword': iconClass = 'mdi-cube'; break;