mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-02 09:03:58 +00:00
optimalization of loading oracle structure
This commit is contained in:
@@ -271,7 +271,7 @@ async function handleSqlPreview({ msgid, objects, options }) {
|
|||||||
process.send({ msgtype: 'response', msgid, sql: dmp.s, isTruncated: generator.isTruncated });
|
process.send({ msgtype: 'response', msgid, sql: dmp.s, isTruncated: generator.isTruncated });
|
||||||
if (generator.isUnhandledException) {
|
if (generator.isUnhandledException) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
getLogger.info('Exiting because of unhandled exception');
|
logger.error('Exiting because of unhandled exception');
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -235,7 +235,10 @@ export class DatabaseAnalyser {
|
|||||||
if (this.pool.feedback) {
|
if (this.pool.feedback) {
|
||||||
this.pool.feedback(obj);
|
this.pool.feedback(obj);
|
||||||
}
|
}
|
||||||
}
|
if (obj && obj.analysingMessage) {
|
||||||
|
logger.debug(obj.analysingMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async getModifications() {
|
async getModifications() {
|
||||||
const snapshot = await this._getFastSnapshot();
|
const snapshot = await this._getFastSnapshot();
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ class Analyser extends DatabaseAnalyser {
|
|||||||
const uniqueNames = await this.analyserQuery('uniqueNames', ['tables']);
|
const uniqueNames = await this.analyserQuery('uniqueNames', ['tables']);
|
||||||
this.feedback({ analysingMessage: 'Finalizing DB structure' });
|
this.feedback({ analysingMessage: 'Finalizing DB structure' });
|
||||||
|
|
||||||
const columnColumnsMapped = fkColumns.rows.map(x => ({
|
const fkColumnsMapped = fkColumns.rows.map(x => ({
|
||||||
pureName: x.pure_name,
|
pureName: x.pure_name,
|
||||||
schemaName: x.schema_name,
|
schemaName: x.schema_name,
|
||||||
constraintSchema: x.constraint_schema,
|
constraintSchema: x.constraint_schema,
|
||||||
@@ -124,6 +124,9 @@ class Analyser extends DatabaseAnalyser {
|
|||||||
columnName: x.column_name,
|
columnName: x.column_name,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
const columnGroup = col => `${col.schema_name}||${col.pure_name}`;
|
||||||
|
const columnsGrouped = _.groupBy(columns.rows, columnGroup);
|
||||||
|
|
||||||
const res = {
|
const res = {
|
||||||
tables: tables.rows.map(table => {
|
tables: tables.rows.map(table => {
|
||||||
const newTable = {
|
const newTable = {
|
||||||
@@ -134,11 +137,11 @@ class Analyser extends DatabaseAnalyser {
|
|||||||
};
|
};
|
||||||
return {
|
return {
|
||||||
...newTable,
|
...newTable,
|
||||||
columns: columns.rows
|
columns: (columnsGrouped[columnGroup(table)] || []).map(col =>
|
||||||
.filter(col => col.pure_name == table.pure_name && col.schema_name == table.schema_name)
|
getColumnInfo(col, newTable, geometryColumns, geographyColumns)
|
||||||
.map(col => getColumnInfo(col, newTable, geometryColumns, geographyColumns)),
|
),
|
||||||
primaryKey: DatabaseAnalyser.extractPrimaryKeys(newTable, pkColumnsMapped),
|
primaryKey: DatabaseAnalyser.extractPrimaryKeys(newTable, pkColumnsMapped),
|
||||||
foreignKeys: DatabaseAnalyser.extractForeignKeys(newTable, columnColumnsMapped),
|
foreignKeys: DatabaseAnalyser.extractForeignKeys(newTable, fkColumnsMapped),
|
||||||
indexes: _.uniqBy(
|
indexes: _.uniqBy(
|
||||||
indexes.rows.filter(
|
indexes.rows.filter(
|
||||||
idx =>
|
idx =>
|
||||||
@@ -176,9 +179,7 @@ class Analyser extends DatabaseAnalyser {
|
|||||||
schemaName: view.schema_name,
|
schemaName: view.schema_name,
|
||||||
contentHash: view.hash_code,
|
contentHash: view.hash_code,
|
||||||
createSql: `CREATE VIEW "${view.schema_name}"."${view.pure_name}"\nAS\n${view.create_sql}`,
|
createSql: `CREATE VIEW "${view.schema_name}"."${view.pure_name}"\nAS\n${view.create_sql}`,
|
||||||
columns: columns.rows
|
columns: (columnsGrouped[columnGroup(view)] || []).map(col => getColumnInfo(col)),
|
||||||
.filter(col => col.pure_name == view.pure_name && col.schema_name == view.schema_name)
|
|
||||||
.map(col => getColumnInfo(col)),
|
|
||||||
})),
|
})),
|
||||||
matviews: matviews
|
matviews: matviews
|
||||||
? matviews.rows.map(matview => ({
|
? matviews.rows.map(matview => ({
|
||||||
@@ -212,6 +213,9 @@ class Analyser extends DatabaseAnalyser {
|
|||||||
})),
|
})),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// this.feedback({ analysingMessage: 'Debug sleep' });
|
||||||
|
// await new Promise(resolve => setTimeout(resolve, 90 * 1000));
|
||||||
|
|
||||||
this.feedback({ analysingMessage: null });
|
this.feedback({ analysingMessage: null });
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
|
|||||||
Reference in New Issue
Block a user