mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 00:16:00 +00:00
61 lines
2.0 KiB
JavaScript
61 lines
2.0 KiB
JavaScript
const { DatabaseAnalyser } = global.DBGATE_PACKAGES['dbgate-tools'];
|
|
const sql = require('./sql');
|
|
|
|
class Analyser extends DatabaseAnalyser {
|
|
constructor(connection, driver) {
|
|
super(connection, driver);
|
|
}
|
|
|
|
createQuery(resFileName, typeFields, replacements = {}) {
|
|
let res = sql[resFileName];
|
|
res = res.replace('#DATABASE#', this.dbhan.database);
|
|
return super.createQuery(res, typeFields, replacements);
|
|
}
|
|
|
|
async _runAnalysis() {
|
|
this.feedback({ analysingMessage: 'DBGM-00177 Loading tables' });
|
|
const tables = await this.analyserQuery('tables', ['tables']);
|
|
this.feedback({ analysingMessage: 'DBGM-00178 Loading columns' });
|
|
const columns = await this.analyserQuery('columns', ['tables']);
|
|
// this.feedback({ analysingMessage: 'Loading views' });
|
|
// const views = await this.analyserQuery('views', ['views']);
|
|
|
|
const res = {
|
|
tables: tables.rows.map((table) => {
|
|
const tableColumns = columns.rows.filter((col) => col.pureName == table.pureName);
|
|
const pkColumns = tableColumns.filter((i) => i.kind === 'partition_key' || i.kind === 'clustering');
|
|
|
|
return {
|
|
...table,
|
|
primaryKeyColumns: pkColumns,
|
|
columns: tableColumns,
|
|
primaryKey: pkColumns.length ? { columns: pkColumns } : null,
|
|
foreignKeys: [],
|
|
};
|
|
}),
|
|
views: [],
|
|
functions: [],
|
|
triggers: [],
|
|
};
|
|
this.feedback({ analysingMessage: null });
|
|
return res;
|
|
}
|
|
|
|
async singleObjectAnalysis(name, typeField) {
|
|
const structure = await this._runAnalysis(name, typeField);
|
|
const item = structure[typeField]?.find((i) => i.pureName === name.pureName);
|
|
return item;
|
|
}
|
|
|
|
// async _computeSingleObjectId() {
|
|
// const { pureName } = this.singleObjectFilter;
|
|
// const resId = await this.driver.query(
|
|
// this.dbhan,
|
|
// `SELECT uuid as id FROM system.tables WHERE database = '${this.dbhan.database}' AND name='${pureName}'`
|
|
// );
|
|
// this.singleObjectId = resId.rows[0]?.id;
|
|
// }
|
|
}
|
|
|
|
module.exports = Analyser;
|