mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-26 20:16:00 +00:00
sqlite index analysis
This commit is contained in:
@@ -1,6 +1,19 @@
|
|||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
const { DatabaseAnalyser } = require('dbgate-tools');
|
const { DatabaseAnalyser } = require('dbgate-tools');
|
||||||
|
|
||||||
|
const indexcolsQuery = `
|
||||||
|
SELECT
|
||||||
|
m.name as tableName,
|
||||||
|
il.name as constraintName,
|
||||||
|
il."unique" as isUnique,
|
||||||
|
ii.name as columnName
|
||||||
|
FROM sqlite_schema AS m,
|
||||||
|
pragma_index_list(m.name) AS il,
|
||||||
|
pragma_index_info(il.name) AS ii
|
||||||
|
WHERE m.type='table' AND il.name NOT LIKE 'sqlite_autoindex_%'
|
||||||
|
ORDER BY ii.seqno
|
||||||
|
`;
|
||||||
|
|
||||||
class Analyser extends DatabaseAnalyser {
|
class Analyser extends DatabaseAnalyser {
|
||||||
constructor(pool, driver) {
|
constructor(pool, driver) {
|
||||||
super(pool, driver);
|
super(pool, driver);
|
||||||
@@ -51,6 +64,8 @@ class Analyser extends DatabaseAnalyser {
|
|||||||
createSql: x.sql,
|
createSql: x.sql,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
const indexcols = await this.driver.query(this.pool, indexcolsQuery);
|
||||||
|
|
||||||
for (const tableName of this.getRequestedObjectPureNames(
|
for (const tableName of this.getRequestedObjectPureNames(
|
||||||
'tables',
|
'tables',
|
||||||
tables.map((x) => x.name)
|
tables.map((x) => x.name)
|
||||||
@@ -67,6 +82,16 @@ class Analyser extends DatabaseAnalyser {
|
|||||||
autoIncrement: tableSqls[tableName].toLowerCase().includes('autoincrement') && !!col.pk,
|
autoIncrement: tableSqls[tableName].toLowerCase().includes('autoincrement') && !!col.pk,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
const indexNames = _.uniq(indexcols.rows.filter((x) => x.tableName == tableName).map((x) => x.constraintName));
|
||||||
|
|
||||||
|
tableObj.indexes = indexNames.map((idx) => ({
|
||||||
|
constraintName: idx,
|
||||||
|
isUnique: !!indexcols.rows.find((x) => x.tableName == tableName && x.constraintName == idx).isUnique,
|
||||||
|
columns: indexcols.rows
|
||||||
|
.filter((x) => x.tableName == tableName && x.constraintName == idx)
|
||||||
|
.map(({ columnName }) => ({ columnName })),
|
||||||
|
}));
|
||||||
|
|
||||||
const pkColumns = info.rows
|
const pkColumns = info.rows
|
||||||
.filter((x) => x.pk)
|
.filter((x) => x.pk)
|
||||||
.map((col) => ({
|
.map((col) => ({
|
||||||
|
|||||||
Reference in New Issue
Block a user