@@ -24,6 +24,8 @@ export class MySQLErrorHandler implements ErrorHandler {
2424 private unexpectedError : Error | null = null ;
2525 protected static readonly SYNTAX_ERROR_CODES = [ "42000" , "42S02" ] ;
2626 protected static readonly SYNTAX_ERROR_MESSAGE = "You have an error in your SQL syntax" ;
27+ protected isNoOpListenerAttached = false ;
28+ protected isTrackingListenerAttached = false ;
2729
2830 protected noOpListener ( error : any ) {
2931 // Ignore the received error.
@@ -80,27 +82,32 @@ export class MySQLErrorHandler implements ErrorHandler {
8082 }
8183
8284 attachErrorListener ( clientWrapper : ClientWrapper | undefined ) : void {
83- if ( ! clientWrapper || ! clientWrapper . client ) {
85+ if ( ! clientWrapper || ! clientWrapper . client || this . isTrackingListenerAttached ) {
8486 return ;
8587 }
8688 this . unexpectedError = null ;
87- clientWrapper . client . removeListener ( "error" , this . noOpListener ) ;
88- clientWrapper . client . on ( "error" , this . trackingListener ) ;
89+ clientWrapper . client . connection . removeListener ( "error" , this . noOpListener ) ;
90+ this . isNoOpListenerAttached = false ;
91+ clientWrapper . client . connection . on ( "error" , this . trackingListener ) ;
92+ this . isTrackingListenerAttached = true ;
8993 }
9094
9195 attachNoOpErrorListener ( clientWrapper : ClientWrapper | undefined ) : void {
92- if ( ! clientWrapper || ! clientWrapper . client ) {
96+ if ( ! clientWrapper || ! clientWrapper . client || this . isNoOpListenerAttached ) {
9397 return ;
9498 }
95- clientWrapper . client . removeListener ( "error" , this . trackingListener ) ;
96- clientWrapper . client . on ( "error" , this . noOpListener ) ;
99+ clientWrapper . client . connection . removeListener ( "error" , this . trackingListener ) ;
100+ this . isTrackingListenerAttached = false ;
101+ clientWrapper . client . connection . on ( "error" , this . noOpListener ) ;
102+ this . isNoOpListenerAttached = true ;
97103 }
98104
99105 removeErrorListener ( clientWrapper : ClientWrapper | undefined ) : void {
100106 if ( ! clientWrapper || ! clientWrapper . client ) {
101107 return ;
102108 }
103109
104- clientWrapper . client . removeListener ( "error" , this . trackingListener ) ;
110+ clientWrapper . client . connection . removeListener ( "error" , this . trackingListener ) ;
111+ this . isTrackingListenerAttached = false ;
105112 }
106113}
0 commit comments