1
- /**
2
- * @type {import('mysql2/promise.d.ts') }
3
- */
4
1
const mysql = require ( 'mysql2/promise' ) ;
5
2
const monitor = require ( './Monitor' ) . getInstance ( ) ;
6
3
const { Snowflake} = require ( 'discord.js' ) ;
@@ -12,6 +9,11 @@ class Database {
12
9
*/
13
10
static #instance;
14
11
12
+ /**
13
+ * @type {import("mysql2").Connection }
14
+ */
15
+ con ;
16
+
15
17
/**
16
18
* Database constructor
17
19
*
@@ -54,13 +56,26 @@ class Database {
54
56
async _connect ( ) {
55
57
try {
56
58
this . con = await mysql . createConnection ( this . options ) ;
59
+
60
+ this . con . on ( 'error' , this . #handleConnectionError. bind ( this ) ) ;
61
+
57
62
for ( let waiting of this . waiting ) {
58
63
waiting . resolve ( ) ;
59
64
}
60
65
this . waiting = [ ] ;
61
66
}
62
67
catch ( error ) {
63
- return this . _handleConnectionError ( error ) ;
68
+ return this . #handleFatalError( error ) ;
69
+ }
70
+ }
71
+
72
+ #handleConnectionError( err ) {
73
+ if ( err . fatal ) {
74
+ this . #handleFatalError( err ) ;
75
+ }
76
+ else {
77
+ console . error ( 'A database error occurred' , err ) ;
78
+ monitor . error ( 'A database error occurred' , err ) ;
64
79
}
65
80
}
66
81
@@ -70,7 +85,7 @@ class Database {
70
85
* @param err
71
86
* @private
72
87
*/
73
- _handleConnectionError ( err ) {
88
+ #handleFatalError ( err ) {
74
89
console . error ( 'A fatal database error occurred' , err ) ;
75
90
monitor . error ( 'A fatal database error occurred' , err ) ;
76
91
if ( err . code === 'ER_ACCESS_DENIED_ERROR' ) {
@@ -79,10 +94,6 @@ class Database {
79
94
}
80
95
81
96
this . con = null ;
82
- for ( let waiting of this . waiting ) {
83
- waiting . reject ( err ) ;
84
- }
85
- this . waiting = [ ] ;
86
97
setTimeout ( this . _connect . bind ( this ) , 5000 ) ;
87
98
}
88
99
0 commit comments