mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-17 23:45:59 +00:00
mysql index analysis works
This commit is contained in:
@@ -2,7 +2,7 @@ const engines = require('../engines');
|
||||
const { testWrapper } = require('../tools');
|
||||
|
||||
const t1Sql = 'CREATE TABLE t1 (id int not null primary key, val1 varchar(50) null)';
|
||||
const ix1Sql = 'CREATE index ix1 ON t1(val1)';
|
||||
const ix1Sql = 'CREATE index ix1 ON t1(val1, id)';
|
||||
const t2Sql = 'CREATE TABLE t2 (id int not null primary key, val2 varchar(50) null)';
|
||||
|
||||
const txMatch = (tname, vcolname, nextcol) =>
|
||||
@@ -120,8 +120,9 @@ describe('Table analyse', () => {
|
||||
|
||||
const t1 = structure.tables.find(x => x.pureName == 't1');
|
||||
expect(t1.indexes.length).toEqual(1);
|
||||
expect(t1.indexes[0].columns.length).toEqual(1);
|
||||
expect(t1.indexes[0].columns.length).toEqual(2);
|
||||
expect(t1.indexes[0].columns[0]).toEqual(expect.objectContaining({ columnName: 'val1' }));
|
||||
expect(t1.indexes[0].columns[1]).toEqual(expect.objectContaining({ columnName: 'id' }));
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
@@ -74,6 +74,7 @@ class Analyser extends DatabaseAnalyser {
|
||||
);
|
||||
|
||||
const viewTexts = await this.getViewTexts(views.rows.map(x => x.pureName));
|
||||
const indexes = await this.driver.query(this.pool, this.createQuery('indexes', ['tables']));
|
||||
|
||||
return {
|
||||
tables: tables.rows.map(table => ({
|
||||
@@ -83,6 +84,19 @@ class Analyser extends DatabaseAnalyser {
|
||||
columns: columns.rows.filter(col => col.pureName == table.pureName).map(getColumnInfo),
|
||||
primaryKey: DatabaseAnalyser.extractPrimaryKeys(table, pkColumns.rows),
|
||||
foreignKeys: DatabaseAnalyser.extractForeignKeys(table, fkColumns.rows),
|
||||
uniques: [],
|
||||
indexes: _.uniqBy(
|
||||
indexes.rows.filter(idx => idx.tableName == table.pureName),
|
||||
'constraintName'
|
||||
).map(idx => ({
|
||||
..._.pick(idx, ['constraintName', 'indexType']),
|
||||
isUnique: !idx.nonUnique,
|
||||
columns: indexes.rows
|
||||
.filter(col => col.tableName == idx.tableName && col.constraintName == idx.constraintName)
|
||||
.map(col => ({
|
||||
..._.pick(col, ['columnName']),
|
||||
})),
|
||||
})),
|
||||
})),
|
||||
views: views.rows.map(view => ({
|
||||
...view,
|
||||
|
||||
@@ -4,6 +4,7 @@ const primaryKeys = require('./primaryKeys');
|
||||
const foreignKeys = require('./foreignKeys');
|
||||
const tableModifications = require('./tableModifications');
|
||||
const views = require('./views');
|
||||
const indexes = require('./indexes');
|
||||
const programmables = require('./programmables');
|
||||
const procedureModifications = require('./procedureModifications');
|
||||
const functionModifications = require('./functionModifications');
|
||||
@@ -18,4 +19,5 @@ module.exports = {
|
||||
programmables,
|
||||
procedureModifications,
|
||||
functionModifications,
|
||||
indexes,
|
||||
};
|
||||
|
||||
11
plugins/dbgate-plugin-mysql/src/backend/sql/indexes.js
Normal file
11
plugins/dbgate-plugin-mysql/src/backend/sql/indexes.js
Normal file
@@ -0,0 +1,11 @@
|
||||
module.exports = `
|
||||
SELECT
|
||||
INDEX_NAME AS constraintName,
|
||||
TABLE_NAME AS tableName,
|
||||
COLUMN_NAME AS columnName,
|
||||
INDEX_TYPE AS indexType,
|
||||
NON_UNIQUE AS nonUnique
|
||||
FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = '#DATABASE#' AND TABLE_NAME =OBJECT_ID_CONDITION AND INDEX_NAME != 'PRIMARY' AND INDEX_NAME NOT LIKE 'IFK_%'
|
||||
ORDER BY SEQ_IN_INDEX
|
||||
`;
|
||||
Reference in New Issue
Block a user