diff --git a/packages/api/src/controllers/databaseConnections.js b/packages/api/src/controllers/databaseConnections.js index a67ed0cd0..62cd560c5 100644 --- a/packages/api/src/controllers/databaseConnections.js +++ b/packages/api/src/controllers/databaseConnections.js @@ -99,6 +99,13 @@ module.exports = { return res.result; }, + updateCollection_meta: 'post', + async updateCollection({ conid, database, changeSet }) { + const opened = await this.ensureOpened(conid, database); + const res = await this.sendRequest(opened, { msgtype: 'updateCollection', changeSet }); + return res.result; + }, + status_meta: 'get', async status({ conid, database }) { const existing = this.opened.find(x => x.conid == conid && x.database == database); diff --git a/packages/api/src/proc/databaseConnectionProcess.js b/packages/api/src/proc/databaseConnectionProcess.js index beed47085..77f1a8156 100644 --- a/packages/api/src/proc/databaseConnectionProcess.js +++ b/packages/api/src/proc/databaseConnectionProcess.js @@ -105,6 +105,17 @@ async function handleCollectionData({ msgid, options }) { } } +async function handleUpdateCollection({ msgid, changeSet }) { + await waitConnected(); + const driver = requireEngineDriver(storedConnection); + try { + const result = await driver.updateCollection(systemConnection, changeSet); + process.send({ msgtype: 'response', msgid, result }); + } catch (err) { + process.send({ msgtype: 'response', msgid, errorMessage: err.message }); + } +} + async function handleSqlPreview({ msgid, objects, options }) { await waitConnected(); const driver = requireEngineDriver(storedConnection); @@ -140,6 +151,7 @@ function handlePing() { const messageHandlers = { connect: handleConnect, queryData: handleQueryData, + updateCollection: handleUpdateCollection, collectionData: handleCollectionData, sqlPreview: handleSqlPreview, ping: handlePing, diff --git a/packages/types/engines.d.ts b/packages/types/engines.d.ts index 52a9ed061..e1666beb0 100644 --- a/packages/types/engines.d.ts +++ b/packages/types/engines.d.ts @@ -61,6 +61,7 @@ export interface EngineDriver { createDumper(): SqlDumper; getAuthTypes(): EngineAuthType[]; readCollection(pool: any, options: ReadCollectionOptions): Promise; + updateCollection(pool: any, changeSet: any): Promise; analyserClass?: any; dumperClass?: any; diff --git a/packages/web/src/datagrid/CollectionDataGridCore.svelte b/packages/web/src/datagrid/CollectionDataGridCore.svelte index e2ef2d4da..2fcb68958 100644 --- a/packages/web/src/datagrid/CollectionDataGridCore.svelte +++ b/packages/web/src/datagrid/CollectionDataGridCore.svelte @@ -87,7 +87,7 @@ import { scriptToSql } from 'dbgate-sqltree'; import _ from 'lodash'; import ErrorInfo from '../elements/ErrorInfo.svelte'; - import ConfirmSqlModal from '../modals/ConfirmSqlModal.svelte'; + import ConfirmNoSqlModal from '../modals/ConfirmNoSqlModal.svelte'; import ErrorMessageModal from '../modals/ErrorMessageModal.svelte'; import ImportExportModal from '../modals/ImportExportModal.svelte'; import { showModal } from '../modals/modalTools'; @@ -128,15 +128,15 @@ // $: console.log('GRIDER', grider); // $: if (onChangeGrider) onChangeGrider(grider); - async function handleConfirmSql(sql) { + async function handleConfirmChange(changeSet) { const resp = await axiosInstance.request({ - url: 'database-connections/query-data', + url: 'database-connections/update-collection', method: 'post', params: { conid, database, }, - data: { sql }, + data: { changeSet }, }); const { errorMessage } = resp.data || {}; if (errorMessage) { @@ -148,11 +148,10 @@ } function handleSave() { - const script = changeSetToSql(changeSetState && changeSetState.value, display.dbinfo); - const sql = scriptToSql(display.driver, script); - showModal(ConfirmSqlModal, { - sql, - onConfirm: () => handleConfirmSql(sql), + const json = changeSetState && changeSetState.value; + showModal(ConfirmNoSqlModal, { + json, + onConfirm: () => handleConfirmChange(json), engine: display.engine, }); } diff --git a/packages/web/src/modals/ConfirmNoSqlModal.svelte b/packages/web/src/modals/ConfirmNoSqlModal.svelte new file mode 100644 index 000000000..7a9fa612d --- /dev/null +++ b/packages/web/src/modals/ConfirmNoSqlModal.svelte @@ -0,0 +1,42 @@ + + + + +
Save changes
+ +
+ +
+ +
+ { + closeCurrentModal(); + onConfirm(); + }} + /> + +
+
+
+ +