1
- const mysql = require ( 'mysql' ) ;
1
+ /**
2
+ * @type {import('mysql2/promise.d.ts') }
3
+ */
4
+ const mysql = require ( 'mysql2/promise' ) ;
2
5
const monitor = require ( './Monitor' ) . getInstance ( ) ;
3
6
const { Snowflake} = require ( 'discord.js' ) ;
4
7
@@ -39,7 +42,7 @@ class Database {
39
42
if ( this . con !== null ) {
40
43
return resolve ( ) ;
41
44
}
42
- this . waiting . push ( [ resolve , reject ] ) ;
45
+ this . waiting . push ( { resolve, reject} ) ;
43
46
} ) ;
44
47
}
45
48
@@ -48,23 +51,17 @@ class Database {
48
51
*
49
52
* @private
50
53
*/
51
- _connect ( ) {
52
- let newCon = mysql . createConnection ( this . options ) ;
53
- newCon . on ( 'error' , ( err ) => {
54
- newCon . end ( ) ;
55
- this . _handleConnectionError ( err ) ;
56
- } ) ;
57
- newCon . connect ( ( err ) => {
58
- if ( err ) {
59
- newCon . end ( ) ;
60
- return this . _handleConnectionError ( err ) ;
61
- }
62
- this . con = newCon ;
63
- for ( let w of this . waiting ) {
64
- w [ 0 ] ( ) ;
54
+ async _connect ( ) {
55
+ try {
56
+ this . con = await mysql . createConnection ( this . options ) ;
57
+ for ( let waiting of this . waiting ) {
58
+ waiting . resolve ( ) ;
65
59
}
66
60
this . waiting = [ ] ;
67
- } ) ;
61
+ }
62
+ catch ( error ) {
63
+ return this . _handleConnectionError ( error ) ;
64
+ }
68
65
}
69
66
70
67
/**
@@ -74,15 +71,16 @@ class Database {
74
71
* @private
75
72
*/
76
73
_handleConnectionError ( err ) {
74
+ console . error ( 'A fatal database error occurred' , err ) ;
77
75
monitor . error ( 'A fatal database error occurred' , err ) ;
78
76
if ( err . code === 'ER_ACCESS_DENIED_ERROR' ) {
79
77
console . error ( 'Access to database denied. Make sure your config and database are set up correctly!' ) ;
80
78
process . exit ( 1 ) ;
81
79
}
82
80
83
81
this . con = null ;
84
- for ( let w of this . waiting ) {
85
- w [ 1 ] ( err ) ;
82
+ for ( let waiting of this . waiting ) {
83
+ waiting . reject ( err ) ;
86
84
}
87
85
this . waiting = [ ] ;
88
86
setTimeout ( this . _connect . bind ( this ) , 5000 ) ;
@@ -108,24 +106,9 @@ class Database {
108
106
* @param args
109
107
* @returns {Promise<Object[]> }
110
108
*/
111
- queryAll ( ...args ) {
112
- return new Promise ( ( resolve , reject ) => {
113
- this . waitForConnection ( )
114
- . then ( ( ) => {
115
- this . con . query ( ...args , ( err , res ) => {
116
- if ( err ) {
117
- if ( err . fatal ) {
118
- this . con . end ( ) ;
119
- this . _handleConnectionError ( err ) ;
120
- return this . queryAll ( ...args ) . then ( resolve ) . catch ( reject ) ;
121
- }
122
- return reject ( err ) ;
123
- }
124
- resolve ( res ) ;
125
- } ) ;
126
- } )
127
- . catch ( reject ) ;
128
- } ) ;
109
+ async queryAll ( ...args ) {
110
+ await this . waitForConnection ( ) ;
111
+ return ( await this . con . query ( ...args ) ) [ 0 ] ;
129
112
}
130
113
131
114
/**
@@ -135,7 +118,7 @@ class Database {
135
118
* @returns {Promise<Object|null> }
136
119
*/
137
120
async query ( ...args ) {
138
- return ( await this . queryAll ( ...args ) ) [ 0 ] || null ;
121
+ return ( await this . queryAll ( ...args ) ) [ 0 ] ?? null ;
139
122
}
140
123
141
124
/**
0 commit comments