sql dumper - create index

This commit is contained in:
Jan Prochazka 2021-09-05 09:38:38 +02:00
parent 5b58ed9c26
commit d75397d793
4 changed files with 75 additions and 24 deletions

View File

@ -1,10 +1,23 @@
const stableStringify = require('json-stable-stringify');
const _ = require('lodash');
const fp = require('lodash/fp');
const uuidv1 = require('uuid/v1');
const { testWrapper, checkTableStructure } = require('../tools');
const { testWrapper } = require('../tools');
const engines = require('../engines');
const { getAlterTableScript, extendDatabaseInfo, generateDbPairingId } = require('dbgate-tools');
function pickImportantTableInfo(table) {
return {
pureName: table.pureName,
columns: table.columns.map(fp.pick(['columnName', 'notNull', 'autoIncrement'])),
};
}
function checkTableStructure(t1, t2) {
// expect(t1.pureName).toEqual(t2.pureName)
expect(pickImportantTableInfo(t1)).toEqual(pickImportantTableInfo(t2));
}
async function testTableDiff(conn, driver, mangle) {
await driver.query(conn, `create table t0 (id int not null primary key)`);

View File

@ -1,8 +1,32 @@
const _ = require('lodash');
const fp = require('lodash/fp');
const engines = require('../engines');
const { testWrapper, checkTableStructure } = require('../tools');
const { testWrapper } = require('../tools');
const { extendDatabaseInfo } = require('dbgate-tools');
function createExpector(value) {
return _.cloneDeepWith(value, x => {
if (_.isPlainObject(x)) {
return expect.objectContaining(_.mapValues(x, y => createExpector(y)));
}
});
}
function omitTableSpecificInfo(table) {
return {
...table,
columns: table.columns.map(fp.omit(['dataType'])),
};
}
function checkTableStructure2(t1, t2) {
// expect(t1.pureName).toEqual(t2.pureName)
expect(t2).toEqual(createExpector(omitTableSpecificInfo(t1)));
}
async function testTableCreate(conn, driver, table) {
await driver.query(conn, `create table t0 (id int not null primary key)`);
const dmp = driver.createDumper();
const table1 = {
...table,
@ -11,17 +35,17 @@ async function testTableCreate(conn, driver, table) {
dmp.createTable(table1);
console.log('RUNNING CREATE SQL', driver.engine, ':', dmp.s);
await driver.query(conn, dmp.s);
await driver.script(conn, dmp.s);
const db = extendDatabaseInfo(await driver.analyseFull(conn));
const table2 = db.tables.find(x => x.pureName == 'tested');
checkTableStructure(table1, table2);
checkTableStructure2(table1, table2);
}
describe('Table create', () => {
test.each(engines.map(engine => [engine.label, engine]))(
'Table structure - full analysis - %s',
'Simple table - %s',
testWrapper(async (conn, driver, engine) => {
await testTableCreate(conn, driver, {
columns: [
@ -29,7 +53,6 @@ describe('Table create', () => {
columnName: 'col1',
dataType: 'int',
notNull: true,
autoIncrement: false,
},
],
primaryKey: {
@ -38,4 +61,34 @@ describe('Table create', () => {
});
})
);
test.each(engines.map(engine => [engine.label, engine]))(
'Table with index - %s',
testWrapper(async (conn, driver, engine) => {
await testTableCreate(conn, driver, {
columns: [
{
columnName: 'col1',
dataType: 'int',
notNull: true,
},
{
columnName: 'col2',
dataType: 'int',
notNull: true,
},
],
primaryKey: {
columns: [{ columnName: 'col1' }],
},
indexes: [
{
constraintName: 'ix1',
pureName: 'tested',
columns: [{ columnName: 'col2' }],
},
],
});
})
);
});

View File

@ -1,7 +1,6 @@
global.DBGATE_TOOLS = require('dbgate-tools');
const requireEngineDriver = require('dbgate-api/src/utility/requireEngineDriver');
const crypto = require('crypto');
const fp = require('lodash/fp');
function randomDbName() {
const generatedKey = crypto.randomBytes(6);
@ -56,22 +55,9 @@ const testWrapper = body => async (label, ...other) => {
}
};
function pickImportantTableInfo(table) {
return {
pureName: table.pureName,
columns: table.columns.map(fp.pick(['columnName', 'notNull', 'autoIncrement'])),
};
}
function checkTableStructure(t1, t2) {
// expect(t1.pureName).toEqual(t2.pureName)
expect(pickImportantTableInfo(t1)).toEqual(pickImportantTableInfo(t2));
}
module.exports = {
randomDbName,
connect,
extractConnection,
testWrapper,
checkTableStructure,
};

View File

@ -249,10 +249,9 @@ export class SqlDumper implements AlterProcessor {
// }
this.put('&<&n)');
this.endCommand();
// foreach (var ix in table.Indexes)
// {
// CreateIndex(ix);
// }
for (const ix of table.indexes) {
this.createIndex(ix);
}
}
createForeignKeyFore(fk: ForeignKeyInfo) {