/*
* 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 java.util.HashMap;
import java.util.Map;
/**
* The class of the SQL state as specified by the SQL:2011 standard, or by individual
* vendors.
* <p>
* <table border="1">
* <tr><th>Class</th><th>Description</th></tr>
* <tr><td>00</td><td>Successful completion</td></tr>
* <tr><td>01</td><td>Warning</td></tr>
* <tr><td>02</td><td>No data</td></tr>
* <tr><td>07</td><td>Dynamic SQL Error</td></tr>
* <tr><td>08</td><td>Connection exception</td></tr>
* <tr><td>09</td><td>Triggered action exception</td></tr>
* <tr><td>0A</td><td>Feature not supported</td></tr>
* <tr><td>0D</td><td>Invalid target type specification</td></tr>
* <tr><td>0E</td><td>Invalid schema name list specification</td></tr>
* <tr><td>0F</td><td>Locator exception</td></tr>
* <tr><td>0L</td><td>Invalid grantor</td></tr>
* <tr><td>0M</td><td>Invalid SQL-invoked procedure reference</td></tr>
* <tr><td>0P</td><td>Invalid role specification</td></tr>
* <tr><td>0S</td><td>Invalid transform group name specification</td></tr>
* <tr><td>0T</td><td>Target table disagrees with cursor specification</td></tr>
* <tr><td>0U</td><td>Attempt to assign to non-updatable column</td></tr>
* <tr><td>0V</td><td>Attempt to assign to ordering column</td></tr>
* <tr><td>0W</td><td>Prohibited statement encountered during trigger execution</td></tr>
* <tr><td>0Z</td><td>Diagnostics exception</td></tr>
* <tr><td>21</td><td>Cardinality violation</td></tr>
* <tr><td>22</td><td>Data exception</td></tr>
* <tr><td>23</td><td>Integrity constraint violation</td></tr>
* <tr><td>24</td><td>Invalid cursor state</td></tr>
* <tr><td>25</td><td>Invalid transaction state</td></tr>
* <tr><td>26</td><td>Invalid SQL statement name</td></tr>
* <tr><td>27</td><td>Triggered data change violation</td></tr>
* <tr><td>28</td><td>Invalid authorization specification</td></tr>
* <tr><td>2B</td><td>Dependent privilege descriptors still exist</td></tr>
* <tr><td>2C</td><td>Invalid character set name</td></tr>
* <tr><td>2D</td><td>Invalid transaction termination</td></tr>
* <tr><td>2E</td><td>Invalid connection name</td></tr>
* <tr><td>2F</td><td>SQL routine exception</td></tr>
* <tr><td>2H</td><td>Invalid collation name</td></tr>
* <tr><td>30</td><td>Invalid SQL statement identifier</td></tr>
* <tr><td>33</td><td>Invalid SQL descriptor name</td></tr>
* <tr><td>34</td><td>Invalid cursor name</td></tr>
* <tr><td>35</td><td>Invalid condition number</td></tr>
* <tr><td>36</td><td>Cursor sensitivity exception</td></tr>
* <tr><td>38</td><td>External routine exception</td></tr>
* <tr><td>39</td><td>External routine invocation exception</td></tr>
* <tr><td>3B</td><td>Savepoint exception</td></tr>
* <tr><td>3C</td><td>Ambiguous cursor name</td></tr>
* <tr><td>3D</td><td>Invalid catalog name</td></tr>
* <tr><td>3F</td><td>Invalid schema name</td></tr>
* <tr><td>40</td><td>Transaction rollback</td></tr>
* <tr><td>42</td><td>Syntax error or access rule violation</td></tr>
* <tr><td>44</td><td>With check option violation</td></tr>
* <tr><td>HZ</td><td>Remote database access</td></tr>
* </table>
*
* @author Lukas Eder
*/
public enum SQLStateClass {
C00_SUCCESSFUL_COMPLETION("00"),
C01_WARNING("01"),
C02_NO_DATA("02"),
C07_DYNAMIC_SQL_ERROR("07"),
C08_CONNECTION_EXCEPTION("08"),
C09_TRIGGERED_ACTION_EXCEPTION("09"),
C0A_FEATURE_NOT_SUPPORTED("0A"),
C0D_INVALID_TARGET_TYPE_SPECIFICATION("0D"),
C0E_INVALID_SCHEMA_NAME_LIST_SPECIFICATION("0E"),
C0F_LOCATOR_EXCEPTION("0F"),
C0L_INVALID_GRANTOR("0L"),
C0M_INVALID_SQL_INVOKED_PROCEDURE_REFERENCE("0M"),
C0P_INVALID_ROLE_SPECIFICATION("0P"),
C0S_INVALID_TRANSFORM_GROUP_NAME_SPECIFICATION("0S"),
C0T_TARGET_TABLE_DISAGREES_WITH_CURSOR_SPECIFICATION("0T"),
C0U_ATTEMPT_TO_ASSIGN_TO_NON_UPDATABLE_COLUMN("0U"),
C0V_ATTEMPT_TO_ASSIGN_TO_ORDERING_COLUMN("0V"),
C0W_PROHIBITED_STATEMENT_ENCOUNTERED_DURING_TRIGGER_EXECUTION("0W"),
C0Z_DIAGNOSTICS_EXCEPTION("0Z"),
C21_CARDINALITY_VIOLATION("21"),
C22_DATA_EXCEPTION("22"),
C23_INTEGRITY_CONSTRAINT_VIOLATION("23"),
C24_INVALID_CURSOR_STATE("24"),
C25_INVALID_TRANSACTION_STATE("25"),
C26_INVALID_SQL_STATEMENT_NAME("26"),
C27_TRIGGERED_DATA_CHANGE_VIOLATION("27"),
C28_INVALID_AUTHORIZATION_SPECIFICATION("28"),
C2B_DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST("2B"),
C2C_INVALID_CHARACTER_SET_NAME("2C"),
C2D_INVALID_TRANSACTION_TERMINATION("2D"),
C2E_INVALID_CONNECTION_NAME("2E"),
C2F_SQL_ROUTINE_EXCEPTION("2F"),
C2H_INVALID_COLLATION_NAME("2H"),
C30_INVALID_SQL_STATEMENT_IDENTIFIER("30"),
C33_INVALID_SQL_DESCRIPTOR_NAME("33"),
C34_INVALID_CURSOR_NAME("34"),
C35_INVALID_CONDITION_NUMBER("35"),
C36_CURSOR_SENSITIVITY_EXCEPTION("36"),
C38_EXTERNAL_ROUTINE_EXCEPTION("38"),
C39_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION("39"),
C3B_SAVEPOINT_EXCEPTION("3B"),
C3C_AMBIGUOUS_CURSOR_NAME("3C"),
C3D_INVALID_CATALOG_NAME("3D"),
C3F_INVALID_SCHEMA_NAME("3F"),
C40_TRANSACTION_ROLLBACK("40"),
C42_SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION("42"),
CHZ_REMOTE_DATABASE_ACCESS("HZ"),
OTHER(""),
NONE("")
;
private static final Map<String, SQLStateClass> lookup = new HashMap<String, SQLStateClass>();
private final String className;
static {
for (SQLStateClass clazz : SQLStateClass.values()) {
lookup.put(clazz.className, clazz);
}
}
private SQLStateClass(String className) {
this.className = className;
}
public String className() {
return className;
}
public static SQLStateClass fromCode(String code) {
if (code == null || code.length() < 2)
return SQLStateClass.OTHER;
SQLStateClass result = lookup.get(code.substring(0, 2));
return result != null ? result : SQLStateClass.OTHER;
}
}