diff --git a/bin/track-db.js b/bin/track-db.js index b001ec9..ce507df 100755 --- a/bin/track-db.js +++ b/bin/track-db.js @@ -27,7 +27,7 @@ Usage: Options: --clean Remove all objects before execution. - -c --client Kind of Database Client [sqlite, postgres; default sqlite] + -c --client Kind of Database Client [sqlite, postgres, mysql; default sqlite] -r --result Which results will be displayed [last, full; default last] -l --limit Maximum row count that will be displayed [default 10] `; diff --git a/lib/connection.js b/lib/connection.js index ee6d3ef..33d2bdf 100644 --- a/lib/connection.js +++ b/lib/connection.js @@ -235,9 +235,11 @@ class MySQLCassette { if (options && options.clean) { try { let tables = await conn.raw("SHOW TABLES"); + await conn.raw("SET foreign_key_checks = 0"); for (let table of tables[0]) { - await conn.raw(`DROP TABLE IF EXISTS ${table.Tables_in_track} CASCADE`); + await conn.raw(`DROP TABLE IF EXISTS ${table.Tables_in_track}`); } + await conn.raw("SET foreign_key_checks = 1"); } catch (e2) { console.error(e2); } } return conn; @@ -267,7 +269,7 @@ class MySQLCassette { `; } updateAutoIncrementSql(table, column) { - return `ALTER TABLE ${table} AUTO_INCREMENT = ? + 1`; + return `ALTER TABLE ${table} AUTO_INCREMENT = ?`; } lastValueSql(table, idCol) { return `SELECT * FROM ${table} WHERE ${idCol} = LAST_INSERT_ID()`; @@ -275,13 +277,14 @@ class MySQLCassette { async listFk(table, conn) { return await conn.query(` SELECT - kcu.column_name AS column, - ccu.table_name AS foreign_table, - ccu.column_name AS foreign_column - FROM information_schema.table_constraints AS tc - INNER JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name - INNER JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name - WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = '${table}' + COLUMN_NAME AS \`column\`, + REFERENCED_TABLE_NAME AS foreign_table, + REFERENCED_COLUMN_NAME AS foreign_column + FROM information_schema.KEY_COLUMN_USAGE + WHERE + TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = '${table}' + AND REFERENCED_TABLE_NAME IS NOT NULL `); } errorOf(e) { @@ -591,6 +594,9 @@ class Connection { async updateAutoIncrement(table, column, count) { const sql = this._cassette.updateAutoIncrementSql(table, column); + if (this._cassette instanceof MySQLCassette) { + count = (count || 0) + 1; + } return await this.query(sql, [count]); } diff --git a/package-lock.json b/package-lock.json index ca51642..4880865 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "track-db-test-library", - "version": "2.6.0-rc7", + "version": "2.6.0-rc8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "track-db-test-library", - "version": "2.6.0-rc7", + "version": "2.6.0-rc8", "license": "MIT", "dependencies": { "csvjson": "^5.1.0", diff --git a/package.json b/package.json index 76978a9..40d438c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "track-db-test-library", - "version": "2.6.0-rc7", + "version": "2.6.0-rc8", "description": "Test utility for Track database challenges", "main": "index.js", "scripts": {