/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Other licenses:
* -----------------------------------------------------------------------------
* Commercial licenses for this work are available. These replace the above
* ASL 2.0 and offer limited warranties, support, maintenance, and commercial
* database integrations.
*
* For more information, please visit: http://www.jooq.org/licenses
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
package org.jooq.exception;
import static org.jooq.exception.SQLStateClass.C00_SUCCESSFUL_COMPLETION;
import static org.jooq.exception.SQLStateClass.C01_WARNING;
import static org.jooq.exception.SQLStateClass.C02_NO_DATA;
import static org.jooq.exception.SQLStateClass.C07_DYNAMIC_SQL_ERROR;
import static org.jooq.exception.SQLStateClass.C08_CONNECTION_EXCEPTION;
import static org.jooq.exception.SQLStateClass.C09_TRIGGERED_ACTION_EXCEPTION;
import static org.jooq.exception.SQLStateClass.C0A_FEATURE_NOT_SUPPORTED;
import static org.jooq.exception.SQLStateClass.C0D_INVALID_TARGET_TYPE_SPECIFICATION;
import static org.jooq.exception.SQLStateClass.C0E_INVALID_SCHEMA_NAME_LIST_SPECIFICATION;
import static org.jooq.exception.SQLStateClass.C0F_LOCATOR_EXCEPTION;
import static org.jooq.exception.SQLStateClass.C0L_INVALID_GRANTOR;
import static org.jooq.exception.SQLStateClass.C0M_INVALID_SQL_INVOKED_PROCEDURE_REFERENCE;
import static org.jooq.exception.SQLStateClass.C0P_INVALID_ROLE_SPECIFICATION;
import static org.jooq.exception.SQLStateClass.C0S_INVALID_TRANSFORM_GROUP_NAME_SPECIFICATION;
import static org.jooq.exception.SQLStateClass.C0T_TARGET_TABLE_DISAGREES_WITH_CURSOR_SPECIFICATION;
import static org.jooq.exception.SQLStateClass.C0U_ATTEMPT_TO_ASSIGN_TO_NON_UPDATABLE_COLUMN;
import static org.jooq.exception.SQLStateClass.C0V_ATTEMPT_TO_ASSIGN_TO_ORDERING_COLUMN;
import static org.jooq.exception.SQLStateClass.C0W_PROHIBITED_STATEMENT_ENCOUNTERED_DURING_TRIGGER_EXECUTION;
import static org.jooq.exception.SQLStateClass.C0Z_DIAGNOSTICS_EXCEPTION;
import static org.jooq.exception.SQLStateClass.C21_CARDINALITY_VIOLATION;
import static org.jooq.exception.SQLStateClass.C22_DATA_EXCEPTION;
import static org.jooq.exception.SQLStateClass.C23_INTEGRITY_CONSTRAINT_VIOLATION;
import static org.jooq.exception.SQLStateClass.C24_INVALID_CURSOR_STATE;
import static org.jooq.exception.SQLStateClass.C25_INVALID_TRANSACTION_STATE;
import static org.jooq.exception.SQLStateClass.C26_INVALID_SQL_STATEMENT_NAME;
import static org.jooq.exception.SQLStateClass.C27_TRIGGERED_DATA_CHANGE_VIOLATION;
import static org.jooq.exception.SQLStateClass.C28_INVALID_AUTHORIZATION_SPECIFICATION;
import static org.jooq.exception.SQLStateClass.C2B_DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST;
import static org.jooq.exception.SQLStateClass.C2C_INVALID_CHARACTER_SET_NAME;
import static org.jooq.exception.SQLStateClass.C2D_INVALID_TRANSACTION_TERMINATION;
import static org.jooq.exception.SQLStateClass.C2E_INVALID_CONNECTION_NAME;
import static org.jooq.exception.SQLStateClass.C2F_SQL_ROUTINE_EXCEPTION;
import static org.jooq.exception.SQLStateClass.C2H_INVALID_COLLATION_NAME;
import static org.jooq.exception.SQLStateClass.C30_INVALID_SQL_STATEMENT_IDENTIFIER;
import static org.jooq.exception.SQLStateClass.C33_INVALID_SQL_DESCRIPTOR_NAME;
import static org.jooq.exception.SQLStateClass.C34_INVALID_CURSOR_NAME;
import static org.jooq.exception.SQLStateClass.C35_INVALID_CONDITION_NUMBER;
import static org.jooq.exception.SQLStateClass.C36_CURSOR_SENSITIVITY_EXCEPTION;
import static org.jooq.exception.SQLStateClass.C38_EXTERNAL_ROUTINE_EXCEPTION;
import static org.jooq.exception.SQLStateClass.C39_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION;
import static org.jooq.exception.SQLStateClass.C3B_SAVEPOINT_EXCEPTION;
import static org.jooq.exception.SQLStateClass.C3C_AMBIGUOUS_CURSOR_NAME;
import static org.jooq.exception.SQLStateClass.C3D_INVALID_CATALOG_NAME;
import static org.jooq.exception.SQLStateClass.C3F_INVALID_SCHEMA_NAME;
import static org.jooq.exception.SQLStateClass.C40_TRANSACTION_ROLLBACK;
import static org.jooq.exception.SQLStateClass.C42_SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION;
import static org.jooq.exception.SQLStateClass.CHZ_REMOTE_DATABASE_ACCESS;
import java.util.HashMap;
import java.util.Map;
The subclass of the SQL state class as specified by the SQL standard, or by individual
vendors.
Class Description Subclass Description
00 Successful completion 000 No subclass
01 Warning 000 No subclass
01 Warning 001 Cursor operation conflict
01 Warning 002 Disconnect error
01 Warning 003 Null value eliminated in set function
01 Warning 004 String data, right truncation
01 Warning 005 Insufficient item descriptor areas
01 Warning 006 Privilege not revoked
01 Warning 007 Privilege not granted
01 Warning 009 Search condition too long for information schema
01 Warning 00A Query expression too long for information schema
01 Warning 00B Default value too long for information schema
01 Warning 00C Result sets returned
01 Warning 00D Additional result sets returned
01 Warning 00E Attempt to return too many result sets
01 Warning 00F Statement too long for information schema
01 Warning 012 Invalid number of conditions
01 Warning 02F Array data, right truncation
02 No data 000 No subclass
02 No data 001 No additional result sets returned
07 Dynamic SQL Error 000 No subclass
07 Dynamic SQL Error 001 Using clause does not match dynamic parameter specifications
07 Dynamic SQL Error 002 Using clause does not match target specifications
07 Dynamic SQL Error 003 Cursor specification cannot be executed
07 Dynamic SQL Error 004 Using clause required for dynamic parameters
07 Dynamic SQL Error 005 Prepared statement not a cursor specification
07 Dynamic SQL Error 006 Restricted data type attribute violation
07 Dynamic SQL Error 007 Using clause required for result fields
07 Dynamic SQL Error 008 Invalid descriptor count
07 Dynamic SQL Error 009 Invalid descriptor index
07 Dynamic SQL Error 00B Data type transform function violation
07 Dynamic SQL Error 00C Undefined DATA value
07 Dynamic SQL Error 00D Invalid DATA target
07 Dynamic SQL Error 00E Invalid LEVEL value
07 Dynamic SQL Error 00F Invalid DATETIME_INTERVAL_CODE
08 Connection exception 000 No subclass
08 Connection exception 001 SQL-client unable to establish SQL-connection
08 Connection exception 002 Connection name in use
08 Connection exception 003 Connection does not exist
08 Connection exception 004 SQL-server rejected establishment of SQL-connection
08 Connection exception 006 Connection failure
08 Connection exception 007 Transaction resolution unknown
09 Triggered action exception 000 No subclass
0A Feature not supported 000 No subclass
0A Feature not supported 001 Multiple server transactions
0D Invalid target type specification 000 No subclass
0E Invalid schema name list specification 000 No subclass
0F Locator exception 000 No subclass
0F Locator exception 001 Invalid specification
0L Invalid grantor 000 No subclass
0M Invalid SQL-invoked procedure reference 000 No subclass
0P Invalid role specification 000 No subclass
0S Invalid transform group name specification 000 No subclass
0T Target table disagrees with cursor specification 000 No subclass
0U Attempt to assign to non-updatable column 000 No subclass
0V Attempt to assign to ordering column 000 No subclass
0W Prohibited statement encountered during trigger execution 000 No subclass
0W Prohibited statement encountered during trigger execution 001 Modify table modified by data change delta table
0Z Diagnostics exception 000 No subclass
0Z Diagnostics exception 001 Maximum number of stacked diagnostics areas exceeded
21 Cardinality violation 000 No subclass
22 Data exception 000 No subclass
22 Data exception 001 String data, right truncation
22 Data exception 002 Null value, no indicator parameter
22 Data exception 003 Numeric value out of range
22 Data exception 004 Null value not allowed
22 Data exception 005 Error in assignment
22 Data exception 006 Invalid interval format
22 Data exception 007 Invalid datetime format
22 Data exception 008 Datetime field overflow
22 Data exception 009 Invalid time zone displacement value
22 Data exception 00B Escape character conflict
22 Data exception 00C Invalid use of escape character
22 Data exception 00D Invalid escape octet
22 Data exception 00E Null value in array target
22 Data exception 00F Zero-length character string
22 Data exception 00G Most specific type mismatch
22 Data exception 00H Sequence generator limit exceeded
22 Data exception 00P Interval value out of range
22 Data exception 00Q Multiset value overflow
22 Data exception 010 Invalid indicator parameter value
22 Data exception 011 Substring error
22 Data exception 012 Division by zero
22 Data exception 013 Invalid preceding or following size in window function
22 Data exception 014 Invalid argument for NTILE function
22 Data exception 015 Interval field overflow
22 Data exception 016 Invalid argument for NTH_VALUE function
22 Data exception 018 Invalid character value for cast
22 Data exception 019 Invalid escape character
22 Data exception 01B Invalid regular expression
22 Data exception 01C Null row not permitted in table
22 Data exception 01E Invalid argument for natural logarithm
22 Data exception 01F Invalid argument for power function
22 Data exception 01G Invalid argument for width bucket function
22 Data exception 01H Invalid row version
22 Data exception 01S Invalid XQuery regular expression
22 Data exception 01T Invalid XQuery option flag
22 Data exception 01U Attempt to replace a zero-length string
22 Data exception 01V Invalid XQuery replacement string
22 Data exception 01W Invalid row count in fetch first clause
22 Data exception 01X Invalid row count in result offset clause
22 Data exception 020 Invalid period value
22 Data exception 021 Character not in repertoire
22 Data exception 022 Indicator overflow
22 Data exception 023 Invalid parameter value
22 Data exception 024 Unterminated C string
22 Data exception 025 Invalid escape sequence
22 Data exception 026 String data, length mismatch
22 Data exception 027 Trim error
22 Data exception 029 Noncharacter in UCS string
22 Data exception 02D Null value substituted for mutator subject parameter
22 Data exception 02E Array element error
22 Data exception 02F Array data, right truncation
22 Data exception 02G Invalid repeat argument in sample clause
22 Data exception 02H Invalid sample size
23 Integrity constraint violation 000 No subclass
23 Integrity constraint violation 001 Restrict violation
24 Invalid cursor state 000 No subclass
25 Invalid transaction state 000 No subclass
25 Invalid transaction state 001 Active SQL-transaction
25 Invalid transaction state 002 Branch transaction already active
25 Invalid transaction state 003 Inappropriate access mode for branch transaction
25 Invalid transaction state 004 Inappropriate isolation level for branch transaction
25 Invalid transaction state 005 No active SQL-transaction for branch transaction
25 Invalid transaction state 006 Read-only SQL-transaction
25 Invalid transaction state 007 Schema and data statement mixing not supported
25 Invalid transaction state 008 Held cursor requires same isolation level
26 Invalid SQL statement name 000 No subclass
27 Triggered data change violation 000 No subclass
27 Triggered data change violation 001 Modify table modified by data change delta table
28 Invalid authorization specification 000 No subclass
2B Dependent privilege descriptors still exist 000 No subclass
2C Invalid character set name 000 No subclass
2C Invalid character set name 001 Cannot drop SQL-session default character set
2D Invalid transaction termination 000 No subclass
2E Invalid connection name 000 No subclass
2F SQL routine exception 000 No subclass
2F SQL routine exception 002 Modifying SQL-data not permitted
2F SQL routine exception 003 Prohibited SQL-statement attempted
2F SQL routine exception 004 Reading SQL-data not permitted
2F SQL routine exception 005 Function executed no return statement
2H Invalid collation name 000 No subclass
30 Invalid SQL statement identifier 000 No subclass
33 Invalid SQL descriptor name 000 No subclass
34 Invalid cursor name 000 No subclass
35 Invalid condition number 000 No subclass
36 Cursor sensitivity exception 000 No subclass
36 Cursor sensitivity exception 001 request rejected
36 Cursor sensitivity exception 002 request failed
38 External routine exception 000 No subclass
38 External routine exception 001 Containing SQL not permitted
38 External routine exception 002 Modifying SQL-data not permitted
38 External routine exception 003 Prohibited SQL-statement attempted
38 External routine exception 004 Reading SQL-data not permitted
39 External routine invocation exception 000 No subclass
39 External routine invocation exception 004 Null value not allowed
3B Savepoint exception 000 No subclass
3B Savepoint exception 001 Invalid specification
3B Savepoint exception 002 Too many
3C Ambiguous cursor name 000 No subclass
3D Invalid catalog name 000 No subclass
3F Invalid schema name 000 No subclass
40 Transaction rollback 000 No subclass
40 Transaction rollback 001 Serialization failure
40 Transaction rollback 002 Integrity constraint violation
40 Transaction rollback 003 Statement completion unknown
40 Transaction rollback 004 Triggered action exception
42 Syntax error or access rule violation 000 No subclass
44 With check option violation 000 No subclass
HZ Remote database access 000 No subclass
Author: Lukas Eder
/**
* The subclass of the SQL state class as specified by the SQL standard, or by individual
* vendors.
* <p>
* <table border="1">
* <tr><th>Class</th><th>Description</th><th>Subclass</th><th>Description</th></tr>
* <tr><td>00</td><td>Successful completion</td><td>000</td><td>No subclass</td></tr>
* <tr><td>01</td><td>Warning</td><td>000</td><td>No subclass</td></tr>
* <tr><td>01</td><td>Warning</td><td>001</td><td>Cursor operation conflict</td></tr>
* <tr><td>01</td><td>Warning</td><td>002</td><td>Disconnect error</td></tr>
* <tr><td>01</td><td>Warning</td><td>003</td><td>Null value eliminated in set function</td></tr>
* <tr><td>01</td><td>Warning</td><td>004</td><td>String data, right truncation</td></tr>
* <tr><td>01</td><td>Warning</td><td>005</td><td>Insufficient item descriptor areas</td></tr>
* <tr><td>01</td><td>Warning</td><td>006</td><td>Privilege not revoked</td></tr>
* <tr><td>01</td><td>Warning</td><td>007</td><td>Privilege not granted</td></tr>
* <tr><td>01</td><td>Warning</td><td>009</td><td>Search condition too long for information schema</td></tr>
* <tr><td>01</td><td>Warning</td><td>00A</td><td>Query expression too long for information schema</td></tr>
* <tr><td>01</td><td>Warning</td><td>00B</td><td>Default value too long for information schema</td></tr>
* <tr><td>01</td><td>Warning</td><td>00C</td><td>Result sets returned</td></tr>
* <tr><td>01</td><td>Warning</td><td>00D</td><td>Additional result sets returned</td></tr>
* <tr><td>01</td><td>Warning</td><td>00E</td><td>Attempt to return too many result sets</td></tr>
* <tr><td>01</td><td>Warning</td><td>00F</td><td>Statement too long for information schema</td></tr>
* <tr><td>01</td><td>Warning</td><td>012</td><td>Invalid number of conditions</td></tr>
* <tr><td>01</td><td>Warning</td><td>02F</td><td>Array data, right truncation</td></tr>
* <tr><td>02</td><td>No data</td><td>000</td><td>No subclass</td></tr>
* <tr><td>02</td><td>No data</td><td>001</td><td>No additional result sets returned</td></tr>
* <tr><td>07</td><td>Dynamic SQL Error</td><td>000</td><td>No subclass</td></tr>
* <tr><td>07</td><td>Dynamic SQL Error</td><td>001</td><td>Using clause does not match dynamic parameter specifications</td></tr>
* <tr><td>07</td><td>Dynamic SQL Error</td><td>002</td><td>Using clause does not match target specifications</td></tr>
* <tr><td>07</td><td>Dynamic SQL Error</td><td>003</td><td>Cursor specification cannot be executed</td></tr>
* <tr><td>07</td><td>Dynamic SQL Error</td><td>004</td><td>Using clause required for dynamic parameters</td></tr>
* <tr><td>07</td><td>Dynamic SQL Error</td><td>005</td><td>Prepared statement not a cursor specification</td></tr>
* <tr><td>07</td><td>Dynamic SQL Error</td><td>006</td><td>Restricted data type attribute violation</td></tr>
* <tr><td>07</td><td>Dynamic SQL Error</td><td>007</td><td>Using clause required for result fields</td></tr>
* <tr><td>07</td><td>Dynamic SQL Error</td><td>008</td><td>Invalid descriptor count</td></tr>
* <tr><td>07</td><td>Dynamic SQL Error</td><td>009</td><td>Invalid descriptor index</td></tr>
* <tr><td>07</td><td>Dynamic SQL Error</td><td>00B</td><td>Data type transform function violation</td></tr>
* <tr><td>07</td><td>Dynamic SQL Error</td><td>00C</td><td>Undefined DATA value</td></tr>
* <tr><td>07</td><td>Dynamic SQL Error</td><td>00D</td><td>Invalid DATA target</td></tr>
* <tr><td>07</td><td>Dynamic SQL Error</td><td>00E</td><td>Invalid LEVEL value</td></tr>
* <tr><td>07</td><td>Dynamic SQL Error</td><td>00F</td><td>Invalid DATETIME_INTERVAL_CODE</td></tr>
* <tr><td>08</td><td>Connection exception</td><td>000</td><td>No subclass</td></tr>
* <tr><td>08</td><td>Connection exception</td><td>001</td><td>SQL-client unable to establish SQL-connection</td></tr>
* <tr><td>08</td><td>Connection exception</td><td>002</td><td>Connection name in use</td></tr>
* <tr><td>08</td><td>Connection exception</td><td>003</td><td>Connection does not exist</td></tr>
* <tr><td>08</td><td>Connection exception</td><td>004</td><td>SQL-server rejected establishment of SQL-connection</td></tr>
* <tr><td>08</td><td>Connection exception</td><td>006</td><td>Connection failure</td></tr>
* <tr><td>08</td><td>Connection exception</td><td>007</td><td>Transaction resolution unknown</td></tr>
* <tr><td>09</td><td>Triggered action exception</td><td>000</td><td>No subclass</td></tr>
* <tr><td>0A</td><td>Feature not supported</td><td>000</td><td>No subclass</td></tr>
* <tr><td>0A</td><td>Feature not supported</td><td>001</td><td>Multiple server transactions</td></tr>
* <tr><td>0D</td><td>Invalid target type specification</td><td>000</td><td>No subclass</td></tr>
* <tr><td>0E</td><td>Invalid schema name list specification</td><td>000</td><td>No subclass</td></tr>
* <tr><td>0F</td><td>Locator exception</td><td>000</td><td>No subclass</td></tr>
* <tr><td>0F</td><td>Locator exception</td><td>001</td><td>Invalid specification</td></tr>
* <tr><td>0L</td><td>Invalid grantor</td><td>000</td><td>No subclass</td></tr>
* <tr><td>0M</td><td>Invalid SQL-invoked procedure reference</td><td>000</td><td>No subclass</td></tr>
* <tr><td>0P</td><td>Invalid role specification</td><td>000</td><td>No subclass</td></tr>
* <tr><td>0S</td><td>Invalid transform group name specification</td><td>000</td><td>No subclass</td></tr>
* <tr><td>0T</td><td>Target table disagrees with cursor specification</td><td>000</td><td>No subclass</td></tr>
* <tr><td>0U</td><td>Attempt to assign to non-updatable column</td><td>000</td><td>No subclass</td></tr>
* <tr><td>0V</td><td>Attempt to assign to ordering column</td><td>000</td><td>No subclass</td></tr>
* <tr><td>0W</td><td>Prohibited statement encountered during trigger execution</td><td>000</td><td>No subclass</td></tr>
* <tr><td>0W</td><td>Prohibited statement encountered during trigger execution</td><td>001</td><td>Modify table modified by data change delta table</td></tr>
* <tr><td>0Z</td><td>Diagnostics exception</td><td>000</td><td>No subclass</td></tr>
* <tr><td>0Z</td><td>Diagnostics exception</td><td>001</td><td>Maximum number of stacked diagnostics areas exceeded</td></tr>
* <tr><td>21</td><td>Cardinality violation</td><td>000</td><td>No subclass</td></tr>
* <tr><td>22</td><td>Data exception</td><td>000</td><td>No subclass</td></tr>
* <tr><td>22</td><td>Data exception</td><td>001</td><td>String data, right truncation</td></tr>
* <tr><td>22</td><td>Data exception</td><td>002</td><td>Null value, no indicator parameter</td></tr>
* <tr><td>22</td><td>Data exception</td><td>003</td><td>Numeric value out of range</td></tr>
* <tr><td>22</td><td>Data exception</td><td>004</td><td>Null value not allowed</td></tr>
* <tr><td>22</td><td>Data exception</td><td>005</td><td>Error in assignment</td></tr>
* <tr><td>22</td><td>Data exception</td><td>006</td><td>Invalid interval format</td></tr>
* <tr><td>22</td><td>Data exception</td><td>007</td><td>Invalid datetime format</td></tr>
* <tr><td>22</td><td>Data exception</td><td>008</td><td>Datetime field overflow</td></tr>
* <tr><td>22</td><td>Data exception</td><td>009</td><td>Invalid time zone displacement value</td></tr>
* <tr><td>22</td><td>Data exception</td><td>00B</td><td>Escape character conflict</td></tr>
* <tr><td>22</td><td>Data exception</td><td>00C</td><td>Invalid use of escape character</td></tr>
* <tr><td>22</td><td>Data exception</td><td>00D</td><td>Invalid escape octet</td></tr>
* <tr><td>22</td><td>Data exception</td><td>00E</td><td>Null value in array target</td></tr>
* <tr><td>22</td><td>Data exception</td><td>00F</td><td>Zero-length character string</td></tr>
* <tr><td>22</td><td>Data exception</td><td>00G</td><td>Most specific type mismatch</td></tr>
* <tr><td>22</td><td>Data exception</td><td>00H</td><td>Sequence generator limit exceeded</td></tr>
* <tr><td>22</td><td>Data exception</td><td>00P</td><td>Interval value out of range</td></tr>
* <tr><td>22</td><td>Data exception</td><td>00Q</td><td>Multiset value overflow</td></tr>
* <tr><td>22</td><td>Data exception</td><td>010</td><td>Invalid indicator parameter value</td></tr>
* <tr><td>22</td><td>Data exception</td><td>011</td><td>Substring error</td></tr>
* <tr><td>22</td><td>Data exception</td><td>012</td><td>Division by zero</td></tr>
* <tr><td>22</td><td>Data exception</td><td>013</td><td>Invalid preceding or following size in window function</td></tr>
* <tr><td>22</td><td>Data exception</td><td>014</td><td>Invalid argument for NTILE function</td></tr>
* <tr><td>22</td><td>Data exception</td><td>015</td><td>Interval field overflow</td></tr>
* <tr><td>22</td><td>Data exception</td><td>016</td><td>Invalid argument for NTH_VALUE function</td></tr>
* <tr><td>22</td><td>Data exception</td><td>018</td><td>Invalid character value for cast</td></tr>
* <tr><td>22</td><td>Data exception</td><td>019</td><td>Invalid escape character</td></tr>
* <tr><td>22</td><td>Data exception</td><td>01B</td><td>Invalid regular expression</td></tr>
* <tr><td>22</td><td>Data exception</td><td>01C</td><td>Null row not permitted in table</td></tr>
* <tr><td>22</td><td>Data exception</td><td>01E</td><td>Invalid argument for natural logarithm</td></tr>
* <tr><td>22</td><td>Data exception</td><td>01F</td><td>Invalid argument for power function</td></tr>
* <tr><td>22</td><td>Data exception</td><td>01G</td><td>Invalid argument for width bucket function</td></tr>
* <tr><td>22</td><td>Data exception</td><td>01H</td><td>Invalid row version</td></tr>
* <tr><td>22</td><td>Data exception</td><td>01S</td><td>Invalid XQuery regular expression</td></tr>
* <tr><td>22</td><td>Data exception</td><td>01T</td><td>Invalid XQuery option flag</td></tr>
* <tr><td>22</td><td>Data exception</td><td>01U</td><td>Attempt to replace a zero-length string</td></tr>
* <tr><td>22</td><td>Data exception</td><td>01V</td><td>Invalid XQuery replacement string</td></tr>
* <tr><td>22</td><td>Data exception</td><td>01W</td><td>Invalid row count in fetch first clause</td></tr>
* <tr><td>22</td><td>Data exception</td><td>01X</td><td>Invalid row count in result offset clause</td></tr>
* <tr><td>22</td><td>Data exception</td><td>020</td><td>Invalid period value</td></tr>
* <tr><td>22</td><td>Data exception</td><td>021</td><td>Character not in repertoire</td></tr>
* <tr><td>22</td><td>Data exception</td><td>022</td><td>Indicator overflow</td></tr>
* <tr><td>22</td><td>Data exception</td><td>023</td><td>Invalid parameter value</td></tr>
* <tr><td>22</td><td>Data exception</td><td>024</td><td>Unterminated C string</td></tr>
* <tr><td>22</td><td>Data exception</td><td>025</td><td>Invalid escape sequence</td></tr>
* <tr><td>22</td><td>Data exception</td><td>026</td><td>String data, length mismatch</td></tr>
* <tr><td>22</td><td>Data exception</td><td>027</td><td>Trim error</td></tr>
* <tr><td>22</td><td>Data exception</td><td>029</td><td>Noncharacter in UCS string</td></tr>
* <tr><td>22</td><td>Data exception</td><td>02D</td><td>Null value substituted for mutator subject parameter</td></tr>
* <tr><td>22</td><td>Data exception</td><td>02E</td><td>Array element error</td></tr>
* <tr><td>22</td><td>Data exception</td><td>02F</td><td>Array data, right truncation</td></tr>
* <tr><td>22</td><td>Data exception</td><td>02G</td><td>Invalid repeat argument in sample clause</td></tr>
* <tr><td>22</td><td>Data exception</td><td>02H</td><td>Invalid sample size</td></tr>
* <tr><td>23</td><td>Integrity constraint violation</td><td>000</td><td>No subclass</td></tr>
* <tr><td>23</td><td>Integrity constraint violation</td><td>001</td><td>Restrict violation</td></tr>
* <tr><td>24</td><td>Invalid cursor state</td><td>000</td><td>No subclass</td></tr>
* <tr><td>25</td><td>Invalid transaction state</td><td>000</td><td>No subclass</td></tr>
* <tr><td>25</td><td>Invalid transaction state</td><td>001</td><td>Active SQL-transaction</td></tr>
* <tr><td>25</td><td>Invalid transaction state</td><td>002</td><td>Branch transaction already active</td></tr>
* <tr><td>25</td><td>Invalid transaction state</td><td>003</td><td>Inappropriate access mode for branch transaction</td></tr>
* <tr><td>25</td><td>Invalid transaction state</td><td>004</td><td>Inappropriate isolation level for branch transaction</td></tr>
* <tr><td>25</td><td>Invalid transaction state</td><td>005</td><td>No active SQL-transaction for branch transaction</td></tr>
* <tr><td>25</td><td>Invalid transaction state</td><td>006</td><td>Read-only SQL-transaction</td></tr>
* <tr><td>25</td><td>Invalid transaction state</td><td>007</td><td>Schema and data statement mixing not supported</td></tr>
* <tr><td>25</td><td>Invalid transaction state</td><td>008</td><td>Held cursor requires same isolation level</td></tr>
* <tr><td>26</td><td>Invalid SQL statement name</td><td>000</td><td>No subclass</td></tr>
* <tr><td>27</td><td>Triggered data change violation</td><td>000</td><td>No subclass</td></tr>
* <tr><td>27</td><td>Triggered data change violation</td><td>001</td><td>Modify table modified by data change delta table</td></tr>
* <tr><td>28</td><td>Invalid authorization specification</td><td>000</td><td>No subclass</td></tr>
* <tr><td>2B</td><td>Dependent privilege descriptors still exist</td><td>000</td><td>No subclass</td></tr>
* <tr><td>2C</td><td>Invalid character set name</td><td>000</td><td>No subclass</td></tr>
* <tr><td>2C</td><td>Invalid character set name</td><td>001</td><td>Cannot drop SQL-session default character set</td></tr>
* <tr><td>2D</td><td>Invalid transaction termination</td><td>000</td><td>No subclass</td></tr>
* <tr><td>2E</td><td>Invalid connection name</td><td>000</td><td>No subclass</td></tr>
* <tr><td>2F</td><td>SQL routine exception</td><td>000</td><td>No subclass</td></tr>
* <tr><td>2F</td><td>SQL routine exception</td><td>002</td><td>Modifying SQL-data not permitted</td></tr>
* <tr><td>2F</td><td>SQL routine exception</td><td>003</td><td>Prohibited SQL-statement attempted</td></tr>
* <tr><td>2F</td><td>SQL routine exception</td><td>004</td><td>Reading SQL-data not permitted</td></tr>
* <tr><td>2F</td><td>SQL routine exception</td><td>005</td><td>Function executed no return statement</td></tr>
* <tr><td>2H</td><td>Invalid collation name</td><td>000</td><td>No subclass</td></tr>
* <tr><td>30</td><td>Invalid SQL statement identifier</td><td>000</td><td>No subclass</td></tr>
* <tr><td>33</td><td>Invalid SQL descriptor name</td><td>000</td><td>No subclass</td></tr>
* <tr><td>34</td><td>Invalid cursor name</td><td>000</td><td>No subclass</td></tr>
* <tr><td>35</td><td>Invalid condition number</td><td>000</td><td>No subclass</td></tr>
* <tr><td>36</td><td>Cursor sensitivity exception</td><td>000</td><td>No subclass</td></tr>
* <tr><td>36</td><td>Cursor sensitivity exception</td><td>001</td><td>request rejected</td></tr>
* <tr><td>36</td><td>Cursor sensitivity exception</td><td>002</td><td>request failed</td></tr>
* <tr><td>38</td><td>External routine exception</td><td>000</td><td>No subclass</td></tr>
* <tr><td>38</td><td>External routine exception</td><td>001</td><td>Containing SQL not permitted</td></tr>
* <tr><td>38</td><td>External routine exception</td><td>002</td><td>Modifying SQL-data not permitted</td></tr>
* <tr><td>38</td><td>External routine exception</td><td>003</td><td>Prohibited SQL-statement attempted</td></tr>
* <tr><td>38</td><td>External routine exception</td><td>004</td><td>Reading SQL-data not permitted</td></tr>
* <tr><td>39</td><td>External routine invocation exception</td><td>000</td><td>No subclass</td></tr>
* <tr><td>39</td><td>External routine invocation exception</td><td>004</td><td>Null value not allowed</td></tr>
* <tr><td>3B</td><td>Savepoint exception</td><td>000</td><td>No subclass</td></tr>
* <tr><td>3B</td><td>Savepoint exception</td><td>001</td><td>Invalid specification</td></tr>
* <tr><td>3B</td><td>Savepoint exception</td><td>002</td><td>Too many</td></tr>
* <tr><td>3C</td><td>Ambiguous cursor name</td><td>000</td><td>No subclass</td></tr>
* <tr><td>3D</td><td>Invalid catalog name</td><td>000</td><td>No subclass</td></tr>
* <tr><td>3F</td><td>Invalid schema name</td><td>000</td><td>No subclass</td></tr>
* <tr><td>40</td><td>Transaction rollback</td><td>000</td><td>No subclass</td></tr>
* <tr><td>40</td><td>Transaction rollback</td><td>001</td><td>Serialization failure</td></tr>
* <tr><td>40</td><td>Transaction rollback</td><td>002</td><td>Integrity constraint violation</td></tr>
* <tr><td>40</td><td>Transaction rollback</td><td>003</td><td>Statement completion unknown</td></tr>
* <tr><td>40</td><td>Transaction rollback</td><td>004</td><td>Triggered action exception</td></tr>
* <tr><td>42</td><td>Syntax error or access rule violation</td><td>000</td><td>No subclass</td></tr>
* <tr><td>44</td><td>With check option violation</td><td>000</td><td>No subclass</td></tr>
* <tr><td>HZ</td><td>Remote database access</td><td>000</td><td>No subclass</td></tr>
* </table>
*
* @author Lukas Eder
*/
public enum SQLStateSubclass {
C00000_NO_SUBCLASS(C00_SUCCESSFUL_COMPLETION, "000"),
C01000_NO_SUBCLASS(C01_WARNING, "000"),
C01001_CURSOR_OPERATION_CONFLICT(C01_WARNING, "001"),
C01002_DISCONNECT_ERROR(C01_WARNING, "002"),
C01003_NULL_VALUE_ELIMINATED_IN_SET_FUNCTION(C01_WARNING, "003"),
C01004_STRING_DATA_RIGHT_TRUNCATION(C01_WARNING, "004"),
C01005_INSUFFICIENT_ITEM_DESCRIPTOR_AREAS(C01_WARNING, "005"),
C01006_PRIVILEGE_NOT_REVOKED(C01_WARNING, "006"),
C01007_PRIVILEGE_NOT_GRANTED(C01_WARNING, "007"),
C01009_SEARCH_CONDITION_TOO_LONG_FOR_INFORMATION_SCHEMA(C01_WARNING, "009"),
C0100A_QUERY_EXPRESSION_TOO_LONG_FOR_INFORMATION_SCHEMA(C01_WARNING, "00A"),
C0100B_DEFAULT_VALUE_TOO_LONG_FOR_INFORMATION_SCHEMA(C01_WARNING, "00B"),
C0100C_RESULT_SETS_RETURNED(C01_WARNING, "00C"),
C0100D_ADDITIONAL_RESULT_SETS_RETURNED(C01_WARNING, "00D"),
C0100E_ATTEMPT_TO_RETURN_TOO_MANY_RESULT_SETS(C01_WARNING, "00E"),
C0100F_STATEMENT_TOO_LONG_FOR_INFORMATION_SCHEMA(C01_WARNING, "00F"),
C01012_INVALID_NUMBER_OF_CONDITIONS(C01_WARNING, "012"),
C0102F_ARRAY_DATA_RIGHT_TRUNCATION(C01_WARNING, "02F"),
C02000_NO_SUBCLASS(C02_NO_DATA, "000"),
C02001_NO_ADDITIONAL_RESULT_SETS_RETURNED(C02_NO_DATA, "001"),
C07000_NO_SUBCLASS(C07_DYNAMIC_SQL_ERROR, "000"),
C07001_USING_CLAUSE_DOES_NOT_MATCH_DYNAMIC_PARAMETER_SPECIFICATIONS(C07_DYNAMIC_SQL_ERROR, "001"),
C07002_USING_CLAUSE_DOES_NOT_MATCH_TARGET_SPECIFICATIONS(C07_DYNAMIC_SQL_ERROR, "002"),
C07003_CURSOR_SPECIFICATION_CANNOT_BE_EXECUTED(C07_DYNAMIC_SQL_ERROR, "003"),
C07004_USING_CLAUSE_REQUIRED_FOR_DYNAMIC_PARAMETERS(C07_DYNAMIC_SQL_ERROR, "004"),
C07005_PREPARED_STATEMENT_NOT_A_CURSOR_SPECIFICATION(C07_DYNAMIC_SQL_ERROR, "005"),
C07006_RESTRICTED_DATA_TYPE_ATTRIBUTE_VIOLATION(C07_DYNAMIC_SQL_ERROR, "006"),
C07007_USING_CLAUSE_REQUIRED_FOR_RESULT_FIELDS(C07_DYNAMIC_SQL_ERROR, "007"),
C07008_INVALID_DESCRIPTOR_COUNT(C07_DYNAMIC_SQL_ERROR, "008"),
C07009_INVALID_DESCRIPTOR_INDEX(C07_DYNAMIC_SQL_ERROR, "009"),
C0700B_DATA_TYPE_TRANSFORM_FUNCTION_VIOLATION(C07_DYNAMIC_SQL_ERROR, "00B"),
C0700C_UNDEFINED_DATA_VALUE(C07_DYNAMIC_SQL_ERROR, "00C"),
C0700D_INVALID_DATA_TARGET(C07_DYNAMIC_SQL_ERROR, "00D"),
C0700E_INVALID_LEVEL_VALUE(C07_DYNAMIC_SQL_ERROR, "00E"),
C0700F_INVALID_DATETIME_INTERVAL_CODE(C07_DYNAMIC_SQL_ERROR, "00F"),
C08000_NO_SUBCLASS(C08_CONNECTION_EXCEPTION, "000"),
C08001_SQL_CLIENT_UNABLE_TO_ESTABLISH_SQL_CONNECTION(C08_CONNECTION_EXCEPTION, "001"),
C08002_CONNECTION_NAME_IN_USE(C08_CONNECTION_EXCEPTION, "002"),
C08003_CONNECTION_DOES_NOT_EXIST(C08_CONNECTION_EXCEPTION, "003"),
C08004_SQL_SERVER_REJECTED_ESTABLISHMENT_OF_SQL_CONNECTION(C08_CONNECTION_EXCEPTION, "004"),
C08006_CONNECTION_FAILURE(C08_CONNECTION_EXCEPTION, "006"),
C08007_TRANSACTION_RESOLUTION_UNKNOWN(C08_CONNECTION_EXCEPTION, "007"),
C09000_NO_SUBCLASS(C09_TRIGGERED_ACTION_EXCEPTION, "000"),
C0A000_NO_SUBCLASS(C0A_FEATURE_NOT_SUPPORTED, "000"),
C0A001_MULTIPLE_SERVER_TRANSACTIONS(C0A_FEATURE_NOT_SUPPORTED, "001"),
C0D000_NO_SUBCLASS(C0D_INVALID_TARGET_TYPE_SPECIFICATION, "000"),
C0E000_NO_SUBCLASS(C0E_INVALID_SCHEMA_NAME_LIST_SPECIFICATION, "000"),
C0F000_NO_SUBCLASS(C0F_LOCATOR_EXCEPTION, "000"),
C0F001_INVALID_SPECIFICATION(C0F_LOCATOR_EXCEPTION, "001"),
C0L000_NO_SUBCLASS(C0L_INVALID_GRANTOR, "000"),
C0M000_NO_SUBCLASS(C0M_INVALID_SQL_INVOKED_PROCEDURE_REFERENCE, "000"),
C0P000_NO_SUBCLASS(C0P_INVALID_ROLE_SPECIFICATION, "000"),
C0S000_NO_SUBCLASS(C0S_INVALID_TRANSFORM_GROUP_NAME_SPECIFICATION, "000"),
C0T000_NO_SUBCLASS(C0T_TARGET_TABLE_DISAGREES_WITH_CURSOR_SPECIFICATION, "000"),
C0U000_NO_SUBCLASS(C0U_ATTEMPT_TO_ASSIGN_TO_NON_UPDATABLE_COLUMN, "000"),
C0V000_NO_SUBCLASS(C0V_ATTEMPT_TO_ASSIGN_TO_ORDERING_COLUMN, "000"),
C0W000_NO_SUBCLASS(C0W_PROHIBITED_STATEMENT_ENCOUNTERED_DURING_TRIGGER_EXECUTION, "000"),
C0W001_MODIFY_TABLE_MODIFIED_BY_DATA_CHANGE_DELTA_TABLE(C0W_PROHIBITED_STATEMENT_ENCOUNTERED_DURING_TRIGGER_EXECUTION, "001"),
C0Z000_NO_SUBCLASS(C0Z_DIAGNOSTICS_EXCEPTION, "000"),
C0Z001_MAXIMUM_NUMBER_OF_STACKED_DIAGNOSTICS_AREAS_EXCEEDED(C0Z_DIAGNOSTICS_EXCEPTION, "001"),
C21000_NO_SUBCLASS(C21_CARDINALITY_VIOLATION, "000"),
C22000_NO_SUBCLASS(C22_DATA_EXCEPTION, "000"),
C22001_STRING_DATA_RIGHT_TRUNCATION(C22_DATA_EXCEPTION, "001"),
C22002_NULL_VALUE_NO_INDICATOR_PARAMETER(C22_DATA_EXCEPTION, "002"),
C22003_NUMERIC_VALUE_OUT_OF_RANGE(C22_DATA_EXCEPTION, "003"),
C22004_NULL_VALUE_NOT_ALLOWED(C22_DATA_EXCEPTION, "004"),
C22005_ERROR_IN_ASSIGNMENT(C22_DATA_EXCEPTION, "005"),
C22006_INVALID_INTERVAL_FORMAT(C22_DATA_EXCEPTION, "006"),
C22007_INVALID_DATETIME_FORMAT(C22_DATA_EXCEPTION, "007"),
C22008_DATETIME_FIELD_OVERFLOW(C22_DATA_EXCEPTION, "008"),
C22009_INVALID_TIME_ZONE_DISPLACEMENT_VALUE(C22_DATA_EXCEPTION, "009"),
C2200B_ESCAPE_CHARACTER_CONFLICT(C22_DATA_EXCEPTION, "00B"),
C2200C_INVALID_USE_OF_ESCAPE_CHARACTER(C22_DATA_EXCEPTION, "00C"),
C2200D_INVALID_ESCAPE_OCTET(C22_DATA_EXCEPTION, "00D"),
C2200E_NULL_VALUE_IN_ARRAY_TARGET(C22_DATA_EXCEPTION, "00E"),
C2200F_ZERO_LENGTH_CHARACTER_STRING(C22_DATA_EXCEPTION, "00F"),
C2200G_MOST_SPECIFIC_TYPE_MISMATCH(C22_DATA_EXCEPTION, "00G"),
C2200H_SEQUENCE_GENERATOR_LIMIT_EXCEEDED(C22_DATA_EXCEPTION, "00H"),
C2200P_INTERVAL_VALUE_OUT_OF_RANGE(C22_DATA_EXCEPTION, "00P"),
C2200Q_MULTISET_VALUE_OVERFLOW(C22_DATA_EXCEPTION, "00Q"),
C22010_INVALID_INDICATOR_PARAMETER_VALUE(C22_DATA_EXCEPTION, "010"),
C22011_SUBSTRING_ERROR(C22_DATA_EXCEPTION, "011"),
C22012_DIVISION_BY_ZERO(C22_DATA_EXCEPTION, "012"),
C22013_INVALID_PRECEDING_OR_FOLLOWING_SIZE_IN_WINDOW_FUNCTION(C22_DATA_EXCEPTION, "013"),
C22014_INVALID_ARGUMENT_FOR_NTILE_FUNCTION(C22_DATA_EXCEPTION, "014"),
C22015_INTERVAL_FIELD_OVERFLOW(C22_DATA_EXCEPTION, "015"),
C22016_INVALID_ARGUMENT_FOR_NTH_VALUE_FUNCTION(C22_DATA_EXCEPTION, "016"),
C22018_INVALID_CHARACTER_VALUE_FOR_CAST(C22_DATA_EXCEPTION, "018"),
C22019_INVALID_ESCAPE_CHARACTER(C22_DATA_EXCEPTION, "019"),
C2201B_INVALID_REGULAR_EXPRESSION(C22_DATA_EXCEPTION, "01B"),
C2201C_NULL_ROW_NOT_PERMITTED_IN_TABLE(C22_DATA_EXCEPTION, "01C"),
C2201E_INVALID_ARGUMENT_FOR_NATURAL_LOGARITHM(C22_DATA_EXCEPTION, "01E"),
C2201F_INVALID_ARGUMENT_FOR_POWER_FUNCTION(C22_DATA_EXCEPTION, "01F"),
C2201G_INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION(C22_DATA_EXCEPTION, "01G"),
C2201H_INVALID_ROW_VERSION(C22_DATA_EXCEPTION, "01H"),
C2201S_INVALID_XQUERY_REGULAR_EXPRESSION(C22_DATA_EXCEPTION, "01S"),
C2201T_INVALID_XQUERY_OPTION_FLAG(C22_DATA_EXCEPTION, "01T"),
C2201U_ATTEMPT_TO_REPLACE_A_ZERO_LENGTH_STRING(C22_DATA_EXCEPTION, "01U"),
C2201V_INVALID_XQUERY_REPLACEMENT_STRING(C22_DATA_EXCEPTION, "01V"),
C2201W_INVALID_ROW_COUNT_IN_FETCH_FIRST_CLAUSE(C22_DATA_EXCEPTION, "01W"),
C2201X_INVALID_ROW_COUNT_IN_RESULT_OFFSET_CLAUSE(C22_DATA_EXCEPTION, "01X"),
C22020_INVALID_PERIOD_VALUE(C22_DATA_EXCEPTION, "020"),
C22021_CHARACTER_NOT_IN_REPERTOIRE(C22_DATA_EXCEPTION, "021"),
C22022_INDICATOR_OVERFLOW(C22_DATA_EXCEPTION, "022"),
C22023_INVALID_PARAMETER_VALUE(C22_DATA_EXCEPTION, "023"),
C22024_UNTERMINATED_C_STRING(C22_DATA_EXCEPTION, "024"),
C22025_INVALID_ESCAPE_SEQUENCE(C22_DATA_EXCEPTION, "025"),
C22026_STRING_DATA_LENGTH_MISMATCH(C22_DATA_EXCEPTION, "026"),
C22027_TRIM_ERROR(C22_DATA_EXCEPTION, "027"),
C22029_NONCHARACTER_IN_UCS_STRING(C22_DATA_EXCEPTION, "029"),
C2202D_NULL_VALUE_SUBSTITUTED_FOR_MUTATOR_SUBJECT_PARAMETER(C22_DATA_EXCEPTION, "02D"),
C2202E_ARRAY_ELEMENT_ERROR(C22_DATA_EXCEPTION, "02E"),
C2202F_ARRAY_DATA_RIGHT_TRUNCATION(C22_DATA_EXCEPTION, "02F"),
C2202G_INVALID_REPEAT_ARGUMENT_IN_SAMPLE_CLAUSE(C22_DATA_EXCEPTION, "02G"),
C2202H_INVALID_SAMPLE_SIZE(C22_DATA_EXCEPTION, "02H"),
C23000_NO_SUBCLASS(C23_INTEGRITY_CONSTRAINT_VIOLATION, "000"),
C23001_RESTRICT_VIOLATION(C23_INTEGRITY_CONSTRAINT_VIOLATION, "001"),
C24000_NO_SUBCLASS(C24_INVALID_CURSOR_STATE, "000"),
C25000_NO_SUBCLASS(C25_INVALID_TRANSACTION_STATE, "000"),
C25001_ACTIVE_SQL_TRANSACTION(C25_INVALID_TRANSACTION_STATE, "001"),
C25002_BRANCH_TRANSACTION_ALREADY_ACTIVE(C25_INVALID_TRANSACTION_STATE, "002"),
C25003_INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION(C25_INVALID_TRANSACTION_STATE, "003"),
C25004_INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION(C25_INVALID_TRANSACTION_STATE, "004"),
C25005_NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION(C25_INVALID_TRANSACTION_STATE, "005"),
C25006_READ_ONLY_SQL_TRANSACTION(C25_INVALID_TRANSACTION_STATE, "006"),
C25007_SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED(C25_INVALID_TRANSACTION_STATE, "007"),
C25008_HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL(C25_INVALID_TRANSACTION_STATE, "008"),
C26000_NO_SUBCLASS(C26_INVALID_SQL_STATEMENT_NAME, "000"),
C27000_NO_SUBCLASS(C27_TRIGGERED_DATA_CHANGE_VIOLATION, "000"),
C27001_MODIFY_TABLE_MODIFIED_BY_DATA_CHANGE_DELTA_TABLE(C27_TRIGGERED_DATA_CHANGE_VIOLATION, "001"),
C28000_NO_SUBCLASS(C28_INVALID_AUTHORIZATION_SPECIFICATION, "000"),
C2B000_NO_SUBCLASS(C2B_DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST, "000"),
C2C000_NO_SUBCLASS(C2C_INVALID_CHARACTER_SET_NAME, "000"),
C2C001_CANNOT_DROP_SQL_SESSION_DEFAULT_CHARACTER_SET(C2C_INVALID_CHARACTER_SET_NAME, "001"),
C2D000_NO_SUBCLASS(C2D_INVALID_TRANSACTION_TERMINATION, "000"),
C2E000_NO_SUBCLASS(C2E_INVALID_CONNECTION_NAME, "000"),
C2F000_NO_SUBCLASS(C2F_SQL_ROUTINE_EXCEPTION, "000"),
C2F002_MODIFYING_SQL_DATA_NOT_PERMITTED(C2F_SQL_ROUTINE_EXCEPTION, "002"),
C2F003_PROHIBITED_SQL_STATEMENT_ATTEMPTED(C2F_SQL_ROUTINE_EXCEPTION, "003"),
C2F004_READING_SQL_DATA_NOT_PERMITTED(C2F_SQL_ROUTINE_EXCEPTION, "004"),
C2F005_FUNCTION_EXECUTED_NO_RETURN_STATEMENT(C2F_SQL_ROUTINE_EXCEPTION, "005"),
C2H000_NO_SUBCLASS(C2H_INVALID_COLLATION_NAME, "000"),
C30000_NO_SUBCLASS(C30_INVALID_SQL_STATEMENT_IDENTIFIER, "000"),
C33000_NO_SUBCLASS(C33_INVALID_SQL_DESCRIPTOR_NAME, "000"),
C34000_NO_SUBCLASS(C34_INVALID_CURSOR_NAME, "000"),
C35000_NO_SUBCLASS(C35_INVALID_CONDITION_NUMBER, "000"),
C36000_NO_SUBCLASS(C36_CURSOR_SENSITIVITY_EXCEPTION, "000"),
C36001_REQUEST_REJECTED(C36_CURSOR_SENSITIVITY_EXCEPTION, "001"),
C36002_REQUEST_FAILED(C36_CURSOR_SENSITIVITY_EXCEPTION, "002"),
C38000_NO_SUBCLASS(C38_EXTERNAL_ROUTINE_EXCEPTION, "000"),
C38001_CONTAINING_SQL_NOT_PERMITTED(C38_EXTERNAL_ROUTINE_EXCEPTION, "001"),
C38002_MODIFYING_SQL_DATA_NOT_PERMITTED(C38_EXTERNAL_ROUTINE_EXCEPTION, "002"),
C38003_PROHIBITED_SQL_STATEMENT_ATTEMPTED(C38_EXTERNAL_ROUTINE_EXCEPTION, "003"),
C38004_READING_SQL_DATA_NOT_PERMITTED(C38_EXTERNAL_ROUTINE_EXCEPTION, "004"),
C39000_NO_SUBCLASS(C39_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION, "000"),
C39004_NULL_VALUE_NOT_ALLOWED(C39_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION, "004"),
C3B000_NO_SUBCLASS(C3B_SAVEPOINT_EXCEPTION, "000"),
C3B001_INVALID_SPECIFICATION(C3B_SAVEPOINT_EXCEPTION, "001"),
C3B002_TOO_MANY(C3B_SAVEPOINT_EXCEPTION, "002"),
C3C000_NO_SUBCLASS(C3C_AMBIGUOUS_CURSOR_NAME, "000"),
C3D000_NO_SUBCLASS(C3D_INVALID_CATALOG_NAME, "000"),
C3F000_NO_SUBCLASS(C3F_INVALID_SCHEMA_NAME, "000"),
C40000_NO_SUBCLASS(C40_TRANSACTION_ROLLBACK, "000"),
C40001_SERIALIZATION_FAILURE(C40_TRANSACTION_ROLLBACK, "001"),
C40002_INTEGRITY_CONSTRAINT_VIOLATION(C40_TRANSACTION_ROLLBACK, "002"),
C40003_STATEMENT_COMPLETION_UNKNOWN(C40_TRANSACTION_ROLLBACK, "003"),
C40004_TRIGGERED_ACTION_EXCEPTION(C40_TRANSACTION_ROLLBACK, "004"),
C42000_NO_SUBCLASS(C42_SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION, "000"),
CHZ000_NO_SUBCLASS(CHZ_REMOTE_DATABASE_ACCESS, "000"),
OTHER(SQLStateClass.OTHER, ""),
NONE(SQLStateClass.OTHER, ""),
;
private static final Map<String, SQLStateSubclass> lookup = new HashMap<>();
private final SQLStateClass clazz;
private final String subclass;
static {
for (SQLStateSubclass clazz : SQLStateSubclass.values()) {
lookup.put(clazz.sqlStateClassName() + clazz.subclass, clazz);
}
}
private SQLStateSubclass(SQLStateClass clazz, String subclass) {
this.clazz = clazz;
this.subclass = subclass;
}
public String sqlStateSubclassName() {
return subclass;
}
public SQLStateClass sqlStateClass() {
return clazz;
}
public String sqlStateClassName() {
return sqlStateClass().className();
}
public static SQLStateSubclass fromCode(String code) {
if (code == null || code.length() != 5)
return SQLStateSubclass.OTHER;
SQLStateSubclass result;
result = lookup.get(code);
if (result != null)
return result;
result = lookup.get(code.substring(0, 2) + "000");
if (result != null)
return result;
else
return SQLStateSubclass.OTHER;
}
static SQLStateSubclass fromSQLiteVendorCode(int errorCode) {
// See https://sqlite.org/c3ref/c_abort.html
// And https://sqlite.org/c3ref/c_abort_rollback.html
switch (errorCode & 0xFF) {
case 0: return C00000_NO_SUBCLASS;
case 3: return C42000_NO_SUBCLASS;
case 18: return C22001_STRING_DATA_RIGHT_TRUNCATION;
case 19: return C23000_NO_SUBCLASS;
case 20: return C22000_NO_SUBCLASS;
case 27: return C01000_NO_SUBCLASS;
case 28: return C01000_NO_SUBCLASS;
}
return SQLStateSubclass.OTHER;
}
}