diff --git a/packages/api/src/controllers/databaseConnections.js b/packages/api/src/controllers/databaseConnections.js index e6a5ddad1..5d1d59c84 100644 --- a/packages/api/src/controllers/databaseConnections.js +++ b/packages/api/src/controllers/databaseConnections.js @@ -34,7 +34,7 @@ module.exports = { socket.emitChanged(`database-status-changed-${conid}-${database}`); }, - handle_ping() {}, + handle_ping() { }, async ensureOpened(conid, database) { const existing = this.opened.find(x => x.conid == conid && x.database == database); @@ -153,6 +153,17 @@ module.exports = { // }; }, + sqlPreview_meta: 'post', + async sqlPreview({ conid, database, objects, options }) { + // wait for structure + await this.structure({ conid, database }) + + const opened = await this.ensureOpened(conid, database); + const res = await this.sendRequest(opened, { msgtype: 'sqlPreview', objects, options }); + return res.sql; + }, + + // runCommand_meta: 'post', // async runCommand({ conid, database, sql }) { // console.log(`Running SQL command , conid=${conid}, database=${database}, sql=${sql}`); diff --git a/packages/api/src/proc/databaseConnectionProcess.js b/packages/api/src/proc/databaseConnectionProcess.js index 579fa3f89..e134a78ae 100644 --- a/packages/api/src/proc/databaseConnectionProcess.js +++ b/packages/api/src/proc/databaseConnectionProcess.js @@ -3,6 +3,7 @@ const childProcessChecker = require('../utility/childProcessChecker'); const requireEngineDriver = require('../utility/requireEngineDriver'); const connectUtility = require('../utility/connectUtility'); const { handleProcessCommunication } = require('../utility/processComm'); +const { SqlGenerator } = require('dbgate-tools') let systemConnection; let storedConnection; @@ -93,6 +94,17 @@ async function handleQueryData({ msgid, sql }) { } } + +async function handleSqlPreview({ msgid, objects, options }) { + await waitConnected(); + const driver = requireEngineDriver(storedConnection); + + const dmp = driver.createDumper(); + const generator = new SqlGenerator(analysedStructure, options, objects, dmp); + await generator.dump(); + process.send({ msgtype: 'response', msgid, sql: dmp.s }); +} + // async function handleRunCommand({ msgid, sql }) { // await waitConnected(); // const driver = engines(storedConnection); @@ -107,6 +119,7 @@ function handlePing() { const messageHandlers = { connect: handleConnect, queryData: handleQueryData, + sqlPreview: handleSqlPreview, ping: handlePing, // runCommand: handleRunCommand, }; diff --git a/packages/web/src/modals/SqlGeneratorModal.svelte b/packages/web/src/modals/SqlGeneratorModal.svelte index e2c4a4e8d..691dbb91a 100644 --- a/packages/web/src/modals/SqlGeneratorModal.svelte +++ b/packages/web/src/modals/SqlGeneratorModal.svelte @@ -54,7 +54,7 @@ async function generatePreview(options, objects) { busy = true; - const response = await axiosInstance.post('sqlgen/preview', { conid, database, objects, options }); + const response = await axiosInstance.post('database-connections/sql-preview', { conid, database, objects, options }); if (_.isString(response.data)) { sqlPreview = response.data; }