001: /*
002:
003: Derby - Class org.apache.derby.client.am.SQLExceptionFactory40
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to You under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021: package org.apache.derby.client.am;
022:
023: import org.apache.derby.shared.common.reference.SQLState;
024: import org.apache.derby.shared.common.error.ExceptionSeverity;
025:
026: import java.sql.SQLDataException;
027: import java.sql.SQLException;
028: import java.sql.SQLFeatureNotSupportedException;
029: import java.sql.SQLIntegrityConstraintViolationException;
030: import java.sql.SQLInvalidAuthorizationSpecException;
031: import java.sql.SQLSyntaxErrorException;
032: import java.sql.SQLTransactionRollbackException;
033: import java.sql.SQLTransientConnectionException;
034:
035: /**
036: * SQLException factory class to create jdbc 40 exception classes
037: */
038:
039: public class SQLExceptionFactory40 extends SQLExceptionFactory {
040:
041: // Important DRDA SQL States, from DRDA v3 spec, Section 8.2
042: // We have to consider these as well as the standard SQLState classes
043: // when choosing the right exception subclass
044: private static final String DRDA_CONVERSATION_TERMINATED = "58009";
045: private static final String DRDA_COMMAND_NOT_SUPPORTED = "58014";
046: private static final String DRDA_OBJECT_NOT_SUPPORTED = "58015";
047: private static final String DRDA_PARAM_NOT_SUPPORTED = "58016";
048: private static final String DRDA_VALUE_NOT_SUPPORTED = "58017";
049: private static final String DRDA_SQLTYPE_NOT_SUPPORTED = "56084";
050: private static final String DRDA_CONVERSION_NOT_SUPPORTED = "57017";
051: private static final String DRDA_REPLY_MSG_NOT_SUPPORTED = "58018";
052:
053: /**
054: * creates jdbc4.0 SQLException and its subclass based on sql state
055: *
056: * @param message description of the
057: * @param sqlState
058: * @param errCode derby error code
059: */
060: public SQLException getSQLException(String message,
061: String sqlState, int errCode) {
062: SQLException ex = null;
063: if (sqlState == null) {
064: ex = new SQLException(message, sqlState, errCode);
065: } else if (sqlState.startsWith(SQLState.CONNECTIVITY_PREFIX)
066: || errCode >= ExceptionSeverity.SESSION_SEVERITY) {
067: //none of the sqlstate supported by derby belongs to
068: //NonTransientConnectionException
069: ex = new SQLTransientConnectionException(message, sqlState,
070: errCode);
071: } else if (sqlState.startsWith(SQLState.SQL_DATA_PREFIX)) {
072: ex = new SQLDataException(message, sqlState, errCode);
073: } else if (sqlState
074: .startsWith(SQLState.INTEGRITY_VIOLATION_PREFIX)) {
075: ex = new SQLIntegrityConstraintViolationException(message,
076: sqlState, errCode);
077: } else if (sqlState.startsWith(SQLState.AUTHORIZATION_PREFIX)) {
078: ex = new SQLInvalidAuthorizationSpecException(message,
079: sqlState, errCode);
080: } else if (sqlState.startsWith(SQLState.TRANSACTION_PREFIX)
081: || errCode >= ExceptionSeverity.TRANSACTION_SEVERITY) {
082: ex = new SQLTransactionRollbackException(message, sqlState,
083: errCode);
084: } else if (sqlState.startsWith(SQLState.LSE_COMPILATION_PREFIX)) {
085: ex = new SQLSyntaxErrorException(message, sqlState, errCode);
086: } else if (sqlState.startsWith(SQLState.UNSUPPORTED_PREFIX)
087: || sqlState.equals(DRDA_COMMAND_NOT_SUPPORTED)
088: || sqlState.equals(DRDA_OBJECT_NOT_SUPPORTED)
089: || sqlState.equals(DRDA_PARAM_NOT_SUPPORTED)
090: || sqlState.equals(DRDA_VALUE_NOT_SUPPORTED)
091: || sqlState.equals(DRDA_SQLTYPE_NOT_SUPPORTED)
092: || sqlState.equals(DRDA_REPLY_MSG_NOT_SUPPORTED)) {
093: ex = new SQLFeatureNotSupportedException(message, sqlState,
094: errCode);
095: } else {
096: ex = new SQLException(message, sqlState, errCode);
097: }
098: return ex;
099: }
100: }
|