Skip to content

Commit 6b8f85d

Browse files
author
Eric Hutchins
committed
Make mysql work for databases that are not all lowercase
1 parent 06199ac commit 6b8f85d

2 files changed

Lines changed: 43 additions & 41 deletions

File tree

lib/database-cleaner.js

Lines changed: 34 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -47,45 +47,50 @@ var DatabaseCleaner = module.exports = function(type, config) {
4747
};
4848

4949
cleaner['mysql'] = function(db, callback) {
50-
db.query('show tables', function(err, tables) {
51-
if (err) return callback(err);
50+
db.query('show global variables like "lower_case_table_names"', function(err, values) {
5251

53-
var database = db.config.connectionConfig ?
54-
db.config.connectionConfig.database : db.config.database;
52+
var lowerCaseTableNames = values[0]['Value'] === 2;
5553

56-
var count = 0;
57-
var length = tables.length;
58-
var tableName = 'Tables_in_' + database;
59-
var skippedTables = config.mysql.skipTables;
60-
var strategy = config.mysql.strategy || 'deletion';
61-
if (strategy !== 'deletion' && strategy !== 'truncation') {
62-
return callback(new Error('Invalid deletion strategy: ' + strategy));
63-
}
54+
db.query('show tables', function(err, tables) {
55+
if (err) return callback(err);
6456

65-
if(length === 0) {
66-
// The database is empty
67-
return callback();
68-
}
57+
var database = db.config.connectionConfig ?
58+
db.config.connectionConfig.database : db.config.database;
6959

70-
tables.forEach(function(table) {
71-
if (skippedTables.indexOf(table[tableName]) === -1) {
72-
var statement = strategy === 'deletion' ? 'DELETE FROM ' : 'TRUNCATE TABLE '
73-
db.query(statement + table[tableName], function(err) {
74-
if(err) {
75-
return callback(err);
76-
}
60+
var count = 0;
61+
var length = tables.length;
62+
var tableName = 'Tables_in_' + (lowerCaseTableNames ? database.toLowerCase() : database);
63+
var skippedTables = config.mysql.skipTables;
64+
var strategy = config.mysql.strategy || 'deletion';
65+
if (strategy !== 'deletion' && strategy !== 'truncation') {
66+
return callback(new Error('Invalid deletion strategy: ' + strategy));
67+
}
68+
69+
if(length === 0) {
70+
// The database is empty
71+
return callback();
72+
}
73+
74+
tables.forEach(function(table) {
75+
if (skippedTables.indexOf(table[tableName]) === -1) {
76+
var statement = strategy === 'deletion' ? 'DELETE FROM ' : 'TRUNCATE TABLE '
77+
db.query(statement + table[tableName], function(err) {
78+
if(err) {
79+
return callback(err);
80+
}
7781

82+
count++;
83+
if (count >= length) {
84+
callback();
85+
}
86+
});
87+
} else {
7888
count++;
7989
if (count >= length) {
8090
callback();
8191
}
82-
});
83-
} else {
84-
count++;
85-
if (count >= length) {
86-
callback();
8792
}
88-
}
93+
});
8994
});
9095
});
9196
};

test/mysql.test.js

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,22 @@ var should = require('should'),
44
async = require('async'),
55
databaseCleaner;
66

7+
var config = {
8+
host: process.env.MYSQL_HOST || 'localhost',
9+
user: 'root',
10+
database: 'database_cleaner'
11+
}
712
var mysql = require('mysql'),
8-
client = new mysql.createConnection({
9-
host: process.env.MYSQL_HOST || 'localhost',
10-
user: 'root',
11-
database: 'database_cleaner'
12-
}),
13-
pool = new mysql.createPool({
14-
host: process.env.MYSQL_HOST || 'localhost',
15-
user: 'root',
16-
database: 'database_cleaner'
17-
});
13+
client = new mysql.createConnection(config),
14+
pool = new mysql.createPool(config);
1815

1916
var queryClient = _.curry(function(query, values, next) {
2017
client.query(query, values, next);
2118
});
2219

2320
describe('mysql', function() {
2421
beforeEach(function(done) {
25-
client.query('CREATE DATABASE database_cleaner', function(err) {
22+
client.query('CREATE DATABASE ' + config.database, function(err) {
2623
if (err && err.number != mysql.ERROR_DB_CREATE_EXISTS) {
2724
throw err;
2825
}
@@ -145,7 +142,7 @@ describe('mysql', function() {
145142

146143
describe('mysql empty', function() {
147144
beforeEach(function(done) {
148-
client.query('CREATE DATABASE database_cleaner', function(err) {
145+
client.query('CREATE DATABASE ' + config.database, function(err) {
149146
if (err && err.number != mysql.ERROR_DB_CREATE_EXISTS) {
150147
throw err;
151148
}

0 commit comments

Comments
 (0)