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;