diff --git a/lib/db/mysql.js b/lib/db/mysql.js index 3657ff36e8f97bb9032d3516324f313b69523565..78749dac678532a13d1f2976ea278a888c41be41 100644 --- a/lib/db/mysql.js +++ b/lib/db/mysql.js @@ -118,9 +118,6 @@ exports.open = function(cfg, cb) { if (options[param] === undefined) delete options[param]; }); - // create the client - client = mysql.createClient(options); - // let's figure out the database name var database = cfg.database; if (!database) database = "browserid"; @@ -129,15 +126,28 @@ exports.open = function(cfg, cb) { // that we should drop the database on close, do it if (database !== 'browserid' && cfg.drop_on_close) drop_on_close = database; + // create the client + function doConnect() { + logger.debug("connecting to database"); + options.database = database; + client = mysql.createClient(options); + client.ping(function(err) { + logger.debug("connection to database " + (err ? ("fails: " + err) : "established")); + cb(err); + }); + } + // now create the databse if (cfg.create_schema) { - client.query("CREATE DATABASE IF NOT EXISTS " + database, function(err) { + logger.debug("creating database and tables if required"); + var createClient = mysql.createClient(options); + createClient.query("CREATE DATABASE IF NOT EXISTS " + database, function(err) { if (err) { logUnexpectedError(err); cb(err); return; } - client.useDatabase(database, function(err) { + createClient.useDatabase(database, function(err) { if (err) { logUnexpectedError(err); cb(err); @@ -147,7 +157,7 @@ exports.open = function(cfg, cb) { // now create tables function createNextTable(i) { if (i < schemas.length) { - client.query(schemas[i], function(err) { + createClient.query(schemas[i], function(err) { if (err) { logUnexpectedError(err); cb(err); @@ -156,13 +166,22 @@ exports.open = function(cfg, cb) { } }); } else { - cb(); + createClient.end(function(err) { + if (err) { + logUnexpectedError(err); + cb(err); + } else { + doConnect(); + } + }); } } createNextTable(0); }); }); - }; + } else { + doConnect(); + } }; exports.close = function(cb) {