Files
dbgate/plugins/dbgate-plugin-firebird/src/backend/Analyser.js
2025-05-07 00:13:40 +02:00

54 lines
1.4 KiB
JavaScript

const _ = require('lodash');
const sql = require('./sql');
const { getDataTypeString } = require('./helpers');
const { DatabaseAnalyser } = require('dbgate-tools');
class Analyser extends DatabaseAnalyser {
constructor(dbhan, driver, version) {
super(dbhan, driver, version);
}
async _runAnalysis() {
const tablesResult = await this.driver.query(this.dbhan, sql.tables);
const columnsResult = await this.driver.query(this.dbhan, sql.columns);
const columns = columnsResult.rows.map(i => ({
tableName: i.TABLENAME,
columnName: i.COLUMNNAME,
notNull: i.NOTNULL,
isPrimaryKey: i.ISPRIMARYKEY,
dataType: getDataTypeString(i),
precision: i.NUMBERPRECISION,
scale: i.SCALE,
length: i.LENGTH,
defaultValue: i.DEFAULTVALUE,
columnComment: i.COLUMNCOMMENT,
isUnsigned: i.ISUNSIGNED,
pureName: i.PURENAME,
schemaName: i.SCHEMANAME,
}));
const tables = tablesResult.rows.map(i => ({
pureName: i.PURENAME,
objectId: i.OBJECTID,
schemaName: i.SCHEMANAME,
objectComment: i.OBJECTCOMMENT,
}));
return {
tables: tables.map(table => ({
...table,
columns: columns.filter(
column => column.tableName === table.pureName && column.schemaName === table.schemaName
),
})),
};
}
async _getFastSnapshot() {
return this._runAnalysis();
}
}
module.exports = Analyser;