diff --git a/packages/api/src/controllers/databaseConnections.js b/packages/api/src/controllers/databaseConnections.js
index 7e235df6..f56ea79b 100644
--- a/packages/api/src/controllers/databaseConnections.js
+++ b/packages/api/src/controllers/databaseConnections.js
@@ -74,4 +74,12 @@ module.exports = {
const res = await this.sendRequest(opened, { msgtype: 'queryData', sql });
return res;
},
+
+ // runCommand_meta: 'post',
+ // async runCommand({ conid, database, sql }) {
+ // console.log(`Running SQL command , conid=${conid}, database=${database}, sql=${sql}`);
+ // const opened = await this.ensureOpened(conid, database);
+ // const res = await this.sendRequest(opened, { msgtype: 'queryData', sql });
+ // return res;
+ // },
};
diff --git a/packages/api/src/proc/databaseConnectionProcess.js b/packages/api/src/proc/databaseConnectionProcess.js
index 48fe0a2f..a1b0ea98 100644
--- a/packages/api/src/proc/databaseConnectionProcess.js
+++ b/packages/api/src/proc/databaseConnectionProcess.js
@@ -33,22 +33,23 @@ function waitConnected() {
}
async function handleQueryData({ msgid, sql }) {
- // const select = new Select();
- // if (driver.dialect.limitSelect) select.topRecords = 100;
- // if (driver.dialect.rangeSelect) select.range = { offset: 0, limit: 100 };
- // select.from = { schemaName, pureName };
- // select.selectAll = true;
- // const sql = select.toSql(driver);
-
await waitConnected();
const driver = engines(storedConnection);
const res = await driver.query(systemConnection, sql);
process.send({ msgtype: 'response', msgid, ...res });
}
+// async function handleRunCommand({ msgid, sql }) {
+// await waitConnected();
+// const driver = engines(storedConnection);
+// const res = await driver.query(systemConnection, sql);
+// process.send({ msgtype: 'response', msgid, ...res });
+// }
+
const messageHandlers = {
connect: handleConnect,
queryData: handleQueryData,
+ // runCommand: handleRunCommand,
};
async function handleMessage({ msgtype, ...other }) {
diff --git a/packages/engines/mssql/index.js b/packages/engines/mssql/index.js
index 92d21891..1f2f5a3e 100644
--- a/packages/engines/mssql/index.js
+++ b/packages/engines/mssql/index.js
@@ -1,6 +1,6 @@
-const _ = require("lodash");
-const MsSqlAnalyser = require("./MsSqlAnalyser");
-const MsSqlDumper = require("./MsSqlDumper");
+const _ = require('lodash');
+const MsSqlAnalyser = require('./MsSqlAnalyser');
+const MsSqlDumper = require('./MsSqlDumper');
/** @type {import('@dbgate/types').SqlDialect} */
const dialect = {
@@ -10,7 +10,7 @@ const dialect = {
stringEscapeChar: "'",
quoteIdentifier(s) {
return `[${s}]`;
- }
+ },
};
/** @type {import('@dbgate/types').EngineDriver} */
@@ -23,8 +23,8 @@ const driver = {
password,
database,
options: {
- enableArithAbort: true
- }
+ enableArithAbort: true,
+ },
});
pool._nativeModules = nativeModules;
return pool;
@@ -32,20 +32,24 @@ const driver = {
async query(pool, sql) {
const resp = await pool.request().query(sql);
// console.log(Object.keys(resp.recordset));
- const columns = _.sortBy(_.values(resp.recordset.columns), "index");
- return { rows: resp.recordset, columns };
+ // console.log(resp);
+ const res = {};
+
+ if (resp.recordset) {
+ res.columns = _.sortBy(_.values(resp.recordset.columns), 'index');
+ res.rows = resp.recordset;
+ }
+ if (resp.rowsAffected) {
+ res.rowsAffected = _.sum(resp.rowsAffected);
+ }
+ return res;
},
async getVersion(pool) {
- const { version } = (
- await this.query(pool, "SELECT @@VERSION AS version")
- ).rows[0];
+ const { version } = (await this.query(pool, 'SELECT @@VERSION AS version')).rows[0];
return { version };
},
async listDatabases(pool) {
- const { rows } = await this.query(
- pool,
- "SELECT name FROM sys.databases order by name"
- );
+ const { rows } = await this.query(pool, 'SELECT name FROM sys.databases order by name');
return rows;
},
async analyseFull(pool) {
diff --git a/packages/types/query.d.ts b/packages/types/query.d.ts
index 3d60c7ce..c1da25ce 100644
--- a/packages/types/query.d.ts
+++ b/packages/types/query.d.ts
@@ -8,6 +8,7 @@ export interface QueryResultColumn {
}
export interface QueryResult {
- rows: any[];
- columns: QueryResultColumn[];
+ rows?: any[];
+ columns?: QueryResultColumn[];
+ rowsAffected?: number;
}
diff --git a/packages/web/src/datagrid/DataGridCore.js b/packages/web/src/datagrid/DataGridCore.js
index a3223184..a15b0c6d 100644
--- a/packages/web/src/datagrid/DataGridCore.js
+++ b/packages/web/src/datagrid/DataGridCore.js
@@ -26,7 +26,7 @@ import DataGridRow from './DataGridRow';
import { countColumnSizes, countVisibleRealColumns } from './gridutil';
import useModalState from '../modals/useModalState';
import ConfirmSqlModal from '../modals/ConfirmSqlModal';
-import { changeSetToSql } from '@dbgate/datalib';
+import { changeSetToSql, createChangeSet } from '@dbgate/datalib';
import { scriptToSql } from '@dbgate/sqltree';
const GridContainer = styled.div`
@@ -118,7 +118,7 @@ export default function DataGridCore(props) {
const sql = display.getPageQuery(loadedRows.length, 100);
- let response = await axios.request({
+ const response = await axios.request({
url: 'database-connections/query-data',
method: 'post',
params: {
@@ -312,6 +312,22 @@ export default function DataGridCore(props) {
confirmSqlModalState.open();
}
+ async function handleConfirmSql() {
+ const response = await axios.request({
+ url: 'database-connections/query-data',
+ method: 'post',
+ params: {
+ conid,
+ database,
+ },
+ data: { sql: confirmSql },
+ });
+
+ setChangeSet(createChangeSet());
+ setConfirmSql(null);
+ display.reload();
+ }
+
function handleGridKeyDown(event) {
if (
!event.ctrlKey &&
@@ -576,7 +592,7 @@ export default function DataGridCore(props) {
onScroll={handleRowScroll}
viewportRatio={visibleRowCountUpperBound / rowCountNewIncluded}
/>
-
+
);
}
diff --git a/packages/web/src/modals/ConfirmSqlModal.js b/packages/web/src/modals/ConfirmSqlModal.js
index 3c8b6e3d..7f9dfe1a 100644
--- a/packages/web/src/modals/ConfirmSqlModal.js
+++ b/packages/web/src/modals/ConfirmSqlModal.js
@@ -14,7 +14,7 @@ const SqlWrapper = styled.div`
width: 40vw;
`;
-export default function ConfirmSqlModal({ modalState, sql, engine }) {
+export default function ConfirmSqlModal({ modalState, sql, engine, onConfirm }) {
return (
Save changes
@@ -23,7 +23,14 @@ export default function ConfirmSqlModal({ modalState, sql, engine }) {
-
+ {
+ modalState.close();
+ onConfirm();
+ }}
+ />