mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 04:56:00 +00:00
sql generator - generates SQL inserts
This commit is contained in:
@@ -1,19 +0,0 @@
|
|||||||
const databaseConnections = require('./databaseConnections');
|
|
||||||
const connections = require('./connections');
|
|
||||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
|
||||||
const { SqlGenerator } = require('dbgate-tools')
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
preview_meta: {
|
|
||||||
method: 'post',
|
|
||||||
},
|
|
||||||
async preview({ conid, database, objects, options }) {
|
|
||||||
const structure = await databaseConnections.structure({ conid, database })
|
|
||||||
const connection = await connections.get({ conid })
|
|
||||||
const driver = requireEngineDriver(connection);
|
|
||||||
const dmp = driver.createDumper();
|
|
||||||
const generator = new SqlGenerator(structure, options, objects, dmp);
|
|
||||||
await generator.dump();
|
|
||||||
return dmp.s;
|
|
||||||
},
|
|
||||||
};
|
|
||||||
@@ -26,7 +26,6 @@ const uploads = require('./controllers/uploads');
|
|||||||
const plugins = require('./controllers/plugins');
|
const plugins = require('./controllers/plugins');
|
||||||
const files = require('./controllers/files');
|
const files = require('./controllers/files');
|
||||||
const scheduler = require('./controllers/scheduler');
|
const scheduler = require('./controllers/scheduler');
|
||||||
const sqlgen = require('./controllers/sqlgen');
|
|
||||||
|
|
||||||
const { rundir } = require('./utility/directories');
|
const { rundir } = require('./utility/directories');
|
||||||
|
|
||||||
@@ -73,7 +72,6 @@ function start(argument = null) {
|
|||||||
useController(app, '/plugins', plugins);
|
useController(app, '/plugins', plugins);
|
||||||
useController(app, '/files', files);
|
useController(app, '/files', files);
|
||||||
useController(app, '/scheduler', scheduler);
|
useController(app, '/scheduler', scheduler);
|
||||||
useController(app, '/sqlgen', sqlgen);
|
|
||||||
|
|
||||||
// if (process.env.PAGES_DIRECTORY) {
|
// if (process.env.PAGES_DIRECTORY) {
|
||||||
// app.use('/pages', express.static(process.env.PAGES_DIRECTORY));
|
// app.use('/pages', express.static(process.env.PAGES_DIRECTORY));
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ async function handleSqlPreview({ msgid, objects, options }) {
|
|||||||
const driver = requireEngineDriver(storedConnection);
|
const driver = requireEngineDriver(storedConnection);
|
||||||
|
|
||||||
const dmp = driver.createDumper();
|
const dmp = driver.createDumper();
|
||||||
const generator = new SqlGenerator(analysedStructure, options, objects, dmp);
|
const generator = new SqlGenerator(analysedStructure, options, objects, dmp, driver, systemConnection);
|
||||||
await generator.dump();
|
await generator.dump();
|
||||||
process.send({ msgtype: 'response', msgid, sql: dmp.s });
|
process.send({ msgtype: 'response', msgid, sql: dmp.s });
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { DatabaseInfo, FunctionInfo, ProcedureInfo, TableInfo, ViewInfo } from 'dbgate-types';
|
import { DatabaseInfo, EngineDriver, FunctionInfo, ProcedureInfo, TableInfo, ViewInfo } from 'dbgate-types';
|
||||||
import { SqlDumper } from './SqlDumper';
|
import { SqlDumper } from './SqlDumper';
|
||||||
|
|
||||||
interface SqlGeneratorOptions {
|
interface SqlGeneratorOptions {
|
||||||
@@ -31,7 +31,9 @@ export class SqlGenerator {
|
|||||||
public dbinfo: DatabaseInfo,
|
public dbinfo: DatabaseInfo,
|
||||||
public options: SqlGeneratorOptions,
|
public options: SqlGeneratorOptions,
|
||||||
public objects: SqlGeneratorObject[],
|
public objects: SqlGeneratorObject[],
|
||||||
public dmp: SqlDumper
|
public dmp: SqlDumper,
|
||||||
|
public driver: EngineDriver,
|
||||||
|
public pool
|
||||||
) {
|
) {
|
||||||
this.tables = this.extract('tables');
|
this.tables = this.extract('tables');
|
||||||
this.views = this.extract('views');
|
this.views = this.extract('views');
|
||||||
@@ -50,6 +52,38 @@ export class SqlGenerator {
|
|||||||
if (this.checkDumper()) return;
|
if (this.checkDumper()) return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (this.options.insert) {
|
||||||
|
for (const table of this.tables) {
|
||||||
|
await this.insertTableData(table);
|
||||||
|
if (this.checkDumper()) return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async insertTableData(table: TableInfo) {
|
||||||
|
const dmp = this.driver.createDumper();
|
||||||
|
dmp.put('^select * ^from %f', table);
|
||||||
|
const readable = await this.driver.readQuery(this.pool, dmp.s, table);
|
||||||
|
await this.processReadable(table, readable);
|
||||||
|
}
|
||||||
|
|
||||||
|
processReadable(table: TableInfo, readable) {
|
||||||
|
const columnNames = table.columns.map(x => x.columnName);
|
||||||
|
return new Promise(resolve => {
|
||||||
|
readable.on('data', chunk => {
|
||||||
|
// const chunk = readable.read();
|
||||||
|
// if (!chunk) return;
|
||||||
|
this.dmp.put(
|
||||||
|
'^insert ^into %f (%,i) ^values (%,v);&n',
|
||||||
|
table,
|
||||||
|
columnNames,
|
||||||
|
columnNames.map(col => chunk[col])
|
||||||
|
);
|
||||||
|
});
|
||||||
|
readable.on('end', () => {
|
||||||
|
resolve(undefined);
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
extract(objectTypeField) {
|
extract(objectTypeField) {
|
||||||
|
|||||||
Reference in New Issue
Block a user