@@ -21,11 +21,27 @@ public enum Result: Error {
2121    /// - statement: the statement which produced the error
2222    case  error( message:  String ,  code:  Int32 ,  statement:  Statement ? ) 
2323
24+     /// Represents a SQLite specific [extended error code] (https://sqlite.org/rescode.html#primary_result_codes_versus_extended_result_codes)
25+     ///
26+     /// - message: English-language text that describes the error
27+     ///
28+     /// - extendedCode: SQLite [extended error code](https://sqlite.org/rescode.html#extended_result_code_list)
29+     ///
30+     /// - statement: the statement which produced the error
31+     case  extendedError( message:  String ,  extendedCode:  Int32 ,  statement:  Statement ? ) 
32+ 
2433    init ? ( errorCode:  Int32 ,  connection:  Connection ,  statement:  Statement ? =  nil )  { 
2534        guard  !Result. successCodes. contains ( errorCode)  else  {  return  nil  } 
2635
2736        let  message  =  String ( cString:  sqlite3_errmsg ( connection. handle) ) 
28-         self  =  . error( message:  message,  code:  errorCode,  statement:  statement) 
37+ 
38+         guard  connection. usesExtendedErrorCodes else  { 
39+             self  =  . error( message:  message,  code:  errorCode,  statement:  statement) 
40+             return 
41+         } 
42+ 
43+         let  extendedErrorCode  =  sqlite3_extended_errcode ( connection. handle) 
44+         self  =  . extendedError( message:  message,  extendedCode:  extendedErrorCode,  statement:  statement) 
2945    } 
3046
3147} 
@@ -40,6 +56,12 @@ extension Result: CustomStringConvertible {
4056            }  else  { 
4157                return  " \( message)  (code:  \( errorCode) ) " 
4258            } 
59+         case  let  . extendedError( message,   extendedCode,  statement) : 
60+             if  let  statement =  statement { 
61+                 return  " \( message)  ( \( statement) ) (extended code:  \( extendedCode) ) " 
62+             }  else  { 
63+                 return  " \( message)  (extended code:  \( extendedCode) ) " 
64+             } 
4365        } 
4466    } 
4567} 
0 commit comments