diff --git a/packages/engines/mysql/MySqlAnalyser.js b/packages/engines/mysql/MySqlAnalyser.js index f3c6775aa..12e3a97ac 100644 --- a/packages/engines/mysql/MySqlAnalyser.js +++ b/packages/engines/mysql/MySqlAnalyser.js @@ -147,12 +147,12 @@ class MySqlAnalyser extends DatabaseAnalayser { if (x.objectType == 'VIEW') return { ...x, objectTypeField: 'views' }; return null; }), - procedureModificationsQueryData.rows.map((x) => ({ + ...procedureModificationsQueryData.rows.map((x) => ({ objectTypeField: 'procedures', modifyDate: x.Modified, pureName: x.Name, })), - functionModificationsQueryData.rows.map((x) => ({ + ...functionModificationsQueryData.rows.map((x) => ({ objectTypeField: 'functions', modifyDate: x.Modified, pureName: x.Name, @@ -160,6 +160,10 @@ class MySqlAnalyser extends DatabaseAnalayser { ]); // console.log('allModifications', allModifications); + // console.log( + // 'DATES', + // this.structure.procedures.map((x) => x.modifyDate) + // ); // console.log('MOD - SRC', modifications); // console.log( // 'MODs', @@ -176,6 +180,8 @@ class MySqlAnalyser extends DatabaseAnalayser { // object not modified if (obj && Math.abs(new Date(modifyDate).getTime() - new Date(obj.modifyDate).getTime()) < 1000) return null; + // console.log('MODIFICATION OF ', field, pureName, modifyDate, obj.modifyDate); + /** @type {import('@dbgate/types').DatabaseModification} */ const action = obj ? { diff --git a/packages/engines/mysql/index.js b/packages/engines/mysql/index.js index fa11caf1d..8a0f54b75 100644 --- a/packages/engines/mysql/index.js +++ b/packages/engines/mysql/index.js @@ -118,6 +118,16 @@ const driver = { const analyser = new MySqlAnalyser(pool, this); return analyser.incrementalAnalysis(structure); }, + async analyseSingleObject(pool, name, typeField = 'tables') { + const analyser = new MySqlAnalyser(pool, this); + analyser.singleObjectFilter = { ...name, typeField }; + const res = await analyser.fullAnalysis(); + return res.tables[0]; + }, + // @ts-ignore + analyseSingleTable(pool, name) { + return this.analyseSingleObject(pool, name, 'tables'); + }, async listDatabases(connection) { const { rows } = await this.query(connection, 'show databases'); return rows.map((x) => ({ name: x.Database })); diff --git a/packages/engines/mysql/sql/functionModifications.js b/packages/engines/mysql/sql/functionModifications.js index 0ccbd49f8..f422a219a 100644 --- a/packages/engines/mysql/sql/functionModifications.js +++ b/packages/engines/mysql/sql/functionModifications.js @@ -1,3 +1,3 @@ module.exports = ` -SHOW PROCEDURE STATUS WHERE Db = '#DATABASE#' +SHOW FUNCTION STATUS WHERE Db = '#DATABASE#' `; diff --git a/packages/engines/mysql/sql/programmables.js b/packages/engines/mysql/sql/programmables.js index 1fb502634..dd1b36021 100644 --- a/packages/engines/mysql/sql/programmables.js +++ b/packages/engines/mysql/sql/programmables.js @@ -2,7 +2,7 @@ module.exports = ` select ROUTINE_NAME as pureName, ROUTINE_TYPE as objectType, - LAST_ALTERED as modifyDate, + COALESCE(LAST_ALTERED, CREATED) as modifyDate, ROUTINE_DEFINITION as createSql from information_schema.routines where ROUTINE_SCHEMA = '#DATABASE#' and ROUTINE_NAME =[OBJECT_NAME_CONDITION] diff --git a/packages/web/src/tabs/QueryTab.js b/packages/web/src/tabs/QueryTab.js index 2e964b7a1..245066553 100644 --- a/packages/web/src/tabs/QueryTab.js +++ b/packages/web/src/tabs/QueryTab.js @@ -40,7 +40,7 @@ function useSqlTemplate(sqlTemplate, props) { if (sqlTemplate == 'CREATE OBJECT') { const objectInfo = await getSqlObjectInfo(props); if (objectInfo) { - if (objectInfo.requiresFormat) setSql(sqlFormatter.format(objectInfo.createSql)); + if (objectInfo.requiresFormat && objectInfo.createSql) setSql(sqlFormatter.format(objectInfo.createSql)); else setSql(objectInfo.createSql); } }