From d75397d793c452af524f1d0857e1d3fe4f31f6e3 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Sun, 5 Sep 2021 09:38:38 +0200 Subject: [PATCH] sql dumper - create index --- .../__tests__/alter-processor.spec.js | 15 ++++- .../__tests__/table-create.spec.js | 63 +++++++++++++++++-- integration-tests/tools.js | 14 ----- packages/tools/src/SqlDumper.ts | 7 +-- 4 files changed, 75 insertions(+), 24 deletions(-) diff --git a/integration-tests/__tests__/alter-processor.spec.js b/integration-tests/__tests__/alter-processor.spec.js index d7ec6fba..4d1e1b7c 100644 --- a/integration-tests/__tests__/alter-processor.spec.js +++ b/integration-tests/__tests__/alter-processor.spec.js @@ -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)`); diff --git a/integration-tests/__tests__/table-create.spec.js b/integration-tests/__tests__/table-create.spec.js index 9d57ded8..492a9b46 100644 --- a/integration-tests/__tests__/table-create.spec.js +++ b/integration-tests/__tests__/table-create.spec.js @@ -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' }], + }, + ], + }); + }) + ); }); diff --git a/integration-tests/tools.js b/integration-tests/tools.js index 36fafe70..821ea7eb 100644 --- a/integration-tests/tools.js +++ b/integration-tests/tools.js @@ -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, }; diff --git a/packages/tools/src/SqlDumper.ts b/packages/tools/src/SqlDumper.ts index acb80a37..ddd52091 100644 --- a/packages/tools/src/SqlDumper.ts +++ b/packages/tools/src/SqlDumper.ts @@ -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) {