1+ using System . Data . Common ;
2+ using DbExceptionClassifier . Common ;
3+
4+ #if POMELO
5+ using MySqlConnector ;
6+ namespace DbExceptionClassifier . MySQL . Pomelo ;
7+ #else
8+ using MySql . Data . MySqlClient ;
9+ namespace DbExceptionClassifier . MySQL ;
10+ #endif
11+
12+
13+ public class MySQLExceptionClassifier : IDbExceptionClassifier
14+ {
15+ private static MySqlErrorCode GetErrorCode ( DbException dbException )
16+ {
17+ if ( dbException is not MySqlException mySqlException )
18+ {
19+ return MySqlErrorCode . None ;
20+ }
21+
22+ #if POMELO
23+ return mySqlException . ErrorCode ;
24+ #else
25+ return ( MySqlErrorCode ) mySqlException . Number ;
26+ #endif
27+ }
28+
29+ public bool IsReferenceConstraintError ( DbException exception )
30+ {
31+ var errorCode = GetErrorCode ( exception ) ;
32+
33+ return errorCode is MySqlErrorCode . NoReferencedRow or
34+ MySqlErrorCode . RowIsReferenced or
35+ MySqlErrorCode . NoReferencedRow2 or
36+ MySqlErrorCode . RowIsReferenced2 ;
37+ }
38+
39+ public bool IsCannotInsertNullError ( DbException exception )
40+ {
41+ var errorCode = GetErrorCode ( exception ) ;
42+ return errorCode == MySqlErrorCode . ColumnCannotBeNull ;
43+ }
44+
45+ public bool IsNumericOverflowError ( DbException exception )
46+ {
47+ var errorCode = GetErrorCode ( exception ) ;
48+ return errorCode == MySqlErrorCode . WarningDataOutOfRange ;
49+ }
50+
51+ public bool IsUniqueConstraintError ( DbException exception )
52+ {
53+ var errorCode = GetErrorCode ( exception ) ;
54+ return errorCode == MySqlErrorCode . DuplicateKeyEntry ;
55+ }
56+
57+ public bool IsMaxLengthExceededError ( DbException exception )
58+ {
59+ var errorCode = GetErrorCode ( exception ) ;
60+ return errorCode == MySqlErrorCode . DataTooLong ;
61+ }
62+ }
0 commit comments