diff --git a/packages/api/src/controllers/serverConnections.js b/packages/api/src/controllers/serverConnections.js index ff2a3274f..6f9ee355e 100644 --- a/packages/api/src/controllers/serverConnections.js +++ b/packages/api/src/controllers/serverConnections.js @@ -99,4 +99,11 @@ module.exports = { await this.ensureOpened(conid); return { status: 'ok' }; }, + + createDatabase_meta: 'post', + async createDatabase({ conid, name }) { + const opened = await this.ensureOpened(conid); + opened.subprocess.send({ msgtype: 'createDatabase', name }); + return { status: 'ok' }; + }, }; diff --git a/packages/api/src/proc/serverConnectionProcess.js b/packages/api/src/proc/serverConnectionProcess.js index ceb9ba9af..3f8341d8d 100644 --- a/packages/api/src/proc/serverConnectionProcess.js +++ b/packages/api/src/proc/serverConnectionProcess.js @@ -65,9 +65,18 @@ function handlePing() { lastPing = new Date().getTime(); } +async function handleCreateDatabase({ name }) { + const driver = engines(storedConnection); + systemConnection = await driverConnect(driver, storedConnection); + console.log(`RUNNING SCRIPT: CREATE DATABASE ${driver.dialect.quoteIdentifier(name)}`); + await driver.query(systemConnection, `CREATE DATABASE ${driver.dialect.quoteIdentifier(name)}`); + await handleRefresh(); +} + const messageHandlers = { connect: handleConnect, ping: handlePing, + createDatabase: handleCreateDatabase, }; async function handleMessage({ msgtype, ...other }) { diff --git a/packages/web/src/appobj/connectionAppObject.js b/packages/web/src/appobj/connectionAppObject.js index ecb3107f9..39f9f3629 100644 --- a/packages/web/src/appobj/connectionAppObject.js +++ b/packages/web/src/appobj/connectionAppObject.js @@ -8,6 +8,7 @@ import axios from '../utility/axios'; import { filterName } from '@dbgate/datalib'; import ConfirmModal from '../modals/ConfirmModal'; import { useConfig } from '../utility/metadataLoaders'; +import CreateDatabaseModal from '../modals/CreateDatabaseModal'; function Menu({ data, setOpenedConnections, openedConnections, config, showModal }) { const handleEdit = () => { @@ -22,6 +23,9 @@ function Menu({ data, setOpenedConnections, openedConnections, config, showModal /> )); }; + const handleCreateDatabase = () => { + showModal((modalState) => ); + }; const handleRefresh = () => { axios.post('server-connections/refresh', { conid: data._id }); }; @@ -46,6 +50,9 @@ function Menu({ data, setOpenedConnections, openedConnections, config, showModal {openedConnections.includes(data._id) && ( Disconnect )} + {openedConnections.includes(data._id) && ( + Create database + )} ); } diff --git a/packages/web/src/modals/CreateDatabaseModal.js b/packages/web/src/modals/CreateDatabaseModal.js new file mode 100644 index 000000000..551c2aaa5 --- /dev/null +++ b/packages/web/src/modals/CreateDatabaseModal.js @@ -0,0 +1,32 @@ +import React from 'react'; +import axios from '../utility/axios'; +import ModalBase from './ModalBase'; +import { FormTextField, FormSubmit } from '../utility/forms'; +import { Formik, Form } from 'formik'; +import ModalHeader from './ModalHeader'; +import ModalContent from './ModalContent'; +import ModalFooter from './ModalFooter'; + +export default function CreateDatabaseModal({ modalState, conid }) { + const handleSubmit = async (values) => { + const { name } = values; + axios.post('server-connections/create-database', { conid, name }); + + modalState.close(); + }; + return ( + + Create database + +
+ + + + + + +
+
+
+ ); +}