mirror of
https://github.com/dbgate/dbgate
synced 2024-09-20 05:13:05 +00:00
save changes to DB
This commit is contained in:
parent
464662cb18
commit
01e2cb3087
@ -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;
|
||||
// },
|
||||
};
|
||||
|
@ -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 }) {
|
||||
|
@ -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) {
|
||||
|
5
packages/types/query.d.ts
vendored
5
packages/types/query.d.ts
vendored
@ -8,6 +8,7 @@ export interface QueryResultColumn {
|
||||
}
|
||||
|
||||
export interface QueryResult {
|
||||
rows: any[];
|
||||
columns: QueryResultColumn[];
|
||||
rows?: any[];
|
||||
columns?: QueryResultColumn[];
|
||||
rowsAffected?: number;
|
||||
}
|
||||
|
@ -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}
|
||||
/>
|
||||
<ConfirmSqlModal modalState={confirmSqlModalState} sql={confirmSql} engine={display.engine} />
|
||||
<ConfirmSqlModal modalState={confirmSqlModalState} sql={confirmSql} engine={display.engine} onConfirm={handleConfirmSql} />
|
||||
</GridContainer>
|
||||
);
|
||||
}
|
||||
|
@ -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 (
|
||||
<ModalBase modalState={modalState}>
|
||||
<h2>Save changes</h2>
|
||||
@ -23,7 +23,14 @@ export default function ConfirmSqlModal({ modalState, sql, engine }) {
|
||||
</SqlWrapper>
|
||||
|
||||
<FormRow>
|
||||
<input type="button" value="OK" onClick={modalState.close} />
|
||||
<input
|
||||
type="button"
|
||||
value="OK"
|
||||
onClick={() => {
|
||||
modalState.close();
|
||||
onConfirm();
|
||||
}}
|
||||
/>
|
||||
<input type="button" value="Close" onClick={modalState.close} />
|
||||
</FormRow>
|
||||
</ModalBase>
|
||||
|
Loading…
Reference in New Issue
Block a user