Bugfix - don't rely on use database

Noah Zalev committed May 1, 2021 at 18:41 UTC b8c56230410b0f60c836edb16ec534831df813ae
1 file changed +50 -30
db.js
+50 -30
@@ -438,37 +438,8 @@ module.exports.CreateDB = function (parent, func) {
438 obj.dbRecordsDecryptKey = parent.crypto.createHash('sha384').update(parent.args.dbrecordsdecryptkey).digest('raw').slice(0, 32);
439 }
440
441 - if (parent.args.mariadb || parent.args.mysql) {
442 - var connectinArgs = (parent.args.mariadb) ? parent.args.mariadb : parent.args.mysql;
443 - var dbname = (connectinArgs.database != null) ? connectinArgs.database : 'meshcentral';
444 -
445 - // Including the db name in the connection obj will cause a connection failure if it does not exist
446 - var connectionObject = Clone(connectinArgs);
447 - delete connectionObject.database;
448 -
449 - try {
450 - if (connectinArgs.ssl) {
451 - if (connectinArgs.ssl.cacertpath) { connectionObject.ssl.ca = [require('fs').readFileSync(connectinArgs.ssl.cacertpath, 'utf8')]; }
452 - if (connectinArgs.ssl.clientcertpath) { connectionObject.ssl.cert = [require('fs').readFileSync(connectinArgs.ssl.clientcertpath, 'utf8')]; }
453 - if (connectinArgs.ssl.clientkeypath) { connectionObject.ssl.key = [require('fs').readFileSync(connectinArgs.ssl.clientkeypath, 'utf8')]; }
454 - }
455 - } catch (ex) {
456 - console.log('Error loading SQL Connector certificate: ' + ex);
457 - process.exit();
458 - }
441
460 - if (parent.args.mariadb) {
461 - // Use MariaDB
462 - obj.databaseType = 4;
463 - Datastore = require('mariadb').createPool(connectionObject);
464 - } else if (parent.args.mysql) {
465 - // Use MySQL
466 - Datastore = require('mysql').createConnection(connectionObject);
467 - obj.databaseType = 5;
468 - }
469 - sqlDbQuery('CREATE DATABASE IF NOT EXISTS ' + dbname);
470 -
471 - // Set the default database for the rest of this connections lifetime
442 + function createTablesIfNotExist(dbname) {
443 var useDatabase = 'USE ' + dbname;
444 sqlDbQuery(useDatabase, null, function (err, docs) {
445 if (err != null) {
@@ -503,6 +474,55 @@ module.exports.CreateDB = function (parent, func) {
474 });
475 }
476 });
477 + }
478 +
479 + if (parent.args.mariadb || parent.args.mysql) {
480 + var connectinArgs = (parent.args.mariadb) ? parent.args.mariadb : parent.args.mysql;
481 + var dbname = (connectinArgs.database != null) ? connectinArgs.database : 'meshcentral';
482 +
483 + // Including the db name in the connection obj will cause a connection failure if it does not exist
484 + var connectionObject = Clone(connectinArgs);
485 + delete connectionObject.database;
486 +
487 + try {
488 + if (connectinArgs.ssl) {
489 + if (connectinArgs.ssl.cacertpath) { connectionObject.ssl.ca = [require('fs').readFileSync(connectinArgs.ssl.cacertpath, 'utf8')]; }
490 + if (connectinArgs.ssl.clientcertpath) { connectionObject.ssl.cert = [require('fs').readFileSync(connectinArgs.ssl.clientcertpath, 'utf8')]; }
491 + if (connectinArgs.ssl.clientkeypath) { connectionObject.ssl.key = [require('fs').readFileSync(connectinArgs.ssl.clientkeypath, 'utf8')]; }
492 + }
493 + } catch (ex) {
494 + console.log('Error loading SQL Connector certificate: ' + ex);
495 + process.exit();
496 + }
497 +
498 + if (parent.args.mariadb) {
499 + // Use MariaDB
500 + obj.databaseType = 4;
501 + var tempDatastore = require('mariadb').createPool(connectionObject);
502 + tempDatastore.getConnection().then(function (conn) {
503 + conn.query('CREATE DATABASE IF NOT EXISTS ' + dbname).then(function (result) {
504 + conn.release();
505 + }).catch(function (ex) { console.log('Auto-create database failed: ' + ex); });
506 + }).catch(function (ex) { console.log('Auto-create database failed: ' + ex); });
507 + setTimeout(function () { tempDatastore.end(); }, 2000);
508 +
509 + connectionObject.database = dbname;
510 + Datastore = require('mariadb').createPool(connectionObject);
511 + createTablesIfNotExist(dbname);
512 + } else if (parent.args.mysql) {
513 + // Use MySQL
514 + obj.databaseType = 5;
515 + var tempDatastore = require('mysql').createConnection(connectionObject);
516 + tempDatastore.query('CREATE DATABASE IF NOT EXISTS ' + dbname, function (error) {
517 + if (error != null) {
518 + console.log('Auto-create database failed: ' + error);
519 + }
520 + connectionObject.database = dbname;
521 + Datastore = require('mysql').createConnection(connectionObject);
522 + createTablesIfNotExist(dbname);
523 + });
524 + setTimeout(function () { tempDatastore.end(); }, 2000);
525 + }
526 } else if (parent.args.mongodb) {
527 // Use MongoDB
528 obj.databaseType = 3;