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
+
+
+
+
+ );
+}